Name: series-workflow2fbsc Phase: Succeeded StartedAt: 2026-07-23 07:28:33 +0000 UTC FinishedAt: 2026-07-23 12:33:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2fbsc[0] Phase: Succeeded StartedAt: 2026-07-23 07:28:33 +0000 UTC FinishedAt: 2026-07-23 07:56:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2fbsc[0].run-triage Phase: Succeeded StartedAt: 2026-07-23 07:28:33 +0000 UTC FinishedAt: 2026-07-23 07:56:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "56d96fededd61192cd7cc8d2b0f36adfd59036c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "IP_VS_IPV6", "IP_VS_PROTO_TCP", "IP_VS_PROTO_UDP", "IP_VS_PROTO_SCTP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "56d96fededd61192cd7cc8d2b0f36adfd59036c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "IP_VS_IPV6", "IP_VS_PROTO_TCP", "IP_VS_PROTO_UDP", "IP_VS_PROTO_SCTP" ], "series_id": "50bb7c56-be69-4816-a006-ecbf0b0488a1" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_nat_icmp", "ip_vs_nat_icmp_v6", "handle_response_icmp", "ip_vs_out_icmp", "ip_vs_out_icmp_v6", "ip_vs_in_icmp", "ip_vs_in_icmp_v6", "ip_vs_forward_icmp", "sctp_csum_check", "tcp_csum_check", "udp_csum_check", "ip_vs_icmp_xmit", "ip_vs_icmp_xmit_v6" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIzIDA3OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O0lQX1ZTX0lQVjYmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVENQJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1VEUCYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19TQ1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfbmF0X2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfbmF0X2ljbXBfdjYmIzM0OywKICAgICYjMzQ7aGFuZGxlX3Jlc3BvbnNlX2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfb3V0X2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfb3V0X2ljbXBfdjYmIzM0OywKICAgICYjMzQ7aXBfdnNfaW5faWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19pbl9pY21wX3Y2JiMzNDssCiAgICAmIzM0O2lwX3ZzX2ZvcndhcmRfaWNtcCYjMzQ7LAogICAgJiMzNDtzY3RwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7dGNwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7dWRwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7aXBfdnNfaWNtcF94bWl0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2ljbXBfeG1pdF92NiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBJQ01QIE5BVCBoYW5kbGluZyBhbmQgY2hlY2tzdW0gdmFsaWRhdGlvbiBsb2dpYyBpbiBJUFZTLiBJdCBjaGFuZ2VzIGhvdyBJQ01QIHBhY2tldHMgYXJlIHByb2Nlc3NlZCwgTkFUZWQsIGFuZCB0cmFuc21pdHRlZCwgYW5kIHVwZGF0ZXMgY2hlY2tzdW0gdmFsaWRhdGlvbiBmb3IgVENQLCBVRFAsIGFuZCBTQ1RQIHByb3RvY29scyB3aXRoaW4gSVBWUy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgbW9kaWZpZWQgSUNNUCBoYW5kbGluZyBhbmQgY2hlY2tzdW0gdmFsaWRhdGlvbiBmdW5jdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDc6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwZjMxYTU4NjZiMWM4MDAzYWU4NTJkODdlZmNhOGU4ODVkM2ZmZTU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMjMgMDc6NTU6MTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdnMuaCBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcbmluZGV4IDQxN2ZmNTFmNjJmYzhlLi45YWU5YWFkNjU1NDFkMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwX3ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcbkBAIC0yNSw3ICYjNDM7MjUsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXHUwMDNlXHRcdC8qIGZvciB1bmlvbiBuZl9pbmV0X2FkZHIgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXHRcdFx0LyogZm9yIHN0cnVjdCBpcHY2aGRyICovXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9yb3V0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X2ZpYi5oXHUwMDNlXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSylcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oXHUwMDNlXG4gI2VuZGlmXG5AQCAtMTk3Miw4ICYjNDM7MTk3NCw4IEBAIGludCBpcF92c190dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gaW50IGlwX3ZzX2RyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0XHQgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbiBpbnQgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi1cdFx0ICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsXG4tXHRcdCAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuJiM0MztcdFx0ICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHVuc2lnbmVkIGludCB0b2ZmLFxuJiM0MztcdFx0ICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpO1xuIHZvaWQgaXBfdnNfZGVzdF9kc3RfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKTtcbiBcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbkBAIC0xOTg2LDggJiM0MzsxOTg4LDggQEAgaW50IGlwX3ZzX3R1bm5lbF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBpbnQgaXBfdnNfZHJfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdCAgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuIGludCBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuLVx0XHQgICAgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCxcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XG4mIzQzO1x0XHQgICAgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXG4mIzQzO1x0XHQgICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCk7XG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19TWVNDVExcbkBAIC0yMDU5LDE1ICYjNDM7MjA2MSwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91c2VfaGFzaDIoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuIH1cbiBcbiB2b2lkIGlwX3ZzX25hdF9pY21wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHRcdCAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIpO1xuJiM0MztcdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpciwgdW5zaWduZWQgaW50IHRvZmYsXG4mIzQzO1x0XHQgICAgYm9vbCBoYXNfcG9ydHMpO1xuIFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdFx0ICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpcik7XG4mIzQzO1x0XHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyLCB1bnNpZ25lZCBpbnQgdG9mZixcbiYjNDM7XHRcdCAgICAgICBib29sIGhhc19wb3J0cywgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKTtcbiAjZW5kaWZcbiBcbi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpO1xuLVxuIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmY0KF9fYmUzMiBvbGQsIF9fYmUzMiBuZXcsIF9fd3N1bSBvbGRzdW0pXG4ge1xuIFx0X19iZTMyIGRpZmZbMl0gPSB7IH5vbGQsIG5ldyB9O1xuQEAgLTIwOTMsNiAmIzQzOzIwOTUsMzYgQEAgc3RhdGljIGlubGluZSBfX3dzdW0gaXBfdnNfY2hlY2tfZGlmZjIoX19iZTE2IG9sZCwgX19iZTE2IG5ldywgX193c3VtIG9sZHN1bSlcbiBcdHJldHVybiBjc3VtX3BhcnRpYWwoZGlmZiwgc2l6ZW9mKGRpZmYpLCBvbGRzdW0pO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGlwX3ZzX2NoZWNrc3VtX25lZWRlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYWYpXG4mIzQzO3tcbiYjNDM7XHQvKiBDaGVja3N1bSB1bm5lY2Vzc2FyeSBvciBhbHJlYWR5IHZhbGlkYXRlZD8gKi9cbiYjNDM7XHRpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHQvKiBMT0NBTF9PVVQgPyAqL1xuJiM0MztcdGlmICghc2tiLVx1MDAzZWRldiB8fCBza2ItXHUwMDNlZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfTE9PUEJBQ0spXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0LyogIUxPQ0FMX0lOIChGT1JXQVJEKSA/ICovXG4mIzQzO1x0aWYgKGFmID09IEFGX0lORVQ2KSB7XG4mIzQzO1x0XHRpZiAoIShkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKS1cdTAwM2VydDZpX2ZsYWdzIFx1MDAyNiBSVEZfTE9DQUwpKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmICghKHNrYl9ydGFibGUoc2tiKS1cdTAwM2VydF9mbGFncyBcdTAwMjYgUlRDRl9MT0NBTCkpXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2sgLSB2YWxpZGF0ZSBjaGVja3N1bSBmb3IgVENQL1VEUC9JQ01QXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgaW50IG9mZnNldCwgaW50IHByb3RvLCBpbnQgYWYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdHJldHVybiAhbmZfY2hlY2tzdW0oc2tiLCBORl9JTkVUX0xPQ0FMX0lOLCBvZmZzZXQsIHByb3RvLCBhZik7XG4mIzQzO31cbiYjNDM7XG4gLyogRm9yZ2V0IGN1cnJlbnQgY29ubnRyYWNrICh1bmNvbmZpcm1lZCkgYW5kIGF0dGFjaCBub3RyYWNrIGVudHJ5ICovXG4gc3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX25vdHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jXG5pbmRleCBiMGUwMGJlODVjYjEyYy4uMTFjYmRiYWY1NjFkYWYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuY1xuQEAgLTM2Nyw3ICYjNDM7MzY3LDcgQEAgc3RhdGljIGlubGluZSBpbnQgYXBwX3RjcF9wa3Rfb3V0KHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgaXB2c2gtXHUwMDNlbGVuICYjNDM7IHNpemVvZigqdGgpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHR0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IGlwdnNoLVx1MDAzZWxlbik7XG4mIzQzO1x0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyBpcHZzaC1cdTAwM2VsZW4pO1xuIFxuIFx0LypcbiBcdCAqXHRSZW1lbWJlciBzZXEgbnVtYmVyIGluIGNhc2UgdGhpcyBwa3QgZ2V0cyByZXNpemVkXG5AQCAtNDQzLDcgJiM0Mzs0NDMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBhcHBfdGNwX3BrdF9pbihzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIGlwdnNoLVx1MDAzZWxlbiAmIzQzOyBzaXplb2YoKnRoKSkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBpcHZzaC1cdTAwM2VsZW4pO1xuJiM0MztcdHRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0MzsgaXB2c2gtXHUwMDNlbGVuKTtcbiBcbiBcdC8qXG4gXHQgKlx0UmVtZW1iZXIgc2VxIG51bWJlciBpbiBjYXNlIHRoaXMgcGt0IGdldHMgcmVzaXplZFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG5pbmRleCBiYWZhYjkzNDUxZDAzNy4uN2VmYTIwOWE1MTdiMWMgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG5AQCAtODY3LDcgJiM0Mzs4NjcsNyBAQCBzdGF0aWMgaW50IHN5c2N0bF9uYXRfaWNtcF9zZW5kKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKSB7IHJldHVybiAwOyB9XG4gXG4gI2VuZGlmXG4gXG4tX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KVxuJiM0MztzdGF0aWMgX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KVxuIHtcbiBcdHJldHVybiBjc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItXHUwMDNlbGVuIC0gb2Zmc2V0LCAwKSk7XG4gfVxuQEAgLTkyNCwxMyAmIzQzOzkyNCwxMyBAQCBzdGF0aWMgaW50IGlwX3ZzX3JvdXRlX21lX2hhcmRlcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLFxuICAqIC0gaW5vdXQ6IDE9aW4tXHUwMDNlb3V0LCAwPW91dC1cdTAwM2VpblxuICAqL1xuIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0KVxuJiM0MztcdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0LCB1bnNpZ25lZCBpbnQgdG9mZixcbiYjNDM7XHRcdCAgICBib29sIGhhc19wb3J0cylcbiB7XG4gXHRzdHJ1Y3QgaXBoZHIgKmlwaFx0ID0gaXBfaGRyKHNrYik7XG4tXHR1bnNpZ25lZCBpbnQgaWNtcF9vZmZzZXQgPSBpcGgtXHUwMDNlaWhsKjQ7XG4tXHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGhcdCA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzO1xuLVx0XHRcdFx0XHRcdCAgICAgIGljbXBfb2Zmc2V0KTtcbiYjNDM7XHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGhcdCA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyB0b2ZmKTtcbiBcdHN0cnVjdCBpcGhkciAqY2lwaFx0ID0gKHN0cnVjdCBpcGhkciAqKShpY21waCAmIzQzOyAxKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY29mZiBfX21heWJlX3VudXNlZCA9IHRvZmYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpY21waGRyKTtcbiBcbiBcdGlmIChpbm91dCkge1xuIFx0XHRpcGgtXHUwMDNlc2FkZHIgPSBjcC1cdTAwM2V2YWRkci5pcDtcbkBAIC05NDUsOCAmIzQzOzk0NSw3IEBAIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdH1cbiBcbiBcdC8qIHRoZSBUQ1AvVURQL1NDVFAgcG9ydCAqL1xuLVx0aWYgKElQUFJPVE9fVENQID09IGNpcGgtXHUwMDNlcHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2lwaC1cdTAwM2Vwcm90b2NvbCB8fFxuLVx0ICAgIElQUFJPVE9fU0NUUCA9PSBjaXBoLVx1MDAzZXByb3RvY29sKSB7XG4mIzQzO1x0aWYgKGhhc19wb3J0cykge1xuIFx0XHRfX2JlMTYgKnBvcnRzID0gKHZvaWQgKiljaXBoICYjNDM7IGNpcGgtXHUwMDNlaWhsKjQ7XG4gXG4gXHRcdGlmIChpbm91dClcbkBAIC05NTcsNDggJiM0Mzs5NTYsNDAgQEAgdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIFx0LyogQW5kIGZpbmFsbHkgdGhlIElDTVAgY2hlY2tzdW0gKi9cbiBcdGljbXBoLVx1MDAzZWNoZWNrc3VtID0gMDtcbi1cdGljbXBoLVx1MDAzZWNoZWNrc3VtID0gaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpY21wX29mZnNldCk7XG4mIzQzO1x0aWNtcGgtXHUwMDNlY2hlY2tzdW0gPSBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIHRvZmYpO1xuIFx0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZO1xuIFxuIFx0aWYgKGlub3V0KVxuLVx0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCAodm9pZCAqKWNpcGggLSAodm9pZCAqKWlwaCxcbi1cdFx0XHRcJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUFwmIzM0Oyk7XG4mIzQzO1x0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBjb2ZmLFxuJiM0MztcdFx0XHQgICAgICBcJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUFwmIzM0Oyk7XG4gXHRlbHNlXG4tXHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLFxuLVx0XHRcdFwmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QXCYjMzQ7KTtcbiYjNDM7XHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNvZmYsXG4mIzQzO1x0XHRcdCAgICAgIFwmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QXCYjMzQ7KTtcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4gdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQpXG4mIzQzO1x0XHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQsIHVuc2lnbmVkIGludCB0b2ZmLFxuJiM0MztcdFx0ICAgICAgIGJvb2wgaGFzX3BvcnRzLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXG4ge1xuIFx0c3RydWN0IGlwdjZoZHIgKmlwaFx0ID0gaXB2Nl9oZHIoc2tiKTtcbi1cdHVuc2lnbmVkIGludCBpY21wX29mZnNldCA9IDA7XG4tXHR1bnNpZ25lZCBpbnQgb2Zmc1x0ID0gMDsgLyogaGVhZGVyIG9mZnNldCovXG4tXHRpbnQgcHJvdG9jb2w7XG4gXHRzdHJ1Y3QgaWNtcDZoZHIgKmljbXBoO1xuLVx0c3RydWN0IGlwdjZoZHIgKmNpcGg7XG4tXHR1bnNpZ25lZCBzaG9ydCBmcmFnb2ZmcztcbiYjNDM7XHRzdHJ1Y3QgaXB2NmhkciAqY2loO1xuIFxuLVx0aXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNmljbXBfb2Zmc2V0LCBJUFBST1RPX0lDTVBWNiwgXHUwMDI2ZnJhZ29mZnMsIE5VTEwpO1xuLVx0aWNtcGggPSAoc3RydWN0IGljbXA2aGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IGljbXBfb2Zmc2V0KTtcbi1cdG9mZnMgPSBpY21wX29mZnNldCAmIzQzOyBzaXplb2Yoc3RydWN0IGljbXA2aGRyKTtcbi1cdGNpcGggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0Mzsgb2Zmcyk7XG4tXG4tXHRwcm90b2NvbCA9IGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZvZmZzLCAtMSwgXHUwMDI2ZnJhZ29mZnMsIE5VTEwpO1xuJiM0MztcdGljbXBoID0gKHN0cnVjdCBpY21wNmhkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyB0b2ZmKTtcbiYjNDM7XHRjaWggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0MzsgY2lwaC1cdTAwM2VvZmYpO1xuIFxuIFx0aWYgKGlub3V0KSB7XG4gXHRcdGlwaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZXZhZGRyLmluNjtcbi1cdFx0Y2lwaC1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZXZhZGRyLmluNjtcbiYjNDM7XHRcdGNpaC1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZXZhZGRyLmluNjtcbiBcdH0gZWxzZSB7XG4gXHRcdGlwaC1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZWRhZGRyLmluNjtcbi1cdFx0Y2lwaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZWRhZGRyLmluNjtcbiYjNDM7XHRcdGNpaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZWRhZGRyLmluNjtcbiBcdH1cbiBcbiBcdC8qIHRoZSBUQ1AvVURQL1NDVFAgcG9ydCAqL1xuLVx0aWYgKCFmcmFnb2ZmcyBcdTAwMjZcdTAwMjYgKElQUFJPVE9fVENQID09IHByb3RvY29sIHx8IElQUFJPVE9fVURQID09IHByb3RvY29sIHx8XG4tXHRcdFx0ICBJUFBST1RPX1NDVFAgPT0gcHJvdG9jb2wpKSB7XG4tXHRcdF9fYmUxNiAqcG9ydHMgPSAodm9pZCAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBvZmZzKTtcbiYjNDM7XHRpZiAoaGFzX3BvcnRzKSB7XG4mIzQzO1x0XHRfX2JlMTYgKnBvcnRzID0gKHZvaWQgKikoc2tiLVx1MDAzZWRhdGEgJiM0MzsgY2lwaC1cdTAwM2VsZW4pO1xuIFxuIFx0XHRJUF9WU19EQkcoMTEsIFwmIzM0OyVzKCkgY2hhbmdlZCBwb3J0ICVkIHRvICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbiBcdFx0XHQgICAgICBudG9ocyhpbm91dCA/IHBvcnRzWzFdIDogcG9ydHNbMF0pLFxuQEAgLTEwMTEsMTkgJiM0MzsxMDAyLDE3IEBAIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcbiBcdC8qIEFuZCBmaW5hbGx5IHRoZSBJQ01QIGNoZWNrc3VtICovXG4gXHRpY21waC1cdTAwM2VpY21wNl9ja3N1bSA9IH5jc3VtX2lwdjZfbWFnaWMoXHUwMDI2aXBoLVx1MDAzZXNhZGRyLCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2VsZW4gLSBpY21wX29mZnNldCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2VsZW4gLSB0b2ZmLFxuIFx0XHRcdFx0XHQgICAgICBJUFBST1RPX0lDTVBWNiwgMCk7XG4tXHRza2ItXHUwMDNlY3N1bV9zdGFydCA9IHNrYl9uZXR3b3JrX2hlYWRlcihza2IpIC0gc2tiLVx1MDAzZWhlYWQgJiM0MzsgaWNtcF9vZmZzZXQ7XG4mIzQzO1x0c2tiLVx1MDAzZWNzdW1fc3RhcnQgPSBza2JfaGVhZHJvb20oc2tiKSAmIzQzOyB0b2ZmO1xuIFx0c2tiLVx1MDAzZWNzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSk7XG4gXHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fUEFSVElBTDtcbiBcbiBcdGlmIChpbm91dClcbi1cdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsXG4tXHRcdFx0ICAgICAgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsXG4mIzQzO1x0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwgY2lwaC1cdTAwM2VvZmYsXG4gXHRcdFx0ICAgICAgXCYjMzQ7Rm9yd2FyZGluZyBhbHRlcmVkIG91dGdvaW5nIElDTVB2NlwmIzM0Oyk7XG4gXHRlbHNlXG4tXHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQ2LCBwcCwgc2tiLFxuLVx0XHRcdCAgICAgICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLFxuJiM0MztcdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsIGNpcGgtXHUwMDNlb2ZmLFxuIFx0XHRcdCAgICAgIFwmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QdjZcJiMzNDspO1xuIH1cbiAjZW5kaWZcbkBAIC0xMDMzLDM2ICYjNDM7MTAyMiw0MSBAQCB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gICovXG4gc3RhdGljIGludCBoYW5kbGVfcmVzcG9uc2VfaWNtcChpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHR1bmlvbiBuZl9pbmV0X2FkZHIgKnNuZXQsXG4tXHRcdFx0XHRfX3U4IHByb3RvY29sLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4mIzQzO1x0XHRcdFx0c3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0XHRcdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdFx0XHRcdHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBpaGwsXG4tXHRcdFx0XHR1bnNpZ25lZCBpbnQgaG9va251bSlcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgsXG4mIzQzO1x0XHRcdFx0dW5zaWduZWQgaW50IHRvZmYsIHVuc2lnbmVkIGludCBob29rbnVtKVxuIHtcbiYjNDM7XHRpbnQgaXByb3RvID0gYWYgPT0gQUZfSU5FVDYgPyBJUFBST1RPX0lDTVBWNiA6IElQUFJPVE9fSUNNUDtcbiBcdHVuc2lnbmVkIGludCB2ZXJkaWN0ID0gTkZfRFJPUDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY3RvZmYgPSBjaXBoLVx1MDAzZWxlbjtcbiYjNDM7XHRib29sIGhhc19wb3J0cyA9IGZhbHNlO1xuIFxuIFx0aWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKVxuIFx0XHRnb3RvIGFmdGVyX25hdDtcbiBcbiBcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xuLVx0aWYgKCFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpIFx1MDAyNlx1MDAyNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIGlobCkpIHtcbiYjNDM7XHRpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIHRvZmYsIGlwcm90bywgYWYpKSB7XG4gXHRcdC8qIEZhaWxlZCBjaGVja3N1bSEgKi9cbiBcdFx0SVBfVlNfREJHX0JVRigxLCBcJiMzNDtGb3J3YXJkIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVzIVxcblwmIzM0OyxcbiBcdFx0XHQgICAgICBJUF9WU19EQkdfQUREUihhZiwgc25ldCkpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGlmIChJUFBST1RPX1RDUCA9PSBwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBwcm90b2NvbCB8fFxuLVx0ICAgIElQUFJPVE9fU0NUUCA9PSBwcm90b2NvbClcbi1cdFx0b2Zmc2V0ICYjNDM7PSAyICogc2l6ZW9mKF9fdTE2KTtcbi1cdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcbiYjNDM7XHRpZiAoY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fCBjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XG4mIzQzO1x0ICAgIGNpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19TQ1RQKSB7XG4mIzQzO1x0XHRjdG9mZiAmIzQzOz0gMiAqIHNpemVvZihfX3UxNik7XG4mIzQzO1x0XHRoYXNfcG9ydHMgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIGN0b2ZmKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4gXHRpZiAoYWYgPT0gQUZfSU5FVDYpXG4tXHRcdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAxKTtcbiYjNDM7XHRcdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAxLCB0b2ZmLCBoYXNfcG9ydHMsIGNpcGgpO1xuIFx0ZWxzZVxuICNlbmRpZlxuLVx0XHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSk7XG4mIzQzO1x0XHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzKTtcbiBcbiBcdGlmIChpcF92c19yb3V0ZV9tZV9oYXJkZXIoY3AtXHUwMDNlaXB2cywgYWYsIHNrYiwgaG9va251bSkpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTEwOTAsOSAmIzQzOzEwODQsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAgKlx0Q3VycmVudGx5IGhhbmRsZXMgZXJyb3IgdHlwZXMgLSB1bnJlYWNoYWJsZSwgcXVlbmNoLCB0dGwgZXhjZWVkZWQuXG4gICovXG4gc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHQgIGludCAqcmVsYXRlZCwgdW5zaWduZWQgaW50IGhvb2tudW0pXG4mIzQzO1x0XHRcdCAgaW50ICpyZWxhdGVkLCB1bnNpZ25lZCBpbnQgaG9va251bSxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwdnNoKVxuIHtcbi1cdHN0cnVjdCBpcGhkciAqaXBoO1xuIFx0c3RydWN0IGljbXBoZHJcdF9pY21waCwgKmljO1xuIFx0c3RydWN0IGlwaGRyXHRfY2lwaCwgKmNpaDtcdC8qIFRoZSBpcCBoZWFkZXIgY29udGFpbmVkIHdpdGhpbiB0aGUgSUNNUCAqL1xuIFx0c3RydWN0IGlwX3ZzX2lwaGRyIGNpcGg7XG5AQCAtMTEwNywxNyAmIzQzOzExMDEsMTkgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChpcF9pc19mcmFnbWVudChpcF9oZHIoc2tiKSkpIHtcbiBcdFx0aWYgKGlwX3ZzX2dhdGhlcl9mcmFncyhpcHZzLCBza2IsIGlwX3ZzX2RlZnJhZ191c2VyKGhvb2tudW0pKSlcbiBcdFx0XHRyZXR1cm4gTkZfU1RPTEVOO1xuJiM0MztcdFx0aWYgKCFpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVCwgc2tiLCBmYWxzZSwgaXB2c2gpKVxuJiM0MztcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFx0fVxuIFxuLVx0aXBoID0gaXBfaGRyKHNrYik7XG4tXHRvZmZzZXQgPSBpaGwgPSBpcGgtXHUwMDNlaWhsICogNDtcbiYjNDM7XHRpaGwgPSBpcHZzaC1cdTAwM2VsZW47XG4mIzQzO1x0b2Zmc2V0ID0gaXB2c2gtXHUwMDNlbGVuO1xuIFx0aWMgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfaWNtcGgpLCBcdTAwMjZfaWNtcGgpO1xuIFx0aWYgKGljID09IE5VTEwpXG4gXHRcdHJldHVybiBORl9EUk9QO1xuIFxuIFx0SVBfVlNfREJHKDEyLCBcJiMzNDtPdXRnb2luZyBJQ01QICglZCwlZCkgJXBJNC1cdTAwM2UlcEk0XFxuXCYjMzQ7LFxuIFx0XHQgIGljLVx1MDAzZXR5cGUsIG50b2hzKGljbXBfaWQoaWMpKSxcbi1cdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIsIFx1MDAyNmlwaC1cdTAwM2VkYWRkcik7XG4mIzQzO1x0XHQgIFx1MDAyNmlwdnNoLVx1MDAzZXNhZGRyLmlwLCBcdTAwMjZpcHZzaC1cdTAwM2VkYWRkci5pcCk7XG4gXG4gXHQvKlxuIFx0ICogV29yayB0aHJvdWdoIHNlZWluZyBpZiB0aGlzIGlzIGZvciB1cy5cbkBAIC0xMTM2LDcgJiM0MzsxMTMyLDcgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdC8qIE5vdyBmaW5kIHRoZSBjb250YWluZWQgSVAgaGVhZGVyICovXG4gXHRvZmZzZXQgJiM0Mzs9IHNpemVvZihfaWNtcGgpO1xuIFx0Y2loID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2NpcGgpLCBcdTAwMjZfY2lwaCk7XG4tXHRpZiAoY2loID09IE5VTEwpXG4mIzQzO1x0aWYgKCEoY2loIFx1MDAyNlx1MDAyNiBjaWgtXHUwMDNldmVyc2lvbiA9PSA0IFx1MDAyNlx1MDAyNiBjaWgtXHUwMDNlaWhsIFx1MDAzZT0gNSkpXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7IC8qIFRoZSBwYWNrZXQgbG9va3Mgd3JvbmcsIGlnbm9yZSAqL1xuIFxuIFx0cHAgPSBpcF92c19wcm90b19nZXQoY2loLVx1MDAzZXByb3RvY29sKTtcbkBAIC0xMTQ0LDggJiM0MzsxMTQwLDcgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbiBcdC8qIElzIHRoZSBlbWJlZGRlZCBwcm90b2NvbCBoZWFkZXIgcHJlc2VudD8gKi9cbi1cdGlmICh1bmxpa2VseShjaWgtXHUwMDNlZnJhZ19vZmYgXHUwMDI2IGh0b25zKElQX09GRlNFVCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAgcHAtXHUwMDNlZG9udF9kZWZyYWcpKVxuJiM0MztcdGlmICh1bmxpa2VseShjaWgtXHUwMDNlZnJhZ19vZmYgXHUwMDI2IGh0b25zKElQX09GRlNFVCkgXHUwMDI2XHUwMDI2ICFwcC1cdTAwM2Vkb250X2RlZnJhZykpXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBvZmZzZXQsXG5AQCAtMTE1OSw5ICYjNDM7MTE1NCw5IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoIWNwKVxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFxuLVx0c25ldC5pcCA9IGlwaC1cdTAwM2VzYWRkcjtcbi1cdHJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVULCBza2IsIFx1MDAyNnNuZXQsIGNpaC1cdTAwM2Vwcm90b2NvbCwgY3AsXG4tXHRcdFx0XHQgICAgcHAsIGNpcGgubGVuLCBpaGwsIGhvb2tudW0pO1xuJiM0MztcdHNuZXQuaXAgPSBpcHZzaC1cdTAwM2VzYWRkci5pcDtcbiYjNDM7XHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVCwgc2tiLCBcdTAwMjZzbmV0LCBjcCwgcHAsIFx1MDAyNmNpcGgsIGlobCxcbiYjNDM7XHRcdFx0XHQgICAgaG9va251bSk7XG4gfVxuIFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuQEAgLTExNzQsNyAmIzQzOzExNjksNiBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGlwX3ZzX2Nvbm4gKmNwO1xuIFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcDtcbiBcdHVuaW9uIG5mX2luZXRfYWRkciBzbmV0O1xuLVx0dW5zaWduZWQgaW50IG9mZnNldDtcbiBcbiBcdCpyZWxhdGVkID0gMTtcbiBcdGljID0gZnJhZ19zYWZlX3NrYl9ocChza2IsIGlwdnNoLVx1MDAzZWxlbiwgc2l6ZW9mKF9pY21waCksIFx1MDAyNl9pY21waCk7XG5AQCAtMTIxMCw2ICYjNDM7MTIwNCwxMCBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKCFwcClcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbiYjNDM7XHQvKiBJcyB0aGUgZW1iZWRkZWQgcHJvdG9jb2wgaGVhZGVyIHByZXNlbnQ/ICovXG4mIzQzO1x0aWYgKHVubGlrZWx5KGNpcGguZnJhZ29mZnMgXHUwMDI2XHUwMDI2ICFwcC1cdTAwM2Vkb250X2RlZnJhZykpXG4mIzQzO1x0XHRyZXR1cm4gTkZfQUNDRVBUO1xuJiM0MztcbiBcdC8qIFRoZSBlbWJlZGRlZCBoZWFkZXJzIGNvbnRhaW4gc291cmNlIGFuZCBkZXN0IGluIHJldmVyc2Ugb3JkZXIgKi9cbiBcdGNwID0gSU5ESVJFQ1RfQ0FMTF8xKHBwLVx1MDAzZWNvbm5fb3V0X2dldCwgaXBfdnNfY29ubl9vdXRfZ2V0X3Byb3RvLFxuIFx0XHRcdCAgICAgaXB2cywgQUZfSU5FVDYsIHNrYiwgXHUwMDI2Y2lwaCk7XG5AQCAtMTIxNyw5ICYjNDM7MTIxNSw4IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRzbmV0LmluNiA9IGNpcGguc2FkZHIuaW42O1xuLVx0b2Zmc2V0ID0gY2lwaC5sZW47XG4tXHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVDYsIHNrYiwgXHUwMDI2c25ldCwgY2lwaC5wcm90b2NvbCwgY3AsXG4tXHRcdFx0XHQgICAgcHAsIG9mZnNldCwgaXB2c2gtXHUwMDNlbGVuLCBob29rbnVtKTtcbiYjNDM7XHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVDYsIHNrYiwgXHUwMDI2c25ldCwgY3AsIHBwLCBcdTAwMjZjaXBoLFxuJiM0MztcdFx0XHRcdCAgICBpcHZzaC1cdTAwM2VsZW4sIGhvb2tudW0pO1xuIH1cbiAjZW5kaWZcbiBcbkBAIC0xNTQ1LDcgJiM0MzsxNTQyLDggQEAgaXBfdnNfb3V0X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRcbiAjZW5kaWZcbiBcdFx0aWYgKHVubGlrZWx5KGlwaC5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApKSB7XG4gXHRcdFx0aW50IHJlbGF0ZWQ7XG4tXHRcdFx0aW50IHZlcmRpY3QgPSBpcF92c19vdXRfaWNtcChpcHZzLCBza2IsIFx1MDAyNnJlbGF0ZWQsIGhvb2tudW0pO1xuJiM0MztcdFx0XHRpbnQgdmVyZGljdCA9IGlwX3ZzX291dF9pY21wKGlwdnMsIHNrYiwgXHUwMDI2cmVsYXRlZCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBob29rbnVtLCBcdTAwMjZpcGgpO1xuIFxuIFx0XHRcdGlmIChyZWxhdGVkKVxuIFx0XHRcdFx0cmV0dXJuIHZlcmRpY3Q7XG5AQCAtMTc1Myw5ICYjNDM7MTc1MSw4IEBAIHN0YXRpYyBpbnQgaXB2c19ncmVfZGVjYXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gICovXG4gc3RhdGljIGludFxuIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbi1cdCAgICAgIHVuc2lnbmVkIGludCBob29rbnVtKVxuJiM0MztcdCAgICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbiB7XG4tXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbiBcdHN0cnVjdCBpY21waGRyXHRfaWNtcGgsICppYztcbiBcdHN0cnVjdCBpcGhkclx0X2NpcGgsICpjaWg7XHQvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi9cbiBcdHN0cnVjdCBpcF92c19pcGhkciBjaXBoO1xuQEAgLTE3NjUsNyAmIzQzOzE3NjIsNyBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCBvZmZzZXQyLCBpaGwsIHZlcmRpY3Q7XG4gXHRib29sIHR1bm5lbCwgbmV3X2NwID0gZmFsc2U7XG4gXHR1bmlvbiBuZl9pbmV0X2FkZHIgKnJhZGRyO1xuLVx0Y2hhciAqb3V0ZXJfcHJvdG8gPSBcJiMzNDtJUElQXCYjMzQ7O1xuJiM0MztcdGNoYXIgKm91dGVyX3Byb3RvIF9fbWF5YmVfdW51c2VkID0gXCYjMzQ7SVBJUFwmIzM0OztcbiBcdHVuc2lnbmVkIGludCBobGVuX2lwaXA7XG4gXHRpbnQgdWxlbiA9IDA7XG4gXG5AQCAtMTc3NSwxNyAmIzQzOzE3NzIsMTkgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFx0aWYgKGlwX2lzX2ZyYWdtZW50KGlwX2hkcihza2IpKSkge1xuIFx0XHRpZiAoaXBfdnNfZ2F0aGVyX2ZyYWdzKGlwdnMsIHNrYiwgaXBfdnNfZGVmcmFnX3VzZXIoaG9va251bSkpKVxuIFx0XHRcdHJldHVybiBORl9TVE9MRU47XG4mIzQzO1x0XHRpZiAoIWlwX3ZzX2ZpbGxfaXBoX3NrYihBRl9JTkVULCBza2IsIGZhbHNlLCBpcGgpKVxuJiM0MztcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFx0fVxuIFxuLVx0aXBoID0gaXBfaGRyKHNrYik7XG4tXHRvZmZzZXQgPSBpaGwgPSBpcGgtXHUwMDNlaWhsICogNDtcbiYjNDM7XHRpaGwgPSBpcGgtXHUwMDNlbGVuO1xuJiM0MztcdG9mZnNldCA9IGlwaC1cdTAwM2VsZW47XG4gXHRpYyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9pY21waCksIFx1MDAyNl9pY21waCk7XG4gXHRpZiAoaWMgPT0gTlVMTClcbiBcdFx0cmV0dXJuIE5GX0RST1A7XG4gXG4gXHRJUF9WU19EQkcoMTIsIFwmIzM0O0luY29taW5nIElDTVAgKCVkLCVkKSAlcEk0LVx1MDAzZSVwSTRcXG5cJiMzNDssXG4gXHRcdCAgaWMtXHUwMDNldHlwZSwgbnRvaHMoaWNtcF9pZChpYykpLFxuLVx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkciwgXHUwMDI2aXBoLVx1MDAzZWRhZGRyKTtcbiYjNDM7XHRcdCAgXHUwMDI2aXBoLVx1MDAzZXNhZGRyLmlwLCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIuaXApO1xuIFxuIFx0LypcbiBcdCAqIFdvcmsgdGhyb3VnaCBzZWVpbmcgaWYgdGhpcyBpcyBmb3IgdXMuXG5AQCAtMTg2Nyw4ICYjNDM7MTg2Niw3IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdHBwID0gcGQtXHUwMDNlcHA7XG4gXG4gXHQvKiBJcyB0aGUgZW1iZWRkZWQgcHJvdG9jb2wgaGVhZGVyIHByZXNlbnQ/ICovXG4tXHRpZiAodW5saWtlbHkoY2loLVx1MDAzZWZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUF9PRkZTRVQpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIHBwLVx1MDAzZWRvbnRfZGVmcmFnKSlcbiYjNDM7XHRpZiAodW5saWtlbHkoY2loLVx1MDAzZWZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUF9PRkZTRVQpIFx1MDAyNlx1MDAyNiAhcHAtXHUwMDNlZG9udF9kZWZyYWcpKVxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFxuIFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgb2Zmc2V0LFxuQEAgLTE4NzYsNyAmIzQzOzE4NzQsNiBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXG4gXHRvZmZzZXQyID0gb2Zmc2V0O1xuIFx0aXBfdnNfZmlsbF9pcGhfc2tiX2ljbXAoQUZfSU5FVCwgc2tiLCBvZmZzZXQsICF0dW5uZWwsIFx1MDAyNmNpcGgpO1xuLVx0b2Zmc2V0ID0gY2lwaC5sZW47XG4gXG4gXHQvKiBUaGUgZW1iZWRkZWQgaGVhZGVycyBjb250YWluIHNvdXJjZSBhbmQgZGVzdCBpbiByZXZlcnNlIG9yZGVyLlxuIFx0ICogRm9yIElQSVAvVURQL0dSRSB0dW5uZWwgdGhpcyBpcyBlcnJvciBmb3IgcmVxdWVzdCwgbm90IGZvciByZXBseS5cbkBAIC0xODk4LDEwICYjNDM7MTg5NSwxMSBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXHR2ZXJkaWN0ID0gTkZfRFJPUDtcbiBcbiBcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xuLVx0aWYgKCFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpIFx1MDAyNlx1MDAyNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIGlobCkpIHtcbiYjNDM7XHRpZiAoKElQX1ZTX0ZXRF9NRVRIT0QoY3ApID09IElQX1ZTX0NPTk5fRl9NQVNRIHx8IHR1bm5lbCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpaGwsIElQUFJPVE9fSUNNUCwgQUZfSU5FVCkpIHtcbiBcdFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xuIFx0XHRJUF9WU19EQkcoMSwgXCYjMzQ7SW5jb21pbmcgSUNNUDogZmFpbGVkIGNoZWNrc3VtIGZyb20gJXBJNCFcXG5cJiMzNDssXG4tXHRcdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIpO1xuJiM0MztcdFx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkci5pcCk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuQEAgLTE5NjksMTAgJiM0MzsxOTY3LDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFxuIFx0LyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovXG4gXHRpcF92c19pbl9zdGF0cyhjcCwgc2tiKTtcbi1cdGlmIChJUFBST1RPX1RDUCA9PSBjaWgtXHUwMDNlcHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2loLVx1MDAzZXByb3RvY29sIHx8XG4tXHQgICAgSVBQUk9UT19TQ1RQID09IGNpaC1cdTAwM2Vwcm90b2NvbClcbi1cdFx0b2Zmc2V0ICYjNDM7PSAyICogc2l6ZW9mKF9fdTE2KTtcbi1cdHZlcmRpY3QgPSBpcF92c19pY21wX3htaXQoc2tiLCBjcCwgcHAsIG9mZnNldCwgaG9va251bSwgXHUwMDI2Y2lwaCk7XG4mIzQzO1x0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdChza2IsIGNwLCBwcCwgaXBoLVx1MDAzZWxlbiwgaG9va251bSwgXHUwMDI2Y2lwaCk7XG4gXG4gb3V0OlxuIFx0aWYgKGxpa2VseSghbmV3X2NwKSlcbkBAIC0yMDMyLDggJiM0MzsyMDI3LDggQEAgc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFx0cHAgPSBwZC1cdTAwM2VwcDtcbiBcbi1cdC8qIENhbm5vdCBoYW5kbGUgZnJhZ21lbnRlZCBlbWJlZGRlZCBwcm90b2NvbCAqL1xuLVx0aWYgKGNpcGguZnJhZ29mZnMpXG4mIzQzO1x0LyogSXMgdGhlIGVtYmVkZGVkIHByb3RvY29sIGhlYWRlciBwcmVzZW50PyAqL1xuJiM0MztcdGlmIChjaXBoLmZyYWdvZmZzIFx1MDAyNlx1MDAyNiAhcHAtXHUwMDNlZG9udF9kZWZyYWcpXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwgb2Zmc2V0LFxuQEAgLTIwNTcsMjMgJiM0MzsyMDUyLDIyIEBAIHN0YXRpYyBpbnQgaXBfdnNfaW5faWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0bmV3X2NwID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdC8qIFZTL1RVTiwgVlMvRFIgYW5kIExPQ0FMTk9ERSBqdXN0IGxldCBpdCBnbyAqL1xuLVx0aWYgKChob29rbnVtID09IE5GX0lORVRfTE9DQUxfT1VUKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpKSB7XG4tXHRcdHZlcmRpY3QgPSBORl9BQ0NFUFQ7XG4mIzQzO1x0dmVyZGljdCA9IE5GX0RST1A7XG4mIzQzO1xuJiM0MztcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xuJiM0MztcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlwaC1cdTAwM2VsZW4sIElQUFJPVE9fSUNNUFY2LFxuJiM0MztcdFx0XHRcdFx0IEFGX0lORVQ2KSkge1xuJiM0MztcdFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xuJiM0MztcdFx0SVBfVlNfREJHKDEsIFwmIzM0O0luY29taW5nIElDTVB2NjogZmFpbGVkIGNoZWNrc3VtIGZyb20gJXBJNmMhXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkcik7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuIFx0LyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovXG4gXHRpcF92c19pbl9zdGF0cyhjcCwgc2tiKTtcbiBcbi1cdC8qIE5lZWQgdG8gbWFuZ2xlIGNvbnRhaW5lZCBJUHY2IGhlYWRlciBpbiBJQ01QdjYgcGFja2V0ICovXG4tXHRvZmZzZXQgPSBjaXBoLmxlbjtcbi1cdGlmIChJUFBST1RPX1RDUCA9PSBjaXBoLnByb3RvY29sIHx8IElQUFJPVE9fVURQID09IGNpcGgucHJvdG9jb2wgfHxcbi1cdCAgICBJUFBST1RPX1NDVFAgPT0gY2lwaC5wcm90b2NvbClcbi1cdFx0b2Zmc2V0ICYjNDM7PSAyICogc2l6ZW9mKF9fdTE2KTsgLyogQWxzbyBtYW5nbGUgcG9ydHMgKi9cbi1cbi1cdHZlcmRpY3QgPSBpcF92c19pY21wX3htaXRfdjYoc2tiLCBjcCwgcHAsIG9mZnNldCwgaG9va251bSwgXHUwMDI2Y2lwaCk7XG4mIzQzO1x0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdF92Nihza2IsIGNwLCBwcCwgaXBoLVx1MDAzZWxlbiwgaG9va251bSwgXHUwMDI2Y2lwaCk7XG4gXG4gb3V0OlxuIFx0aWYgKGxpa2VseSghbmV3X2NwKSlcbkBAIC0yMTUyLDcgJiM0MzsyMTQ2LDcgQEAgaXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGVcbiBcdFx0aWYgKHVubGlrZWx5KGlwaC5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApKSB7XG4gXHRcdFx0aW50IHJlbGF0ZWQ7XG4gXHRcdFx0aW50IHZlcmRpY3QgPSBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgXHUwMDI2cmVsYXRlZCxcbi1cdFx0XHRcdFx0XHQgICAgaG9va251bSk7XG4mIzQzO1x0XHRcdFx0XHRcdCAgICBob29rbnVtLCBcdTAwMjZpcGgpO1xuIFxuIFx0XHRcdGlmIChyZWxhdGVkKVxuIFx0XHRcdFx0cmV0dXJuIHZlcmRpY3Q7XG5AQCAtMjI4OCw2ICYjNDM7MjI4Miw3IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG4ge1xuIFx0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBuZXRfaXB2cyhzdGF0ZS1cdTAwM2VuZXQpO1xuJiM0MztcdHN0cnVjdCBpcF92c19pcGhkciBpcGhkcjtcbiBcdGludCByO1xuIFxuIFx0LyogaXB2cyBlbmFibGVkIGluIHRoaXMgbmV0bnMgPyAqL1xuQEAgLTIyOTcsMTAgJiM0MzsyMjkyLDkgQEAgaXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoc3RhdGUtXHUwMDNlcGYgPT0gTkZQUk9UT19JUFY0KSB7XG4gXHRcdGlmIChpcF9oZHIoc2tiKS1cdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX0lDTVApXG4gXHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiYjNDM7XHRcdGlwX3ZzX2ZpbGxfaXBoX3NrYihBRl9JTkVULCBza2IsIGZhbHNlLCBcdTAwMjZpcGhkcik7XG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4gXHR9IGVsc2Uge1xuLVx0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgaXBoZHI7XG4tXG4gXHRcdGlwX3ZzX2ZpbGxfaXBoX3NrYihBRl9JTkVUNiwgc2tiLCBmYWxzZSwgXHUwMDI2aXBoZHIpO1xuIFxuIFx0XHRpZiAoaXBoZHIucHJvdG9jb2wgIT0gSVBQUk9UT19JQ01QVjYpXG5AQCAtMjMxMCw3ICYjNDM7MjMwNCw3IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuICNlbmRpZlxuIFx0fVxuIFxuLVx0cmV0dXJuIGlwX3ZzX2luX2ljbXAoaXB2cywgc2tiLCBcdTAwMjZyLCBzdGF0ZS1cdTAwM2Vob29rKTtcbiYjNDM7XHRyZXR1cm4gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsIFx1MDAyNnIsIHN0YXRlLVx1MDAzZWhvb2ssIFx1MDAyNmlwaGRyKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBpcF92c19vcHM0W10gPSB7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmNcbmluZGV4IGM2NzMxN2JlMTdkZmFmLi4zZGJkMzA5NmUxNjM3YiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmNcbkBAIC0xMSw3ICYjNDM7MTEsNyBAQFxuIFxuIHN0YXRpYyBpbnRcbiBzY3RwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHR1bnNpZ25lZCBpbnQgc2N0cGhvZmYpO1xuJiM0MztcdFx0c3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuIFxuIHN0YXRpYyBpbnRcbiBzY3RwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbkBAIC0xMDksNyAmIzQzOzEwOSw3IEBAIHNjdHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdGludCByZXQ7XG4gXG4gXHRcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xuLVx0XHRpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgc2N0cGhvZmYpKVxuJiM0MztcdFx0aWYgKCFzY3RwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIGlwaCkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4gXHRcdC8qIENhbGwgYXBwbGljYXRpb24gaGVscGVyIGlmIG5lZWRlZCAqL1xuQEAgLTEyMSw3ICYjNDM7MTIxLDcgQEAgc2N0cF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0XHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xuIFx0fVxuIFxuLVx0c2N0cGggPSAodm9pZCAqKSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBzY3RwaG9mZjtcbiYjNDM7XHRzY3RwaCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGEgJiM0Mzsgc2N0cGhvZmY7XG4gXG4gXHQvKiBPbmx5IHVwZGF0ZSBjc3VtIGlmIHdlIHJlYWxseSBoYXZlIHRvICovXG4gXHRpZiAoc2N0cGgtXHUwMDNlc291cmNlICE9IGNwLVx1MDAzZXZwb3J0IHx8IHBheWxvYWRfY3N1bSB8fFxuQEAgLTE1Nyw3ICYjNDM7MTU3LDcgQEAgc2N0cF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBzY3RwaG9mZikpXG4mIzQzO1x0XHRpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXG5AQCAtMTY5LDcgJiM0MzsxNjksNyBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRcdHBheWxvYWRfY3N1bSA9IHRydWU7XG4gXHR9XG4gXG4tXHRzY3RwaCA9ICh2b2lkICopIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IHNjdHBob2ZmO1xuJiM0MztcdHNjdHBoID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YSAmIzQzOyBzY3RwaG9mZjtcbiBcbiBcdC8qIE9ubHkgdXBkYXRlIGNzdW0gaWYgd2UgcmVhbGx5IGhhdmUgdG8gKi9cbiBcdGlmIChzY3RwaC1cdTAwM2VkZXN0ICE9IGNwLVx1MDAzZWRwb3J0IHx8IHBheWxvYWRfY3N1bSB8fFxuQEAgLTE4NywxOSAmIzQzOzE4NywyMiBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIHN0YXRpYyBpbnRcbiBzY3RwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHR1bnNpZ25lZCBpbnQgc2N0cGhvZmYpXG4mIzQzO1x0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbiB7XG4mIzQzO1x0dW5zaWduZWQgaW50IHNjdHBob2ZmID0gaXBoLVx1MDAzZWxlbjtcbiBcdHN0cnVjdCBzY3RwaGRyICpzaDtcbiBcdF9fbGUzMiBjbXAsIHZhbDtcbiBcbiYjNDM7XHRpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSlcbiYjNDM7XHRcdHJldHVybiAxO1xuIFx0c2ggPSAoc3RydWN0IHNjdHBoZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgc2N0cGhvZmYpO1xuIFx0Y21wID0gc2gtXHUwMDNlY2hlY2tzdW07XG4gXHR2YWwgPSBzY3RwX2NvbXB1dGVfY2tzdW0oc2tiLCBzY3RwaG9mZik7XG4gXG4gXHRpZiAodmFsICE9IGNtcCkge1xuIFx0XHQvKiBDUkMgZmFpbHVyZSwgZHVtcCBpdC4gKi9cbi1cdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFwmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3JcJiMzNDspO1xuJiM0MztcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgaXBoLVx1MDAzZW9mZixcbiYjNDM7XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvclwmIzM0Oyk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFx0cmV0dXJuIDE7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jXG5pbmRleCBmODZiNzYzZWZjYzRkYy4uOTlhMjg2ZmRjOTBjNjUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuY1xuQEAgLTI5LDcgJiM0MzsyOSw3IEBAXG4gXG4gc3RhdGljIGludFxuIHRjcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdCAgICAgICB1bnNpZ25lZCBpbnQgdGNwaG9mZik7XG4mIzQzO1x0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbiBcbiBzdGF0aWMgaW50XG4gdGNwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbkBAIC0xNjYsNyAmIzQzOzE2Niw3IEBAIHRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghdGNwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIHRjcGhvZmYpKVxuJiM0MztcdFx0aWYgKCF0Y3BfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXG5AQCAtMTc5LDcgJiM0MzsxNzksNyBAQCB0Y3Bfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHRjcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IHRjcGhvZmY7XG4mIzQzO1x0dGNwaCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGEgJiM0MzsgdGNwaG9mZjtcbiBcdHRjcGgtXHUwMDNlc291cmNlID0gY3AtXHUwMDNldnBvcnQ7XG4gXG4gXHQvKiBBZGp1c3QgVENQIGNoZWNrc3VtcyAqL1xuQEAgLTI0NCw3ICYjNDM7MjQ0LDcgQEAgdGNwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cbi1cdFx0aWYgKCF0Y3BfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgdGNwaG9mZikpXG4mIzQzO1x0XHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKlxuQEAgLTI2MCw3ICYjNDM7MjYwLDcgQEAgdGNwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRcdHBheWxvYWRfY3N1bSA9IHRydWU7XG4gXHR9XG4gXG4tXHR0Y3BoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyB0Y3Bob2ZmO1xuJiM0MztcdHRjcGggPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhICYjNDM7IHRjcGhvZmY7XG4gXHR0Y3BoLVx1MDAzZWRlc3QgPSBjcC1cdTAwM2VkcG9ydDtcbiBcbiBcdC8qXG5AQCAtMzAyLDQxICYjNDM7MzAyLDEzIEBAIHRjcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcbiBzdGF0aWMgaW50XG4gdGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKVxuJiM0MztcdCAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbiB7XG4tXHRzd2l0Y2ggKHNrYi1cdTAwM2VpcF9zdW1tZWQpIHtcbi1cdGNhc2UgQ0hFQ0tTVU1fTk9ORTpcbi1cdFx0c2tiLVx1MDAzZWNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCB0Y3Bob2ZmLCBza2ItXHUwMDNlbGVuIC0gdGNwaG9mZiwgMCk7XG4tXHRcdGZhbGx0aHJvdWdoO1xuLVx0Y2FzZSBDSEVDS1NVTV9DT01QTEVURTpcbi0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbi1cdFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XG4tXHRcdFx0aWYgKGNzdW1faXB2Nl9tYWdpYyhcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZXNhZGRyLFxuLVx0XHRcdFx0XHQgICAgXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbi1cdFx0XHRcdFx0ICAgIHNrYi1cdTAwM2VsZW4gLSB0Y3Bob2ZmLFxuLVx0XHRcdFx0XHQgICAgSVBQUk9UT19UQ1AsXG4tXHRcdFx0XHRcdCAgICBza2ItXHUwMDNlY3N1bSkpIHtcbi1cdFx0XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXG4tXHRcdFx0XHRcdFx0IFwmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3JcJiMzNDspO1xuLVx0XHRcdFx0cmV0dXJuIDA7XG4tXHRcdFx0fVxuLVx0XHR9IGVsc2Vcbi0jZW5kaWZcbi1cdFx0XHRpZiAoY3N1bV90Y3B1ZHBfbWFnaWMoaXBfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHRcdCAgICAgIGlwX2hkcihza2IpLVx1MDAzZWRhZGRyLFxuLVx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlbGVuIC0gdGNwaG9mZixcbi1cdFx0XHRcdFx0ICAgICAgaXBfaGRyKHNrYiktXHUwMDNlcHJvdG9jb2wsXG4tXHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2Vjc3VtKSkge1xuLVx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvclwmIzM0Oyk7XG4tXHRcdFx0XHRyZXR1cm4gMDtcbi1cdFx0XHR9XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0LyogTm8gbmVlZCB0byBjaGVja3N1bS4gKi9cbi1cdFx0YnJlYWs7XG4mIzQzO1x0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpcGgtXHUwMDNlbGVuLCBJUFBST1RPX1RDUCwgYWYpKSB7XG4mIzQzO1x0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCBpcGgtXHUwMDNlb2ZmLFxuJiM0MztcdFx0XHRcdCBcJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0fVxuLVxuIFx0cmV0dXJuIDE7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xuaW5kZXggNThmOWUyNTU5MjdlMmUuLmYzMjc4NTY4MjQwMmRkIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmNcbkBAIC0yNSw3ICYjNDM7MjUsNyBAQFxuIFxuIHN0YXRpYyBpbnRcbiB1ZHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHQgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpO1xuJiM0MztcdCAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XG4gXG4gc3RhdGljIGludFxuIHVkcF9jb25uX3NjaGVkdWxlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXG5AQCAtMTU1LDcgJiM0MzsxNTUsNyBAQCB1ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdGludCByZXQ7XG4gXG4gXHRcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xuLVx0XHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCB1ZHBob2ZmKSlcbiYjNDM7XHRcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIGlwaCkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4gXHRcdC8qXG5AQCAtMTcwLDcgJiM0MzsxNzAsNyBAQCB1ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHVkcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IHVkcGhvZmY7XG4mIzQzO1x0dWRwaCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGEgJiM0MzsgdWRwaG9mZjtcbiBcdHVkcGgtXHUwMDNlc291cmNlID0gY3AtXHUwMDNldnBvcnQ7XG4gXG4gXHQvKlxuQEAgLTIzOCw3ICYjNDM7MjM4LDcgQEAgdWRwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cbi1cdFx0aWYgKCF1ZHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgdWRwaG9mZikpXG4mIzQzO1x0XHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKlxuQEAgLTI1NCw3ICYjNDM7MjU0LDcgQEAgdWRwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRcdHBheWxvYWRfY3N1bSA9IHRydWU7XG4gXHR9XG4gXG4tXHR1ZHBoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyB1ZHBob2ZmO1xuJiM0MztcdHVkcGggPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhICYjNDM7IHVkcGhvZmY7XG4gXHR1ZHBoLVx1MDAzZWRlc3QgPSBjcC1cdTAwM2VkcG9ydDtcbiBcbiBcdC8qXG5AQCAtMjk4LDQ4ICYjNDM7Mjk4LDIwIEBAIHVkcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcbiBzdGF0aWMgaW50XG4gdWRwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0ICAgICAgIHVuc2lnbmVkIGludCB1ZHBob2ZmKVxuJiM0MztcdCAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbiB7XG4gXHRzdHJ1Y3QgdWRwaGRyIF91ZHBoLCAqdWg7XG4gXG4tXHR1aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHVkcGhvZmYsIHNpemVvZihfdWRwaCksIFx1MDAyNl91ZHBoKTtcbiYjNDM7XHR1aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGlwaC1cdTAwM2VsZW4sIHNpemVvZihfdWRwaCksIFx1MDAyNl91ZHBoKTtcbiBcdGlmICh1aCA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmICh1aC1cdTAwM2VjaGVjayAhPSAwKSB7XG4tXHRcdHN3aXRjaCAoc2tiLVx1MDAzZWlwX3N1bW1lZCkge1xuLVx0XHRjYXNlIENIRUNLU1VNX05PTkU6XG4tXHRcdFx0c2tiLVx1MDAzZWNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCB1ZHBob2ZmLFxuLVx0XHRcdFx0XHRcdCBza2ItXHUwMDNlbGVuIC0gdWRwaG9mZiwgMCk7XG4tXHRcdFx0ZmFsbHRocm91Z2g7XG4tXHRcdGNhc2UgQ0hFQ0tTVU1fQ09NUExFVEU6XG4tI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4tXHRcdFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XG4tXHRcdFx0XHRpZiAoY3N1bV9pcHY2X21hZ2ljKFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHRcdFx0ICAgIFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHRcdFx0ICAgIHNrYi1cdTAwM2VsZW4gLSB1ZHBob2ZmLFxuLVx0XHRcdFx0XHRcdCAgICBJUFBST1RPX1VEUCxcbi1cdFx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZWNzdW0pKSB7XG4tXHRcdFx0XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXG4tXHRcdFx0XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvclwmIzM0Oyk7XG4tXHRcdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH0gZWxzZVxuLSNlbmRpZlxuLVx0XHRcdFx0aWYgKGNzdW1fdGNwdWRwX21hZ2ljKGlwX2hkcihza2IpLVx1MDAzZXNhZGRyLFxuLVx0XHRcdFx0XHRcdCAgICAgIGlwX2hkcihza2IpLVx1MDAzZWRhZGRyLFxuLVx0XHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2VsZW4gLSB1ZHBob2ZmLFxuLVx0XHRcdFx0XHRcdCAgICAgIGlwX2hkcihza2IpLVx1MDAzZXByb3RvY29sLFxuLVx0XHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2Vjc3VtKSkge1xuLVx0XHRcdFx0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLFxuLVx0XHRcdFx0XHRcdFx0IFwmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3JcJiMzNDspO1xuLVx0XHRcdFx0XHRyZXR1cm4gMDtcbi1cdFx0XHRcdH1cbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4mIzQzO1x0aWYgKCF1aC1cdTAwM2VjaGVjaylcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgaXBoLVx1MDAzZWxlbiwgSVBQUk9UT19VRFAsIGFmKSkge1xuJiM0MztcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgaXBoLVx1MDAzZW9mZixcbiYjNDM7XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvclwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdHJldHVybiAxO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xuaW5kZXggOWZlZjQzMzVkYTEzZmQuLjBiMGM1MzA0OTkzYTkxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xuQEAgLTE1MDIsMjAgJiM0MzsxNTAyLDIyIEBAIGlwX3ZzX2RyX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuICAqL1xuIGludFxuIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tXHRcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBob29rbnVtLFxuLVx0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbiYjNDM7XHRcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHVuc2lnbmVkIGludCB0b2ZmLFxuJiM0MztcdFx0dW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaClcbiB7XG4gXHRzdHJ1Y3QgcnRhYmxlXHQqcnQ7XHQvKiBSb3V0ZSB0byB0aGUgb3RoZXIgaG9zdCAqL1xuIFx0aW50IHJjO1xuIFx0aW50IGxvY2FsO1xuIFx0aW50IHJ0X21vZGUsIHdhc19pbnB1dDtcbiYjNDM7XHRib29sIGhhc19wb3J0cyA9IGZhbHNlO1xuJiM0MztcdHVuc2lnbmVkIGludCB3bGVuO1xuIFxuIFx0LyogVGhlIElDTVAgcGFja2V0IGZvciBWUy9UVU4sIFZTL0RSIGFuZCBMT0NBTE5PREUgd2lsbCBiZVxuIFx0ICAgZm9yd2FyZGVkIGRpcmVjdGx5IGhlcmUsIGJlY2F1c2UgdGhlcmUgaXMgbm8gbmVlZCB0b1xuIFx0ICAgdHJhbnNsYXRlIGFkZHJlc3MvcG9ydCBiYWNrICovXG4gXHRpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpIHtcbiBcdFx0aWYgKGNwLVx1MDAzZXBhY2tldF94bWl0KVxuLVx0XHRcdHJjID0gY3AtXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGlwaCk7XG4mIzQzO1x0XHRcdHJjID0gY3AtXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGNpcGgpO1xuIFx0XHRlbHNlXG4gXHRcdFx0cmMgPSBORl9BQ0NFUFQ7XG4gXHRcdC8qIGRvIG5vdCB0b3VjaCBza2IgYW55bW9yZSAqL1xuQEAgLTE1MzMsNyAmIzQzOzE1MzUsNyBAQCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0XHQgIElQX1ZTX1JUX01PREVfTE9DQUwgfCBJUF9WU19SVF9NT0RFX05PTl9MT0NBTCB8XG4gXHRcdCAgSVBfVlNfUlRfTU9ERV9SRFIgOiBJUF9WU19SVF9NT0RFX05PTl9MT0NBTDtcbiBcdGxvY2FsID0gX19pcF92c19nZXRfb3V0X3J0KGNwLVx1MDAzZWlwdnMsIGNwLVx1MDAzZWFmLCBza2IsIGNwLVx1MDAzZWRlc3QsIGNwLVx1MDAzZWRhZGRyLmlwLCBydF9tb2RlLFxuLVx0XHRcdFx0ICAgTlVMTCwgaXBoKTtcbiYjNDM7XHRcdFx0XHQgICBOVUxMLCBjaXBoKTtcbiBcdGlmIChsb2NhbCBcdTAwM2MgMClcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcdHJ0ID0gc2tiX3J0YWJsZShza2IpO1xuQEAgLTE1NjQsMTQgJiM0MzsxNTY2LDIxIEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXHR9XG4gXG4mIzQzO1x0d2xlbiA9IGNpcGgtXHUwMDNlbGVuO1xuJiM0MztcdGlmIChjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVENQIHx8IGNpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgfHxcbiYjNDM7XHQgICAgY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1NDVFApIHtcbiYjNDM7XHRcdHdsZW4gJiM0Mzs9IDIgKiBzaXplb2YoX191MTYpOyAvKiBBbHNvIG1hbmdsZSBwb3J0cyAqL1xuJiM0MztcdFx0aGFzX3BvcnRzID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogY29weS1vbi13cml0ZSB0aGUgcGFja2V0IGJlZm9yZSBtYW5nbGluZyBpdCAqL1xuLVx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBvZmZzZXQpKVxuJiM0MztcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgd2xlbikpXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXG4gXHRpZiAoc2tiX2Nvdyhza2IsIHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSlcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcbi1cdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwKTtcbiYjNDM7XHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMCwgdG9mZiwgaGFzX3BvcnRzKTtcbiBcbiBcdC8qIEFub3RoZXIgaGFjazogYXZvaWQgaWNtcF9zZW5kIGluIGlwX2ZyYWdtZW50ICovXG4gXHRza2ItXHUwMDNlaWdub3JlX2RmID0gMTtcbkBAIC0xNTg3LDEwICYjNDM7MTU5NiwxMiBAQCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuIGludFxuIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tXHRcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBob29rbnVtLFxuLVx0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwdnNoKVxuJiM0MztcdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKVxuIHtcbiYjNDM7XHRib29sIGhhc19wb3J0cyA9IGZhbHNlO1xuIFx0c3RydWN0IHJ0Nl9pbmZvXHQqcnQ7XHQvKiBSb3V0ZSB0byB0aGUgb3RoZXIgaG9zdCAqL1xuJiM0MztcdHVuc2lnbmVkIGludCB3bGVuO1xuIFx0aW50IHJjO1xuIFx0aW50IGxvY2FsO1xuIFx0aW50IHJ0X21vZGU7XG5AQCAtMTYwMCw3ICYjNDM7MTYxMSw3IEBAIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHQgICB0cmFuc2xhdGUgYWRkcmVzcy9wb3J0IGJhY2sgKi9cbiBcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkge1xuIFx0XHRpZiAoY3AtXHUwMDNlcGFja2V0X3htaXQpXG4tXHRcdFx0cmMgPSBjcC1cdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgaXB2c2gpO1xuJiM0MztcdFx0XHRyYyA9IGNwLVx1MDAzZXBhY2tldF94bWl0KHNrYiwgY3AsIHBwLCBjaXBoKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHJjID0gTkZfQUNDRVBUO1xuIFx0XHQvKiBkbyBub3QgdG91Y2ggc2tiIGFueW1vcmUgKi9cbkBAIC0xNjE3LDcgJiM0MzsxNjI4LDcgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdFx0ICBJUF9WU19SVF9NT0RFX0xPQ0FMIHwgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwgfFxuIFx0XHQgIElQX1ZTX1JUX01PREVfUkRSIDogSVBfVlNfUlRfTU9ERV9OT05fTE9DQUw7XG4gXHRsb2NhbCA9IF9faXBfdnNfZ2V0X291dF9ydF92NihjcC1cdTAwM2VpcHZzLCBjcC1cdTAwM2VhZiwgc2tiLCBjcC1cdTAwM2VkZXN0LFxuLVx0XHRcdFx0ICAgICAgXHUwMDI2Y3AtXHUwMDNlZGFkZHIuaW42LCBOVUxMLCBpcHZzaCwgMCwgcnRfbW9kZSk7XG4mIzQzO1x0XHRcdFx0ICAgICAgXHUwMDI2Y3AtXHUwMDNlZGFkZHIuaW42LCBOVUxMLCBjaXBoLCAwLCBydF9tb2RlKTtcbiBcdGlmIChsb2NhbCBcdTAwM2MgMClcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcdHJ0ID0gZHN0X3J0Nl9pbmZvKHNrYl9kc3Qoc2tiKSk7XG5AQCAtMTY0OCwxNCAmIzQzOzE2NTksMjEgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcdH1cbiBcbiYjNDM7XHR3bGVuID0gY2lwaC1cdTAwM2VsZW47XG4mIzQzO1x0aWYgKGNpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1AgfHwgY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1VEUCB8fFxuJiM0MztcdCAgICBjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fU0NUUCkge1xuJiM0MztcdFx0d2xlbiAmIzQzOz0gMiAqIHNpemVvZihfX3UxNik7IC8qIEFsc28gbWFuZ2xlIHBvcnRzICovXG4mIzQzO1x0XHRoYXNfcG9ydHMgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiBjb3B5LW9uLXdyaXRlIHRoZSBwYWNrZXQgYmVmb3JlIG1hbmdsaW5nIGl0ICovXG4tXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIG9mZnNldCkpXG4mIzQzO1x0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCB3bGVuKSlcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcbiBcdGlmIChza2JfY293KHNrYiwgcnQtXHUwMDNlZHN0LmRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pKVxuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFxuLVx0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDApO1xuJiM0MztcdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMsIGNpcGgpO1xuIFxuIFx0LyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi9cbiBcdHNrYi1cdTAwM2VpZ25vcmVfZGYgPSAxO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA3OjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9WUyYjMzQ7LAogICAgJiMzNDtJUF9WU19JUFY2JiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1RDUCYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19VRFAmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fU0NUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3ZzX25hdF9pY21wJiMzNDssCiAgICAmIzM0O2lwX3ZzX25hdF9pY21wX3Y2JiMzNDssCiAgICAmIzM0O2hhbmRsZV9yZXNwb25zZV9pY21wJiMzNDssCiAgICAmIzM0O2lwX3ZzX291dF9pY21wJiMzNDssCiAgICAmIzM0O2lwX3ZzX291dF9pY21wX3Y2JiMzNDssCiAgICAmIzM0O2lwX3ZzX2luX2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfaW5faWNtcF92NiYjMzQ7LAogICAgJiMzNDtpcF92c19mb3J3YXJkX2ljbXAmIzM0OywKICAgICYjMzQ7c2N0cF9jc3VtX2NoZWNrJiMzNDssCiAgICAmIzM0O3RjcF9jc3VtX2NoZWNrJiMzNDssCiAgICAmIzM0O3VkcF9jc3VtX2NoZWNrJiMzNDssCiAgICAmIzM0O2lwX3ZzX2ljbXBfeG1pdCYjMzQ7LAogICAgJiMzNDtpcF92c19pY21wX3htaXRfdjYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgSUNNUCBOQVQgaGFuZGxpbmcgYW5kIGNoZWNrc3VtIHZhbGlkYXRpb24gbG9naWMgaW4gSVBWUy4gSXQgY2hhbmdlcyBob3cgSUNNUCBwYWNrZXRzIGFyZSBwcm9jZXNzZWQsIE5BVGVkLCBhbmQgdHJhbnNtaXR0ZWQsIGFuZCB1cGRhdGVzIGNoZWNrc3VtIHZhbGlkYXRpb24gZm9yIFRDUCwgVURQLCBhbmQgU0NUUCBwcm90b2NvbHMgd2l0aGluIElQVlMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIG1vZGlmaWVkIElDTVAgaGFuZGxpbmcgYW5kIGNoZWNrc3VtIHZhbGlkYXRpb24gZnVuY3Rpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwZjMxYTU4NjZiMWM4MDAzYWU4NTJkODdlZmNhOGU4ODVkM2ZmZTU5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMjMgMDc6NTU6MTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF92cy5oIGIvaW5jbHVkZS9uZXQvaXBfdnMuaAppbmRleCA0MTdmZjUxZjYyZmM4ZS4uOWFlOWFhZDY1NTQxZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwX3ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXBfdnMuaApAQCAtMjUsNyAmIzQzOzI1LDkgQEAKICNpbmNsdWRlICZsdDtsaW51eC9uZXRmaWx0ZXIuaCZndDsJCS8qIGZvciB1bmlvbiBuZl9pbmV0X2FkZHIgKi8KICNpbmNsdWRlICZsdDtsaW51eC9pcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lwdjYuaCZndDsJCQkvKiBmb3Igc3RydWN0IGlwdjZoZHIgKi8KJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3JvdXRlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2lwdjYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2lwNl9maWIuaCZndDsKICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spCiAjaW5jbHVkZSAmbHQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaCZndDsKICNlbmRpZgpAQCAtMTk3Miw4ICYjNDM7MTk3NCw4IEBAIGludCBpcF92c190dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiBpbnQgaXBfdnNfZHJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiAJCSAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpOwogaW50IGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCi0JCSAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LAotCQkgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTsKJiM0MzsJCSAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZiwKJiM0MzsJCSAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKTsKIHZvaWQgaXBfdnNfZGVzdF9kc3RfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKTsKIAogI2lmZGVmIENPTkZJR19JUF9WU19JUFY2CkBAIC0xOTg2LDggJiM0MzsxOTg4LDggQEAgaW50IGlwX3ZzX3R1bm5lbF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIGludCBpcF92c19kcl94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIAkJICAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7CiBpbnQgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKLQkJICAgICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpOwomIzQzOwkJICAgICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHVuc2lnbmVkIGludCB0b2ZmLAomIzQzOwkJICAgICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCkBAIC0yMDU5LDE1ICYjNDM7MjA2MSwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91c2VfaGFzaDIoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKQogfQogCiB2b2lkIGlwX3ZzX25hdF9pY21wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JCSAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIpOwomIzQzOwkJICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpciwgdW5zaWduZWQgaW50IHRvZmYsCiYjNDM7CQkgICAgYm9vbCBoYXNfcG9ydHMpOwogCiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKLQkJICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpcik7CiYjNDM7CQkgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyLCB1bnNpZ25lZCBpbnQgdG9mZiwKJiM0MzsJCSAgICAgICBib29sIGhhc19wb3J0cywgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKTsKICNlbmRpZgogCi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpOwotCiBzdGF0aWMgaW5saW5lIF9fd3N1bSBpcF92c19jaGVja19kaWZmNChfX2JlMzIgb2xkLCBfX2JlMzIgbmV3LCBfX3dzdW0gb2xkc3VtKQogewogCV9fYmUzMiBkaWZmWzJdID0geyB+b2xkLCBuZXcgfTsKQEAgLTIwOTMsNiAmIzQzOzIwOTUsMzYgQEAgc3RhdGljIGlubGluZSBfX3dzdW0gaXBfdnNfY2hlY2tfZGlmZjIoX19iZTE2IG9sZCwgX19iZTE2IG5ldywgX193c3VtIG9sZHN1bSkKIAlyZXR1cm4gY3N1bV9wYXJ0aWFsKGRpZmYsIHNpemVvZihkaWZmKSwgb2xkc3VtKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jaGVja3N1bV9uZWVkZWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGFmKQomIzQzO3sKJiM0MzsJLyogQ2hlY2tzdW0gdW5uZWNlc3Nhcnkgb3IgYWxyZWFkeSB2YWxpZGF0ZWQ/ICovCiYjNDM7CWlmIChza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwkvKiBMT0NBTF9PVVQgPyAqLwomIzQzOwlpZiAoIXNrYi0mZ3Q7ZGV2IHx8IHNrYi0mZ3Q7ZGV2LSZndDtmbGFncyAmYW1wOyBJRkZfTE9PUEJBQ0spCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CS8qICFMT0NBTF9JTiAoRk9SV0FSRCkgPyAqLwomIzQzOwlpZiAoYWYgPT0gQUZfSU5FVDYpIHsKJiM0MzsJCWlmICghKGRzdF9ydDZfaW5mbyhza2JfZHN0KHNrYikpLSZndDtydDZpX2ZsYWdzICZhbXA7IFJURl9MT0NBTCkpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKCEoc2tiX3J0YWJsZShza2IpLSZndDtydF9mbGFncyAmYW1wOyBSVENGX0xPQ0FMKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayAtIHZhbGlkYXRlIGNoZWNrc3VtIGZvciBUQ1AvVURQL0lDTVAKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCQkgICAgICAgaW50IG9mZnNldCwgaW50IHByb3RvLCBpbnQgYWYpCiYjNDM7ewomIzQzOwlpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlyZXR1cm4gIW5mX2NoZWNrc3VtKHNrYiwgTkZfSU5FVF9MT0NBTF9JTiwgb2Zmc2V0LCBwcm90bywgYWYpOwomIzQzO30KJiM0MzsKIC8qIEZvcmdldCBjdXJyZW50IGNvbm50cmFjayAodW5jb25maXJtZWQpIGFuZCBhdHRhY2ggbm90cmFjayBlbnRyeSAqLwogc3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX25vdHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYwppbmRleCBiMGUwMGJlODVjYjEyYy4uMTFjYmRiYWY1NjFkYWYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMKQEAgLTM2Nyw3ICYjNDM7MzY3LDcgQEAgc3RhdGljIGlubGluZSBpbnQgYXBwX3RjcF9wa3Rfb3V0KHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIGlwdnNoLSZndDtsZW4gJiM0Mzsgc2l6ZW9mKCp0aCkpKQogCQlyZXR1cm4gMDsKIAotCXRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgaXB2c2gtJmd0O2xlbik7CiYjNDM7CXRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IGlwdnNoLSZndDtsZW4pOwogCiAJLyoKIAkgKglSZW1lbWJlciBzZXEgbnVtYmVyIGluIGNhc2UgdGhpcyBwa3QgZ2V0cyByZXNpemVkCkBAIC00NDMsNyAmIzQzOzQ0Myw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFwcF90Y3BfcGt0X2luKHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIGlwdnNoLSZndDtsZW4gJiM0Mzsgc2l6ZW9mKCp0aCkpKQogCQlyZXR1cm4gMDsKIAotCXRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgaXB2c2gtJmd0O2xlbik7CiYjNDM7CXRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IGlwdnNoLSZndDtsZW4pOwogCiAJLyoKIAkgKglSZW1lbWJlciBzZXEgbnVtYmVyIGluIGNhc2UgdGhpcyBwa3QgZ2V0cyByZXNpemVkCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYwppbmRleCBiYWZhYjkzNDUxZDAzNy4uN2VmYTIwOWE1MTdiMWMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYwpAQCAtODY3LDcgJiM0Mzs4NjcsNyBAQCBzdGF0aWMgaW50IHN5c2N0bF9uYXRfaWNtcF9zZW5kKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKSB7IHJldHVybiAwOyB9CiAKICNlbmRpZgogCi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpCiYjNDM7c3RhdGljIF9fc3VtMTYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCkKIHsKIAlyZXR1cm4gY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIG9mZnNldCwgc2tiLSZndDtsZW4gLSBvZmZzZXQsIDApKTsKIH0KQEAgLTkyNCwxMyAmIzQzOzkyNCwxMyBAQCBzdGF0aWMgaW50IGlwX3ZzX3JvdXRlX21lX2hhcmRlcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLAogICogLSBpbm91dDogMT1pbi0mZ3Q7b3V0LCAwPW91dC0mZ3Q7aW4KICAqLwogdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAotCQkgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQpCiYjNDM7CQkgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQsIHVuc2lnbmVkIGludCB0b2ZmLAomIzQzOwkJICAgIGJvb2wgaGFzX3BvcnRzKQogewogCXN0cnVjdCBpcGhkciAqaXBoCSA9IGlwX2hkcihza2IpOwotCXVuc2lnbmVkIGludCBpY21wX29mZnNldCA9IGlwaC0mZ3Q7aWhsKjQ7Ci0Jc3RydWN0IGljbXBoZHIgKmljbXBoCSA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOwotCQkJCQkJICAgICAgaWNtcF9vZmZzZXQpOwomIzQzOwlzdHJ1Y3QgaWNtcGhkciAqaWNtcGgJID0gKHN0cnVjdCBpY21waGRyICopKHNrYi0mZ3Q7ZGF0YSAmIzQzOyB0b2ZmKTsKIAlzdHJ1Y3QgaXBoZHIgKmNpcGgJID0gKHN0cnVjdCBpcGhkciAqKShpY21waCAmIzQzOyAxKTsKJiM0MzsJdW5zaWduZWQgaW50IGNvZmYgX19tYXliZV91bnVzZWQgPSB0b2ZmICYjNDM7IHNpemVvZihzdHJ1Y3QgaWNtcGhkcik7CiAKIAlpZiAoaW5vdXQpIHsKIAkJaXBoLSZndDtzYWRkciA9IGNwLSZndDt2YWRkci5pcDsKQEAgLTk0NSw4ICYjNDM7OTQ1LDcgQEAgdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCX0KIAogCS8qIHRoZSBUQ1AvVURQL1NDVFAgcG9ydCAqLwotCWlmIChJUFBST1RPX1RDUCA9PSBjaXBoLSZndDtwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBjaXBoLSZndDtwcm90b2NvbCB8fAotCSAgICBJUFBST1RPX1NDVFAgPT0gY2lwaC0mZ3Q7cHJvdG9jb2wpIHsKJiM0MzsJaWYgKGhhc19wb3J0cykgewogCQlfX2JlMTYgKnBvcnRzID0gKHZvaWQgKiljaXBoICYjNDM7IGNpcGgtJmd0O2lobCo0OwogCiAJCWlmIChpbm91dCkKQEAgLTk1Nyw0OCAmIzQzOzk1Niw0MCBAQCB2b2lkIGlwX3ZzX25hdF9pY21wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAKIAkvKiBBbmQgZmluYWxseSB0aGUgSUNNUCBjaGVja3N1bSAqLwogCWljbXBoLSZndDtjaGVja3N1bSA9IDA7Ci0JaWNtcGgtJmd0O2NoZWNrc3VtID0gaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpY21wX29mZnNldCk7CiYjNDM7CWljbXBoLSZndDtjaGVja3N1bSA9IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgdG9mZik7CiAJc2tiLSZndDtpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAogCWlmIChpbm91dCkKLQkJSVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsCi0JCQkmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBvdXRnb2luZyBJQ01QJiMzNDspOwomIzQzOwkJSVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgY29mZiwKJiM0MzsJCQkgICAgICAmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBvdXRnb2luZyBJQ01QJiMzNDspOwogCWVsc2UKLQkJSVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsCi0JCQkmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QJiMzNDspOwomIzQzOwkJSVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgY29mZiwKJiM0MzsJCQkgICAgICAmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QJiMzNDspOwogfQogCiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKLQkJICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0KQomIzQzOwkJICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0LCB1bnNpZ25lZCBpbnQgdG9mZiwKJiM0MzsJCSAgICAgICBib29sIGhhc19wb3J0cywgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKQogewogCXN0cnVjdCBpcHY2aGRyICppcGgJID0gaXB2Nl9oZHIoc2tiKTsKLQl1bnNpZ25lZCBpbnQgaWNtcF9vZmZzZXQgPSAwOwotCXVuc2lnbmVkIGludCBvZmZzCSA9IDA7IC8qIGhlYWRlciBvZmZzZXQqLwotCWludCBwcm90b2NvbDsKIAlzdHJ1Y3QgaWNtcDZoZHIgKmljbXBoOwotCXN0cnVjdCBpcHY2aGRyICpjaXBoOwotCXVuc2lnbmVkIHNob3J0IGZyYWdvZmZzOwomIzQzOwlzdHJ1Y3QgaXB2NmhkciAqY2loOwogCi0JaXB2Nl9maW5kX2hkcihza2IsICZhbXA7aWNtcF9vZmZzZXQsIElQUFJPVE9fSUNNUFY2LCAmYW1wO2ZyYWdvZmZzLCBOVUxMKTsKLQlpY21waCA9IChzdHJ1Y3QgaWNtcDZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgaWNtcF9vZmZzZXQpOwotCW9mZnMgPSBpY21wX29mZnNldCAmIzQzOyBzaXplb2Yoc3RydWN0IGljbXA2aGRyKTsKLQljaXBoID0gKHN0cnVjdCBpcHY2aGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IG9mZnMpOwotCi0JcHJvdG9jb2wgPSBpcHY2X2ZpbmRfaGRyKHNrYiwgJmFtcDtvZmZzLCAtMSwgJmFtcDtmcmFnb2ZmcywgTlVMTCk7CiYjNDM7CWljbXBoID0gKHN0cnVjdCBpY21wNmhkciAqKShza2ItJmd0O2RhdGEgJiM0MzsgdG9mZik7CiYjNDM7CWNpaCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2ItJmd0O2RhdGEgJiM0MzsgY2lwaC0mZ3Q7b2ZmKTsKIAogCWlmIChpbm91dCkgewogCQlpcGgtJmd0O3NhZGRyID0gY3AtJmd0O3ZhZGRyLmluNjsKLQkJY2lwaC0mZ3Q7ZGFkZHIgPSBjcC0mZ3Q7dmFkZHIuaW42OwomIzQzOwkJY2loLSZndDtkYWRkciA9IGNwLSZndDt2YWRkci5pbjY7CiAJfSBlbHNlIHsKIAkJaXBoLSZndDtkYWRkciA9IGNwLSZndDtkYWRkci5pbjY7Ci0JCWNpcGgtJmd0O3NhZGRyID0gY3AtJmd0O2RhZGRyLmluNjsKJiM0MzsJCWNpaC0mZ3Q7c2FkZHIgPSBjcC0mZ3Q7ZGFkZHIuaW42OwogCX0KIAogCS8qIHRoZSBUQ1AvVURQL1NDVFAgcG9ydCAqLwotCWlmICghZnJhZ29mZnMgJmFtcDsmYW1wOyAoSVBQUk9UT19UQ1AgPT0gcHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gcHJvdG9jb2wgfHwKLQkJCSAgSVBQUk9UT19TQ1RQID09IHByb3RvY29sKSkgewotCQlfX2JlMTYgKnBvcnRzID0gKHZvaWQgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0Mzsgb2Zmcyk7CiYjNDM7CWlmIChoYXNfcG9ydHMpIHsKJiM0MzsJCV9fYmUxNiAqcG9ydHMgPSAodm9pZCAqKShza2ItJmd0O2RhdGEgJiM0MzsgY2lwaC0mZ3Q7bGVuKTsKIAogCQlJUF9WU19EQkcoMTEsICYjMzQ7JXMoKSBjaGFuZ2VkIHBvcnQgJWQgdG8gJWRcbiYjMzQ7LCBfX2Z1bmNfXywKIAkJCSAgICAgIG50b2hzKGlub3V0ID8gcG9ydHNbMV0gOiBwb3J0c1swXSksCkBAIC0xMDExLDE5ICYjNDM7MTAwMiwxNyBAQCB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAKIAkvKiBBbmQgZmluYWxseSB0aGUgSUNNUCBjaGVja3N1bSAqLwogCWljbXBoLSZndDtpY21wNl9ja3N1bSA9IH5jc3VtX2lwdjZfbWFnaWMoJmFtcDtpcGgtJmd0O3NhZGRyLCAmYW1wO2lwaC0mZ3Q7ZGFkZHIsCi0JCQkJCSAgICAgIHNrYi0mZ3Q7bGVuIC0gaWNtcF9vZmZzZXQsCiYjNDM7CQkJCQkgICAgICBza2ItJmd0O2xlbiAtIHRvZmYsCiAJCQkJCSAgICAgIElQUFJPVE9fSUNNUFY2LCAwKTsKLQlza2ItJmd0O2NzdW1fc3RhcnQgPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSAtIHNrYi0mZ3Q7aGVhZCAmIzQzOyBpY21wX29mZnNldDsKJiM0MzsJc2tiLSZndDtjc3VtX3N0YXJ0ID0gc2tiX2hlYWRyb29tKHNrYikgJiM0MzsgdG9mZjsKIAlza2ItJmd0O2NzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSk7CiAJc2tiLSZndDtpcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMOwogCiAJaWYgKGlub3V0KQotCQlJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwKLQkJCSAgICAgICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLAomIzQzOwkJSVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsIGNpcGgtJmd0O29mZiwKIAkJCSAgICAgICYjMzQ7Rm9yd2FyZGluZyBhbHRlcmVkIG91dGdvaW5nIElDTVB2NiYjMzQ7KTsKIAllbHNlCi0JCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQ2LCBwcCwgc2tiLAotCQkJICAgICAgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsCiYjNDM7CQlJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwgY2lwaC0mZ3Q7b2ZmLAogCQkJICAgICAgJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgaW5jb21pbmcgSUNNUHY2JiMzNDspOwogfQogI2VuZGlmCkBAIC0xMDMzLDM2ICYjNDM7MTAyMiw0MSBAQCB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAgKi8KIHN0YXRpYyBpbnQgaGFuZGxlX3Jlc3BvbnNlX2ljbXAoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCXVuaW9uIG5mX2luZXRfYWRkciAqc25ldCwKLQkJCQlfX3U4IHByb3RvY29sLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiYjNDM7CQkJCXN0cnVjdCBpcF92c19jb25uICpjcCwKIAkJCQlzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAotCQkJCXVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBpaGwsCi0JCQkJdW5zaWduZWQgaW50IGhvb2tudW0pCiYjNDM7CQkJCXN0cnVjdCBpcF92c19pcGhkciAqY2lwaCwKJiM0MzsJCQkJdW5zaWduZWQgaW50IHRvZmYsIHVuc2lnbmVkIGludCBob29rbnVtKQogewomIzQzOwlpbnQgaXByb3RvID0gYWYgPT0gQUZfSU5FVDYgPyBJUFBST1RPX0lDTVBWNiA6IElQUFJPVE9fSUNNUDsKIAl1bnNpZ25lZCBpbnQgdmVyZGljdCA9IE5GX0RST1A7CiYjNDM7CXVuc2lnbmVkIGludCBjdG9mZiA9IGNpcGgtJmd0O2xlbjsKJiM0MzsJYm9vbCBoYXNfcG9ydHMgPSBmYWxzZTsKIAogCWlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkKIAkJZ290byBhZnRlcl9uYXQ7CiAKIAkvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi8KLQlpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgJmFtcDsmYW1wOyBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIGlobCkpIHsKJiM0MzsJaWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCB0b2ZmLCBpcHJvdG8sIGFmKSkgewogCQkvKiBGYWlsZWQgY2hlY2tzdW0hICovCiAJCUlQX1ZTX0RCR19CVUYoMSwgJiMzNDtGb3J3YXJkIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVzIVxuJiMzNDssCiAJCQkgICAgICBJUF9WU19EQkdfQUREUihhZiwgc25ldCkpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoSVBQUk9UT19UQ1AgPT0gcHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gcHJvdG9jb2wgfHwKLQkgICAgSVBQUk9UT19TQ1RQID09IHByb3RvY29sKQotCQlvZmZzZXQgJiM0Mzs9IDIgKiBzaXplb2YoX191MTYpOwotCWlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSkKJiM0MzsJaWYgKGNpcGgtJmd0O3Byb3RvY29sID09IElQUFJPVE9fVENQIHx8IGNpcGgtJmd0O3Byb3RvY29sID09IElQUFJPVE9fVURQIHx8CiYjNDM7CSAgICBjaXBoLSZndDtwcm90b2NvbCA9PSBJUFBST1RPX1NDVFApIHsKJiM0MzsJCWN0b2ZmICYjNDM7PSAyICogc2l6ZW9mKF9fdTE2KTsKJiM0MzsJCWhhc19wb3J0cyA9IHRydWU7CiYjNDM7CX0KJiM0MzsJaWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBjdG9mZikpCiAJCWdvdG8gb3V0OwogCiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKIAlpZiAoYWYgPT0gQUZfSU5FVDYpCi0JCWlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAxKTsKJiM0MzsJCWlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAxLCB0b2ZmLCBoYXNfcG9ydHMsIGNpcGgpOwogCWVsc2UKICNlbmRpZgotCQlpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSk7CiYjNDM7CQlpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzKTsKIAogCWlmIChpcF92c19yb3V0ZV9tZV9oYXJkZXIoY3AtJmd0O2lwdnMsIGFmLCBza2IsIGhvb2tudW0pKQogCQlnb3RvIG91dDsKQEAgLTEwOTAsOSAmIzQzOzEwODQsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAqCUN1cnJlbnRseSBoYW5kbGVzIGVycm9yIHR5cGVzIC0gdW5yZWFjaGFibGUsIHF1ZW5jaCwgdHRsIGV4Y2VlZGVkLgogICovCiBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICBpbnQgKnJlbGF0ZWQsIHVuc2lnbmVkIGludCBob29rbnVtKQomIzQzOwkJCSAgaW50ICpyZWxhdGVkLCB1bnNpZ25lZCBpbnQgaG9va251bSwKJiM0MzsJCQkgIHN0cnVjdCBpcF92c19pcGhkciAqaXB2c2gpCiB7Ci0Jc3RydWN0IGlwaGRyICppcGg7CiAJc3RydWN0IGljbXBoZHIJX2ljbXBoLCAqaWM7CiAJc3RydWN0IGlwaGRyCV9jaXBoLCAqY2loOwkvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi8KIAlzdHJ1Y3QgaXBfdnNfaXBoZHIgY2lwaDsKQEAgLTExMDcsMTcgJiM0MzsxMTAxLDE5IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKGlwX2lzX2ZyYWdtZW50KGlwX2hkcihza2IpKSkgewogCQlpZiAoaXBfdnNfZ2F0aGVyX2ZyYWdzKGlwdnMsIHNrYiwgaXBfdnNfZGVmcmFnX3VzZXIoaG9va251bSkpKQogCQkJcmV0dXJuIE5GX1NUT0xFTjsKJiM0MzsJCWlmICghaXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQsIHNrYiwgZmFsc2UsIGlwdnNoKSkKJiM0MzsJCQlyZXR1cm4gTkZfQUNDRVBUOwogCX0KIAotCWlwaCA9IGlwX2hkcihza2IpOwotCW9mZnNldCA9IGlobCA9IGlwaC0mZ3Q7aWhsICogNDsKJiM0MzsJaWhsID0gaXB2c2gtJmd0O2xlbjsKJiM0MzsJb2Zmc2V0ID0gaXB2c2gtJmd0O2xlbjsKIAlpYyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9pY21waCksICZhbXA7X2ljbXBoKTsKIAlpZiAoaWMgPT0gTlVMTCkKIAkJcmV0dXJuIE5GX0RST1A7CiAKIAlJUF9WU19EQkcoMTIsICYjMzQ7T3V0Z29pbmcgSUNNUCAoJWQsJWQpICVwSTQtJmd0OyVwSTRcbiYjMzQ7LAogCQkgIGljLSZndDt0eXBlLCBudG9ocyhpY21wX2lkKGljKSksCi0JCSAgJmFtcDtpcGgtJmd0O3NhZGRyLCAmYW1wO2lwaC0mZ3Q7ZGFkZHIpOwomIzQzOwkJICAmYW1wO2lwdnNoLSZndDtzYWRkci5pcCwgJmFtcDtpcHZzaC0mZ3Q7ZGFkZHIuaXApOwogCiAJLyoKIAkgKiBXb3JrIHRocm91Z2ggc2VlaW5nIGlmIHRoaXMgaXMgZm9yIHVzLgpAQCAtMTEzNiw3ICYjNDM7MTEzMiw3IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAJLyogTm93IGZpbmQgdGhlIGNvbnRhaW5lZCBJUCBoZWFkZXIgKi8KIAlvZmZzZXQgJiM0Mzs9IHNpemVvZihfaWNtcGgpOwogCWNpaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9jaXBoKSwgJmFtcDtfY2lwaCk7Ci0JaWYgKGNpaCA9PSBOVUxMKQomIzQzOwlpZiAoIShjaWggJmFtcDsmYW1wOyBjaWgtJmd0O3ZlcnNpb24gPT0gNCAmYW1wOyZhbXA7IGNpaC0mZ3Q7aWhsICZndDs9IDUpKQogCQlyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi8KIAogCXBwID0gaXBfdnNfcHJvdG9fZ2V0KGNpaC0mZ3Q7cHJvdG9jb2wpOwpAQCAtMTE0NCw4ICYjNDM7MTE0MCw3IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKIAkvKiBJcyB0aGUgZW1iZWRkZWQgcHJvdG9jb2wgaGVhZGVyIHByZXNlbnQ/ICovCi0JaWYgKHVubGlrZWx5KGNpaC0mZ3Q7ZnJhZ19vZmYgJmFtcDsgaHRvbnMoSVBfT0ZGU0VUKSAmYW1wOyZhbXA7Ci0JCSAgICAgcHAtJmd0O2RvbnRfZGVmcmFnKSkKJiM0MzsJaWYgKHVubGlrZWx5KGNpaC0mZ3Q7ZnJhZ19vZmYgJmFtcDsgaHRvbnMoSVBfT0ZGU0VUKSAmYW1wOyZhbXA7ICFwcC0mZ3Q7ZG9udF9kZWZyYWcpKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCiAJSVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgb2Zmc2V0LApAQCAtMTE1OSw5ICYjNDM7MTE1NCw5IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKCFjcCkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAotCXNuZXQuaXAgPSBpcGgtJmd0O3NhZGRyOwotCXJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVULCBza2IsICZhbXA7c25ldCwgY2loLSZndDtwcm90b2NvbCwgY3AsCi0JCQkJICAgIHBwLCBjaXBoLmxlbiwgaWhsLCBob29rbnVtKTsKJiM0MzsJc25ldC5pcCA9IGlwdnNoLSZndDtzYWRkci5pcDsKJiM0MzsJcmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQsIHNrYiwgJmFtcDtzbmV0LCBjcCwgcHAsICZhbXA7Y2lwaCwgaWhsLAomIzQzOwkJCQkgICAgaG9va251bSk7CiB9CiAKICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgpAQCAtMTE3NCw3ICYjNDM7MTE2OSw2IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAJc3RydWN0IGlwX3ZzX2Nvbm4gKmNwOwogCXN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7CiAJdW5pb24gbmZfaW5ldF9hZGRyIHNuZXQ7Ci0JdW5zaWduZWQgaW50IG9mZnNldDsKIAogCSpyZWxhdGVkID0gMTsKIAlpYyA9IGZyYWdfc2FmZV9za2JfaHAoc2tiLCBpcHZzaC0mZ3Q7bGVuLCBzaXplb2YoX2ljbXBoKSwgJmFtcDtfaWNtcGgpOwpAQCAtMTIxMCw2ICYjNDM7MTIwNCwxMCBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmICghcHApCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKJiM0MzsJLyogSXMgdGhlIGVtYmVkZGVkIHByb3RvY29sIGhlYWRlciBwcmVzZW50PyAqLwomIzQzOwlpZiAodW5saWtlbHkoY2lwaC5mcmFnb2ZmcyAmYW1wOyZhbXA7ICFwcC0mZ3Q7ZG9udF9kZWZyYWcpKQomIzQzOwkJcmV0dXJuIE5GX0FDQ0VQVDsKJiM0MzsKIAkvKiBUaGUgZW1iZWRkZWQgaGVhZGVycyBjb250YWluIHNvdXJjZSBhbmQgZGVzdCBpbiByZXZlcnNlIG9yZGVyICovCiAJY3AgPSBJTkRJUkVDVF9DQUxMXzEocHAtJmd0O2Nvbm5fb3V0X2dldCwgaXBfdnNfY29ubl9vdXRfZ2V0X3Byb3RvLAogCQkJICAgICBpcHZzLCBBRl9JTkVUNiwgc2tiLCAmYW1wO2NpcGgpOwpAQCAtMTIxNyw5ICYjNDM7MTIxNSw4IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKIAlzbmV0LmluNiA9IGNpcGguc2FkZHIuaW42OwotCW9mZnNldCA9IGNpcGgubGVuOwotCXJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVUNiwgc2tiLCAmYW1wO3NuZXQsIGNpcGgucHJvdG9jb2wsIGNwLAotCQkJCSAgICBwcCwgb2Zmc2V0LCBpcHZzaC0mZ3Q7bGVuLCBob29rbnVtKTsKJiM0MzsJcmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQ2LCBza2IsICZhbXA7c25ldCwgY3AsIHBwLCAmYW1wO2NpcGgsCiYjNDM7CQkJCSAgICBpcHZzaC0mZ3Q7bGVuLCBob29rbnVtKTsKIH0KICNlbmRpZgogCkBAIC0xNTQ1LDcgJiM0MzsxNTQyLDggQEAgaXBfdnNfb3V0X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXQKICNlbmRpZgogCQlpZiAodW5saWtlbHkoaXBoLnByb3RvY29sID09IElQUFJPVE9fSUNNUCkpIHsKIAkJCWludCByZWxhdGVkOwotCQkJaW50IHZlcmRpY3QgPSBpcF92c19vdXRfaWNtcChpcHZzLCBza2IsICZhbXA7cmVsYXRlZCwgaG9va251bSk7CiYjNDM7CQkJaW50IHZlcmRpY3QgPSBpcF92c19vdXRfaWNtcChpcHZzLCBza2IsICZhbXA7cmVsYXRlZCwKJiM0MzsJCQkJCQkgICAgIGhvb2tudW0sICZhbXA7aXBoKTsKIAogCQkJaWYgKHJlbGF0ZWQpCiAJCQkJcmV0dXJuIHZlcmRpY3Q7CkBAIC0xNzUzLDkgJiM0MzsxNzUxLDggQEAgc3RhdGljIGludCBpcHZzX2dyZV9kZWNhcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAqLwogc3RhdGljIGludAogaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLAotCSAgICAgIHVuc2lnbmVkIGludCBob29rbnVtKQomIzQzOwkgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpCiB7Ci0Jc3RydWN0IGlwaGRyICppcGg7CiAJc3RydWN0IGljbXBoZHIJX2ljbXBoLCAqaWM7CiAJc3RydWN0IGlwaGRyCV9jaXBoLCAqY2loOwkvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi8KIAlzdHJ1Y3QgaXBfdnNfaXBoZHIgY2lwaDsKQEAgLTE3NjUsNyAmIzQzOzE3NjIsNyBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsCiAJdW5zaWduZWQgaW50IG9mZnNldCwgb2Zmc2V0MiwgaWhsLCB2ZXJkaWN0OwogCWJvb2wgdHVubmVsLCBuZXdfY3AgPSBmYWxzZTsKIAl1bmlvbiBuZl9pbmV0X2FkZHIgKnJhZGRyOwotCWNoYXIgKm91dGVyX3Byb3RvID0gJiMzNDtJUElQJiMzNDs7CiYjNDM7CWNoYXIgKm91dGVyX3Byb3RvIF9fbWF5YmVfdW51c2VkID0gJiMzNDtJUElQJiMzNDs7CiAJdW5zaWduZWQgaW50IGhsZW5faXBpcDsKIAlpbnQgdWxlbiA9IDA7CiAKQEAgLTE3NzUsMTcgJiM0MzsxNzcyLDE5IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCwKIAlpZiAoaXBfaXNfZnJhZ21lbnQoaXBfaGRyKHNrYikpKSB7CiAJCWlmIChpcF92c19nYXRoZXJfZnJhZ3MoaXB2cywgc2tiLCBpcF92c19kZWZyYWdfdXNlcihob29rbnVtKSkpCiAJCQlyZXR1cm4gTkZfU1RPTEVOOwomIzQzOwkJaWYgKCFpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVCwgc2tiLCBmYWxzZSwgaXBoKSkKJiM0MzsJCQlyZXR1cm4gTkZfQUNDRVBUOwogCX0KIAotCWlwaCA9IGlwX2hkcihza2IpOwotCW9mZnNldCA9IGlobCA9IGlwaC0mZ3Q7aWhsICogNDsKJiM0MzsJaWhsID0gaXBoLSZndDtsZW47CiYjNDM7CW9mZnNldCA9IGlwaC0mZ3Q7bGVuOwogCWljID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2ljbXBoKSwgJmFtcDtfaWNtcGgpOwogCWlmIChpYyA9PSBOVUxMKQogCQlyZXR1cm4gTkZfRFJPUDsKIAogCUlQX1ZTX0RCRygxMiwgJiMzNDtJbmNvbWluZyBJQ01QICglZCwlZCkgJXBJNC0mZ3Q7JXBJNFxuJiMzNDssCiAJCSAgaWMtJmd0O3R5cGUsIG50b2hzKGljbXBfaWQoaWMpKSwKLQkJICAmYW1wO2lwaC0mZ3Q7c2FkZHIsICZhbXA7aXBoLSZndDtkYWRkcik7CiYjNDM7CQkgICZhbXA7aXBoLSZndDtzYWRkci5pcCwgJmFtcDtpcGgtJmd0O2RhZGRyLmlwKTsKIAogCS8qCiAJICogV29yayB0aHJvdWdoIHNlZWluZyBpZiB0aGlzIGlzIGZvciB1cy4KQEAgLTE4NjcsOCAmIzQzOzE4NjYsNyBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsCiAJcHAgPSBwZC0mZ3Q7cHA7CiAKIAkvKiBJcyB0aGUgZW1iZWRkZWQgcHJvdG9jb2wgaGVhZGVyIHByZXNlbnQ/ICovCi0JaWYgKHVubGlrZWx5KGNpaC0mZ3Q7ZnJhZ19vZmYgJmFtcDsgaHRvbnMoSVBfT0ZGU0VUKSAmYW1wOyZhbXA7Ci0JCSAgICAgcHAtJmd0O2RvbnRfZGVmcmFnKSkKJiM0MzsJaWYgKHVubGlrZWx5KGNpaC0mZ3Q7ZnJhZ19vZmYgJmFtcDsgaHRvbnMoSVBfT0ZGU0VUKSAmYW1wOyZhbXA7ICFwcC0mZ3Q7ZG9udF9kZWZyYWcpKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCiAJSVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgb2Zmc2V0LApAQCAtMTg3Niw3ICYjNDM7MTg3NCw2IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCwKIAogCW9mZnNldDIgPSBvZmZzZXQ7CiAJaXBfdnNfZmlsbF9pcGhfc2tiX2ljbXAoQUZfSU5FVCwgc2tiLCBvZmZzZXQsICF0dW5uZWwsICZhbXA7Y2lwaCk7Ci0Jb2Zmc2V0ID0gY2lwaC5sZW47CiAKIAkvKiBUaGUgZW1iZWRkZWQgaGVhZGVycyBjb250YWluIHNvdXJjZSBhbmQgZGVzdCBpbiByZXZlcnNlIG9yZGVyLgogCSAqIEZvciBJUElQL1VEUC9HUkUgdHVubmVsIHRoaXMgaXMgZXJyb3IgZm9yIHJlcXVlc3QsIG5vdCBmb3IgcmVwbHkuCkBAIC0xODk4LDEwICYjNDM7MTg5NSwxMSBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsCiAJdmVyZGljdCA9IE5GX0RST1A7CiAKIAkvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi8KLQlpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgJmFtcDsmYW1wOyBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIGlobCkpIHsKJiM0MzsJaWYgKChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSB8fCB0dW5uZWwpICZhbXA7JmFtcDsKJiM0MzsJICAgICFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpaGwsIElQUFJPVE9fSUNNUCwgQUZfSU5FVCkpIHsKIAkJLyogRmFpbGVkIGNoZWNrc3VtISAqLwogCQlJUF9WU19EQkcoMSwgJiMzNDtJbmNvbWluZyBJQ01QOiBmYWlsZWQgY2hlY2tzdW0gZnJvbSAlcEk0IVxuJiMzNDssCi0JCQkgICZhbXA7aXBoLSZndDtzYWRkcik7CiYjNDM7CQkJICAmYW1wO2lwaC0mZ3Q7c2FkZHIuaXApOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTE5NjksMTAgJiM0MzsxOTY3LDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLAogCiAJLyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovCiAJaXBfdnNfaW5fc3RhdHMoY3AsIHNrYik7Ci0JaWYgKElQUFJPVE9fVENQID09IGNpaC0mZ3Q7cHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2loLSZndDtwcm90b2NvbCB8fAotCSAgICBJUFBST1RPX1NDVFAgPT0gY2loLSZndDtwcm90b2NvbCkKLQkJb2Zmc2V0ICYjNDM7PSAyICogc2l6ZW9mKF9fdTE2KTsKLQl2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0KHNrYiwgY3AsIHBwLCBvZmZzZXQsIGhvb2tudW0sICZhbXA7Y2lwaCk7CiYjNDM7CXZlcmRpY3QgPSBpcF92c19pY21wX3htaXQoc2tiLCBjcCwgcHAsIGlwaC0mZ3Q7bGVuLCBob29rbnVtLCAmYW1wO2NpcGgpOwogCiBvdXQ6CiAJaWYgKGxpa2VseSghbmV3X2NwKSkKQEAgLTIwMzIsOCAmIzQzOzIwMjcsOCBAQCBzdGF0aWMgaW50IGlwX3ZzX2luX2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAJcHAgPSBwZC0mZ3Q7cHA7CiAKLQkvKiBDYW5ub3QgaGFuZGxlIGZyYWdtZW50ZWQgZW1iZWRkZWQgcHJvdG9jb2wgKi8KLQlpZiAoY2lwaC5mcmFnb2ZmcykKJiM0MzsJLyogSXMgdGhlIGVtYmVkZGVkIHByb3RvY29sIGhlYWRlciBwcmVzZW50PyAqLwomIzQzOwlpZiAoY2lwaC5mcmFnb2ZmcyAmYW1wOyZhbXA7ICFwcC0mZ3Q7ZG9udF9kZWZyYWcpCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKIAlJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwgb2Zmc2V0LApAQCAtMjA1NywyMyAmIzQzOzIwNTIsMjIgQEAgc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQluZXdfY3AgPSB0cnVlOwogCX0KIAotCS8qIFZTL1RVTiwgVlMvRFIgYW5kIExPQ0FMTk9ERSBqdXN0IGxldCBpdCBnbyAqLwotCWlmICgoaG9va251bSA9PSBORl9JTkVUX0xPQ0FMX09VVCkgJmFtcDsmYW1wOwotCSAgICAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpKSB7Ci0JCXZlcmRpY3QgPSBORl9BQ0NFUFQ7CiYjNDM7CXZlcmRpY3QgPSBORl9EUk9QOwomIzQzOwomIzQzOwkvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi8KJiM0MzsJaWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApID09IElQX1ZTX0NPTk5fRl9NQVNRICZhbXA7JmFtcDsKJiM0MzsJICAgICFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpcGgtJmd0O2xlbiwgSVBQUk9UT19JQ01QVjYsCiYjNDM7CQkJCQkgQUZfSU5FVDYpKSB7CiYjNDM7CQkvKiBGYWlsZWQgY2hlY2tzdW0hICovCiYjNDM7CQlJUF9WU19EQkcoMSwgJiMzNDtJbmNvbWluZyBJQ01QdjY6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVwSTZjIVxuJiMzNDssCiYjNDM7CQkJICAmYW1wO2lwaC0mZ3Q7c2FkZHIpOwogCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBkbyB0aGUgc3RhdGlzdGljcyBhbmQgcHV0IGl0IGJhY2sgKi8KIAlpcF92c19pbl9zdGF0cyhjcCwgc2tiKTsKIAotCS8qIE5lZWQgdG8gbWFuZ2xlIGNvbnRhaW5lZCBJUHY2IGhlYWRlciBpbiBJQ01QdjYgcGFja2V0ICovCi0Jb2Zmc2V0ID0gY2lwaC5sZW47Ci0JaWYgKElQUFJPVE9fVENQID09IGNpcGgucHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2lwaC5wcm90b2NvbCB8fAotCSAgICBJUFBST1RPX1NDVFAgPT0gY2lwaC5wcm90b2NvbCkKLQkJb2Zmc2V0ICYjNDM7PSAyICogc2l6ZW9mKF9fdTE2KTsgLyogQWxzbyBtYW5nbGUgcG9ydHMgKi8KLQotCXZlcmRpY3QgPSBpcF92c19pY21wX3htaXRfdjYoc2tiLCBjcCwgcHAsIG9mZnNldCwgaG9va251bSwgJmFtcDtjaXBoKTsKJiM0MzsJdmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdF92Nihza2IsIGNwLCBwcCwgaXBoLSZndDtsZW4sIGhvb2tudW0sICZhbXA7Y2lwaCk7CiAKIG91dDoKIAlpZiAobGlrZWx5KCFuZXdfY3ApKQpAQCAtMjE1Miw3ICYjNDM7MjE0Niw3IEBAIGlwX3ZzX2luX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlCiAJCWlmICh1bmxpa2VseShpcGgucHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QKSkgewogCQkJaW50IHJlbGF0ZWQ7CiAJCQlpbnQgdmVyZGljdCA9IGlwX3ZzX2luX2ljbXAoaXB2cywgc2tiLCAmYW1wO3JlbGF0ZWQsCi0JCQkJCQkgICAgaG9va251bSk7CiYjNDM7CQkJCQkJICAgIGhvb2tudW0sICZhbXA7aXBoKTsKIAogCQkJaWYgKHJlbGF0ZWQpCiAJCQkJcmV0dXJuIHZlcmRpY3Q7CkBAIC0yMjg4LDYgJiM0MzsyMjgyLDcgQEAgaXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJCSAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSkKIHsKIAlzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IG5ldF9pcHZzKHN0YXRlLSZndDtuZXQpOwomIzQzOwlzdHJ1Y3QgaXBfdnNfaXBoZHIgaXBoZHI7CiAJaW50IHI7CiAKIAkvKiBpcHZzIGVuYWJsZWQgaW4gdGhpcyBuZXRucyA/ICovCkBAIC0yMjk3LDEwICYjNDM7MjI5Miw5IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmIChzdGF0ZS0mZ3Q7cGYgPT0gTkZQUk9UT19JUFY0KSB7CiAJCWlmIChpcF9oZHIoc2tiKS0mZ3Q7cHJvdG9jb2wgIT0gSVBQUk9UT19JQ01QKQogCQkJcmV0dXJuIE5GX0FDQ0VQVDsKJiM0MzsJCWlwX3ZzX2ZpbGxfaXBoX3NrYihBRl9JTkVULCBza2IsIGZhbHNlLCAmYW1wO2lwaGRyKTsKICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgogCX0gZWxzZSB7Ci0JCXN0cnVjdCBpcF92c19pcGhkciBpcGhkcjsKLQogCQlpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVDYsIHNrYiwgZmFsc2UsICZhbXA7aXBoZHIpOwogCiAJCWlmIChpcGhkci5wcm90b2NvbCAhPSBJUFBST1RPX0lDTVBWNikKQEAgLTIzMTAsNyAmIzQzOzIzMDQsNyBAQCBpcF92c19mb3J3YXJkX2ljbXAodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKICNlbmRpZgogCX0KIAotCXJldHVybiBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgJmFtcDtyLCBzdGF0ZS0mZ3Q7aG9vayk7CiYjNDM7CXJldHVybiBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgJmFtcDtyLCBzdGF0ZS0mZ3Q7aG9vaywgJmFtcDtpcGhkcik7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgaXBfdnNfb3BzNFtdID0gewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMKaW5kZXggYzY3MzE3YmUxN2RmYWYuLjNkYmQzMDk2ZTE2MzdiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMKQEAgLTExLDcgJiM0MzsxMSw3IEBACiAKIHN0YXRpYyBpbnQKIHNjdHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JCXVuc2lnbmVkIGludCBzY3RwaG9mZik7CiYjNDM7CQlzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7CiAKIHN0YXRpYyBpbnQKIHNjdHBfY29ubl9zY2hlZHVsZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMTA5LDcgJiM0MzsxMDksNyBAQCBzY3RwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQlpbnQgcmV0OwogCiAJCS8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqLwotCQlpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC0mZ3Q7YWYsIHNrYiwgcHAsIHNjdHBob2ZmKSkKJiM0MzsJCWlmICghc2N0cF9jc3VtX2NoZWNrKGNwLSZndDthZiwgc2tiLCBwcCwgaXBoKSkKIAkJCXJldHVybiAwOwogCiAJCS8qIENhbGwgYXBwbGljYXRpb24gaGVscGVyIGlmIG5lZWRlZCAqLwpAQCAtMTIxLDcgJiM0MzsxMjEsNyBAQCBzY3RwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQkJcGF5bG9hZF9jc3VtID0gdHJ1ZTsKIAl9CiAKLQlzY3RwaCA9ICh2b2lkICopIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IHNjdHBob2ZmOwomIzQzOwlzY3RwaCA9ICh2b2lkICopc2tiLSZndDtkYXRhICYjNDM7IHNjdHBob2ZmOwogCiAJLyogT25seSB1cGRhdGUgY3N1bSBpZiB3ZSByZWFsbHkgaGF2ZSB0byAqLwogCWlmIChzY3RwaC0mZ3Q7c291cmNlICE9IGNwLSZndDt2cG9ydCB8fCBwYXlsb2FkX2NzdW0gfHwKQEAgLTE1Nyw3ICYjNDM7MTU3LDcgQEAgc2N0cF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAkJaW50IHJldDsKIAogCQkvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi8KLQkJaWYgKCFzY3RwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCBzY3RwaG9mZikpCiYjNDM7CQlpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC0mZ3Q7YWYsIHNrYiwgcHAsIGlwaCkpCiAJCQlyZXR1cm4gMDsKIAogCQkvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi8KQEAgLTE2OSw3ICYjNDM7MTY5LDcgQEAgc2N0cF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAkJCXBheWxvYWRfY3N1bSA9IHRydWU7CiAJfQogCi0Jc2N0cGggPSAodm9pZCAqKSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBzY3RwaG9mZjsKJiM0MzsJc2N0cGggPSAodm9pZCAqKXNrYi0mZ3Q7ZGF0YSAmIzQzOyBzY3RwaG9mZjsKIAogCS8qIE9ubHkgdXBkYXRlIGNzdW0gaWYgd2UgcmVhbGx5IGhhdmUgdG8gKi8KIAlpZiAoc2N0cGgtJmd0O2Rlc3QgIT0gY3AtJmd0O2Rwb3J0IHx8IHBheWxvYWRfY3N1bSB8fApAQCAtMTg3LDE5ICYjNDM7MTg3LDIyIEBAIHNjdHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAKIHN0YXRpYyBpbnQKIHNjdHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JCXVuc2lnbmVkIGludCBzY3RwaG9mZikKJiM0MzsJCXN0cnVjdCBpcF92c19pcGhkciAqaXBoKQogewomIzQzOwl1bnNpZ25lZCBpbnQgc2N0cGhvZmYgPSBpcGgtJmd0O2xlbjsKIAlzdHJ1Y3Qgc2N0cGhkciAqc2g7CiAJX19sZTMyIGNtcCwgdmFsOwogCiYjNDM7CWlmICghaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHNrYiwgYWYpKQomIzQzOwkJcmV0dXJuIDE7CiAJc2ggPSAoc3RydWN0IHNjdHBoZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IHNjdHBob2ZmKTsKIAljbXAgPSBzaC0mZ3Q7Y2hlY2tzdW07CiAJdmFsID0gc2N0cF9jb21wdXRlX2Nrc3VtKHNrYiwgc2N0cGhvZmYpOwogCiAJaWYgKHZhbCAhPSBjbXApIHsKIAkJLyogQ1JDIGZhaWx1cmUsIGR1bXAgaXQuICovCi0JCUlQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsCi0JCQkJJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yJiMzNDspOwomIzQzOwkJSVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgaXBoLSZndDtvZmYsCiYjNDM7CQkJCSAmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3ImIzM0Oyk7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYwppbmRleCBmODZiNzYzZWZjYzRkYy4uOTlhMjg2ZmRjOTBjNjUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMKQEAgLTI5LDcgJiM0MzsyOSw3IEBACiAKIHN0YXRpYyBpbnQKIHRjcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKLQkgICAgICAgdW5zaWduZWQgaW50IHRjcGhvZmYpOwomIzQzOwkgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpOwogCiBzdGF0aWMgaW50CiB0Y3BfY29ubl9zY2hlZHVsZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMTY2LDcgJiM0MzsxNjYsNyBAQCB0Y3Bfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAJCWludCByZXQ7CiAKIAkJLyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovCi0JCWlmICghdGNwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCB0Y3Bob2ZmKSkKJiM0MzsJCWlmICghdGNwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCBpcGgpKQogCQkJcmV0dXJuIDA7CiAKIAkJLyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovCkBAIC0xNzksNyAmIzQzOzE3OSw3IEBAIHRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAkJCXBheWxvYWRfY3N1bSA9IHRydWU7CiAJfQogCi0JdGNwaCA9ICh2b2lkICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgdGNwaG9mZjsKJiM0MzsJdGNwaCA9ICh2b2lkICopc2tiLSZndDtkYXRhICYjNDM7IHRjcGhvZmY7CiAJdGNwaC0mZ3Q7c291cmNlID0gY3AtJmd0O3Zwb3J0OwogCiAJLyogQWRqdXN0IFRDUCBjaGVja3N1bXMgKi8KQEAgLTI0NCw3ICYjNDM7MjQ0LDcgQEAgdGNwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQlpbnQgcmV0OwogCiAJCS8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqLwotCQlpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLSZndDthZiwgc2tiLCBwcCwgdGNwaG9mZikpCiYjNDM7CQlpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLSZndDthZiwgc2tiLCBwcCwgaXBoKSkKIAkJCXJldHVybiAwOwogCiAJCS8qCkBAIC0yNjAsNyAmIzQzOzI2MCw3IEBAIHRjcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAkJCXBheWxvYWRfY3N1bSA9IHRydWU7CiAJfQogCi0JdGNwaCA9ICh2b2lkICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgdGNwaG9mZjsKJiM0MzsJdGNwaCA9ICh2b2lkICopc2tiLSZndDtkYXRhICYjNDM7IHRjcGhvZmY7CiAJdGNwaC0mZ3Q7ZGVzdCA9IGNwLSZndDtkcG9ydDsKIAogCS8qCkBAIC0zMDIsNDEgJiM0MzszMDIsMTMgQEAgdGNwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCiBzdGF0aWMgaW50CiB0Y3BfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKQomIzQzOwkgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpCiB7Ci0Jc3dpdGNoIChza2ItJmd0O2lwX3N1bW1lZCkgewotCWNhc2UgQ0hFQ0tTVU1fTk9ORToKLQkJc2tiLSZndDtjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgdGNwaG9mZiwgc2tiLSZndDtsZW4gLSB0Y3Bob2ZmLCAwKTsKLQkJZmFsbHRocm91Z2g7Ci0JY2FzZSBDSEVDS1NVTV9DT01QTEVURToKLSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgotCQlpZiAoYWYgPT0gQUZfSU5FVDYpIHsKLQkJCWlmIChjc3VtX2lwdjZfbWFnaWMoJmFtcDtpcHY2X2hkcihza2IpLSZndDtzYWRkciwKLQkJCQkJICAgICZhbXA7aXB2Nl9oZHIoc2tiKS0mZ3Q7ZGFkZHIsCi0JCQkJCSAgICBza2ItJmd0O2xlbiAtIHRjcGhvZmYsCi0JCQkJCSAgICBJUFBST1RPX1RDUCwKLQkJCQkJICAgIHNrYi0mZ3Q7Y3N1bSkpIHsKLQkJCQlJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLAotCQkJCQkJICYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvciYjMzQ7KTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJfSBlbHNlCi0jZW5kaWYKLQkJCWlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS0mZ3Q7c2FkZHIsCi0JCQkJCSAgICAgIGlwX2hkcihza2IpLSZndDtkYWRkciwKLQkJCQkJICAgICAgc2tiLSZndDtsZW4gLSB0Y3Bob2ZmLAotCQkJCQkgICAgICBpcF9oZHIoc2tiKS0mZ3Q7cHJvdG9jb2wsCi0JCQkJCSAgICAgIHNrYi0mZ3Q7Y3N1bSkpIHsKLQkJCQlJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLAotCQkJCQkJICYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvciYjMzQ7KTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyogTm8gbmVlZCB0byBjaGVja3N1bS4gKi8KLQkJYnJlYWs7CiYjNDM7CWlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgaXBoLSZndDtsZW4sIElQUFJPVE9fVENQLCBhZikpIHsKJiM0MzsJCUlQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIGlwaC0mZ3Q7b2ZmLAomIzQzOwkJCQkgJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yJiMzNDspOwomIzQzOwkJcmV0dXJuIDA7CiAJfQotCiAJcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYwppbmRleCA1OGY5ZTI1NTkyN2UyZS4uZjMyNzg1NjgyNDAyZGQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMKQEAgLTI1LDcgJiM0MzsyNSw3IEBACiAKIHN0YXRpYyBpbnQKIHVkcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKLQkgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpOwomIzQzOwkgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpOwogCiBzdGF0aWMgaW50CiB1ZHBfY29ubl9zY2hlZHVsZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMTU1LDcgJiM0MzsxNTUsNyBAQCB1ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAJCWludCByZXQ7CiAKIAkJLyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovCi0JCWlmICghdWRwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCB1ZHBob2ZmKSkKJiM0MzsJCWlmICghdWRwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCBpcGgpKQogCQkJcmV0dXJuIDA7CiAKIAkJLyoKQEAgLTE3MCw3ICYjNDM7MTcwLDcgQEAgdWRwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQkJcGF5bG9hZF9jc3VtID0gdHJ1ZTsKIAl9CiAKLQl1ZHBoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyB1ZHBob2ZmOwomIzQzOwl1ZHBoID0gKHZvaWQgKilza2ItJmd0O2RhdGEgJiM0MzsgdWRwaG9mZjsKIAl1ZHBoLSZndDtzb3VyY2UgPSBjcC0mZ3Q7dnBvcnQ7CiAKIAkvKgpAQCAtMjM4LDcgJiM0MzsyMzgsNyBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAJCWludCByZXQ7CiAKIAkJLyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovCi0JCWlmICghdWRwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCB1ZHBob2ZmKSkKJiM0MzsJCWlmICghdWRwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCBpcGgpKQogCQkJcmV0dXJuIDA7CiAKIAkJLyoKQEAgLTI1NCw3ICYjNDM7MjU0LDcgQEAgdWRwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQkJcGF5bG9hZF9jc3VtID0gdHJ1ZTsKIAl9CiAKLQl1ZHBoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyB1ZHBob2ZmOwomIzQzOwl1ZHBoID0gKHZvaWQgKilza2ItJmd0O2RhdGEgJiM0MzsgdWRwaG9mZjsKIAl1ZHBoLSZndDtkZXN0ID0gY3AtJmd0O2Rwb3J0OwogCiAJLyoKQEAgLTI5OCw0OCAmIzQzOzI5OCwyMCBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAKIHN0YXRpYyBpbnQKIHVkcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKLQkgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpCiYjNDM7CSAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCkKIHsKIAlzdHJ1Y3QgdWRwaGRyIF91ZHBoLCAqdWg7CiAKLQl1aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHVkcGhvZmYsIHNpemVvZihfdWRwaCksICZhbXA7X3VkcGgpOwomIzQzOwl1aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGlwaC0mZ3Q7bGVuLCBzaXplb2YoX3VkcGgpLCAmYW1wO191ZHBoKTsKIAlpZiAodWggPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAodWgtJmd0O2NoZWNrICE9IDApIHsKLQkJc3dpdGNoIChza2ItJmd0O2lwX3N1bW1lZCkgewotCQljYXNlIENIRUNLU1VNX05PTkU6Ci0JCQlza2ItJmd0O2NzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCB1ZHBob2ZmLAotCQkJCQkJIHNrYi0mZ3Q7bGVuIC0gdWRwaG9mZiwgMCk7Ci0JCQlmYWxsdGhyb3VnaDsKLQkJY2FzZSBDSEVDS1NVTV9DT01QTEVURToKLSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgotCQkJaWYgKGFmID09IEFGX0lORVQ2KSB7Ci0JCQkJaWYgKGNzdW1faXB2Nl9tYWdpYygmYW1wO2lwdjZfaGRyKHNrYiktJmd0O3NhZGRyLAotCQkJCQkJICAgICZhbXA7aXB2Nl9oZHIoc2tiKS0mZ3Q7ZGFkZHIsCi0JCQkJCQkgICAgc2tiLSZndDtsZW4gLSB1ZHBob2ZmLAotCQkJCQkJICAgIElQUFJPVE9fVURQLAotCQkJCQkJICAgIHNrYi0mZ3Q7Y3N1bSkpIHsKLQkJCQkJSVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCwKLQkJCQkJCQkgJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yJiMzNDspOwotCQkJCQlyZXR1cm4gMDsKLQkJCQl9Ci0JCQl9IGVsc2UKLSNlbmRpZgotCQkJCWlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS0mZ3Q7c2FkZHIsCi0JCQkJCQkgICAgICBpcF9oZHIoc2tiKS0mZ3Q7ZGFkZHIsCi0JCQkJCQkgICAgICBza2ItJmd0O2xlbiAtIHVkcGhvZmYsCi0JCQkJCQkgICAgICBpcF9oZHIoc2tiKS0mZ3Q7cHJvdG9jb2wsCi0JCQkJCQkgICAgICBza2ItJmd0O2NzdW0pKSB7Ci0JCQkJCUlQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsCi0JCQkJCQkJICYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvciYjMzQ7KTsKLQkJCQkJcmV0dXJuIDA7Ci0JCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQkvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqLwotCQkJYnJlYWs7Ci0JCX0KJiM0MzsJaWYgKCF1aC0mZ3Q7Y2hlY2spCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJaWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpcGgtJmd0O2xlbiwgSVBQUk9UT19VRFAsIGFmKSkgewomIzQzOwkJSVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgaXBoLSZndDtvZmYsCiYjNDM7CQkJCSAmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3ImIzM0Oyk7CiYjNDM7CQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYwppbmRleCA5ZmVmNDMzNWRhMTNmZC4uMGIwYzUzMDQ5OTNhOTEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYwpAQCAtMTUwMiwyMCAmIzQzOzE1MDIsMjIgQEAgaXBfdnNfZHJfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiAgKi8KIGludAogaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKLQkJc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IGhvb2tudW0sCi0JCXN0cnVjdCBpcF92c19pcGhkciAqaXBoKQomIzQzOwkJc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsCiYjNDM7CQl1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKQogewogCXN0cnVjdCBydGFibGUJKnJ0OwkvKiBSb3V0ZSB0byB0aGUgb3RoZXIgaG9zdCAqLwogCWludCByYzsKIAlpbnQgbG9jYWw7CiAJaW50IHJ0X21vZGUsIHdhc19pbnB1dDsKJiM0MzsJYm9vbCBoYXNfcG9ydHMgPSBmYWxzZTsKJiM0MzsJdW5zaWduZWQgaW50IHdsZW47CiAKIAkvKiBUaGUgSUNNUCBwYWNrZXQgZm9yIFZTL1RVTiwgVlMvRFIgYW5kIExPQ0FMTk9ERSB3aWxsIGJlCiAJICAgZm9yd2FyZGVkIGRpcmVjdGx5IGhlcmUsIGJlY2F1c2UgdGhlcmUgaXMgbm8gbmVlZCB0bwogCSAgIHRyYW5zbGF0ZSBhZGRyZXNzL3BvcnQgYmFjayAqLwogCWlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkgewogCQlpZiAoY3AtJmd0O3BhY2tldF94bWl0KQotCQkJcmMgPSBjcC0mZ3Q7cGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGlwaCk7CiYjNDM7CQkJcmMgPSBjcC0mZ3Q7cGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGNpcGgpOwogCQllbHNlCiAJCQlyYyA9IE5GX0FDQ0VQVDsKIAkJLyogZG8gbm90IHRvdWNoIHNrYiBhbnltb3JlICovCkBAIC0xNTMzLDcgJiM0MzsxNTM1LDcgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIAkJICBJUF9WU19SVF9NT0RFX0xPQ0FMIHwgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwgfAogCQkgIElQX1ZTX1JUX01PREVfUkRSIDogSVBfVlNfUlRfTU9ERV9OT05fTE9DQUw7CiAJbG9jYWwgPSBfX2lwX3ZzX2dldF9vdXRfcnQoY3AtJmd0O2lwdnMsIGNwLSZndDthZiwgc2tiLCBjcC0mZ3Q7ZGVzdCwgY3AtJmd0O2RhZGRyLmlwLCBydF9tb2RlLAotCQkJCSAgIE5VTEwsIGlwaCk7CiYjNDM7CQkJCSAgIE5VTEwsIGNpcGgpOwogCWlmIChsb2NhbCAmbHQ7IDApCiAJCWdvdG8gdHhfZXJyb3I7CiAJcnQgPSBza2JfcnRhYmxlKHNrYik7CkBAIC0xNTY0LDE0ICYjNDM7MTU2NiwyMSBAQCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAogCQlnb3RvIHR4X2Vycm9yOwogCX0KIAomIzQzOwl3bGVuID0gY2lwaC0mZ3Q7bGVuOwomIzQzOwlpZiAoY2lwaC0mZ3Q7cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1AgfHwgY2lwaC0mZ3Q7cHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgfHwKJiM0MzsJICAgIGNpcGgtJmd0O3Byb3RvY29sID09IElQUFJPVE9fU0NUUCkgewomIzQzOwkJd2xlbiAmIzQzOz0gMiAqIHNpemVvZihfX3UxNik7IC8qIEFsc28gbWFuZ2xlIHBvcnRzICovCiYjNDM7CQloYXNfcG9ydHMgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiAJLyogY29weS1vbi13cml0ZSB0aGUgcGFja2V0IGJlZm9yZSBtYW5nbGluZyBpdCAqLwotCWlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSkKJiM0MzsJaWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCB3bGVuKSkKIAkJZ290byB0eF9lcnJvcjsKIAogCWlmIChza2JfY293KHNrYiwgcnQtJmd0O2RzdC5kZXYtJmd0O2hhcmRfaGVhZGVyX2xlbikpCiAJCWdvdG8gdHhfZXJyb3I7CiAKLQlpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMCk7CiYjNDM7CWlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMpOwogCiAJLyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi8KIAlza2ItJmd0O2lnbm9yZV9kZiA9IDE7CkBAIC0xNTg3LDEwICYjNDM7MTU5NiwxMiBAQCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAogI2lmZGVmIENPTkZJR19JUF9WU19JUFY2CiBpbnQKIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCi0JCXN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBob29rbnVtLAotCQlzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwdnNoKQomIzQzOwkJc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsCiYjNDM7CQl1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKQogewomIzQzOwlib29sIGhhc19wb3J0cyA9IGZhbHNlOwogCXN0cnVjdCBydDZfaW5mbwkqcnQ7CS8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovCiYjNDM7CXVuc2lnbmVkIGludCB3bGVuOwogCWludCByYzsKIAlpbnQgbG9jYWw7CiAJaW50IHJ0X21vZGU7CkBAIC0xNjAwLDcgJiM0MzsxNjExLDcgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIAkgICB0cmFuc2xhdGUgYWRkcmVzcy9wb3J0IGJhY2sgKi8KIAlpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpIHsKIAkJaWYgKGNwLSZndDtwYWNrZXRfeG1pdCkKLQkJCXJjID0gY3AtJmd0O3BhY2tldF94bWl0KHNrYiwgY3AsIHBwLCBpcHZzaCk7CiYjNDM7CQkJcmMgPSBjcC0mZ3Q7cGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGNpcGgpOwogCQllbHNlCiAJCQlyYyA9IE5GX0FDQ0VQVDsKIAkJLyogZG8gbm90IHRvdWNoIHNrYiBhbnltb3JlICovCkBAIC0xNjE3LDcgJiM0MzsxNjI4LDcgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIAkJICBJUF9WU19SVF9NT0RFX0xPQ0FMIHwgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwgfAogCQkgIElQX1ZTX1JUX01PREVfUkRSIDogSVBfVlNfUlRfTU9ERV9OT05fTE9DQUw7CiAJbG9jYWwgPSBfX2lwX3ZzX2dldF9vdXRfcnRfdjYoY3AtJmd0O2lwdnMsIGNwLSZndDthZiwgc2tiLCBjcC0mZ3Q7ZGVzdCwKLQkJCQkgICAgICAmYW1wO2NwLSZndDtkYWRkci5pbjYsIE5VTEwsIGlwdnNoLCAwLCBydF9tb2RlKTsKJiM0MzsJCQkJICAgICAgJmFtcDtjcC0mZ3Q7ZGFkZHIuaW42LCBOVUxMLCBjaXBoLCAwLCBydF9tb2RlKTsKIAlpZiAobG9jYWwgJmx0OyAwKQogCQlnb3RvIHR4X2Vycm9yOwogCXJ0ID0gZHN0X3J0Nl9pbmZvKHNrYl9kc3Qoc2tiKSk7CkBAIC0xNjQ4LDE0ICYjNDM7MTY1OSwyMSBAQCBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAogCQlnb3RvIHR4X2Vycm9yOwogCX0KIAomIzQzOwl3bGVuID0gY2lwaC0mZ3Q7bGVuOwomIzQzOwlpZiAoY2lwaC0mZ3Q7cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1AgfHwgY2lwaC0mZ3Q7cHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgfHwKJiM0MzsJICAgIGNpcGgtJmd0O3Byb3RvY29sID09IElQUFJPVE9fU0NUUCkgewomIzQzOwkJd2xlbiAmIzQzOz0gMiAqIHNpemVvZihfX3UxNik7IC8qIEFsc28gbWFuZ2xlIHBvcnRzICovCiYjNDM7CQloYXNfcG9ydHMgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiAJLyogY29weS1vbi13cml0ZSB0aGUgcGFja2V0IGJlZm9yZSBtYW5nbGluZyBpdCAqLwotCWlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSkKJiM0MzsJaWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCB3bGVuKSkKIAkJZ290byB0eF9lcnJvcjsKIAogCWlmIChza2JfY293KHNrYiwgcnQtJmd0O2RzdC5kZXYtJmd0O2hhcmRfaGVhZGVyX2xlbikpCiAJCWdvdG8gdHhfZXJyb3I7CiAKLQlpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMCk7CiYjNDM7CWlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMsIGNpcGgpOwogCiAJLyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi8KIAlza2ItJmd0O2lnbm9yZV9kZiA9IDE7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA3OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzA2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVBWUyBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGFpbWVkIGF0IG1vZGlmeWluZyB0aGUgSVBWUyBjb2RlIHdpdGhpbiBgbmV0L25ldGZpbHRlci9pcHZzL2AuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY2hhbmdlcyByZWxhdGVkIHRvIElDTVAgTkFUIGhhbmRsaW5nIGFuZCBjaGVja3N1bSB2YWxpZGF0aW9uLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIHRvdWNoZWQgcXVpdGUgYSBmZXcgZnVuY3Rpb25zLCBpbmNsdWRpbmcgYGlwX3ZzX25hdF9pY21wYCwgYGlwX3ZzX25hdF9pY21wX3Y2YCwgYGlwX3ZzX2luX2ljbXBgLCBgaXBfdnNfb3V0X2ljbXBgLCBgaXBfdnNfaWNtcF94bWl0YCwgYW5kIHRoZWlyIElQdjYgY291bnRlcnBhcnRzLiBUaGV5JiMzOTt2ZSBhbHNvIHJlZmFjdG9yZWQgY2hlY2tzdW0gY2hlY2tpbmcgd2l0aGluIHRoZSBwcm90b2NvbCBoYW5kbGVycyAoYGlwX3ZzX3Byb3RvX3RjcC5jYCwgYGlwX3ZzX3Byb3RvX3VkcC5jYCwgYGlwX3ZzX3Byb3RvX3NjdHAuY2ApIHVzaW5nIHRoaXMgbmV3IGhlbHBlciwgYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AsIHdoaWNoIGlzIGludGVyZXN0aW5nLgoKQmVmb3JlIEkgZGlnIHRvbyBkZWVwLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IElQVlMgaXMgZXZlbiBlbmFibGVkIGFuZCBhY2Nlc3NpYmxlLCB3aGljaCBJIGNhbiBjb25maXJtIGlzIHRoZSBjYXNlLCBzbyBnb29kLCBnb29kLiBOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gcHJlY2lzZWx5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgYmVpbmcgbW9kaWZpZWQsIGJlY2F1c2UgdGhvc2UgYXJlIHRoZSBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nIGFuZCB0YXJnZXRlZCBhbmFseXNpcy4gSSB3YW50IHRvIGhpZ2hsaWdodCB0aGUgYXJlYXMgdGhhdCBhcmUgbGlrZWx5IHRvIGJlIHRoZSBtb3N0IGltcGFjdGVkLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGBpcF92c19uYXRfaWNtcGAsIGBpcF92c19uYXRfaWNtcF92NmAsIGBoYW5kbGVfcmVzcG9uc2VfaWNtcGAsIGBpcF92c19vdXRfaWNtcGAsIGBpcF92c19vdXRfaWNtcF92NmAsIGBpcF92c19pbl9pY21wYCwgYGlwX3ZzX2luX2ljbXBfdjZgLCBgaXBfdnNfZm9yd2FyZF9pY21wYCwgYHNjdHBfY3N1bV9jaGVja2AsIGB0Y3BfY3N1bV9jaGVja2AsIGB1ZHBfY3N1bV9jaGVja2AsIGBpcF92c19pY21wX3htaXRgLCBhbmQgYGlwX3ZzX2ljbXBfeG1pdF92NmAuIFRoaXMgZ2l2ZXMgbWUgYSBtdWNoIG1vcmUgZm9jdXNlZCB2aWV3IG9mIHdoZXJlIHRvIGFwcGx5IG15IHRlc3RpbmcuCgpOZXh0IHN0ZXA6IGRvdWJsZS1jaGVja2luZyB0aGUgS2NvbmZpZyBvcHRpb25zLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGxpa2UgYENPTkZJR19JUF9WU2AsIGBDT05GSUdfSVBfVlNfSVBWNmAsIGBDT05GSUdfSVBfVlNfUFJPVE9fVENQYCwgYENPTkZJR19JUF9WU19QUk9UT19VRFBgLCBhbmQgYENPTkZJR19JUF9WU19QUk9UT19TQ1RQYCBhcmUgYWxsIHNldCBjb3JyZWN0bHkgYW5kIGhhdmVuJiMzOTt0IGludHJvZHVjZWQgYW55IHVuZXhwZWN0ZWQgZGVwZW5kZW5jaWVzIG9yIGNvbmZsaWN0cy4gVGhlbiBpdCYjMzk7cyB0aW1lIHRvIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBhbmQgcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwNzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfVlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O0lQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAmIzM5O0lQVlMgU0ggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cdGludCBcJiMzNDtJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAmIzM5O0lQVlMgTUggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXHRpbnQgXCYjMzQ7SVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU4MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipFeGFtaW5pbmcgSVBWUyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgc28gSSBuZWVkIHRvIHZlcmlmeSBhIGNvdXBsZSBvZiBJUFZTIChJUCBWaXJ0dWFsIFNlcnZlcikgY29uZmlndXJhdGlvbnMgaGVyZS4gTGV0JiMzOTtzIHNlZS4uLiBGaXJzdCwgSSB3YW50IHRvIGNvbmZpcm0gdGhlIHN0YXR1cyBvZiBgQ09ORklHX0lQX1ZTX0lQVjZgLiBNYWtlcyBzZW5zZSDigJMgd2UgbmVlZCB0byBlbnN1cmUgSVB2NiBzdXBwb3J0IGlzIGVuYWJsZWQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGRpcmVjdGlvbiBvZiBuZXR3b3JrIGluZnJhc3RydWN0dXJlLiBJUHY2IGlzIGluY3JlYXNpbmdseSBpbXBvcnRhbnQsIGFuZCB3aXRob3V0IHRoaXMsIHRoZSBJUFZTIHNldHVwIHdpbGwgYmUgc2V2ZXJlbHkgbGltaXRlZC4gSSYjMzk7bSB0aGlua2luZywgdGhpcyBpcyBwcm9iYWJseSBjcml0aWNhbCBmb3IgbW9kZXJuIGRlcGxveW1lbnRzLiBUaGVuLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiBgQ09ORklHX0lQX1ZTX1BST1RPX1NDVFBgLiBTQ1RQIGlzIGEgYml0IGxlc3MgY29tbW9uIHRoYW4gVENQIGFuZCBVRFAsIGJ1dCBpdOKAmXMgc3RpbGwgaW1wb3J0YW50IGZvciBjZXJ0YWluIGFwcGxpY2F0aW9ucy4gV2Ugc2hvdWxkIHZlcmlmeSB0aGF0IFNDVFAgc3VwcG9ydCBpcyBwcm9wZXJseSBpbnRlZ3JhdGVkIGFuZCBlbmFibGVkIGlmIHRoZSBzcGVjaWZpYyB1c2UgY2FzZSBkZW1hbmRzIGl0LiBCYXNpY2FsbHksIHRoZXNlIGNvbmZpZyBvcHRpb25zIGRldGVybWluZSB0aGUgZnVuZGFtZW50YWwgY2FwYWJpbGl0aWVzIG9mIElQVlMsIHNvIHRoZXkgYXJlIHRoZSBzdGFydGluZyBwb2ludCBmb3IgZXZlcnl0aGluZy4gTmVlZCB0byBtYWtlIHN1cmUgYm90aCBvZiB0aGVzZSBhcmUgc2V0IGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwNzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9WU19JUFY2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA3OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODc5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqSW52ZXN0aWdhdGluZyBhIEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbioqCgpIbW0sIEkgc3VzcGVjdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIHRoaXMgbWlnaHQgYmUgYENPTkZJR19JUF9WU19JUFY2YC4gSSYjMzk7bSBwcmV0dHkgc3VyZSBJIHNhdyBpdCBpbiBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIGJlZm9yZSwgYnV0IGl0JiMzOTtzIGFsd2F5cyB3b3J0aCBkb3VibGUtY2hlY2tpbmcuIFRpbWUgdG8gdGFrZSBhIGxvb2sgYXQgZWl0aGVyIHRoYXQgZmlsZSBvciBtYXliZSB0aGUgZ2VuZXJhbCBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBlbnN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgc29tZXRoaW5nLiBHb3R0YSB0cmFjayBkb3duIGV4YWN0bHkgd2hlcmUgdGhhdCB0aGluZyBpcyBkZWZpbmVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmsgc3RhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNC0jXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJiMzOTtJUFZTIFNIIHNjaGVkdWxlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODctXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXHRpbnQgXCYjMzQ7SVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJiMzOTtJUFZTIE1IIHNjaGVkdWxlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVx0aW50IFwmIzM0O0lQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNzAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBJUHY2IGFuZCBJUFZTKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcuLi4gZ290dGEgZ2V0IGEgaGFuZGxlIG9uIHRoZSBJUHY2IGltcGxlbWVudGF0aW9uIHdpdGggSVBWUywgcmlnaHQ/IExldCYjMzk7cyBzdGFydCB3aXRoIGEgc29saWQgYGdyZXBgIHRvIHF1aWNrbHkgaWRlbnRpZnkgcmVsZXZhbnQgY29kZSBzZWN0aW9ucy4gVGhhdCBgSVBfVlNfSVBWNmAgc3ltYm9sIGZlZWxzIGxpa2UgdGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnQuIEl04oCZcyB0aGUgdXN1YWwgZ28tdG8gaWRlbnRpZmllciBmb3IgYW55IElQdjYgc3BlY2lmaWMgZWxlbWVudHMgaW4gdGhlIGtlcm5lbCBtb2R1bGUsIGFuZCB3aWxsIGhlbHAgbWUgcGlucG9pbnQgdGhlIHBhcnRzIG9mIHRoZSBjb2RlIGJhc2UuIEdyYWJiaW5nIGFsbCB0aGUgaW5zdGFuY2VzIG9mIGBJUF9WU19JUFY2YCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgbGF5IG9mIHRoZSBsYW5kLCBlc3BlY2lhbGx5IGlmIEkgaGF2ZSB0byBkZWJ1ZyBzb21lIGNvbm5lY3Rpdml0eSBpc3N1ZXMuIFRoYXQgc2hvdWxkIGNvdmVyIHRoZSBiYXNpY3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA3OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQX1ZTX0lQVjYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yNz1pZiBJUF9WU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjgtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyOTpjb25maWdcdElQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDtJUHY2IHN1cHBvcnQgZm9yIElQVlNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2NzAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCYjMzk7cyBhIGRpcmVjdCByZXByZXNlbnRhdGlvbiBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKlNDVFAgQ29uc2lkZXJhdGlvbioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgbmV0d29yayBwcm90b2NvbCBjb25zaWRlcmF0aW9ucy4gV2UmIzM5O3ZlIGdvdCB0aGUgdXN1YWwgc3VzcGVjdHMgdG8gdGhpbmsgYWJvdXQsIGJ1dCB3YWl0IGEgc2Vjb25kLi4uIHdoYXQgYWJvdXQgYElQX1ZTX1BST1RPX1NDVFBgPyBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtIYXZlIHdlIGZ1bGx5IGNvbnNpZGVyZWQgdGhlIGltcGxpY2F0aW9ucyBvZiBTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2wgKFNDVFApIHdpdGhpbiB0aGlzIGNvbnRleHQ/JiMzNDsgSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIGFueSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zIG9yIHF1aXJrcyByZWxhdGVkIHRvIHVzaW5nIFNDVFAuIFNwZWNpZmljYWxseSwgaG93IHdpbGwgdGhpcyBwcm90b2NvbCBhZmZlY3QgdGhlIFZpcnR1YWwgU2VydmVyIChWUykgaW1wbGVtZW50YXRpb24/IERvZXMgU0NUUCBpbnRyb2R1Y2UgdW5pcXVlIGNoYWxsZW5nZXMgb3Igb3Bwb3J0dW5pdGllcyB3ZSBuZWVkIHRvIGFjY291bnQgZm9yIGluIHRoZSBzZXR1cD8gQXJlIHRoZXJlIG51YW5jZXMgdG8gdGhlIFNDVFAgdGhhdCB3ZSBtdXN0IGJlIGF3YXJlIG9mIGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlPyBXZSBtaWdodCBuZWVkIHRvIHJlZnJlc2ggdGhlIGRvY3VtZW50YXRpb24gdG8gbWFrZSBzdXJlIHdlIGhhdmUgZnVsbHkgYWNjb3VudGVkIGZvciBpdHMgdXNlLiBJIHNob3VsZCBtYWtlIGEgbm90ZSB0byBjaXJjbGUgYmFjayBhbmQgZnVsbHkgdGhpbmsgdGhyb3VnaCBpdHMgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwNzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9WU19QUk9UT19TQ1RQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MTAwPWNvbmZpZ1x0SVBfVlNfUFJPVE9fQUhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMDUtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxMDY6Y29uZmlnICBJUF9WU19QUk9UT19TQ1RQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMDctXHRib29sIFwmIzM0O1NDVFAgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTAzMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGFzIGlmIEksIGFuIGV4cGVydCwgYW0gcHJvY2Vzc2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIFRDUCBQcm90b2NvbCBJbnRlcmFjdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHdoYXQgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIElQIGFuZCBUQ1AsIHNwZWNpZmljYWxseSB0aGF0IGBJUF9WU19QUk9UT19UQ1BgIHRoaW5nPyBUaGF0JiMzOTtzIGEga2V5IGVsZW1lbnQsIGlzbiYjMzk7dCBpdD8gSSBuZWVkIHRvIHRoaW5rIGNhcmVmdWxseSBhYm91dCBob3cgdGhhdCBhZmZlY3RzIHRyYWZmaWMgbWFuYWdlbWVudCwgZXNwZWNpYWxseSBpbiB2aXJ0dWFsIHNlcnZlciBzZXR1cHMuIEl0JiMzOTtzIG5vdCBqdXN0IGEgc3RhbmRhbG9uZSBwcm90b2NvbDsgaXQmIzM5O3MgdGhlIGludGVycGxheSwgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZXNlIGxheWVycyB0aGF0IHJlYWxseSBtYXR0ZXJzIGZvciBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkuIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgaG93IHRoaXMgc3BlY2lmaWMgcHJvdG9jb2wgaW50ZXJhY3Rpb24gaW5mbHVlbmNlcyBsb2FkIGJhbGFuY2luZyB0ZWNobmlxdWVzLiBUaGlua2luZyBhYm91dCBpdCBub3cgSSBjYW4gc2VlIHRoYXQgdGhpcyBpcyBhIHF1ZXN0aW9uIHRoYXQgcmVxdWlyZXMgYSBkZWVwZXIgZGl2ZSBhbmQgSSBzaG91bGQgZG8gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SVBfVlNfUFJPVE9fVENQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Nzc9Y29tbWVudCBcJiMzNDtJUFZTIHRyYW5zcG9ydCBwcm90b2NvbCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy03OC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjc5OmNvbmZpZ1x0SVBfVlNfUFJPVE9fVENQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy04MC1cdGJvb2wgXCYjMzQ7VENQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMjE9Y29uZmlnXHRJUF9WU19GVFBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyMi1cdHRyaXN0YXRlIFwmIzM0O0ZUUCBwcm90b2NvbCBoZWxwZXJcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMyMzpcdGRlcGVuZHMgb24gSVBfVlNfUFJPVE9fVENQIFx1MDAyNlx1MDAyNiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX05BVCBcdTAwMjZcdTAwMjYgXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyNC1cdFx0TkZfQ09OTlRSQUNLX0ZUUFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ0OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqVURQIENvbnNpZGVyYXRpb25zIGluIElQVlMqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgSVAgVmlydHVhbCBTZXJ2ZXIgKElQVlMpIGFuZCBpdHMgcHJvdG9jb2wgaGFuZGxpbmcuIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgaGVyZSwgY29uc2lkZXJpbmcgdGhlIG51YW5jZXMuIE9rYXksIHNvIHdlJiMzOTtyZSBzZXR0aW5nIHVwIGEgbG9hZCBiYWxhbmNpbmcgc3lzdGVtIHVzaW5nIElQVlMuIFRoYXQmIzM5O3MgYSBzb2xpZCBjaG9pY2UsIGNvbnNpZGVyaW5nIGl0cyBwZXJmb3JtYW5jZSBhZHZhbnRhZ2VzLCBlc3BlY2lhbGx5IHdpdGggVURQLiBBbmQgSSBrbm93IGl0JiMzOTtzIGNhcGFibGUgb2YgaGFuZGxpbmcgdmFyaW91cyB0eXBlcyBvZiBwcm90b2NvbHMsIHdoaWNoIGdldHMgbWUgdGhpbmtpbmcuLi4gd2hhdCBhYm91dCB0aGUgc3BlY2lmaWNzIG9mIGhhbmRsaW5nIFVEUCB3aXRoIElQVlMsIHNpbmNlIHRoZXJlIGFyZSBzb21lIGRpZmZlcmVuY2VzLiBUaGUgcXVlc3Rpb24gb24gbXkgbWluZCBpczogV2hhdCBhYm91dCB0aGUgYElQX1ZTX1BST1RPX1VEUGAgb3B0aW9uIGluIHBhcnRpY3VsYXI/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMgdGhhdCBJIHNob3VsZCBiZSBtYWtpbmcgZm9yIFVEUCBjb25uZWN0aW9ucyB1c2luZyB0aGlzIElQVlMgcHJvdG9jb2wgb3B0aW9uLCBzbyB0aGF0IEkgZG9uJiMzOTt0IG92ZXJsb29rIGEgY3JpdGljYWwgZGV0YWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9WU19QUk9UT19VRFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz03OT1jb25maWdcdElQX1ZTX1BST1RPX1RDUFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTg0LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6ODU6Y29uZmlnXHRJUF9WU19QUk9UT19VRFBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTg2LVx0Ym9vbCBcJiMzNDtVRFAgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTM0NT1jb25maWdcdElQX1ZTX1BFX1NJUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ2LVx0dHJpc3RhdGUgXCYjMzQ7U0lQIHBlcnNpc3RlbmNlIGVuZ2luZVwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzQ3Olx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19VRFBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM0OC1cdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLX1NJUFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg5NwoJCQkJCQkJb3V0cHV0OiAyODAKCQkJCQkJCXRob3VnaHRzOiA0MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gJmFtcDsgRnVuY3Rpb24gQW5hbHlzaXMgZm9yIElQVlMgSUNNUCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgZW5hYmxpbmcgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBJUCBWaXJ0dWFsIFNlcnZlciAoSVBWUykgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZm9sbG93aW5nIGFyZSBlbmFibGVkIGluIHRoZSBrZXJuZWw6IGBJUF9WU2AsIGBJUF9WU19JUFY2YCwgYElQX1ZTX1BST1RPX1RDUGAsIGBJUF9WU19QUk9UT19VRFBgLCBhbmQgYElQX1ZTX1BST1RPX1NDVFBgLiBUaGVzZSBhcmUgdGhlIGJhc2ljcyBmb3IgdGhlIGRpZmZlcmVudCBwcm90b2NvbCBzdXBwb3J0LgoKTm93LCBJJiMzOTttIGZvY3VzaW5nIG9uIHNvbWUga2V5IHN5bWJvbHMsIHByaW1hcmlseSByZWxhdGVkIHRvIElDTVAgYW5kIGNoZWNrc3VtIGhhbmRsaW5nIHdpdGhpbiBJUFZTLiBJJiMzOTttIHRoaW5raW5nIGFib3V0OgoKKiAgIElDTVAgTkFUIGZ1bmN0aW9uczogYGlwX3ZzX25hdF9pY21wYCwgYGlwX3ZzX25hdF9pY21wX3Y2YAoqICAgSUNNUCByZXNwb25zZSBoYW5kbGluZzogYGhhbmRsZV9yZXNwb25zZV9pY21wYAoqICAgSUNNUCB0cmFuc21pc3Npb24gYW5kIHJlY2VwdGlvbjogYGlwX3ZzX291dF9pY21wYCwgYGlwX3ZzX291dF9pY21wX3Y2YCwgYGlwX3ZzX2luX2ljbXBgLCBgaXBfdnNfaW5faWNtcF92NmAsIGBpcF92c19mb3J3YXJkX2ljbXBgCiogICBDaGVja3N1bSBjaGVja3M6IGBzY3RwX2NzdW1fY2hlY2tgLCBgdGNwX2NzdW1fY2hlY2tgLCBgdWRwX2NzdW1fY2hlY2tgCiogICBJQ01QIHRyYW5zbWl0IGZ1bmN0aW9uczogYGlwX3ZzX2ljbXBfeG1pdGAsIGBpcF92c19pY21wX3htaXRfdjZgCgpJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRob3NlIGNoZWNrc3VtIGNoZWNrIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCBhbmQgd2hlcmUgdGhlIG90aGVycyBhcmUgZGVmaW5lZC4gU28gSSYjMzk7dmUgY2hlY2tlZC4uLiBgc2N0cF9jc3VtX2NoZWNrYCwgYHRjcF9jc3VtX2NoZWNrYCwgYW5kIGB1ZHBfY3N1bV9jaGVja2AgYXJlIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoZWlyIHJlc3BlY3RpdmUgcHJvdG9jb2wgZmlsZXM6IGBpcF92c19wcm90b19zY3RwLmNgLCBgaXBfdnNfcHJvdG9fdGNwLmNgLCBhbmQgYGlwX3ZzX3Byb3RvX3VkcC5jYC4gR29vZCwgdGhhdCYjMzk7cyBleHBlY3RlZC4KCkkgZm91bmQgdGhhdCBgaXBfdnNfbmF0X2ljbXBgLCBgaGFuZGxlX3Jlc3BvbnNlX2ljbXBgLCBgaXBfdnNfb3V0X2ljbXBgLCBgaXBfdnNfaW5faWNtcGAsIGBpcF92c19mb3J3YXJkX2ljbXBgIGFsbCByZXNpZGUgYW5kIGFyZSBzdGF0aWMgd2l0aGluIGBpcF92c19jb3JlLmNgLiBBbmQgZmluYWxseSwgYGlwX3ZzX2ljbXBfeG1pdGAgaXMgZm91bmQgd2l0aGluIGBpcF92c194bWl0LmNgLgoKT2theSwgSSB0aGluayBJIGhhdmUgd2hhdCBJIG5lZWQsIG5vdy4gTGV0JiMzOTtzIHVzZSBgc2V0LXJlc3VsdHNgIHRvIGdldCB0aGlzIGluZm9ybWF0aW9uIGluIGEgdXNhYmxlIGZvcm1hdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O0lQX1ZTX0lQVjYmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVENQJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1VEUCYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19TQ1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfbmF0X2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfbmF0X2ljbXBfdjYmIzM0OywKICAgICYjMzQ7aGFuZGxlX3Jlc3BvbnNlX2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfb3V0X2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfb3V0X2ljbXBfdjYmIzM0OywKICAgICYjMzQ7aXBfdnNfaW5faWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19pbl9pY21wX3Y2JiMzNDssCiAgICAmIzM0O2lwX3ZzX2ZvcndhcmRfaWNtcCYjMzQ7LAogICAgJiMzNDtzY3RwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7dGNwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7dWRwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7aXBfdnNfaWNtcF94bWl0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2ljbXBfeG1pdF92NiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBJQ01QIE5BVCBoYW5kbGluZyBhbmQgY2hlY2tzdW0gdmFsaWRhdGlvbiBsb2dpYyBpbiBJUFZTLiBJdCBjaGFuZ2VzIGhvdyBJQ01QIHBhY2tldHMgYXJlIHByb2Nlc3NlZCwgTkFUZWQsIGFuZCB0cmFuc21pdHRlZCwgYW5kIHVwZGF0ZXMgY2hlY2tzdW0gdmFsaWRhdGlvbiBmb3IgVENQLCBVRFAsIGFuZCBTQ1RQIHByb3RvY29scyB3aXRoaW4gSVBWUy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgbW9kaWZpZWQgSUNNUCBoYW5kbGluZyBhbmQgY2hlY2tzdW0gdmFsaWRhdGlvbiBmdW5jdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O0lQX1ZTX0lQVjYmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVENQJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1VEUCYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19TQ1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfbmF0X2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfbmF0X2ljbXBfdjYmIzM0OywKICAgICYjMzQ7aGFuZGxlX3Jlc3BvbnNlX2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfb3V0X2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfb3V0X2ljbXBfdjYmIzM0OywKICAgICYjMzQ7aXBfdnNfaW5faWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19pbl9pY21wX3Y2JiMzNDssCiAgICAmIzM0O2lwX3ZzX2ZvcndhcmRfaWNtcCYjMzQ7LAogICAgJiMzNDtzY3RwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7dGNwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7dWRwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7aXBfdnNfaWNtcF94bWl0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2ljbXBfeG1pdF92NiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBJQ01QIE5BVCBoYW5kbGluZyBhbmQgY2hlY2tzdW0gdmFsaWRhdGlvbiBsb2dpYyBpbiBJUFZTLiBJdCBjaGFuZ2VzIGhvdyBJQ01QIHBhY2tldHMgYXJlIHByb2Nlc3NlZCwgTkFUZWQsIGFuZCB0cmFuc21pdHRlZCwgYW5kIHVwZGF0ZXMgY2hlY2tzdW0gdmFsaWRhdGlvbiBmb3IgVENQLCBVRFAsIGFuZCBTQ1RQIHByb3RvY29scyB3aXRoaW4gSVBWUy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgbW9kaWZpZWQgSUNNUCBoYW5kbGluZyBhbmQgY2hlY2tzdW0gdmFsaWRhdGlvbiBmdW5jdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNzo1NToxNy4wNzIxMzE4MjFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODg5NjI0NTQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiSVBfVlNfSVBWNlwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVENQXCIsXG4gICAgXCJJUF9WU19QUk9UT19VRFBcIixcbiAgICBcIklQX1ZTX1BST1RPX1NDVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19uYXRfaWNtcFwiLFxuICAgIFwiaXBfdnNfbmF0X2ljbXBfdjZcIixcbiAgICBcImhhbmRsZV9yZXNwb25zZV9pY21wXCIsXG4gICAgXCJpcF92c19vdXRfaWNtcFwiLFxuICAgIFwiaXBfdnNfb3V0X2ljbXBfdjZcIixcbiAgICBcImlwX3ZzX2luX2ljbXBcIixcbiAgICBcImlwX3ZzX2luX2ljbXBfdjZcIixcbiAgICBcImlwX3ZzX2ZvcndhcmRfaWNtcFwiLFxuICAgIFwic2N0cF9jc3VtX2NoZWNrXCIsXG4gICAgXCJ0Y3BfY3N1bV9jaGVja1wiLFxuICAgIFwidWRwX2NzdW1fY2hlY2tcIixcbiAgICBcImlwX3ZzX2ljbXBfeG1pdFwiLFxuICAgIFwiaXBfdnNfaWNtcF94bWl0X3Y2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSUNNUCBOQVQgaGFuZGxpbmcgYW5kIGNoZWNrc3VtIHZhbGlkYXRpb24gbG9naWMgaW4gSVBWUy4gSXQgY2hhbmdlcyBob3cgSUNNUCBwYWNrZXRzIGFyZSBwcm9jZXNzZWQsIE5BVGVkLCBhbmQgdHJhbnNtaXR0ZWQsIGFuZCB1cGRhdGVzIGNoZWNrc3VtIHZhbGlkYXRpb24gZm9yIFRDUCwgVURQLCBhbmQgU0NUUCBwcm90b2NvbHMgd2l0aGluIElQVlMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIG1vZGlmaWVkIElDTVAgaGFuZGxpbmcgYW5kIGNoZWNrc3VtIHZhbGlkYXRpb24gZnVuY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNzo1NToxNy4wNzIxMzgyMDFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODcxODk2NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwZjMxYTU4NjZiMWM4MDAzYWU4NTJkODdlZmNhOGU4ODVkM2ZmZTU5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIzIDA3OjU1OjE1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oXFxuaW5kZXggNDE3ZmY1MWY2MmZjOGUuLjlhZTlhYWQ2NTU0MWQzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2lwX3ZzLmhcXG4rKysgYi9pbmNsdWRlL25ldC9pcF92cy5oXFxuQEAgLTI1LDcgKzI1LDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXFx1MDAzZVxcdFxcdC8qIGZvciB1bmlvbiBuZl9pbmV0X2FkZHIgKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcHY2LmhcXHUwMDNlXFx0XFx0XFx0LyogZm9yIHN0cnVjdCBpcHY2aGRyICovXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvcm91dGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pcHY2LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X2ZpYi5oXFx1MDAzZVxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaFxcdTAwM2VcXG4gI2VuZGlmXFxuQEAgLTE5NzIsOCArMTk3NCw4IEBAIGludCBpcF92c190dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuIGludCBpcF92c19kcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gXFx0XFx0ICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XFxuIGludCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbi1cXHRcXHQgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCxcXG4tXFx0XFx0ICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XFxuK1xcdFxcdCAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZixcXG4rXFx0XFx0ICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpO1xcbiB2b2lkIGlwX3ZzX2Rlc3RfZHN0X3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCk7XFxuIFxcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5AQCAtMTk4Niw4ICsxOTg4LDggQEAgaW50IGlwX3ZzX3R1bm5lbF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gaW50IGlwX3ZzX2RyX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbiBcXHRcXHQgICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcXG4gaW50IGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuLVxcdFxcdCAgICAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LFxcbi1cXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHVuc2lnbmVkIGludCB0b2ZmLFxcbitcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCk7XFxuICNlbmRpZlxcbiBcXG4gI2lmZGVmIENPTkZJR19TWVNDVExcXG5AQCAtMjA1OSwxNSArMjA2MSwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91c2VfaGFzaDIoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbiB9XFxuIFxcbiB2b2lkIGlwX3ZzX25hdF9pY21wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuLVxcdFxcdCAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIpO1xcbitcXHRcXHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyLCB1bnNpZ25lZCBpbnQgdG9mZixcXG4rXFx0XFx0ICAgIGJvb2wgaGFzX3BvcnRzKTtcXG4gXFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbiB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuLVxcdFxcdCAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIpO1xcbitcXHRcXHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyLCB1bnNpZ25lZCBpbnQgdG9mZixcXG4rXFx0XFx0ICAgICAgIGJvb2wgaGFzX3BvcnRzLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpO1xcbiAjZW5kaWZcXG4gXFxuLV9fc3VtMTYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCk7XFxuLVxcbiBzdGF0aWMgaW5saW5lIF9fd3N1bSBpcF92c19jaGVja19kaWZmNChfX2JlMzIgb2xkLCBfX2JlMzIgbmV3LCBfX3dzdW0gb2xkc3VtKVxcbiB7XFxuIFxcdF9fYmUzMiBkaWZmWzJdID0geyB+b2xkLCBuZXcgfTtcXG5AQCAtMjA5Myw2ICsyMDk1LDM2IEBAIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmYyKF9fYmUxNiBvbGQsIF9fYmUxNiBuZXcsIF9fd3N1bSBvbGRzdW0pXFxuIFxcdHJldHVybiBjc3VtX3BhcnRpYWwoZGlmZiwgc2l6ZW9mKGRpZmYpLCBvbGRzdW0pO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHN0cnVjdCBza19idWZmICpza2IsIGludCBhZilcXG4re1xcbitcXHQvKiBDaGVja3N1bSB1bm5lY2Vzc2FyeSBvciBhbHJlYWR5IHZhbGlkYXRlZD8gKi9cXG4rXFx0aWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0LyogTE9DQUxfT1VUID8gKi9cXG4rXFx0aWYgKCFza2ItXFx1MDAzZWRldiB8fCBza2ItXFx1MDAzZWRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfTE9PUEJBQ0spXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0LyogIUxPQ0FMX0lOIChGT1JXQVJEKSA/ICovXFxuK1xcdGlmIChhZiA9PSBBRl9JTkVUNikge1xcbitcXHRcXHRpZiAoIShkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKS1cXHUwMDNlcnQ2aV9mbGFncyBcXHUwMDI2IFJURl9MT0NBTCkpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aWYgKCEoc2tiX3J0YWJsZShza2IpLVxcdTAwM2VydF9mbGFncyBcXHUwMDI2IFJUQ0ZfTE9DQUwpKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2sgLSB2YWxpZGF0ZSBjaGVja3N1bSBmb3IgVENQL1VEUC9JQ01QXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBpbnQgb2Zmc2V0LCBpbnQgcHJvdG8sIGludCBhZilcXG4re1xcbitcXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdHJldHVybiAhbmZfY2hlY2tzdW0oc2tiLCBORl9JTkVUX0xPQ0FMX0lOLCBvZmZzZXQsIHByb3RvLCBhZik7XFxuK31cXG4rXFxuIC8qIEZvcmdldCBjdXJyZW50IGNvbm50cmFjayAodW5jb25maXJtZWQpIGFuZCBhdHRhY2ggbm90cmFjayBlbnRyeSAqL1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfbm90cmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuY1xcbmluZGV4IGIwZTAwYmU4NWNiMTJjLi4xMWNiZGJhZjU2MWRhZiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmNcXG5AQCAtMzY3LDcgKzM2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFwcF90Y3BfcGt0X291dChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgaXB2c2gtXFx1MDAzZWxlbiArIHNpemVvZigqdGgpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHR0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgaXB2c2gtXFx1MDAzZWxlbik7XFxuK1xcdHRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgaXB2c2gtXFx1MDAzZWxlbik7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKlxcdFJlbWVtYmVyIHNlcSBudW1iZXIgaW4gY2FzZSB0aGlzIHBrdCBnZXRzIHJlc2l6ZWRcXG5AQCAtNDQzLDcgKzQ0Myw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFwcF90Y3BfcGt0X2luKHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBpcHZzaC1cXHUwMDNlbGVuICsgc2l6ZW9mKCp0aCkpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBpcHZzaC1cXHUwMDNlbGVuKTtcXG4rXFx0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2ItXFx1MDAzZWRhdGEgKyBpcHZzaC1cXHUwMDNlbGVuKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqXFx0UmVtZW1iZXIgc2VxIG51bWJlciBpbiBjYXNlIHRoaXMgcGt0IGdldHMgcmVzaXplZFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xcbmluZGV4IGJhZmFiOTM0NTFkMDM3Li43ZWZhMjA5YTUxN2IxYyAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xcbkBAIC04NjcsNyArODY3LDcgQEAgc3RhdGljIGludCBzeXNjdGxfbmF0X2ljbXBfc2VuZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cykgeyByZXR1cm4gMDsgfVxcbiBcXG4gI2VuZGlmXFxuIFxcbi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXFxuK3N0YXRpYyBfX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXFxuIHtcXG4gXFx0cmV0dXJuIGNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi1cXHUwMDNlbGVuIC0gb2Zmc2V0LCAwKSk7XFxuIH1cXG5AQCAtOTI0LDEzICs5MjQsMTMgQEAgc3RhdGljIGludCBpcF92c19yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZixcXG4gICogLSBpbm91dDogMT1pbi1cXHUwMDNlb3V0LCAwPW91dC1cXHUwMDNlaW5cXG4gICovXFxuIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0XFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0KVxcbitcXHRcXHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQsIHVuc2lnbmVkIGludCB0b2ZmLFxcbitcXHRcXHQgICAgYm9vbCBoYXNfcG9ydHMpXFxuIHtcXG4gXFx0c3RydWN0IGlwaGRyICppcGhcXHQgPSBpcF9oZHIoc2tiKTtcXG4tXFx0dW5zaWduZWQgaW50IGljbXBfb2Zmc2V0ID0gaXBoLVxcdTAwM2VpaGwqNDtcXG4tXFx0c3RydWN0IGljbXBoZHIgKmljbXBoXFx0ID0gKHN0cnVjdCBpY21waGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICtcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgaWNtcF9vZmZzZXQpO1xcbitcXHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGhcXHQgPSAoc3RydWN0IGljbXBoZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgdG9mZik7XFxuIFxcdHN0cnVjdCBpcGhkciAqY2lwaFxcdCA9IChzdHJ1Y3QgaXBoZHIgKikoaWNtcGggKyAxKTtcXG4rXFx0dW5zaWduZWQgaW50IGNvZmYgX19tYXliZV91bnVzZWQgPSB0b2ZmICsgc2l6ZW9mKHN0cnVjdCBpY21waGRyKTtcXG4gXFxuIFxcdGlmIChpbm91dCkge1xcbiBcXHRcXHRpcGgtXFx1MDAzZXNhZGRyID0gY3AtXFx1MDAzZXZhZGRyLmlwO1xcbkBAIC05NDUsOCArOTQ1LDcgQEAgdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHR9XFxuIFxcbiBcXHQvKiB0aGUgVENQL1VEUC9TQ1RQIHBvcnQgKi9cXG4tXFx0aWYgKElQUFJPVE9fVENQID09IGNpcGgtXFx1MDAzZXByb3RvY29sIHx8IElQUFJPVE9fVURQID09IGNpcGgtXFx1MDAzZXByb3RvY29sIHx8XFxuLVxcdCAgICBJUFBST1RPX1NDVFAgPT0gY2lwaC1cXHUwMDNlcHJvdG9jb2wpIHtcXG4rXFx0aWYgKGhhc19wb3J0cykge1xcbiBcXHRcXHRfX2JlMTYgKnBvcnRzID0gKHZvaWQgKiljaXBoICsgY2lwaC1cXHUwMDNlaWhsKjQ7XFxuIFxcbiBcXHRcXHRpZiAoaW5vdXQpXFxuQEAgLTk1Nyw0OCArOTU2LDQwIEBAIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFxuIFxcdC8qIEFuZCBmaW5hbGx5IHRoZSBJQ01QIGNoZWNrc3VtICovXFxuIFxcdGljbXBoLVxcdTAwM2VjaGVja3N1bSA9IDA7XFxuLVxcdGljbXBoLVxcdTAwM2VjaGVja3N1bSA9IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWNtcF9vZmZzZXQpO1xcbitcXHRpY21waC1cXHUwMDNlY2hlY2tzdW0gPSBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIHRvZmYpO1xcbiBcXHRza2ItXFx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZO1xcbiBcXG4gXFx0aWYgKGlub3V0KVxcbi1cXHRcXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCAodm9pZCAqKWNpcGggLSAodm9pZCAqKWlwaCxcXG4tXFx0XFx0XFx0XFxcIkZvcndhcmRpbmcgYWx0ZXJlZCBvdXRnb2luZyBJQ01QXFxcIik7XFxuK1xcdFxcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNvZmYsXFxuK1xcdFxcdFxcdCAgICAgIFxcXCJGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUFxcXCIpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLFxcbi1cXHRcXHRcXHRcXFwiRm9yd2FyZGluZyBhbHRlcmVkIGluY29taW5nIElDTVBcXFwiKTtcXG4rXFx0XFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgY29mZixcXG4rXFx0XFx0XFx0ICAgICAgXFxcIkZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QXFxcIik7XFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbiB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuLVxcdFxcdCAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBpbm91dClcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0LCB1bnNpZ25lZCBpbnQgdG9mZixcXG4rXFx0XFx0ICAgICAgIGJvb2wgaGFzX3BvcnRzLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXFxuIHtcXG4gXFx0c3RydWN0IGlwdjZoZHIgKmlwaFxcdCA9IGlwdjZfaGRyKHNrYik7XFxuLVxcdHVuc2lnbmVkIGludCBpY21wX29mZnNldCA9IDA7XFxuLVxcdHVuc2lnbmVkIGludCBvZmZzXFx0ID0gMDsgLyogaGVhZGVyIG9mZnNldCovXFxuLVxcdGludCBwcm90b2NvbDtcXG4gXFx0c3RydWN0IGljbXA2aGRyICppY21waDtcXG4tXFx0c3RydWN0IGlwdjZoZHIgKmNpcGg7XFxuLVxcdHVuc2lnbmVkIHNob3J0IGZyYWdvZmZzO1xcbitcXHRzdHJ1Y3QgaXB2NmhkciAqY2loO1xcbiBcXG4tXFx0aXB2Nl9maW5kX2hkcihza2IsIFxcdTAwMjZpY21wX29mZnNldCwgSVBQUk9UT19JQ01QVjYsIFxcdTAwMjZmcmFnb2ZmcywgTlVMTCk7XFxuLVxcdGljbXBoID0gKHN0cnVjdCBpY21wNmhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIGljbXBfb2Zmc2V0KTtcXG4tXFx0b2ZmcyA9IGljbXBfb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBpY21wNmhkcik7XFxuLVxcdGNpcGggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBvZmZzKTtcXG4tXFxuLVxcdHByb3RvY29sID0gaXB2Nl9maW5kX2hkcihza2IsIFxcdTAwMjZvZmZzLCAtMSwgXFx1MDAyNmZyYWdvZmZzLCBOVUxMKTtcXG4rXFx0aWNtcGggPSAoc3RydWN0IGljbXA2aGRyICopKHNrYi1cXHUwMDNlZGF0YSArIHRvZmYpO1xcbitcXHRjaWggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgY2lwaC1cXHUwMDNlb2ZmKTtcXG4gXFxuIFxcdGlmIChpbm91dCkge1xcbiBcXHRcXHRpcGgtXFx1MDAzZXNhZGRyID0gY3AtXFx1MDAzZXZhZGRyLmluNjtcXG4tXFx0XFx0Y2lwaC1cXHUwMDNlZGFkZHIgPSBjcC1cXHUwMDNldmFkZHIuaW42O1xcbitcXHRcXHRjaWgtXFx1MDAzZWRhZGRyID0gY3AtXFx1MDAzZXZhZGRyLmluNjtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0aXBoLVxcdTAwM2VkYWRkciA9IGNwLVxcdTAwM2VkYWRkci5pbjY7XFxuLVxcdFxcdGNpcGgtXFx1MDAzZXNhZGRyID0gY3AtXFx1MDAzZWRhZGRyLmluNjtcXG4rXFx0XFx0Y2loLVxcdTAwM2VzYWRkciA9IGNwLVxcdTAwM2VkYWRkci5pbjY7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIHRoZSBUQ1AvVURQL1NDVFAgcG9ydCAqL1xcbi1cXHRpZiAoIWZyYWdvZmZzIFxcdTAwMjZcXHUwMDI2IChJUFBST1RPX1RDUCA9PSBwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBwcm90b2NvbCB8fFxcbi1cXHRcXHRcXHQgIElQUFJPVE9fU0NUUCA9PSBwcm90b2NvbCkpIHtcXG4tXFx0XFx0X19iZTE2ICpwb3J0cyA9ICh2b2lkICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgb2Zmcyk7XFxuK1xcdGlmIChoYXNfcG9ydHMpIHtcXG4rXFx0XFx0X19iZTE2ICpwb3J0cyA9ICh2b2lkICopKHNrYi1cXHUwMDNlZGF0YSArIGNpcGgtXFx1MDAzZWxlbik7XFxuIFxcbiBcXHRcXHRJUF9WU19EQkcoMTEsIFxcXCIlcygpIGNoYW5nZWQgcG9ydCAlZCB0byAlZFxcXFxuXFxcIiwgX19mdW5jX18sXFxuIFxcdFxcdFxcdCAgICAgIG50b2hzKGlub3V0ID8gcG9ydHNbMV0gOiBwb3J0c1swXSksXFxuQEAgLTEwMTEsMTkgKzEwMDIsMTcgQEAgdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXG4gXFx0LyogQW5kIGZpbmFsbHkgdGhlIElDTVAgY2hlY2tzdW0gKi9cXG4gXFx0aWNtcGgtXFx1MDAzZWljbXA2X2Nrc3VtID0gfmNzdW1faXB2Nl9tYWdpYyhcXHUwMDI2aXBoLVxcdTAwM2VzYWRkciwgXFx1MDAyNmlwaC1cXHUwMDNlZGFkZHIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlbGVuIC0gaWNtcF9vZmZzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlbGVuIC0gdG9mZixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgSVBQUk9UT19JQ01QVjYsIDApO1xcbi1cXHRza2ItXFx1MDAzZWNzdW1fc3RhcnQgPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSAtIHNrYi1cXHUwMDNlaGVhZCArIGljbXBfb2Zmc2V0O1xcbitcXHRza2ItXFx1MDAzZWNzdW1fc3RhcnQgPSBza2JfaGVhZHJvb20oc2tiKSArIHRvZmY7XFxuIFxcdHNrYi1cXHUwMDNlY3N1bV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKTtcXG4gXFx0c2tiLVxcdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMO1xcbiBcXG4gXFx0aWYgKGlub3V0KVxcbi1cXHRcXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYixcXG4tXFx0XFx0XFx0ICAgICAgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsXFxuK1xcdFxcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQ2LCBwcCwgc2tiLCBjaXBoLVxcdTAwM2VvZmYsXFxuIFxcdFxcdFxcdCAgICAgIFxcXCJGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUHY2XFxcIik7XFxuIFxcdGVsc2VcXG4tXFx0XFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsXFxuLVxcdFxcdFxcdCAgICAgICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLFxcbitcXHRcXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwgY2lwaC1cXHUwMDNlb2ZmLFxcbiBcXHRcXHRcXHQgICAgICBcXFwiRm9yd2FyZGluZyBhbHRlcmVkIGluY29taW5nIElDTVB2NlxcXCIpO1xcbiB9XFxuICNlbmRpZlxcbkBAIC0xMDMzLDM2ICsxMDIyLDQxIEBAIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gICovXFxuIHN0YXRpYyBpbnQgaGFuZGxlX3Jlc3BvbnNlX2ljbXAoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHR1bmlvbiBuZl9pbmV0X2FkZHIgKnNuZXQsXFxuLVxcdFxcdFxcdFxcdF9fdTggcHJvdG9jb2wsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaWhsLFxcbi1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaG9va251bSlcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoLFxcbitcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgdG9mZiwgdW5zaWduZWQgaW50IGhvb2tudW0pXFxuIHtcXG4rXFx0aW50IGlwcm90byA9IGFmID09IEFGX0lORVQ2ID8gSVBQUk9UT19JQ01QVjYgOiBJUFBST1RPX0lDTVA7XFxuIFxcdHVuc2lnbmVkIGludCB2ZXJkaWN0ID0gTkZfRFJPUDtcXG4rXFx0dW5zaWduZWQgaW50IGN0b2ZmID0gY2lwaC1cXHUwMDNlbGVuO1xcbitcXHRib29sIGhhc19wb3J0cyA9IGZhbHNlO1xcbiBcXG4gXFx0aWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKVxcbiBcXHRcXHRnb3RvIGFmdGVyX25hdDtcXG4gXFxuIFxcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xcbi1cXHRpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgXFx1MDAyNlxcdTAwMjYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpaGwpKSB7XFxuK1xcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgdG9mZiwgaXByb3RvLCBhZikpIHtcXG4gXFx0XFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xcbiBcXHRcXHRJUF9WU19EQkdfQlVGKDEsIFxcXCJGb3J3YXJkIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVzIVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgICAgSVBfVlNfREJHX0FERFIoYWYsIHNuZXQpKTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChJUFBST1RPX1RDUCA9PSBwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBwcm90b2NvbCB8fFxcbi1cXHQgICAgSVBQUk9UT19TQ1RQID09IHByb3RvY29sKVxcbi1cXHRcXHRvZmZzZXQgKz0gMiAqIHNpemVvZihfX3UxNik7XFxuLVxcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcXG4rXFx0aWYgKGNpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVENQIHx8IGNpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XFxuK1xcdCAgICBjaXBoLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1NDVFApIHtcXG4rXFx0XFx0Y3RvZmYgKz0gMiAqIHNpemVvZihfX3UxNik7XFxuK1xcdFxcdGhhc19wb3J0cyA9IHRydWU7XFxuK1xcdH1cXG4rXFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBjdG9mZikpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxuIFxcdGlmIChhZiA9PSBBRl9JTkVUNilcXG4tXFx0XFx0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDEpO1xcbitcXHRcXHRpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzLCBjaXBoKTtcXG4gXFx0ZWxzZVxcbiAjZW5kaWZcXG4tXFx0XFx0aXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDEpO1xcbitcXHRcXHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzKTtcXG4gXFxuIFxcdGlmIChpcF92c19yb3V0ZV9tZV9oYXJkZXIoY3AtXFx1MDAzZWlwdnMsIGFmLCBza2IsIGhvb2tudW0pKVxcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtMTA5MCw5ICsxMDg0LDkgQEAgc3RhdGljIGludCBoYW5kbGVfcmVzcG9uc2VfaWNtcChpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXFxuICAqXFx0Q3VycmVudGx5IGhhbmRsZXMgZXJyb3IgdHlwZXMgLSB1bnJlYWNoYWJsZSwgcXVlbmNoLCB0dGwgZXhjZWVkZWQuXFxuICAqL1xcbiBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHQgIGludCAqcmVsYXRlZCwgdW5zaWduZWQgaW50IGhvb2tudW0pXFxuK1xcdFxcdFxcdCAgaW50ICpyZWxhdGVkLCB1bnNpZ25lZCBpbnQgaG9va251bSxcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwdnNoKVxcbiB7XFxuLVxcdHN0cnVjdCBpcGhkciAqaXBoO1xcbiBcXHRzdHJ1Y3QgaWNtcGhkclxcdF9pY21waCwgKmljO1xcbiBcXHRzdHJ1Y3QgaXBoZHJcXHRfY2lwaCwgKmNpaDtcXHQvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi9cXG4gXFx0c3RydWN0IGlwX3ZzX2lwaGRyIGNpcGg7XFxuQEAgLTExMDcsMTcgKzExMDEsMTkgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKGlwX2lzX2ZyYWdtZW50KGlwX2hkcihza2IpKSkge1xcbiBcXHRcXHRpZiAoaXBfdnNfZ2F0aGVyX2ZyYWdzKGlwdnMsIHNrYiwgaXBfdnNfZGVmcmFnX3VzZXIoaG9va251bSkpKVxcbiBcXHRcXHRcXHRyZXR1cm4gTkZfU1RPTEVOO1xcbitcXHRcXHRpZiAoIWlwX3ZzX2ZpbGxfaXBoX3NrYihBRl9JTkVULCBza2IsIGZhbHNlLCBpcHZzaCkpXFxuK1xcdFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuIFxcdH1cXG4gXFxuLVxcdGlwaCA9IGlwX2hkcihza2IpO1xcbi1cXHRvZmZzZXQgPSBpaGwgPSBpcGgtXFx1MDAzZWlobCAqIDQ7XFxuK1xcdGlobCA9IGlwdnNoLVxcdTAwM2VsZW47XFxuK1xcdG9mZnNldCA9IGlwdnNoLVxcdTAwM2VsZW47XFxuIFxcdGljID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2ljbXBoKSwgXFx1MDAyNl9pY21waCk7XFxuIFxcdGlmIChpYyA9PSBOVUxMKVxcbiBcXHRcXHRyZXR1cm4gTkZfRFJPUDtcXG4gXFxuIFxcdElQX1ZTX0RCRygxMiwgXFxcIk91dGdvaW5nIElDTVAgKCVkLCVkKSAlcEk0LVxcdTAwM2UlcEk0XFxcXG5cXFwiLFxcbiBcXHRcXHQgIGljLVxcdTAwM2V0eXBlLCBudG9ocyhpY21wX2lkKGljKSksXFxuLVxcdFxcdCAgXFx1MDAyNmlwaC1cXHUwMDNlc2FkZHIsIFxcdTAwMjZpcGgtXFx1MDAzZWRhZGRyKTtcXG4rXFx0XFx0ICBcXHUwMDI2aXB2c2gtXFx1MDAzZXNhZGRyLmlwLCBcXHUwMDI2aXB2c2gtXFx1MDAzZWRhZGRyLmlwKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFdvcmsgdGhyb3VnaCBzZWVpbmcgaWYgdGhpcyBpcyBmb3IgdXMuXFxuQEAgLTExMzYsNyArMTEzMiw3IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdC8qIE5vdyBmaW5kIHRoZSBjb250YWluZWQgSVAgaGVhZGVyICovXFxuIFxcdG9mZnNldCArPSBzaXplb2YoX2ljbXBoKTtcXG4gXFx0Y2loID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2NpcGgpLCBcXHUwMDI2X2NpcGgpO1xcbi1cXHRpZiAoY2loID09IE5VTEwpXFxuK1xcdGlmICghKGNpaCBcXHUwMDI2XFx1MDAyNiBjaWgtXFx1MDAzZXZlcnNpb24gPT0gNCBcXHUwMDI2XFx1MDAyNiBjaWgtXFx1MDAzZWlobCBcXHUwMDNlPSA1KSlcXG4gXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovXFxuIFxcbiBcXHRwcCA9IGlwX3ZzX3Byb3RvX2dldChjaWgtXFx1MDAzZXByb3RvY29sKTtcXG5AQCAtMTE0NCw4ICsxMTQwLDcgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFxuIFxcdC8qIElzIHRoZSBlbWJlZGRlZCBwcm90b2NvbCBoZWFkZXIgcHJlc2VudD8gKi9cXG4tXFx0aWYgKHVubGlrZWx5KGNpaC1cXHUwMDNlZnJhZ19vZmYgXFx1MDAyNiBodG9ucyhJUF9PRkZTRVQpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAgcHAtXFx1MDAzZWRvbnRfZGVmcmFnKSlcXG4rXFx0aWYgKHVubGlrZWx5KGNpaC1cXHUwMDNlZnJhZ19vZmYgXFx1MDAyNiBodG9ucyhJUF9PRkZTRVQpIFxcdTAwMjZcXHUwMDI2ICFwcC1cXHUwMDNlZG9udF9kZWZyYWcpKVxcbiBcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXG4gXFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgb2Zmc2V0LFxcbkBAIC0xMTU5LDkgKzExNTQsOSBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpZiAoIWNwKVxcbiBcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXG4tXFx0c25ldC5pcCA9IGlwaC1cXHUwMDNlc2FkZHI7XFxuLVxcdHJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVULCBza2IsIFxcdTAwMjZzbmV0LCBjaWgtXFx1MDAzZXByb3RvY29sLCBjcCxcXG4tXFx0XFx0XFx0XFx0ICAgIHBwLCBjaXBoLmxlbiwgaWhsLCBob29rbnVtKTtcXG4rXFx0c25ldC5pcCA9IGlwdnNoLVxcdTAwM2VzYWRkci5pcDtcXG4rXFx0cmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQsIHNrYiwgXFx1MDAyNnNuZXQsIGNwLCBwcCwgXFx1MDAyNmNpcGgsIGlobCxcXG4rXFx0XFx0XFx0XFx0ICAgIGhvb2tudW0pO1xcbiB9XFxuIFxcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5AQCAtMTE3NCw3ICsxMTY5LDYgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c3RydWN0IGlwX3ZzX2Nvbm4gKmNwO1xcbiBcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwO1xcbiBcXHR1bmlvbiBuZl9pbmV0X2FkZHIgc25ldDtcXG4tXFx0dW5zaWduZWQgaW50IG9mZnNldDtcXG4gXFxuIFxcdCpyZWxhdGVkID0gMTtcXG4gXFx0aWMgPSBmcmFnX3NhZmVfc2tiX2hwKHNrYiwgaXB2c2gtXFx1MDAzZWxlbiwgc2l6ZW9mKF9pY21waCksIFxcdTAwMjZfaWNtcGgpO1xcbkBAIC0xMjEwLDYgKzEyMDQsMTAgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKCFwcClcXG4gXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFxuK1xcdC8qIElzIHRoZSBlbWJlZGRlZCBwcm90b2NvbCBoZWFkZXIgcHJlc2VudD8gKi9cXG4rXFx0aWYgKHVubGlrZWx5KGNpcGguZnJhZ29mZnMgXFx1MDAyNlxcdTAwMjYgIXBwLVxcdTAwM2Vkb250X2RlZnJhZykpXFxuK1xcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuK1xcbiBcXHQvKiBUaGUgZW1iZWRkZWQgaGVhZGVycyBjb250YWluIHNvdXJjZSBhbmQgZGVzdCBpbiByZXZlcnNlIG9yZGVyICovXFxuIFxcdGNwID0gSU5ESVJFQ1RfQ0FMTF8xKHBwLVxcdTAwM2Vjb25uX291dF9nZXQsIGlwX3ZzX2Nvbm5fb3V0X2dldF9wcm90byxcXG4gXFx0XFx0XFx0ICAgICBpcHZzLCBBRl9JTkVUNiwgc2tiLCBcXHUwMDI2Y2lwaCk7XFxuQEAgLTEyMTcsOSArMTIxNSw4IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuIFxcbiBcXHRzbmV0LmluNiA9IGNpcGguc2FkZHIuaW42O1xcbi1cXHRvZmZzZXQgPSBjaXBoLmxlbjtcXG4tXFx0cmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQ2LCBza2IsIFxcdTAwMjZzbmV0LCBjaXBoLnByb3RvY29sLCBjcCxcXG4tXFx0XFx0XFx0XFx0ICAgIHBwLCBvZmZzZXQsIGlwdnNoLVxcdTAwM2VsZW4sIGhvb2tudW0pO1xcbitcXHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVDYsIHNrYiwgXFx1MDAyNnNuZXQsIGNwLCBwcCwgXFx1MDAyNmNpcGgsXFxuK1xcdFxcdFxcdFxcdCAgICBpcHZzaC1cXHUwMDNlbGVuLCBob29rbnVtKTtcXG4gfVxcbiAjZW5kaWZcXG4gXFxuQEAgLTE1NDUsNyArMTU0Miw4IEBAIGlwX3ZzX291dF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0XFxuICNlbmRpZlxcbiBcXHRcXHRpZiAodW5saWtlbHkoaXBoLnByb3RvY29sID09IElQUFJPVE9fSUNNUCkpIHtcXG4gXFx0XFx0XFx0aW50IHJlbGF0ZWQ7XFxuLVxcdFxcdFxcdGludCB2ZXJkaWN0ID0gaXBfdnNfb3V0X2ljbXAoaXB2cywgc2tiLCBcXHUwMDI2cmVsYXRlZCwgaG9va251bSk7XFxuK1xcdFxcdFxcdGludCB2ZXJkaWN0ID0gaXBfdnNfb3V0X2ljbXAoaXB2cywgc2tiLCBcXHUwMDI2cmVsYXRlZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBob29rbnVtLCBcXHUwMDI2aXBoKTtcXG4gXFxuIFxcdFxcdFxcdGlmIChyZWxhdGVkKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gdmVyZGljdDtcXG5AQCAtMTc1Myw5ICsxNzUxLDggQEAgc3RhdGljIGludCBpcHZzX2dyZV9kZWNhcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gICovXFxuIHN0YXRpYyBpbnRcXG4gaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxcbi1cXHQgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSlcXG4rXFx0ICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxcbiB7XFxuLVxcdHN0cnVjdCBpcGhkciAqaXBoO1xcbiBcXHRzdHJ1Y3QgaWNtcGhkclxcdF9pY21waCwgKmljO1xcbiBcXHRzdHJ1Y3QgaXBoZHJcXHRfY2lwaCwgKmNpaDtcXHQvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi9cXG4gXFx0c3RydWN0IGlwX3ZzX2lwaGRyIGNpcGg7XFxuQEAgLTE3NjUsNyArMTc2Miw3IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcXG4gXFx0dW5zaWduZWQgaW50IG9mZnNldCwgb2Zmc2V0MiwgaWhsLCB2ZXJkaWN0O1xcbiBcXHRib29sIHR1bm5lbCwgbmV3X2NwID0gZmFsc2U7XFxuIFxcdHVuaW9uIG5mX2luZXRfYWRkciAqcmFkZHI7XFxuLVxcdGNoYXIgKm91dGVyX3Byb3RvID0gXFxcIklQSVBcXFwiO1xcbitcXHRjaGFyICpvdXRlcl9wcm90byBfX21heWJlX3VudXNlZCA9IFxcXCJJUElQXFxcIjtcXG4gXFx0dW5zaWduZWQgaW50IGhsZW5faXBpcDtcXG4gXFx0aW50IHVsZW4gPSAwO1xcbiBcXG5AQCAtMTc3NSwxNyArMTc3MiwxOSBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXFxuIFxcdGlmIChpcF9pc19mcmFnbWVudChpcF9oZHIoc2tiKSkpIHtcXG4gXFx0XFx0aWYgKGlwX3ZzX2dhdGhlcl9mcmFncyhpcHZzLCBza2IsIGlwX3ZzX2RlZnJhZ191c2VyKGhvb2tudW0pKSlcXG4gXFx0XFx0XFx0cmV0dXJuIE5GX1NUT0xFTjtcXG4rXFx0XFx0aWYgKCFpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVCwgc2tiLCBmYWxzZSwgaXBoKSlcXG4rXFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFx0fVxcbiBcXG4tXFx0aXBoID0gaXBfaGRyKHNrYik7XFxuLVxcdG9mZnNldCA9IGlobCA9IGlwaC1cXHUwMDNlaWhsICogNDtcXG4rXFx0aWhsID0gaXBoLVxcdTAwM2VsZW47XFxuK1xcdG9mZnNldCA9IGlwaC1cXHUwMDNlbGVuO1xcbiBcXHRpYyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9pY21waCksIFxcdTAwMjZfaWNtcGgpO1xcbiBcXHRpZiAoaWMgPT0gTlVMTClcXG4gXFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuIFxcbiBcXHRJUF9WU19EQkcoMTIsIFxcXCJJbmNvbWluZyBJQ01QICglZCwlZCkgJXBJNC1cXHUwMDNlJXBJNFxcXFxuXFxcIixcXG4gXFx0XFx0ICBpYy1cXHUwMDNldHlwZSwgbnRvaHMoaWNtcF9pZChpYykpLFxcbi1cXHRcXHQgIFxcdTAwMjZpcGgtXFx1MDAzZXNhZGRyLCBcXHUwMDI2aXBoLVxcdTAwM2VkYWRkcik7XFxuK1xcdFxcdCAgXFx1MDAyNmlwaC1cXHUwMDNlc2FkZHIuaXAsIFxcdTAwMjZpcGgtXFx1MDAzZWRhZGRyLmlwKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFdvcmsgdGhyb3VnaCBzZWVpbmcgaWYgdGhpcyBpcyBmb3IgdXMuXFxuQEAgLTE4NjcsOCArMTg2Niw3IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcXG4gXFx0cHAgPSBwZC1cXHUwMDNlcHA7XFxuIFxcbiBcXHQvKiBJcyB0aGUgZW1iZWRkZWQgcHJvdG9jb2wgaGVhZGVyIHByZXNlbnQ/ICovXFxuLVxcdGlmICh1bmxpa2VseShjaWgtXFx1MDAzZWZyYWdfb2ZmIFxcdTAwMjYgaHRvbnMoSVBfT0ZGU0VUKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgIHBwLVxcdTAwM2Vkb250X2RlZnJhZykpXFxuK1xcdGlmICh1bmxpa2VseShjaWgtXFx1MDAzZWZyYWdfb2ZmIFxcdTAwMjYgaHRvbnMoSVBfT0ZGU0VUKSBcXHUwMDI2XFx1MDAyNiAhcHAtXFx1MDAzZWRvbnRfZGVmcmFnKSlcXG4gXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFxuIFxcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIG9mZnNldCxcXG5AQCAtMTg3Niw3ICsxODc0LDYgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxcbiBcXG4gXFx0b2Zmc2V0MiA9IG9mZnNldDtcXG4gXFx0aXBfdnNfZmlsbF9pcGhfc2tiX2ljbXAoQUZfSU5FVCwgc2tiLCBvZmZzZXQsICF0dW5uZWwsIFxcdTAwMjZjaXBoKTtcXG4tXFx0b2Zmc2V0ID0gY2lwaC5sZW47XFxuIFxcbiBcXHQvKiBUaGUgZW1iZWRkZWQgaGVhZGVycyBjb250YWluIHNvdXJjZSBhbmQgZGVzdCBpbiByZXZlcnNlIG9yZGVyLlxcbiBcXHQgKiBGb3IgSVBJUC9VRFAvR1JFIHR1bm5lbCB0aGlzIGlzIGVycm9yIGZvciByZXF1ZXN0LCBub3QgZm9yIHJlcGx5LlxcbkBAIC0xODk4LDEwICsxODk1LDExIEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcXG4gXFx0dmVyZGljdCA9IE5GX0RST1A7XFxuIFxcbiBcXHQvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi9cXG4tXFx0aWYgKCFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpIFxcdTAwMjZcXHUwMDI2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWhsKSkge1xcbitcXHRpZiAoKElQX1ZTX0ZXRF9NRVRIT0QoY3ApID09IElQX1ZTX0NPTk5fRl9NQVNRIHx8IHR1bm5lbCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpaGwsIElQUFJPVE9fSUNNUCwgQUZfSU5FVCkpIHtcXG4gXFx0XFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xcbiBcXHRcXHRJUF9WU19EQkcoMSwgXFxcIkluY29taW5nIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVwSTQhXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgIFxcdTAwMjZpcGgtXFx1MDAzZXNhZGRyKTtcXG4rXFx0XFx0XFx0ICBcXHUwMDI2aXBoLVxcdTAwM2VzYWRkci5pcCk7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbkBAIC0xOTY5LDEwICsxOTY3LDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxcbiBcXG4gXFx0LyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovXFxuIFxcdGlwX3ZzX2luX3N0YXRzKGNwLCBza2IpO1xcbi1cXHRpZiAoSVBQUk9UT19UQ1AgPT0gY2loLVxcdTAwM2Vwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBjaWgtXFx1MDAzZXByb3RvY29sIHx8XFxuLVxcdCAgICBJUFBST1RPX1NDVFAgPT0gY2loLVxcdTAwM2Vwcm90b2NvbClcXG4tXFx0XFx0b2Zmc2V0ICs9IDIgKiBzaXplb2YoX191MTYpO1xcbi1cXHR2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0KHNrYiwgY3AsIHBwLCBvZmZzZXQsIGhvb2tudW0sIFxcdTAwMjZjaXBoKTtcXG4rXFx0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdChza2IsIGNwLCBwcCwgaXBoLVxcdTAwM2VsZW4sIGhvb2tudW0sIFxcdTAwMjZjaXBoKTtcXG4gXFxuIG91dDpcXG4gXFx0aWYgKGxpa2VseSghbmV3X2NwKSlcXG5AQCAtMjAzMiw4ICsyMDI3LDggQEAgc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXHRwcCA9IHBkLVxcdTAwM2VwcDtcXG4gXFxuLVxcdC8qIENhbm5vdCBoYW5kbGUgZnJhZ21lbnRlZCBlbWJlZGRlZCBwcm90b2NvbCAqL1xcbi1cXHRpZiAoY2lwaC5mcmFnb2ZmcylcXG4rXFx0LyogSXMgdGhlIGVtYmVkZGVkIHByb3RvY29sIGhlYWRlciBwcmVzZW50PyAqL1xcbitcXHRpZiAoY2lwaC5mcmFnb2ZmcyBcXHUwMDI2XFx1MDAyNiAhcHAtXFx1MDAzZWRvbnRfZGVmcmFnKVxcbiBcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXG4gXFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsIG9mZnNldCxcXG5AQCAtMjA1NywyMyArMjA1MiwyMiBAQCBzdGF0aWMgaW50IGlwX3ZzX2luX2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdG5ld19jcCA9IHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIFZTL1RVTiwgVlMvRFIgYW5kIExPQ0FMTk9ERSBqdXN0IGxldCBpdCBnbyAqL1xcbi1cXHRpZiAoKGhvb2tudW0gPT0gTkZfSU5FVF9MT0NBTF9PVVQpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpKSB7XFxuLVxcdFxcdHZlcmRpY3QgPSBORl9BQ0NFUFQ7XFxuK1xcdHZlcmRpY3QgPSBORl9EUk9QO1xcbitcXG4rXFx0LyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovXFxuK1xcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlwaC1cXHUwMDNlbGVuLCBJUFBST1RPX0lDTVBWNixcXG4rXFx0XFx0XFx0XFx0XFx0IEFGX0lORVQ2KSkge1xcbitcXHRcXHQvKiBGYWlsZWQgY2hlY2tzdW0hICovXFxuK1xcdFxcdElQX1ZTX0RCRygxLCBcXFwiSW5jb21pbmcgSUNNUHY2OiBmYWlsZWQgY2hlY2tzdW0gZnJvbSAlcEk2YyFcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgXFx1MDAyNmlwaC1cXHUwMDNlc2FkZHIpO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4gXFx0LyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovXFxuIFxcdGlwX3ZzX2luX3N0YXRzKGNwLCBza2IpO1xcbiBcXG4tXFx0LyogTmVlZCB0byBtYW5nbGUgY29udGFpbmVkIElQdjYgaGVhZGVyIGluIElDTVB2NiBwYWNrZXQgKi9cXG4tXFx0b2Zmc2V0ID0gY2lwaC5sZW47XFxuLVxcdGlmIChJUFBST1RPX1RDUCA9PSBjaXBoLnByb3RvY29sIHx8IElQUFJPVE9fVURQID09IGNpcGgucHJvdG9jb2wgfHxcXG4tXFx0ICAgIElQUFJPVE9fU0NUUCA9PSBjaXBoLnByb3RvY29sKVxcbi1cXHRcXHRvZmZzZXQgKz0gMiAqIHNpemVvZihfX3UxNik7IC8qIEFsc28gbWFuZ2xlIHBvcnRzICovXFxuLVxcbi1cXHR2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0X3Y2KHNrYiwgY3AsIHBwLCBvZmZzZXQsIGhvb2tudW0sIFxcdTAwMjZjaXBoKTtcXG4rXFx0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdF92Nihza2IsIGNwLCBwcCwgaXBoLVxcdTAwM2VsZW4sIGhvb2tudW0sIFxcdTAwMjZjaXBoKTtcXG4gXFxuIG91dDpcXG4gXFx0aWYgKGxpa2VseSghbmV3X2NwKSlcXG5AQCAtMjE1Miw3ICsyMTQ2LDcgQEAgaXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGVcXG4gXFx0XFx0aWYgKHVubGlrZWx5KGlwaC5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApKSB7XFxuIFxcdFxcdFxcdGludCByZWxhdGVkO1xcbiBcXHRcXHRcXHRpbnQgdmVyZGljdCA9IGlwX3ZzX2luX2ljbXAoaXB2cywgc2tiLCBcXHUwMDI2cmVsYXRlZCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGhvb2tudW0pO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgaG9va251bSwgXFx1MDAyNmlwaCk7XFxuIFxcbiBcXHRcXHRcXHRpZiAocmVsYXRlZClcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHZlcmRpY3Q7XFxuQEAgLTIyODgsNiArMjI4Miw3IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxuIHtcXG4gXFx0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBuZXRfaXB2cyhzdGF0ZS1cXHUwMDNlbmV0KTtcXG4rXFx0c3RydWN0IGlwX3ZzX2lwaGRyIGlwaGRyO1xcbiBcXHRpbnQgcjtcXG4gXFxuIFxcdC8qIGlwdnMgZW5hYmxlZCBpbiB0aGlzIG5ldG5zID8gKi9cXG5AQCAtMjI5NywxMCArMjI5Miw5IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpZiAoc3RhdGUtXFx1MDAzZXBmID09IE5GUFJPVE9fSVBWNCkge1xcbiBcXHRcXHRpZiAoaXBfaGRyKHNrYiktXFx1MDAzZXByb3RvY29sICE9IElQUFJPVE9fSUNNUClcXG4gXFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4rXFx0XFx0aXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQsIHNrYiwgZmFsc2UsIFxcdTAwMjZpcGhkcik7XFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgaXBoZHI7XFxuLVxcbiBcXHRcXHRpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVDYsIHNrYiwgZmFsc2UsIFxcdTAwMjZpcGhkcik7XFxuIFxcbiBcXHRcXHRpZiAoaXBoZHIucHJvdG9jb2wgIT0gSVBQUk9UT19JQ01QVjYpXFxuQEAgLTIzMTAsNyArMjMwNCw3IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAjZW5kaWZcXG4gXFx0fVxcbiBcXG4tXFx0cmV0dXJuIGlwX3ZzX2luX2ljbXAoaXB2cywgc2tiLCBcXHUwMDI2ciwgc3RhdGUtXFx1MDAzZWhvb2spO1xcbitcXHRyZXR1cm4gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsIFxcdTAwMjZyLCBzdGF0ZS1cXHUwMDNlaG9vaywgXFx1MDAyNmlwaGRyKTtcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBpcF92c19vcHM0W10gPSB7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jXFxuaW5kZXggYzY3MzE3YmUxN2RmYWYuLjNkYmQzMDk2ZTE2MzdiIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jXFxuQEAgLTExLDcgKzExLDcgQEBcXG4gXFxuIHN0YXRpYyBpbnRcXG4gc2N0cF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0XFx0dW5zaWduZWQgaW50IHNjdHBob2ZmKTtcXG4rXFx0XFx0c3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xcbiBcXG4gc3RhdGljIGludFxcbiBzY3RwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5AQCAtMTA5LDcgKzEwOSw3IEBAIHNjdHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdGludCByZXQ7XFxuIFxcbiBcXHRcXHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cXG4tXFx0XFx0aWYgKCFzY3RwX2NzdW1fY2hlY2soY3AtXFx1MDAzZWFmLCBza2IsIHBwLCBzY3RwaG9mZikpXFxuK1xcdFxcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRcXHQvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi9cXG5AQCAtMTIxLDcgKzEyMSw3IEBAIHNjdHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdFxcdHBheWxvYWRfY3N1bSA9IHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdHNjdHBoID0gKHZvaWQgKikgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBzY3RwaG9mZjtcXG4rXFx0c2N0cGggPSAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YSArIHNjdHBob2ZmO1xcbiBcXG4gXFx0LyogT25seSB1cGRhdGUgY3N1bSBpZiB3ZSByZWFsbHkgaGF2ZSB0byAqL1xcbiBcXHRpZiAoc2N0cGgtXFx1MDAzZXNvdXJjZSAhPSBjcC1cXHUwMDNldnBvcnQgfHwgcGF5bG9hZF9jc3VtIHx8XFxuQEAgLTE1Nyw3ICsxNTcsNyBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHRpbnQgcmV0O1xcbiBcXG4gXFx0XFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXFxuLVxcdFxcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgc2N0cGhvZmYpKVxcbitcXHRcXHRpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC1cXHUwMDNlYWYsIHNrYiwgcHAsIGlwaCkpXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0XFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXFxuQEAgLTE2OSw3ICsxNjksNyBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHRcXHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHRzY3RwaCA9ICh2b2lkICopIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgc2N0cGhvZmY7XFxuK1xcdHNjdHBoID0gKHZvaWQgKilza2ItXFx1MDAzZWRhdGEgKyBzY3RwaG9mZjtcXG4gXFxuIFxcdC8qIE9ubHkgdXBkYXRlIGNzdW0gaWYgd2UgcmVhbGx5IGhhdmUgdG8gKi9cXG4gXFx0aWYgKHNjdHBoLVxcdTAwM2VkZXN0ICE9IGNwLVxcdTAwM2VkcG9ydCB8fCBwYXlsb2FkX2NzdW0gfHxcXG5AQCAtMTg3LDE5ICsxODcsMjIgQEAgc2N0cF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFxuIHN0YXRpYyBpbnRcXG4gc2N0cF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0XFx0dW5zaWduZWQgaW50IHNjdHBob2ZmKVxcbitcXHRcXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcXG4ge1xcbitcXHR1bnNpZ25lZCBpbnQgc2N0cGhvZmYgPSBpcGgtXFx1MDAzZWxlbjtcXG4gXFx0c3RydWN0IHNjdHBoZHIgKnNoO1xcbiBcXHRfX2xlMzIgY21wLCB2YWw7XFxuIFxcbitcXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSlcXG4rXFx0XFx0cmV0dXJuIDE7XFxuIFxcdHNoID0gKHN0cnVjdCBzY3RwaGRyICopKHNrYi1cXHUwMDNlZGF0YSArIHNjdHBob2ZmKTtcXG4gXFx0Y21wID0gc2gtXFx1MDAzZWNoZWNrc3VtO1xcbiBcXHR2YWwgPSBzY3RwX2NvbXB1dGVfY2tzdW0oc2tiLCBzY3RwaG9mZik7XFxuIFxcbiBcXHRpZiAodmFsICE9IGNtcCkge1xcbiBcXHRcXHQvKiBDUkMgZmFpbHVyZSwgZHVtcCBpdC4gKi9cXG4tXFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcXG4tXFx0XFx0XFx0XFx0XFxcIkZhaWxlZCBjaGVja3N1bSBmb3JcXFwiKTtcXG4rXFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgaXBoLVxcdTAwM2VvZmYsXFxuK1xcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jXFxuaW5kZXggZjg2Yjc2M2VmY2M0ZGMuLjk5YTI4NmZkYzkwYzY1IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuY1xcbkBAIC0yOSw3ICsyOSw3IEBAXFxuIFxcbiBzdGF0aWMgaW50XFxuIHRjcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKTtcXG4rXFx0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcXG4gXFxuIHN0YXRpYyBpbnRcXG4gdGNwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5AQCAtMTY2LDcgKzE2Niw3IEBAIHRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFx0XFx0aW50IHJldDtcXG4gXFxuIFxcdFxcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xcbi1cXHRcXHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgdGNwaG9mZikpXFxuK1xcdFxcdGlmICghdGNwX2NzdW1fY2hlY2soY3AtXFx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdFxcdC8qIENhbGwgYXBwbGljYXRpb24gaGVscGVyIGlmIG5lZWRlZCAqL1xcbkBAIC0xNzksNyArMTc5LDcgQEAgdGNwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHRcXHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHR0Y3BoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHRjcGhvZmY7XFxuK1xcdHRjcGggPSAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YSArIHRjcGhvZmY7XFxuIFxcdHRjcGgtXFx1MDAzZXNvdXJjZSA9IGNwLVxcdTAwM2V2cG9ydDtcXG4gXFxuIFxcdC8qIEFkanVzdCBUQ1AgY2hlY2tzdW1zICovXFxuQEAgLTI0NCw3ICsyNDQsNyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdGludCByZXQ7XFxuIFxcbiBcXHRcXHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cXG4tXFx0XFx0aWYgKCF0Y3BfY3N1bV9jaGVjayhjcC1cXHUwMDNlYWYsIHNrYiwgcHAsIHRjcGhvZmYpKVxcbitcXHRcXHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRcXHQvKlxcbkBAIC0yNjAsNyArMjYwLDcgQEAgdGNwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHRcXHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHR0Y3BoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHRjcGhvZmY7XFxuK1xcdHRjcGggPSAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YSArIHRjcGhvZmY7XFxuIFxcdHRjcGgtXFx1MDAzZWRlc3QgPSBjcC1cXHUwMDNlZHBvcnQ7XFxuIFxcbiBcXHQvKlxcbkBAIC0zMDIsNDEgKzMwMiwxMyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcbiBzdGF0aWMgaW50XFxuIHRjcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKVxcbitcXHQgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXFxuIHtcXG4tXFx0c3dpdGNoIChza2ItXFx1MDAzZWlwX3N1bW1lZCkge1xcbi1cXHRjYXNlIENIRUNLU1VNX05PTkU6XFxuLVxcdFxcdHNrYi1cXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHRjcGhvZmYsIHNrYi1cXHUwMDNlbGVuIC0gdGNwaG9mZiwgMCk7XFxuLVxcdFxcdGZhbGx0aHJvdWdoO1xcbi1cXHRjYXNlIENIRUNLU1VNX0NPTVBMRVRFOlxcbi0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG4tXFx0XFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XFxuLVxcdFxcdFxcdGlmIChjc3VtX2lwdjZfbWFnaWMoXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZXNhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgc2tiLVxcdTAwM2VsZW4gLSB0Y3Bob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgSVBQUk9UT19UQ1AsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBza2ItXFx1MDAzZWNzdW0pKSB7XFxuLVxcdFxcdFxcdFxcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbi1cXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9IGVsc2VcXG4tI2VuZGlmXFxuLVxcdFxcdFxcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cXHUwMDNlc2FkZHIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgc2tiLVxcdTAwM2VsZW4gLSB0Y3Bob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBpcF9oZHIoc2tiKS1cXHUwMDNlcHJvdG9jb2wsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlY3N1bSkpIHtcXG4tXFx0XFx0XFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IFxcXCJGYWlsZWQgY2hlY2tzdW0gZm9yXFxcIik7XFxuLVxcdFxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xcbi1cXHRcXHRicmVhaztcXG4rXFx0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpcGgtXFx1MDAzZWxlbiwgSVBQUk9UT19UQ1AsIGFmKSkge1xcbitcXHRcXHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCBpcGgtXFx1MDAzZW9mZixcXG4rXFx0XFx0XFx0XFx0IFxcXCJGYWlsZWQgY2hlY2tzdW0gZm9yXFxcIik7XFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuLVxcbiBcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jXFxuaW5kZXggNThmOWUyNTU5MjdlMmUuLmYzMjc4NTY4MjQwMmRkIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xcbkBAIC0yNSw3ICsyNSw3IEBAXFxuIFxcbiBzdGF0aWMgaW50XFxuIHVkcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0ICAgICAgIHVuc2lnbmVkIGludCB1ZHBob2ZmKTtcXG4rXFx0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcXG4gXFxuIHN0YXRpYyBpbnRcXG4gdWRwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5AQCAtMTU1LDcgKzE1NSw3IEBAIHVkcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFx0XFx0aW50IHJldDtcXG4gXFxuIFxcdFxcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xcbi1cXHRcXHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgdWRwaG9mZikpXFxuK1xcdFxcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXFx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdFxcdC8qXFxuQEAgLTE3MCw3ICsxNzAsNyBAQCB1ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdFxcdHBheWxvYWRfY3N1bSA9IHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdHVkcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgdWRwaG9mZjtcXG4rXFx0dWRwaCA9ICh2b2lkICopc2tiLVxcdTAwM2VkYXRhICsgdWRwaG9mZjtcXG4gXFx0dWRwaC1cXHUwMDNlc291cmNlID0gY3AtXFx1MDAzZXZwb3J0O1xcbiBcXG4gXFx0LypcXG5AQCAtMjM4LDcgKzIzOCw3IEBAIHVkcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFx0XFx0aW50IHJldDtcXG4gXFxuIFxcdFxcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xcbi1cXHRcXHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgdWRwaG9mZikpXFxuK1xcdFxcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXFx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdFxcdC8qXFxuQEAgLTI1NCw3ICsyNTQsNyBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdFxcdHBheWxvYWRfY3N1bSA9IHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdHVkcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgdWRwaG9mZjtcXG4rXFx0dWRwaCA9ICh2b2lkICopc2tiLVxcdTAwM2VkYXRhICsgdWRwaG9mZjtcXG4gXFx0dWRwaC1cXHUwMDNlZGVzdCA9IGNwLVxcdTAwM2VkcG9ydDtcXG4gXFxuIFxcdC8qXFxuQEAgLTI5OCw0OCArMjk4LDIwIEBAIHVkcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFxuIHN0YXRpYyBpbnRcXG4gdWRwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi1cXHQgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpXFxuK1xcdCAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcXG4ge1xcbiBcXHRzdHJ1Y3QgdWRwaGRyIF91ZHBoLCAqdWg7XFxuIFxcbi1cXHR1aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHVkcGhvZmYsIHNpemVvZihfdWRwaCksIFxcdTAwMjZfdWRwaCk7XFxuK1xcdHVoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgaXBoLVxcdTAwM2VsZW4sIHNpemVvZihfdWRwaCksIFxcdTAwMjZfdWRwaCk7XFxuIFxcdGlmICh1aCA9PSBOVUxMKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmICh1aC1cXHUwMDNlY2hlY2sgIT0gMCkge1xcbi1cXHRcXHRzd2l0Y2ggKHNrYi1cXHUwMDNlaXBfc3VtbWVkKSB7XFxuLVxcdFxcdGNhc2UgQ0hFQ0tTVU1fTk9ORTpcXG4tXFx0XFx0XFx0c2tiLVxcdTAwM2Vjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgdWRwaG9mZixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IHNrYi1cXHUwMDNlbGVuIC0gdWRwaG9mZiwgMCk7XFxuLVxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbi1cXHRcXHRjYXNlIENIRUNLU1VNX0NPTVBMRVRFOlxcbi0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG4tXFx0XFx0XFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XFxuLVxcdFxcdFxcdFxcdGlmIChjc3VtX2lwdjZfbWFnaWMoXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZXNhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgc2tiLVxcdTAwM2VsZW4gLSB1ZHBob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgSVBQUk9UT19VRFAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBza2ItXFx1MDAzZWNzdW0pKSB7XFxuLVxcdFxcdFxcdFxcdFxcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbi1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4tXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHR9IGVsc2VcXG4tI2VuZGlmXFxuLVxcdFxcdFxcdFxcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cXHUwMDNlc2FkZHIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc2tiLVxcdTAwM2VsZW4gLSB1ZHBob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpcF9oZHIoc2tiKS1cXHUwMDNlcHJvdG9jb2wsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlY3N1bSkpIHtcXG4tXFx0XFx0XFx0XFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcXCJGYWlsZWQgY2hlY2tzdW0gZm9yXFxcIik7XFxuLVxcdFxcdFxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbitcXHRpZiAoIXVoLVxcdTAwM2VjaGVjaylcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgaXBoLVxcdTAwM2VsZW4sIElQUFJPVE9fVURQLCBhZikpIHtcXG4rXFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgaXBoLVxcdTAwM2VvZmYsXFxuK1xcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMTtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xcbmluZGV4IDlmZWY0MzM1ZGExM2ZkLi4wYjBjNTMwNDk5M2E5MSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xcbkBAIC0xNTAyLDIwICsxNTAyLDIyIEBAIGlwX3ZzX2RyX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbiAgKi9cXG4gaW50XFxuIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuLVxcdFxcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbi1cXHRcXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcXG4rXFx0XFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXFxuK1xcdFxcdHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXFxuIHtcXG4gXFx0c3RydWN0IHJ0YWJsZVxcdCpydDtcXHQvKiBSb3V0ZSB0byB0aGUgb3RoZXIgaG9zdCAqL1xcbiBcXHRpbnQgcmM7XFxuIFxcdGludCBsb2NhbDtcXG4gXFx0aW50IHJ0X21vZGUsIHdhc19pbnB1dDtcXG4rXFx0Ym9vbCBoYXNfcG9ydHMgPSBmYWxzZTtcXG4rXFx0dW5zaWduZWQgaW50IHdsZW47XFxuIFxcbiBcXHQvKiBUaGUgSUNNUCBwYWNrZXQgZm9yIFZTL1RVTiwgVlMvRFIgYW5kIExPQ0FMTk9ERSB3aWxsIGJlXFxuIFxcdCAgIGZvcndhcmRlZCBkaXJlY3RseSBoZXJlLCBiZWNhdXNlIHRoZXJlIGlzIG5vIG5lZWQgdG9cXG4gXFx0ICAgdHJhbnNsYXRlIGFkZHJlc3MvcG9ydCBiYWNrICovXFxuIFxcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkge1xcbiBcXHRcXHRpZiAoY3AtXFx1MDAzZXBhY2tldF94bWl0KVxcbi1cXHRcXHRcXHRyYyA9IGNwLVxcdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgaXBoKTtcXG4rXFx0XFx0XFx0cmMgPSBjcC1cXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGNpcGgpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHJjID0gTkZfQUNDRVBUO1xcbiBcXHRcXHQvKiBkbyBub3QgdG91Y2ggc2tiIGFueW1vcmUgKi9cXG5AQCAtMTUzMyw3ICsxNTM1LDcgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gXFx0XFx0ICBJUF9WU19SVF9NT0RFX0xPQ0FMIHwgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwgfFxcbiBcXHRcXHQgIElQX1ZTX1JUX01PREVfUkRSIDogSVBfVlNfUlRfTU9ERV9OT05fTE9DQUw7XFxuIFxcdGxvY2FsID0gX19pcF92c19nZXRfb3V0X3J0KGNwLVxcdTAwM2VpcHZzLCBjcC1cXHUwMDNlYWYsIHNrYiwgY3AtXFx1MDAzZWRlc3QsIGNwLVxcdTAwM2VkYWRkci5pcCwgcnRfbW9kZSxcXG4tXFx0XFx0XFx0XFx0ICAgTlVMTCwgaXBoKTtcXG4rXFx0XFx0XFx0XFx0ICAgTlVMTCwgY2lwaCk7XFxuIFxcdGlmIChsb2NhbCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gdHhfZXJyb3I7XFxuIFxcdHJ0ID0gc2tiX3J0YWJsZShza2IpO1xcbkBAIC0xNTY0LDE0ICsxNTY2LDIxIEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuIFxcdFxcdGdvdG8gdHhfZXJyb3I7XFxuIFxcdH1cXG4gXFxuK1xcdHdsZW4gPSBjaXBoLVxcdTAwM2VsZW47XFxuK1xcdGlmIChjaXBoLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fCBjaXBoLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1VEUCB8fFxcbitcXHQgICAgY2lwaC1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19TQ1RQKSB7XFxuK1xcdFxcdHdsZW4gKz0gMiAqIHNpemVvZihfX3UxNik7IC8qIEFsc28gbWFuZ2xlIHBvcnRzICovXFxuK1xcdFxcdGhhc19wb3J0cyA9IHRydWU7XFxuK1xcdH1cXG4rXFxuIFxcdC8qIGNvcHktb24td3JpdGUgdGhlIHBhY2tldCBiZWZvcmUgbWFuZ2xpbmcgaXQgKi9cXG4tXFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBvZmZzZXQpKVxcbitcXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIHdsZW4pKVxcbiBcXHRcXHRnb3RvIHR4X2Vycm9yO1xcbiBcXG4gXFx0aWYgKHNrYl9jb3coc2tiLCBydC1cXHUwMDNlZHN0LmRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSlcXG4gXFx0XFx0Z290byB0eF9lcnJvcjtcXG4gXFxuLVxcdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwKTtcXG4rXFx0aXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDAsIHRvZmYsIGhhc19wb3J0cyk7XFxuIFxcbiBcXHQvKiBBbm90aGVyIGhhY2s6IGF2b2lkIGljbXBfc2VuZCBpbiBpcF9mcmFnbWVudCAqL1xcbiBcXHRza2ItXFx1MDAzZWlnbm9yZV9kZiA9IDE7XFxuQEAgLTE1ODcsMTAgKzE1OTYsMTIgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxuIGludFxcbiBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbi1cXHRcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaG9va251bSxcXG4tXFx0XFx0c3RydWN0IGlwX3ZzX2lwaGRyICppcHZzaClcXG4rXFx0XFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXFxuK1xcdFxcdHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXFxuIHtcXG4rXFx0Ym9vbCBoYXNfcG9ydHMgPSBmYWxzZTtcXG4gXFx0c3RydWN0IHJ0Nl9pbmZvXFx0KnJ0O1xcdC8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovXFxuK1xcdHVuc2lnbmVkIGludCB3bGVuO1xcbiBcXHRpbnQgcmM7XFxuIFxcdGludCBsb2NhbDtcXG4gXFx0aW50IHJ0X21vZGU7XFxuQEAgLTE2MDAsNyArMTYxMSw3IEBAIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuIFxcdCAgIHRyYW5zbGF0ZSBhZGRyZXNzL3BvcnQgYmFjayAqL1xcbiBcXHRpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpIHtcXG4gXFx0XFx0aWYgKGNwLVxcdTAwM2VwYWNrZXRfeG1pdClcXG4tXFx0XFx0XFx0cmMgPSBjcC1cXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGlwdnNoKTtcXG4rXFx0XFx0XFx0cmMgPSBjcC1cXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGNpcGgpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHJjID0gTkZfQUNDRVBUO1xcbiBcXHRcXHQvKiBkbyBub3QgdG91Y2ggc2tiIGFueW1vcmUgKi9cXG5AQCAtMTYxNyw3ICsxNjI4LDcgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gXFx0XFx0ICBJUF9WU19SVF9NT0RFX0xPQ0FMIHwgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwgfFxcbiBcXHRcXHQgIElQX1ZTX1JUX01PREVfUkRSIDogSVBfVlNfUlRfTU9ERV9OT05fTE9DQUw7XFxuIFxcdGxvY2FsID0gX19pcF92c19nZXRfb3V0X3J0X3Y2KGNwLVxcdTAwM2VpcHZzLCBjcC1cXHUwMDNlYWYsIHNrYiwgY3AtXFx1MDAzZWRlc3QsXFxuLVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZjcC1cXHUwMDNlZGFkZHIuaW42LCBOVUxMLCBpcHZzaCwgMCwgcnRfbW9kZSk7XFxuK1xcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZjcC1cXHUwMDNlZGFkZHIuaW42LCBOVUxMLCBjaXBoLCAwLCBydF9tb2RlKTtcXG4gXFx0aWYgKGxvY2FsIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byB0eF9lcnJvcjtcXG4gXFx0cnQgPSBkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKTtcXG5AQCAtMTY0OCwxNCArMTY1OSwyMSBAQCBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbiBcXHRcXHRnb3RvIHR4X2Vycm9yO1xcbiBcXHR9XFxuIFxcbitcXHR3bGVuID0gY2lwaC1cXHUwMDNlbGVuO1xcbitcXHRpZiAoY2lwaC1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1AgfHwgY2lwaC1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgfHxcXG4rXFx0ICAgIGNpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fU0NUUCkge1xcbitcXHRcXHR3bGVuICs9IDIgKiBzaXplb2YoX191MTYpOyAvKiBBbHNvIG1hbmdsZSBwb3J0cyAqL1xcbitcXHRcXHRoYXNfcG9ydHMgPSB0cnVlO1xcbitcXHR9XFxuK1xcbiBcXHQvKiBjb3B5LW9uLXdyaXRlIHRoZSBwYWNrZXQgYmVmb3JlIG1hbmdsaW5nIGl0ICovXFxuLVxcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcXG4rXFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCB3bGVuKSlcXG4gXFx0XFx0Z290byB0eF9lcnJvcjtcXG4gXFxuIFxcdGlmIChza2JfY293KHNrYiwgcnQtXFx1MDAzZWRzdC5kZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbikpXFxuIFxcdFxcdGdvdG8gdHhfZXJyb3I7XFxuIFxcbi1cXHRpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMCk7XFxuK1xcdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMsIGNpcGgpO1xcbiBcXG4gXFx0LyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi9cXG4gXFx0c2tiLVxcdTAwM2VpZ25vcmVfZGYgPSAxO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNzo1NToxOC40NjA0MzE0NTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1NzUwNzkyMjU4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiSVBfVlNfSVBWNlwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVENQXCIsXG4gICAgXCJJUF9WU19QUk9UT19VRFBcIixcbiAgICBcIklQX1ZTX1BST1RPX1NDVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19uYXRfaWNtcFwiLFxuICAgIFwiaXBfdnNfbmF0X2ljbXBfdjZcIixcbiAgICBcImhhbmRsZV9yZXNwb25zZV9pY21wXCIsXG4gICAgXCJpcF92c19vdXRfaWNtcFwiLFxuICAgIFwiaXBfdnNfb3V0X2ljbXBfdjZcIixcbiAgICBcImlwX3ZzX2luX2ljbXBcIixcbiAgICBcImlwX3ZzX2luX2ljbXBfdjZcIixcbiAgICBcImlwX3ZzX2ZvcndhcmRfaWNtcFwiLFxuICAgIFwic2N0cF9jc3VtX2NoZWNrXCIsXG4gICAgXCJ0Y3BfY3N1bV9jaGVja1wiLFxuICAgIFwidWRwX2NzdW1fY2hlY2tcIixcbiAgICBcImlwX3ZzX2ljbXBfeG1pdFwiLFxuICAgIFwiaXBfdnNfaWNtcF94bWl0X3Y2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSUNNUCBOQVQgaGFuZGxpbmcgYW5kIGNoZWNrc3VtIHZhbGlkYXRpb24gbG9naWMgaW4gSVBWUy4gSXQgY2hhbmdlcyBob3cgSUNNUCBwYWNrZXRzIGFyZSBwcm9jZXNzZWQsIE5BVGVkLCBhbmQgdHJhbnNtaXR0ZWQsIGFuZCB1cGRhdGVzIGNoZWNrc3VtIHZhbGlkYXRpb24gZm9yIFRDUCwgVURQLCBhbmQgU0NUUCBwcm90b2NvbHMgd2l0aGluIElQVlMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIG1vZGlmaWVkIElDTVAgaGFuZGxpbmcgYW5kIGNoZWNrc3VtIHZhbGlkYXRpb24gZnVuY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBmMzFhNTg2NmIxYzgwMDNhZTg1MmQ4N2VmY2E4ZTg4NWQzZmZlNTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyMyAwNzo1NToxNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oXG5pbmRleCA0MTdmZjUxZjYyZmM4ZS4uOWFlOWFhZDY1NTQxZDMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oXG4rKysgYi9pbmNsdWRlL25ldC9pcF92cy5oXG5AQCAtMjUsNyArMjUsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXHUwMDNlXHRcdC8qIGZvciB1bmlvbiBuZl9pbmV0X2FkZHIgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXHRcdFx0LyogZm9yIHN0cnVjdCBpcHY2aGRyICovXG4rI2luY2x1ZGUgXHUwMDNjbmV0L3JvdXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXB2Ni5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9maWIuaFx1MDAzZVxuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaFx1MDAzZVxuICNlbmRpZlxuQEAgLTE5NzIsOCArMTk3NCw4IEBAIGludCBpcF92c190dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gaW50IGlwX3ZzX2RyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0XHQgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbiBpbnQgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi1cdFx0ICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsXG4tXHRcdCAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuK1x0XHQgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXG4rXHRcdCAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKTtcbiB2b2lkIGlwX3ZzX2Rlc3RfZHN0X3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCk7XG4gXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5AQCAtMTk4Niw4ICsxOTg4LDggQEAgaW50IGlwX3ZzX3R1bm5lbF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBpbnQgaXBfdnNfZHJfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdCAgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuIGludCBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuLVx0XHQgICAgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCxcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XG4rXHRcdCAgICAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZixcbitcdFx0ICAgICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpO1xuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfU1lTQ1RMXG5AQCAtMjA1OSwxNSArMjA2MSwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91c2VfaGFzaDIoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuIH1cbiBcbiB2b2lkIGlwX3ZzX25hdF9pY21wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHRcdCAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIpO1xuK1x0XHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyLCB1bnNpZ25lZCBpbnQgdG9mZixcbitcdFx0ICAgIGJvb2wgaGFzX3BvcnRzKTtcbiBcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbiB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHRcdCAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIpO1xuK1x0XHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyLCB1bnNpZ25lZCBpbnQgdG9mZixcbitcdFx0ICAgICAgIGJvb2wgaGFzX3BvcnRzLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpO1xuICNlbmRpZlxuIFxuLV9fc3VtMTYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCk7XG4tXG4gc3RhdGljIGlubGluZSBfX3dzdW0gaXBfdnNfY2hlY2tfZGlmZjQoX19iZTMyIG9sZCwgX19iZTMyIG5ldywgX193c3VtIG9sZHN1bSlcbiB7XG4gXHRfX2JlMzIgZGlmZlsyXSA9IHsgfm9sZCwgbmV3IH07XG5AQCAtMjA5Myw2ICsyMDk1LDM2IEBAIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmYyKF9fYmUxNiBvbGQsIF9fYmUxNiBuZXcsIF9fd3N1bSBvbGRzdW0pXG4gXHRyZXR1cm4gY3N1bV9wYXJ0aWFsKGRpZmYsIHNpemVvZihkaWZmKSwgb2xkc3VtKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2NoZWNrc3VtX25lZWRlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYWYpXG4re1xuK1x0LyogQ2hlY2tzdW0gdW5uZWNlc3Nhcnkgb3IgYWxyZWFkeSB2YWxpZGF0ZWQ/ICovXG4rXHRpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0LyogTE9DQUxfT1VUID8gKi9cbitcdGlmICghc2tiLVx1MDAzZWRldiB8fCBza2ItXHUwMDNlZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfTE9PUEJBQ0spXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdC8qICFMT0NBTF9JTiAoRk9SV0FSRCkgPyAqL1xuK1x0aWYgKGFmID09IEFGX0lORVQ2KSB7XG4rXHRcdGlmICghKGRzdF9ydDZfaW5mbyhza2JfZHN0KHNrYikpLVx1MDAzZXJ0NmlfZmxhZ3MgXHUwMDI2IFJURl9MT0NBTCkpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fSBlbHNlIHtcbitcdFx0aWYgKCEoc2tiX3J0YWJsZShza2IpLVx1MDAzZXJ0X2ZsYWdzIFx1MDAyNiBSVENGX0xPQ0FMKSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rLyoqXG4rICogaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrIC0gdmFsaWRhdGUgY2hlY2tzdW0gZm9yIFRDUC9VRFAvSUNNUFxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdFx0ICAgICAgIGludCBvZmZzZXQsIGludCBwcm90bywgaW50IGFmKVxuK3tcbitcdGlmICghaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHNrYiwgYWYpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdHJldHVybiAhbmZfY2hlY2tzdW0oc2tiLCBORl9JTkVUX0xPQ0FMX0lOLCBvZmZzZXQsIHByb3RvLCBhZik7XG4rfVxuK1xuIC8qIEZvcmdldCBjdXJyZW50IGNvbm50cmFjayAodW5jb25maXJtZWQpIGFuZCBhdHRhY2ggbm90cmFjayBlbnRyeSAqL1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19ub3RyYWNrKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuY1xuaW5kZXggYjBlMDBiZTg1Y2IxMmMuLjExY2JkYmFmNTYxZGFmIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmNcbkBAIC0zNjcsNyArMzY3LDcgQEAgc3RhdGljIGlubGluZSBpbnQgYXBwX3RjcF9wa3Rfb3V0KHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgaXB2c2gtXHUwMDNlbGVuICsgc2l6ZW9mKCp0aCkpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBpcHZzaC1cdTAwM2VsZW4pO1xuK1x0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2ItXHUwMDNlZGF0YSArIGlwdnNoLVx1MDAzZWxlbik7XG4gXG4gXHQvKlxuIFx0ICpcdFJlbWVtYmVyIHNlcSBudW1iZXIgaW4gY2FzZSB0aGlzIHBrdCBnZXRzIHJlc2l6ZWRcbkBAIC00NDMsNyArNDQzLDcgQEAgc3RhdGljIGlubGluZSBpbnQgYXBwX3RjcF9wa3RfaW4oc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBpcHZzaC1cdTAwM2VsZW4gKyBzaXplb2YoKnRoKSkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIGlwdnNoLVx1MDAzZWxlbik7XG4rXHR0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi1cdTAwM2VkYXRhICsgaXB2c2gtXHUwMDNlbGVuKTtcbiBcbiBcdC8qXG4gXHQgKlx0UmVtZW1iZXIgc2VxIG51bWJlciBpbiBjYXNlIHRoaXMgcGt0IGdldHMgcmVzaXplZFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG5pbmRleCBiYWZhYjkzNDUxZDAzNy4uN2VmYTIwOWE1MTdiMWMgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG5AQCAtODY3LDcgKzg2Nyw3IEBAIHN0YXRpYyBpbnQgc3lzY3RsX25hdF9pY21wX3NlbmQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpIHsgcmV0dXJuIDA7IH1cbiBcbiAjZW5kaWZcbiBcbi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXG4rc3RhdGljIF9fc3VtMTYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldClcbiB7XG4gXHRyZXR1cm4gY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIG9mZnNldCwgc2tiLVx1MDAzZWxlbiAtIG9mZnNldCwgMCkpO1xuIH1cbkBAIC05MjQsMTMgKzkyNCwxMyBAQCBzdGF0aWMgaW50IGlwX3ZzX3JvdXRlX21lX2hhcmRlcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLFxuICAqIC0gaW5vdXQ6IDE9aW4tXHUwMDNlb3V0LCAwPW91dC1cdTAwM2VpblxuICAqL1xuIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0KVxuK1x0XHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQsIHVuc2lnbmVkIGludCB0b2ZmLFxuK1x0XHQgICAgYm9vbCBoYXNfcG9ydHMpXG4ge1xuIFx0c3RydWN0IGlwaGRyICppcGhcdCA9IGlwX2hkcihza2IpO1xuLVx0dW5zaWduZWQgaW50IGljbXBfb2Zmc2V0ID0gaXBoLVx1MDAzZWlobCo0O1xuLVx0c3RydWN0IGljbXBoZHIgKmljbXBoXHQgPSAoc3RydWN0IGljbXBoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgK1xuLVx0XHRcdFx0XHRcdCAgICAgIGljbXBfb2Zmc2V0KTtcbitcdHN0cnVjdCBpY21waGRyICppY21waFx0ID0gKHN0cnVjdCBpY21waGRyICopKHNrYi1cdTAwM2VkYXRhICsgdG9mZik7XG4gXHRzdHJ1Y3QgaXBoZHIgKmNpcGhcdCA9IChzdHJ1Y3QgaXBoZHIgKikoaWNtcGggKyAxKTtcbitcdHVuc2lnbmVkIGludCBjb2ZmIF9fbWF5YmVfdW51c2VkID0gdG9mZiArIHNpemVvZihzdHJ1Y3QgaWNtcGhkcik7XG4gXG4gXHRpZiAoaW5vdXQpIHtcbiBcdFx0aXBoLVx1MDAzZXNhZGRyID0gY3AtXHUwMDNldmFkZHIuaXA7XG5AQCAtOTQ1LDggKzk0NSw3IEBAIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdH1cbiBcbiBcdC8qIHRoZSBUQ1AvVURQL1NDVFAgcG9ydCAqL1xuLVx0aWYgKElQUFJPVE9fVENQID09IGNpcGgtXHUwMDNlcHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2lwaC1cdTAwM2Vwcm90b2NvbCB8fFxuLVx0ICAgIElQUFJPVE9fU0NUUCA9PSBjaXBoLVx1MDAzZXByb3RvY29sKSB7XG4rXHRpZiAoaGFzX3BvcnRzKSB7XG4gXHRcdF9fYmUxNiAqcG9ydHMgPSAodm9pZCAqKWNpcGggKyBjaXBoLVx1MDAzZWlobCo0O1xuIFxuIFx0XHRpZiAoaW5vdXQpXG5AQCAtOTU3LDQ4ICs5NTYsNDAgQEAgdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIFx0LyogQW5kIGZpbmFsbHkgdGhlIElDTVAgY2hlY2tzdW0gKi9cbiBcdGljbXBoLVx1MDAzZWNoZWNrc3VtID0gMDtcbi1cdGljbXBoLVx1MDAzZWNoZWNrc3VtID0gaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpY21wX29mZnNldCk7XG4rXHRpY21waC1cdTAwM2VjaGVja3N1bSA9IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgdG9mZik7XG4gXHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XG4gXG4gXHRpZiAoaW5vdXQpXG4tXHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLFxuLVx0XHRcdFwiRm9yd2FyZGluZyBhbHRlcmVkIG91dGdvaW5nIElDTVBcIik7XG4rXHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNvZmYsXG4rXHRcdFx0ICAgICAgXCJGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUFwiKTtcbiBcdGVsc2Vcbi1cdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsXG4tXHRcdFx0XCJGb3J3YXJkaW5nIGFsdGVyZWQgaW5jb21pbmcgSUNNUFwiKTtcbitcdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgY29mZixcbitcdFx0XHQgICAgICBcIkZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QXCIpO1xuIH1cbiBcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbiB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHRcdCAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBpbm91dClcbitcdFx0ICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0LCB1bnNpZ25lZCBpbnQgdG9mZixcbitcdFx0ICAgICAgIGJvb2wgaGFzX3BvcnRzLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXG4ge1xuIFx0c3RydWN0IGlwdjZoZHIgKmlwaFx0ID0gaXB2Nl9oZHIoc2tiKTtcbi1cdHVuc2lnbmVkIGludCBpY21wX29mZnNldCA9IDA7XG4tXHR1bnNpZ25lZCBpbnQgb2Zmc1x0ID0gMDsgLyogaGVhZGVyIG9mZnNldCovXG4tXHRpbnQgcHJvdG9jb2w7XG4gXHRzdHJ1Y3QgaWNtcDZoZHIgKmljbXBoO1xuLVx0c3RydWN0IGlwdjZoZHIgKmNpcGg7XG4tXHR1bnNpZ25lZCBzaG9ydCBmcmFnb2ZmcztcbitcdHN0cnVjdCBpcHY2aGRyICpjaWg7XG4gXG4tXHRpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2aWNtcF9vZmZzZXQsIElQUFJPVE9fSUNNUFY2LCBcdTAwMjZmcmFnb2ZmcywgTlVMTCk7XG4tXHRpY21waCA9IChzdHJ1Y3QgaWNtcDZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBpY21wX29mZnNldCk7XG4tXHRvZmZzID0gaWNtcF9vZmZzZXQgKyBzaXplb2Yoc3RydWN0IGljbXA2aGRyKTtcbi1cdGNpcGggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBvZmZzKTtcbi1cbi1cdHByb3RvY29sID0gaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNm9mZnMsIC0xLCBcdTAwMjZmcmFnb2ZmcywgTlVMTCk7XG4rXHRpY21waCA9IChzdHJ1Y3QgaWNtcDZoZHIgKikoc2tiLVx1MDAzZWRhdGEgKyB0b2ZmKTtcbitcdGNpaCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2ItXHUwMDNlZGF0YSArIGNpcGgtXHUwMDNlb2ZmKTtcbiBcbiBcdGlmIChpbm91dCkge1xuIFx0XHRpcGgtXHUwMDNlc2FkZHIgPSBjcC1cdTAwM2V2YWRkci5pbjY7XG4tXHRcdGNpcGgtXHUwMDNlZGFkZHIgPSBjcC1cdTAwM2V2YWRkci5pbjY7XG4rXHRcdGNpaC1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZXZhZGRyLmluNjtcbiBcdH0gZWxzZSB7XG4gXHRcdGlwaC1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZWRhZGRyLmluNjtcbi1cdFx0Y2lwaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZWRhZGRyLmluNjtcbitcdFx0Y2loLVx1MDAzZXNhZGRyID0gY3AtXHUwMDNlZGFkZHIuaW42O1xuIFx0fVxuIFxuIFx0LyogdGhlIFRDUC9VRFAvU0NUUCBwb3J0ICovXG4tXHRpZiAoIWZyYWdvZmZzIFx1MDAyNlx1MDAyNiAoSVBQUk9UT19UQ1AgPT0gcHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gcHJvdG9jb2wgfHxcbi1cdFx0XHQgIElQUFJPVE9fU0NUUCA9PSBwcm90b2NvbCkpIHtcbi1cdFx0X19iZTE2ICpwb3J0cyA9ICh2b2lkICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgb2Zmcyk7XG4rXHRpZiAoaGFzX3BvcnRzKSB7XG4rXHRcdF9fYmUxNiAqcG9ydHMgPSAodm9pZCAqKShza2ItXHUwMDNlZGF0YSArIGNpcGgtXHUwMDNlbGVuKTtcbiBcbiBcdFx0SVBfVlNfREJHKDExLCBcIiVzKCkgY2hhbmdlZCBwb3J0ICVkIHRvICVkXFxuXCIsIF9fZnVuY19fLFxuIFx0XHRcdCAgICAgIG50b2hzKGlub3V0ID8gcG9ydHNbMV0gOiBwb3J0c1swXSksXG5AQCAtMTAxMSwxOSArMTAwMiwxNyBAQCB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXG4gXHQvKiBBbmQgZmluYWxseSB0aGUgSUNNUCBjaGVja3N1bSAqL1xuIFx0aWNtcGgtXHUwMDNlaWNtcDZfY2tzdW0gPSB+Y3N1bV9pcHY2X21hZ2ljKFx1MDAyNmlwaC1cdTAwM2VzYWRkciwgXHUwMDI2aXBoLVx1MDAzZWRhZGRyLFxuLVx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlbGVuIC0gaWNtcF9vZmZzZXQsXG4rXHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2VsZW4gLSB0b2ZmLFxuIFx0XHRcdFx0XHQgICAgICBJUFBST1RPX0lDTVBWNiwgMCk7XG4tXHRza2ItXHUwMDNlY3N1bV9zdGFydCA9IHNrYl9uZXR3b3JrX2hlYWRlcihza2IpIC0gc2tiLVx1MDAzZWhlYWQgKyBpY21wX29mZnNldDtcbitcdHNrYi1cdTAwM2Vjc3VtX3N0YXJ0ID0gc2tiX2hlYWRyb29tKHNrYikgKyB0b2ZmO1xuIFx0c2tiLVx1MDAzZWNzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSk7XG4gXHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fUEFSVElBTDtcbiBcbiBcdGlmIChpbm91dClcbi1cdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsXG4tXHRcdFx0ICAgICAgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsXG4rXHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQ2LCBwcCwgc2tiLCBjaXBoLVx1MDAzZW9mZixcbiBcdFx0XHQgICAgICBcIkZvcndhcmRpbmcgYWx0ZXJlZCBvdXRnb2luZyBJQ01QdjZcIik7XG4gXHRlbHNlXG4tXHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQ2LCBwcCwgc2tiLFxuLVx0XHRcdCAgICAgICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLFxuK1x0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwgY2lwaC1cdTAwM2VvZmYsXG4gXHRcdFx0ICAgICAgXCJGb3J3YXJkaW5nIGFsdGVyZWQgaW5jb21pbmcgSUNNUHY2XCIpO1xuIH1cbiAjZW5kaWZcbkBAIC0xMDMzLDM2ICsxMDIyLDQxIEBAIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiAgKi9cbiBzdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdHVuaW9uIG5mX2luZXRfYWRkciAqc25ldCxcbi1cdFx0XHRcdF9fdTggcHJvdG9jb2wsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbitcdFx0XHRcdHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdFx0XHRcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHRcdFx0XHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaWhsLFxuLVx0XHRcdFx0dW5zaWduZWQgaW50IGhvb2tudW0pXG4rXHRcdFx0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgsXG4rXHRcdFx0XHR1bnNpZ25lZCBpbnQgdG9mZiwgdW5zaWduZWQgaW50IGhvb2tudW0pXG4ge1xuK1x0aW50IGlwcm90byA9IGFmID09IEFGX0lORVQ2ID8gSVBQUk9UT19JQ01QVjYgOiBJUFBST1RPX0lDTVA7XG4gXHR1bnNpZ25lZCBpbnQgdmVyZGljdCA9IE5GX0RST1A7XG4rXHR1bnNpZ25lZCBpbnQgY3RvZmYgPSBjaXBoLVx1MDAzZWxlbjtcbitcdGJvb2wgaGFzX3BvcnRzID0gZmFsc2U7XG4gXG4gXHRpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpXG4gXHRcdGdvdG8gYWZ0ZXJfbmF0O1xuIFxuIFx0LyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovXG4tXHRpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgXHUwMDI2XHUwMDI2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWhsKSkge1xuK1x0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCB0b2ZmLCBpcHJvdG8sIGFmKSkge1xuIFx0XHQvKiBGYWlsZWQgY2hlY2tzdW0hICovXG4gXHRcdElQX1ZTX0RCR19CVUYoMSwgXCJGb3J3YXJkIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVzIVxcblwiLFxuIFx0XHRcdCAgICAgIElQX1ZTX0RCR19BRERSKGFmLCBzbmV0KSk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0aWYgKElQUFJPVE9fVENQID09IHByb3RvY29sIHx8IElQUFJPVE9fVURQID09IHByb3RvY29sIHx8XG4tXHQgICAgSVBQUk9UT19TQ1RQID09IHByb3RvY29sKVxuLVx0XHRvZmZzZXQgKz0gMiAqIHNpemVvZihfX3UxNik7XG4tXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIG9mZnNldCkpXG4rXHRpZiAoY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fCBjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XG4rXHQgICAgY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1NDVFApIHtcbitcdFx0Y3RvZmYgKz0gMiAqIHNpemVvZihfX3UxNik7XG4rXHRcdGhhc19wb3J0cyA9IHRydWU7XG4rXHR9XG4rXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIGN0b2ZmKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4gXHRpZiAoYWYgPT0gQUZfSU5FVDYpXG4tXHRcdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAxKTtcbitcdFx0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDEsIHRvZmYsIGhhc19wb3J0cywgY2lwaCk7XG4gXHRlbHNlXG4gI2VuZGlmXG4tXHRcdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAxKTtcbitcdFx0aXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDEsIHRvZmYsIGhhc19wb3J0cyk7XG4gXG4gXHRpZiAoaXBfdnNfcm91dGVfbWVfaGFyZGVyKGNwLVx1MDAzZWlwdnMsIGFmLCBza2IsIGhvb2tudW0pKVxuIFx0XHRnb3RvIG91dDtcbkBAIC0xMDkwLDkgKzEwODQsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAgKlx0Q3VycmVudGx5IGhhbmRsZXMgZXJyb3IgdHlwZXMgLSB1bnJlYWNoYWJsZSwgcXVlbmNoLCB0dGwgZXhjZWVkZWQuXG4gICovXG4gc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHQgIGludCAqcmVsYXRlZCwgdW5zaWduZWQgaW50IGhvb2tudW0pXG4rXHRcdFx0ICBpbnQgKnJlbGF0ZWQsIHVuc2lnbmVkIGludCBob29rbnVtLFxuK1x0XHRcdCAgc3RydWN0IGlwX3ZzX2lwaGRyICppcHZzaClcbiB7XG4tXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbiBcdHN0cnVjdCBpY21waGRyXHRfaWNtcGgsICppYztcbiBcdHN0cnVjdCBpcGhkclx0X2NpcGgsICpjaWg7XHQvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi9cbiBcdHN0cnVjdCBpcF92c19pcGhkciBjaXBoO1xuQEAgLTExMDcsMTcgKzExMDEsMTkgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChpcF9pc19mcmFnbWVudChpcF9oZHIoc2tiKSkpIHtcbiBcdFx0aWYgKGlwX3ZzX2dhdGhlcl9mcmFncyhpcHZzLCBza2IsIGlwX3ZzX2RlZnJhZ191c2VyKGhvb2tudW0pKSlcbiBcdFx0XHRyZXR1cm4gTkZfU1RPTEVOO1xuK1x0XHRpZiAoIWlwX3ZzX2ZpbGxfaXBoX3NrYihBRl9JTkVULCBza2IsIGZhbHNlLCBpcHZzaCkpXG4rXHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcdH1cbiBcbi1cdGlwaCA9IGlwX2hkcihza2IpO1xuLVx0b2Zmc2V0ID0gaWhsID0gaXBoLVx1MDAzZWlobCAqIDQ7XG4rXHRpaGwgPSBpcHZzaC1cdTAwM2VsZW47XG4rXHRvZmZzZXQgPSBpcHZzaC1cdTAwM2VsZW47XG4gXHRpYyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9pY21waCksIFx1MDAyNl9pY21waCk7XG4gXHRpZiAoaWMgPT0gTlVMTClcbiBcdFx0cmV0dXJuIE5GX0RST1A7XG4gXG4gXHRJUF9WU19EQkcoMTIsIFwiT3V0Z29pbmcgSUNNUCAoJWQsJWQpICVwSTQtXHUwMDNlJXBJNFxcblwiLFxuIFx0XHQgIGljLVx1MDAzZXR5cGUsIG50b2hzKGljbXBfaWQoaWMpKSxcbi1cdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIsIFx1MDAyNmlwaC1cdTAwM2VkYWRkcik7XG4rXHRcdCAgXHUwMDI2aXB2c2gtXHUwMDNlc2FkZHIuaXAsIFx1MDAyNmlwdnNoLVx1MDAzZWRhZGRyLmlwKTtcbiBcbiBcdC8qXG4gXHQgKiBXb3JrIHRocm91Z2ggc2VlaW5nIGlmIHRoaXMgaXMgZm9yIHVzLlxuQEAgLTExMzYsNyArMTEzMiw3IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHQvKiBOb3cgZmluZCB0aGUgY29udGFpbmVkIElQIGhlYWRlciAqL1xuIFx0b2Zmc2V0ICs9IHNpemVvZihfaWNtcGgpO1xuIFx0Y2loID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2NpcGgpLCBcdTAwMjZfY2lwaCk7XG4tXHRpZiAoY2loID09IE5VTEwpXG4rXHRpZiAoIShjaWggXHUwMDI2XHUwMDI2IGNpaC1cdTAwM2V2ZXJzaW9uID09IDQgXHUwMDI2XHUwMDI2IGNpaC1cdTAwM2VpaGwgXHUwMDNlPSA1KSlcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovXG4gXG4gXHRwcCA9IGlwX3ZzX3Byb3RvX2dldChjaWgtXHUwMDNlcHJvdG9jb2wpO1xuQEAgLTExNDQsOCArMTE0MCw3IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHQvKiBJcyB0aGUgZW1iZWRkZWQgcHJvdG9jb2wgaGVhZGVyIHByZXNlbnQ/ICovXG4tXHRpZiAodW5saWtlbHkoY2loLVx1MDAzZWZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUF9PRkZTRVQpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIHBwLVx1MDAzZWRvbnRfZGVmcmFnKSlcbitcdGlmICh1bmxpa2VseShjaWgtXHUwMDNlZnJhZ19vZmYgXHUwMDI2IGh0b25zKElQX09GRlNFVCkgXHUwMDI2XHUwMDI2ICFwcC1cdTAwM2Vkb250X2RlZnJhZykpXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBvZmZzZXQsXG5AQCAtMTE1OSw5ICsxMTU0LDkgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmICghY3ApXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4tXHRzbmV0LmlwID0gaXBoLVx1MDAzZXNhZGRyO1xuLVx0cmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQsIHNrYiwgXHUwMDI2c25ldCwgY2loLVx1MDAzZXByb3RvY29sLCBjcCxcbi1cdFx0XHRcdCAgICBwcCwgY2lwaC5sZW4sIGlobCwgaG9va251bSk7XG4rXHRzbmV0LmlwID0gaXB2c2gtXHUwMDNlc2FkZHIuaXA7XG4rXHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVCwgc2tiLCBcdTAwMjZzbmV0LCBjcCwgcHAsIFx1MDAyNmNpcGgsIGlobCxcbitcdFx0XHRcdCAgICBob29rbnVtKTtcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5AQCAtMTE3NCw3ICsxMTY5LDYgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBpcF92c19jb25uICpjcDtcbiBcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7XG4gXHR1bmlvbiBuZl9pbmV0X2FkZHIgc25ldDtcbi1cdHVuc2lnbmVkIGludCBvZmZzZXQ7XG4gXG4gXHQqcmVsYXRlZCA9IDE7XG4gXHRpYyA9IGZyYWdfc2FmZV9za2JfaHAoc2tiLCBpcHZzaC1cdTAwM2VsZW4sIHNpemVvZihfaWNtcGgpLCBcdTAwMjZfaWNtcGgpO1xuQEAgLTEyMTAsNiArMTIwNCwxMCBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKCFwcClcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbitcdC8qIElzIHRoZSBlbWJlZGRlZCBwcm90b2NvbCBoZWFkZXIgcHJlc2VudD8gKi9cbitcdGlmICh1bmxpa2VseShjaXBoLmZyYWdvZmZzIFx1MDAyNlx1MDAyNiAhcHAtXHUwMDNlZG9udF9kZWZyYWcpKVxuK1x0XHRyZXR1cm4gTkZfQUNDRVBUO1xuK1xuIFx0LyogVGhlIGVtYmVkZGVkIGhlYWRlcnMgY29udGFpbiBzb3VyY2UgYW5kIGRlc3QgaW4gcmV2ZXJzZSBvcmRlciAqL1xuIFx0Y3AgPSBJTkRJUkVDVF9DQUxMXzEocHAtXHUwMDNlY29ubl9vdXRfZ2V0LCBpcF92c19jb25uX291dF9nZXRfcHJvdG8sXG4gXHRcdFx0ICAgICBpcHZzLCBBRl9JTkVUNiwgc2tiLCBcdTAwMjZjaXBoKTtcbkBAIC0xMjE3LDkgKzEyMTUsOCBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFxuIFx0c25ldC5pbjYgPSBjaXBoLnNhZGRyLmluNjtcbi1cdG9mZnNldCA9IGNpcGgubGVuO1xuLVx0cmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQ2LCBza2IsIFx1MDAyNnNuZXQsIGNpcGgucHJvdG9jb2wsIGNwLFxuLVx0XHRcdFx0ICAgIHBwLCBvZmZzZXQsIGlwdnNoLVx1MDAzZWxlbiwgaG9va251bSk7XG4rXHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVDYsIHNrYiwgXHUwMDI2c25ldCwgY3AsIHBwLCBcdTAwMjZjaXBoLFxuK1x0XHRcdFx0ICAgIGlwdnNoLVx1MDAzZWxlbiwgaG9va251bSk7XG4gfVxuICNlbmRpZlxuIFxuQEAgLTE1NDUsNyArMTU0Miw4IEBAIGlwX3ZzX291dF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0XG4gI2VuZGlmXG4gXHRcdGlmICh1bmxpa2VseShpcGgucHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QKSkge1xuIFx0XHRcdGludCByZWxhdGVkO1xuLVx0XHRcdGludCB2ZXJkaWN0ID0gaXBfdnNfb3V0X2ljbXAoaXB2cywgc2tiLCBcdTAwMjZyZWxhdGVkLCBob29rbnVtKTtcbitcdFx0XHRpbnQgdmVyZGljdCA9IGlwX3ZzX291dF9pY21wKGlwdnMsIHNrYiwgXHUwMDI2cmVsYXRlZCxcbitcdFx0XHRcdFx0XHQgICAgIGhvb2tudW0sIFx1MDAyNmlwaCk7XG4gXG4gXHRcdFx0aWYgKHJlbGF0ZWQpXG4gXHRcdFx0XHRyZXR1cm4gdmVyZGljdDtcbkBAIC0xNzUzLDkgKzE3NTEsOCBAQCBzdGF0aWMgaW50IGlwdnNfZ3JlX2RlY2FwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuICAqL1xuIHN0YXRpYyBpbnRcbiBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4tXHQgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSlcbitcdCAgICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbiB7XG4tXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbiBcdHN0cnVjdCBpY21waGRyXHRfaWNtcGgsICppYztcbiBcdHN0cnVjdCBpcGhkclx0X2NpcGgsICpjaWg7XHQvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi9cbiBcdHN0cnVjdCBpcF92c19pcGhkciBjaXBoO1xuQEAgLTE3NjUsNyArMTc2Miw3IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdHVuc2lnbmVkIGludCBvZmZzZXQsIG9mZnNldDIsIGlobCwgdmVyZGljdDtcbiBcdGJvb2wgdHVubmVsLCBuZXdfY3AgPSBmYWxzZTtcbiBcdHVuaW9uIG5mX2luZXRfYWRkciAqcmFkZHI7XG4tXHRjaGFyICpvdXRlcl9wcm90byA9IFwiSVBJUFwiO1xuK1x0Y2hhciAqb3V0ZXJfcHJvdG8gX19tYXliZV91bnVzZWQgPSBcIklQSVBcIjtcbiBcdHVuc2lnbmVkIGludCBobGVuX2lwaXA7XG4gXHRpbnQgdWxlbiA9IDA7XG4gXG5AQCAtMTc3NSwxNyArMTc3MiwxOSBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXHRpZiAoaXBfaXNfZnJhZ21lbnQoaXBfaGRyKHNrYikpKSB7XG4gXHRcdGlmIChpcF92c19nYXRoZXJfZnJhZ3MoaXB2cywgc2tiLCBpcF92c19kZWZyYWdfdXNlcihob29rbnVtKSkpXG4gXHRcdFx0cmV0dXJuIE5GX1NUT0xFTjtcbitcdFx0aWYgKCFpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVCwgc2tiLCBmYWxzZSwgaXBoKSlcbitcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFx0fVxuIFxuLVx0aXBoID0gaXBfaGRyKHNrYik7XG4tXHRvZmZzZXQgPSBpaGwgPSBpcGgtXHUwMDNlaWhsICogNDtcbitcdGlobCA9IGlwaC1cdTAwM2VsZW47XG4rXHRvZmZzZXQgPSBpcGgtXHUwMDNlbGVuO1xuIFx0aWMgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfaWNtcGgpLCBcdTAwMjZfaWNtcGgpO1xuIFx0aWYgKGljID09IE5VTEwpXG4gXHRcdHJldHVybiBORl9EUk9QO1xuIFxuIFx0SVBfVlNfREJHKDEyLCBcIkluY29taW5nIElDTVAgKCVkLCVkKSAlcEk0LVx1MDAzZSVwSTRcXG5cIixcbiBcdFx0ICBpYy1cdTAwM2V0eXBlLCBudG9ocyhpY21wX2lkKGljKSksXG4tXHRcdCAgXHUwMDI2aXBoLVx1MDAzZXNhZGRyLCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIpO1xuK1x0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkci5pcCwgXHUwMDI2aXBoLVx1MDAzZWRhZGRyLmlwKTtcbiBcbiBcdC8qXG4gXHQgKiBXb3JrIHRocm91Z2ggc2VlaW5nIGlmIHRoaXMgaXMgZm9yIHVzLlxuQEAgLTE4NjcsOCArMTg2Niw3IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdHBwID0gcGQtXHUwMDNlcHA7XG4gXG4gXHQvKiBJcyB0aGUgZW1iZWRkZWQgcHJvdG9jb2wgaGVhZGVyIHByZXNlbnQ/ICovXG4tXHRpZiAodW5saWtlbHkoY2loLVx1MDAzZWZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUF9PRkZTRVQpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIHBwLVx1MDAzZWRvbnRfZGVmcmFnKSlcbitcdGlmICh1bmxpa2VseShjaWgtXHUwMDNlZnJhZ19vZmYgXHUwMDI2IGh0b25zKElQX09GRlNFVCkgXHUwMDI2XHUwMDI2ICFwcC1cdTAwM2Vkb250X2RlZnJhZykpXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBvZmZzZXQsXG5AQCAtMTg3Niw3ICsxODc0LDYgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFxuIFx0b2Zmc2V0MiA9IG9mZnNldDtcbiBcdGlwX3ZzX2ZpbGxfaXBoX3NrYl9pY21wKEFGX0lORVQsIHNrYiwgb2Zmc2V0LCAhdHVubmVsLCBcdTAwMjZjaXBoKTtcbi1cdG9mZnNldCA9IGNpcGgubGVuO1xuIFxuIFx0LyogVGhlIGVtYmVkZGVkIGhlYWRlcnMgY29udGFpbiBzb3VyY2UgYW5kIGRlc3QgaW4gcmV2ZXJzZSBvcmRlci5cbiBcdCAqIEZvciBJUElQL1VEUC9HUkUgdHVubmVsIHRoaXMgaXMgZXJyb3IgZm9yIHJlcXVlc3QsIG5vdCBmb3IgcmVwbHkuXG5AQCAtMTg5OCwxMCArMTg5NSwxMSBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXHR2ZXJkaWN0ID0gTkZfRFJPUDtcbiBcbiBcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xuLVx0aWYgKCFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpIFx1MDAyNlx1MDAyNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIGlobCkpIHtcbitcdGlmICgoSVBfVlNfRldEX01FVEhPRChjcCkgPT0gSVBfVlNfQ09OTl9GX01BU1EgfHwgdHVubmVsKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgaWhsLCBJUFBST1RPX0lDTVAsIEFGX0lORVQpKSB7XG4gXHRcdC8qIEZhaWxlZCBjaGVja3N1bSEgKi9cbiBcdFx0SVBfVlNfREJHKDEsIFwiSW5jb21pbmcgSUNNUDogZmFpbGVkIGNoZWNrc3VtIGZyb20gJXBJNCFcXG5cIixcbi1cdFx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkcik7XG4rXHRcdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIuaXApO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbkBAIC0xOTY5LDEwICsxOTY3LDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFxuIFx0LyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovXG4gXHRpcF92c19pbl9zdGF0cyhjcCwgc2tiKTtcbi1cdGlmIChJUFBST1RPX1RDUCA9PSBjaWgtXHUwMDNlcHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2loLVx1MDAzZXByb3RvY29sIHx8XG4tXHQgICAgSVBQUk9UT19TQ1RQID09IGNpaC1cdTAwM2Vwcm90b2NvbClcbi1cdFx0b2Zmc2V0ICs9IDIgKiBzaXplb2YoX191MTYpO1xuLVx0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdChza2IsIGNwLCBwcCwgb2Zmc2V0LCBob29rbnVtLCBcdTAwMjZjaXBoKTtcbitcdHZlcmRpY3QgPSBpcF92c19pY21wX3htaXQoc2tiLCBjcCwgcHAsIGlwaC1cdTAwM2VsZW4sIGhvb2tudW0sIFx1MDAyNmNpcGgpO1xuIFxuIG91dDpcbiBcdGlmIChsaWtlbHkoIW5ld19jcCkpXG5AQCAtMjAzMiw4ICsyMDI3LDggQEAgc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFx0cHAgPSBwZC1cdTAwM2VwcDtcbiBcbi1cdC8qIENhbm5vdCBoYW5kbGUgZnJhZ21lbnRlZCBlbWJlZGRlZCBwcm90b2NvbCAqL1xuLVx0aWYgKGNpcGguZnJhZ29mZnMpXG4rXHQvKiBJcyB0aGUgZW1iZWRkZWQgcHJvdG9jb2wgaGVhZGVyIHByZXNlbnQ/ICovXG4rXHRpZiAoY2lwaC5mcmFnb2ZmcyBcdTAwMjZcdTAwMjYgIXBwLVx1MDAzZWRvbnRfZGVmcmFnKVxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFxuIFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsIG9mZnNldCxcbkBAIC0yMDU3LDIzICsyMDUyLDIyIEBAIHN0YXRpYyBpbnQgaXBfdnNfaW5faWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0bmV3X2NwID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdC8qIFZTL1RVTiwgVlMvRFIgYW5kIExPQ0FMTk9ERSBqdXN0IGxldCBpdCBnbyAqL1xuLVx0aWYgKChob29rbnVtID09IE5GX0lORVRfTE9DQUxfT1VUKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpKSB7XG4tXHRcdHZlcmRpY3QgPSBORl9BQ0NFUFQ7XG4rXHR2ZXJkaWN0ID0gTkZfRFJPUDtcbitcbitcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xuK1x0aWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApID09IElQX1ZTX0NPTk5fRl9NQVNRIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpcGgtXHUwMDNlbGVuLCBJUFBST1RPX0lDTVBWNixcbitcdFx0XHRcdFx0IEFGX0lORVQ2KSkge1xuK1x0XHQvKiBGYWlsZWQgY2hlY2tzdW0hICovXG4rXHRcdElQX1ZTX0RCRygxLCBcIkluY29taW5nIElDTVB2NjogZmFpbGVkIGNoZWNrc3VtIGZyb20gJXBJNmMhXFxuXCIsXG4rXHRcdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiBcdC8qIGRvIHRoZSBzdGF0aXN0aWNzIGFuZCBwdXQgaXQgYmFjayAqL1xuIFx0aXBfdnNfaW5fc3RhdHMoY3AsIHNrYik7XG4gXG4tXHQvKiBOZWVkIHRvIG1hbmdsZSBjb250YWluZWQgSVB2NiBoZWFkZXIgaW4gSUNNUHY2IHBhY2tldCAqL1xuLVx0b2Zmc2V0ID0gY2lwaC5sZW47XG4tXHRpZiAoSVBQUk9UT19UQ1AgPT0gY2lwaC5wcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBjaXBoLnByb3RvY29sIHx8XG4tXHQgICAgSVBQUk9UT19TQ1RQID09IGNpcGgucHJvdG9jb2wpXG4tXHRcdG9mZnNldCArPSAyICogc2l6ZW9mKF9fdTE2KTsgLyogQWxzbyBtYW5nbGUgcG9ydHMgKi9cbi1cbi1cdHZlcmRpY3QgPSBpcF92c19pY21wX3htaXRfdjYoc2tiLCBjcCwgcHAsIG9mZnNldCwgaG9va251bSwgXHUwMDI2Y2lwaCk7XG4rXHR2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0X3Y2KHNrYiwgY3AsIHBwLCBpcGgtXHUwMDNlbGVuLCBob29rbnVtLCBcdTAwMjZjaXBoKTtcbiBcbiBvdXQ6XG4gXHRpZiAobGlrZWx5KCFuZXdfY3ApKVxuQEAgLTIxNTIsNyArMjE0Niw3IEBAIGlwX3ZzX2luX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlXG4gXHRcdGlmICh1bmxpa2VseShpcGgucHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QKSkge1xuIFx0XHRcdGludCByZWxhdGVkO1xuIFx0XHRcdGludCB2ZXJkaWN0ID0gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsIFx1MDAyNnJlbGF0ZWQsXG4tXHRcdFx0XHRcdFx0ICAgIGhvb2tudW0pO1xuK1x0XHRcdFx0XHRcdCAgICBob29rbnVtLCBcdTAwMjZpcGgpO1xuIFxuIFx0XHRcdGlmIChyZWxhdGVkKVxuIFx0XHRcdFx0cmV0dXJuIHZlcmRpY3Q7XG5AQCAtMjI4OCw2ICsyMjgyLDcgQEAgaXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbiB7XG4gXHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IG5ldF9pcHZzKHN0YXRlLVx1MDAzZW5ldCk7XG4rXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgaXBoZHI7XG4gXHRpbnQgcjtcbiBcbiBcdC8qIGlwdnMgZW5hYmxlZCBpbiB0aGlzIG5ldG5zID8gKi9cbkBAIC0yMjk3LDEwICsyMjkyLDkgQEAgaXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoc3RhdGUtXHUwMDNlcGYgPT0gTkZQUk9UT19JUFY0KSB7XG4gXHRcdGlmIChpcF9oZHIoc2tiKS1cdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX0lDTVApXG4gXHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbitcdFx0aXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQsIHNrYiwgZmFsc2UsIFx1MDAyNmlwaGRyKTtcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbiBcdH0gZWxzZSB7XG4tXHRcdHN0cnVjdCBpcF92c19pcGhkciBpcGhkcjtcbi1cbiBcdFx0aXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQ2LCBza2IsIGZhbHNlLCBcdTAwMjZpcGhkcik7XG4gXG4gXHRcdGlmIChpcGhkci5wcm90b2NvbCAhPSBJUFBST1RPX0lDTVBWNilcbkBAIC0yMzEwLDcgKzIzMDQsNyBAQCBpcF92c19mb3J3YXJkX2ljbXAodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAjZW5kaWZcbiBcdH1cbiBcbi1cdHJldHVybiBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgXHUwMDI2ciwgc3RhdGUtXHUwMDNlaG9vayk7XG4rXHRyZXR1cm4gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsIFx1MDAyNnIsIHN0YXRlLVx1MDAzZWhvb2ssIFx1MDAyNmlwaGRyKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBpcF92c19vcHM0W10gPSB7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmNcbmluZGV4IGM2NzMxN2JlMTdkZmFmLi4zZGJkMzA5NmUxNjM3YiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmNcbkBAIC0xMSw3ICsxMSw3IEBAXG4gXG4gc3RhdGljIGludFxuIHNjdHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHRcdHVuc2lnbmVkIGludCBzY3RwaG9mZik7XG4rXHRcdHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbiBcbiBzdGF0aWMgaW50XG4gc2N0cF9jb25uX3NjaGVkdWxlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXG5AQCAtMTA5LDcgKzEwOSw3IEBAIHNjdHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdGludCByZXQ7XG4gXG4gXHRcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xuLVx0XHRpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgc2N0cGhvZmYpKVxuK1x0XHRpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXG5AQCAtMTIxLDcgKzEyMSw3IEBAIHNjdHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHNjdHBoID0gKHZvaWQgKikgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBzY3RwaG9mZjtcbitcdHNjdHBoID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YSArIHNjdHBob2ZmO1xuIFxuIFx0LyogT25seSB1cGRhdGUgY3N1bSBpZiB3ZSByZWFsbHkgaGF2ZSB0byAqL1xuIFx0aWYgKHNjdHBoLVx1MDAzZXNvdXJjZSAhPSBjcC1cdTAwM2V2cG9ydCB8fCBwYXlsb2FkX2NzdW0gfHxcbkBAIC0xNTcsNyArMTU3LDcgQEAgc2N0cF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBzY3RwaG9mZikpXG4rXHRcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi9cbkBAIC0xNjksNyArMTY5LDcgQEAgc2N0cF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0XHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xuIFx0fVxuIFxuLVx0c2N0cGggPSAodm9pZCAqKSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHNjdHBob2ZmO1xuK1x0c2N0cGggPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhICsgc2N0cGhvZmY7XG4gXG4gXHQvKiBPbmx5IHVwZGF0ZSBjc3VtIGlmIHdlIHJlYWxseSBoYXZlIHRvICovXG4gXHRpZiAoc2N0cGgtXHUwMDNlZGVzdCAhPSBjcC1cdTAwM2VkcG9ydCB8fCBwYXlsb2FkX2NzdW0gfHxcbkBAIC0xODcsMTkgKzE4NywyMiBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIHN0YXRpYyBpbnRcbiBzY3RwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHR1bnNpZ25lZCBpbnQgc2N0cGhvZmYpXG4rXHRcdHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuIHtcbitcdHVuc2lnbmVkIGludCBzY3RwaG9mZiA9IGlwaC1cdTAwM2VsZW47XG4gXHRzdHJ1Y3Qgc2N0cGhkciAqc2g7XG4gXHRfX2xlMzIgY21wLCB2YWw7XG4gXG4rXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSlcbitcdFx0cmV0dXJuIDE7XG4gXHRzaCA9IChzdHJ1Y3Qgc2N0cGhkciAqKShza2ItXHUwMDNlZGF0YSArIHNjdHBob2ZmKTtcbiBcdGNtcCA9IHNoLVx1MDAzZWNoZWNrc3VtO1xuIFx0dmFsID0gc2N0cF9jb21wdXRlX2Nrc3VtKHNrYiwgc2N0cGhvZmYpO1xuIFxuIFx0aWYgKHZhbCAhPSBjbXApIHtcbiBcdFx0LyogQ1JDIGZhaWx1cmUsIGR1bXAgaXQuICovXG4tXHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXG4tXHRcdFx0XHRcIkZhaWxlZCBjaGVja3N1bSBmb3JcIik7XG4rXHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIGlwaC1cdTAwM2VvZmYsXG4rXHRcdFx0XHQgXCJGYWlsZWQgY2hlY2tzdW0gZm9yXCIpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdHJldHVybiAxO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuY1xuaW5kZXggZjg2Yjc2M2VmY2M0ZGMuLjk5YTI4NmZkYzkwYzY1IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmNcbkBAIC0yOSw3ICsyOSw3IEBAXG4gXG4gc3RhdGljIGludFxuIHRjcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdCAgICAgICB1bnNpZ25lZCBpbnQgdGNwaG9mZik7XG4rXHQgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuIFxuIHN0YXRpYyBpbnRcbiB0Y3BfY29ubl9zY2hlZHVsZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTE2Niw3ICsxNjYsNyBAQCB0Y3Bfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdGludCByZXQ7XG4gXG4gXHRcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xuLVx0XHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCB0Y3Bob2ZmKSlcbitcdFx0aWYgKCF0Y3BfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXG5AQCAtMTc5LDcgKzE3OSw3IEBAIHRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0XHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xuIFx0fVxuIFxuLVx0dGNwaCA9ICh2b2lkICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyB0Y3Bob2ZmO1xuK1x0dGNwaCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGEgKyB0Y3Bob2ZmO1xuIFx0dGNwaC1cdTAwM2Vzb3VyY2UgPSBjcC1cdTAwM2V2cG9ydDtcbiBcbiBcdC8qIEFkanVzdCBUQ1AgY2hlY2tzdW1zICovXG5AQCAtMjQ0LDcgKzI0NCw3IEBAIHRjcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghdGNwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIHRjcGhvZmYpKVxuK1x0XHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKlxuQEAgLTI2MCw3ICsyNjAsNyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHRjcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgdGNwaG9mZjtcbitcdHRjcGggPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhICsgdGNwaG9mZjtcbiBcdHRjcGgtXHUwMDNlZGVzdCA9IGNwLVx1MDAzZWRwb3J0O1xuIFxuIFx0LypcbkBAIC0zMDIsNDEgKzMwMiwxMyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXG4gc3RhdGljIGludFxuIHRjcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdCAgICAgICB1bnNpZ25lZCBpbnQgdGNwaG9mZilcbitcdCAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbiB7XG4tXHRzd2l0Y2ggKHNrYi1cdTAwM2VpcF9zdW1tZWQpIHtcbi1cdGNhc2UgQ0hFQ0tTVU1fTk9ORTpcbi1cdFx0c2tiLVx1MDAzZWNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCB0Y3Bob2ZmLCBza2ItXHUwMDNlbGVuIC0gdGNwaG9mZiwgMCk7XG4tXHRcdGZhbGx0aHJvdWdoO1xuLVx0Y2FzZSBDSEVDS1NVTV9DT01QTEVURTpcbi0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbi1cdFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XG4tXHRcdFx0aWYgKGNzdW1faXB2Nl9tYWdpYyhcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZXNhZGRyLFxuLVx0XHRcdFx0XHQgICAgXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbi1cdFx0XHRcdFx0ICAgIHNrYi1cdTAwM2VsZW4gLSB0Y3Bob2ZmLFxuLVx0XHRcdFx0XHQgICAgSVBQUk9UT19UQ1AsXG4tXHRcdFx0XHRcdCAgICBza2ItXHUwMDNlY3N1bSkpIHtcbi1cdFx0XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXG4tXHRcdFx0XHRcdFx0IFwiRmFpbGVkIGNoZWNrc3VtIGZvclwiKTtcbi1cdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdH1cbi1cdFx0fSBlbHNlXG4tI2VuZGlmXG4tXHRcdFx0aWYgKGNzdW1fdGNwdWRwX21hZ2ljKGlwX2hkcihza2IpLVx1MDAzZXNhZGRyLFxuLVx0XHRcdFx0XHQgICAgICBpcF9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbi1cdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWxlbiAtIHRjcGhvZmYsXG4tXHRcdFx0XHRcdCAgICAgIGlwX2hkcihza2IpLVx1MDAzZXByb3RvY29sLFxuLVx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlY3N1bSkpIHtcbi1cdFx0XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXG4tXHRcdFx0XHRcdFx0IFwiRmFpbGVkIGNoZWNrc3VtIGZvclwiKTtcbi1cdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdH1cbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xuLVx0XHRicmVhaztcbitcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgaXBoLVx1MDAzZWxlbiwgSVBQUk9UT19UQ1AsIGFmKSkge1xuK1x0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCBpcGgtXHUwMDNlb2ZmLFxuK1x0XHRcdFx0IFwiRmFpbGVkIGNoZWNrc3VtIGZvclwiKTtcbitcdFx0cmV0dXJuIDA7XG4gXHR9XG4tXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jXG5pbmRleCA1OGY5ZTI1NTkyN2UyZS4uZjMyNzg1NjgyNDAyZGQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xuQEAgLTI1LDcgKzI1LDcgQEBcbiBcbiBzdGF0aWMgaW50XG4gdWRwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0ICAgICAgIHVuc2lnbmVkIGludCB1ZHBob2ZmKTtcbitcdCAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XG4gXG4gc3RhdGljIGludFxuIHVkcF9jb25uX3NjaGVkdWxlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXG5AQCAtMTU1LDcgKzE1NSw3IEBAIHVkcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIHVkcGhvZmYpKVxuK1x0XHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKlxuQEAgLTE3MCw3ICsxNzAsNyBAQCB1ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHVkcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgdWRwaG9mZjtcbitcdHVkcGggPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhICsgdWRwaG9mZjtcbiBcdHVkcGgtXHUwMDNlc291cmNlID0gY3AtXHUwMDNldnBvcnQ7XG4gXG4gXHQvKlxuQEAgLTIzOCw3ICsyMzgsNyBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdGludCByZXQ7XG4gXG4gXHRcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xuLVx0XHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCB1ZHBob2ZmKSlcbitcdFx0aWYgKCF1ZHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0LypcbkBAIC0yNTQsNyArMjU0LDcgQEAgdWRwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRcdHBheWxvYWRfY3N1bSA9IHRydWU7XG4gXHR9XG4gXG4tXHR1ZHBoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHVkcGhvZmY7XG4rXHR1ZHBoID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YSArIHVkcGhvZmY7XG4gXHR1ZHBoLVx1MDAzZWRlc3QgPSBjcC1cdTAwM2VkcG9ydDtcbiBcbiBcdC8qXG5AQCAtMjk4LDQ4ICsyOTgsMjAgQEAgdWRwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIHN0YXRpYyBpbnRcbiB1ZHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHQgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpXG4rXHQgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXG4ge1xuIFx0c3RydWN0IHVkcGhkciBfdWRwaCwgKnVoO1xuIFxuLVx0dWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCB1ZHBob2ZmLCBzaXplb2YoX3VkcGgpLCBcdTAwMjZfdWRwaCk7XG4rXHR1aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGlwaC1cdTAwM2VsZW4sIHNpemVvZihfdWRwaCksIFx1MDAyNl91ZHBoKTtcbiBcdGlmICh1aCA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmICh1aC1cdTAwM2VjaGVjayAhPSAwKSB7XG4tXHRcdHN3aXRjaCAoc2tiLVx1MDAzZWlwX3N1bW1lZCkge1xuLVx0XHRjYXNlIENIRUNLU1VNX05PTkU6XG4tXHRcdFx0c2tiLVx1MDAzZWNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCB1ZHBob2ZmLFxuLVx0XHRcdFx0XHRcdCBza2ItXHUwMDNlbGVuIC0gdWRwaG9mZiwgMCk7XG4tXHRcdFx0ZmFsbHRocm91Z2g7XG4tXHRcdGNhc2UgQ0hFQ0tTVU1fQ09NUExFVEU6XG4tI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4tXHRcdFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XG4tXHRcdFx0XHRpZiAoY3N1bV9pcHY2X21hZ2ljKFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHRcdFx0ICAgIFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHRcdFx0ICAgIHNrYi1cdTAwM2VsZW4gLSB1ZHBob2ZmLFxuLVx0XHRcdFx0XHRcdCAgICBJUFBST1RPX1VEUCxcbi1cdFx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZWNzdW0pKSB7XG4tXHRcdFx0XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXG4tXHRcdFx0XHRcdFx0XHQgXCJGYWlsZWQgY2hlY2tzdW0gZm9yXCIpO1xuLVx0XHRcdFx0XHRyZXR1cm4gMDtcbi1cdFx0XHRcdH1cbi1cdFx0XHR9IGVsc2Vcbi0jZW5kaWZcbi1cdFx0XHRcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cdTAwM2VzYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgICBpcF9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlbGVuIC0gdWRwaG9mZixcbi1cdFx0XHRcdFx0XHQgICAgICBpcF9oZHIoc2tiKS1cdTAwM2Vwcm90b2NvbCxcbi1cdFx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlY3N1bSkpIHtcbi1cdFx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHRcdCBcIkZhaWxlZCBjaGVja3N1bSBmb3JcIik7XG4tXHRcdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdFx0fVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdC8qIE5vIG5lZWQgdG8gY2hlY2tzdW0uICovXG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbitcdGlmICghdWgtXHUwMDNlY2hlY2spXG4rXHRcdHJldHVybiAxO1xuK1x0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpcGgtXHUwMDNlbGVuLCBJUFBST1RPX1VEUCwgYWYpKSB7XG4rXHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIGlwaC1cdTAwM2VvZmYsXG4rXHRcdFx0XHQgXCJGYWlsZWQgY2hlY2tzdW0gZm9yXCIpO1xuK1x0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdHJldHVybiAxO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xuaW5kZXggOWZlZjQzMzVkYTEzZmQuLjBiMGM1MzA0OTkzYTkxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xuQEAgLTE1MDIsMjAgKzE1MDIsMjIgQEAgaXBfdnNfZHJfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gICovXG4gaW50XG4gaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi1cdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4tXHRcdHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuK1x0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZixcbitcdFx0dW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaClcbiB7XG4gXHRzdHJ1Y3QgcnRhYmxlXHQqcnQ7XHQvKiBSb3V0ZSB0byB0aGUgb3RoZXIgaG9zdCAqL1xuIFx0aW50IHJjO1xuIFx0aW50IGxvY2FsO1xuIFx0aW50IHJ0X21vZGUsIHdhc19pbnB1dDtcbitcdGJvb2wgaGFzX3BvcnRzID0gZmFsc2U7XG4rXHR1bnNpZ25lZCBpbnQgd2xlbjtcbiBcbiBcdC8qIFRoZSBJQ01QIHBhY2tldCBmb3IgVlMvVFVOLCBWUy9EUiBhbmQgTE9DQUxOT0RFIHdpbGwgYmVcbiBcdCAgIGZvcndhcmRlZCBkaXJlY3RseSBoZXJlLCBiZWNhdXNlIHRoZXJlIGlzIG5vIG5lZWQgdG9cbiBcdCAgIHRyYW5zbGF0ZSBhZGRyZXNzL3BvcnQgYmFjayAqL1xuIFx0aWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKSB7XG4gXHRcdGlmIChjcC1cdTAwM2VwYWNrZXRfeG1pdClcbi1cdFx0XHRyYyA9IGNwLVx1MDAzZXBhY2tldF94bWl0KHNrYiwgY3AsIHBwLCBpcGgpO1xuK1x0XHRcdHJjID0gY3AtXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGNpcGgpO1xuIFx0XHRlbHNlXG4gXHRcdFx0cmMgPSBORl9BQ0NFUFQ7XG4gXHRcdC8qIGRvIG5vdCB0b3VjaCBza2IgYW55bW9yZSAqL1xuQEAgLTE1MzMsNyArMTUzNSw3IEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdCAgSVBfVlNfUlRfTU9ERV9MT0NBTCB8IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMIHxcbiBcdFx0ICBJUF9WU19SVF9NT0RFX1JEUiA6IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMO1xuIFx0bG9jYWwgPSBfX2lwX3ZzX2dldF9vdXRfcnQoY3AtXHUwMDNlaXB2cywgY3AtXHUwMDNlYWYsIHNrYiwgY3AtXHUwMDNlZGVzdCwgY3AtXHUwMDNlZGFkZHIuaXAsIHJ0X21vZGUsXG4tXHRcdFx0XHQgICBOVUxMLCBpcGgpO1xuK1x0XHRcdFx0ICAgTlVMTCwgY2lwaCk7XG4gXHRpZiAobG9jYWwgXHUwMDNjIDApXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXHRydCA9IHNrYl9ydGFibGUoc2tiKTtcbkBAIC0xNTY0LDE0ICsxNTY2LDIxIEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXHR9XG4gXG4rXHR3bGVuID0gY2lwaC1cdTAwM2VsZW47XG4rXHRpZiAoY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fCBjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XG4rXHQgICAgY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1NDVFApIHtcbitcdFx0d2xlbiArPSAyICogc2l6ZW9mKF9fdTE2KTsgLyogQWxzbyBtYW5nbGUgcG9ydHMgKi9cbitcdFx0aGFzX3BvcnRzID0gdHJ1ZTtcbitcdH1cbitcbiBcdC8qIGNvcHktb24td3JpdGUgdGhlIHBhY2tldCBiZWZvcmUgbWFuZ2xpbmcgaXQgKi9cbi1cdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcbitcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgd2xlbikpXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXG4gXHRpZiAoc2tiX2Nvdyhza2IsIHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSlcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcbi1cdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwKTtcbitcdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMpO1xuIFxuIFx0LyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi9cbiBcdHNrYi1cdTAwM2VpZ25vcmVfZGYgPSAxO1xuQEAgLTE1ODcsMTAgKzE1OTYsMTIgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbiBpbnRcbiBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuLVx0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaG9va251bSxcbi1cdFx0c3RydWN0IGlwX3ZzX2lwaGRyICppcHZzaClcbitcdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXG4rXHRcdHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXG4ge1xuK1x0Ym9vbCBoYXNfcG9ydHMgPSBmYWxzZTtcbiBcdHN0cnVjdCBydDZfaW5mb1x0KnJ0O1x0LyogUm91dGUgdG8gdGhlIG90aGVyIGhvc3QgKi9cbitcdHVuc2lnbmVkIGludCB3bGVuO1xuIFx0aW50IHJjO1xuIFx0aW50IGxvY2FsO1xuIFx0aW50IHJ0X21vZGU7XG5AQCAtMTYwMCw3ICsxNjExLDcgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdCAgIHRyYW5zbGF0ZSBhZGRyZXNzL3BvcnQgYmFjayAqL1xuIFx0aWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKSB7XG4gXHRcdGlmIChjcC1cdTAwM2VwYWNrZXRfeG1pdClcbi1cdFx0XHRyYyA9IGNwLVx1MDAzZXBhY2tldF94bWl0KHNrYiwgY3AsIHBwLCBpcHZzaCk7XG4rXHRcdFx0cmMgPSBjcC1cdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgY2lwaCk7XG4gXHRcdGVsc2VcbiBcdFx0XHRyYyA9IE5GX0FDQ0VQVDtcbiBcdFx0LyogZG8gbm90IHRvdWNoIHNrYiBhbnltb3JlICovXG5AQCAtMTYxNyw3ICsxNjI4LDcgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdFx0ICBJUF9WU19SVF9NT0RFX0xPQ0FMIHwgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwgfFxuIFx0XHQgIElQX1ZTX1JUX01PREVfUkRSIDogSVBfVlNfUlRfTU9ERV9OT05fTE9DQUw7XG4gXHRsb2NhbCA9IF9faXBfdnNfZ2V0X291dF9ydF92NihjcC1cdTAwM2VpcHZzLCBjcC1cdTAwM2VhZiwgc2tiLCBjcC1cdTAwM2VkZXN0LFxuLVx0XHRcdFx0ICAgICAgXHUwMDI2Y3AtXHUwMDNlZGFkZHIuaW42LCBOVUxMLCBpcHZzaCwgMCwgcnRfbW9kZSk7XG4rXHRcdFx0XHQgICAgICBcdTAwMjZjcC1cdTAwM2VkYWRkci5pbjYsIE5VTEwsIGNpcGgsIDAsIHJ0X21vZGUpO1xuIFx0aWYgKGxvY2FsIFx1MDAzYyAwKVxuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFx0cnQgPSBkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKTtcbkBAIC0xNjQ4LDE0ICsxNjU5LDIxIEBAIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXHR9XG4gXG4rXHR3bGVuID0gY2lwaC1cdTAwM2VsZW47XG4rXHRpZiAoY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fCBjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XG4rXHQgICAgY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1NDVFApIHtcbitcdFx0d2xlbiArPSAyICogc2l6ZW9mKF9fdTE2KTsgLyogQWxzbyBtYW5nbGUgcG9ydHMgKi9cbitcdFx0aGFzX3BvcnRzID0gdHJ1ZTtcbitcdH1cbitcbiBcdC8qIGNvcHktb24td3JpdGUgdGhlIHBhY2tldCBiZWZvcmUgbWFuZ2xpbmcgaXQgKi9cbi1cdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcbitcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgd2xlbikpXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXG4gXHRpZiAoc2tiX2Nvdyhza2IsIHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSlcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcbi1cdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAwKTtcbitcdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMsIGNpcGgpO1xuIFxuIFx0LyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi9cbiBcdHNrYi1cdTAwM2VpZ25vcmVfZGYgPSAxO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDc6NTU6MTguNDYwNDM0MTQ0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzkxODMwODEwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQVlMgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMgYWltZWQgYXQgbW9kaWZ5aW5nIHRoZSBJUFZTIGNvZGUgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL2lwdnMvYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gSUNNUCBOQVQgaGFuZGxpbmcgYW5kIGNoZWNrc3VtIHZhbGlkYXRpb24uIEl0IGxvb2tzIGxpa2UgdGhleSd2ZSB0b3VjaGVkIHF1aXRlIGEgZmV3IGZ1bmN0aW9ucywgaW5jbHVkaW5nIGBpcF92c19uYXRfaWNtcGAsIGBpcF92c19uYXRfaWNtcF92NmAsIGBpcF92c19pbl9pY21wYCwgYGlwX3ZzX291dF9pY21wYCwgYGlwX3ZzX2ljbXBfeG1pdGAsIGFuZCB0aGVpciBJUHY2IGNvdW50ZXJwYXJ0cy4gVGhleSd2ZSBhbHNvIHJlZmFjdG9yZWQgY2hlY2tzdW0gY2hlY2tpbmcgd2l0aGluIHRoZSBwcm90b2NvbCBoYW5kbGVycyAoYGlwX3ZzX3Byb3RvX3RjcC5jYCwgYGlwX3ZzX3Byb3RvX3VkcC5jYCwgYGlwX3ZzX3Byb3RvX3NjdHAuY2ApIHVzaW5nIHRoaXMgbmV3IGhlbHBlciwgYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AsIHdoaWNoIGlzIGludGVyZXN0aW5nLlxuXG5CZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgSVBWUyBpcyBldmVuIGVuYWJsZWQgYW5kIGFjY2Vzc2libGUsIHdoaWNoIEkgY2FuIGNvbmZpcm0gaXMgdGhlIGNhc2UsIHNvIGdvb2QsIGdvb2QuIE5vdywgbGV0J3MgbmFpbCBkb3duIHByZWNpc2VseSB3aGljaCBmdW5jdGlvbnMgYXJlIGJlaW5nIG1vZGlmaWVkLCBiZWNhdXNlIHRob3NlIGFyZSB0aGUgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZyBhbmQgdGFyZ2V0ZWQgYW5hbHlzaXMuIEkgd2FudCB0byBoaWdobGlnaHQgdGhlIGFyZWFzIHRoYXQgYXJlIGxpa2VseSB0byBiZSB0aGUgbW9zdCBpbXBhY3RlZC4gSSd2ZSBnb3QgYSBsaXN0IG9mIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGBpcF92c19uYXRfaWNtcGAsIGBpcF92c19uYXRfaWNtcF92NmAsIGBoYW5kbGVfcmVzcG9uc2VfaWNtcGAsIGBpcF92c19vdXRfaWNtcGAsIGBpcF92c19vdXRfaWNtcF92NmAsIGBpcF92c19pbl9pY21wYCwgYGlwX3ZzX2luX2ljbXBfdjZgLCBgaXBfdnNfZm9yd2FyZF9pY21wYCwgYHNjdHBfY3N1bV9jaGVja2AsIGB0Y3BfY3N1bV9jaGVja2AsIGB1ZHBfY3N1bV9jaGVja2AsIGBpcF92c19pY21wX3htaXRgLCBhbmQgYGlwX3ZzX2ljbXBfeG1pdF92NmAuIFRoaXMgZ2l2ZXMgbWUgYSBtdWNoIG1vcmUgZm9jdXNlZCB2aWV3IG9mIHdoZXJlIHRvIGFwcGx5IG15IHRlc3RpbmcuXG5cbk5leHQgc3RlcDogZG91YmxlLWNoZWNraW5nIHRoZSBLY29uZmlnIG9wdGlvbnMuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgbGlrZSBgQ09ORklHX0lQX1ZTYCwgYENPTkZJR19JUF9WU19JUFY2YCwgYENPTkZJR19JUF9WU19QUk9UT19UQ1BgLCBgQ09ORklHX0lQX1ZTX1BST1RPX1VEUGAsIGFuZCBgQ09ORklHX0lQX1ZTX1BST1RPX1NDVFBgIGFyZSBhbGwgc2V0IGNvcnJlY3RseSBhbmQgaGF2ZW4ndCBpbnRyb2R1Y2VkIGFueSB1bmV4cGVjdGVkIGRlcGVuZGVuY2llcyBvciBjb25mbGljdHMuIFRoZW4gaXQncyB0aW1lIHRvIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBhbmQgcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzMDYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNzo1NToyNi4zNzg3NDU5NDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE0Mzc5MDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJ0lQVlMgU0ggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVxcdGludCBcXFwiSVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJ0lQVlMgTUggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cXHRpbnQgXFxcIklQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNzo1NToyNi45OTMxMzA4NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDQ4OTU5NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipFeGFtaW5pbmcgSVBWUyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdmVyaWZ5IGEgY291cGxlIG9mIElQVlMgKElQIFZpcnR1YWwgU2VydmVyKSBjb25maWd1cmF0aW9ucyBoZXJlLiBMZXQncyBzZWUuLi4gRmlyc3QsIEkgd2FudCB0byBjb25maXJtIHRoZSBzdGF0dXMgb2YgYENPTkZJR19JUF9WU19JUFY2YC4gTWFrZXMgc2Vuc2Ug4oCTIHdlIG5lZWQgdG8gZW5zdXJlIElQdjYgc3VwcG9ydCBpcyBlbmFibGVkLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBkaXJlY3Rpb24gb2YgbmV0d29yayBpbmZyYXN0cnVjdHVyZS4gSVB2NiBpcyBpbmNyZWFzaW5nbHkgaW1wb3J0YW50LCBhbmQgd2l0aG91dCB0aGlzLCB0aGUgSVBWUyBzZXR1cCB3aWxsIGJlIHNldmVyZWx5IGxpbWl0ZWQuIEknbSB0aGlua2luZywgdGhpcyBpcyBwcm9iYWJseSBjcml0aWNhbCBmb3IgbW9kZXJuIGRlcGxveW1lbnRzLiBUaGVuLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiBgQ09ORklHX0lQX1ZTX1BST1RPX1NDVFBgLiBTQ1RQIGlzIGEgYml0IGxlc3MgY29tbW9uIHRoYW4gVENQIGFuZCBVRFAsIGJ1dCBpdOKAmXMgc3RpbGwgaW1wb3J0YW50IGZvciBjZXJ0YWluIGFwcGxpY2F0aW9ucy4gV2Ugc2hvdWxkIHZlcmlmeSB0aGF0IFNDVFAgc3VwcG9ydCBpcyBwcm9wZXJseSBpbnRlZ3JhdGVkIGFuZCBlbmFibGVkIGlmIHRoZSBzcGVjaWZpYyB1c2UgY2FzZSBkZW1hbmRzIGl0LiBCYXNpY2FsbHksIHRoZXNlIGNvbmZpZyBvcHRpb25zIGRldGVybWluZSB0aGUgZnVuZGFtZW50YWwgY2FwYWJpbGl0aWVzIG9mIElQVlMsIHNvIHRoZXkgYXJlIHRoZSBzdGFydGluZyBwb2ludCBmb3IgZXZlcnl0aGluZy4gTmVlZCB0byBtYWtlIHN1cmUgYm90aCBvZiB0aGVzZSBhcmUgc2V0IGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1ODAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNzo1NTozMC45MzgwMzA4MDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc3MTM5OTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU19JUFY2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNzo1NTozMS4wMzU3NTQ2NTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDc3Njk2OTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipJbnZlc3RpZ2F0aW5nIGEgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9uKipcblxuSG1tLCBJIHN1c3BlY3QgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciB0aGlzIG1pZ2h0IGJlIGBDT05GSUdfSVBfVlNfSVBWNmAuIEknbSBwcmV0dHkgc3VyZSBJIHNhdyBpdCBpbiBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIGJlZm9yZSwgYnV0IGl0J3MgYWx3YXlzIHdvcnRoIGRvdWJsZS1jaGVja2luZy4gVGltZSB0byB0YWtlIGEgbG9vayBhdCBlaXRoZXIgdGhhdCBmaWxlIG9yIG1heWJlIHRoZSBnZW5lcmFsIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUsIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGVuc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIHNvbWV0aGluZy4gR290dGEgdHJhY2sgZG93biBleGFjdGx5IHdoZXJlIHRoYXQgdGhpbmcgaXMgZGVmaW5lZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg3OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA3OjU1OjM2LjExMzQ1NTQzNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc1NTI0MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQtI1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXFx0dHJpc3RhdGUgXFxcIklQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAnSVBWUyBTSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXFx0aW50IFxcXCJJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAnSVBWUyBNSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVxcdGludCBcXFwiSVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA3OjU1OjM2LjI1MTAxMTM5NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTM0OTMzNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIElQdjYgYW5kIElQVlMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcuLi4gZ290dGEgZ2V0IGEgaGFuZGxlIG9uIHRoZSBJUHY2IGltcGxlbWVudGF0aW9uIHdpdGggSVBWUywgcmlnaHQ/IExldCdzIHN0YXJ0IHdpdGggYSBzb2xpZCBgZ3JlcGAgdG8gcXVpY2tseSBpZGVudGlmeSByZWxldmFudCBjb2RlIHNlY3Rpb25zLiBUaGF0IGBJUF9WU19JUFY2YCBzeW1ib2wgZmVlbHMgbGlrZSB0aGUgYmVzdCBzdGFydGluZyBwb2ludC4gSXTigJlzIHRoZSB1c3VhbCBnby10byBpZGVudGlmaWVyIGZvciBhbnkgSVB2NiBzcGVjaWZpYyBlbGVtZW50cyBpbiB0aGUga2VybmVsIG1vZHVsZSwgYW5kIHdpbGwgaGVscCBtZSBwaW5wb2ludCB0aGUgcGFydHMgb2YgdGhlIGNvZGUgYmFzZS4gR3JhYmJpbmcgYWxsIHRoZSBpbnN0YW5jZXMgb2YgYElQX1ZTX0lQVjZgIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBsYXkgb2YgdGhlIGxhbmQsIGVzcGVjaWFsbHkgaWYgSSBoYXZlIHRvIGRlYnVnIHNvbWUgY29ubmVjdGl2aXR5IGlzc3Vlcy4gVGhhdCBzaG91bGQgY292ZXIgdGhlIGJhc2ljcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzNzAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNzo1NTo0MC4wNDQ1MTE0NjJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwOTgxMTg2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJUF9WU19JUFY2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI3PWlmIElQX1ZTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjgtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjk6Y29uZmlnXFx0SVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwLVxcdGJvb2wgXFxcIklQdjYgc3VwcG9ydCBmb3IgSVBWU1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDc6NTU6NDAuNDU0MzI4MzIyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2NDM4NzMzNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCdzIGEgZGlyZWN0IHJlcHJlc2VudGF0aW9uIG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipTQ1RQIENvbnNpZGVyYXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBuZXR3b3JrIHByb3RvY29sIGNvbnNpZGVyYXRpb25zLiBXZSd2ZSBnb3QgdGhlIHVzdWFsIHN1c3BlY3RzIHRvIHRoaW5rIGFib3V0LCBidXQgd2FpdCBhIHNlY29uZC4uLiB3aGF0IGFib3V0IGBJUF9WU19QUk9UT19TQ1RQYD8gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiSGF2ZSB3ZSBmdWxseSBjb25zaWRlcmVkIHRoZSBpbXBsaWNhdGlvbnMgb2YgU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sIChTQ1RQKSB3aXRoaW4gdGhpcyBjb250ZXh0P1wiIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCBhbnkgc3BlY2lmaWMgb3B0aW1pemF0aW9ucyBvciBxdWlya3MgcmVsYXRlZCB0byB1c2luZyBTQ1RQLiBTcGVjaWZpY2FsbHksIGhvdyB3aWxsIHRoaXMgcHJvdG9jb2wgYWZmZWN0IHRoZSBWaXJ0dWFsIFNlcnZlciAoVlMpIGltcGxlbWVudGF0aW9uPyBEb2VzIFNDVFAgaW50cm9kdWNlIHVuaXF1ZSBjaGFsbGVuZ2VzIG9yIG9wcG9ydHVuaXRpZXMgd2UgbmVlZCB0byBhY2NvdW50IGZvciBpbiB0aGUgc2V0dXA/IEFyZSB0aGVyZSBudWFuY2VzIHRvIHRoZSBTQ1RQIHRoYXQgd2UgbXVzdCBiZSBhd2FyZSBvZiBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZT8gV2UgbWlnaHQgbmVlZCB0byByZWZyZXNoIHRoZSBkb2N1bWVudGF0aW9uIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIGZ1bGx5IGFjY291bnRlZCBmb3IgaXRzIHVzZS4gSSBzaG91bGQgbWFrZSBhIG5vdGUgdG8gY2lyY2xlIGJhY2sgYW5kIGZ1bGx5IHRoaW5rIHRocm91Z2ggaXRzIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NzAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNzo1NTo1MC4wOTgyMTMyMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzNTMzODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQX1ZTX1BST1RPX1NDVFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MTAwPWNvbmZpZ1xcdElQX1ZTX1BST1RPX0FIXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMDUtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTA2OmNvbmZpZyAgSVBfVlNfUFJPVE9fU0NUUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEwNy1cXHRib29sIFxcXCJTQ1RQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA3OjU1OjUwLjI1MTc1NDAzOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODg4ODA1NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSwgYW4gZXhwZXJ0LCBhbSBwcm9jZXNzaW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBUQ1AgUHJvdG9jb2wgSW50ZXJhY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gd2hhdCBhYm91dCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gSVAgYW5kIFRDUCwgc3BlY2lmaWNhbGx5IHRoYXQgYElQX1ZTX1BST1RPX1RDUGAgdGhpbmc/IFRoYXQncyBhIGtleSBlbGVtZW50LCBpc24ndCBpdD8gSSBuZWVkIHRvIHRoaW5rIGNhcmVmdWxseSBhYm91dCBob3cgdGhhdCBhZmZlY3RzIHRyYWZmaWMgbWFuYWdlbWVudCwgZXNwZWNpYWxseSBpbiB2aXJ0dWFsIHNlcnZlciBzZXR1cHMuIEl0J3Mgbm90IGp1c3QgYSBzdGFuZGFsb25lIHByb3RvY29sOyBpdCdzIHRoZSBpbnRlcnBsYXksIHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSBsYXllcnMgdGhhdCByZWFsbHkgbWF0dGVycyBmb3IgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5LiBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIGhvdyB0aGlzIHNwZWNpZmljIHByb3RvY29sIGludGVyYWN0aW9uIGluZmx1ZW5jZXMgbG9hZCBiYWxhbmNpbmcgdGVjaG5pcXVlcy4gVGhpbmtpbmcgYWJvdXQgaXQgbm93IEkgY2FuIHNlZSB0aGF0IHRoaXMgaXMgYSBxdWVzdGlvbiB0aGF0IHJlcXVpcmVzIGEgZGVlcGVyIGRpdmUgYW5kIEkgc2hvdWxkIGRvIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDMyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDc6NTU6NTQuMTQwNTYyMjY3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgxMDcxNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBfVlNfUFJPVE9fVENQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTc3PWNvbW1lbnQgXFxcIklQVlMgdHJhbnNwb3J0IHByb3RvY29sIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNzgtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Nzk6Y29uZmlnXFx0SVBfVlNfUFJPVE9fVENQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctODAtXFx0Ym9vbCBcXFwiVENQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMjE9Y29uZmlnXFx0SVBfVlNfRlRQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzIyLVxcdHRyaXN0YXRlIFxcXCJGVFAgcHJvdG9jb2wgaGVscGVyXFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMyMzpcXHRkZXBlbmRzIG9uIElQX1ZTX1BST1RPX1RDUCBcXHUwMDI2XFx1MDAyNiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkZfTkFUIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjQtXFx0XFx0TkZfQ09OTlRSQUNLX0ZUUFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNzo1NTo1NC4yNDg2NzM4M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDY4NjM2ODUxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipVRFAgQ29uc2lkZXJhdGlvbnMgaW4gSVBWUyoqXG5cblJpZ2h0LCBsZXQncyBzZWUuLi4gd2UncmUgdGFsa2luZyBhYm91dCBJUCBWaXJ0dWFsIFNlcnZlciAoSVBWUykgYW5kIGl0cyBwcm90b2NvbCBoYW5kbGluZy4gSSdtIGRlZXAgaW4gdGhlIHdlZWRzIGhlcmUsIGNvbnNpZGVyaW5nIHRoZSBudWFuY2VzLiBPa2F5LCBzbyB3ZSdyZSBzZXR0aW5nIHVwIGEgbG9hZCBiYWxhbmNpbmcgc3lzdGVtIHVzaW5nIElQVlMuIFRoYXQncyBhIHNvbGlkIGNob2ljZSwgY29uc2lkZXJpbmcgaXRzIHBlcmZvcm1hbmNlIGFkdmFudGFnZXMsIGVzcGVjaWFsbHkgd2l0aCBVRFAuIEFuZCBJIGtub3cgaXQncyBjYXBhYmxlIG9mIGhhbmRsaW5nIHZhcmlvdXMgdHlwZXMgb2YgcHJvdG9jb2xzLCB3aGljaCBnZXRzIG1lIHRoaW5raW5nLi4uIHdoYXQgYWJvdXQgdGhlIHNwZWNpZmljcyBvZiBoYW5kbGluZyBVRFAgd2l0aCBJUFZTLCBzaW5jZSB0aGVyZSBhcmUgc29tZSBkaWZmZXJlbmNlcy4gVGhlIHF1ZXN0aW9uIG9uIG15IG1pbmQgaXM6IFdoYXQgYWJvdXQgdGhlIGBJUF9WU19QUk9UT19VRFBgIG9wdGlvbiBpbiBwYXJ0aWN1bGFyPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGNvbnNpZGVyYXRpb25zIHRoYXQgSSBzaG91bGQgYmUgbWFraW5nIGZvciBVRFAgY29ubmVjdGlvbnMgdXNpbmcgdGhpcyBJUFZTIHByb3RvY29sIG9wdGlvbiwgc28gdGhhdCBJIGRvbid0IG92ZXJsb29rIGEgY3JpdGljYWwgZGV0YWlsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQ0OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA3OjU2OjA0LjkzNTA0NTI5MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg2NDMzMjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQX1ZTX1BST1RPX1VEUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz03OT1jb25maWdcXHRJUF9WU19QUk9UT19UQ1BcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTg0LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjg1OmNvbmZpZ1xcdElQX1ZTX1BST1RPX1VEUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTg2LVxcdGJvb2wgXFxcIlVEUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzQ1PWNvbmZpZ1xcdElQX1ZTX1BFX1NJUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM0Ni1cXHR0cmlzdGF0ZSBcXFwiU0lQIHBlcnNpc3RlbmNlIGVuZ2luZVxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozNDc6XFx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19VRFBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDgtXFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tfU0lQXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA3OjU2OjA1LjQyMTQ4Mzc5OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQwNzE0NDQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBcdTAwMjYgRnVuY3Rpb24gQW5hbHlzaXMgZm9yIElQVlMgSUNNUCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGVuYWJsaW5nIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gSVAgVmlydHVhbCBTZXJ2ZXIgKElQVlMpIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZvbGxvd2luZyBhcmUgZW5hYmxlZCBpbiB0aGUga2VybmVsOiBgSVBfVlNgLCBgSVBfVlNfSVBWNmAsIGBJUF9WU19QUk9UT19UQ1BgLCBgSVBfVlNfUFJPVE9fVURQYCwgYW5kIGBJUF9WU19QUk9UT19TQ1RQYC4gVGhlc2UgYXJlIHRoZSBiYXNpY3MgZm9yIHRoZSBkaWZmZXJlbnQgcHJvdG9jb2wgc3VwcG9ydC5cblxuTm93LCBJJ20gZm9jdXNpbmcgb24gc29tZSBrZXkgc3ltYm9scywgcHJpbWFyaWx5IHJlbGF0ZWQgdG8gSUNNUCBhbmQgY2hlY2tzdW0gaGFuZGxpbmcgd2l0aGluIElQVlMuIEknbSB0aGlua2luZyBhYm91dDpcblxuKiAgIElDTVAgTkFUIGZ1bmN0aW9uczogYGlwX3ZzX25hdF9pY21wYCwgYGlwX3ZzX25hdF9pY21wX3Y2YFxuKiAgIElDTVAgcmVzcG9uc2UgaGFuZGxpbmc6IGBoYW5kbGVfcmVzcG9uc2VfaWNtcGBcbiogICBJQ01QIHRyYW5zbWlzc2lvbiBhbmQgcmVjZXB0aW9uOiBgaXBfdnNfb3V0X2ljbXBgLCBgaXBfdnNfb3V0X2ljbXBfdjZgLCBgaXBfdnNfaW5faWNtcGAsIGBpcF92c19pbl9pY21wX3Y2YCwgYGlwX3ZzX2ZvcndhcmRfaWNtcGBcbiogICBDaGVja3N1bSBjaGVja3M6IGBzY3RwX2NzdW1fY2hlY2tgLCBgdGNwX2NzdW1fY2hlY2tgLCBgdWRwX2NzdW1fY2hlY2tgXG4qICAgSUNNUCB0cmFuc21pdCBmdW5jdGlvbnM6IGBpcF92c19pY21wX3htaXRgLCBgaXBfdnNfaWNtcF94bWl0X3Y2YFxuXG5JIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRob3NlIGNoZWNrc3VtIGNoZWNrIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCBhbmQgd2hlcmUgdGhlIG90aGVycyBhcmUgZGVmaW5lZC4gU28gSSd2ZSBjaGVja2VkLi4uIGBzY3RwX2NzdW1fY2hlY2tgLCBgdGNwX2NzdW1fY2hlY2tgLCBhbmQgYHVkcF9jc3VtX2NoZWNrYCBhcmUgc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlaXIgcmVzcGVjdGl2ZSBwcm90b2NvbCBmaWxlczogYGlwX3ZzX3Byb3RvX3NjdHAuY2AsIGBpcF92c19wcm90b190Y3AuY2AsIGFuZCBgaXBfdnNfcHJvdG9fdWRwLmNgLiBHb29kLCB0aGF0J3MgZXhwZWN0ZWQuXG5cbkkgZm91bmQgdGhhdCBgaXBfdnNfbmF0X2ljbXBgLCBgaGFuZGxlX3Jlc3BvbnNlX2ljbXBgLCBgaXBfdnNfb3V0X2ljbXBgLCBgaXBfdnNfaW5faWNtcGAsIGBpcF92c19mb3J3YXJkX2ljbXBgIGFsbCByZXNpZGUgYW5kIGFyZSBzdGF0aWMgd2l0aGluIGBpcF92c19jb3JlLmNgLiBBbmQgZmluYWxseSwgYGlwX3ZzX2ljbXBfeG1pdGAgaXMgZm91bmQgd2l0aGluIGBpcF92c194bWl0LmNgLlxuXG5Pa2F5LCBJIHRoaW5rIEkgaGF2ZSB3aGF0IEkgbmVlZCwgbm93LiBMZXQncyB1c2UgYHNldC1yZXN1bHRzYCB0byBnZXQgdGhpcyBpbmZvcm1hdGlvbiBpbiBhIHVzYWJsZSBmb3JtYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODk3LCJPdXRwdXRUb2tlbnMiOjI4MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNzo1NjoxNS44Mjg2MzIyMjVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzk3MTU2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCIsXG4gICAgXCJJUF9WU19JUFY2XCIsXG4gICAgXCJJUF9WU19QUk9UT19UQ1BcIixcbiAgICBcIklQX1ZTX1BST1RPX1VEUFwiLFxuICAgIFwiSVBfVlNfUFJPVE9fU0NUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX25hdF9pY21wXCIsXG4gICAgXCJpcF92c19uYXRfaWNtcF92NlwiLFxuICAgIFwiaGFuZGxlX3Jlc3BvbnNlX2ljbXBcIixcbiAgICBcImlwX3ZzX291dF9pY21wXCIsXG4gICAgXCJpcF92c19vdXRfaWNtcF92NlwiLFxuICAgIFwiaXBfdnNfaW5faWNtcFwiLFxuICAgIFwiaXBfdnNfaW5faWNtcF92NlwiLFxuICAgIFwiaXBfdnNfZm9yd2FyZF9pY21wXCIsXG4gICAgXCJzY3RwX2NzdW1fY2hlY2tcIixcbiAgICBcInRjcF9jc3VtX2NoZWNrXCIsXG4gICAgXCJ1ZHBfY3N1bV9jaGVja1wiLFxuICAgIFwiaXBfdnNfaWNtcF94bWl0XCIsXG4gICAgXCJpcF92c19pY21wX3htaXRfdjZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBJQ01QIE5BVCBoYW5kbGluZyBhbmQgY2hlY2tzdW0gdmFsaWRhdGlvbiBsb2dpYyBpbiBJUFZTLiBJdCBjaGFuZ2VzIGhvdyBJQ01QIHBhY2tldHMgYXJlIHByb2Nlc3NlZCwgTkFUZWQsIGFuZCB0cmFuc21pdHRlZCwgYW5kIHVwZGF0ZXMgY2hlY2tzdW0gdmFsaWRhdGlvbiBmb3IgVENQLCBVRFAsIGFuZCBTQ1RQIHByb3RvY29scyB3aXRoaW4gSVBWUy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgbW9kaWZpZWQgSUNNUCBoYW5kbGluZyBhbmQgY2hlY2tzdW0gdmFsaWRhdGlvbiBmdW5jdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIklQX1ZTX0lQVjZcIixcbiAgICBcIklQX1ZTX1BST1RPX1RDUFwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVURQXCIsXG4gICAgXCJJUF9WU19QUk9UT19TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfbmF0X2ljbXBcIixcbiAgICBcImlwX3ZzX25hdF9pY21wX3Y2XCIsXG4gICAgXCJoYW5kbGVfcmVzcG9uc2VfaWNtcFwiLFxuICAgIFwiaXBfdnNfb3V0X2ljbXBcIixcbiAgICBcImlwX3ZzX291dF9pY21wX3Y2XCIsXG4gICAgXCJpcF92c19pbl9pY21wXCIsXG4gICAgXCJpcF92c19pbl9pY21wX3Y2XCIsXG4gICAgXCJpcF92c19mb3J3YXJkX2ljbXBcIixcbiAgICBcInNjdHBfY3N1bV9jaGVja1wiLFxuICAgIFwidGNwX2NzdW1fY2hlY2tcIixcbiAgICBcInVkcF9jc3VtX2NoZWNrXCIsXG4gICAgXCJpcF92c19pY21wX3htaXRcIixcbiAgICBcImlwX3ZzX2ljbXBfeG1pdF92NlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIElDTVAgTkFUIGhhbmRsaW5nIGFuZCBjaGVja3N1bSB2YWxpZGF0aW9uIGxvZ2ljIGluIElQVlMuIEl0IGNoYW5nZXMgaG93IElDTVAgcGFja2V0cyBhcmUgcHJvY2Vzc2VkLCBOQVRlZCwgYW5kIHRyYW5zbWl0dGVkLCBhbmQgdXBkYXRlcyBjaGVja3N1bSB2YWxpZGF0aW9uIGZvciBUQ1AsIFVEUCwgYW5kIFNDVFAgcHJvdG9jb2xzIHdpdGhpbiBJUFZTLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBtb2RpZmllZCBJQ01QIGhhbmRsaW5nIGFuZCBjaGVja3N1bSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow2fbsc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-23 07:28:33 +0000 UTC FinishedAt: 2026-07-23 07:56:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "56d96fededd61192cd7cc8d2b0f36adfd59036c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "IP_VS_IPV6", "IP_VS_PROTO_TCP", "IP_VS_PROTO_UDP", "IP_VS_PROTO_SCTP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "56d96fededd61192cd7cc8d2b0f36adfd59036c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS", "IP_VS_IPV6", "IP_VS_PROTO_TCP", "IP_VS_PROTO_UDP", "IP_VS_PROTO_SCTP" ], "series_id": "50bb7c56-be69-4816-a006-ecbf0b0488a1" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_nat_icmp", "ip_vs_nat_icmp_v6", "handle_response_icmp", "ip_vs_out_icmp", "ip_vs_out_icmp_v6", "ip_vs_in_icmp", "ip_vs_in_icmp_v6", "ip_vs_forward_icmp", "sctp_csum_check", "tcp_csum_check", "udp_csum_check", "ip_vs_icmp_xmit", "ip_vs_icmp_xmit_v6" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIzIDA3OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O0lQX1ZTX0lQVjYmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVENQJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1VEUCYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19TQ1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfbmF0X2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfbmF0X2ljbXBfdjYmIzM0OywKICAgICYjMzQ7aGFuZGxlX3Jlc3BvbnNlX2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfb3V0X2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfb3V0X2ljbXBfdjYmIzM0OywKICAgICYjMzQ7aXBfdnNfaW5faWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19pbl9pY21wX3Y2JiMzNDssCiAgICAmIzM0O2lwX3ZzX2ZvcndhcmRfaWNtcCYjMzQ7LAogICAgJiMzNDtzY3RwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7dGNwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7dWRwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7aXBfdnNfaWNtcF94bWl0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2ljbXBfeG1pdF92NiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBJQ01QIE5BVCBoYW5kbGluZyBhbmQgY2hlY2tzdW0gdmFsaWRhdGlvbiBsb2dpYyBpbiBJUFZTLiBJdCBjaGFuZ2VzIGhvdyBJQ01QIHBhY2tldHMgYXJlIHByb2Nlc3NlZCwgTkFUZWQsIGFuZCB0cmFuc21pdHRlZCwgYW5kIHVwZGF0ZXMgY2hlY2tzdW0gdmFsaWRhdGlvbiBmb3IgVENQLCBVRFAsIGFuZCBTQ1RQIHByb3RvY29scyB3aXRoaW4gSVBWUy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgbW9kaWZpZWQgSUNNUCBoYW5kbGluZyBhbmQgY2hlY2tzdW0gdmFsaWRhdGlvbiBmdW5jdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDc6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwZjMxYTU4NjZiMWM4MDAzYWU4NTJkODdlZmNhOGU4ODVkM2ZmZTU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMjMgMDc6NTU6MTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdnMuaCBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcbmluZGV4IDQxN2ZmNTFmNjJmYzhlLi45YWU5YWFkNjU1NDFkMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwX3ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmhcbkBAIC0yNSw3ICYjNDM7MjUsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXHUwMDNlXHRcdC8qIGZvciB1bmlvbiBuZl9pbmV0X2FkZHIgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXHRcdFx0LyogZm9yIHN0cnVjdCBpcHY2aGRyICovXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9yb3V0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X2ZpYi5oXHUwMDNlXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSylcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oXHUwMDNlXG4gI2VuZGlmXG5AQCAtMTk3Miw4ICYjNDM7MTk3NCw4IEBAIGludCBpcF92c190dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gaW50IGlwX3ZzX2RyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0XHQgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbiBpbnQgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi1cdFx0ICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsXG4tXHRcdCAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuJiM0MztcdFx0ICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHVuc2lnbmVkIGludCB0b2ZmLFxuJiM0MztcdFx0ICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpO1xuIHZvaWQgaXBfdnNfZGVzdF9kc3RfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKTtcbiBcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbkBAIC0xOTg2LDggJiM0MzsxOTg4LDggQEAgaW50IGlwX3ZzX3R1bm5lbF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBpbnQgaXBfdnNfZHJfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdCAgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuIGludCBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuLVx0XHQgICAgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCxcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XG4mIzQzO1x0XHQgICAgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXG4mIzQzO1x0XHQgICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCk7XG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19TWVNDVExcbkBAIC0yMDU5LDE1ICYjNDM7MjA2MSwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91c2VfaGFzaDIoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuIH1cbiBcbiB2b2lkIGlwX3ZzX25hdF9pY21wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHRcdCAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIpO1xuJiM0MztcdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpciwgdW5zaWduZWQgaW50IHRvZmYsXG4mIzQzO1x0XHQgICAgYm9vbCBoYXNfcG9ydHMpO1xuIFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdFx0ICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpcik7XG4mIzQzO1x0XHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyLCB1bnNpZ25lZCBpbnQgdG9mZixcbiYjNDM7XHRcdCAgICAgICBib29sIGhhc19wb3J0cywgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKTtcbiAjZW5kaWZcbiBcbi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpO1xuLVxuIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmY0KF9fYmUzMiBvbGQsIF9fYmUzMiBuZXcsIF9fd3N1bSBvbGRzdW0pXG4ge1xuIFx0X19iZTMyIGRpZmZbMl0gPSB7IH5vbGQsIG5ldyB9O1xuQEAgLTIwOTMsNiAmIzQzOzIwOTUsMzYgQEAgc3RhdGljIGlubGluZSBfX3dzdW0gaXBfdnNfY2hlY2tfZGlmZjIoX19iZTE2IG9sZCwgX19iZTE2IG5ldywgX193c3VtIG9sZHN1bSlcbiBcdHJldHVybiBjc3VtX3BhcnRpYWwoZGlmZiwgc2l6ZW9mKGRpZmYpLCBvbGRzdW0pO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGlwX3ZzX2NoZWNrc3VtX25lZWRlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYWYpXG4mIzQzO3tcbiYjNDM7XHQvKiBDaGVja3N1bSB1bm5lY2Vzc2FyeSBvciBhbHJlYWR5IHZhbGlkYXRlZD8gKi9cbiYjNDM7XHRpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHQvKiBMT0NBTF9PVVQgPyAqL1xuJiM0MztcdGlmICghc2tiLVx1MDAzZWRldiB8fCBza2ItXHUwMDNlZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfTE9PUEJBQ0spXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0LyogIUxPQ0FMX0lOIChGT1JXQVJEKSA/ICovXG4mIzQzO1x0aWYgKGFmID09IEFGX0lORVQ2KSB7XG4mIzQzO1x0XHRpZiAoIShkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKS1cdTAwM2VydDZpX2ZsYWdzIFx1MDAyNiBSVEZfTE9DQUwpKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmICghKHNrYl9ydGFibGUoc2tiKS1cdTAwM2VydF9mbGFncyBcdTAwMjYgUlRDRl9MT0NBTCkpXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2sgLSB2YWxpZGF0ZSBjaGVja3N1bSBmb3IgVENQL1VEUC9JQ01QXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgaW50IG9mZnNldCwgaW50IHByb3RvLCBpbnQgYWYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdHJldHVybiAhbmZfY2hlY2tzdW0oc2tiLCBORl9JTkVUX0xPQ0FMX0lOLCBvZmZzZXQsIHByb3RvLCBhZik7XG4mIzQzO31cbiYjNDM7XG4gLyogRm9yZ2V0IGN1cnJlbnQgY29ubnRyYWNrICh1bmNvbmZpcm1lZCkgYW5kIGF0dGFjaCBub3RyYWNrIGVudHJ5ICovXG4gc3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX25vdHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jXG5pbmRleCBiMGUwMGJlODVjYjEyYy4uMTFjYmRiYWY1NjFkYWYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuY1xuQEAgLTM2Nyw3ICYjNDM7MzY3LDcgQEAgc3RhdGljIGlubGluZSBpbnQgYXBwX3RjcF9wa3Rfb3V0KHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgaXB2c2gtXHUwMDNlbGVuICYjNDM7IHNpemVvZigqdGgpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHR0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IGlwdnNoLVx1MDAzZWxlbik7XG4mIzQzO1x0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyBpcHZzaC1cdTAwM2VsZW4pO1xuIFxuIFx0LypcbiBcdCAqXHRSZW1lbWJlciBzZXEgbnVtYmVyIGluIGNhc2UgdGhpcyBwa3QgZ2V0cyByZXNpemVkXG5AQCAtNDQzLDcgJiM0Mzs0NDMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBhcHBfdGNwX3BrdF9pbihzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIGlwdnNoLVx1MDAzZWxlbiAmIzQzOyBzaXplb2YoKnRoKSkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBpcHZzaC1cdTAwM2VsZW4pO1xuJiM0MztcdHRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0MzsgaXB2c2gtXHUwMDNlbGVuKTtcbiBcbiBcdC8qXG4gXHQgKlx0UmVtZW1iZXIgc2VxIG51bWJlciBpbiBjYXNlIHRoaXMgcGt0IGdldHMgcmVzaXplZFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG5pbmRleCBiYWZhYjkzNDUxZDAzNy4uN2VmYTIwOWE1MTdiMWMgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG5AQCAtODY3LDcgJiM0Mzs4NjcsNyBAQCBzdGF0aWMgaW50IHN5c2N0bF9uYXRfaWNtcF9zZW5kKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKSB7IHJldHVybiAwOyB9XG4gXG4gI2VuZGlmXG4gXG4tX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KVxuJiM0MztzdGF0aWMgX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KVxuIHtcbiBcdHJldHVybiBjc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgb2Zmc2V0LCBza2ItXHUwMDNlbGVuIC0gb2Zmc2V0LCAwKSk7XG4gfVxuQEAgLTkyNCwxMyAmIzQzOzkyNCwxMyBAQCBzdGF0aWMgaW50IGlwX3ZzX3JvdXRlX21lX2hhcmRlcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLFxuICAqIC0gaW5vdXQ6IDE9aW4tXHUwMDNlb3V0LCAwPW91dC1cdTAwM2VpblxuICAqL1xuIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0KVxuJiM0MztcdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0LCB1bnNpZ25lZCBpbnQgdG9mZixcbiYjNDM7XHRcdCAgICBib29sIGhhc19wb3J0cylcbiB7XG4gXHRzdHJ1Y3QgaXBoZHIgKmlwaFx0ID0gaXBfaGRyKHNrYik7XG4tXHR1bnNpZ25lZCBpbnQgaWNtcF9vZmZzZXQgPSBpcGgtXHUwMDNlaWhsKjQ7XG4tXHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGhcdCA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzO1xuLVx0XHRcdFx0XHRcdCAgICAgIGljbXBfb2Zmc2V0KTtcbiYjNDM7XHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGhcdCA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyB0b2ZmKTtcbiBcdHN0cnVjdCBpcGhkciAqY2lwaFx0ID0gKHN0cnVjdCBpcGhkciAqKShpY21waCAmIzQzOyAxKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY29mZiBfX21heWJlX3VudXNlZCA9IHRvZmYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpY21waGRyKTtcbiBcbiBcdGlmIChpbm91dCkge1xuIFx0XHRpcGgtXHUwMDNlc2FkZHIgPSBjcC1cdTAwM2V2YWRkci5pcDtcbkBAIC05NDUsOCAmIzQzOzk0NSw3IEBAIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdH1cbiBcbiBcdC8qIHRoZSBUQ1AvVURQL1NDVFAgcG9ydCAqL1xuLVx0aWYgKElQUFJPVE9fVENQID09IGNpcGgtXHUwMDNlcHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2lwaC1cdTAwM2Vwcm90b2NvbCB8fFxuLVx0ICAgIElQUFJPVE9fU0NUUCA9PSBjaXBoLVx1MDAzZXByb3RvY29sKSB7XG4mIzQzO1x0aWYgKGhhc19wb3J0cykge1xuIFx0XHRfX2JlMTYgKnBvcnRzID0gKHZvaWQgKiljaXBoICYjNDM7IGNpcGgtXHUwMDNlaWhsKjQ7XG4gXG4gXHRcdGlmIChpbm91dClcbkBAIC05NTcsNDggJiM0Mzs5NTYsNDAgQEAgdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIFx0LyogQW5kIGZpbmFsbHkgdGhlIElDTVAgY2hlY2tzdW0gKi9cbiBcdGljbXBoLVx1MDAzZWNoZWNrc3VtID0gMDtcbi1cdGljbXBoLVx1MDAzZWNoZWNrc3VtID0gaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpY21wX29mZnNldCk7XG4mIzQzO1x0aWNtcGgtXHUwMDNlY2hlY2tzdW0gPSBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIHRvZmYpO1xuIFx0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZO1xuIFxuIFx0aWYgKGlub3V0KVxuLVx0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCAodm9pZCAqKWNpcGggLSAodm9pZCAqKWlwaCxcbi1cdFx0XHRcJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUFwmIzM0Oyk7XG4mIzQzO1x0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBjb2ZmLFxuJiM0MztcdFx0XHQgICAgICBcJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUFwmIzM0Oyk7XG4gXHRlbHNlXG4tXHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLFxuLVx0XHRcdFwmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QXCYjMzQ7KTtcbiYjNDM7XHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNvZmYsXG4mIzQzO1x0XHRcdCAgICAgIFwmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QXCYjMzQ7KTtcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4gdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQpXG4mIzQzO1x0XHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQsIHVuc2lnbmVkIGludCB0b2ZmLFxuJiM0MztcdFx0ICAgICAgIGJvb2wgaGFzX3BvcnRzLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXG4ge1xuIFx0c3RydWN0IGlwdjZoZHIgKmlwaFx0ID0gaXB2Nl9oZHIoc2tiKTtcbi1cdHVuc2lnbmVkIGludCBpY21wX29mZnNldCA9IDA7XG4tXHR1bnNpZ25lZCBpbnQgb2Zmc1x0ID0gMDsgLyogaGVhZGVyIG9mZnNldCovXG4tXHRpbnQgcHJvdG9jb2w7XG4gXHRzdHJ1Y3QgaWNtcDZoZHIgKmljbXBoO1xuLVx0c3RydWN0IGlwdjZoZHIgKmNpcGg7XG4tXHR1bnNpZ25lZCBzaG9ydCBmcmFnb2ZmcztcbiYjNDM7XHRzdHJ1Y3QgaXB2NmhkciAqY2loO1xuIFxuLVx0aXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNmljbXBfb2Zmc2V0LCBJUFBST1RPX0lDTVBWNiwgXHUwMDI2ZnJhZ29mZnMsIE5VTEwpO1xuLVx0aWNtcGggPSAoc3RydWN0IGljbXA2aGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IGljbXBfb2Zmc2V0KTtcbi1cdG9mZnMgPSBpY21wX29mZnNldCAmIzQzOyBzaXplb2Yoc3RydWN0IGljbXA2aGRyKTtcbi1cdGNpcGggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0Mzsgb2Zmcyk7XG4tXG4tXHRwcm90b2NvbCA9IGlwdjZfZmluZF9oZHIoc2tiLCBcdTAwMjZvZmZzLCAtMSwgXHUwMDI2ZnJhZ29mZnMsIE5VTEwpO1xuJiM0MztcdGljbXBoID0gKHN0cnVjdCBpY21wNmhkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyB0b2ZmKTtcbiYjNDM7XHRjaWggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0MzsgY2lwaC1cdTAwM2VvZmYpO1xuIFxuIFx0aWYgKGlub3V0KSB7XG4gXHRcdGlwaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZXZhZGRyLmluNjtcbi1cdFx0Y2lwaC1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZXZhZGRyLmluNjtcbiYjNDM7XHRcdGNpaC1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZXZhZGRyLmluNjtcbiBcdH0gZWxzZSB7XG4gXHRcdGlwaC1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZWRhZGRyLmluNjtcbi1cdFx0Y2lwaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZWRhZGRyLmluNjtcbiYjNDM7XHRcdGNpaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZWRhZGRyLmluNjtcbiBcdH1cbiBcbiBcdC8qIHRoZSBUQ1AvVURQL1NDVFAgcG9ydCAqL1xuLVx0aWYgKCFmcmFnb2ZmcyBcdTAwMjZcdTAwMjYgKElQUFJPVE9fVENQID09IHByb3RvY29sIHx8IElQUFJPVE9fVURQID09IHByb3RvY29sIHx8XG4tXHRcdFx0ICBJUFBST1RPX1NDVFAgPT0gcHJvdG9jb2wpKSB7XG4tXHRcdF9fYmUxNiAqcG9ydHMgPSAodm9pZCAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBvZmZzKTtcbiYjNDM7XHRpZiAoaGFzX3BvcnRzKSB7XG4mIzQzO1x0XHRfX2JlMTYgKnBvcnRzID0gKHZvaWQgKikoc2tiLVx1MDAzZWRhdGEgJiM0MzsgY2lwaC1cdTAwM2VsZW4pO1xuIFxuIFx0XHRJUF9WU19EQkcoMTEsIFwmIzM0OyVzKCkgY2hhbmdlZCBwb3J0ICVkIHRvICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbiBcdFx0XHQgICAgICBudG9ocyhpbm91dCA/IHBvcnRzWzFdIDogcG9ydHNbMF0pLFxuQEAgLTEwMTEsMTkgJiM0MzsxMDAyLDE3IEBAIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcbiBcdC8qIEFuZCBmaW5hbGx5IHRoZSBJQ01QIGNoZWNrc3VtICovXG4gXHRpY21waC1cdTAwM2VpY21wNl9ja3N1bSA9IH5jc3VtX2lwdjZfbWFnaWMoXHUwMDI2aXBoLVx1MDAzZXNhZGRyLCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2VsZW4gLSBpY21wX29mZnNldCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2VsZW4gLSB0b2ZmLFxuIFx0XHRcdFx0XHQgICAgICBJUFBST1RPX0lDTVBWNiwgMCk7XG4tXHRza2ItXHUwMDNlY3N1bV9zdGFydCA9IHNrYl9uZXR3b3JrX2hlYWRlcihza2IpIC0gc2tiLVx1MDAzZWhlYWQgJiM0MzsgaWNtcF9vZmZzZXQ7XG4mIzQzO1x0c2tiLVx1MDAzZWNzdW1fc3RhcnQgPSBza2JfaGVhZHJvb20oc2tiKSAmIzQzOyB0b2ZmO1xuIFx0c2tiLVx1MDAzZWNzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSk7XG4gXHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fUEFSVElBTDtcbiBcbiBcdGlmIChpbm91dClcbi1cdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsXG4tXHRcdFx0ICAgICAgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsXG4mIzQzO1x0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwgY2lwaC1cdTAwM2VvZmYsXG4gXHRcdFx0ICAgICAgXCYjMzQ7Rm9yd2FyZGluZyBhbHRlcmVkIG91dGdvaW5nIElDTVB2NlwmIzM0Oyk7XG4gXHRlbHNlXG4tXHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQ2LCBwcCwgc2tiLFxuLVx0XHRcdCAgICAgICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLFxuJiM0MztcdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsIGNpcGgtXHUwMDNlb2ZmLFxuIFx0XHRcdCAgICAgIFwmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QdjZcJiMzNDspO1xuIH1cbiAjZW5kaWZcbkBAIC0xMDMzLDM2ICYjNDM7MTAyMiw0MSBAQCB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gICovXG4gc3RhdGljIGludCBoYW5kbGVfcmVzcG9uc2VfaWNtcChpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHR1bmlvbiBuZl9pbmV0X2FkZHIgKnNuZXQsXG4tXHRcdFx0XHRfX3U4IHByb3RvY29sLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4mIzQzO1x0XHRcdFx0c3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0XHRcdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdFx0XHRcdHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBpaGwsXG4tXHRcdFx0XHR1bnNpZ25lZCBpbnQgaG9va251bSlcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgsXG4mIzQzO1x0XHRcdFx0dW5zaWduZWQgaW50IHRvZmYsIHVuc2lnbmVkIGludCBob29rbnVtKVxuIHtcbiYjNDM7XHRpbnQgaXByb3RvID0gYWYgPT0gQUZfSU5FVDYgPyBJUFBST1RPX0lDTVBWNiA6IElQUFJPVE9fSUNNUDtcbiBcdHVuc2lnbmVkIGludCB2ZXJkaWN0ID0gTkZfRFJPUDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY3RvZmYgPSBjaXBoLVx1MDAzZWxlbjtcbiYjNDM7XHRib29sIGhhc19wb3J0cyA9IGZhbHNlO1xuIFxuIFx0aWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKVxuIFx0XHRnb3RvIGFmdGVyX25hdDtcbiBcbiBcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xuLVx0aWYgKCFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpIFx1MDAyNlx1MDAyNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIGlobCkpIHtcbiYjNDM7XHRpZiAoIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIHRvZmYsIGlwcm90bywgYWYpKSB7XG4gXHRcdC8qIEZhaWxlZCBjaGVja3N1bSEgKi9cbiBcdFx0SVBfVlNfREJHX0JVRigxLCBcJiMzNDtGb3J3YXJkIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVzIVxcblwmIzM0OyxcbiBcdFx0XHQgICAgICBJUF9WU19EQkdfQUREUihhZiwgc25ldCkpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGlmIChJUFBST1RPX1RDUCA9PSBwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBwcm90b2NvbCB8fFxuLVx0ICAgIElQUFJPVE9fU0NUUCA9PSBwcm90b2NvbClcbi1cdFx0b2Zmc2V0ICYjNDM7PSAyICogc2l6ZW9mKF9fdTE2KTtcbi1cdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcbiYjNDM7XHRpZiAoY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fCBjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XG4mIzQzO1x0ICAgIGNpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19TQ1RQKSB7XG4mIzQzO1x0XHRjdG9mZiAmIzQzOz0gMiAqIHNpemVvZihfX3UxNik7XG4mIzQzO1x0XHRoYXNfcG9ydHMgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIGN0b2ZmKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4gXHRpZiAoYWYgPT0gQUZfSU5FVDYpXG4tXHRcdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAxKTtcbiYjNDM7XHRcdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAxLCB0b2ZmLCBoYXNfcG9ydHMsIGNpcGgpO1xuIFx0ZWxzZVxuICNlbmRpZlxuLVx0XHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSk7XG4mIzQzO1x0XHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzKTtcbiBcbiBcdGlmIChpcF92c19yb3V0ZV9tZV9oYXJkZXIoY3AtXHUwMDNlaXB2cywgYWYsIHNrYiwgaG9va251bSkpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTEwOTAsOSAmIzQzOzEwODQsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAgKlx0Q3VycmVudGx5IGhhbmRsZXMgZXJyb3IgdHlwZXMgLSB1bnJlYWNoYWJsZSwgcXVlbmNoLCB0dGwgZXhjZWVkZWQuXG4gICovXG4gc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHQgIGludCAqcmVsYXRlZCwgdW5zaWduZWQgaW50IGhvb2tudW0pXG4mIzQzO1x0XHRcdCAgaW50ICpyZWxhdGVkLCB1bnNpZ25lZCBpbnQgaG9va251bSxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwdnNoKVxuIHtcbi1cdHN0cnVjdCBpcGhkciAqaXBoO1xuIFx0c3RydWN0IGljbXBoZHJcdF9pY21waCwgKmljO1xuIFx0c3RydWN0IGlwaGRyXHRfY2lwaCwgKmNpaDtcdC8qIFRoZSBpcCBoZWFkZXIgY29udGFpbmVkIHdpdGhpbiB0aGUgSUNNUCAqL1xuIFx0c3RydWN0IGlwX3ZzX2lwaGRyIGNpcGg7XG5AQCAtMTEwNywxNyAmIzQzOzExMDEsMTkgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChpcF9pc19mcmFnbWVudChpcF9oZHIoc2tiKSkpIHtcbiBcdFx0aWYgKGlwX3ZzX2dhdGhlcl9mcmFncyhpcHZzLCBza2IsIGlwX3ZzX2RlZnJhZ191c2VyKGhvb2tudW0pKSlcbiBcdFx0XHRyZXR1cm4gTkZfU1RPTEVOO1xuJiM0MztcdFx0aWYgKCFpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVCwgc2tiLCBmYWxzZSwgaXB2c2gpKVxuJiM0MztcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFx0fVxuIFxuLVx0aXBoID0gaXBfaGRyKHNrYik7XG4tXHRvZmZzZXQgPSBpaGwgPSBpcGgtXHUwMDNlaWhsICogNDtcbiYjNDM7XHRpaGwgPSBpcHZzaC1cdTAwM2VsZW47XG4mIzQzO1x0b2Zmc2V0ID0gaXB2c2gtXHUwMDNlbGVuO1xuIFx0aWMgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfaWNtcGgpLCBcdTAwMjZfaWNtcGgpO1xuIFx0aWYgKGljID09IE5VTEwpXG4gXHRcdHJldHVybiBORl9EUk9QO1xuIFxuIFx0SVBfVlNfREJHKDEyLCBcJiMzNDtPdXRnb2luZyBJQ01QICglZCwlZCkgJXBJNC1cdTAwM2UlcEk0XFxuXCYjMzQ7LFxuIFx0XHQgIGljLVx1MDAzZXR5cGUsIG50b2hzKGljbXBfaWQoaWMpKSxcbi1cdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIsIFx1MDAyNmlwaC1cdTAwM2VkYWRkcik7XG4mIzQzO1x0XHQgIFx1MDAyNmlwdnNoLVx1MDAzZXNhZGRyLmlwLCBcdTAwMjZpcHZzaC1cdTAwM2VkYWRkci5pcCk7XG4gXG4gXHQvKlxuIFx0ICogV29yayB0aHJvdWdoIHNlZWluZyBpZiB0aGlzIGlzIGZvciB1cy5cbkBAIC0xMTM2LDcgJiM0MzsxMTMyLDcgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdC8qIE5vdyBmaW5kIHRoZSBjb250YWluZWQgSVAgaGVhZGVyICovXG4gXHRvZmZzZXQgJiM0Mzs9IHNpemVvZihfaWNtcGgpO1xuIFx0Y2loID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2NpcGgpLCBcdTAwMjZfY2lwaCk7XG4tXHRpZiAoY2loID09IE5VTEwpXG4mIzQzO1x0aWYgKCEoY2loIFx1MDAyNlx1MDAyNiBjaWgtXHUwMDNldmVyc2lvbiA9PSA0IFx1MDAyNlx1MDAyNiBjaWgtXHUwMDNlaWhsIFx1MDAzZT0gNSkpXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7IC8qIFRoZSBwYWNrZXQgbG9va3Mgd3JvbmcsIGlnbm9yZSAqL1xuIFxuIFx0cHAgPSBpcF92c19wcm90b19nZXQoY2loLVx1MDAzZXByb3RvY29sKTtcbkBAIC0xMTQ0LDggJiM0MzsxMTQwLDcgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbiBcdC8qIElzIHRoZSBlbWJlZGRlZCBwcm90b2NvbCBoZWFkZXIgcHJlc2VudD8gKi9cbi1cdGlmICh1bmxpa2VseShjaWgtXHUwMDNlZnJhZ19vZmYgXHUwMDI2IGh0b25zKElQX09GRlNFVCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAgcHAtXHUwMDNlZG9udF9kZWZyYWcpKVxuJiM0MztcdGlmICh1bmxpa2VseShjaWgtXHUwMDNlZnJhZ19vZmYgXHUwMDI2IGh0b25zKElQX09GRlNFVCkgXHUwMDI2XHUwMDI2ICFwcC1cdTAwM2Vkb250X2RlZnJhZykpXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBvZmZzZXQsXG5AQCAtMTE1OSw5ICYjNDM7MTE1NCw5IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoIWNwKVxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFxuLVx0c25ldC5pcCA9IGlwaC1cdTAwM2VzYWRkcjtcbi1cdHJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVULCBza2IsIFx1MDAyNnNuZXQsIGNpaC1cdTAwM2Vwcm90b2NvbCwgY3AsXG4tXHRcdFx0XHQgICAgcHAsIGNpcGgubGVuLCBpaGwsIGhvb2tudW0pO1xuJiM0MztcdHNuZXQuaXAgPSBpcHZzaC1cdTAwM2VzYWRkci5pcDtcbiYjNDM7XHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVCwgc2tiLCBcdTAwMjZzbmV0LCBjcCwgcHAsIFx1MDAyNmNpcGgsIGlobCxcbiYjNDM7XHRcdFx0XHQgICAgaG9va251bSk7XG4gfVxuIFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuQEAgLTExNzQsNyAmIzQzOzExNjksNiBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGlwX3ZzX2Nvbm4gKmNwO1xuIFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcDtcbiBcdHVuaW9uIG5mX2luZXRfYWRkciBzbmV0O1xuLVx0dW5zaWduZWQgaW50IG9mZnNldDtcbiBcbiBcdCpyZWxhdGVkID0gMTtcbiBcdGljID0gZnJhZ19zYWZlX3NrYl9ocChza2IsIGlwdnNoLVx1MDAzZWxlbiwgc2l6ZW9mKF9pY21waCksIFx1MDAyNl9pY21waCk7XG5AQCAtMTIxMCw2ICYjNDM7MTIwNCwxMCBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKCFwcClcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbiYjNDM7XHQvKiBJcyB0aGUgZW1iZWRkZWQgcHJvdG9jb2wgaGVhZGVyIHByZXNlbnQ/ICovXG4mIzQzO1x0aWYgKHVubGlrZWx5KGNpcGguZnJhZ29mZnMgXHUwMDI2XHUwMDI2ICFwcC1cdTAwM2Vkb250X2RlZnJhZykpXG4mIzQzO1x0XHRyZXR1cm4gTkZfQUNDRVBUO1xuJiM0MztcbiBcdC8qIFRoZSBlbWJlZGRlZCBoZWFkZXJzIGNvbnRhaW4gc291cmNlIGFuZCBkZXN0IGluIHJldmVyc2Ugb3JkZXIgKi9cbiBcdGNwID0gSU5ESVJFQ1RfQ0FMTF8xKHBwLVx1MDAzZWNvbm5fb3V0X2dldCwgaXBfdnNfY29ubl9vdXRfZ2V0X3Byb3RvLFxuIFx0XHRcdCAgICAgaXB2cywgQUZfSU5FVDYsIHNrYiwgXHUwMDI2Y2lwaCk7XG5AQCAtMTIxNyw5ICYjNDM7MTIxNSw4IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRzbmV0LmluNiA9IGNpcGguc2FkZHIuaW42O1xuLVx0b2Zmc2V0ID0gY2lwaC5sZW47XG4tXHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVDYsIHNrYiwgXHUwMDI2c25ldCwgY2lwaC5wcm90b2NvbCwgY3AsXG4tXHRcdFx0XHQgICAgcHAsIG9mZnNldCwgaXB2c2gtXHUwMDNlbGVuLCBob29rbnVtKTtcbiYjNDM7XHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVDYsIHNrYiwgXHUwMDI2c25ldCwgY3AsIHBwLCBcdTAwMjZjaXBoLFxuJiM0MztcdFx0XHRcdCAgICBpcHZzaC1cdTAwM2VsZW4sIGhvb2tudW0pO1xuIH1cbiAjZW5kaWZcbiBcbkBAIC0xNTQ1LDcgJiM0MzsxNTQyLDggQEAgaXBfdnNfb3V0X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRcbiAjZW5kaWZcbiBcdFx0aWYgKHVubGlrZWx5KGlwaC5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApKSB7XG4gXHRcdFx0aW50IHJlbGF0ZWQ7XG4tXHRcdFx0aW50IHZlcmRpY3QgPSBpcF92c19vdXRfaWNtcChpcHZzLCBza2IsIFx1MDAyNnJlbGF0ZWQsIGhvb2tudW0pO1xuJiM0MztcdFx0XHRpbnQgdmVyZGljdCA9IGlwX3ZzX291dF9pY21wKGlwdnMsIHNrYiwgXHUwMDI2cmVsYXRlZCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBob29rbnVtLCBcdTAwMjZpcGgpO1xuIFxuIFx0XHRcdGlmIChyZWxhdGVkKVxuIFx0XHRcdFx0cmV0dXJuIHZlcmRpY3Q7XG5AQCAtMTc1Myw5ICYjNDM7MTc1MSw4IEBAIHN0YXRpYyBpbnQgaXB2c19ncmVfZGVjYXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gICovXG4gc3RhdGljIGludFxuIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbi1cdCAgICAgIHVuc2lnbmVkIGludCBob29rbnVtKVxuJiM0MztcdCAgICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbiB7XG4tXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbiBcdHN0cnVjdCBpY21waGRyXHRfaWNtcGgsICppYztcbiBcdHN0cnVjdCBpcGhkclx0X2NpcGgsICpjaWg7XHQvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi9cbiBcdHN0cnVjdCBpcF92c19pcGhkciBjaXBoO1xuQEAgLTE3NjUsNyAmIzQzOzE3NjIsNyBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCBvZmZzZXQyLCBpaGwsIHZlcmRpY3Q7XG4gXHRib29sIHR1bm5lbCwgbmV3X2NwID0gZmFsc2U7XG4gXHR1bmlvbiBuZl9pbmV0X2FkZHIgKnJhZGRyO1xuLVx0Y2hhciAqb3V0ZXJfcHJvdG8gPSBcJiMzNDtJUElQXCYjMzQ7O1xuJiM0MztcdGNoYXIgKm91dGVyX3Byb3RvIF9fbWF5YmVfdW51c2VkID0gXCYjMzQ7SVBJUFwmIzM0OztcbiBcdHVuc2lnbmVkIGludCBobGVuX2lwaXA7XG4gXHRpbnQgdWxlbiA9IDA7XG4gXG5AQCAtMTc3NSwxNyAmIzQzOzE3NzIsMTkgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFx0aWYgKGlwX2lzX2ZyYWdtZW50KGlwX2hkcihza2IpKSkge1xuIFx0XHRpZiAoaXBfdnNfZ2F0aGVyX2ZyYWdzKGlwdnMsIHNrYiwgaXBfdnNfZGVmcmFnX3VzZXIoaG9va251bSkpKVxuIFx0XHRcdHJldHVybiBORl9TVE9MRU47XG4mIzQzO1x0XHRpZiAoIWlwX3ZzX2ZpbGxfaXBoX3NrYihBRl9JTkVULCBza2IsIGZhbHNlLCBpcGgpKVxuJiM0MztcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFx0fVxuIFxuLVx0aXBoID0gaXBfaGRyKHNrYik7XG4tXHRvZmZzZXQgPSBpaGwgPSBpcGgtXHUwMDNlaWhsICogNDtcbiYjNDM7XHRpaGwgPSBpcGgtXHUwMDNlbGVuO1xuJiM0MztcdG9mZnNldCA9IGlwaC1cdTAwM2VsZW47XG4gXHRpYyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9pY21waCksIFx1MDAyNl9pY21waCk7XG4gXHRpZiAoaWMgPT0gTlVMTClcbiBcdFx0cmV0dXJuIE5GX0RST1A7XG4gXG4gXHRJUF9WU19EQkcoMTIsIFwmIzM0O0luY29taW5nIElDTVAgKCVkLCVkKSAlcEk0LVx1MDAzZSVwSTRcXG5cJiMzNDssXG4gXHRcdCAgaWMtXHUwMDNldHlwZSwgbnRvaHMoaWNtcF9pZChpYykpLFxuLVx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkciwgXHUwMDI2aXBoLVx1MDAzZWRhZGRyKTtcbiYjNDM7XHRcdCAgXHUwMDI2aXBoLVx1MDAzZXNhZGRyLmlwLCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIuaXApO1xuIFxuIFx0LypcbiBcdCAqIFdvcmsgdGhyb3VnaCBzZWVpbmcgaWYgdGhpcyBpcyBmb3IgdXMuXG5AQCAtMTg2Nyw4ICYjNDM7MTg2Niw3IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdHBwID0gcGQtXHUwMDNlcHA7XG4gXG4gXHQvKiBJcyB0aGUgZW1iZWRkZWQgcHJvdG9jb2wgaGVhZGVyIHByZXNlbnQ/ICovXG4tXHRpZiAodW5saWtlbHkoY2loLVx1MDAzZWZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUF9PRkZTRVQpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIHBwLVx1MDAzZWRvbnRfZGVmcmFnKSlcbiYjNDM7XHRpZiAodW5saWtlbHkoY2loLVx1MDAzZWZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUF9PRkZTRVQpIFx1MDAyNlx1MDAyNiAhcHAtXHUwMDNlZG9udF9kZWZyYWcpKVxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFxuIFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgb2Zmc2V0LFxuQEAgLTE4NzYsNyAmIzQzOzE4NzQsNiBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXG4gXHRvZmZzZXQyID0gb2Zmc2V0O1xuIFx0aXBfdnNfZmlsbF9pcGhfc2tiX2ljbXAoQUZfSU5FVCwgc2tiLCBvZmZzZXQsICF0dW5uZWwsIFx1MDAyNmNpcGgpO1xuLVx0b2Zmc2V0ID0gY2lwaC5sZW47XG4gXG4gXHQvKiBUaGUgZW1iZWRkZWQgaGVhZGVycyBjb250YWluIHNvdXJjZSBhbmQgZGVzdCBpbiByZXZlcnNlIG9yZGVyLlxuIFx0ICogRm9yIElQSVAvVURQL0dSRSB0dW5uZWwgdGhpcyBpcyBlcnJvciBmb3IgcmVxdWVzdCwgbm90IGZvciByZXBseS5cbkBAIC0xODk4LDEwICYjNDM7MTg5NSwxMSBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXHR2ZXJkaWN0ID0gTkZfRFJPUDtcbiBcbiBcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xuLVx0aWYgKCFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpIFx1MDAyNlx1MDAyNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIGlobCkpIHtcbiYjNDM7XHRpZiAoKElQX1ZTX0ZXRF9NRVRIT0QoY3ApID09IElQX1ZTX0NPTk5fRl9NQVNRIHx8IHR1bm5lbCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpaGwsIElQUFJPVE9fSUNNUCwgQUZfSU5FVCkpIHtcbiBcdFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xuIFx0XHRJUF9WU19EQkcoMSwgXCYjMzQ7SW5jb21pbmcgSUNNUDogZmFpbGVkIGNoZWNrc3VtIGZyb20gJXBJNCFcXG5cJiMzNDssXG4tXHRcdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIpO1xuJiM0MztcdFx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkci5pcCk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuQEAgLTE5NjksMTAgJiM0MzsxOTY3LDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFxuIFx0LyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovXG4gXHRpcF92c19pbl9zdGF0cyhjcCwgc2tiKTtcbi1cdGlmIChJUFBST1RPX1RDUCA9PSBjaWgtXHUwMDNlcHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2loLVx1MDAzZXByb3RvY29sIHx8XG4tXHQgICAgSVBQUk9UT19TQ1RQID09IGNpaC1cdTAwM2Vwcm90b2NvbClcbi1cdFx0b2Zmc2V0ICYjNDM7PSAyICogc2l6ZW9mKF9fdTE2KTtcbi1cdHZlcmRpY3QgPSBpcF92c19pY21wX3htaXQoc2tiLCBjcCwgcHAsIG9mZnNldCwgaG9va251bSwgXHUwMDI2Y2lwaCk7XG4mIzQzO1x0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdChza2IsIGNwLCBwcCwgaXBoLVx1MDAzZWxlbiwgaG9va251bSwgXHUwMDI2Y2lwaCk7XG4gXG4gb3V0OlxuIFx0aWYgKGxpa2VseSghbmV3X2NwKSlcbkBAIC0yMDMyLDggJiM0MzsyMDI3LDggQEAgc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFx0cHAgPSBwZC1cdTAwM2VwcDtcbiBcbi1cdC8qIENhbm5vdCBoYW5kbGUgZnJhZ21lbnRlZCBlbWJlZGRlZCBwcm90b2NvbCAqL1xuLVx0aWYgKGNpcGguZnJhZ29mZnMpXG4mIzQzO1x0LyogSXMgdGhlIGVtYmVkZGVkIHByb3RvY29sIGhlYWRlciBwcmVzZW50PyAqL1xuJiM0MztcdGlmIChjaXBoLmZyYWdvZmZzIFx1MDAyNlx1MDAyNiAhcHAtXHUwMDNlZG9udF9kZWZyYWcpXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwgb2Zmc2V0LFxuQEAgLTIwNTcsMjMgJiM0MzsyMDUyLDIyIEBAIHN0YXRpYyBpbnQgaXBfdnNfaW5faWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0bmV3X2NwID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdC8qIFZTL1RVTiwgVlMvRFIgYW5kIExPQ0FMTk9ERSBqdXN0IGxldCBpdCBnbyAqL1xuLVx0aWYgKChob29rbnVtID09IE5GX0lORVRfTE9DQUxfT1VUKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpKSB7XG4tXHRcdHZlcmRpY3QgPSBORl9BQ0NFUFQ7XG4mIzQzO1x0dmVyZGljdCA9IE5GX0RST1A7XG4mIzQzO1xuJiM0MztcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xuJiM0MztcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlwaC1cdTAwM2VsZW4sIElQUFJPVE9fSUNNUFY2LFxuJiM0MztcdFx0XHRcdFx0IEFGX0lORVQ2KSkge1xuJiM0MztcdFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xuJiM0MztcdFx0SVBfVlNfREJHKDEsIFwmIzM0O0luY29taW5nIElDTVB2NjogZmFpbGVkIGNoZWNrc3VtIGZyb20gJXBJNmMhXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkcik7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuIFx0LyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovXG4gXHRpcF92c19pbl9zdGF0cyhjcCwgc2tiKTtcbiBcbi1cdC8qIE5lZWQgdG8gbWFuZ2xlIGNvbnRhaW5lZCBJUHY2IGhlYWRlciBpbiBJQ01QdjYgcGFja2V0ICovXG4tXHRvZmZzZXQgPSBjaXBoLmxlbjtcbi1cdGlmIChJUFBST1RPX1RDUCA9PSBjaXBoLnByb3RvY29sIHx8IElQUFJPVE9fVURQID09IGNpcGgucHJvdG9jb2wgfHxcbi1cdCAgICBJUFBST1RPX1NDVFAgPT0gY2lwaC5wcm90b2NvbClcbi1cdFx0b2Zmc2V0ICYjNDM7PSAyICogc2l6ZW9mKF9fdTE2KTsgLyogQWxzbyBtYW5nbGUgcG9ydHMgKi9cbi1cbi1cdHZlcmRpY3QgPSBpcF92c19pY21wX3htaXRfdjYoc2tiLCBjcCwgcHAsIG9mZnNldCwgaG9va251bSwgXHUwMDI2Y2lwaCk7XG4mIzQzO1x0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdF92Nihza2IsIGNwLCBwcCwgaXBoLVx1MDAzZWxlbiwgaG9va251bSwgXHUwMDI2Y2lwaCk7XG4gXG4gb3V0OlxuIFx0aWYgKGxpa2VseSghbmV3X2NwKSlcbkBAIC0yMTUyLDcgJiM0MzsyMTQ2LDcgQEAgaXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGVcbiBcdFx0aWYgKHVubGlrZWx5KGlwaC5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApKSB7XG4gXHRcdFx0aW50IHJlbGF0ZWQ7XG4gXHRcdFx0aW50IHZlcmRpY3QgPSBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgXHUwMDI2cmVsYXRlZCxcbi1cdFx0XHRcdFx0XHQgICAgaG9va251bSk7XG4mIzQzO1x0XHRcdFx0XHRcdCAgICBob29rbnVtLCBcdTAwMjZpcGgpO1xuIFxuIFx0XHRcdGlmIChyZWxhdGVkKVxuIFx0XHRcdFx0cmV0dXJuIHZlcmRpY3Q7XG5AQCAtMjI4OCw2ICYjNDM7MjI4Miw3IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG4ge1xuIFx0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBuZXRfaXB2cyhzdGF0ZS1cdTAwM2VuZXQpO1xuJiM0MztcdHN0cnVjdCBpcF92c19pcGhkciBpcGhkcjtcbiBcdGludCByO1xuIFxuIFx0LyogaXB2cyBlbmFibGVkIGluIHRoaXMgbmV0bnMgPyAqL1xuQEAgLTIyOTcsMTAgJiM0MzsyMjkyLDkgQEAgaXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoc3RhdGUtXHUwMDNlcGYgPT0gTkZQUk9UT19JUFY0KSB7XG4gXHRcdGlmIChpcF9oZHIoc2tiKS1cdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX0lDTVApXG4gXHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiYjNDM7XHRcdGlwX3ZzX2ZpbGxfaXBoX3NrYihBRl9JTkVULCBza2IsIGZhbHNlLCBcdTAwMjZpcGhkcik7XG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4gXHR9IGVsc2Uge1xuLVx0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgaXBoZHI7XG4tXG4gXHRcdGlwX3ZzX2ZpbGxfaXBoX3NrYihBRl9JTkVUNiwgc2tiLCBmYWxzZSwgXHUwMDI2aXBoZHIpO1xuIFxuIFx0XHRpZiAoaXBoZHIucHJvdG9jb2wgIT0gSVBQUk9UT19JQ01QVjYpXG5AQCAtMjMxMCw3ICYjNDM7MjMwNCw3IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuICNlbmRpZlxuIFx0fVxuIFxuLVx0cmV0dXJuIGlwX3ZzX2luX2ljbXAoaXB2cywgc2tiLCBcdTAwMjZyLCBzdGF0ZS1cdTAwM2Vob29rKTtcbiYjNDM7XHRyZXR1cm4gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsIFx1MDAyNnIsIHN0YXRlLVx1MDAzZWhvb2ssIFx1MDAyNmlwaGRyKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBpcF92c19vcHM0W10gPSB7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmNcbmluZGV4IGM2NzMxN2JlMTdkZmFmLi4zZGJkMzA5NmUxNjM3YiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmNcbkBAIC0xMSw3ICYjNDM7MTEsNyBAQFxuIFxuIHN0YXRpYyBpbnRcbiBzY3RwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHR1bnNpZ25lZCBpbnQgc2N0cGhvZmYpO1xuJiM0MztcdFx0c3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuIFxuIHN0YXRpYyBpbnRcbiBzY3RwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbkBAIC0xMDksNyAmIzQzOzEwOSw3IEBAIHNjdHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdGludCByZXQ7XG4gXG4gXHRcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xuLVx0XHRpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgc2N0cGhvZmYpKVxuJiM0MztcdFx0aWYgKCFzY3RwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIGlwaCkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4gXHRcdC8qIENhbGwgYXBwbGljYXRpb24gaGVscGVyIGlmIG5lZWRlZCAqL1xuQEAgLTEyMSw3ICYjNDM7MTIxLDcgQEAgc2N0cF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0XHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xuIFx0fVxuIFxuLVx0c2N0cGggPSAodm9pZCAqKSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBzY3RwaG9mZjtcbiYjNDM7XHRzY3RwaCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGEgJiM0Mzsgc2N0cGhvZmY7XG4gXG4gXHQvKiBPbmx5IHVwZGF0ZSBjc3VtIGlmIHdlIHJlYWxseSBoYXZlIHRvICovXG4gXHRpZiAoc2N0cGgtXHUwMDNlc291cmNlICE9IGNwLVx1MDAzZXZwb3J0IHx8IHBheWxvYWRfY3N1bSB8fFxuQEAgLTE1Nyw3ICYjNDM7MTU3LDcgQEAgc2N0cF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBzY3RwaG9mZikpXG4mIzQzO1x0XHRpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXG5AQCAtMTY5LDcgJiM0MzsxNjksNyBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRcdHBheWxvYWRfY3N1bSA9IHRydWU7XG4gXHR9XG4gXG4tXHRzY3RwaCA9ICh2b2lkICopIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IHNjdHBob2ZmO1xuJiM0MztcdHNjdHBoID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YSAmIzQzOyBzY3RwaG9mZjtcbiBcbiBcdC8qIE9ubHkgdXBkYXRlIGNzdW0gaWYgd2UgcmVhbGx5IGhhdmUgdG8gKi9cbiBcdGlmIChzY3RwaC1cdTAwM2VkZXN0ICE9IGNwLVx1MDAzZWRwb3J0IHx8IHBheWxvYWRfY3N1bSB8fFxuQEAgLTE4NywxOSAmIzQzOzE4NywyMiBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIHN0YXRpYyBpbnRcbiBzY3RwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHR1bnNpZ25lZCBpbnQgc2N0cGhvZmYpXG4mIzQzO1x0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbiB7XG4mIzQzO1x0dW5zaWduZWQgaW50IHNjdHBob2ZmID0gaXBoLVx1MDAzZWxlbjtcbiBcdHN0cnVjdCBzY3RwaGRyICpzaDtcbiBcdF9fbGUzMiBjbXAsIHZhbDtcbiBcbiYjNDM7XHRpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSlcbiYjNDM7XHRcdHJldHVybiAxO1xuIFx0c2ggPSAoc3RydWN0IHNjdHBoZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0Mzsgc2N0cGhvZmYpO1xuIFx0Y21wID0gc2gtXHUwMDNlY2hlY2tzdW07XG4gXHR2YWwgPSBzY3RwX2NvbXB1dGVfY2tzdW0oc2tiLCBzY3RwaG9mZik7XG4gXG4gXHRpZiAodmFsICE9IGNtcCkge1xuIFx0XHQvKiBDUkMgZmFpbHVyZSwgZHVtcCBpdC4gKi9cbi1cdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFwmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3JcJiMzNDspO1xuJiM0MztcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgaXBoLVx1MDAzZW9mZixcbiYjNDM7XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvclwmIzM0Oyk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFx0cmV0dXJuIDE7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jXG5pbmRleCBmODZiNzYzZWZjYzRkYy4uOTlhMjg2ZmRjOTBjNjUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuY1xuQEAgLTI5LDcgJiM0MzsyOSw3IEBAXG4gXG4gc3RhdGljIGludFxuIHRjcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdCAgICAgICB1bnNpZ25lZCBpbnQgdGNwaG9mZik7XG4mIzQzO1x0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbiBcbiBzdGF0aWMgaW50XG4gdGNwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbkBAIC0xNjYsNyAmIzQzOzE2Niw3IEBAIHRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghdGNwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIHRjcGhvZmYpKVxuJiM0MztcdFx0aWYgKCF0Y3BfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXG5AQCAtMTc5LDcgJiM0MzsxNzksNyBAQCB0Y3Bfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHRjcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IHRjcGhvZmY7XG4mIzQzO1x0dGNwaCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGEgJiM0MzsgdGNwaG9mZjtcbiBcdHRjcGgtXHUwMDNlc291cmNlID0gY3AtXHUwMDNldnBvcnQ7XG4gXG4gXHQvKiBBZGp1c3QgVENQIGNoZWNrc3VtcyAqL1xuQEAgLTI0NCw3ICYjNDM7MjQ0LDcgQEAgdGNwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cbi1cdFx0aWYgKCF0Y3BfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgdGNwaG9mZikpXG4mIzQzO1x0XHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKlxuQEAgLTI2MCw3ICYjNDM7MjYwLDcgQEAgdGNwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRcdHBheWxvYWRfY3N1bSA9IHRydWU7XG4gXHR9XG4gXG4tXHR0Y3BoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyB0Y3Bob2ZmO1xuJiM0MztcdHRjcGggPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhICYjNDM7IHRjcGhvZmY7XG4gXHR0Y3BoLVx1MDAzZWRlc3QgPSBjcC1cdTAwM2VkcG9ydDtcbiBcbiBcdC8qXG5AQCAtMzAyLDQxICYjNDM7MzAyLDEzIEBAIHRjcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcbiBzdGF0aWMgaW50XG4gdGNwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKVxuJiM0MztcdCAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbiB7XG4tXHRzd2l0Y2ggKHNrYi1cdTAwM2VpcF9zdW1tZWQpIHtcbi1cdGNhc2UgQ0hFQ0tTVU1fTk9ORTpcbi1cdFx0c2tiLVx1MDAzZWNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCB0Y3Bob2ZmLCBza2ItXHUwMDNlbGVuIC0gdGNwaG9mZiwgMCk7XG4tXHRcdGZhbGx0aHJvdWdoO1xuLVx0Y2FzZSBDSEVDS1NVTV9DT01QTEVURTpcbi0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbi1cdFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XG4tXHRcdFx0aWYgKGNzdW1faXB2Nl9tYWdpYyhcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZXNhZGRyLFxuLVx0XHRcdFx0XHQgICAgXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbi1cdFx0XHRcdFx0ICAgIHNrYi1cdTAwM2VsZW4gLSB0Y3Bob2ZmLFxuLVx0XHRcdFx0XHQgICAgSVBQUk9UT19UQ1AsXG4tXHRcdFx0XHRcdCAgICBza2ItXHUwMDNlY3N1bSkpIHtcbi1cdFx0XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXG4tXHRcdFx0XHRcdFx0IFwmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3JcJiMzNDspO1xuLVx0XHRcdFx0cmV0dXJuIDA7XG4tXHRcdFx0fVxuLVx0XHR9IGVsc2Vcbi0jZW5kaWZcbi1cdFx0XHRpZiAoY3N1bV90Y3B1ZHBfbWFnaWMoaXBfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHRcdCAgICAgIGlwX2hkcihza2IpLVx1MDAzZWRhZGRyLFxuLVx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlbGVuIC0gdGNwaG9mZixcbi1cdFx0XHRcdFx0ICAgICAgaXBfaGRyKHNrYiktXHUwMDNlcHJvdG9jb2wsXG4tXHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2Vjc3VtKSkge1xuLVx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvclwmIzM0Oyk7XG4tXHRcdFx0XHRyZXR1cm4gMDtcbi1cdFx0XHR9XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0LyogTm8gbmVlZCB0byBjaGVja3N1bS4gKi9cbi1cdFx0YnJlYWs7XG4mIzQzO1x0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpcGgtXHUwMDNlbGVuLCBJUFBST1RPX1RDUCwgYWYpKSB7XG4mIzQzO1x0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCBpcGgtXHUwMDNlb2ZmLFxuJiM0MztcdFx0XHRcdCBcJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0fVxuLVxuIFx0cmV0dXJuIDE7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xuaW5kZXggNThmOWUyNTU5MjdlMmUuLmYzMjc4NTY4MjQwMmRkIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmNcbkBAIC0yNSw3ICYjNDM7MjUsNyBAQFxuIFxuIHN0YXRpYyBpbnRcbiB1ZHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHQgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpO1xuJiM0MztcdCAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XG4gXG4gc3RhdGljIGludFxuIHVkcF9jb25uX3NjaGVkdWxlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXG5AQCAtMTU1LDcgJiM0MzsxNTUsNyBAQCB1ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdGludCByZXQ7XG4gXG4gXHRcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xuLVx0XHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCB1ZHBob2ZmKSlcbiYjNDM7XHRcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIGlwaCkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4gXHRcdC8qXG5AQCAtMTcwLDcgJiM0MzsxNzAsNyBAQCB1ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHVkcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IHVkcGhvZmY7XG4mIzQzO1x0dWRwaCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGEgJiM0MzsgdWRwaG9mZjtcbiBcdHVkcGgtXHUwMDNlc291cmNlID0gY3AtXHUwMDNldnBvcnQ7XG4gXG4gXHQvKlxuQEAgLTIzOCw3ICYjNDM7MjM4LDcgQEAgdWRwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cbi1cdFx0aWYgKCF1ZHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgdWRwaG9mZikpXG4mIzQzO1x0XHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKlxuQEAgLTI1NCw3ICYjNDM7MjU0LDcgQEAgdWRwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRcdHBheWxvYWRfY3N1bSA9IHRydWU7XG4gXHR9XG4gXG4tXHR1ZHBoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyB1ZHBob2ZmO1xuJiM0MztcdHVkcGggPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhICYjNDM7IHVkcGhvZmY7XG4gXHR1ZHBoLVx1MDAzZWRlc3QgPSBjcC1cdTAwM2VkcG9ydDtcbiBcbiBcdC8qXG5AQCAtMjk4LDQ4ICYjNDM7Mjk4LDIwIEBAIHVkcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcbiBzdGF0aWMgaW50XG4gdWRwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0ICAgICAgIHVuc2lnbmVkIGludCB1ZHBob2ZmKVxuJiM0MztcdCAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbiB7XG4gXHRzdHJ1Y3QgdWRwaGRyIF91ZHBoLCAqdWg7XG4gXG4tXHR1aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHVkcGhvZmYsIHNpemVvZihfdWRwaCksIFx1MDAyNl91ZHBoKTtcbiYjNDM7XHR1aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGlwaC1cdTAwM2VsZW4sIHNpemVvZihfdWRwaCksIFx1MDAyNl91ZHBoKTtcbiBcdGlmICh1aCA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmICh1aC1cdTAwM2VjaGVjayAhPSAwKSB7XG4tXHRcdHN3aXRjaCAoc2tiLVx1MDAzZWlwX3N1bW1lZCkge1xuLVx0XHRjYXNlIENIRUNLU1VNX05PTkU6XG4tXHRcdFx0c2tiLVx1MDAzZWNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCB1ZHBob2ZmLFxuLVx0XHRcdFx0XHRcdCBza2ItXHUwMDNlbGVuIC0gdWRwaG9mZiwgMCk7XG4tXHRcdFx0ZmFsbHRocm91Z2g7XG4tXHRcdGNhc2UgQ0hFQ0tTVU1fQ09NUExFVEU6XG4tI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4tXHRcdFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XG4tXHRcdFx0XHRpZiAoY3N1bV9pcHY2X21hZ2ljKFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHRcdFx0ICAgIFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHRcdFx0ICAgIHNrYi1cdTAwM2VsZW4gLSB1ZHBob2ZmLFxuLVx0XHRcdFx0XHRcdCAgICBJUFBST1RPX1VEUCxcbi1cdFx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZWNzdW0pKSB7XG4tXHRcdFx0XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXG4tXHRcdFx0XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvclwmIzM0Oyk7XG4tXHRcdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH0gZWxzZVxuLSNlbmRpZlxuLVx0XHRcdFx0aWYgKGNzdW1fdGNwdWRwX21hZ2ljKGlwX2hkcihza2IpLVx1MDAzZXNhZGRyLFxuLVx0XHRcdFx0XHRcdCAgICAgIGlwX2hkcihza2IpLVx1MDAzZWRhZGRyLFxuLVx0XHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2VsZW4gLSB1ZHBob2ZmLFxuLVx0XHRcdFx0XHRcdCAgICAgIGlwX2hkcihza2IpLVx1MDAzZXByb3RvY29sLFxuLVx0XHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2Vjc3VtKSkge1xuLVx0XHRcdFx0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLFxuLVx0XHRcdFx0XHRcdFx0IFwmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3JcJiMzNDspO1xuLVx0XHRcdFx0XHRyZXR1cm4gMDtcbi1cdFx0XHRcdH1cbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4mIzQzO1x0aWYgKCF1aC1cdTAwM2VjaGVjaylcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgaXBoLVx1MDAzZWxlbiwgSVBQUk9UT19VRFAsIGFmKSkge1xuJiM0MztcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgaXBoLVx1MDAzZW9mZixcbiYjNDM7XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvclwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdHJldHVybiAxO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xuaW5kZXggOWZlZjQzMzVkYTEzZmQuLjBiMGM1MzA0OTkzYTkxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xuQEAgLTE1MDIsMjAgJiM0MzsxNTAyLDIyIEBAIGlwX3ZzX2RyX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuICAqL1xuIGludFxuIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tXHRcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBob29rbnVtLFxuLVx0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbiYjNDM7XHRcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHVuc2lnbmVkIGludCB0b2ZmLFxuJiM0MztcdFx0dW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaClcbiB7XG4gXHRzdHJ1Y3QgcnRhYmxlXHQqcnQ7XHQvKiBSb3V0ZSB0byB0aGUgb3RoZXIgaG9zdCAqL1xuIFx0aW50IHJjO1xuIFx0aW50IGxvY2FsO1xuIFx0aW50IHJ0X21vZGUsIHdhc19pbnB1dDtcbiYjNDM7XHRib29sIGhhc19wb3J0cyA9IGZhbHNlO1xuJiM0MztcdHVuc2lnbmVkIGludCB3bGVuO1xuIFxuIFx0LyogVGhlIElDTVAgcGFja2V0IGZvciBWUy9UVU4sIFZTL0RSIGFuZCBMT0NBTE5PREUgd2lsbCBiZVxuIFx0ICAgZm9yd2FyZGVkIGRpcmVjdGx5IGhlcmUsIGJlY2F1c2UgdGhlcmUgaXMgbm8gbmVlZCB0b1xuIFx0ICAgdHJhbnNsYXRlIGFkZHJlc3MvcG9ydCBiYWNrICovXG4gXHRpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpIHtcbiBcdFx0aWYgKGNwLVx1MDAzZXBhY2tldF94bWl0KVxuLVx0XHRcdHJjID0gY3AtXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGlwaCk7XG4mIzQzO1x0XHRcdHJjID0gY3AtXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGNpcGgpO1xuIFx0XHRlbHNlXG4gXHRcdFx0cmMgPSBORl9BQ0NFUFQ7XG4gXHRcdC8qIGRvIG5vdCB0b3VjaCBza2IgYW55bW9yZSAqL1xuQEAgLTE1MzMsNyAmIzQzOzE1MzUsNyBAQCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0XHQgIElQX1ZTX1JUX01PREVfTE9DQUwgfCBJUF9WU19SVF9NT0RFX05PTl9MT0NBTCB8XG4gXHRcdCAgSVBfVlNfUlRfTU9ERV9SRFIgOiBJUF9WU19SVF9NT0RFX05PTl9MT0NBTDtcbiBcdGxvY2FsID0gX19pcF92c19nZXRfb3V0X3J0KGNwLVx1MDAzZWlwdnMsIGNwLVx1MDAzZWFmLCBza2IsIGNwLVx1MDAzZWRlc3QsIGNwLVx1MDAzZWRhZGRyLmlwLCBydF9tb2RlLFxuLVx0XHRcdFx0ICAgTlVMTCwgaXBoKTtcbiYjNDM7XHRcdFx0XHQgICBOVUxMLCBjaXBoKTtcbiBcdGlmIChsb2NhbCBcdTAwM2MgMClcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcdHJ0ID0gc2tiX3J0YWJsZShza2IpO1xuQEAgLTE1NjQsMTQgJiM0MzsxNTY2LDIxIEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXHR9XG4gXG4mIzQzO1x0d2xlbiA9IGNpcGgtXHUwMDNlbGVuO1xuJiM0MztcdGlmIChjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVENQIHx8IGNpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgfHxcbiYjNDM7XHQgICAgY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1NDVFApIHtcbiYjNDM7XHRcdHdsZW4gJiM0Mzs9IDIgKiBzaXplb2YoX191MTYpOyAvKiBBbHNvIG1hbmdsZSBwb3J0cyAqL1xuJiM0MztcdFx0aGFzX3BvcnRzID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogY29weS1vbi13cml0ZSB0aGUgcGFja2V0IGJlZm9yZSBtYW5nbGluZyBpdCAqL1xuLVx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBvZmZzZXQpKVxuJiM0MztcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgd2xlbikpXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXG4gXHRpZiAoc2tiX2Nvdyhza2IsIHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSlcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcbi1cdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwKTtcbiYjNDM7XHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMCwgdG9mZiwgaGFzX3BvcnRzKTtcbiBcbiBcdC8qIEFub3RoZXIgaGFjazogYXZvaWQgaWNtcF9zZW5kIGluIGlwX2ZyYWdtZW50ICovXG4gXHRza2ItXHUwMDNlaWdub3JlX2RmID0gMTtcbkBAIC0xNTg3LDEwICYjNDM7MTU5NiwxMiBAQCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxuIGludFxuIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tXHRcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBob29rbnVtLFxuLVx0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwdnNoKVxuJiM0MztcdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKVxuIHtcbiYjNDM7XHRib29sIGhhc19wb3J0cyA9IGZhbHNlO1xuIFx0c3RydWN0IHJ0Nl9pbmZvXHQqcnQ7XHQvKiBSb3V0ZSB0byB0aGUgb3RoZXIgaG9zdCAqL1xuJiM0MztcdHVuc2lnbmVkIGludCB3bGVuO1xuIFx0aW50IHJjO1xuIFx0aW50IGxvY2FsO1xuIFx0aW50IHJ0X21vZGU7XG5AQCAtMTYwMCw3ICYjNDM7MTYxMSw3IEBAIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHQgICB0cmFuc2xhdGUgYWRkcmVzcy9wb3J0IGJhY2sgKi9cbiBcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkge1xuIFx0XHRpZiAoY3AtXHUwMDNlcGFja2V0X3htaXQpXG4tXHRcdFx0cmMgPSBjcC1cdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgaXB2c2gpO1xuJiM0MztcdFx0XHRyYyA9IGNwLVx1MDAzZXBhY2tldF94bWl0KHNrYiwgY3AsIHBwLCBjaXBoKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHJjID0gTkZfQUNDRVBUO1xuIFx0XHQvKiBkbyBub3QgdG91Y2ggc2tiIGFueW1vcmUgKi9cbkBAIC0xNjE3LDcgJiM0MzsxNjI4LDcgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdFx0ICBJUF9WU19SVF9NT0RFX0xPQ0FMIHwgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwgfFxuIFx0XHQgIElQX1ZTX1JUX01PREVfUkRSIDogSVBfVlNfUlRfTU9ERV9OT05fTE9DQUw7XG4gXHRsb2NhbCA9IF9faXBfdnNfZ2V0X291dF9ydF92NihjcC1cdTAwM2VpcHZzLCBjcC1cdTAwM2VhZiwgc2tiLCBjcC1cdTAwM2VkZXN0LFxuLVx0XHRcdFx0ICAgICAgXHUwMDI2Y3AtXHUwMDNlZGFkZHIuaW42LCBOVUxMLCBpcHZzaCwgMCwgcnRfbW9kZSk7XG4mIzQzO1x0XHRcdFx0ICAgICAgXHUwMDI2Y3AtXHUwMDNlZGFkZHIuaW42LCBOVUxMLCBjaXBoLCAwLCBydF9tb2RlKTtcbiBcdGlmIChsb2NhbCBcdTAwM2MgMClcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcdHJ0ID0gZHN0X3J0Nl9pbmZvKHNrYl9kc3Qoc2tiKSk7XG5AQCAtMTY0OCwxNCAmIzQzOzE2NTksMjEgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcdH1cbiBcbiYjNDM7XHR3bGVuID0gY2lwaC1cdTAwM2VsZW47XG4mIzQzO1x0aWYgKGNpcGgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1AgfHwgY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1VEUCB8fFxuJiM0MztcdCAgICBjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fU0NUUCkge1xuJiM0MztcdFx0d2xlbiAmIzQzOz0gMiAqIHNpemVvZihfX3UxNik7IC8qIEFsc28gbWFuZ2xlIHBvcnRzICovXG4mIzQzO1x0XHRoYXNfcG9ydHMgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiBjb3B5LW9uLXdyaXRlIHRoZSBwYWNrZXQgYmVmb3JlIG1hbmdsaW5nIGl0ICovXG4tXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIG9mZnNldCkpXG4mIzQzO1x0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCB3bGVuKSlcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcbiBcdGlmIChza2JfY293KHNrYiwgcnQtXHUwMDNlZHN0LmRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pKVxuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFxuLVx0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDApO1xuJiM0MztcdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMsIGNpcGgpO1xuIFxuIFx0LyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi9cbiBcdHNrYi1cdTAwM2VpZ25vcmVfZGYgPSAxO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA3OjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9WUyYjMzQ7LAogICAgJiMzNDtJUF9WU19JUFY2JiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1RDUCYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19VRFAmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fU0NUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3ZzX25hdF9pY21wJiMzNDssCiAgICAmIzM0O2lwX3ZzX25hdF9pY21wX3Y2JiMzNDssCiAgICAmIzM0O2hhbmRsZV9yZXNwb25zZV9pY21wJiMzNDssCiAgICAmIzM0O2lwX3ZzX291dF9pY21wJiMzNDssCiAgICAmIzM0O2lwX3ZzX291dF9pY21wX3Y2JiMzNDssCiAgICAmIzM0O2lwX3ZzX2luX2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfaW5faWNtcF92NiYjMzQ7LAogICAgJiMzNDtpcF92c19mb3J3YXJkX2ljbXAmIzM0OywKICAgICYjMzQ7c2N0cF9jc3VtX2NoZWNrJiMzNDssCiAgICAmIzM0O3RjcF9jc3VtX2NoZWNrJiMzNDssCiAgICAmIzM0O3VkcF9jc3VtX2NoZWNrJiMzNDssCiAgICAmIzM0O2lwX3ZzX2ljbXBfeG1pdCYjMzQ7LAogICAgJiMzNDtpcF92c19pY21wX3htaXRfdjYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgSUNNUCBOQVQgaGFuZGxpbmcgYW5kIGNoZWNrc3VtIHZhbGlkYXRpb24gbG9naWMgaW4gSVBWUy4gSXQgY2hhbmdlcyBob3cgSUNNUCBwYWNrZXRzIGFyZSBwcm9jZXNzZWQsIE5BVGVkLCBhbmQgdHJhbnNtaXR0ZWQsIGFuZCB1cGRhdGVzIGNoZWNrc3VtIHZhbGlkYXRpb24gZm9yIFRDUCwgVURQLCBhbmQgU0NUUCBwcm90b2NvbHMgd2l0aGluIElQVlMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIG1vZGlmaWVkIElDTVAgaGFuZGxpbmcgYW5kIGNoZWNrc3VtIHZhbGlkYXRpb24gZnVuY3Rpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwZjMxYTU4NjZiMWM4MDAzYWU4NTJkODdlZmNhOGU4ODVkM2ZmZTU5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMjMgMDc6NTU6MTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF92cy5oIGIvaW5jbHVkZS9uZXQvaXBfdnMuaAppbmRleCA0MTdmZjUxZjYyZmM4ZS4uOWFlOWFhZDY1NTQxZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwX3ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXBfdnMuaApAQCAtMjUsNyAmIzQzOzI1LDkgQEAKICNpbmNsdWRlICZsdDtsaW51eC9uZXRmaWx0ZXIuaCZndDsJCS8qIGZvciB1bmlvbiBuZl9pbmV0X2FkZHIgKi8KICNpbmNsdWRlICZsdDtsaW51eC9pcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lwdjYuaCZndDsJCQkvKiBmb3Igc3RydWN0IGlwdjZoZHIgKi8KJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3JvdXRlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2lwdjYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2lwNl9maWIuaCZndDsKICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spCiAjaW5jbHVkZSAmbHQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaCZndDsKICNlbmRpZgpAQCAtMTk3Miw4ICYjNDM7MTk3NCw4IEBAIGludCBpcF92c190dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiBpbnQgaXBfdnNfZHJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiAJCSAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpOwogaW50IGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCi0JCSAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LAotCQkgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTsKJiM0MzsJCSAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZiwKJiM0MzsJCSAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKTsKIHZvaWQgaXBfdnNfZGVzdF9kc3RfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKTsKIAogI2lmZGVmIENPTkZJR19JUF9WU19JUFY2CkBAIC0xOTg2LDggJiM0MzsxOTg4LDggQEAgaW50IGlwX3ZzX3R1bm5lbF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIGludCBpcF92c19kcl94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIAkJICAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7CiBpbnQgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKLQkJICAgICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpOwomIzQzOwkJICAgICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHVuc2lnbmVkIGludCB0b2ZmLAomIzQzOwkJICAgICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCkBAIC0yMDU5LDE1ICYjNDM7MjA2MSwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91c2VfaGFzaDIoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKQogfQogCiB2b2lkIGlwX3ZzX25hdF9pY21wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JCSAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIpOwomIzQzOwkJICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpciwgdW5zaWduZWQgaW50IHRvZmYsCiYjNDM7CQkgICAgYm9vbCBoYXNfcG9ydHMpOwogCiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKLQkJICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpcik7CiYjNDM7CQkgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyLCB1bnNpZ25lZCBpbnQgdG9mZiwKJiM0MzsJCSAgICAgICBib29sIGhhc19wb3J0cywgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKTsKICNlbmRpZgogCi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpOwotCiBzdGF0aWMgaW5saW5lIF9fd3N1bSBpcF92c19jaGVja19kaWZmNChfX2JlMzIgb2xkLCBfX2JlMzIgbmV3LCBfX3dzdW0gb2xkc3VtKQogewogCV9fYmUzMiBkaWZmWzJdID0geyB+b2xkLCBuZXcgfTsKQEAgLTIwOTMsNiAmIzQzOzIwOTUsMzYgQEAgc3RhdGljIGlubGluZSBfX3dzdW0gaXBfdnNfY2hlY2tfZGlmZjIoX19iZTE2IG9sZCwgX19iZTE2IG5ldywgX193c3VtIG9sZHN1bSkKIAlyZXR1cm4gY3N1bV9wYXJ0aWFsKGRpZmYsIHNpemVvZihkaWZmKSwgb2xkc3VtKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jaGVja3N1bV9uZWVkZWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGFmKQomIzQzO3sKJiM0MzsJLyogQ2hlY2tzdW0gdW5uZWNlc3Nhcnkgb3IgYWxyZWFkeSB2YWxpZGF0ZWQ/ICovCiYjNDM7CWlmIChza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwkvKiBMT0NBTF9PVVQgPyAqLwomIzQzOwlpZiAoIXNrYi0mZ3Q7ZGV2IHx8IHNrYi0mZ3Q7ZGV2LSZndDtmbGFncyAmYW1wOyBJRkZfTE9PUEJBQ0spCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CS8qICFMT0NBTF9JTiAoRk9SV0FSRCkgPyAqLwomIzQzOwlpZiAoYWYgPT0gQUZfSU5FVDYpIHsKJiM0MzsJCWlmICghKGRzdF9ydDZfaW5mbyhza2JfZHN0KHNrYikpLSZndDtydDZpX2ZsYWdzICZhbXA7IFJURl9MT0NBTCkpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKCEoc2tiX3J0YWJsZShza2IpLSZndDtydF9mbGFncyAmYW1wOyBSVENGX0xPQ0FMKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayAtIHZhbGlkYXRlIGNoZWNrc3VtIGZvciBUQ1AvVURQL0lDTVAKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCQkgICAgICAgaW50IG9mZnNldCwgaW50IHByb3RvLCBpbnQgYWYpCiYjNDM7ewomIzQzOwlpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlyZXR1cm4gIW5mX2NoZWNrc3VtKHNrYiwgTkZfSU5FVF9MT0NBTF9JTiwgb2Zmc2V0LCBwcm90bywgYWYpOwomIzQzO30KJiM0MzsKIC8qIEZvcmdldCBjdXJyZW50IGNvbm50cmFjayAodW5jb25maXJtZWQpIGFuZCBhdHRhY2ggbm90cmFjayBlbnRyeSAqLwogc3RhdGljIGlubGluZSB2b2lkIGlwX3ZzX25vdHJhY2soc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYwppbmRleCBiMGUwMGJlODVjYjEyYy4uMTFjYmRiYWY1NjFkYWYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMKQEAgLTM2Nyw3ICYjNDM7MzY3LDcgQEAgc3RhdGljIGlubGluZSBpbnQgYXBwX3RjcF9wa3Rfb3V0KHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIGlwdnNoLSZndDtsZW4gJiM0Mzsgc2l6ZW9mKCp0aCkpKQogCQlyZXR1cm4gMDsKIAotCXRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgaXB2c2gtJmd0O2xlbik7CiYjNDM7CXRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IGlwdnNoLSZndDtsZW4pOwogCiAJLyoKIAkgKglSZW1lbWJlciBzZXEgbnVtYmVyIGluIGNhc2UgdGhpcyBwa3QgZ2V0cyByZXNpemVkCkBAIC00NDMsNyAmIzQzOzQ0Myw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFwcF90Y3BfcGt0X2luKHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIGlwdnNoLSZndDtsZW4gJiM0Mzsgc2l6ZW9mKCp0aCkpKQogCQlyZXR1cm4gMDsKIAotCXRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgaXB2c2gtJmd0O2xlbik7CiYjNDM7CXRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IGlwdnNoLSZndDtsZW4pOwogCiAJLyoKIAkgKglSZW1lbWJlciBzZXEgbnVtYmVyIGluIGNhc2UgdGhpcyBwa3QgZ2V0cyByZXNpemVkCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYwppbmRleCBiYWZhYjkzNDUxZDAzNy4uN2VmYTIwOWE1MTdiMWMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYwpAQCAtODY3LDcgJiM0Mzs4NjcsNyBAQCBzdGF0aWMgaW50IHN5c2N0bF9uYXRfaWNtcF9zZW5kKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKSB7IHJldHVybiAwOyB9CiAKICNlbmRpZgogCi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpCiYjNDM7c3RhdGljIF9fc3VtMTYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCkKIHsKIAlyZXR1cm4gY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIG9mZnNldCwgc2tiLSZndDtsZW4gLSBvZmZzZXQsIDApKTsKIH0KQEAgLTkyNCwxMyAmIzQzOzkyNCwxMyBAQCBzdGF0aWMgaW50IGlwX3ZzX3JvdXRlX21lX2hhcmRlcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLAogICogLSBpbm91dDogMT1pbi0mZ3Q7b3V0LCAwPW91dC0mZ3Q7aW4KICAqLwogdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAotCQkgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQpCiYjNDM7CQkgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQsIHVuc2lnbmVkIGludCB0b2ZmLAomIzQzOwkJICAgIGJvb2wgaGFzX3BvcnRzKQogewogCXN0cnVjdCBpcGhkciAqaXBoCSA9IGlwX2hkcihza2IpOwotCXVuc2lnbmVkIGludCBpY21wX29mZnNldCA9IGlwaC0mZ3Q7aWhsKjQ7Ci0Jc3RydWN0IGljbXBoZHIgKmljbXBoCSA9IChzdHJ1Y3QgaWNtcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOwotCQkJCQkJICAgICAgaWNtcF9vZmZzZXQpOwomIzQzOwlzdHJ1Y3QgaWNtcGhkciAqaWNtcGgJID0gKHN0cnVjdCBpY21waGRyICopKHNrYi0mZ3Q7ZGF0YSAmIzQzOyB0b2ZmKTsKIAlzdHJ1Y3QgaXBoZHIgKmNpcGgJID0gKHN0cnVjdCBpcGhkciAqKShpY21waCAmIzQzOyAxKTsKJiM0MzsJdW5zaWduZWQgaW50IGNvZmYgX19tYXliZV91bnVzZWQgPSB0b2ZmICYjNDM7IHNpemVvZihzdHJ1Y3QgaWNtcGhkcik7CiAKIAlpZiAoaW5vdXQpIHsKIAkJaXBoLSZndDtzYWRkciA9IGNwLSZndDt2YWRkci5pcDsKQEAgLTk0NSw4ICYjNDM7OTQ1LDcgQEAgdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCX0KIAogCS8qIHRoZSBUQ1AvVURQL1NDVFAgcG9ydCAqLwotCWlmIChJUFBST1RPX1RDUCA9PSBjaXBoLSZndDtwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBjaXBoLSZndDtwcm90b2NvbCB8fAotCSAgICBJUFBST1RPX1NDVFAgPT0gY2lwaC0mZ3Q7cHJvdG9jb2wpIHsKJiM0MzsJaWYgKGhhc19wb3J0cykgewogCQlfX2JlMTYgKnBvcnRzID0gKHZvaWQgKiljaXBoICYjNDM7IGNpcGgtJmd0O2lobCo0OwogCiAJCWlmIChpbm91dCkKQEAgLTk1Nyw0OCAmIzQzOzk1Niw0MCBAQCB2b2lkIGlwX3ZzX25hdF9pY21wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAKIAkvKiBBbmQgZmluYWxseSB0aGUgSUNNUCBjaGVja3N1bSAqLwogCWljbXBoLSZndDtjaGVja3N1bSA9IDA7Ci0JaWNtcGgtJmd0O2NoZWNrc3VtID0gaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpY21wX29mZnNldCk7CiYjNDM7CWljbXBoLSZndDtjaGVja3N1bSA9IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgdG9mZik7CiAJc2tiLSZndDtpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAogCWlmIChpbm91dCkKLQkJSVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsCi0JCQkmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBvdXRnb2luZyBJQ01QJiMzNDspOwomIzQzOwkJSVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgY29mZiwKJiM0MzsJCQkgICAgICAmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBvdXRnb2luZyBJQ01QJiMzNDspOwogCWVsc2UKLQkJSVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsCi0JCQkmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QJiMzNDspOwomIzQzOwkJSVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgY29mZiwKJiM0MzsJCQkgICAgICAmIzM0O0ZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QJiMzNDspOwogfQogCiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKLQkJICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0KQomIzQzOwkJICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0LCB1bnNpZ25lZCBpbnQgdG9mZiwKJiM0MzsJCSAgICAgICBib29sIGhhc19wb3J0cywgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKQogewogCXN0cnVjdCBpcHY2aGRyICppcGgJID0gaXB2Nl9oZHIoc2tiKTsKLQl1bnNpZ25lZCBpbnQgaWNtcF9vZmZzZXQgPSAwOwotCXVuc2lnbmVkIGludCBvZmZzCSA9IDA7IC8qIGhlYWRlciBvZmZzZXQqLwotCWludCBwcm90b2NvbDsKIAlzdHJ1Y3QgaWNtcDZoZHIgKmljbXBoOwotCXN0cnVjdCBpcHY2aGRyICpjaXBoOwotCXVuc2lnbmVkIHNob3J0IGZyYWdvZmZzOwomIzQzOwlzdHJ1Y3QgaXB2NmhkciAqY2loOwogCi0JaXB2Nl9maW5kX2hkcihza2IsICZhbXA7aWNtcF9vZmZzZXQsIElQUFJPVE9fSUNNUFY2LCAmYW1wO2ZyYWdvZmZzLCBOVUxMKTsKLQlpY21waCA9IChzdHJ1Y3QgaWNtcDZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgaWNtcF9vZmZzZXQpOwotCW9mZnMgPSBpY21wX29mZnNldCAmIzQzOyBzaXplb2Yoc3RydWN0IGljbXA2aGRyKTsKLQljaXBoID0gKHN0cnVjdCBpcHY2aGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IG9mZnMpOwotCi0JcHJvdG9jb2wgPSBpcHY2X2ZpbmRfaGRyKHNrYiwgJmFtcDtvZmZzLCAtMSwgJmFtcDtmcmFnb2ZmcywgTlVMTCk7CiYjNDM7CWljbXBoID0gKHN0cnVjdCBpY21wNmhkciAqKShza2ItJmd0O2RhdGEgJiM0MzsgdG9mZik7CiYjNDM7CWNpaCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2ItJmd0O2RhdGEgJiM0MzsgY2lwaC0mZ3Q7b2ZmKTsKIAogCWlmIChpbm91dCkgewogCQlpcGgtJmd0O3NhZGRyID0gY3AtJmd0O3ZhZGRyLmluNjsKLQkJY2lwaC0mZ3Q7ZGFkZHIgPSBjcC0mZ3Q7dmFkZHIuaW42OwomIzQzOwkJY2loLSZndDtkYWRkciA9IGNwLSZndDt2YWRkci5pbjY7CiAJfSBlbHNlIHsKIAkJaXBoLSZndDtkYWRkciA9IGNwLSZndDtkYWRkci5pbjY7Ci0JCWNpcGgtJmd0O3NhZGRyID0gY3AtJmd0O2RhZGRyLmluNjsKJiM0MzsJCWNpaC0mZ3Q7c2FkZHIgPSBjcC0mZ3Q7ZGFkZHIuaW42OwogCX0KIAogCS8qIHRoZSBUQ1AvVURQL1NDVFAgcG9ydCAqLwotCWlmICghZnJhZ29mZnMgJmFtcDsmYW1wOyAoSVBQUk9UT19UQ1AgPT0gcHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gcHJvdG9jb2wgfHwKLQkJCSAgSVBQUk9UT19TQ1RQID09IHByb3RvY29sKSkgewotCQlfX2JlMTYgKnBvcnRzID0gKHZvaWQgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0Mzsgb2Zmcyk7CiYjNDM7CWlmIChoYXNfcG9ydHMpIHsKJiM0MzsJCV9fYmUxNiAqcG9ydHMgPSAodm9pZCAqKShza2ItJmd0O2RhdGEgJiM0MzsgY2lwaC0mZ3Q7bGVuKTsKIAogCQlJUF9WU19EQkcoMTEsICYjMzQ7JXMoKSBjaGFuZ2VkIHBvcnQgJWQgdG8gJWRcbiYjMzQ7LCBfX2Z1bmNfXywKIAkJCSAgICAgIG50b2hzKGlub3V0ID8gcG9ydHNbMV0gOiBwb3J0c1swXSksCkBAIC0xMDExLDE5ICYjNDM7MTAwMiwxNyBAQCB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAKIAkvKiBBbmQgZmluYWxseSB0aGUgSUNNUCBjaGVja3N1bSAqLwogCWljbXBoLSZndDtpY21wNl9ja3N1bSA9IH5jc3VtX2lwdjZfbWFnaWMoJmFtcDtpcGgtJmd0O3NhZGRyLCAmYW1wO2lwaC0mZ3Q7ZGFkZHIsCi0JCQkJCSAgICAgIHNrYi0mZ3Q7bGVuIC0gaWNtcF9vZmZzZXQsCiYjNDM7CQkJCQkgICAgICBza2ItJmd0O2xlbiAtIHRvZmYsCiAJCQkJCSAgICAgIElQUFJPVE9fSUNNUFY2LCAwKTsKLQlza2ItJmd0O2NzdW1fc3RhcnQgPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSAtIHNrYi0mZ3Q7aGVhZCAmIzQzOyBpY21wX29mZnNldDsKJiM0MzsJc2tiLSZndDtjc3VtX3N0YXJ0ID0gc2tiX2hlYWRyb29tKHNrYikgJiM0MzsgdG9mZjsKIAlza2ItJmd0O2NzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSk7CiAJc2tiLSZndDtpcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMOwogCiAJaWYgKGlub3V0KQotCQlJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwKLQkJCSAgICAgICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLAomIzQzOwkJSVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsIGNpcGgtJmd0O29mZiwKIAkJCSAgICAgICYjMzQ7Rm9yd2FyZGluZyBhbHRlcmVkIG91dGdvaW5nIElDTVB2NiYjMzQ7KTsKIAllbHNlCi0JCUlQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQ2LCBwcCwgc2tiLAotCQkJICAgICAgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsCiYjNDM7CQlJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwgY2lwaC0mZ3Q7b2ZmLAogCQkJICAgICAgJiMzNDtGb3J3YXJkaW5nIGFsdGVyZWQgaW5jb21pbmcgSUNNUHY2JiMzNDspOwogfQogI2VuZGlmCkBAIC0xMDMzLDM2ICYjNDM7MTAyMiw0MSBAQCB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAgKi8KIHN0YXRpYyBpbnQgaGFuZGxlX3Jlc3BvbnNlX2ljbXAoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCXVuaW9uIG5mX2luZXRfYWRkciAqc25ldCwKLQkJCQlfX3U4IHByb3RvY29sLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiYjNDM7CQkJCXN0cnVjdCBpcF92c19jb25uICpjcCwKIAkJCQlzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAotCQkJCXVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBpaGwsCi0JCQkJdW5zaWduZWQgaW50IGhvb2tudW0pCiYjNDM7CQkJCXN0cnVjdCBpcF92c19pcGhkciAqY2lwaCwKJiM0MzsJCQkJdW5zaWduZWQgaW50IHRvZmYsIHVuc2lnbmVkIGludCBob29rbnVtKQogewomIzQzOwlpbnQgaXByb3RvID0gYWYgPT0gQUZfSU5FVDYgPyBJUFBST1RPX0lDTVBWNiA6IElQUFJPVE9fSUNNUDsKIAl1bnNpZ25lZCBpbnQgdmVyZGljdCA9IE5GX0RST1A7CiYjNDM7CXVuc2lnbmVkIGludCBjdG9mZiA9IGNpcGgtJmd0O2xlbjsKJiM0MzsJYm9vbCBoYXNfcG9ydHMgPSBmYWxzZTsKIAogCWlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkKIAkJZ290byBhZnRlcl9uYXQ7CiAKIAkvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi8KLQlpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgJmFtcDsmYW1wOyBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIGlobCkpIHsKJiM0MzsJaWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCB0b2ZmLCBpcHJvdG8sIGFmKSkgewogCQkvKiBGYWlsZWQgY2hlY2tzdW0hICovCiAJCUlQX1ZTX0RCR19CVUYoMSwgJiMzNDtGb3J3YXJkIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVzIVxuJiMzNDssCiAJCQkgICAgICBJUF9WU19EQkdfQUREUihhZiwgc25ldCkpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoSVBQUk9UT19UQ1AgPT0gcHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gcHJvdG9jb2wgfHwKLQkgICAgSVBQUk9UT19TQ1RQID09IHByb3RvY29sKQotCQlvZmZzZXQgJiM0Mzs9IDIgKiBzaXplb2YoX191MTYpOwotCWlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSkKJiM0MzsJaWYgKGNpcGgtJmd0O3Byb3RvY29sID09IElQUFJPVE9fVENQIHx8IGNpcGgtJmd0O3Byb3RvY29sID09IElQUFJPVE9fVURQIHx8CiYjNDM7CSAgICBjaXBoLSZndDtwcm90b2NvbCA9PSBJUFBST1RPX1NDVFApIHsKJiM0MzsJCWN0b2ZmICYjNDM7PSAyICogc2l6ZW9mKF9fdTE2KTsKJiM0MzsJCWhhc19wb3J0cyA9IHRydWU7CiYjNDM7CX0KJiM0MzsJaWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBjdG9mZikpCiAJCWdvdG8gb3V0OwogCiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKIAlpZiAoYWYgPT0gQUZfSU5FVDYpCi0JCWlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAxKTsKJiM0MzsJCWlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAxLCB0b2ZmLCBoYXNfcG9ydHMsIGNpcGgpOwogCWVsc2UKICNlbmRpZgotCQlpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSk7CiYjNDM7CQlpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzKTsKIAogCWlmIChpcF92c19yb3V0ZV9tZV9oYXJkZXIoY3AtJmd0O2lwdnMsIGFmLCBza2IsIGhvb2tudW0pKQogCQlnb3RvIG91dDsKQEAgLTEwOTAsOSAmIzQzOzEwODQsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAqCUN1cnJlbnRseSBoYW5kbGVzIGVycm9yIHR5cGVzIC0gdW5yZWFjaGFibGUsIHF1ZW5jaCwgdHRsIGV4Y2VlZGVkLgogICovCiBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICBpbnQgKnJlbGF0ZWQsIHVuc2lnbmVkIGludCBob29rbnVtKQomIzQzOwkJCSAgaW50ICpyZWxhdGVkLCB1bnNpZ25lZCBpbnQgaG9va251bSwKJiM0MzsJCQkgIHN0cnVjdCBpcF92c19pcGhkciAqaXB2c2gpCiB7Ci0Jc3RydWN0IGlwaGRyICppcGg7CiAJc3RydWN0IGljbXBoZHIJX2ljbXBoLCAqaWM7CiAJc3RydWN0IGlwaGRyCV9jaXBoLCAqY2loOwkvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi8KIAlzdHJ1Y3QgaXBfdnNfaXBoZHIgY2lwaDsKQEAgLTExMDcsMTcgJiM0MzsxMTAxLDE5IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKGlwX2lzX2ZyYWdtZW50KGlwX2hkcihza2IpKSkgewogCQlpZiAoaXBfdnNfZ2F0aGVyX2ZyYWdzKGlwdnMsIHNrYiwgaXBfdnNfZGVmcmFnX3VzZXIoaG9va251bSkpKQogCQkJcmV0dXJuIE5GX1NUT0xFTjsKJiM0MzsJCWlmICghaXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQsIHNrYiwgZmFsc2UsIGlwdnNoKSkKJiM0MzsJCQlyZXR1cm4gTkZfQUNDRVBUOwogCX0KIAotCWlwaCA9IGlwX2hkcihza2IpOwotCW9mZnNldCA9IGlobCA9IGlwaC0mZ3Q7aWhsICogNDsKJiM0MzsJaWhsID0gaXB2c2gtJmd0O2xlbjsKJiM0MzsJb2Zmc2V0ID0gaXB2c2gtJmd0O2xlbjsKIAlpYyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9pY21waCksICZhbXA7X2ljbXBoKTsKIAlpZiAoaWMgPT0gTlVMTCkKIAkJcmV0dXJuIE5GX0RST1A7CiAKIAlJUF9WU19EQkcoMTIsICYjMzQ7T3V0Z29pbmcgSUNNUCAoJWQsJWQpICVwSTQtJmd0OyVwSTRcbiYjMzQ7LAogCQkgIGljLSZndDt0eXBlLCBudG9ocyhpY21wX2lkKGljKSksCi0JCSAgJmFtcDtpcGgtJmd0O3NhZGRyLCAmYW1wO2lwaC0mZ3Q7ZGFkZHIpOwomIzQzOwkJICAmYW1wO2lwdnNoLSZndDtzYWRkci5pcCwgJmFtcDtpcHZzaC0mZ3Q7ZGFkZHIuaXApOwogCiAJLyoKIAkgKiBXb3JrIHRocm91Z2ggc2VlaW5nIGlmIHRoaXMgaXMgZm9yIHVzLgpAQCAtMTEzNiw3ICYjNDM7MTEzMiw3IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAJLyogTm93IGZpbmQgdGhlIGNvbnRhaW5lZCBJUCBoZWFkZXIgKi8KIAlvZmZzZXQgJiM0Mzs9IHNpemVvZihfaWNtcGgpOwogCWNpaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9jaXBoKSwgJmFtcDtfY2lwaCk7Ci0JaWYgKGNpaCA9PSBOVUxMKQomIzQzOwlpZiAoIShjaWggJmFtcDsmYW1wOyBjaWgtJmd0O3ZlcnNpb24gPT0gNCAmYW1wOyZhbXA7IGNpaC0mZ3Q7aWhsICZndDs9IDUpKQogCQlyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi8KIAogCXBwID0gaXBfdnNfcHJvdG9fZ2V0KGNpaC0mZ3Q7cHJvdG9jb2wpOwpAQCAtMTE0NCw4ICYjNDM7MTE0MCw3IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKIAkvKiBJcyB0aGUgZW1iZWRkZWQgcHJvdG9jb2wgaGVhZGVyIHByZXNlbnQ/ICovCi0JaWYgKHVubGlrZWx5KGNpaC0mZ3Q7ZnJhZ19vZmYgJmFtcDsgaHRvbnMoSVBfT0ZGU0VUKSAmYW1wOyZhbXA7Ci0JCSAgICAgcHAtJmd0O2RvbnRfZGVmcmFnKSkKJiM0MzsJaWYgKHVubGlrZWx5KGNpaC0mZ3Q7ZnJhZ19vZmYgJmFtcDsgaHRvbnMoSVBfT0ZGU0VUKSAmYW1wOyZhbXA7ICFwcC0mZ3Q7ZG9udF9kZWZyYWcpKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCiAJSVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgb2Zmc2V0LApAQCAtMTE1OSw5ICYjNDM7MTE1NCw5IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKCFjcCkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAotCXNuZXQuaXAgPSBpcGgtJmd0O3NhZGRyOwotCXJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVULCBza2IsICZhbXA7c25ldCwgY2loLSZndDtwcm90b2NvbCwgY3AsCi0JCQkJICAgIHBwLCBjaXBoLmxlbiwgaWhsLCBob29rbnVtKTsKJiM0MzsJc25ldC5pcCA9IGlwdnNoLSZndDtzYWRkci5pcDsKJiM0MzsJcmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQsIHNrYiwgJmFtcDtzbmV0LCBjcCwgcHAsICZhbXA7Y2lwaCwgaWhsLAomIzQzOwkJCQkgICAgaG9va251bSk7CiB9CiAKICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgpAQCAtMTE3NCw3ICYjNDM7MTE2OSw2IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAJc3RydWN0IGlwX3ZzX2Nvbm4gKmNwOwogCXN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7CiAJdW5pb24gbmZfaW5ldF9hZGRyIHNuZXQ7Ci0JdW5zaWduZWQgaW50IG9mZnNldDsKIAogCSpyZWxhdGVkID0gMTsKIAlpYyA9IGZyYWdfc2FmZV9za2JfaHAoc2tiLCBpcHZzaC0mZ3Q7bGVuLCBzaXplb2YoX2ljbXBoKSwgJmFtcDtfaWNtcGgpOwpAQCAtMTIxMCw2ICYjNDM7MTIwNCwxMCBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmICghcHApCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKJiM0MzsJLyogSXMgdGhlIGVtYmVkZGVkIHByb3RvY29sIGhlYWRlciBwcmVzZW50PyAqLwomIzQzOwlpZiAodW5saWtlbHkoY2lwaC5mcmFnb2ZmcyAmYW1wOyZhbXA7ICFwcC0mZ3Q7ZG9udF9kZWZyYWcpKQomIzQzOwkJcmV0dXJuIE5GX0FDQ0VQVDsKJiM0MzsKIAkvKiBUaGUgZW1iZWRkZWQgaGVhZGVycyBjb250YWluIHNvdXJjZSBhbmQgZGVzdCBpbiByZXZlcnNlIG9yZGVyICovCiAJY3AgPSBJTkRJUkVDVF9DQUxMXzEocHAtJmd0O2Nvbm5fb3V0X2dldCwgaXBfdnNfY29ubl9vdXRfZ2V0X3Byb3RvLAogCQkJICAgICBpcHZzLCBBRl9JTkVUNiwgc2tiLCAmYW1wO2NpcGgpOwpAQCAtMTIxNyw5ICYjNDM7MTIxNSw4IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKIAlzbmV0LmluNiA9IGNpcGguc2FkZHIuaW42OwotCW9mZnNldCA9IGNpcGgubGVuOwotCXJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVUNiwgc2tiLCAmYW1wO3NuZXQsIGNpcGgucHJvdG9jb2wsIGNwLAotCQkJCSAgICBwcCwgb2Zmc2V0LCBpcHZzaC0mZ3Q7bGVuLCBob29rbnVtKTsKJiM0MzsJcmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQ2LCBza2IsICZhbXA7c25ldCwgY3AsIHBwLCAmYW1wO2NpcGgsCiYjNDM7CQkJCSAgICBpcHZzaC0mZ3Q7bGVuLCBob29rbnVtKTsKIH0KICNlbmRpZgogCkBAIC0xNTQ1LDcgJiM0MzsxNTQyLDggQEAgaXBfdnNfb3V0X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXQKICNlbmRpZgogCQlpZiAodW5saWtlbHkoaXBoLnByb3RvY29sID09IElQUFJPVE9fSUNNUCkpIHsKIAkJCWludCByZWxhdGVkOwotCQkJaW50IHZlcmRpY3QgPSBpcF92c19vdXRfaWNtcChpcHZzLCBza2IsICZhbXA7cmVsYXRlZCwgaG9va251bSk7CiYjNDM7CQkJaW50IHZlcmRpY3QgPSBpcF92c19vdXRfaWNtcChpcHZzLCBza2IsICZhbXA7cmVsYXRlZCwKJiM0MzsJCQkJCQkgICAgIGhvb2tudW0sICZhbXA7aXBoKTsKIAogCQkJaWYgKHJlbGF0ZWQpCiAJCQkJcmV0dXJuIHZlcmRpY3Q7CkBAIC0xNzUzLDkgJiM0MzsxNzUxLDggQEAgc3RhdGljIGludCBpcHZzX2dyZV9kZWNhcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAqLwogc3RhdGljIGludAogaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLAotCSAgICAgIHVuc2lnbmVkIGludCBob29rbnVtKQomIzQzOwkgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpCiB7Ci0Jc3RydWN0IGlwaGRyICppcGg7CiAJc3RydWN0IGljbXBoZHIJX2ljbXBoLCAqaWM7CiAJc3RydWN0IGlwaGRyCV9jaXBoLCAqY2loOwkvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi8KIAlzdHJ1Y3QgaXBfdnNfaXBoZHIgY2lwaDsKQEAgLTE3NjUsNyAmIzQzOzE3NjIsNyBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsCiAJdW5zaWduZWQgaW50IG9mZnNldCwgb2Zmc2V0MiwgaWhsLCB2ZXJkaWN0OwogCWJvb2wgdHVubmVsLCBuZXdfY3AgPSBmYWxzZTsKIAl1bmlvbiBuZl9pbmV0X2FkZHIgKnJhZGRyOwotCWNoYXIgKm91dGVyX3Byb3RvID0gJiMzNDtJUElQJiMzNDs7CiYjNDM7CWNoYXIgKm91dGVyX3Byb3RvIF9fbWF5YmVfdW51c2VkID0gJiMzNDtJUElQJiMzNDs7CiAJdW5zaWduZWQgaW50IGhsZW5faXBpcDsKIAlpbnQgdWxlbiA9IDA7CiAKQEAgLTE3NzUsMTcgJiM0MzsxNzcyLDE5IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCwKIAlpZiAoaXBfaXNfZnJhZ21lbnQoaXBfaGRyKHNrYikpKSB7CiAJCWlmIChpcF92c19nYXRoZXJfZnJhZ3MoaXB2cywgc2tiLCBpcF92c19kZWZyYWdfdXNlcihob29rbnVtKSkpCiAJCQlyZXR1cm4gTkZfU1RPTEVOOwomIzQzOwkJaWYgKCFpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVCwgc2tiLCBmYWxzZSwgaXBoKSkKJiM0MzsJCQlyZXR1cm4gTkZfQUNDRVBUOwogCX0KIAotCWlwaCA9IGlwX2hkcihza2IpOwotCW9mZnNldCA9IGlobCA9IGlwaC0mZ3Q7aWhsICogNDsKJiM0MzsJaWhsID0gaXBoLSZndDtsZW47CiYjNDM7CW9mZnNldCA9IGlwaC0mZ3Q7bGVuOwogCWljID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2ljbXBoKSwgJmFtcDtfaWNtcGgpOwogCWlmIChpYyA9PSBOVUxMKQogCQlyZXR1cm4gTkZfRFJPUDsKIAogCUlQX1ZTX0RCRygxMiwgJiMzNDtJbmNvbWluZyBJQ01QICglZCwlZCkgJXBJNC0mZ3Q7JXBJNFxuJiMzNDssCiAJCSAgaWMtJmd0O3R5cGUsIG50b2hzKGljbXBfaWQoaWMpKSwKLQkJICAmYW1wO2lwaC0mZ3Q7c2FkZHIsICZhbXA7aXBoLSZndDtkYWRkcik7CiYjNDM7CQkgICZhbXA7aXBoLSZndDtzYWRkci5pcCwgJmFtcDtpcGgtJmd0O2RhZGRyLmlwKTsKIAogCS8qCiAJICogV29yayB0aHJvdWdoIHNlZWluZyBpZiB0aGlzIGlzIGZvciB1cy4KQEAgLTE4NjcsOCAmIzQzOzE4NjYsNyBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsCiAJcHAgPSBwZC0mZ3Q7cHA7CiAKIAkvKiBJcyB0aGUgZW1iZWRkZWQgcHJvdG9jb2wgaGVhZGVyIHByZXNlbnQ/ICovCi0JaWYgKHVubGlrZWx5KGNpaC0mZ3Q7ZnJhZ19vZmYgJmFtcDsgaHRvbnMoSVBfT0ZGU0VUKSAmYW1wOyZhbXA7Ci0JCSAgICAgcHAtJmd0O2RvbnRfZGVmcmFnKSkKJiM0MzsJaWYgKHVubGlrZWx5KGNpaC0mZ3Q7ZnJhZ19vZmYgJmFtcDsgaHRvbnMoSVBfT0ZGU0VUKSAmYW1wOyZhbXA7ICFwcC0mZ3Q7ZG9udF9kZWZyYWcpKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCiAJSVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgb2Zmc2V0LApAQCAtMTg3Niw3ICYjNDM7MTg3NCw2IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCwKIAogCW9mZnNldDIgPSBvZmZzZXQ7CiAJaXBfdnNfZmlsbF9pcGhfc2tiX2ljbXAoQUZfSU5FVCwgc2tiLCBvZmZzZXQsICF0dW5uZWwsICZhbXA7Y2lwaCk7Ci0Jb2Zmc2V0ID0gY2lwaC5sZW47CiAKIAkvKiBUaGUgZW1iZWRkZWQgaGVhZGVycyBjb250YWluIHNvdXJjZSBhbmQgZGVzdCBpbiByZXZlcnNlIG9yZGVyLgogCSAqIEZvciBJUElQL1VEUC9HUkUgdHVubmVsIHRoaXMgaXMgZXJyb3IgZm9yIHJlcXVlc3QsIG5vdCBmb3IgcmVwbHkuCkBAIC0xODk4LDEwICYjNDM7MTg5NSwxMSBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsCiAJdmVyZGljdCA9IE5GX0RST1A7CiAKIAkvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi8KLQlpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgJmFtcDsmYW1wOyBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIGlobCkpIHsKJiM0MzsJaWYgKChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSB8fCB0dW5uZWwpICZhbXA7JmFtcDsKJiM0MzsJICAgICFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpaGwsIElQUFJPVE9fSUNNUCwgQUZfSU5FVCkpIHsKIAkJLyogRmFpbGVkIGNoZWNrc3VtISAqLwogCQlJUF9WU19EQkcoMSwgJiMzNDtJbmNvbWluZyBJQ01QOiBmYWlsZWQgY2hlY2tzdW0gZnJvbSAlcEk0IVxuJiMzNDssCi0JCQkgICZhbXA7aXBoLSZndDtzYWRkcik7CiYjNDM7CQkJICAmYW1wO2lwaC0mZ3Q7c2FkZHIuaXApOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTE5NjksMTAgJiM0MzsxOTY3LDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLAogCiAJLyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovCiAJaXBfdnNfaW5fc3RhdHMoY3AsIHNrYik7Ci0JaWYgKElQUFJPVE9fVENQID09IGNpaC0mZ3Q7cHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2loLSZndDtwcm90b2NvbCB8fAotCSAgICBJUFBST1RPX1NDVFAgPT0gY2loLSZndDtwcm90b2NvbCkKLQkJb2Zmc2V0ICYjNDM7PSAyICogc2l6ZW9mKF9fdTE2KTsKLQl2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0KHNrYiwgY3AsIHBwLCBvZmZzZXQsIGhvb2tudW0sICZhbXA7Y2lwaCk7CiYjNDM7CXZlcmRpY3QgPSBpcF92c19pY21wX3htaXQoc2tiLCBjcCwgcHAsIGlwaC0mZ3Q7bGVuLCBob29rbnVtLCAmYW1wO2NpcGgpOwogCiBvdXQ6CiAJaWYgKGxpa2VseSghbmV3X2NwKSkKQEAgLTIwMzIsOCAmIzQzOzIwMjcsOCBAQCBzdGF0aWMgaW50IGlwX3ZzX2luX2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAJcHAgPSBwZC0mZ3Q7cHA7CiAKLQkvKiBDYW5ub3QgaGFuZGxlIGZyYWdtZW50ZWQgZW1iZWRkZWQgcHJvdG9jb2wgKi8KLQlpZiAoY2lwaC5mcmFnb2ZmcykKJiM0MzsJLyogSXMgdGhlIGVtYmVkZGVkIHByb3RvY29sIGhlYWRlciBwcmVzZW50PyAqLwomIzQzOwlpZiAoY2lwaC5mcmFnb2ZmcyAmYW1wOyZhbXA7ICFwcC0mZ3Q7ZG9udF9kZWZyYWcpCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKIAlJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwgb2Zmc2V0LApAQCAtMjA1NywyMyAmIzQzOzIwNTIsMjIgQEAgc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQluZXdfY3AgPSB0cnVlOwogCX0KIAotCS8qIFZTL1RVTiwgVlMvRFIgYW5kIExPQ0FMTk9ERSBqdXN0IGxldCBpdCBnbyAqLwotCWlmICgoaG9va251bSA9PSBORl9JTkVUX0xPQ0FMX09VVCkgJmFtcDsmYW1wOwotCSAgICAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpKSB7Ci0JCXZlcmRpY3QgPSBORl9BQ0NFUFQ7CiYjNDM7CXZlcmRpY3QgPSBORl9EUk9QOwomIzQzOwomIzQzOwkvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi8KJiM0MzsJaWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApID09IElQX1ZTX0NPTk5fRl9NQVNRICZhbXA7JmFtcDsKJiM0MzsJICAgICFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpcGgtJmd0O2xlbiwgSVBQUk9UT19JQ01QVjYsCiYjNDM7CQkJCQkgQUZfSU5FVDYpKSB7CiYjNDM7CQkvKiBGYWlsZWQgY2hlY2tzdW0hICovCiYjNDM7CQlJUF9WU19EQkcoMSwgJiMzNDtJbmNvbWluZyBJQ01QdjY6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVwSTZjIVxuJiMzNDssCiYjNDM7CQkJICAmYW1wO2lwaC0mZ3Q7c2FkZHIpOwogCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBkbyB0aGUgc3RhdGlzdGljcyBhbmQgcHV0IGl0IGJhY2sgKi8KIAlpcF92c19pbl9zdGF0cyhjcCwgc2tiKTsKIAotCS8qIE5lZWQgdG8gbWFuZ2xlIGNvbnRhaW5lZCBJUHY2IGhlYWRlciBpbiBJQ01QdjYgcGFja2V0ICovCi0Jb2Zmc2V0ID0gY2lwaC5sZW47Ci0JaWYgKElQUFJPVE9fVENQID09IGNpcGgucHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2lwaC5wcm90b2NvbCB8fAotCSAgICBJUFBST1RPX1NDVFAgPT0gY2lwaC5wcm90b2NvbCkKLQkJb2Zmc2V0ICYjNDM7PSAyICogc2l6ZW9mKF9fdTE2KTsgLyogQWxzbyBtYW5nbGUgcG9ydHMgKi8KLQotCXZlcmRpY3QgPSBpcF92c19pY21wX3htaXRfdjYoc2tiLCBjcCwgcHAsIG9mZnNldCwgaG9va251bSwgJmFtcDtjaXBoKTsKJiM0MzsJdmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdF92Nihza2IsIGNwLCBwcCwgaXBoLSZndDtsZW4sIGhvb2tudW0sICZhbXA7Y2lwaCk7CiAKIG91dDoKIAlpZiAobGlrZWx5KCFuZXdfY3ApKQpAQCAtMjE1Miw3ICYjNDM7MjE0Niw3IEBAIGlwX3ZzX2luX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlCiAJCWlmICh1bmxpa2VseShpcGgucHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QKSkgewogCQkJaW50IHJlbGF0ZWQ7CiAJCQlpbnQgdmVyZGljdCA9IGlwX3ZzX2luX2ljbXAoaXB2cywgc2tiLCAmYW1wO3JlbGF0ZWQsCi0JCQkJCQkgICAgaG9va251bSk7CiYjNDM7CQkJCQkJICAgIGhvb2tudW0sICZhbXA7aXBoKTsKIAogCQkJaWYgKHJlbGF0ZWQpCiAJCQkJcmV0dXJuIHZlcmRpY3Q7CkBAIC0yMjg4LDYgJiM0MzsyMjgyLDcgQEAgaXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJCSAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSkKIHsKIAlzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IG5ldF9pcHZzKHN0YXRlLSZndDtuZXQpOwomIzQzOwlzdHJ1Y3QgaXBfdnNfaXBoZHIgaXBoZHI7CiAJaW50IHI7CiAKIAkvKiBpcHZzIGVuYWJsZWQgaW4gdGhpcyBuZXRucyA/ICovCkBAIC0yMjk3LDEwICYjNDM7MjI5Miw5IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmIChzdGF0ZS0mZ3Q7cGYgPT0gTkZQUk9UT19JUFY0KSB7CiAJCWlmIChpcF9oZHIoc2tiKS0mZ3Q7cHJvdG9jb2wgIT0gSVBQUk9UT19JQ01QKQogCQkJcmV0dXJuIE5GX0FDQ0VQVDsKJiM0MzsJCWlwX3ZzX2ZpbGxfaXBoX3NrYihBRl9JTkVULCBza2IsIGZhbHNlLCAmYW1wO2lwaGRyKTsKICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgogCX0gZWxzZSB7Ci0JCXN0cnVjdCBpcF92c19pcGhkciBpcGhkcjsKLQogCQlpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVDYsIHNrYiwgZmFsc2UsICZhbXA7aXBoZHIpOwogCiAJCWlmIChpcGhkci5wcm90b2NvbCAhPSBJUFBST1RPX0lDTVBWNikKQEAgLTIzMTAsNyAmIzQzOzIzMDQsNyBAQCBpcF92c19mb3J3YXJkX2ljbXAodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKICNlbmRpZgogCX0KIAotCXJldHVybiBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgJmFtcDtyLCBzdGF0ZS0mZ3Q7aG9vayk7CiYjNDM7CXJldHVybiBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgJmFtcDtyLCBzdGF0ZS0mZ3Q7aG9vaywgJmFtcDtpcGhkcik7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgaXBfdnNfb3BzNFtdID0gewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMKaW5kZXggYzY3MzE3YmUxN2RmYWYuLjNkYmQzMDk2ZTE2MzdiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMKQEAgLTExLDcgJiM0MzsxMSw3IEBACiAKIHN0YXRpYyBpbnQKIHNjdHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JCXVuc2lnbmVkIGludCBzY3RwaG9mZik7CiYjNDM7CQlzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7CiAKIHN0YXRpYyBpbnQKIHNjdHBfY29ubl9zY2hlZHVsZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMTA5LDcgJiM0MzsxMDksNyBAQCBzY3RwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQlpbnQgcmV0OwogCiAJCS8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqLwotCQlpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC0mZ3Q7YWYsIHNrYiwgcHAsIHNjdHBob2ZmKSkKJiM0MzsJCWlmICghc2N0cF9jc3VtX2NoZWNrKGNwLSZndDthZiwgc2tiLCBwcCwgaXBoKSkKIAkJCXJldHVybiAwOwogCiAJCS8qIENhbGwgYXBwbGljYXRpb24gaGVscGVyIGlmIG5lZWRlZCAqLwpAQCAtMTIxLDcgJiM0MzsxMjEsNyBAQCBzY3RwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQkJcGF5bG9hZF9jc3VtID0gdHJ1ZTsKIAl9CiAKLQlzY3RwaCA9ICh2b2lkICopIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7IHNjdHBob2ZmOwomIzQzOwlzY3RwaCA9ICh2b2lkICopc2tiLSZndDtkYXRhICYjNDM7IHNjdHBob2ZmOwogCiAJLyogT25seSB1cGRhdGUgY3N1bSBpZiB3ZSByZWFsbHkgaGF2ZSB0byAqLwogCWlmIChzY3RwaC0mZ3Q7c291cmNlICE9IGNwLSZndDt2cG9ydCB8fCBwYXlsb2FkX2NzdW0gfHwKQEAgLTE1Nyw3ICYjNDM7MTU3LDcgQEAgc2N0cF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAkJaW50IHJldDsKIAogCQkvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi8KLQkJaWYgKCFzY3RwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCBzY3RwaG9mZikpCiYjNDM7CQlpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC0mZ3Q7YWYsIHNrYiwgcHAsIGlwaCkpCiAJCQlyZXR1cm4gMDsKIAogCQkvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi8KQEAgLTE2OSw3ICYjNDM7MTY5LDcgQEAgc2N0cF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAkJCXBheWxvYWRfY3N1bSA9IHRydWU7CiAJfQogCi0Jc2N0cGggPSAodm9pZCAqKSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyBzY3RwaG9mZjsKJiM0MzsJc2N0cGggPSAodm9pZCAqKXNrYi0mZ3Q7ZGF0YSAmIzQzOyBzY3RwaG9mZjsKIAogCS8qIE9ubHkgdXBkYXRlIGNzdW0gaWYgd2UgcmVhbGx5IGhhdmUgdG8gKi8KIAlpZiAoc2N0cGgtJmd0O2Rlc3QgIT0gY3AtJmd0O2Rwb3J0IHx8IHBheWxvYWRfY3N1bSB8fApAQCAtMTg3LDE5ICYjNDM7MTg3LDIyIEBAIHNjdHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAKIHN0YXRpYyBpbnQKIHNjdHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JCXVuc2lnbmVkIGludCBzY3RwaG9mZikKJiM0MzsJCXN0cnVjdCBpcF92c19pcGhkciAqaXBoKQogewomIzQzOwl1bnNpZ25lZCBpbnQgc2N0cGhvZmYgPSBpcGgtJmd0O2xlbjsKIAlzdHJ1Y3Qgc2N0cGhkciAqc2g7CiAJX19sZTMyIGNtcCwgdmFsOwogCiYjNDM7CWlmICghaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHNrYiwgYWYpKQomIzQzOwkJcmV0dXJuIDE7CiAJc2ggPSAoc3RydWN0IHNjdHBoZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IHNjdHBob2ZmKTsKIAljbXAgPSBzaC0mZ3Q7Y2hlY2tzdW07CiAJdmFsID0gc2N0cF9jb21wdXRlX2Nrc3VtKHNrYiwgc2N0cGhvZmYpOwogCiAJaWYgKHZhbCAhPSBjbXApIHsKIAkJLyogQ1JDIGZhaWx1cmUsIGR1bXAgaXQuICovCi0JCUlQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsCi0JCQkJJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yJiMzNDspOwomIzQzOwkJSVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgaXBoLSZndDtvZmYsCiYjNDM7CQkJCSAmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3ImIzM0Oyk7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYwppbmRleCBmODZiNzYzZWZjYzRkYy4uOTlhMjg2ZmRjOTBjNjUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMKQEAgLTI5LDcgJiM0MzsyOSw3IEBACiAKIHN0YXRpYyBpbnQKIHRjcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKLQkgICAgICAgdW5zaWduZWQgaW50IHRjcGhvZmYpOwomIzQzOwkgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpOwogCiBzdGF0aWMgaW50CiB0Y3BfY29ubl9zY2hlZHVsZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMTY2LDcgJiM0MzsxNjYsNyBAQCB0Y3Bfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAJCWludCByZXQ7CiAKIAkJLyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovCi0JCWlmICghdGNwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCB0Y3Bob2ZmKSkKJiM0MzsJCWlmICghdGNwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCBpcGgpKQogCQkJcmV0dXJuIDA7CiAKIAkJLyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovCkBAIC0xNzksNyAmIzQzOzE3OSw3IEBAIHRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAkJCXBheWxvYWRfY3N1bSA9IHRydWU7CiAJfQogCi0JdGNwaCA9ICh2b2lkICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgdGNwaG9mZjsKJiM0MzsJdGNwaCA9ICh2b2lkICopc2tiLSZndDtkYXRhICYjNDM7IHRjcGhvZmY7CiAJdGNwaC0mZ3Q7c291cmNlID0gY3AtJmd0O3Zwb3J0OwogCiAJLyogQWRqdXN0IFRDUCBjaGVja3N1bXMgKi8KQEAgLTI0NCw3ICYjNDM7MjQ0LDcgQEAgdGNwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQlpbnQgcmV0OwogCiAJCS8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqLwotCQlpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLSZndDthZiwgc2tiLCBwcCwgdGNwaG9mZikpCiYjNDM7CQlpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLSZndDthZiwgc2tiLCBwcCwgaXBoKSkKIAkJCXJldHVybiAwOwogCiAJCS8qCkBAIC0yNjAsNyAmIzQzOzI2MCw3IEBAIHRjcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAkJCXBheWxvYWRfY3N1bSA9IHRydWU7CiAJfQogCi0JdGNwaCA9ICh2b2lkICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgJiM0MzsgdGNwaG9mZjsKJiM0MzsJdGNwaCA9ICh2b2lkICopc2tiLSZndDtkYXRhICYjNDM7IHRjcGhvZmY7CiAJdGNwaC0mZ3Q7ZGVzdCA9IGNwLSZndDtkcG9ydDsKIAogCS8qCkBAIC0zMDIsNDEgJiM0MzszMDIsMTMgQEAgdGNwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCiBzdGF0aWMgaW50CiB0Y3BfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKQomIzQzOwkgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpCiB7Ci0Jc3dpdGNoIChza2ItJmd0O2lwX3N1bW1lZCkgewotCWNhc2UgQ0hFQ0tTVU1fTk9ORToKLQkJc2tiLSZndDtjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgdGNwaG9mZiwgc2tiLSZndDtsZW4gLSB0Y3Bob2ZmLCAwKTsKLQkJZmFsbHRocm91Z2g7Ci0JY2FzZSBDSEVDS1NVTV9DT01QTEVURToKLSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgotCQlpZiAoYWYgPT0gQUZfSU5FVDYpIHsKLQkJCWlmIChjc3VtX2lwdjZfbWFnaWMoJmFtcDtpcHY2X2hkcihza2IpLSZndDtzYWRkciwKLQkJCQkJICAgICZhbXA7aXB2Nl9oZHIoc2tiKS0mZ3Q7ZGFkZHIsCi0JCQkJCSAgICBza2ItJmd0O2xlbiAtIHRjcGhvZmYsCi0JCQkJCSAgICBJUFBST1RPX1RDUCwKLQkJCQkJICAgIHNrYi0mZ3Q7Y3N1bSkpIHsKLQkJCQlJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLAotCQkJCQkJICYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvciYjMzQ7KTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJfSBlbHNlCi0jZW5kaWYKLQkJCWlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS0mZ3Q7c2FkZHIsCi0JCQkJCSAgICAgIGlwX2hkcihza2IpLSZndDtkYWRkciwKLQkJCQkJICAgICAgc2tiLSZndDtsZW4gLSB0Y3Bob2ZmLAotCQkJCQkgICAgICBpcF9oZHIoc2tiKS0mZ3Q7cHJvdG9jb2wsCi0JCQkJCSAgICAgIHNrYi0mZ3Q7Y3N1bSkpIHsKLQkJCQlJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCAwLAotCQkJCQkJICYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvciYjMzQ7KTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyogTm8gbmVlZCB0byBjaGVja3N1bS4gKi8KLQkJYnJlYWs7CiYjNDM7CWlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgaXBoLSZndDtsZW4sIElQUFJPVE9fVENQLCBhZikpIHsKJiM0MzsJCUlQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIGlwaC0mZ3Q7b2ZmLAomIzQzOwkJCQkgJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yJiMzNDspOwomIzQzOwkJcmV0dXJuIDA7CiAJfQotCiAJcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYwppbmRleCA1OGY5ZTI1NTkyN2UyZS4uZjMyNzg1NjgyNDAyZGQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMKQEAgLTI1LDcgJiM0MzsyNSw3IEBACiAKIHN0YXRpYyBpbnQKIHVkcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKLQkgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpOwomIzQzOwkgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpOwogCiBzdGF0aWMgaW50CiB1ZHBfY29ubl9zY2hlZHVsZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMTU1LDcgJiM0MzsxNTUsNyBAQCB1ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAJCWludCByZXQ7CiAKIAkJLyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovCi0JCWlmICghdWRwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCB1ZHBob2ZmKSkKJiM0MzsJCWlmICghdWRwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCBpcGgpKQogCQkJcmV0dXJuIDA7CiAKIAkJLyoKQEAgLTE3MCw3ICYjNDM7MTcwLDcgQEAgdWRwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQkJcGF5bG9hZF9jc3VtID0gdHJ1ZTsKIAl9CiAKLQl1ZHBoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyB1ZHBob2ZmOwomIzQzOwl1ZHBoID0gKHZvaWQgKilza2ItJmd0O2RhdGEgJiM0MzsgdWRwaG9mZjsKIAl1ZHBoLSZndDtzb3VyY2UgPSBjcC0mZ3Q7dnBvcnQ7CiAKIAkvKgpAQCAtMjM4LDcgJiM0MzsyMzgsNyBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAJCWludCByZXQ7CiAKIAkJLyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovCi0JCWlmICghdWRwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCB1ZHBob2ZmKSkKJiM0MzsJCWlmICghdWRwX2NzdW1fY2hlY2soY3AtJmd0O2FmLCBza2IsIHBwLCBpcGgpKQogCQkJcmV0dXJuIDA7CiAKIAkJLyoKQEAgLTI1NCw3ICYjNDM7MjU0LDcgQEAgdWRwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAogCQkJcGF5bG9hZF9jc3VtID0gdHJ1ZTsKIAl9CiAKLQl1ZHBoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzOyB1ZHBob2ZmOwomIzQzOwl1ZHBoID0gKHZvaWQgKilza2ItJmd0O2RhdGEgJiM0MzsgdWRwaG9mZjsKIAl1ZHBoLSZndDtkZXN0ID0gY3AtJmd0O2Rwb3J0OwogCiAJLyoKQEAgLTI5OCw0OCAmIzQzOzI5OCwyMCBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAKIHN0YXRpYyBpbnQKIHVkcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKLQkgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpCiYjNDM7CSAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCkKIHsKIAlzdHJ1Y3QgdWRwaGRyIF91ZHBoLCAqdWg7CiAKLQl1aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHVkcGhvZmYsIHNpemVvZihfdWRwaCksICZhbXA7X3VkcGgpOwomIzQzOwl1aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGlwaC0mZ3Q7bGVuLCBzaXplb2YoX3VkcGgpLCAmYW1wO191ZHBoKTsKIAlpZiAodWggPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAodWgtJmd0O2NoZWNrICE9IDApIHsKLQkJc3dpdGNoIChza2ItJmd0O2lwX3N1bW1lZCkgewotCQljYXNlIENIRUNLU1VNX05PTkU6Ci0JCQlza2ItJmd0O2NzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCB1ZHBob2ZmLAotCQkJCQkJIHNrYi0mZ3Q7bGVuIC0gdWRwaG9mZiwgMCk7Ci0JCQlmYWxsdGhyb3VnaDsKLQkJY2FzZSBDSEVDS1NVTV9DT01QTEVURToKLSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgotCQkJaWYgKGFmID09IEFGX0lORVQ2KSB7Ci0JCQkJaWYgKGNzdW1faXB2Nl9tYWdpYygmYW1wO2lwdjZfaGRyKHNrYiktJmd0O3NhZGRyLAotCQkJCQkJICAgICZhbXA7aXB2Nl9oZHIoc2tiKS0mZ3Q7ZGFkZHIsCi0JCQkJCQkgICAgc2tiLSZndDtsZW4gLSB1ZHBob2ZmLAotCQkJCQkJICAgIElQUFJPVE9fVURQLAotCQkJCQkJICAgIHNrYi0mZ3Q7Y3N1bSkpIHsKLQkJCQkJSVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCwKLQkJCQkJCQkgJiMzNDtGYWlsZWQgY2hlY2tzdW0gZm9yJiMzNDspOwotCQkJCQlyZXR1cm4gMDsKLQkJCQl9Ci0JCQl9IGVsc2UKLSNlbmRpZgotCQkJCWlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS0mZ3Q7c2FkZHIsCi0JCQkJCQkgICAgICBpcF9oZHIoc2tiKS0mZ3Q7ZGFkZHIsCi0JCQkJCQkgICAgICBza2ItJmd0O2xlbiAtIHVkcGhvZmYsCi0JCQkJCQkgICAgICBpcF9oZHIoc2tiKS0mZ3Q7cHJvdG9jb2wsCi0JCQkJCQkgICAgICBza2ItJmd0O2NzdW0pKSB7Ci0JCQkJCUlQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsCi0JCQkJCQkJICYjMzQ7RmFpbGVkIGNoZWNrc3VtIGZvciYjMzQ7KTsKLQkJCQkJcmV0dXJuIDA7Ci0JCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQkvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqLwotCQkJYnJlYWs7Ci0JCX0KJiM0MzsJaWYgKCF1aC0mZ3Q7Y2hlY2spCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJaWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpcGgtJmd0O2xlbiwgSVBQUk9UT19VRFAsIGFmKSkgewomIzQzOwkJSVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgaXBoLSZndDtvZmYsCiYjNDM7CQkJCSAmIzM0O0ZhaWxlZCBjaGVja3N1bSBmb3ImIzM0Oyk7CiYjNDM7CQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYwppbmRleCA5ZmVmNDMzNWRhMTNmZC4uMGIwYzUzMDQ5OTNhOTEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYwpAQCAtMTUwMiwyMCAmIzQzOzE1MDIsMjIgQEAgaXBfdnNfZHJfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCiAgKi8KIGludAogaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKLQkJc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IGhvb2tudW0sCi0JCXN0cnVjdCBpcF92c19pcGhkciAqaXBoKQomIzQzOwkJc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsCiYjNDM7CQl1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKQogewogCXN0cnVjdCBydGFibGUJKnJ0OwkvKiBSb3V0ZSB0byB0aGUgb3RoZXIgaG9zdCAqLwogCWludCByYzsKIAlpbnQgbG9jYWw7CiAJaW50IHJ0X21vZGUsIHdhc19pbnB1dDsKJiM0MzsJYm9vbCBoYXNfcG9ydHMgPSBmYWxzZTsKJiM0MzsJdW5zaWduZWQgaW50IHdsZW47CiAKIAkvKiBUaGUgSUNNUCBwYWNrZXQgZm9yIFZTL1RVTiwgVlMvRFIgYW5kIExPQ0FMTk9ERSB3aWxsIGJlCiAJICAgZm9yd2FyZGVkIGRpcmVjdGx5IGhlcmUsIGJlY2F1c2UgdGhlcmUgaXMgbm8gbmVlZCB0bwogCSAgIHRyYW5zbGF0ZSBhZGRyZXNzL3BvcnQgYmFjayAqLwogCWlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkgewogCQlpZiAoY3AtJmd0O3BhY2tldF94bWl0KQotCQkJcmMgPSBjcC0mZ3Q7cGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGlwaCk7CiYjNDM7CQkJcmMgPSBjcC0mZ3Q7cGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGNpcGgpOwogCQllbHNlCiAJCQlyYyA9IE5GX0FDQ0VQVDsKIAkJLyogZG8gbm90IHRvdWNoIHNrYiBhbnltb3JlICovCkBAIC0xNTMzLDcgJiM0MzsxNTM1LDcgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIAkJICBJUF9WU19SVF9NT0RFX0xPQ0FMIHwgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwgfAogCQkgIElQX1ZTX1JUX01PREVfUkRSIDogSVBfVlNfUlRfTU9ERV9OT05fTE9DQUw7CiAJbG9jYWwgPSBfX2lwX3ZzX2dldF9vdXRfcnQoY3AtJmd0O2lwdnMsIGNwLSZndDthZiwgc2tiLCBjcC0mZ3Q7ZGVzdCwgY3AtJmd0O2RhZGRyLmlwLCBydF9tb2RlLAotCQkJCSAgIE5VTEwsIGlwaCk7CiYjNDM7CQkJCSAgIE5VTEwsIGNpcGgpOwogCWlmIChsb2NhbCAmbHQ7IDApCiAJCWdvdG8gdHhfZXJyb3I7CiAJcnQgPSBza2JfcnRhYmxlKHNrYik7CkBAIC0xNTY0LDE0ICYjNDM7MTU2NiwyMSBAQCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAogCQlnb3RvIHR4X2Vycm9yOwogCX0KIAomIzQzOwl3bGVuID0gY2lwaC0mZ3Q7bGVuOwomIzQzOwlpZiAoY2lwaC0mZ3Q7cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1AgfHwgY2lwaC0mZ3Q7cHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgfHwKJiM0MzsJICAgIGNpcGgtJmd0O3Byb3RvY29sID09IElQUFJPVE9fU0NUUCkgewomIzQzOwkJd2xlbiAmIzQzOz0gMiAqIHNpemVvZihfX3UxNik7IC8qIEFsc28gbWFuZ2xlIHBvcnRzICovCiYjNDM7CQloYXNfcG9ydHMgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiAJLyogY29weS1vbi13cml0ZSB0aGUgcGFja2V0IGJlZm9yZSBtYW5nbGluZyBpdCAqLwotCWlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSkKJiM0MzsJaWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCB3bGVuKSkKIAkJZ290byB0eF9lcnJvcjsKIAogCWlmIChza2JfY293KHNrYiwgcnQtJmd0O2RzdC5kZXYtJmd0O2hhcmRfaGVhZGVyX2xlbikpCiAJCWdvdG8gdHhfZXJyb3I7CiAKLQlpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMCk7CiYjNDM7CWlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMpOwogCiAJLyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi8KIAlza2ItJmd0O2lnbm9yZV9kZiA9IDE7CkBAIC0xNTg3LDEwICYjNDM7MTU5NiwxMiBAQCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAogI2lmZGVmIENPTkZJR19JUF9WU19JUFY2CiBpbnQKIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCi0JCXN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBob29rbnVtLAotCQlzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwdnNoKQomIzQzOwkJc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsCiYjNDM7CQl1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKQogewomIzQzOwlib29sIGhhc19wb3J0cyA9IGZhbHNlOwogCXN0cnVjdCBydDZfaW5mbwkqcnQ7CS8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovCiYjNDM7CXVuc2lnbmVkIGludCB3bGVuOwogCWludCByYzsKIAlpbnQgbG9jYWw7CiAJaW50IHJ0X21vZGU7CkBAIC0xNjAwLDcgJiM0MzsxNjExLDcgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIAkgICB0cmFuc2xhdGUgYWRkcmVzcy9wb3J0IGJhY2sgKi8KIAlpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpIHsKIAkJaWYgKGNwLSZndDtwYWNrZXRfeG1pdCkKLQkJCXJjID0gY3AtJmd0O3BhY2tldF94bWl0KHNrYiwgY3AsIHBwLCBpcHZzaCk7CiYjNDM7CQkJcmMgPSBjcC0mZ3Q7cGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGNpcGgpOwogCQllbHNlCiAJCQlyYyA9IE5GX0FDQ0VQVDsKIAkJLyogZG8gbm90IHRvdWNoIHNrYiBhbnltb3JlICovCkBAIC0xNjE3LDcgJiM0MzsxNjI4LDcgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCwKIAkJICBJUF9WU19SVF9NT0RFX0xPQ0FMIHwgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwgfAogCQkgIElQX1ZTX1JUX01PREVfUkRSIDogSVBfVlNfUlRfTU9ERV9OT05fTE9DQUw7CiAJbG9jYWwgPSBfX2lwX3ZzX2dldF9vdXRfcnRfdjYoY3AtJmd0O2lwdnMsIGNwLSZndDthZiwgc2tiLCBjcC0mZ3Q7ZGVzdCwKLQkJCQkgICAgICAmYW1wO2NwLSZndDtkYWRkci5pbjYsIE5VTEwsIGlwdnNoLCAwLCBydF9tb2RlKTsKJiM0MzsJCQkJICAgICAgJmFtcDtjcC0mZ3Q7ZGFkZHIuaW42LCBOVUxMLCBjaXBoLCAwLCBydF9tb2RlKTsKIAlpZiAobG9jYWwgJmx0OyAwKQogCQlnb3RvIHR4X2Vycm9yOwogCXJ0ID0gZHN0X3J0Nl9pbmZvKHNrYl9kc3Qoc2tiKSk7CkBAIC0xNjQ4LDE0ICYjNDM7MTY1OSwyMSBAQCBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAogCQlnb3RvIHR4X2Vycm9yOwogCX0KIAomIzQzOwl3bGVuID0gY2lwaC0mZ3Q7bGVuOwomIzQzOwlpZiAoY2lwaC0mZ3Q7cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1AgfHwgY2lwaC0mZ3Q7cHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgfHwKJiM0MzsJICAgIGNpcGgtJmd0O3Byb3RvY29sID09IElQUFJPVE9fU0NUUCkgewomIzQzOwkJd2xlbiAmIzQzOz0gMiAqIHNpemVvZihfX3UxNik7IC8qIEFsc28gbWFuZ2xlIHBvcnRzICovCiYjNDM7CQloYXNfcG9ydHMgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiAJLyogY29weS1vbi13cml0ZSB0aGUgcGFja2V0IGJlZm9yZSBtYW5nbGluZyBpdCAqLwotCWlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSkKJiM0MzsJaWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCB3bGVuKSkKIAkJZ290byB0eF9lcnJvcjsKIAogCWlmIChza2JfY293KHNrYiwgcnQtJmd0O2RzdC5kZXYtJmd0O2hhcmRfaGVhZGVyX2xlbikpCiAJCWdvdG8gdHhfZXJyb3I7CiAKLQlpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMCk7CiYjNDM7CWlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMsIGNpcGgpOwogCiAJLyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi8KIAlza2ItJmd0O2lnbm9yZV9kZiA9IDE7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA3OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzA2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVBWUyBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGFpbWVkIGF0IG1vZGlmeWluZyB0aGUgSVBWUyBjb2RlIHdpdGhpbiBgbmV0L25ldGZpbHRlci9pcHZzL2AuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY2hhbmdlcyByZWxhdGVkIHRvIElDTVAgTkFUIGhhbmRsaW5nIGFuZCBjaGVja3N1bSB2YWxpZGF0aW9uLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIHRvdWNoZWQgcXVpdGUgYSBmZXcgZnVuY3Rpb25zLCBpbmNsdWRpbmcgYGlwX3ZzX25hdF9pY21wYCwgYGlwX3ZzX25hdF9pY21wX3Y2YCwgYGlwX3ZzX2luX2ljbXBgLCBgaXBfdnNfb3V0X2ljbXBgLCBgaXBfdnNfaWNtcF94bWl0YCwgYW5kIHRoZWlyIElQdjYgY291bnRlcnBhcnRzLiBUaGV5JiMzOTt2ZSBhbHNvIHJlZmFjdG9yZWQgY2hlY2tzdW0gY2hlY2tpbmcgd2l0aGluIHRoZSBwcm90b2NvbCBoYW5kbGVycyAoYGlwX3ZzX3Byb3RvX3RjcC5jYCwgYGlwX3ZzX3Byb3RvX3VkcC5jYCwgYGlwX3ZzX3Byb3RvX3NjdHAuY2ApIHVzaW5nIHRoaXMgbmV3IGhlbHBlciwgYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AsIHdoaWNoIGlzIGludGVyZXN0aW5nLgoKQmVmb3JlIEkgZGlnIHRvbyBkZWVwLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IElQVlMgaXMgZXZlbiBlbmFibGVkIGFuZCBhY2Nlc3NpYmxlLCB3aGljaCBJIGNhbiBjb25maXJtIGlzIHRoZSBjYXNlLCBzbyBnb29kLCBnb29kLiBOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gcHJlY2lzZWx5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgYmVpbmcgbW9kaWZpZWQsIGJlY2F1c2UgdGhvc2UgYXJlIHRoZSBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nIGFuZCB0YXJnZXRlZCBhbmFseXNpcy4gSSB3YW50IHRvIGhpZ2hsaWdodCB0aGUgYXJlYXMgdGhhdCBhcmUgbGlrZWx5IHRvIGJlIHRoZSBtb3N0IGltcGFjdGVkLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGBpcF92c19uYXRfaWNtcGAsIGBpcF92c19uYXRfaWNtcF92NmAsIGBoYW5kbGVfcmVzcG9uc2VfaWNtcGAsIGBpcF92c19vdXRfaWNtcGAsIGBpcF92c19vdXRfaWNtcF92NmAsIGBpcF92c19pbl9pY21wYCwgYGlwX3ZzX2luX2ljbXBfdjZgLCBgaXBfdnNfZm9yd2FyZF9pY21wYCwgYHNjdHBfY3N1bV9jaGVja2AsIGB0Y3BfY3N1bV9jaGVja2AsIGB1ZHBfY3N1bV9jaGVja2AsIGBpcF92c19pY21wX3htaXRgLCBhbmQgYGlwX3ZzX2ljbXBfeG1pdF92NmAuIFRoaXMgZ2l2ZXMgbWUgYSBtdWNoIG1vcmUgZm9jdXNlZCB2aWV3IG9mIHdoZXJlIHRvIGFwcGx5IG15IHRlc3RpbmcuCgpOZXh0IHN0ZXA6IGRvdWJsZS1jaGVja2luZyB0aGUgS2NvbmZpZyBvcHRpb25zLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGxpa2UgYENPTkZJR19JUF9WU2AsIGBDT05GSUdfSVBfVlNfSVBWNmAsIGBDT05GSUdfSVBfVlNfUFJPVE9fVENQYCwgYENPTkZJR19JUF9WU19QUk9UT19VRFBgLCBhbmQgYENPTkZJR19JUF9WU19QUk9UT19TQ1RQYCBhcmUgYWxsIHNldCBjb3JyZWN0bHkgYW5kIGhhdmVuJiMzOTt0IGludHJvZHVjZWQgYW55IHVuZXhwZWN0ZWQgZGVwZW5kZW5jaWVzIG9yIGNvbmZsaWN0cy4gVGhlbiBpdCYjMzk7cyB0aW1lIHRvIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBhbmQgcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwNzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfVlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O0lQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAmIzM5O0lQVlMgU0ggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cdGludCBcJiMzNDtJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAmIzM5O0lQVlMgTUggc2NoZWR1bGVyJiMzOTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXHRpbnQgXCYjMzQ7SVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU4MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipFeGFtaW5pbmcgSVBWUyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgc28gSSBuZWVkIHRvIHZlcmlmeSBhIGNvdXBsZSBvZiBJUFZTIChJUCBWaXJ0dWFsIFNlcnZlcikgY29uZmlndXJhdGlvbnMgaGVyZS4gTGV0JiMzOTtzIHNlZS4uLiBGaXJzdCwgSSB3YW50IHRvIGNvbmZpcm0gdGhlIHN0YXR1cyBvZiBgQ09ORklHX0lQX1ZTX0lQVjZgLiBNYWtlcyBzZW5zZSDigJMgd2UgbmVlZCB0byBlbnN1cmUgSVB2NiBzdXBwb3J0IGlzIGVuYWJsZWQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGRpcmVjdGlvbiBvZiBuZXR3b3JrIGluZnJhc3RydWN0dXJlLiBJUHY2IGlzIGluY3JlYXNpbmdseSBpbXBvcnRhbnQsIGFuZCB3aXRob3V0IHRoaXMsIHRoZSBJUFZTIHNldHVwIHdpbGwgYmUgc2V2ZXJlbHkgbGltaXRlZC4gSSYjMzk7bSB0aGlua2luZywgdGhpcyBpcyBwcm9iYWJseSBjcml0aWNhbCBmb3IgbW9kZXJuIGRlcGxveW1lbnRzLiBUaGVuLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiBgQ09ORklHX0lQX1ZTX1BST1RPX1NDVFBgLiBTQ1RQIGlzIGEgYml0IGxlc3MgY29tbW9uIHRoYW4gVENQIGFuZCBVRFAsIGJ1dCBpdOKAmXMgc3RpbGwgaW1wb3J0YW50IGZvciBjZXJ0YWluIGFwcGxpY2F0aW9ucy4gV2Ugc2hvdWxkIHZlcmlmeSB0aGF0IFNDVFAgc3VwcG9ydCBpcyBwcm9wZXJseSBpbnRlZ3JhdGVkIGFuZCBlbmFibGVkIGlmIHRoZSBzcGVjaWZpYyB1c2UgY2FzZSBkZW1hbmRzIGl0LiBCYXNpY2FsbHksIHRoZXNlIGNvbmZpZyBvcHRpb25zIGRldGVybWluZSB0aGUgZnVuZGFtZW50YWwgY2FwYWJpbGl0aWVzIG9mIElQVlMsIHNvIHRoZXkgYXJlIHRoZSBzdGFydGluZyBwb2ludCBmb3IgZXZlcnl0aGluZy4gTmVlZCB0byBtYWtlIHN1cmUgYm90aCBvZiB0aGVzZSBhcmUgc2V0IGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwNzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9WU19JUFY2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA3OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODc5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqSW52ZXN0aWdhdGluZyBhIEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbioqCgpIbW0sIEkgc3VzcGVjdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIHRoaXMgbWlnaHQgYmUgYENPTkZJR19JUF9WU19JUFY2YC4gSSYjMzk7bSBwcmV0dHkgc3VyZSBJIHNhdyBpdCBpbiBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIGJlZm9yZSwgYnV0IGl0JiMzOTtzIGFsd2F5cyB3b3J0aCBkb3VibGUtY2hlY2tpbmcuIFRpbWUgdG8gdGFrZSBhIGxvb2sgYXQgZWl0aGVyIHRoYXQgZmlsZSBvciBtYXliZSB0aGUgZ2VuZXJhbCBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBlbnN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgc29tZXRoaW5nLiBHb3R0YSB0cmFjayBkb3duIGV4YWN0bHkgd2hlcmUgdGhhdCB0aGluZyBpcyBkZWZpbmVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG5ldHdvcmsgc3RhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNC0jXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJiMzOTtJUFZTIFNIIHNjaGVkdWxlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODctXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXHRpbnQgXCYjMzQ7SVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJiMzOTtJUFZTIE1IIHNjaGVkdWxlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVx0aW50IFwmIzM0O0lQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNzAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBJUHY2IGFuZCBJUFZTKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcuLi4gZ290dGEgZ2V0IGEgaGFuZGxlIG9uIHRoZSBJUHY2IGltcGxlbWVudGF0aW9uIHdpdGggSVBWUywgcmlnaHQ/IExldCYjMzk7cyBzdGFydCB3aXRoIGEgc29saWQgYGdyZXBgIHRvIHF1aWNrbHkgaWRlbnRpZnkgcmVsZXZhbnQgY29kZSBzZWN0aW9ucy4gVGhhdCBgSVBfVlNfSVBWNmAgc3ltYm9sIGZlZWxzIGxpa2UgdGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnQuIEl04oCZcyB0aGUgdXN1YWwgZ28tdG8gaWRlbnRpZmllciBmb3IgYW55IElQdjYgc3BlY2lmaWMgZWxlbWVudHMgaW4gdGhlIGtlcm5lbCBtb2R1bGUsIGFuZCB3aWxsIGhlbHAgbWUgcGlucG9pbnQgdGhlIHBhcnRzIG9mIHRoZSBjb2RlIGJhc2UuIEdyYWJiaW5nIGFsbCB0aGUgaW5zdGFuY2VzIG9mIGBJUF9WU19JUFY2YCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgbGF5IG9mIHRoZSBsYW5kLCBlc3BlY2lhbGx5IGlmIEkgaGF2ZSB0byBkZWJ1ZyBzb21lIGNvbm5lY3Rpdml0eSBpc3N1ZXMuIFRoYXQgc2hvdWxkIGNvdmVyIHRoZSBiYXNpY3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDA3OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQX1ZTX0lQVjYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yNz1pZiBJUF9WU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjgtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyOTpjb25maWdcdElQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDtJUHY2IHN1cHBvcnQgZm9yIElQVlNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2NzAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCYjMzk7cyBhIGRpcmVjdCByZXByZXNlbnRhdGlvbiBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKlNDVFAgQ29uc2lkZXJhdGlvbioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgbmV0d29yayBwcm90b2NvbCBjb25zaWRlcmF0aW9ucy4gV2UmIzM5O3ZlIGdvdCB0aGUgdXN1YWwgc3VzcGVjdHMgdG8gdGhpbmsgYWJvdXQsIGJ1dCB3YWl0IGEgc2Vjb25kLi4uIHdoYXQgYWJvdXQgYElQX1ZTX1BST1RPX1NDVFBgPyBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtIYXZlIHdlIGZ1bGx5IGNvbnNpZGVyZWQgdGhlIGltcGxpY2F0aW9ucyBvZiBTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2wgKFNDVFApIHdpdGhpbiB0aGlzIGNvbnRleHQ/JiMzNDsgSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIGFueSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zIG9yIHF1aXJrcyByZWxhdGVkIHRvIHVzaW5nIFNDVFAuIFNwZWNpZmljYWxseSwgaG93IHdpbGwgdGhpcyBwcm90b2NvbCBhZmZlY3QgdGhlIFZpcnR1YWwgU2VydmVyIChWUykgaW1wbGVtZW50YXRpb24/IERvZXMgU0NUUCBpbnRyb2R1Y2UgdW5pcXVlIGNoYWxsZW5nZXMgb3Igb3Bwb3J0dW5pdGllcyB3ZSBuZWVkIHRvIGFjY291bnQgZm9yIGluIHRoZSBzZXR1cD8gQXJlIHRoZXJlIG51YW5jZXMgdG8gdGhlIFNDVFAgdGhhdCB3ZSBtdXN0IGJlIGF3YXJlIG9mIGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlPyBXZSBtaWdodCBuZWVkIHRvIHJlZnJlc2ggdGhlIGRvY3VtZW50YXRpb24gdG8gbWFrZSBzdXJlIHdlIGhhdmUgZnVsbHkgYWNjb3VudGVkIGZvciBpdHMgdXNlLiBJIHNob3VsZCBtYWtlIGEgbm90ZSB0byBjaXJjbGUgYmFjayBhbmQgZnVsbHkgdGhpbmsgdGhyb3VnaCBpdHMgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwNzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9WU19QUk9UT19TQ1RQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MTAwPWNvbmZpZ1x0SVBfVlNfUFJPVE9fQUhcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMDUtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoxMDY6Y29uZmlnICBJUF9WU19QUk9UT19TQ1RQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMDctXHRib29sIFwmIzM0O1NDVFAgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTAzMgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGFzIGlmIEksIGFuIGV4cGVydCwgYW0gcHJvY2Vzc2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIFRDUCBQcm90b2NvbCBJbnRlcmFjdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHdoYXQgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIElQIGFuZCBUQ1AsIHNwZWNpZmljYWxseSB0aGF0IGBJUF9WU19QUk9UT19UQ1BgIHRoaW5nPyBUaGF0JiMzOTtzIGEga2V5IGVsZW1lbnQsIGlzbiYjMzk7dCBpdD8gSSBuZWVkIHRvIHRoaW5rIGNhcmVmdWxseSBhYm91dCBob3cgdGhhdCBhZmZlY3RzIHRyYWZmaWMgbWFuYWdlbWVudCwgZXNwZWNpYWxseSBpbiB2aXJ0dWFsIHNlcnZlciBzZXR1cHMuIEl0JiMzOTtzIG5vdCBqdXN0IGEgc3RhbmRhbG9uZSBwcm90b2NvbDsgaXQmIzM5O3MgdGhlIGludGVycGxheSwgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZXNlIGxheWVycyB0aGF0IHJlYWxseSBtYXR0ZXJzIGZvciBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkuIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgaG93IHRoaXMgc3BlY2lmaWMgcHJvdG9jb2wgaW50ZXJhY3Rpb24gaW5mbHVlbmNlcyBsb2FkIGJhbGFuY2luZyB0ZWNobmlxdWVzLiBUaGlua2luZyBhYm91dCBpdCBub3cgSSBjYW4gc2VlIHRoYXQgdGhpcyBpcyBhIHF1ZXN0aW9uIHRoYXQgcmVxdWlyZXMgYSBkZWVwZXIgZGl2ZSBhbmQgSSBzaG91bGQgZG8gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SVBfVlNfUFJPVE9fVENQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Nzc9Y29tbWVudCBcJiMzNDtJUFZTIHRyYW5zcG9ydCBwcm90b2NvbCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy03OC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjc5OmNvbmZpZ1x0SVBfVlNfUFJPVE9fVENQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy04MC1cdGJvb2wgXCYjMzQ7VENQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMjE9Y29uZmlnXHRJUF9WU19GVFBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyMi1cdHRyaXN0YXRlIFwmIzM0O0ZUUCBwcm90b2NvbCBoZWxwZXJcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMyMzpcdGRlcGVuZHMgb24gSVBfVlNfUFJPVE9fVENQIFx1MDAyNlx1MDAyNiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX05BVCBcdTAwMjZcdTAwMjYgXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyNC1cdFx0TkZfQ09OTlRSQUNLX0ZUUFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ0OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqVURQIENvbnNpZGVyYXRpb25zIGluIElQVlMqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgSVAgVmlydHVhbCBTZXJ2ZXIgKElQVlMpIGFuZCBpdHMgcHJvdG9jb2wgaGFuZGxpbmcuIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgaGVyZSwgY29uc2lkZXJpbmcgdGhlIG51YW5jZXMuIE9rYXksIHNvIHdlJiMzOTtyZSBzZXR0aW5nIHVwIGEgbG9hZCBiYWxhbmNpbmcgc3lzdGVtIHVzaW5nIElQVlMuIFRoYXQmIzM5O3MgYSBzb2xpZCBjaG9pY2UsIGNvbnNpZGVyaW5nIGl0cyBwZXJmb3JtYW5jZSBhZHZhbnRhZ2VzLCBlc3BlY2lhbGx5IHdpdGggVURQLiBBbmQgSSBrbm93IGl0JiMzOTtzIGNhcGFibGUgb2YgaGFuZGxpbmcgdmFyaW91cyB0eXBlcyBvZiBwcm90b2NvbHMsIHdoaWNoIGdldHMgbWUgdGhpbmtpbmcuLi4gd2hhdCBhYm91dCB0aGUgc3BlY2lmaWNzIG9mIGhhbmRsaW5nIFVEUCB3aXRoIElQVlMsIHNpbmNlIHRoZXJlIGFyZSBzb21lIGRpZmZlcmVuY2VzLiBUaGUgcXVlc3Rpb24gb24gbXkgbWluZCBpczogV2hhdCBhYm91dCB0aGUgYElQX1ZTX1BST1RPX1VEUGAgb3B0aW9uIGluIHBhcnRpY3VsYXI/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMgdGhhdCBJIHNob3VsZCBiZSBtYWtpbmcgZm9yIFVEUCBjb25uZWN0aW9ucyB1c2luZyB0aGlzIElQVlMgcHJvdG9jb2wgb3B0aW9uLCBzbyB0aGF0IEkgZG9uJiMzOTt0IG92ZXJsb29rIGEgY3JpdGljYWwgZGV0YWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwNzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9WU19QUk9UT19VRFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz03OT1jb25maWdcdElQX1ZTX1BST1RPX1RDUFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTg0LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6ODU6Y29uZmlnXHRJUF9WU19QUk9UT19VRFBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTg2LVx0Ym9vbCBcJiMzNDtVRFAgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTM0NT1jb25maWdcdElQX1ZTX1BFX1NJUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ2LVx0dHJpc3RhdGUgXCYjMzQ7U0lQIHBlcnNpc3RlbmNlIGVuZ2luZVwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzQ3Olx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19VRFBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM0OC1cdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLX1NJUFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAwNzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg5NwoJCQkJCQkJb3V0cHV0OiAyODAKCQkJCQkJCXRob3VnaHRzOiA0MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gJmFtcDsgRnVuY3Rpb24gQW5hbHlzaXMgZm9yIElQVlMgSUNNUCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgZW5hYmxpbmcgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBJUCBWaXJ0dWFsIFNlcnZlciAoSVBWUykgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZm9sbG93aW5nIGFyZSBlbmFibGVkIGluIHRoZSBrZXJuZWw6IGBJUF9WU2AsIGBJUF9WU19JUFY2YCwgYElQX1ZTX1BST1RPX1RDUGAsIGBJUF9WU19QUk9UT19VRFBgLCBhbmQgYElQX1ZTX1BST1RPX1NDVFBgLiBUaGVzZSBhcmUgdGhlIGJhc2ljcyBmb3IgdGhlIGRpZmZlcmVudCBwcm90b2NvbCBzdXBwb3J0LgoKTm93LCBJJiMzOTttIGZvY3VzaW5nIG9uIHNvbWUga2V5IHN5bWJvbHMsIHByaW1hcmlseSByZWxhdGVkIHRvIElDTVAgYW5kIGNoZWNrc3VtIGhhbmRsaW5nIHdpdGhpbiBJUFZTLiBJJiMzOTttIHRoaW5raW5nIGFib3V0OgoKKiAgIElDTVAgTkFUIGZ1bmN0aW9uczogYGlwX3ZzX25hdF9pY21wYCwgYGlwX3ZzX25hdF9pY21wX3Y2YAoqICAgSUNNUCByZXNwb25zZSBoYW5kbGluZzogYGhhbmRsZV9yZXNwb25zZV9pY21wYAoqICAgSUNNUCB0cmFuc21pc3Npb24gYW5kIHJlY2VwdGlvbjogYGlwX3ZzX291dF9pY21wYCwgYGlwX3ZzX291dF9pY21wX3Y2YCwgYGlwX3ZzX2luX2ljbXBgLCBgaXBfdnNfaW5faWNtcF92NmAsIGBpcF92c19mb3J3YXJkX2ljbXBgCiogICBDaGVja3N1bSBjaGVja3M6IGBzY3RwX2NzdW1fY2hlY2tgLCBgdGNwX2NzdW1fY2hlY2tgLCBgdWRwX2NzdW1fY2hlY2tgCiogICBJQ01QIHRyYW5zbWl0IGZ1bmN0aW9uczogYGlwX3ZzX2ljbXBfeG1pdGAsIGBpcF92c19pY21wX3htaXRfdjZgCgpJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRob3NlIGNoZWNrc3VtIGNoZWNrIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCBhbmQgd2hlcmUgdGhlIG90aGVycyBhcmUgZGVmaW5lZC4gU28gSSYjMzk7dmUgY2hlY2tlZC4uLiBgc2N0cF9jc3VtX2NoZWNrYCwgYHRjcF9jc3VtX2NoZWNrYCwgYW5kIGB1ZHBfY3N1bV9jaGVja2AgYXJlIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoZWlyIHJlc3BlY3RpdmUgcHJvdG9jb2wgZmlsZXM6IGBpcF92c19wcm90b19zY3RwLmNgLCBgaXBfdnNfcHJvdG9fdGNwLmNgLCBhbmQgYGlwX3ZzX3Byb3RvX3VkcC5jYC4gR29vZCwgdGhhdCYjMzk7cyBleHBlY3RlZC4KCkkgZm91bmQgdGhhdCBgaXBfdnNfbmF0X2ljbXBgLCBgaGFuZGxlX3Jlc3BvbnNlX2ljbXBgLCBgaXBfdnNfb3V0X2ljbXBgLCBgaXBfdnNfaW5faWNtcGAsIGBpcF92c19mb3J3YXJkX2ljbXBgIGFsbCByZXNpZGUgYW5kIGFyZSBzdGF0aWMgd2l0aGluIGBpcF92c19jb3JlLmNgLiBBbmQgZmluYWxseSwgYGlwX3ZzX2ljbXBfeG1pdGAgaXMgZm91bmQgd2l0aGluIGBpcF92c194bWl0LmNgLgoKT2theSwgSSB0aGluayBJIGhhdmUgd2hhdCBJIG5lZWQsIG5vdy4gTGV0JiMzOTtzIHVzZSBgc2V0LXJlc3VsdHNgIHRvIGdldCB0aGlzIGluZm9ybWF0aW9uIGluIGEgdXNhYmxlIGZvcm1hdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMDc6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O0lQX1ZTX0lQVjYmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVENQJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1VEUCYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19TQ1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfbmF0X2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfbmF0X2ljbXBfdjYmIzM0OywKICAgICYjMzQ7aGFuZGxlX3Jlc3BvbnNlX2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfb3V0X2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfb3V0X2ljbXBfdjYmIzM0OywKICAgICYjMzQ7aXBfdnNfaW5faWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19pbl9pY21wX3Y2JiMzNDssCiAgICAmIzM0O2lwX3ZzX2ZvcndhcmRfaWNtcCYjMzQ7LAogICAgJiMzNDtzY3RwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7dGNwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7dWRwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7aXBfdnNfaWNtcF94bWl0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2ljbXBfeG1pdF92NiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBJQ01QIE5BVCBoYW5kbGluZyBhbmQgY2hlY2tzdW0gdmFsaWRhdGlvbiBsb2dpYyBpbiBJUFZTLiBJdCBjaGFuZ2VzIGhvdyBJQ01QIHBhY2tldHMgYXJlIHByb2Nlc3NlZCwgTkFUZWQsIGFuZCB0cmFuc21pdHRlZCwgYW5kIHVwZGF0ZXMgY2hlY2tzdW0gdmFsaWRhdGlvbiBmb3IgVENQLCBVRFAsIGFuZCBTQ1RQIHByb3RvY29scyB3aXRoaW4gSVBWUy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgbW9kaWZpZWQgSUNNUCBoYW5kbGluZyBhbmQgY2hlY2tzdW0gdmFsaWRhdGlvbiBmdW5jdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDssCiAgICAmIzM0O0lQX1ZTX0lQVjYmIzM0OywKICAgICYjMzQ7SVBfVlNfUFJPVE9fVENQJiMzNDssCiAgICAmIzM0O0lQX1ZTX1BST1RPX1VEUCYjMzQ7LAogICAgJiMzNDtJUF9WU19QUk9UT19TQ1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfbmF0X2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfbmF0X2ljbXBfdjYmIzM0OywKICAgICYjMzQ7aGFuZGxlX3Jlc3BvbnNlX2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfb3V0X2ljbXAmIzM0OywKICAgICYjMzQ7aXBfdnNfb3V0X2ljbXBfdjYmIzM0OywKICAgICYjMzQ7aXBfdnNfaW5faWNtcCYjMzQ7LAogICAgJiMzNDtpcF92c19pbl9pY21wX3Y2JiMzNDssCiAgICAmIzM0O2lwX3ZzX2ZvcndhcmRfaWNtcCYjMzQ7LAogICAgJiMzNDtzY3RwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7dGNwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7dWRwX2NzdW1fY2hlY2smIzM0OywKICAgICYjMzQ7aXBfdnNfaWNtcF94bWl0JiMzNDssCiAgICAmIzM0O2lwX3ZzX2ljbXBfeG1pdF92NiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBJQ01QIE5BVCBoYW5kbGluZyBhbmQgY2hlY2tzdW0gdmFsaWRhdGlvbiBsb2dpYyBpbiBJUFZTLiBJdCBjaGFuZ2VzIGhvdyBJQ01QIHBhY2tldHMgYXJlIHByb2Nlc3NlZCwgTkFUZWQsIGFuZCB0cmFuc21pdHRlZCwgYW5kIHVwZGF0ZXMgY2hlY2tzdW0gdmFsaWRhdGlvbiBmb3IgVENQLCBVRFAsIGFuZCBTQ1RQIHByb3RvY29scyB3aXRoaW4gSVBWUy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgbW9kaWZpZWQgSUNNUCBoYW5kbGluZyBhbmQgY2hlY2tzdW0gdmFsaWRhdGlvbiBmdW5jdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNzo1NToxNy4wNzIxMzE4MjFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODg5NjI0NTQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiSVBfVlNfSVBWNlwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVENQXCIsXG4gICAgXCJJUF9WU19QUk9UT19VRFBcIixcbiAgICBcIklQX1ZTX1BST1RPX1NDVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19uYXRfaWNtcFwiLFxuICAgIFwiaXBfdnNfbmF0X2ljbXBfdjZcIixcbiAgICBcImhhbmRsZV9yZXNwb25zZV9pY21wXCIsXG4gICAgXCJpcF92c19vdXRfaWNtcFwiLFxuICAgIFwiaXBfdnNfb3V0X2ljbXBfdjZcIixcbiAgICBcImlwX3ZzX2luX2ljbXBcIixcbiAgICBcImlwX3ZzX2luX2ljbXBfdjZcIixcbiAgICBcImlwX3ZzX2ZvcndhcmRfaWNtcFwiLFxuICAgIFwic2N0cF9jc3VtX2NoZWNrXCIsXG4gICAgXCJ0Y3BfY3N1bV9jaGVja1wiLFxuICAgIFwidWRwX2NzdW1fY2hlY2tcIixcbiAgICBcImlwX3ZzX2ljbXBfeG1pdFwiLFxuICAgIFwiaXBfdnNfaWNtcF94bWl0X3Y2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSUNNUCBOQVQgaGFuZGxpbmcgYW5kIGNoZWNrc3VtIHZhbGlkYXRpb24gbG9naWMgaW4gSVBWUy4gSXQgY2hhbmdlcyBob3cgSUNNUCBwYWNrZXRzIGFyZSBwcm9jZXNzZWQsIE5BVGVkLCBhbmQgdHJhbnNtaXR0ZWQsIGFuZCB1cGRhdGVzIGNoZWNrc3VtIHZhbGlkYXRpb24gZm9yIFRDUCwgVURQLCBhbmQgU0NUUCBwcm90b2NvbHMgd2l0aGluIElQVlMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIG1vZGlmaWVkIElDTVAgaGFuZGxpbmcgYW5kIGNoZWNrc3VtIHZhbGlkYXRpb24gZnVuY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNzo1NToxNy4wNzIxMzgyMDFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODcxODk2NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwZjMxYTU4NjZiMWM4MDAzYWU4NTJkODdlZmNhOGU4ODVkM2ZmZTU5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIzIDA3OjU1OjE1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oXFxuaW5kZXggNDE3ZmY1MWY2MmZjOGUuLjlhZTlhYWQ2NTU0MWQzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2lwX3ZzLmhcXG4rKysgYi9pbmNsdWRlL25ldC9pcF92cy5oXFxuQEAgLTI1LDcgKzI1LDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXFx1MDAzZVxcdFxcdC8qIGZvciB1bmlvbiBuZl9pbmV0X2FkZHIgKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcHY2LmhcXHUwMDNlXFx0XFx0XFx0LyogZm9yIHN0cnVjdCBpcHY2aGRyICovXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvcm91dGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pcHY2LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X2ZpYi5oXFx1MDAzZVxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaFxcdTAwM2VcXG4gI2VuZGlmXFxuQEAgLTE5NzIsOCArMTk3NCw4IEBAIGludCBpcF92c190dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuIGludCBpcF92c19kcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gXFx0XFx0ICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XFxuIGludCBpcF92c19pY21wX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbi1cXHRcXHQgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCxcXG4tXFx0XFx0ICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XFxuK1xcdFxcdCAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZixcXG4rXFx0XFx0ICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpO1xcbiB2b2lkIGlwX3ZzX2Rlc3RfZHN0X3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCk7XFxuIFxcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5AQCAtMTk4Niw4ICsxOTg4LDggQEAgaW50IGlwX3ZzX3R1bm5lbF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gaW50IGlwX3ZzX2RyX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbiBcXHRcXHQgICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcXG4gaW50IGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuLVxcdFxcdCAgICAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LFxcbi1cXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHVuc2lnbmVkIGludCB0b2ZmLFxcbitcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaCk7XFxuICNlbmRpZlxcbiBcXG4gI2lmZGVmIENPTkZJR19TWVNDVExcXG5AQCAtMjA1OSwxNSArMjA2MSwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91c2VfaGFzaDIoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbiB9XFxuIFxcbiB2b2lkIGlwX3ZzX25hdF9pY21wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuLVxcdFxcdCAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIpO1xcbitcXHRcXHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyLCB1bnNpZ25lZCBpbnQgdG9mZixcXG4rXFx0XFx0ICAgIGJvb2wgaGFzX3BvcnRzKTtcXG4gXFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbiB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuLVxcdFxcdCAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIpO1xcbitcXHRcXHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyLCB1bnNpZ25lZCBpbnQgdG9mZixcXG4rXFx0XFx0ICAgICAgIGJvb2wgaGFzX3BvcnRzLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpO1xcbiAjZW5kaWZcXG4gXFxuLV9fc3VtMTYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCk7XFxuLVxcbiBzdGF0aWMgaW5saW5lIF9fd3N1bSBpcF92c19jaGVja19kaWZmNChfX2JlMzIgb2xkLCBfX2JlMzIgbmV3LCBfX3dzdW0gb2xkc3VtKVxcbiB7XFxuIFxcdF9fYmUzMiBkaWZmWzJdID0geyB+b2xkLCBuZXcgfTtcXG5AQCAtMjA5Myw2ICsyMDk1LDM2IEBAIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmYyKF9fYmUxNiBvbGQsIF9fYmUxNiBuZXcsIF9fd3N1bSBvbGRzdW0pXFxuIFxcdHJldHVybiBjc3VtX3BhcnRpYWwoZGlmZiwgc2l6ZW9mKGRpZmYpLCBvbGRzdW0pO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHN0cnVjdCBza19idWZmICpza2IsIGludCBhZilcXG4re1xcbitcXHQvKiBDaGVja3N1bSB1bm5lY2Vzc2FyeSBvciBhbHJlYWR5IHZhbGlkYXRlZD8gKi9cXG4rXFx0aWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0LyogTE9DQUxfT1VUID8gKi9cXG4rXFx0aWYgKCFza2ItXFx1MDAzZWRldiB8fCBza2ItXFx1MDAzZWRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfTE9PUEJBQ0spXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0LyogIUxPQ0FMX0lOIChGT1JXQVJEKSA/ICovXFxuK1xcdGlmIChhZiA9PSBBRl9JTkVUNikge1xcbitcXHRcXHRpZiAoIShkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKS1cXHUwMDNlcnQ2aV9mbGFncyBcXHUwMDI2IFJURl9MT0NBTCkpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aWYgKCEoc2tiX3J0YWJsZShza2IpLVxcdTAwM2VydF9mbGFncyBcXHUwMDI2IFJUQ0ZfTE9DQUwpKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2sgLSB2YWxpZGF0ZSBjaGVja3N1bSBmb3IgVENQL1VEUC9JQ01QXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBpbnQgb2Zmc2V0LCBpbnQgcHJvdG8sIGludCBhZilcXG4re1xcbitcXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdHJldHVybiAhbmZfY2hlY2tzdW0oc2tiLCBORl9JTkVUX0xPQ0FMX0lOLCBvZmZzZXQsIHByb3RvLCBhZik7XFxuK31cXG4rXFxuIC8qIEZvcmdldCBjdXJyZW50IGNvbm50cmFjayAodW5jb25maXJtZWQpIGFuZCBhdHRhY2ggbm90cmFjayBlbnRyeSAqL1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgaXBfdnNfbm90cmFjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuY1xcbmluZGV4IGIwZTAwYmU4NWNiMTJjLi4xMWNiZGJhZjU2MWRhZiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmNcXG5AQCAtMzY3LDcgKzM2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFwcF90Y3BfcGt0X291dChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgaXB2c2gtXFx1MDAzZWxlbiArIHNpemVvZigqdGgpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHR0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgaXB2c2gtXFx1MDAzZWxlbik7XFxuK1xcdHRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgaXB2c2gtXFx1MDAzZWxlbik7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKlxcdFJlbWVtYmVyIHNlcSBudW1iZXIgaW4gY2FzZSB0aGlzIHBrdCBnZXRzIHJlc2l6ZWRcXG5AQCAtNDQzLDcgKzQ0Myw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFwcF90Y3BfcGt0X2luKHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBpcHZzaC1cXHUwMDNlbGVuICsgc2l6ZW9mKCp0aCkpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBpcHZzaC1cXHUwMDNlbGVuKTtcXG4rXFx0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2ItXFx1MDAzZWRhdGEgKyBpcHZzaC1cXHUwMDNlbGVuKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqXFx0UmVtZW1iZXIgc2VxIG51bWJlciBpbiBjYXNlIHRoaXMgcGt0IGdldHMgcmVzaXplZFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xcbmluZGV4IGJhZmFiOTM0NTFkMDM3Li43ZWZhMjA5YTUxN2IxYyAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xcbkBAIC04NjcsNyArODY3LDcgQEAgc3RhdGljIGludCBzeXNjdGxfbmF0X2ljbXBfc2VuZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cykgeyByZXR1cm4gMDsgfVxcbiBcXG4gI2VuZGlmXFxuIFxcbi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXFxuK3N0YXRpYyBfX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXFxuIHtcXG4gXFx0cmV0dXJuIGNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi1cXHUwMDNlbGVuIC0gb2Zmc2V0LCAwKSk7XFxuIH1cXG5AQCAtOTI0LDEzICs5MjQsMTMgQEAgc3RhdGljIGludCBpcF92c19yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZixcXG4gICogLSBpbm91dDogMT1pbi1cXHUwMDNlb3V0LCAwPW91dC1cXHUwMDNlaW5cXG4gICovXFxuIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0XFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0KVxcbitcXHRcXHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQsIHVuc2lnbmVkIGludCB0b2ZmLFxcbitcXHRcXHQgICAgYm9vbCBoYXNfcG9ydHMpXFxuIHtcXG4gXFx0c3RydWN0IGlwaGRyICppcGhcXHQgPSBpcF9oZHIoc2tiKTtcXG4tXFx0dW5zaWduZWQgaW50IGljbXBfb2Zmc2V0ID0gaXBoLVxcdTAwM2VpaGwqNDtcXG4tXFx0c3RydWN0IGljbXBoZHIgKmljbXBoXFx0ID0gKHN0cnVjdCBpY21waGRyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICtcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgaWNtcF9vZmZzZXQpO1xcbitcXHRzdHJ1Y3QgaWNtcGhkciAqaWNtcGhcXHQgPSAoc3RydWN0IGljbXBoZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgdG9mZik7XFxuIFxcdHN0cnVjdCBpcGhkciAqY2lwaFxcdCA9IChzdHJ1Y3QgaXBoZHIgKikoaWNtcGggKyAxKTtcXG4rXFx0dW5zaWduZWQgaW50IGNvZmYgX19tYXliZV91bnVzZWQgPSB0b2ZmICsgc2l6ZW9mKHN0cnVjdCBpY21waGRyKTtcXG4gXFxuIFxcdGlmIChpbm91dCkge1xcbiBcXHRcXHRpcGgtXFx1MDAzZXNhZGRyID0gY3AtXFx1MDAzZXZhZGRyLmlwO1xcbkBAIC05NDUsOCArOTQ1LDcgQEAgdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHR9XFxuIFxcbiBcXHQvKiB0aGUgVENQL1VEUC9TQ1RQIHBvcnQgKi9cXG4tXFx0aWYgKElQUFJPVE9fVENQID09IGNpcGgtXFx1MDAzZXByb3RvY29sIHx8IElQUFJPVE9fVURQID09IGNpcGgtXFx1MDAzZXByb3RvY29sIHx8XFxuLVxcdCAgICBJUFBST1RPX1NDVFAgPT0gY2lwaC1cXHUwMDNlcHJvdG9jb2wpIHtcXG4rXFx0aWYgKGhhc19wb3J0cykge1xcbiBcXHRcXHRfX2JlMTYgKnBvcnRzID0gKHZvaWQgKiljaXBoICsgY2lwaC1cXHUwMDNlaWhsKjQ7XFxuIFxcbiBcXHRcXHRpZiAoaW5vdXQpXFxuQEAgLTk1Nyw0OCArOTU2LDQwIEBAIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFxuIFxcdC8qIEFuZCBmaW5hbGx5IHRoZSBJQ01QIGNoZWNrc3VtICovXFxuIFxcdGljbXBoLVxcdTAwM2VjaGVja3N1bSA9IDA7XFxuLVxcdGljbXBoLVxcdTAwM2VjaGVja3N1bSA9IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWNtcF9vZmZzZXQpO1xcbitcXHRpY21waC1cXHUwMDNlY2hlY2tzdW0gPSBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIHRvZmYpO1xcbiBcXHRza2ItXFx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZO1xcbiBcXG4gXFx0aWYgKGlub3V0KVxcbi1cXHRcXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCAodm9pZCAqKWNpcGggLSAodm9pZCAqKWlwaCxcXG4tXFx0XFx0XFx0XFxcIkZvcndhcmRpbmcgYWx0ZXJlZCBvdXRnb2luZyBJQ01QXFxcIik7XFxuK1xcdFxcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNvZmYsXFxuK1xcdFxcdFxcdCAgICAgIFxcXCJGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUFxcXCIpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLFxcbi1cXHRcXHRcXHRcXFwiRm9yd2FyZGluZyBhbHRlcmVkIGluY29taW5nIElDTVBcXFwiKTtcXG4rXFx0XFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgY29mZixcXG4rXFx0XFx0XFx0ICAgICAgXFxcIkZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QXFxcIik7XFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbiB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuLVxcdFxcdCAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBpbm91dClcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0LCB1bnNpZ25lZCBpbnQgdG9mZixcXG4rXFx0XFx0ICAgICAgIGJvb2wgaGFzX3BvcnRzLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXFxuIHtcXG4gXFx0c3RydWN0IGlwdjZoZHIgKmlwaFxcdCA9IGlwdjZfaGRyKHNrYik7XFxuLVxcdHVuc2lnbmVkIGludCBpY21wX29mZnNldCA9IDA7XFxuLVxcdHVuc2lnbmVkIGludCBvZmZzXFx0ID0gMDsgLyogaGVhZGVyIG9mZnNldCovXFxuLVxcdGludCBwcm90b2NvbDtcXG4gXFx0c3RydWN0IGljbXA2aGRyICppY21waDtcXG4tXFx0c3RydWN0IGlwdjZoZHIgKmNpcGg7XFxuLVxcdHVuc2lnbmVkIHNob3J0IGZyYWdvZmZzO1xcbitcXHRzdHJ1Y3QgaXB2NmhkciAqY2loO1xcbiBcXG4tXFx0aXB2Nl9maW5kX2hkcihza2IsIFxcdTAwMjZpY21wX29mZnNldCwgSVBQUk9UT19JQ01QVjYsIFxcdTAwMjZmcmFnb2ZmcywgTlVMTCk7XFxuLVxcdGljbXBoID0gKHN0cnVjdCBpY21wNmhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIGljbXBfb2Zmc2V0KTtcXG4tXFx0b2ZmcyA9IGljbXBfb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBpY21wNmhkcik7XFxuLVxcdGNpcGggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBvZmZzKTtcXG4tXFxuLVxcdHByb3RvY29sID0gaXB2Nl9maW5kX2hkcihza2IsIFxcdTAwMjZvZmZzLCAtMSwgXFx1MDAyNmZyYWdvZmZzLCBOVUxMKTtcXG4rXFx0aWNtcGggPSAoc3RydWN0IGljbXA2aGRyICopKHNrYi1cXHUwMDNlZGF0YSArIHRvZmYpO1xcbitcXHRjaWggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgY2lwaC1cXHUwMDNlb2ZmKTtcXG4gXFxuIFxcdGlmIChpbm91dCkge1xcbiBcXHRcXHRpcGgtXFx1MDAzZXNhZGRyID0gY3AtXFx1MDAzZXZhZGRyLmluNjtcXG4tXFx0XFx0Y2lwaC1cXHUwMDNlZGFkZHIgPSBjcC1cXHUwMDNldmFkZHIuaW42O1xcbitcXHRcXHRjaWgtXFx1MDAzZWRhZGRyID0gY3AtXFx1MDAzZXZhZGRyLmluNjtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0aXBoLVxcdTAwM2VkYWRkciA9IGNwLVxcdTAwM2VkYWRkci5pbjY7XFxuLVxcdFxcdGNpcGgtXFx1MDAzZXNhZGRyID0gY3AtXFx1MDAzZWRhZGRyLmluNjtcXG4rXFx0XFx0Y2loLVxcdTAwM2VzYWRkciA9IGNwLVxcdTAwM2VkYWRkci5pbjY7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIHRoZSBUQ1AvVURQL1NDVFAgcG9ydCAqL1xcbi1cXHRpZiAoIWZyYWdvZmZzIFxcdTAwMjZcXHUwMDI2IChJUFBST1RPX1RDUCA9PSBwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBwcm90b2NvbCB8fFxcbi1cXHRcXHRcXHQgIElQUFJPVE9fU0NUUCA9PSBwcm90b2NvbCkpIHtcXG4tXFx0XFx0X19iZTE2ICpwb3J0cyA9ICh2b2lkICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgb2Zmcyk7XFxuK1xcdGlmIChoYXNfcG9ydHMpIHtcXG4rXFx0XFx0X19iZTE2ICpwb3J0cyA9ICh2b2lkICopKHNrYi1cXHUwMDNlZGF0YSArIGNpcGgtXFx1MDAzZWxlbik7XFxuIFxcbiBcXHRcXHRJUF9WU19EQkcoMTEsIFxcXCIlcygpIGNoYW5nZWQgcG9ydCAlZCB0byAlZFxcXFxuXFxcIiwgX19mdW5jX18sXFxuIFxcdFxcdFxcdCAgICAgIG50b2hzKGlub3V0ID8gcG9ydHNbMV0gOiBwb3J0c1swXSksXFxuQEAgLTEwMTEsMTkgKzEwMDIsMTcgQEAgdm9pZCBpcF92c19uYXRfaWNtcF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXG4gXFx0LyogQW5kIGZpbmFsbHkgdGhlIElDTVAgY2hlY2tzdW0gKi9cXG4gXFx0aWNtcGgtXFx1MDAzZWljbXA2X2Nrc3VtID0gfmNzdW1faXB2Nl9tYWdpYyhcXHUwMDI2aXBoLVxcdTAwM2VzYWRkciwgXFx1MDAyNmlwaC1cXHUwMDNlZGFkZHIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlbGVuIC0gaWNtcF9vZmZzZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlbGVuIC0gdG9mZixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgSVBQUk9UT19JQ01QVjYsIDApO1xcbi1cXHRza2ItXFx1MDAzZWNzdW1fc3RhcnQgPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSAtIHNrYi1cXHUwMDNlaGVhZCArIGljbXBfb2Zmc2V0O1xcbitcXHRza2ItXFx1MDAzZWNzdW1fc3RhcnQgPSBza2JfaGVhZHJvb20oc2tiKSArIHRvZmY7XFxuIFxcdHNrYi1cXHUwMDNlY3N1bV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaWNtcDZoZHIsIGljbXA2X2Nrc3VtKTtcXG4gXFx0c2tiLVxcdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMO1xcbiBcXG4gXFx0aWYgKGlub3V0KVxcbi1cXHRcXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYixcXG4tXFx0XFx0XFx0ICAgICAgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsXFxuK1xcdFxcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQ2LCBwcCwgc2tiLCBjaXBoLVxcdTAwM2VvZmYsXFxuIFxcdFxcdFxcdCAgICAgIFxcXCJGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUHY2XFxcIik7XFxuIFxcdGVsc2VcXG4tXFx0XFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsXFxuLVxcdFxcdFxcdCAgICAgICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLFxcbitcXHRcXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwgY2lwaC1cXHUwMDNlb2ZmLFxcbiBcXHRcXHRcXHQgICAgICBcXFwiRm9yd2FyZGluZyBhbHRlcmVkIGluY29taW5nIElDTVB2NlxcXCIpO1xcbiB9XFxuICNlbmRpZlxcbkBAIC0xMDMzLDM2ICsxMDIyLDQxIEBAIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gICovXFxuIHN0YXRpYyBpbnQgaGFuZGxlX3Jlc3BvbnNlX2ljbXAoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHR1bmlvbiBuZl9pbmV0X2FkZHIgKnNuZXQsXFxuLVxcdFxcdFxcdFxcdF9fdTggcHJvdG9jb2wsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaWhsLFxcbi1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaG9va251bSlcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoLFxcbitcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgdG9mZiwgdW5zaWduZWQgaW50IGhvb2tudW0pXFxuIHtcXG4rXFx0aW50IGlwcm90byA9IGFmID09IEFGX0lORVQ2ID8gSVBQUk9UT19JQ01QVjYgOiBJUFBST1RPX0lDTVA7XFxuIFxcdHVuc2lnbmVkIGludCB2ZXJkaWN0ID0gTkZfRFJPUDtcXG4rXFx0dW5zaWduZWQgaW50IGN0b2ZmID0gY2lwaC1cXHUwMDNlbGVuO1xcbitcXHRib29sIGhhc19wb3J0cyA9IGZhbHNlO1xcbiBcXG4gXFx0aWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKVxcbiBcXHRcXHRnb3RvIGFmdGVyX25hdDtcXG4gXFxuIFxcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xcbi1cXHRpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgXFx1MDAyNlxcdTAwMjYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpaGwpKSB7XFxuK1xcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgdG9mZiwgaXByb3RvLCBhZikpIHtcXG4gXFx0XFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xcbiBcXHRcXHRJUF9WU19EQkdfQlVGKDEsIFxcXCJGb3J3YXJkIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVzIVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgICAgSVBfVlNfREJHX0FERFIoYWYsIHNuZXQpKTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChJUFBST1RPX1RDUCA9PSBwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBwcm90b2NvbCB8fFxcbi1cXHQgICAgSVBQUk9UT19TQ1RQID09IHByb3RvY29sKVxcbi1cXHRcXHRvZmZzZXQgKz0gMiAqIHNpemVvZihfX3UxNik7XFxuLVxcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcXG4rXFx0aWYgKGNpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVENQIHx8IGNpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XFxuK1xcdCAgICBjaXBoLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1NDVFApIHtcXG4rXFx0XFx0Y3RvZmYgKz0gMiAqIHNpemVvZihfX3UxNik7XFxuK1xcdFxcdGhhc19wb3J0cyA9IHRydWU7XFxuK1xcdH1cXG4rXFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBjdG9mZikpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxuIFxcdGlmIChhZiA9PSBBRl9JTkVUNilcXG4tXFx0XFx0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDEpO1xcbitcXHRcXHRpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzLCBjaXBoKTtcXG4gXFx0ZWxzZVxcbiAjZW5kaWZcXG4tXFx0XFx0aXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDEpO1xcbitcXHRcXHRpcF92c19uYXRfaWNtcChza2IsIHBwLCBjcCwgMSwgdG9mZiwgaGFzX3BvcnRzKTtcXG4gXFxuIFxcdGlmIChpcF92c19yb3V0ZV9tZV9oYXJkZXIoY3AtXFx1MDAzZWlwdnMsIGFmLCBza2IsIGhvb2tudW0pKVxcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtMTA5MCw5ICsxMDg0LDkgQEAgc3RhdGljIGludCBoYW5kbGVfcmVzcG9uc2VfaWNtcChpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXFxuICAqXFx0Q3VycmVudGx5IGhhbmRsZXMgZXJyb3IgdHlwZXMgLSB1bnJlYWNoYWJsZSwgcXVlbmNoLCB0dGwgZXhjZWVkZWQuXFxuICAqL1xcbiBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHQgIGludCAqcmVsYXRlZCwgdW5zaWduZWQgaW50IGhvb2tudW0pXFxuK1xcdFxcdFxcdCAgaW50ICpyZWxhdGVkLCB1bnNpZ25lZCBpbnQgaG9va251bSxcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwdnNoKVxcbiB7XFxuLVxcdHN0cnVjdCBpcGhkciAqaXBoO1xcbiBcXHRzdHJ1Y3QgaWNtcGhkclxcdF9pY21waCwgKmljO1xcbiBcXHRzdHJ1Y3QgaXBoZHJcXHRfY2lwaCwgKmNpaDtcXHQvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi9cXG4gXFx0c3RydWN0IGlwX3ZzX2lwaGRyIGNpcGg7XFxuQEAgLTExMDcsMTcgKzExMDEsMTkgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKGlwX2lzX2ZyYWdtZW50KGlwX2hkcihza2IpKSkge1xcbiBcXHRcXHRpZiAoaXBfdnNfZ2F0aGVyX2ZyYWdzKGlwdnMsIHNrYiwgaXBfdnNfZGVmcmFnX3VzZXIoaG9va251bSkpKVxcbiBcXHRcXHRcXHRyZXR1cm4gTkZfU1RPTEVOO1xcbitcXHRcXHRpZiAoIWlwX3ZzX2ZpbGxfaXBoX3NrYihBRl9JTkVULCBza2IsIGZhbHNlLCBpcHZzaCkpXFxuK1xcdFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuIFxcdH1cXG4gXFxuLVxcdGlwaCA9IGlwX2hkcihza2IpO1xcbi1cXHRvZmZzZXQgPSBpaGwgPSBpcGgtXFx1MDAzZWlobCAqIDQ7XFxuK1xcdGlobCA9IGlwdnNoLVxcdTAwM2VsZW47XFxuK1xcdG9mZnNldCA9IGlwdnNoLVxcdTAwM2VsZW47XFxuIFxcdGljID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2ljbXBoKSwgXFx1MDAyNl9pY21waCk7XFxuIFxcdGlmIChpYyA9PSBOVUxMKVxcbiBcXHRcXHRyZXR1cm4gTkZfRFJPUDtcXG4gXFxuIFxcdElQX1ZTX0RCRygxMiwgXFxcIk91dGdvaW5nIElDTVAgKCVkLCVkKSAlcEk0LVxcdTAwM2UlcEk0XFxcXG5cXFwiLFxcbiBcXHRcXHQgIGljLVxcdTAwM2V0eXBlLCBudG9ocyhpY21wX2lkKGljKSksXFxuLVxcdFxcdCAgXFx1MDAyNmlwaC1cXHUwMDNlc2FkZHIsIFxcdTAwMjZpcGgtXFx1MDAzZWRhZGRyKTtcXG4rXFx0XFx0ICBcXHUwMDI2aXB2c2gtXFx1MDAzZXNhZGRyLmlwLCBcXHUwMDI2aXB2c2gtXFx1MDAzZWRhZGRyLmlwKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFdvcmsgdGhyb3VnaCBzZWVpbmcgaWYgdGhpcyBpcyBmb3IgdXMuXFxuQEAgLTExMzYsNyArMTEzMiw3IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdC8qIE5vdyBmaW5kIHRoZSBjb250YWluZWQgSVAgaGVhZGVyICovXFxuIFxcdG9mZnNldCArPSBzaXplb2YoX2ljbXBoKTtcXG4gXFx0Y2loID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2NpcGgpLCBcXHUwMDI2X2NpcGgpO1xcbi1cXHRpZiAoY2loID09IE5VTEwpXFxuK1xcdGlmICghKGNpaCBcXHUwMDI2XFx1MDAyNiBjaWgtXFx1MDAzZXZlcnNpb24gPT0gNCBcXHUwMDI2XFx1MDAyNiBjaWgtXFx1MDAzZWlobCBcXHUwMDNlPSA1KSlcXG4gXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovXFxuIFxcbiBcXHRwcCA9IGlwX3ZzX3Byb3RvX2dldChjaWgtXFx1MDAzZXByb3RvY29sKTtcXG5AQCAtMTE0NCw4ICsxMTQwLDcgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFxuIFxcdC8qIElzIHRoZSBlbWJlZGRlZCBwcm90b2NvbCBoZWFkZXIgcHJlc2VudD8gKi9cXG4tXFx0aWYgKHVubGlrZWx5KGNpaC1cXHUwMDNlZnJhZ19vZmYgXFx1MDAyNiBodG9ucyhJUF9PRkZTRVQpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAgcHAtXFx1MDAzZWRvbnRfZGVmcmFnKSlcXG4rXFx0aWYgKHVubGlrZWx5KGNpaC1cXHUwMDNlZnJhZ19vZmYgXFx1MDAyNiBodG9ucyhJUF9PRkZTRVQpIFxcdTAwMjZcXHUwMDI2ICFwcC1cXHUwMDNlZG9udF9kZWZyYWcpKVxcbiBcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXG4gXFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgb2Zmc2V0LFxcbkBAIC0xMTU5LDkgKzExNTQsOSBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpZiAoIWNwKVxcbiBcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXG4tXFx0c25ldC5pcCA9IGlwaC1cXHUwMDNlc2FkZHI7XFxuLVxcdHJldHVybiBoYW5kbGVfcmVzcG9uc2VfaWNtcChBRl9JTkVULCBza2IsIFxcdTAwMjZzbmV0LCBjaWgtXFx1MDAzZXByb3RvY29sLCBjcCxcXG4tXFx0XFx0XFx0XFx0ICAgIHBwLCBjaXBoLmxlbiwgaWhsLCBob29rbnVtKTtcXG4rXFx0c25ldC5pcCA9IGlwdnNoLVxcdTAwM2VzYWRkci5pcDtcXG4rXFx0cmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQsIHNrYiwgXFx1MDAyNnNuZXQsIGNwLCBwcCwgXFx1MDAyNmNpcGgsIGlobCxcXG4rXFx0XFx0XFx0XFx0ICAgIGhvb2tudW0pO1xcbiB9XFxuIFxcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5AQCAtMTE3NCw3ICsxMTY5LDYgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c3RydWN0IGlwX3ZzX2Nvbm4gKmNwO1xcbiBcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwO1xcbiBcXHR1bmlvbiBuZl9pbmV0X2FkZHIgc25ldDtcXG4tXFx0dW5zaWduZWQgaW50IG9mZnNldDtcXG4gXFxuIFxcdCpyZWxhdGVkID0gMTtcXG4gXFx0aWMgPSBmcmFnX3NhZmVfc2tiX2hwKHNrYiwgaXB2c2gtXFx1MDAzZWxlbiwgc2l6ZW9mKF9pY21waCksIFxcdTAwMjZfaWNtcGgpO1xcbkBAIC0xMjEwLDYgKzEyMDQsMTAgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKCFwcClcXG4gXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFxuK1xcdC8qIElzIHRoZSBlbWJlZGRlZCBwcm90b2NvbCBoZWFkZXIgcHJlc2VudD8gKi9cXG4rXFx0aWYgKHVubGlrZWx5KGNpcGguZnJhZ29mZnMgXFx1MDAyNlxcdTAwMjYgIXBwLVxcdTAwM2Vkb250X2RlZnJhZykpXFxuK1xcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuK1xcbiBcXHQvKiBUaGUgZW1iZWRkZWQgaGVhZGVycyBjb250YWluIHNvdXJjZSBhbmQgZGVzdCBpbiByZXZlcnNlIG9yZGVyICovXFxuIFxcdGNwID0gSU5ESVJFQ1RfQ0FMTF8xKHBwLVxcdTAwM2Vjb25uX291dF9nZXQsIGlwX3ZzX2Nvbm5fb3V0X2dldF9wcm90byxcXG4gXFx0XFx0XFx0ICAgICBpcHZzLCBBRl9JTkVUNiwgc2tiLCBcXHUwMDI2Y2lwaCk7XFxuQEAgLTEyMTcsOSArMTIxNSw4IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuIFxcbiBcXHRzbmV0LmluNiA9IGNpcGguc2FkZHIuaW42O1xcbi1cXHRvZmZzZXQgPSBjaXBoLmxlbjtcXG4tXFx0cmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQ2LCBza2IsIFxcdTAwMjZzbmV0LCBjaXBoLnByb3RvY29sLCBjcCxcXG4tXFx0XFx0XFx0XFx0ICAgIHBwLCBvZmZzZXQsIGlwdnNoLVxcdTAwM2VsZW4sIGhvb2tudW0pO1xcbitcXHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVDYsIHNrYiwgXFx1MDAyNnNuZXQsIGNwLCBwcCwgXFx1MDAyNmNpcGgsXFxuK1xcdFxcdFxcdFxcdCAgICBpcHZzaC1cXHUwMDNlbGVuLCBob29rbnVtKTtcXG4gfVxcbiAjZW5kaWZcXG4gXFxuQEAgLTE1NDUsNyArMTU0Miw4IEBAIGlwX3ZzX291dF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0XFxuICNlbmRpZlxcbiBcXHRcXHRpZiAodW5saWtlbHkoaXBoLnByb3RvY29sID09IElQUFJPVE9fSUNNUCkpIHtcXG4gXFx0XFx0XFx0aW50IHJlbGF0ZWQ7XFxuLVxcdFxcdFxcdGludCB2ZXJkaWN0ID0gaXBfdnNfb3V0X2ljbXAoaXB2cywgc2tiLCBcXHUwMDI2cmVsYXRlZCwgaG9va251bSk7XFxuK1xcdFxcdFxcdGludCB2ZXJkaWN0ID0gaXBfdnNfb3V0X2ljbXAoaXB2cywgc2tiLCBcXHUwMDI2cmVsYXRlZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBob29rbnVtLCBcXHUwMDI2aXBoKTtcXG4gXFxuIFxcdFxcdFxcdGlmIChyZWxhdGVkKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gdmVyZGljdDtcXG5AQCAtMTc1Myw5ICsxNzUxLDggQEAgc3RhdGljIGludCBpcHZzX2dyZV9kZWNhcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gICovXFxuIHN0YXRpYyBpbnRcXG4gaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxcbi1cXHQgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSlcXG4rXFx0ICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxcbiB7XFxuLVxcdHN0cnVjdCBpcGhkciAqaXBoO1xcbiBcXHRzdHJ1Y3QgaWNtcGhkclxcdF9pY21waCwgKmljO1xcbiBcXHRzdHJ1Y3QgaXBoZHJcXHRfY2lwaCwgKmNpaDtcXHQvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi9cXG4gXFx0c3RydWN0IGlwX3ZzX2lwaGRyIGNpcGg7XFxuQEAgLTE3NjUsNyArMTc2Miw3IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcXG4gXFx0dW5zaWduZWQgaW50IG9mZnNldCwgb2Zmc2V0MiwgaWhsLCB2ZXJkaWN0O1xcbiBcXHRib29sIHR1bm5lbCwgbmV3X2NwID0gZmFsc2U7XFxuIFxcdHVuaW9uIG5mX2luZXRfYWRkciAqcmFkZHI7XFxuLVxcdGNoYXIgKm91dGVyX3Byb3RvID0gXFxcIklQSVBcXFwiO1xcbitcXHRjaGFyICpvdXRlcl9wcm90byBfX21heWJlX3VudXNlZCA9IFxcXCJJUElQXFxcIjtcXG4gXFx0dW5zaWduZWQgaW50IGhsZW5faXBpcDtcXG4gXFx0aW50IHVsZW4gPSAwO1xcbiBcXG5AQCAtMTc3NSwxNyArMTc3MiwxOSBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXFxuIFxcdGlmIChpcF9pc19mcmFnbWVudChpcF9oZHIoc2tiKSkpIHtcXG4gXFx0XFx0aWYgKGlwX3ZzX2dhdGhlcl9mcmFncyhpcHZzLCBza2IsIGlwX3ZzX2RlZnJhZ191c2VyKGhvb2tudW0pKSlcXG4gXFx0XFx0XFx0cmV0dXJuIE5GX1NUT0xFTjtcXG4rXFx0XFx0aWYgKCFpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVCwgc2tiLCBmYWxzZSwgaXBoKSlcXG4rXFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFx0fVxcbiBcXG4tXFx0aXBoID0gaXBfaGRyKHNrYik7XFxuLVxcdG9mZnNldCA9IGlobCA9IGlwaC1cXHUwMDNlaWhsICogNDtcXG4rXFx0aWhsID0gaXBoLVxcdTAwM2VsZW47XFxuK1xcdG9mZnNldCA9IGlwaC1cXHUwMDNlbGVuO1xcbiBcXHRpYyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9pY21waCksIFxcdTAwMjZfaWNtcGgpO1xcbiBcXHRpZiAoaWMgPT0gTlVMTClcXG4gXFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuIFxcbiBcXHRJUF9WU19EQkcoMTIsIFxcXCJJbmNvbWluZyBJQ01QICglZCwlZCkgJXBJNC1cXHUwMDNlJXBJNFxcXFxuXFxcIixcXG4gXFx0XFx0ICBpYy1cXHUwMDNldHlwZSwgbnRvaHMoaWNtcF9pZChpYykpLFxcbi1cXHRcXHQgIFxcdTAwMjZpcGgtXFx1MDAzZXNhZGRyLCBcXHUwMDI2aXBoLVxcdTAwM2VkYWRkcik7XFxuK1xcdFxcdCAgXFx1MDAyNmlwaC1cXHUwMDNlc2FkZHIuaXAsIFxcdTAwMjZpcGgtXFx1MDAzZWRhZGRyLmlwKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFdvcmsgdGhyb3VnaCBzZWVpbmcgaWYgdGhpcyBpcyBmb3IgdXMuXFxuQEAgLTE4NjcsOCArMTg2Niw3IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcXG4gXFx0cHAgPSBwZC1cXHUwMDNlcHA7XFxuIFxcbiBcXHQvKiBJcyB0aGUgZW1iZWRkZWQgcHJvdG9jb2wgaGVhZGVyIHByZXNlbnQ/ICovXFxuLVxcdGlmICh1bmxpa2VseShjaWgtXFx1MDAzZWZyYWdfb2ZmIFxcdTAwMjYgaHRvbnMoSVBfT0ZGU0VUKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgIHBwLVxcdTAwM2Vkb250X2RlZnJhZykpXFxuK1xcdGlmICh1bmxpa2VseShjaWgtXFx1MDAzZWZyYWdfb2ZmIFxcdTAwMjYgaHRvbnMoSVBfT0ZGU0VUKSBcXHUwMDI2XFx1MDAyNiAhcHAtXFx1MDAzZWRvbnRfZGVmcmFnKSlcXG4gXFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4gXFxuIFxcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIG9mZnNldCxcXG5AQCAtMTg3Niw3ICsxODc0LDYgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxcbiBcXG4gXFx0b2Zmc2V0MiA9IG9mZnNldDtcXG4gXFx0aXBfdnNfZmlsbF9pcGhfc2tiX2ljbXAoQUZfSU5FVCwgc2tiLCBvZmZzZXQsICF0dW5uZWwsIFxcdTAwMjZjaXBoKTtcXG4tXFx0b2Zmc2V0ID0gY2lwaC5sZW47XFxuIFxcbiBcXHQvKiBUaGUgZW1iZWRkZWQgaGVhZGVycyBjb250YWluIHNvdXJjZSBhbmQgZGVzdCBpbiByZXZlcnNlIG9yZGVyLlxcbiBcXHQgKiBGb3IgSVBJUC9VRFAvR1JFIHR1bm5lbCB0aGlzIGlzIGVycm9yIGZvciByZXF1ZXN0LCBub3QgZm9yIHJlcGx5LlxcbkBAIC0xODk4LDEwICsxODk1LDExIEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcXG4gXFx0dmVyZGljdCA9IE5GX0RST1A7XFxuIFxcbiBcXHQvKiBFbnN1cmUgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QgKi9cXG4tXFx0aWYgKCFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpIFxcdTAwMjZcXHUwMDI2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWhsKSkge1xcbitcXHRpZiAoKElQX1ZTX0ZXRF9NRVRIT0QoY3ApID09IElQX1ZTX0NPTk5fRl9NQVNRIHx8IHR1bm5lbCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpaGwsIElQUFJPVE9fSUNNUCwgQUZfSU5FVCkpIHtcXG4gXFx0XFx0LyogRmFpbGVkIGNoZWNrc3VtISAqL1xcbiBcXHRcXHRJUF9WU19EQkcoMSwgXFxcIkluY29taW5nIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVwSTQhXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgIFxcdTAwMjZpcGgtXFx1MDAzZXNhZGRyKTtcXG4rXFx0XFx0XFx0ICBcXHUwMDI2aXBoLVxcdTAwM2VzYWRkci5pcCk7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbkBAIC0xOTY5LDEwICsxOTY3LDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxcbiBcXG4gXFx0LyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovXFxuIFxcdGlwX3ZzX2luX3N0YXRzKGNwLCBza2IpO1xcbi1cXHRpZiAoSVBQUk9UT19UQ1AgPT0gY2loLVxcdTAwM2Vwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBjaWgtXFx1MDAzZXByb3RvY29sIHx8XFxuLVxcdCAgICBJUFBST1RPX1NDVFAgPT0gY2loLVxcdTAwM2Vwcm90b2NvbClcXG4tXFx0XFx0b2Zmc2V0ICs9IDIgKiBzaXplb2YoX191MTYpO1xcbi1cXHR2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0KHNrYiwgY3AsIHBwLCBvZmZzZXQsIGhvb2tudW0sIFxcdTAwMjZjaXBoKTtcXG4rXFx0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdChza2IsIGNwLCBwcCwgaXBoLVxcdTAwM2VsZW4sIGhvb2tudW0sIFxcdTAwMjZjaXBoKTtcXG4gXFxuIG91dDpcXG4gXFx0aWYgKGxpa2VseSghbmV3X2NwKSlcXG5AQCAtMjAzMiw4ICsyMDI3LDggQEAgc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXHRwcCA9IHBkLVxcdTAwM2VwcDtcXG4gXFxuLVxcdC8qIENhbm5vdCBoYW5kbGUgZnJhZ21lbnRlZCBlbWJlZGRlZCBwcm90b2NvbCAqL1xcbi1cXHRpZiAoY2lwaC5mcmFnb2ZmcylcXG4rXFx0LyogSXMgdGhlIGVtYmVkZGVkIHByb3RvY29sIGhlYWRlciBwcmVzZW50PyAqL1xcbitcXHRpZiAoY2lwaC5mcmFnb2ZmcyBcXHUwMDI2XFx1MDAyNiAhcHAtXFx1MDAzZWRvbnRfZGVmcmFnKVxcbiBcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiBcXG4gXFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsIG9mZnNldCxcXG5AQCAtMjA1NywyMyArMjA1MiwyMiBAQCBzdGF0aWMgaW50IGlwX3ZzX2luX2ljbXBfdjYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdG5ld19jcCA9IHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIFZTL1RVTiwgVlMvRFIgYW5kIExPQ0FMTk9ERSBqdXN0IGxldCBpdCBnbyAqL1xcbi1cXHRpZiAoKGhvb2tudW0gPT0gTkZfSU5FVF9MT0NBTF9PVVQpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpKSB7XFxuLVxcdFxcdHZlcmRpY3QgPSBORl9BQ0NFUFQ7XFxuK1xcdHZlcmRpY3QgPSBORl9EUk9QO1xcbitcXG4rXFx0LyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovXFxuK1xcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSA9PSBJUF9WU19DT05OX0ZfTUFTUSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIWlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVjayhza2IsIGlwaC1cXHUwMDNlbGVuLCBJUFBST1RPX0lDTVBWNixcXG4rXFx0XFx0XFx0XFx0XFx0IEFGX0lORVQ2KSkge1xcbitcXHRcXHQvKiBGYWlsZWQgY2hlY2tzdW0hICovXFxuK1xcdFxcdElQX1ZTX0RCRygxLCBcXFwiSW5jb21pbmcgSUNNUHY2OiBmYWlsZWQgY2hlY2tzdW0gZnJvbSAlcEk2YyFcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgXFx1MDAyNmlwaC1cXHUwMDNlc2FkZHIpO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4gXFx0LyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovXFxuIFxcdGlwX3ZzX2luX3N0YXRzKGNwLCBza2IpO1xcbiBcXG4tXFx0LyogTmVlZCB0byBtYW5nbGUgY29udGFpbmVkIElQdjYgaGVhZGVyIGluIElDTVB2NiBwYWNrZXQgKi9cXG4tXFx0b2Zmc2V0ID0gY2lwaC5sZW47XFxuLVxcdGlmIChJUFBST1RPX1RDUCA9PSBjaXBoLnByb3RvY29sIHx8IElQUFJPVE9fVURQID09IGNpcGgucHJvdG9jb2wgfHxcXG4tXFx0ICAgIElQUFJPVE9fU0NUUCA9PSBjaXBoLnByb3RvY29sKVxcbi1cXHRcXHRvZmZzZXQgKz0gMiAqIHNpemVvZihfX3UxNik7IC8qIEFsc28gbWFuZ2xlIHBvcnRzICovXFxuLVxcbi1cXHR2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0X3Y2KHNrYiwgY3AsIHBwLCBvZmZzZXQsIGhvb2tudW0sIFxcdTAwMjZjaXBoKTtcXG4rXFx0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdF92Nihza2IsIGNwLCBwcCwgaXBoLVxcdTAwM2VsZW4sIGhvb2tudW0sIFxcdTAwMjZjaXBoKTtcXG4gXFxuIG91dDpcXG4gXFx0aWYgKGxpa2VseSghbmV3X2NwKSlcXG5AQCAtMjE1Miw3ICsyMTQ2LDcgQEAgaXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGVcXG4gXFx0XFx0aWYgKHVubGlrZWx5KGlwaC5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApKSB7XFxuIFxcdFxcdFxcdGludCByZWxhdGVkO1xcbiBcXHRcXHRcXHRpbnQgdmVyZGljdCA9IGlwX3ZzX2luX2ljbXAoaXB2cywgc2tiLCBcXHUwMDI2cmVsYXRlZCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGhvb2tudW0pO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgaG9va251bSwgXFx1MDAyNmlwaCk7XFxuIFxcbiBcXHRcXHRcXHRpZiAocmVsYXRlZClcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHZlcmRpY3Q7XFxuQEAgLTIyODgsNiArMjI4Miw3IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxuIHtcXG4gXFx0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBuZXRfaXB2cyhzdGF0ZS1cXHUwMDNlbmV0KTtcXG4rXFx0c3RydWN0IGlwX3ZzX2lwaGRyIGlwaGRyO1xcbiBcXHRpbnQgcjtcXG4gXFxuIFxcdC8qIGlwdnMgZW5hYmxlZCBpbiB0aGlzIG5ldG5zID8gKi9cXG5AQCAtMjI5NywxMCArMjI5Miw5IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpZiAoc3RhdGUtXFx1MDAzZXBmID09IE5GUFJPVE9fSVBWNCkge1xcbiBcXHRcXHRpZiAoaXBfaGRyKHNrYiktXFx1MDAzZXByb3RvY29sICE9IElQUFJPVE9fSUNNUClcXG4gXFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4rXFx0XFx0aXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQsIHNrYiwgZmFsc2UsIFxcdTAwMjZpcGhkcik7XFxuICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgaXBoZHI7XFxuLVxcbiBcXHRcXHRpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVDYsIHNrYiwgZmFsc2UsIFxcdTAwMjZpcGhkcik7XFxuIFxcbiBcXHRcXHRpZiAoaXBoZHIucHJvdG9jb2wgIT0gSVBQUk9UT19JQ01QVjYpXFxuQEAgLTIzMTAsNyArMjMwNCw3IEBAIGlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAjZW5kaWZcXG4gXFx0fVxcbiBcXG4tXFx0cmV0dXJuIGlwX3ZzX2luX2ljbXAoaXB2cywgc2tiLCBcXHUwMDI2ciwgc3RhdGUtXFx1MDAzZWhvb2spO1xcbitcXHRyZXR1cm4gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsIFxcdTAwMjZyLCBzdGF0ZS1cXHUwMDNlaG9vaywgXFx1MDAyNmlwaGRyKTtcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBpcF92c19vcHM0W10gPSB7XFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jXFxuaW5kZXggYzY3MzE3YmUxN2RmYWYuLjNkYmQzMDk2ZTE2MzdiIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fc2N0cC5jXFxuQEAgLTExLDcgKzExLDcgQEBcXG4gXFxuIHN0YXRpYyBpbnRcXG4gc2N0cF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0XFx0dW5zaWduZWQgaW50IHNjdHBob2ZmKTtcXG4rXFx0XFx0c3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xcbiBcXG4gc3RhdGljIGludFxcbiBzY3RwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5AQCAtMTA5LDcgKzEwOSw3IEBAIHNjdHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdGludCByZXQ7XFxuIFxcbiBcXHRcXHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cXG4tXFx0XFx0aWYgKCFzY3RwX2NzdW1fY2hlY2soY3AtXFx1MDAzZWFmLCBza2IsIHBwLCBzY3RwaG9mZikpXFxuK1xcdFxcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRcXHQvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi9cXG5AQCAtMTIxLDcgKzEyMSw3IEBAIHNjdHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdFxcdHBheWxvYWRfY3N1bSA9IHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdHNjdHBoID0gKHZvaWQgKikgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBzY3RwaG9mZjtcXG4rXFx0c2N0cGggPSAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YSArIHNjdHBob2ZmO1xcbiBcXG4gXFx0LyogT25seSB1cGRhdGUgY3N1bSBpZiB3ZSByZWFsbHkgaGF2ZSB0byAqL1xcbiBcXHRpZiAoc2N0cGgtXFx1MDAzZXNvdXJjZSAhPSBjcC1cXHUwMDNldnBvcnQgfHwgcGF5bG9hZF9jc3VtIHx8XFxuQEAgLTE1Nyw3ICsxNTcsNyBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHRpbnQgcmV0O1xcbiBcXG4gXFx0XFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXFxuLVxcdFxcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgc2N0cGhvZmYpKVxcbitcXHRcXHRpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC1cXHUwMDNlYWYsIHNrYiwgcHAsIGlwaCkpXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0XFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXFxuQEAgLTE2OSw3ICsxNjksNyBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHRcXHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHRzY3RwaCA9ICh2b2lkICopIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgc2N0cGhvZmY7XFxuK1xcdHNjdHBoID0gKHZvaWQgKilza2ItXFx1MDAzZWRhdGEgKyBzY3RwaG9mZjtcXG4gXFxuIFxcdC8qIE9ubHkgdXBkYXRlIGNzdW0gaWYgd2UgcmVhbGx5IGhhdmUgdG8gKi9cXG4gXFx0aWYgKHNjdHBoLVxcdTAwM2VkZXN0ICE9IGNwLVxcdTAwM2VkcG9ydCB8fCBwYXlsb2FkX2NzdW0gfHxcXG5AQCAtMTg3LDE5ICsxODcsMjIgQEAgc2N0cF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFxuIHN0YXRpYyBpbnRcXG4gc2N0cF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0XFx0dW5zaWduZWQgaW50IHNjdHBob2ZmKVxcbitcXHRcXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcXG4ge1xcbitcXHR1bnNpZ25lZCBpbnQgc2N0cGhvZmYgPSBpcGgtXFx1MDAzZWxlbjtcXG4gXFx0c3RydWN0IHNjdHBoZHIgKnNoO1xcbiBcXHRfX2xlMzIgY21wLCB2YWw7XFxuIFxcbitcXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSlcXG4rXFx0XFx0cmV0dXJuIDE7XFxuIFxcdHNoID0gKHN0cnVjdCBzY3RwaGRyICopKHNrYi1cXHUwMDNlZGF0YSArIHNjdHBob2ZmKTtcXG4gXFx0Y21wID0gc2gtXFx1MDAzZWNoZWNrc3VtO1xcbiBcXHR2YWwgPSBzY3RwX2NvbXB1dGVfY2tzdW0oc2tiLCBzY3RwaG9mZik7XFxuIFxcbiBcXHRpZiAodmFsICE9IGNtcCkge1xcbiBcXHRcXHQvKiBDUkMgZmFpbHVyZSwgZHVtcCBpdC4gKi9cXG4tXFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcXG4tXFx0XFx0XFx0XFx0XFxcIkZhaWxlZCBjaGVja3N1bSBmb3JcXFwiKTtcXG4rXFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgaXBoLVxcdTAwM2VvZmYsXFxuK1xcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jXFxuaW5kZXggZjg2Yjc2M2VmY2M0ZGMuLjk5YTI4NmZkYzkwYzY1IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuY1xcbkBAIC0yOSw3ICsyOSw3IEBAXFxuIFxcbiBzdGF0aWMgaW50XFxuIHRjcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKTtcXG4rXFx0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcXG4gXFxuIHN0YXRpYyBpbnRcXG4gdGNwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5AQCAtMTY2LDcgKzE2Niw3IEBAIHRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFx0XFx0aW50IHJldDtcXG4gXFxuIFxcdFxcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xcbi1cXHRcXHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgdGNwaG9mZikpXFxuK1xcdFxcdGlmICghdGNwX2NzdW1fY2hlY2soY3AtXFx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdFxcdC8qIENhbGwgYXBwbGljYXRpb24gaGVscGVyIGlmIG5lZWRlZCAqL1xcbkBAIC0xNzksNyArMTc5LDcgQEAgdGNwX3NuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHRcXHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHR0Y3BoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHRjcGhvZmY7XFxuK1xcdHRjcGggPSAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YSArIHRjcGhvZmY7XFxuIFxcdHRjcGgtXFx1MDAzZXNvdXJjZSA9IGNwLVxcdTAwM2V2cG9ydDtcXG4gXFxuIFxcdC8qIEFkanVzdCBUQ1AgY2hlY2tzdW1zICovXFxuQEAgLTI0NCw3ICsyNDQsNyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdGludCByZXQ7XFxuIFxcbiBcXHRcXHQvKiBTb21lIGNoZWNrcyBiZWZvcmUgbWFuZ2xpbmcgKi9cXG4tXFx0XFx0aWYgKCF0Y3BfY3N1bV9jaGVjayhjcC1cXHUwMDNlYWYsIHNrYiwgcHAsIHRjcGhvZmYpKVxcbitcXHRcXHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRcXHQvKlxcbkBAIC0yNjAsNyArMjYwLDcgQEAgdGNwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbiBcXHRcXHRcXHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHR0Y3BoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHRjcGhvZmY7XFxuK1xcdHRjcGggPSAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YSArIHRjcGhvZmY7XFxuIFxcdHRjcGgtXFx1MDAzZWRlc3QgPSBjcC1cXHUwMDNlZHBvcnQ7XFxuIFxcbiBcXHQvKlxcbkBAIC0zMDIsNDEgKzMwMiwxMyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcbiBzdGF0aWMgaW50XFxuIHRjcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0ICAgICAgIHVuc2lnbmVkIGludCB0Y3Bob2ZmKVxcbitcXHQgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXFxuIHtcXG4tXFx0c3dpdGNoIChza2ItXFx1MDAzZWlwX3N1bW1lZCkge1xcbi1cXHRjYXNlIENIRUNLU1VNX05PTkU6XFxuLVxcdFxcdHNrYi1cXHUwMDNlY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIHRjcGhvZmYsIHNrYi1cXHUwMDNlbGVuIC0gdGNwaG9mZiwgMCk7XFxuLVxcdFxcdGZhbGx0aHJvdWdoO1xcbi1cXHRjYXNlIENIRUNLU1VNX0NPTVBMRVRFOlxcbi0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG4tXFx0XFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XFxuLVxcdFxcdFxcdGlmIChjc3VtX2lwdjZfbWFnaWMoXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZXNhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgc2tiLVxcdTAwM2VsZW4gLSB0Y3Bob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgSVBQUk9UT19UQ1AsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBza2ItXFx1MDAzZWNzdW0pKSB7XFxuLVxcdFxcdFxcdFxcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbi1cXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9IGVsc2VcXG4tI2VuZGlmXFxuLVxcdFxcdFxcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cXHUwMDNlc2FkZHIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgc2tiLVxcdTAwM2VsZW4gLSB0Y3Bob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBpcF9oZHIoc2tiKS1cXHUwMDNlcHJvdG9jb2wsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlY3N1bSkpIHtcXG4tXFx0XFx0XFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IFxcXCJGYWlsZWQgY2hlY2tzdW0gZm9yXFxcIik7XFxuLVxcdFxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xcbi1cXHRcXHRicmVhaztcXG4rXFx0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpcGgtXFx1MDAzZWxlbiwgSVBQUk9UT19UQ1AsIGFmKSkge1xcbitcXHRcXHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCBpcGgtXFx1MDAzZW9mZixcXG4rXFx0XFx0XFx0XFx0IFxcXCJGYWlsZWQgY2hlY2tzdW0gZm9yXFxcIik7XFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuLVxcbiBcXHRyZXR1cm4gMTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jXFxuaW5kZXggNThmOWUyNTU5MjdlMmUuLmYzMjc4NTY4MjQwMmRkIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xcbkBAIC0yNSw3ICsyNSw3IEBAXFxuIFxcbiBzdGF0aWMgaW50XFxuIHVkcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4tXFx0ICAgICAgIHVuc2lnbmVkIGludCB1ZHBob2ZmKTtcXG4rXFx0ICAgICAgIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcXG4gXFxuIHN0YXRpYyBpbnRcXG4gdWRwX2Nvbm5fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5AQCAtMTU1LDcgKzE1NSw3IEBAIHVkcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFx0XFx0aW50IHJldDtcXG4gXFxuIFxcdFxcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xcbi1cXHRcXHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgdWRwaG9mZikpXFxuK1xcdFxcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXFx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdFxcdC8qXFxuQEAgLTE3MCw3ICsxNzAsNyBAQCB1ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdFxcdHBheWxvYWRfY3N1bSA9IHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdHVkcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgdWRwaG9mZjtcXG4rXFx0dWRwaCA9ICh2b2lkICopc2tiLVxcdTAwM2VkYXRhICsgdWRwaG9mZjtcXG4gXFx0dWRwaC1cXHUwMDNlc291cmNlID0gY3AtXFx1MDAzZXZwb3J0O1xcbiBcXG4gXFx0LypcXG5AQCAtMjM4LDcgKzIzOCw3IEBAIHVkcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFx0XFx0aW50IHJldDtcXG4gXFxuIFxcdFxcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xcbi1cXHRcXHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVxcdTAwM2VhZiwgc2tiLCBwcCwgdWRwaG9mZikpXFxuK1xcdFxcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXFx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdFxcdC8qXFxuQEAgLTI1NCw3ICsyNTQsNyBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXFxuIFxcdFxcdFxcdHBheWxvYWRfY3N1bSA9IHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdHVkcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgdWRwaG9mZjtcXG4rXFx0dWRwaCA9ICh2b2lkICopc2tiLVxcdTAwM2VkYXRhICsgdWRwaG9mZjtcXG4gXFx0dWRwaC1cXHUwMDNlZGVzdCA9IGNwLVxcdTAwM2VkcG9ydDtcXG4gXFxuIFxcdC8qXFxuQEAgLTI5OCw0OCArMjk4LDIwIEBAIHVkcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcXG4gXFxuIHN0YXRpYyBpbnRcXG4gdWRwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxcbi1cXHQgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpXFxuK1xcdCAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcXG4ge1xcbiBcXHRzdHJ1Y3QgdWRwaGRyIF91ZHBoLCAqdWg7XFxuIFxcbi1cXHR1aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHVkcGhvZmYsIHNpemVvZihfdWRwaCksIFxcdTAwMjZfdWRwaCk7XFxuK1xcdHVoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgaXBoLVxcdTAwM2VsZW4sIHNpemVvZihfdWRwaCksIFxcdTAwMjZfdWRwaCk7XFxuIFxcdGlmICh1aCA9PSBOVUxMKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmICh1aC1cXHUwMDNlY2hlY2sgIT0gMCkge1xcbi1cXHRcXHRzd2l0Y2ggKHNrYi1cXHUwMDNlaXBfc3VtbWVkKSB7XFxuLVxcdFxcdGNhc2UgQ0hFQ0tTVU1fTk9ORTpcXG4tXFx0XFx0XFx0c2tiLVxcdTAwM2Vjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgdWRwaG9mZixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IHNrYi1cXHUwMDNlbGVuIC0gdWRwaG9mZiwgMCk7XFxuLVxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbi1cXHRcXHRjYXNlIENIRUNLU1VNX0NPTVBMRVRFOlxcbi0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG4tXFx0XFx0XFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XFxuLVxcdFxcdFxcdFxcdGlmIChjc3VtX2lwdjZfbWFnaWMoXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZXNhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgc2tiLVxcdTAwM2VsZW4gLSB1ZHBob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgSVBQUk9UT19VRFAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBza2ItXFx1MDAzZWNzdW0pKSB7XFxuLVxcdFxcdFxcdFxcdFxcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbi1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4tXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHR9IGVsc2VcXG4tI2VuZGlmXFxuLVxcdFxcdFxcdFxcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cXHUwMDNlc2FkZHIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGlwX2hkcihza2IpLVxcdTAwM2VkYWRkcixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc2tiLVxcdTAwM2VsZW4gLSB1ZHBob2ZmLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpcF9oZHIoc2tiKS1cXHUwMDNlcHJvdG9jb2wsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHNrYi1cXHUwMDNlY3N1bSkpIHtcXG4tXFx0XFx0XFx0XFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcXCJGYWlsZWQgY2hlY2tzdW0gZm9yXFxcIik7XFxuLVxcdFxcdFxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbitcXHRpZiAoIXVoLVxcdTAwM2VjaGVjaylcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgaXBoLVxcdTAwM2VsZW4sIElQUFJPVE9fVURQLCBhZikpIHtcXG4rXFx0XFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgaXBoLVxcdTAwM2VvZmYsXFxuK1xcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIGNoZWNrc3VtIGZvclxcXCIpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMTtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xcbmluZGV4IDlmZWY0MzM1ZGExM2ZkLi4wYjBjNTMwNDk5M2E5MSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xcbkBAIC0xNTAyLDIwICsxNTAyLDIyIEBAIGlwX3ZzX2RyX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbiAgKi9cXG4gaW50XFxuIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuLVxcdFxcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbi1cXHRcXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcXG4rXFx0XFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXFxuK1xcdFxcdHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXFxuIHtcXG4gXFx0c3RydWN0IHJ0YWJsZVxcdCpydDtcXHQvKiBSb3V0ZSB0byB0aGUgb3RoZXIgaG9zdCAqL1xcbiBcXHRpbnQgcmM7XFxuIFxcdGludCBsb2NhbDtcXG4gXFx0aW50IHJ0X21vZGUsIHdhc19pbnB1dDtcXG4rXFx0Ym9vbCBoYXNfcG9ydHMgPSBmYWxzZTtcXG4rXFx0dW5zaWduZWQgaW50IHdsZW47XFxuIFxcbiBcXHQvKiBUaGUgSUNNUCBwYWNrZXQgZm9yIFZTL1RVTiwgVlMvRFIgYW5kIExPQ0FMTk9ERSB3aWxsIGJlXFxuIFxcdCAgIGZvcndhcmRlZCBkaXJlY3RseSBoZXJlLCBiZWNhdXNlIHRoZXJlIGlzIG5vIG5lZWQgdG9cXG4gXFx0ICAgdHJhbnNsYXRlIGFkZHJlc3MvcG9ydCBiYWNrICovXFxuIFxcdGlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkge1xcbiBcXHRcXHRpZiAoY3AtXFx1MDAzZXBhY2tldF94bWl0KVxcbi1cXHRcXHRcXHRyYyA9IGNwLVxcdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgaXBoKTtcXG4rXFx0XFx0XFx0cmMgPSBjcC1cXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGNpcGgpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHJjID0gTkZfQUNDRVBUO1xcbiBcXHRcXHQvKiBkbyBub3QgdG91Y2ggc2tiIGFueW1vcmUgKi9cXG5AQCAtMTUzMyw3ICsxNTM1LDcgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gXFx0XFx0ICBJUF9WU19SVF9NT0RFX0xPQ0FMIHwgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwgfFxcbiBcXHRcXHQgIElQX1ZTX1JUX01PREVfUkRSIDogSVBfVlNfUlRfTU9ERV9OT05fTE9DQUw7XFxuIFxcdGxvY2FsID0gX19pcF92c19nZXRfb3V0X3J0KGNwLVxcdTAwM2VpcHZzLCBjcC1cXHUwMDNlYWYsIHNrYiwgY3AtXFx1MDAzZWRlc3QsIGNwLVxcdTAwM2VkYWRkci5pcCwgcnRfbW9kZSxcXG4tXFx0XFx0XFx0XFx0ICAgTlVMTCwgaXBoKTtcXG4rXFx0XFx0XFx0XFx0ICAgTlVMTCwgY2lwaCk7XFxuIFxcdGlmIChsb2NhbCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gdHhfZXJyb3I7XFxuIFxcdHJ0ID0gc2tiX3J0YWJsZShza2IpO1xcbkBAIC0xNTY0LDE0ICsxNTY2LDIxIEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuIFxcdFxcdGdvdG8gdHhfZXJyb3I7XFxuIFxcdH1cXG4gXFxuK1xcdHdsZW4gPSBjaXBoLVxcdTAwM2VsZW47XFxuK1xcdGlmIChjaXBoLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fCBjaXBoLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1VEUCB8fFxcbitcXHQgICAgY2lwaC1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19TQ1RQKSB7XFxuK1xcdFxcdHdsZW4gKz0gMiAqIHNpemVvZihfX3UxNik7IC8qIEFsc28gbWFuZ2xlIHBvcnRzICovXFxuK1xcdFxcdGhhc19wb3J0cyA9IHRydWU7XFxuK1xcdH1cXG4rXFxuIFxcdC8qIGNvcHktb24td3JpdGUgdGhlIHBhY2tldCBiZWZvcmUgbWFuZ2xpbmcgaXQgKi9cXG4tXFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBvZmZzZXQpKVxcbitcXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIHdsZW4pKVxcbiBcXHRcXHRnb3RvIHR4X2Vycm9yO1xcbiBcXG4gXFx0aWYgKHNrYl9jb3coc2tiLCBydC1cXHUwMDNlZHN0LmRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSlcXG4gXFx0XFx0Z290byB0eF9lcnJvcjtcXG4gXFxuLVxcdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwKTtcXG4rXFx0aXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDAsIHRvZmYsIGhhc19wb3J0cyk7XFxuIFxcbiBcXHQvKiBBbm90aGVyIGhhY2s6IGF2b2lkIGljbXBfc2VuZCBpbiBpcF9mcmFnbWVudCAqL1xcbiBcXHRza2ItXFx1MDAzZWlnbm9yZV9kZiA9IDE7XFxuQEAgLTE1ODcsMTAgKzE1OTYsMTIgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxuIGludFxcbiBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbi1cXHRcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaG9va251bSxcXG4tXFx0XFx0c3RydWN0IGlwX3ZzX2lwaGRyICppcHZzaClcXG4rXFx0XFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXFxuK1xcdFxcdHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXFxuIHtcXG4rXFx0Ym9vbCBoYXNfcG9ydHMgPSBmYWxzZTtcXG4gXFx0c3RydWN0IHJ0Nl9pbmZvXFx0KnJ0O1xcdC8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovXFxuK1xcdHVuc2lnbmVkIGludCB3bGVuO1xcbiBcXHRpbnQgcmM7XFxuIFxcdGludCBsb2NhbDtcXG4gXFx0aW50IHJ0X21vZGU7XFxuQEAgLTE2MDAsNyArMTYxMSw3IEBAIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuIFxcdCAgIHRyYW5zbGF0ZSBhZGRyZXNzL3BvcnQgYmFjayAqL1xcbiBcXHRpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpIHtcXG4gXFx0XFx0aWYgKGNwLVxcdTAwM2VwYWNrZXRfeG1pdClcXG4tXFx0XFx0XFx0cmMgPSBjcC1cXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGlwdnNoKTtcXG4rXFx0XFx0XFx0cmMgPSBjcC1cXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGNpcGgpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHJjID0gTkZfQUNDRVBUO1xcbiBcXHRcXHQvKiBkbyBub3QgdG91Y2ggc2tiIGFueW1vcmUgKi9cXG5AQCAtMTYxNyw3ICsxNjI4LDcgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4gXFx0XFx0ICBJUF9WU19SVF9NT0RFX0xPQ0FMIHwgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwgfFxcbiBcXHRcXHQgIElQX1ZTX1JUX01PREVfUkRSIDogSVBfVlNfUlRfTU9ERV9OT05fTE9DQUw7XFxuIFxcdGxvY2FsID0gX19pcF92c19nZXRfb3V0X3J0X3Y2KGNwLVxcdTAwM2VpcHZzLCBjcC1cXHUwMDNlYWYsIHNrYiwgY3AtXFx1MDAzZWRlc3QsXFxuLVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZjcC1cXHUwMDNlZGFkZHIuaW42LCBOVUxMLCBpcHZzaCwgMCwgcnRfbW9kZSk7XFxuK1xcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZjcC1cXHUwMDNlZGFkZHIuaW42LCBOVUxMLCBjaXBoLCAwLCBydF9tb2RlKTtcXG4gXFx0aWYgKGxvY2FsIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byB0eF9lcnJvcjtcXG4gXFx0cnQgPSBkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKTtcXG5AQCAtMTY0OCwxNCArMTY1OSwyMSBAQCBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbiBcXHRcXHRnb3RvIHR4X2Vycm9yO1xcbiBcXHR9XFxuIFxcbitcXHR3bGVuID0gY2lwaC1cXHUwMDNlbGVuO1xcbitcXHRpZiAoY2lwaC1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1AgfHwgY2lwaC1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgfHxcXG4rXFx0ICAgIGNpcGgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fU0NUUCkge1xcbitcXHRcXHR3bGVuICs9IDIgKiBzaXplb2YoX191MTYpOyAvKiBBbHNvIG1hbmdsZSBwb3J0cyAqL1xcbitcXHRcXHRoYXNfcG9ydHMgPSB0cnVlO1xcbitcXHR9XFxuK1xcbiBcXHQvKiBjb3B5LW9uLXdyaXRlIHRoZSBwYWNrZXQgYmVmb3JlIG1hbmdsaW5nIGl0ICovXFxuLVxcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcXG4rXFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCB3bGVuKSlcXG4gXFx0XFx0Z290byB0eF9lcnJvcjtcXG4gXFxuIFxcdGlmIChza2JfY293KHNrYiwgcnQtXFx1MDAzZWRzdC5kZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbikpXFxuIFxcdFxcdGdvdG8gdHhfZXJyb3I7XFxuIFxcbi1cXHRpcF92c19uYXRfaWNtcF92Nihza2IsIHBwLCBjcCwgMCk7XFxuK1xcdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMsIGNpcGgpO1xcbiBcXG4gXFx0LyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi9cXG4gXFx0c2tiLVxcdTAwM2VpZ25vcmVfZGYgPSAxO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNzo1NToxOC40NjA0MzE0NTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1NzUwNzkyMjU4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiLFxuICAgIFwiSVBfVlNfSVBWNlwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVENQXCIsXG4gICAgXCJJUF9WU19QUk9UT19VRFBcIixcbiAgICBcIklQX1ZTX1BST1RPX1NDVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19uYXRfaWNtcFwiLFxuICAgIFwiaXBfdnNfbmF0X2ljbXBfdjZcIixcbiAgICBcImhhbmRsZV9yZXNwb25zZV9pY21wXCIsXG4gICAgXCJpcF92c19vdXRfaWNtcFwiLFxuICAgIFwiaXBfdnNfb3V0X2ljbXBfdjZcIixcbiAgICBcImlwX3ZzX2luX2ljbXBcIixcbiAgICBcImlwX3ZzX2luX2ljbXBfdjZcIixcbiAgICBcImlwX3ZzX2ZvcndhcmRfaWNtcFwiLFxuICAgIFwic2N0cF9jc3VtX2NoZWNrXCIsXG4gICAgXCJ0Y3BfY3N1bV9jaGVja1wiLFxuICAgIFwidWRwX2NzdW1fY2hlY2tcIixcbiAgICBcImlwX3ZzX2ljbXBfeG1pdFwiLFxuICAgIFwiaXBfdnNfaWNtcF94bWl0X3Y2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSUNNUCBOQVQgaGFuZGxpbmcgYW5kIGNoZWNrc3VtIHZhbGlkYXRpb24gbG9naWMgaW4gSVBWUy4gSXQgY2hhbmdlcyBob3cgSUNNUCBwYWNrZXRzIGFyZSBwcm9jZXNzZWQsIE5BVGVkLCBhbmQgdHJhbnNtaXR0ZWQsIGFuZCB1cGRhdGVzIGNoZWNrc3VtIHZhbGlkYXRpb24gZm9yIFRDUCwgVURQLCBhbmQgU0NUUCBwcm90b2NvbHMgd2l0aGluIElQVlMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIG1vZGlmaWVkIElDTVAgaGFuZGxpbmcgYW5kIGNoZWNrc3VtIHZhbGlkYXRpb24gZnVuY3Rpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBmMzFhNTg2NmIxYzgwMDNhZTg1MmQ4N2VmY2E4ZTg4NWQzZmZlNTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyMyAwNzo1NToxNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oXG5pbmRleCA0MTdmZjUxZjYyZmM4ZS4uOWFlOWFhZDY1NTQxZDMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oXG4rKysgYi9pbmNsdWRlL25ldC9pcF92cy5oXG5AQCAtMjUsNyArMjUsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXHUwMDNlXHRcdC8qIGZvciB1bmlvbiBuZl9pbmV0X2FkZHIgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXHRcdFx0LyogZm9yIHN0cnVjdCBpcHY2aGRyICovXG4rI2luY2x1ZGUgXHUwMDNjbmV0L3JvdXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXB2Ni5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9maWIuaFx1MDAzZVxuICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaFx1MDAzZVxuICNlbmRpZlxuQEAgLTE5NzIsOCArMTk3NCw4IEBAIGludCBpcF92c190dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gaW50IGlwX3ZzX2RyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuIFx0XHQgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbiBpbnQgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi1cdFx0ICAgIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsIGludCBvZmZzZXQsXG4tXHRcdCAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuK1x0XHQgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXG4rXHRcdCAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IGlwX3ZzX2lwaGRyICpjaXBoKTtcbiB2b2lkIGlwX3ZzX2Rlc3RfZHN0X3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCk7XG4gXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5AQCAtMTk4Niw4ICsxOTg4LDggQEAgaW50IGlwX3ZzX3R1bm5lbF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBpbnQgaXBfdnNfZHJfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdCAgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuIGludCBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuLVx0XHQgICAgICAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCxcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XG4rXHRcdCAgICAgICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZixcbitcdFx0ICAgICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpO1xuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfU1lTQ1RMXG5AQCAtMjA1OSwxNSArMjA2MSwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXBfdnNfY29ubl91c2VfaGFzaDIoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuIH1cbiBcbiB2b2lkIGlwX3ZzX25hdF9pY21wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHRcdCAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIpO1xuK1x0XHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyLCB1bnNpZ25lZCBpbnQgdG9mZixcbitcdFx0ICAgIGJvb2wgaGFzX3BvcnRzKTtcbiBcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbiB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHRcdCAgICAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXIpO1xuK1x0XHQgICAgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgZGlyLCB1bnNpZ25lZCBpbnQgdG9mZixcbitcdFx0ICAgICAgIGJvb2wgaGFzX3BvcnRzLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpO1xuICNlbmRpZlxuIFxuLV9fc3VtMTYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCk7XG4tXG4gc3RhdGljIGlubGluZSBfX3dzdW0gaXBfdnNfY2hlY2tfZGlmZjQoX19iZTMyIG9sZCwgX19iZTMyIG5ldywgX193c3VtIG9sZHN1bSlcbiB7XG4gXHRfX2JlMzIgZGlmZlsyXSA9IHsgfm9sZCwgbmV3IH07XG5AQCAtMjA5Myw2ICsyMDk1LDM2IEBAIHN0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmYyKF9fYmUxNiBvbGQsIF9fYmUxNiBuZXcsIF9fd3N1bSBvbGRzdW0pXG4gXHRyZXR1cm4gY3N1bV9wYXJ0aWFsKGRpZmYsIHNpemVvZihkaWZmKSwgb2xkc3VtKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIGlwX3ZzX2NoZWNrc3VtX25lZWRlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYWYpXG4re1xuK1x0LyogQ2hlY2tzdW0gdW5uZWNlc3Nhcnkgb3IgYWxyZWFkeSB2YWxpZGF0ZWQ/ICovXG4rXHRpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0LyogTE9DQUxfT1VUID8gKi9cbitcdGlmICghc2tiLVx1MDAzZWRldiB8fCBza2ItXHUwMDNlZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfTE9PUEJBQ0spXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdC8qICFMT0NBTF9JTiAoRk9SV0FSRCkgPyAqL1xuK1x0aWYgKGFmID09IEFGX0lORVQ2KSB7XG4rXHRcdGlmICghKGRzdF9ydDZfaW5mbyhza2JfZHN0KHNrYikpLVx1MDAzZXJ0NmlfZmxhZ3MgXHUwMDI2IFJURl9MT0NBTCkpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fSBlbHNlIHtcbitcdFx0aWYgKCEoc2tiX3J0YWJsZShza2IpLVx1MDAzZXJ0X2ZsYWdzIFx1MDAyNiBSVENGX0xPQ0FMKSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rLyoqXG4rICogaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrIC0gdmFsaWRhdGUgY2hlY2tzdW0gZm9yIFRDUC9VRFAvSUNNUFxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdFx0ICAgICAgIGludCBvZmZzZXQsIGludCBwcm90bywgaW50IGFmKVxuK3tcbitcdGlmICghaXBfdnNfY2hlY2tzdW1fbmVlZGVkKHNrYiwgYWYpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdHJldHVybiAhbmZfY2hlY2tzdW0oc2tiLCBORl9JTkVUX0xPQ0FMX0lOLCBvZmZzZXQsIHByb3RvLCBhZik7XG4rfVxuK1xuIC8qIEZvcmdldCBjdXJyZW50IGNvbm50cmFjayAodW5jb25maXJtZWQpIGFuZCBhdHRhY2ggbm90cmFjayBlbnRyeSAqL1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19ub3RyYWNrKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuY1xuaW5kZXggYjBlMDBiZTg1Y2IxMmMuLjExY2JkYmFmNTYxZGFmIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmNcbkBAIC0zNjcsNyArMzY3LDcgQEAgc3RhdGljIGlubGluZSBpbnQgYXBwX3RjcF9wa3Rfb3V0KHN0cnVjdCBpcF92c19jb25uICpjcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgaXB2c2gtXHUwMDNlbGVuICsgc2l6ZW9mKCp0aCkpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBpcHZzaC1cdTAwM2VsZW4pO1xuK1x0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2ItXHUwMDNlZGF0YSArIGlwdnNoLVx1MDAzZWxlbik7XG4gXG4gXHQvKlxuIFx0ICpcdFJlbWVtYmVyIHNlcSBudW1iZXIgaW4gY2FzZSB0aGlzIHBrdCBnZXRzIHJlc2l6ZWRcbkBAIC00NDMsNyArNDQzLDcgQEAgc3RhdGljIGlubGluZSBpbnQgYXBwX3RjcF9wa3RfaW4oc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBpcHZzaC1cdTAwM2VsZW4gKyBzaXplb2YoKnRoKSkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIGlwdnNoLVx1MDAzZWxlbik7XG4rXHR0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi1cdTAwM2VkYXRhICsgaXB2c2gtXHUwMDNlbGVuKTtcbiBcbiBcdC8qXG4gXHQgKlx0UmVtZW1iZXIgc2VxIG51bWJlciBpbiBjYXNlIHRoaXMgcGt0IGdldHMgcmVzaXplZFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG5pbmRleCBiYWZhYjkzNDUxZDAzNy4uN2VmYTIwOWE1MTdiMWMgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG5AQCAtODY3LDcgKzg2Nyw3IEBAIHN0YXRpYyBpbnQgc3lzY3RsX25hdF9pY21wX3NlbmQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpIHsgcmV0dXJuIDA7IH1cbiBcbiAjZW5kaWZcbiBcbi1fX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpXG4rc3RhdGljIF9fc3VtMTYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldClcbiB7XG4gXHRyZXR1cm4gY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIG9mZnNldCwgc2tiLVx1MDAzZWxlbiAtIG9mZnNldCwgMCkpO1xuIH1cbkBAIC05MjQsMTMgKzkyNCwxMyBAQCBzdGF0aWMgaW50IGlwX3ZzX3JvdXRlX21lX2hhcmRlcihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLFxuICAqIC0gaW5vdXQ6IDE9aW4tXHUwMDNlb3V0LCAwPW91dC1cdTAwM2VpblxuICAqL1xuIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdFx0ICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0KVxuK1x0XHQgICAgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgaW5vdXQsIHVuc2lnbmVkIGludCB0b2ZmLFxuK1x0XHQgICAgYm9vbCBoYXNfcG9ydHMpXG4ge1xuIFx0c3RydWN0IGlwaGRyICppcGhcdCA9IGlwX2hkcihza2IpO1xuLVx0dW5zaWduZWQgaW50IGljbXBfb2Zmc2V0ID0gaXBoLVx1MDAzZWlobCo0O1xuLVx0c3RydWN0IGljbXBoZHIgKmljbXBoXHQgPSAoc3RydWN0IGljbXBoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgK1xuLVx0XHRcdFx0XHRcdCAgICAgIGljbXBfb2Zmc2V0KTtcbitcdHN0cnVjdCBpY21waGRyICppY21waFx0ID0gKHN0cnVjdCBpY21waGRyICopKHNrYi1cdTAwM2VkYXRhICsgdG9mZik7XG4gXHRzdHJ1Y3QgaXBoZHIgKmNpcGhcdCA9IChzdHJ1Y3QgaXBoZHIgKikoaWNtcGggKyAxKTtcbitcdHVuc2lnbmVkIGludCBjb2ZmIF9fbWF5YmVfdW51c2VkID0gdG9mZiArIHNpemVvZihzdHJ1Y3QgaWNtcGhkcik7XG4gXG4gXHRpZiAoaW5vdXQpIHtcbiBcdFx0aXBoLVx1MDAzZXNhZGRyID0gY3AtXHUwMDNldmFkZHIuaXA7XG5AQCAtOTQ1LDggKzk0NSw3IEBAIHZvaWQgaXBfdnNfbmF0X2ljbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdH1cbiBcbiBcdC8qIHRoZSBUQ1AvVURQL1NDVFAgcG9ydCAqL1xuLVx0aWYgKElQUFJPVE9fVENQID09IGNpcGgtXHUwMDNlcHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2lwaC1cdTAwM2Vwcm90b2NvbCB8fFxuLVx0ICAgIElQUFJPVE9fU0NUUCA9PSBjaXBoLVx1MDAzZXByb3RvY29sKSB7XG4rXHRpZiAoaGFzX3BvcnRzKSB7XG4gXHRcdF9fYmUxNiAqcG9ydHMgPSAodm9pZCAqKWNpcGggKyBjaXBoLVx1MDAzZWlobCo0O1xuIFxuIFx0XHRpZiAoaW5vdXQpXG5AQCAtOTU3LDQ4ICs5NTYsNDAgQEAgdm9pZCBpcF92c19uYXRfaWNtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIFx0LyogQW5kIGZpbmFsbHkgdGhlIElDTVAgY2hlY2tzdW0gKi9cbiBcdGljbXBoLVx1MDAzZWNoZWNrc3VtID0gMDtcbi1cdGljbXBoLVx1MDAzZWNoZWNrc3VtID0gaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc2tiLCBpY21wX29mZnNldCk7XG4rXHRpY21waC1cdTAwM2VjaGVja3N1bSA9IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgdG9mZik7XG4gXHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XG4gXG4gXHRpZiAoaW5vdXQpXG4tXHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLFxuLVx0XHRcdFwiRm9yd2FyZGluZyBhbHRlcmVkIG91dGdvaW5nIElDTVBcIik7XG4rXHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQsIHBwLCBza2IsIGNvZmYsXG4rXHRcdFx0ICAgICAgXCJGb3J3YXJkaW5nIGFsdGVyZWQgb3V0Z29pbmcgSUNNUFwiKTtcbiBcdGVsc2Vcbi1cdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsXG4tXHRcdFx0XCJGb3J3YXJkaW5nIGFsdGVyZWQgaW5jb21pbmcgSUNNUFwiKTtcbitcdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVCwgcHAsIHNrYiwgY29mZixcbitcdFx0XHQgICAgICBcIkZvcndhcmRpbmcgYWx0ZXJlZCBpbmNvbWluZyBJQ01QXCIpO1xuIH1cbiBcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbiB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHRcdCAgICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBpbm91dClcbitcdFx0ICAgICAgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGlub3V0LCB1bnNpZ25lZCBpbnQgdG9mZixcbitcdFx0ICAgICAgIGJvb2wgaGFzX3BvcnRzLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXG4ge1xuIFx0c3RydWN0IGlwdjZoZHIgKmlwaFx0ID0gaXB2Nl9oZHIoc2tiKTtcbi1cdHVuc2lnbmVkIGludCBpY21wX29mZnNldCA9IDA7XG4tXHR1bnNpZ25lZCBpbnQgb2Zmc1x0ID0gMDsgLyogaGVhZGVyIG9mZnNldCovXG4tXHRpbnQgcHJvdG9jb2w7XG4gXHRzdHJ1Y3QgaWNtcDZoZHIgKmljbXBoO1xuLVx0c3RydWN0IGlwdjZoZHIgKmNpcGg7XG4tXHR1bnNpZ25lZCBzaG9ydCBmcmFnb2ZmcztcbitcdHN0cnVjdCBpcHY2aGRyICpjaWg7XG4gXG4tXHRpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2aWNtcF9vZmZzZXQsIElQUFJPVE9fSUNNUFY2LCBcdTAwMjZmcmFnb2ZmcywgTlVMTCk7XG4tXHRpY21waCA9IChzdHJ1Y3QgaWNtcDZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBpY21wX29mZnNldCk7XG4tXHRvZmZzID0gaWNtcF9vZmZzZXQgKyBzaXplb2Yoc3RydWN0IGljbXA2aGRyKTtcbi1cdGNpcGggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBvZmZzKTtcbi1cbi1cdHByb3RvY29sID0gaXB2Nl9maW5kX2hkcihza2IsIFx1MDAyNm9mZnMsIC0xLCBcdTAwMjZmcmFnb2ZmcywgTlVMTCk7XG4rXHRpY21waCA9IChzdHJ1Y3QgaWNtcDZoZHIgKikoc2tiLVx1MDAzZWRhdGEgKyB0b2ZmKTtcbitcdGNpaCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2ItXHUwMDNlZGF0YSArIGNpcGgtXHUwMDNlb2ZmKTtcbiBcbiBcdGlmIChpbm91dCkge1xuIFx0XHRpcGgtXHUwMDNlc2FkZHIgPSBjcC1cdTAwM2V2YWRkci5pbjY7XG4tXHRcdGNpcGgtXHUwMDNlZGFkZHIgPSBjcC1cdTAwM2V2YWRkci5pbjY7XG4rXHRcdGNpaC1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZXZhZGRyLmluNjtcbiBcdH0gZWxzZSB7XG4gXHRcdGlwaC1cdTAwM2VkYWRkciA9IGNwLVx1MDAzZWRhZGRyLmluNjtcbi1cdFx0Y2lwaC1cdTAwM2VzYWRkciA9IGNwLVx1MDAzZWRhZGRyLmluNjtcbitcdFx0Y2loLVx1MDAzZXNhZGRyID0gY3AtXHUwMDNlZGFkZHIuaW42O1xuIFx0fVxuIFxuIFx0LyogdGhlIFRDUC9VRFAvU0NUUCBwb3J0ICovXG4tXHRpZiAoIWZyYWdvZmZzIFx1MDAyNlx1MDAyNiAoSVBQUk9UT19UQ1AgPT0gcHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gcHJvdG9jb2wgfHxcbi1cdFx0XHQgIElQUFJPVE9fU0NUUCA9PSBwcm90b2NvbCkpIHtcbi1cdFx0X19iZTE2ICpwb3J0cyA9ICh2b2lkICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgb2Zmcyk7XG4rXHRpZiAoaGFzX3BvcnRzKSB7XG4rXHRcdF9fYmUxNiAqcG9ydHMgPSAodm9pZCAqKShza2ItXHUwMDNlZGF0YSArIGNpcGgtXHUwMDNlbGVuKTtcbiBcbiBcdFx0SVBfVlNfREJHKDExLCBcIiVzKCkgY2hhbmdlZCBwb3J0ICVkIHRvICVkXFxuXCIsIF9fZnVuY19fLFxuIFx0XHRcdCAgICAgIG50b2hzKGlub3V0ID8gcG9ydHNbMV0gOiBwb3J0c1swXSksXG5AQCAtMTAxMSwxOSArMTAwMiwxNyBAQCB2b2lkIGlwX3ZzX25hdF9pY21wX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXG4gXHQvKiBBbmQgZmluYWxseSB0aGUgSUNNUCBjaGVja3N1bSAqL1xuIFx0aWNtcGgtXHUwMDNlaWNtcDZfY2tzdW0gPSB+Y3N1bV9pcHY2X21hZ2ljKFx1MDAyNmlwaC1cdTAwM2VzYWRkciwgXHUwMDI2aXBoLVx1MDAzZWRhZGRyLFxuLVx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlbGVuIC0gaWNtcF9vZmZzZXQsXG4rXHRcdFx0XHRcdCAgICAgIHNrYi1cdTAwM2VsZW4gLSB0b2ZmLFxuIFx0XHRcdFx0XHQgICAgICBJUFBST1RPX0lDTVBWNiwgMCk7XG4tXHRza2ItXHUwMDNlY3N1bV9zdGFydCA9IHNrYl9uZXR3b3JrX2hlYWRlcihza2IpIC0gc2tiLVx1MDAzZWhlYWQgKyBpY21wX29mZnNldDtcbitcdHNrYi1cdTAwM2Vjc3VtX3N0YXJ0ID0gc2tiX2hlYWRyb29tKHNrYikgKyB0b2ZmO1xuIFx0c2tiLVx1MDAzZWNzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGljbXA2aGRyLCBpY21wNl9ja3N1bSk7XG4gXHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fUEFSVElBTDtcbiBcbiBcdGlmIChpbm91dClcbi1cdFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsXG4tXHRcdFx0ICAgICAgKHZvaWQgKiljaXBoIC0gKHZvaWQgKilpcGgsXG4rXHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQ2LCBwcCwgc2tiLCBjaXBoLVx1MDAzZW9mZixcbiBcdFx0XHQgICAgICBcIkZvcndhcmRpbmcgYWx0ZXJlZCBvdXRnb2luZyBJQ01QdjZcIik7XG4gXHRlbHNlXG4tXHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQ2LCBwcCwgc2tiLFxuLVx0XHRcdCAgICAgICh2b2lkICopY2lwaCAtICh2b2lkICopaXBoLFxuK1x0XHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVUNiwgcHAsIHNrYiwgY2lwaC1cdTAwM2VvZmYsXG4gXHRcdFx0ICAgICAgXCJGb3J3YXJkaW5nIGFsdGVyZWQgaW5jb21pbmcgSUNNUHY2XCIpO1xuIH1cbiAjZW5kaWZcbkBAIC0xMDMzLDM2ICsxMDIyLDQxIEBAIHZvaWQgaXBfdnNfbmF0X2ljbXBfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiAgKi9cbiBzdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdHVuaW9uIG5mX2luZXRfYWRkciAqc25ldCxcbi1cdFx0XHRcdF9fdTggcHJvdG9jb2wsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbitcdFx0XHRcdHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdFx0XHRcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHRcdFx0XHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaWhsLFxuLVx0XHRcdFx0dW5zaWduZWQgaW50IGhvb2tudW0pXG4rXHRcdFx0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgsXG4rXHRcdFx0XHR1bnNpZ25lZCBpbnQgdG9mZiwgdW5zaWduZWQgaW50IGhvb2tudW0pXG4ge1xuK1x0aW50IGlwcm90byA9IGFmID09IEFGX0lORVQ2ID8gSVBQUk9UT19JQ01QVjYgOiBJUFBST1RPX0lDTVA7XG4gXHR1bnNpZ25lZCBpbnQgdmVyZGljdCA9IE5GX0RST1A7XG4rXHR1bnNpZ25lZCBpbnQgY3RvZmYgPSBjaXBoLVx1MDAzZWxlbjtcbitcdGJvb2wgaGFzX3BvcnRzID0gZmFsc2U7XG4gXG4gXHRpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpXG4gXHRcdGdvdG8gYWZ0ZXJfbmF0O1xuIFxuIFx0LyogRW5zdXJlIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0ICovXG4tXHRpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgXHUwMDI2XHUwMDI2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHNrYiwgaWhsKSkge1xuK1x0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCB0b2ZmLCBpcHJvdG8sIGFmKSkge1xuIFx0XHQvKiBGYWlsZWQgY2hlY2tzdW0hICovXG4gXHRcdElQX1ZTX0RCR19CVUYoMSwgXCJGb3J3YXJkIElDTVA6IGZhaWxlZCBjaGVja3N1bSBmcm9tICVzIVxcblwiLFxuIFx0XHRcdCAgICAgIElQX1ZTX0RCR19BRERSKGFmLCBzbmV0KSk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0aWYgKElQUFJPVE9fVENQID09IHByb3RvY29sIHx8IElQUFJPVE9fVURQID09IHByb3RvY29sIHx8XG4tXHQgICAgSVBQUk9UT19TQ1RQID09IHByb3RvY29sKVxuLVx0XHRvZmZzZXQgKz0gMiAqIHNpemVvZihfX3UxNik7XG4tXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIG9mZnNldCkpXG4rXHRpZiAoY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fCBjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XG4rXHQgICAgY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1NDVFApIHtcbitcdFx0Y3RvZmYgKz0gMiAqIHNpemVvZihfX3UxNik7XG4rXHRcdGhhc19wb3J0cyA9IHRydWU7XG4rXHR9XG4rXHRpZiAoc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIGN0b2ZmKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4gXHRpZiAoYWYgPT0gQUZfSU5FVDYpXG4tXHRcdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAxKTtcbitcdFx0aXBfdnNfbmF0X2ljbXBfdjYoc2tiLCBwcCwgY3AsIDEsIHRvZmYsIGhhc19wb3J0cywgY2lwaCk7XG4gXHRlbHNlXG4gI2VuZGlmXG4tXHRcdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAxKTtcbitcdFx0aXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDEsIHRvZmYsIGhhc19wb3J0cyk7XG4gXG4gXHRpZiAoaXBfdnNfcm91dGVfbWVfaGFyZGVyKGNwLVx1MDAzZWlwdnMsIGFmLCBza2IsIGhvb2tudW0pKVxuIFx0XHRnb3RvIG91dDtcbkBAIC0xMDkwLDkgKzEwODQsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9yZXNwb25zZV9pY21wKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAgKlx0Q3VycmVudGx5IGhhbmRsZXMgZXJyb3IgdHlwZXMgLSB1bnJlYWNoYWJsZSwgcXVlbmNoLCB0dGwgZXhjZWVkZWQuXG4gICovXG4gc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHQgIGludCAqcmVsYXRlZCwgdW5zaWduZWQgaW50IGhvb2tudW0pXG4rXHRcdFx0ICBpbnQgKnJlbGF0ZWQsIHVuc2lnbmVkIGludCBob29rbnVtLFxuK1x0XHRcdCAgc3RydWN0IGlwX3ZzX2lwaGRyICppcHZzaClcbiB7XG4tXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbiBcdHN0cnVjdCBpY21waGRyXHRfaWNtcGgsICppYztcbiBcdHN0cnVjdCBpcGhkclx0X2NpcGgsICpjaWg7XHQvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi9cbiBcdHN0cnVjdCBpcF92c19pcGhkciBjaXBoO1xuQEAgLTExMDcsMTcgKzExMDEsMTkgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChpcF9pc19mcmFnbWVudChpcF9oZHIoc2tiKSkpIHtcbiBcdFx0aWYgKGlwX3ZzX2dhdGhlcl9mcmFncyhpcHZzLCBza2IsIGlwX3ZzX2RlZnJhZ191c2VyKGhvb2tudW0pKSlcbiBcdFx0XHRyZXR1cm4gTkZfU1RPTEVOO1xuK1x0XHRpZiAoIWlwX3ZzX2ZpbGxfaXBoX3NrYihBRl9JTkVULCBza2IsIGZhbHNlLCBpcHZzaCkpXG4rXHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcdH1cbiBcbi1cdGlwaCA9IGlwX2hkcihza2IpO1xuLVx0b2Zmc2V0ID0gaWhsID0gaXBoLVx1MDAzZWlobCAqIDQ7XG4rXHRpaGwgPSBpcHZzaC1cdTAwM2VsZW47XG4rXHRvZmZzZXQgPSBpcHZzaC1cdTAwM2VsZW47XG4gXHRpYyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9pY21waCksIFx1MDAyNl9pY21waCk7XG4gXHRpZiAoaWMgPT0gTlVMTClcbiBcdFx0cmV0dXJuIE5GX0RST1A7XG4gXG4gXHRJUF9WU19EQkcoMTIsIFwiT3V0Z29pbmcgSUNNUCAoJWQsJWQpICVwSTQtXHUwMDNlJXBJNFxcblwiLFxuIFx0XHQgIGljLVx1MDAzZXR5cGUsIG50b2hzKGljbXBfaWQoaWMpKSxcbi1cdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIsIFx1MDAyNmlwaC1cdTAwM2VkYWRkcik7XG4rXHRcdCAgXHUwMDI2aXB2c2gtXHUwMDNlc2FkZHIuaXAsIFx1MDAyNmlwdnNoLVx1MDAzZWRhZGRyLmlwKTtcbiBcbiBcdC8qXG4gXHQgKiBXb3JrIHRocm91Z2ggc2VlaW5nIGlmIHRoaXMgaXMgZm9yIHVzLlxuQEAgLTExMzYsNyArMTEzMiw3IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHQvKiBOb3cgZmluZCB0aGUgY29udGFpbmVkIElQIGhlYWRlciAqL1xuIFx0b2Zmc2V0ICs9IHNpemVvZihfaWNtcGgpO1xuIFx0Y2loID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2NpcGgpLCBcdTAwMjZfY2lwaCk7XG4tXHRpZiAoY2loID09IE5VTEwpXG4rXHRpZiAoIShjaWggXHUwMDI2XHUwMDI2IGNpaC1cdTAwM2V2ZXJzaW9uID09IDQgXHUwMDI2XHUwMDI2IGNpaC1cdTAwM2VpaGwgXHUwMDNlPSA1KSlcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovXG4gXG4gXHRwcCA9IGlwX3ZzX3Byb3RvX2dldChjaWgtXHUwMDNlcHJvdG9jb2wpO1xuQEAgLTExNDQsOCArMTE0MCw3IEBAIHN0YXRpYyBpbnQgaXBfdnNfb3V0X2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHQvKiBJcyB0aGUgZW1iZWRkZWQgcHJvdG9jb2wgaGVhZGVyIHByZXNlbnQ/ICovXG4tXHRpZiAodW5saWtlbHkoY2loLVx1MDAzZWZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUF9PRkZTRVQpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIHBwLVx1MDAzZWRvbnRfZGVmcmFnKSlcbitcdGlmICh1bmxpa2VseShjaWgtXHUwMDNlZnJhZ19vZmYgXHUwMDI2IGh0b25zKElQX09GRlNFVCkgXHUwMDI2XHUwMDI2ICFwcC1cdTAwM2Vkb250X2RlZnJhZykpXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBvZmZzZXQsXG5AQCAtMTE1OSw5ICsxMTU0LDkgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmICghY3ApXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4tXHRzbmV0LmlwID0gaXBoLVx1MDAzZXNhZGRyO1xuLVx0cmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQsIHNrYiwgXHUwMDI2c25ldCwgY2loLVx1MDAzZXByb3RvY29sLCBjcCxcbi1cdFx0XHRcdCAgICBwcCwgY2lwaC5sZW4sIGlobCwgaG9va251bSk7XG4rXHRzbmV0LmlwID0gaXB2c2gtXHUwMDNlc2FkZHIuaXA7XG4rXHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVCwgc2tiLCBcdTAwMjZzbmV0LCBjcCwgcHAsIFx1MDAyNmNpcGgsIGlobCxcbitcdFx0XHRcdCAgICBob29rbnVtKTtcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5AQCAtMTE3NCw3ICsxMTY5LDYgQEAgc3RhdGljIGludCBpcF92c19vdXRfaWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBpcF92c19jb25uICpjcDtcbiBcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7XG4gXHR1bmlvbiBuZl9pbmV0X2FkZHIgc25ldDtcbi1cdHVuc2lnbmVkIGludCBvZmZzZXQ7XG4gXG4gXHQqcmVsYXRlZCA9IDE7XG4gXHRpYyA9IGZyYWdfc2FmZV9za2JfaHAoc2tiLCBpcHZzaC1cdTAwM2VsZW4sIHNpemVvZihfaWNtcGgpLCBcdTAwMjZfaWNtcGgpO1xuQEAgLTEyMTAsNiArMTIwNCwxMCBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKCFwcClcbiBcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiBcbitcdC8qIElzIHRoZSBlbWJlZGRlZCBwcm90b2NvbCBoZWFkZXIgcHJlc2VudD8gKi9cbitcdGlmICh1bmxpa2VseShjaXBoLmZyYWdvZmZzIFx1MDAyNlx1MDAyNiAhcHAtXHUwMDNlZG9udF9kZWZyYWcpKVxuK1x0XHRyZXR1cm4gTkZfQUNDRVBUO1xuK1xuIFx0LyogVGhlIGVtYmVkZGVkIGhlYWRlcnMgY29udGFpbiBzb3VyY2UgYW5kIGRlc3QgaW4gcmV2ZXJzZSBvcmRlciAqL1xuIFx0Y3AgPSBJTkRJUkVDVF9DQUxMXzEocHAtXHUwMDNlY29ubl9vdXRfZ2V0LCBpcF92c19jb25uX291dF9nZXRfcHJvdG8sXG4gXHRcdFx0ICAgICBpcHZzLCBBRl9JTkVUNiwgc2tiLCBcdTAwMjZjaXBoKTtcbkBAIC0xMjE3LDkgKzEyMTUsOCBAQCBzdGF0aWMgaW50IGlwX3ZzX291dF9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFxuIFx0c25ldC5pbjYgPSBjaXBoLnNhZGRyLmluNjtcbi1cdG9mZnNldCA9IGNpcGgubGVuO1xuLVx0cmV0dXJuIGhhbmRsZV9yZXNwb25zZV9pY21wKEFGX0lORVQ2LCBza2IsIFx1MDAyNnNuZXQsIGNpcGgucHJvdG9jb2wsIGNwLFxuLVx0XHRcdFx0ICAgIHBwLCBvZmZzZXQsIGlwdnNoLVx1MDAzZWxlbiwgaG9va251bSk7XG4rXHRyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVDYsIHNrYiwgXHUwMDI2c25ldCwgY3AsIHBwLCBcdTAwMjZjaXBoLFxuK1x0XHRcdFx0ICAgIGlwdnNoLVx1MDAzZWxlbiwgaG9va251bSk7XG4gfVxuICNlbmRpZlxuIFxuQEAgLTE1NDUsNyArMTU0Miw4IEBAIGlwX3ZzX291dF9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0XG4gI2VuZGlmXG4gXHRcdGlmICh1bmxpa2VseShpcGgucHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QKSkge1xuIFx0XHRcdGludCByZWxhdGVkO1xuLVx0XHRcdGludCB2ZXJkaWN0ID0gaXBfdnNfb3V0X2ljbXAoaXB2cywgc2tiLCBcdTAwMjZyZWxhdGVkLCBob29rbnVtKTtcbitcdFx0XHRpbnQgdmVyZGljdCA9IGlwX3ZzX291dF9pY21wKGlwdnMsIHNrYiwgXHUwMDI2cmVsYXRlZCxcbitcdFx0XHRcdFx0XHQgICAgIGhvb2tudW0sIFx1MDAyNmlwaCk7XG4gXG4gXHRcdFx0aWYgKHJlbGF0ZWQpXG4gXHRcdFx0XHRyZXR1cm4gdmVyZGljdDtcbkBAIC0xNzUzLDkgKzE3NTEsOCBAQCBzdGF0aWMgaW50IGlwdnNfZ3JlX2RlY2FwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuICAqL1xuIHN0YXRpYyBpbnRcbiBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4tXHQgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSlcbitcdCAgICAgIHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbiB7XG4tXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbiBcdHN0cnVjdCBpY21waGRyXHRfaWNtcGgsICppYztcbiBcdHN0cnVjdCBpcGhkclx0X2NpcGgsICpjaWg7XHQvKiBUaGUgaXAgaGVhZGVyIGNvbnRhaW5lZCB3aXRoaW4gdGhlIElDTVAgKi9cbiBcdHN0cnVjdCBpcF92c19pcGhkciBjaXBoO1xuQEAgLTE3NjUsNyArMTc2Miw3IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdHVuc2lnbmVkIGludCBvZmZzZXQsIG9mZnNldDIsIGlobCwgdmVyZGljdDtcbiBcdGJvb2wgdHVubmVsLCBuZXdfY3AgPSBmYWxzZTtcbiBcdHVuaW9uIG5mX2luZXRfYWRkciAqcmFkZHI7XG4tXHRjaGFyICpvdXRlcl9wcm90byA9IFwiSVBJUFwiO1xuK1x0Y2hhciAqb3V0ZXJfcHJvdG8gX19tYXliZV91bnVzZWQgPSBcIklQSVBcIjtcbiBcdHVuc2lnbmVkIGludCBobGVuX2lwaXA7XG4gXHRpbnQgdWxlbiA9IDA7XG4gXG5AQCAtMTc3NSwxNyArMTc3MiwxOSBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXHRpZiAoaXBfaXNfZnJhZ21lbnQoaXBfaGRyKHNrYikpKSB7XG4gXHRcdGlmIChpcF92c19nYXRoZXJfZnJhZ3MoaXB2cywgc2tiLCBpcF92c19kZWZyYWdfdXNlcihob29rbnVtKSkpXG4gXHRcdFx0cmV0dXJuIE5GX1NUT0xFTjtcbitcdFx0aWYgKCFpcF92c19maWxsX2lwaF9za2IoQUZfSU5FVCwgc2tiLCBmYWxzZSwgaXBoKSlcbitcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFx0fVxuIFxuLVx0aXBoID0gaXBfaGRyKHNrYik7XG4tXHRvZmZzZXQgPSBpaGwgPSBpcGgtXHUwMDNlaWhsICogNDtcbitcdGlobCA9IGlwaC1cdTAwM2VsZW47XG4rXHRvZmZzZXQgPSBpcGgtXHUwMDNlbGVuO1xuIFx0aWMgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfaWNtcGgpLCBcdTAwMjZfaWNtcGgpO1xuIFx0aWYgKGljID09IE5VTEwpXG4gXHRcdHJldHVybiBORl9EUk9QO1xuIFxuIFx0SVBfVlNfREJHKDEyLCBcIkluY29taW5nIElDTVAgKCVkLCVkKSAlcEk0LVx1MDAzZSVwSTRcXG5cIixcbiBcdFx0ICBpYy1cdTAwM2V0eXBlLCBudG9ocyhpY21wX2lkKGljKSksXG4tXHRcdCAgXHUwMDI2aXBoLVx1MDAzZXNhZGRyLCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIpO1xuK1x0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkci5pcCwgXHUwMDI2aXBoLVx1MDAzZWRhZGRyLmlwKTtcbiBcbiBcdC8qXG4gXHQgKiBXb3JrIHRocm91Z2ggc2VlaW5nIGlmIHRoaXMgaXMgZm9yIHVzLlxuQEAgLTE4NjcsOCArMTg2Niw3IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdHBwID0gcGQtXHUwMDNlcHA7XG4gXG4gXHQvKiBJcyB0aGUgZW1iZWRkZWQgcHJvdG9jb2wgaGVhZGVyIHByZXNlbnQ/ICovXG4tXHRpZiAodW5saWtlbHkoY2loLVx1MDAzZWZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUF9PRkZTRVQpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIHBwLVx1MDAzZWRvbnRfZGVmcmFnKSlcbitcdGlmICh1bmxpa2VseShjaWgtXHUwMDNlZnJhZ19vZmYgXHUwMDI2IGh0b25zKElQX09GRlNFVCkgXHUwMDI2XHUwMDI2ICFwcC1cdTAwM2Vkb250X2RlZnJhZykpXG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXG4gXHRJUF9WU19EQkdfUEtUKDExLCBBRl9JTkVULCBwcCwgc2tiLCBvZmZzZXQsXG5AQCAtMTg3Niw3ICsxODc0LDYgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFxuIFx0b2Zmc2V0MiA9IG9mZnNldDtcbiBcdGlwX3ZzX2ZpbGxfaXBoX3NrYl9pY21wKEFGX0lORVQsIHNrYiwgb2Zmc2V0LCAhdHVubmVsLCBcdTAwMjZjaXBoKTtcbi1cdG9mZnNldCA9IGNpcGgubGVuO1xuIFxuIFx0LyogVGhlIGVtYmVkZGVkIGhlYWRlcnMgY29udGFpbiBzb3VyY2UgYW5kIGRlc3QgaW4gcmV2ZXJzZSBvcmRlci5cbiBcdCAqIEZvciBJUElQL1VEUC9HUkUgdHVubmVsIHRoaXMgaXMgZXJyb3IgZm9yIHJlcXVlc3QsIG5vdCBmb3IgcmVwbHkuXG5AQCAtMTg5OCwxMCArMTg5NSwxMSBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXHR2ZXJkaWN0ID0gTkZfRFJPUDtcbiBcbiBcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xuLVx0aWYgKCFza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpIFx1MDAyNlx1MDAyNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShza2IsIGlobCkpIHtcbitcdGlmICgoSVBfVlNfRldEX01FVEhPRChjcCkgPT0gSVBfVlNfQ09OTl9GX01BU1EgfHwgdHVubmVsKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgaWhsLCBJUFBST1RPX0lDTVAsIEFGX0lORVQpKSB7XG4gXHRcdC8qIEZhaWxlZCBjaGVja3N1bSEgKi9cbiBcdFx0SVBfVlNfREJHKDEsIFwiSW5jb21pbmcgSUNNUDogZmFpbGVkIGNoZWNrc3VtIGZyb20gJXBJNCFcXG5cIixcbi1cdFx0XHQgIFx1MDAyNmlwaC1cdTAwM2VzYWRkcik7XG4rXHRcdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIuaXApO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbkBAIC0xOTY5LDEwICsxOTY3LDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFxuIFx0LyogZG8gdGhlIHN0YXRpc3RpY3MgYW5kIHB1dCBpdCBiYWNrICovXG4gXHRpcF92c19pbl9zdGF0cyhjcCwgc2tiKTtcbi1cdGlmIChJUFBST1RPX1RDUCA9PSBjaWgtXHUwMDNlcHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2loLVx1MDAzZXByb3RvY29sIHx8XG4tXHQgICAgSVBQUk9UT19TQ1RQID09IGNpaC1cdTAwM2Vwcm90b2NvbClcbi1cdFx0b2Zmc2V0ICs9IDIgKiBzaXplb2YoX191MTYpO1xuLVx0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdChza2IsIGNwLCBwcCwgb2Zmc2V0LCBob29rbnVtLCBcdTAwMjZjaXBoKTtcbitcdHZlcmRpY3QgPSBpcF92c19pY21wX3htaXQoc2tiLCBjcCwgcHAsIGlwaC1cdTAwM2VsZW4sIGhvb2tudW0sIFx1MDAyNmNpcGgpO1xuIFxuIG91dDpcbiBcdGlmIChsaWtlbHkoIW5ld19jcCkpXG5AQCAtMjAzMiw4ICsyMDI3LDggQEAgc3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFx0cHAgPSBwZC1cdTAwM2VwcDtcbiBcbi1cdC8qIENhbm5vdCBoYW5kbGUgZnJhZ21lbnRlZCBlbWJlZGRlZCBwcm90b2NvbCAqL1xuLVx0aWYgKGNpcGguZnJhZ29mZnMpXG4rXHQvKiBJcyB0aGUgZW1iZWRkZWQgcHJvdG9jb2wgaGVhZGVyIHByZXNlbnQ/ICovXG4rXHRpZiAoY2lwaC5mcmFnb2ZmcyBcdTAwMjZcdTAwMjYgIXBwLVx1MDAzZWRvbnRfZGVmcmFnKVxuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFxuIFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsIG9mZnNldCxcbkBAIC0yMDU3LDIzICsyMDUyLDIyIEBAIHN0YXRpYyBpbnQgaXBfdnNfaW5faWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0bmV3X2NwID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdC8qIFZTL1RVTiwgVlMvRFIgYW5kIExPQ0FMTk9ERSBqdXN0IGxldCBpdCBnbyAqL1xuLVx0aWYgKChob29rbnVtID09IE5GX0lORVRfTE9DQUxfT1VUKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpKSB7XG4tXHRcdHZlcmRpY3QgPSBORl9BQ0NFUFQ7XG4rXHR2ZXJkaWN0ID0gTkZfRFJPUDtcbitcbitcdC8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqL1xuK1x0aWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApID09IElQX1ZTX0NPTk5fRl9NQVNRIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpcGgtXHUwMDNlbGVuLCBJUFBST1RPX0lDTVBWNixcbitcdFx0XHRcdFx0IEFGX0lORVQ2KSkge1xuK1x0XHQvKiBGYWlsZWQgY2hlY2tzdW0hICovXG4rXHRcdElQX1ZTX0RCRygxLCBcIkluY29taW5nIElDTVB2NjogZmFpbGVkIGNoZWNrc3VtIGZyb20gJXBJNmMhXFxuXCIsXG4rXHRcdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiBcdC8qIGRvIHRoZSBzdGF0aXN0aWNzIGFuZCBwdXQgaXQgYmFjayAqL1xuIFx0aXBfdnNfaW5fc3RhdHMoY3AsIHNrYik7XG4gXG4tXHQvKiBOZWVkIHRvIG1hbmdsZSBjb250YWluZWQgSVB2NiBoZWFkZXIgaW4gSUNNUHY2IHBhY2tldCAqL1xuLVx0b2Zmc2V0ID0gY2lwaC5sZW47XG4tXHRpZiAoSVBQUk9UT19UQ1AgPT0gY2lwaC5wcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBjaXBoLnByb3RvY29sIHx8XG4tXHQgICAgSVBQUk9UT19TQ1RQID09IGNpcGgucHJvdG9jb2wpXG4tXHRcdG9mZnNldCArPSAyICogc2l6ZW9mKF9fdTE2KTsgLyogQWxzbyBtYW5nbGUgcG9ydHMgKi9cbi1cbi1cdHZlcmRpY3QgPSBpcF92c19pY21wX3htaXRfdjYoc2tiLCBjcCwgcHAsIG9mZnNldCwgaG9va251bSwgXHUwMDI2Y2lwaCk7XG4rXHR2ZXJkaWN0ID0gaXBfdnNfaWNtcF94bWl0X3Y2KHNrYiwgY3AsIHBwLCBpcGgtXHUwMDNlbGVuLCBob29rbnVtLCBcdTAwMjZjaXBoKTtcbiBcbiBvdXQ6XG4gXHRpZiAobGlrZWx5KCFuZXdfY3ApKVxuQEAgLTIxNTIsNyArMjE0Niw3IEBAIGlwX3ZzX2luX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlXG4gXHRcdGlmICh1bmxpa2VseShpcGgucHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QKSkge1xuIFx0XHRcdGludCByZWxhdGVkO1xuIFx0XHRcdGludCB2ZXJkaWN0ID0gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsIFx1MDAyNnJlbGF0ZWQsXG4tXHRcdFx0XHRcdFx0ICAgIGhvb2tudW0pO1xuK1x0XHRcdFx0XHRcdCAgICBob29rbnVtLCBcdTAwMjZpcGgpO1xuIFxuIFx0XHRcdGlmIChyZWxhdGVkKVxuIFx0XHRcdFx0cmV0dXJuIHZlcmRpY3Q7XG5AQCAtMjI4OCw2ICsyMjgyLDcgQEAgaXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbiB7XG4gXHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IG5ldF9pcHZzKHN0YXRlLVx1MDAzZW5ldCk7XG4rXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgaXBoZHI7XG4gXHRpbnQgcjtcbiBcbiBcdC8qIGlwdnMgZW5hYmxlZCBpbiB0aGlzIG5ldG5zID8gKi9cbkBAIC0yMjk3LDEwICsyMjkyLDkgQEAgaXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoc3RhdGUtXHUwMDNlcGYgPT0gTkZQUk9UT19JUFY0KSB7XG4gXHRcdGlmIChpcF9oZHIoc2tiKS1cdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX0lDTVApXG4gXHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbitcdFx0aXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQsIHNrYiwgZmFsc2UsIFx1MDAyNmlwaGRyKTtcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbiBcdH0gZWxzZSB7XG4tXHRcdHN0cnVjdCBpcF92c19pcGhkciBpcGhkcjtcbi1cbiBcdFx0aXBfdnNfZmlsbF9pcGhfc2tiKEFGX0lORVQ2LCBza2IsIGZhbHNlLCBcdTAwMjZpcGhkcik7XG4gXG4gXHRcdGlmIChpcGhkci5wcm90b2NvbCAhPSBJUFBST1RPX0lDTVBWNilcbkBAIC0yMzEwLDcgKzIzMDQsNyBAQCBpcF92c19mb3J3YXJkX2ljbXAodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAjZW5kaWZcbiBcdH1cbiBcbi1cdHJldHVybiBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgXHUwMDI2ciwgc3RhdGUtXHUwMDNlaG9vayk7XG4rXHRyZXR1cm4gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsIFx1MDAyNnIsIHN0YXRlLVx1MDAzZWhvb2ssIFx1MDAyNmlwaGRyKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyBpcF92c19vcHM0W10gPSB7XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmNcbmluZGV4IGM2NzMxN2JlMTdkZmFmLi4zZGJkMzA5NmUxNjM3YiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmNcbkBAIC0xMSw3ICsxMSw3IEBAXG4gXG4gc3RhdGljIGludFxuIHNjdHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHRcdHVuc2lnbmVkIGludCBzY3RwaG9mZik7XG4rXHRcdHN0cnVjdCBpcF92c19pcGhkciAqaXBoKTtcbiBcbiBzdGF0aWMgaW50XG4gc2N0cF9jb25uX3NjaGVkdWxlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXG5AQCAtMTA5LDcgKzEwOSw3IEBAIHNjdHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdGludCByZXQ7XG4gXG4gXHRcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xuLVx0XHRpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgc2N0cGhvZmYpKVxuK1x0XHRpZiAoIXNjdHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXG5AQCAtMTIxLDcgKzEyMSw3IEBAIHNjdHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHNjdHBoID0gKHZvaWQgKikgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBzY3RwaG9mZjtcbitcdHNjdHBoID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YSArIHNjdHBob2ZmO1xuIFxuIFx0LyogT25seSB1cGRhdGUgY3N1bSBpZiB3ZSByZWFsbHkgaGF2ZSB0byAqL1xuIFx0aWYgKHNjdHBoLVx1MDAzZXNvdXJjZSAhPSBjcC1cdTAwM2V2cG9ydCB8fCBwYXlsb2FkX2NzdW0gfHxcbkBAIC0xNTcsNyArMTU3LDcgQEAgc2N0cF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBzY3RwaG9mZikpXG4rXHRcdGlmICghc2N0cF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi9cbkBAIC0xNjksNyArMTY5LDcgQEAgc2N0cF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0XHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xuIFx0fVxuIFxuLVx0c2N0cGggPSAodm9pZCAqKSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHNjdHBob2ZmO1xuK1x0c2N0cGggPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhICsgc2N0cGhvZmY7XG4gXG4gXHQvKiBPbmx5IHVwZGF0ZSBjc3VtIGlmIHdlIHJlYWxseSBoYXZlIHRvICovXG4gXHRpZiAoc2N0cGgtXHUwMDNlZGVzdCAhPSBjcC1cdTAwM2VkcG9ydCB8fCBwYXlsb2FkX2NzdW0gfHxcbkBAIC0xODcsMTkgKzE4NywyMiBAQCBzY3RwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIHN0YXRpYyBpbnRcbiBzY3RwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0XHR1bnNpZ25lZCBpbnQgc2N0cGhvZmYpXG4rXHRcdHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuIHtcbitcdHVuc2lnbmVkIGludCBzY3RwaG9mZiA9IGlwaC1cdTAwM2VsZW47XG4gXHRzdHJ1Y3Qgc2N0cGhkciAqc2g7XG4gXHRfX2xlMzIgY21wLCB2YWw7XG4gXG4rXHRpZiAoIWlwX3ZzX2NoZWNrc3VtX25lZWRlZChza2IsIGFmKSlcbitcdFx0cmV0dXJuIDE7XG4gXHRzaCA9IChzdHJ1Y3Qgc2N0cGhkciAqKShza2ItXHUwMDNlZGF0YSArIHNjdHBob2ZmKTtcbiBcdGNtcCA9IHNoLVx1MDAzZWNoZWNrc3VtO1xuIFx0dmFsID0gc2N0cF9jb21wdXRlX2Nrc3VtKHNrYiwgc2N0cGhvZmYpO1xuIFxuIFx0aWYgKHZhbCAhPSBjbXApIHtcbiBcdFx0LyogQ1JDIGZhaWx1cmUsIGR1bXAgaXQuICovXG4tXHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXG4tXHRcdFx0XHRcIkZhaWxlZCBjaGVja3N1bSBmb3JcIik7XG4rXHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIGlwaC1cdTAwM2VvZmYsXG4rXHRcdFx0XHQgXCJGYWlsZWQgY2hlY2tzdW0gZm9yXCIpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdHJldHVybiAxO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuY1xuaW5kZXggZjg2Yjc2M2VmY2M0ZGMuLjk5YTI4NmZkYzkwYzY1IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmNcbkBAIC0yOSw3ICsyOSw3IEBAXG4gXG4gc3RhdGljIGludFxuIHRjcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdCAgICAgICB1bnNpZ25lZCBpbnQgdGNwaG9mZik7XG4rXHQgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpO1xuIFxuIHN0YXRpYyBpbnRcbiB0Y3BfY29ubl9zY2hlZHVsZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTE2Niw3ICsxNjYsNyBAQCB0Y3Bfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdGludCByZXQ7XG4gXG4gXHRcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xuLVx0XHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCB0Y3Bob2ZmKSlcbitcdFx0aWYgKCF0Y3BfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0LyogQ2FsbCBhcHBsaWNhdGlvbiBoZWxwZXIgaWYgbmVlZGVkICovXG5AQCAtMTc5LDcgKzE3OSw3IEBAIHRjcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0XHRwYXlsb2FkX2NzdW0gPSB0cnVlO1xuIFx0fVxuIFxuLVx0dGNwaCA9ICh2b2lkICopc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyB0Y3Bob2ZmO1xuK1x0dGNwaCA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGEgKyB0Y3Bob2ZmO1xuIFx0dGNwaC1cdTAwM2Vzb3VyY2UgPSBjcC1cdTAwM2V2cG9ydDtcbiBcbiBcdC8qIEFkanVzdCBUQ1AgY2hlY2tzdW1zICovXG5AQCAtMjQ0LDcgKzI0NCw3IEBAIHRjcF9kbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghdGNwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIHRjcGhvZmYpKVxuK1x0XHRpZiAoIXRjcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKlxuQEAgLTI2MCw3ICsyNjAsNyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHRjcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgdGNwaG9mZjtcbitcdHRjcGggPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhICsgdGNwaG9mZjtcbiBcdHRjcGgtXHUwMDNlZGVzdCA9IGNwLVx1MDAzZWRwb3J0O1xuIFxuIFx0LypcbkBAIC0zMDIsNDEgKzMwMiwxMyBAQCB0Y3BfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXG4gc3RhdGljIGludFxuIHRjcF9jc3VtX2NoZWNrKGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbi1cdCAgICAgICB1bnNpZ25lZCBpbnQgdGNwaG9mZilcbitcdCAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbiB7XG4tXHRzd2l0Y2ggKHNrYi1cdTAwM2VpcF9zdW1tZWQpIHtcbi1cdGNhc2UgQ0hFQ0tTVU1fTk9ORTpcbi1cdFx0c2tiLVx1MDAzZWNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCB0Y3Bob2ZmLCBza2ItXHUwMDNlbGVuIC0gdGNwaG9mZiwgMCk7XG4tXHRcdGZhbGx0aHJvdWdoO1xuLVx0Y2FzZSBDSEVDS1NVTV9DT01QTEVURTpcbi0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbi1cdFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XG4tXHRcdFx0aWYgKGNzdW1faXB2Nl9tYWdpYyhcdTAwMjZpcHY2X2hkcihza2IpLVx1MDAzZXNhZGRyLFxuLVx0XHRcdFx0XHQgICAgXHUwMDI2aXB2Nl9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbi1cdFx0XHRcdFx0ICAgIHNrYi1cdTAwM2VsZW4gLSB0Y3Bob2ZmLFxuLVx0XHRcdFx0XHQgICAgSVBQUk9UT19UQ1AsXG4tXHRcdFx0XHRcdCAgICBza2ItXHUwMDNlY3N1bSkpIHtcbi1cdFx0XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXG4tXHRcdFx0XHRcdFx0IFwiRmFpbGVkIGNoZWNrc3VtIGZvclwiKTtcbi1cdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdH1cbi1cdFx0fSBlbHNlXG4tI2VuZGlmXG4tXHRcdFx0aWYgKGNzdW1fdGNwdWRwX21hZ2ljKGlwX2hkcihza2IpLVx1MDAzZXNhZGRyLFxuLVx0XHRcdFx0XHQgICAgICBpcF9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbi1cdFx0XHRcdFx0ICAgICAgc2tiLVx1MDAzZWxlbiAtIHRjcGhvZmYsXG4tXHRcdFx0XHRcdCAgICAgIGlwX2hkcihza2IpLVx1MDAzZXByb3RvY29sLFxuLVx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlY3N1bSkpIHtcbi1cdFx0XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXG4tXHRcdFx0XHRcdFx0IFwiRmFpbGVkIGNoZWNrc3VtIGZvclwiKTtcbi1cdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdH1cbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHQvKiBObyBuZWVkIHRvIGNoZWNrc3VtLiAqL1xuLVx0XHRicmVhaztcbitcdGlmICghaXBfdnNfY2hlY2tzdW1fY29tbW9uX2NoZWNrKHNrYiwgaXBoLVx1MDAzZWxlbiwgSVBQUk9UT19UQ1AsIGFmKSkge1xuK1x0XHRJUF9WU19EQkdfUkxfUEtUKDAsIGFmLCBwcCwgc2tiLCBpcGgtXHUwMDNlb2ZmLFxuK1x0XHRcdFx0IFwiRmFpbGVkIGNoZWNrc3VtIGZvclwiKTtcbitcdFx0cmV0dXJuIDA7XG4gXHR9XG4tXG4gXHRyZXR1cm4gMTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jXG5pbmRleCA1OGY5ZTI1NTkyN2UyZS4uZjMyNzg1NjgyNDAyZGQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuY1xuQEAgLTI1LDcgKzI1LDcgQEBcbiBcbiBzdGF0aWMgaW50XG4gdWRwX2NzdW1fY2hlY2soaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuLVx0ICAgICAgIHVuc2lnbmVkIGludCB1ZHBob2ZmKTtcbitcdCAgICAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCk7XG4gXG4gc3RhdGljIGludFxuIHVkcF9jb25uX3NjaGVkdWxlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXG5AQCAtMTU1LDcgKzE1NSw3IEBAIHVkcF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCxcbiBcdFx0aW50IHJldDtcbiBcbiBcdFx0LyogU29tZSBjaGVja3MgYmVmb3JlIG1hbmdsaW5nICovXG4tXHRcdGlmICghdWRwX2NzdW1fY2hlY2soY3AtXHUwMDNlYWYsIHNrYiwgcHAsIHVkcGhvZmYpKVxuK1x0XHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCBpcGgpKVxuIFx0XHRcdHJldHVybiAwO1xuIFxuIFx0XHQvKlxuQEAgLTE3MCw3ICsxNzAsNyBAQCB1ZHBfc25hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdFx0cGF5bG9hZF9jc3VtID0gdHJ1ZTtcbiBcdH1cbiBcbi1cdHVkcGggPSAodm9pZCAqKXNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgdWRwaG9mZjtcbitcdHVkcGggPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhICsgdWRwaG9mZjtcbiBcdHVkcGgtXHUwMDNlc291cmNlID0gY3AtXHUwMDNldnBvcnQ7XG4gXG4gXHQvKlxuQEAgLTIzOCw3ICsyMzgsNyBAQCB1ZHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4gXHRcdGludCByZXQ7XG4gXG4gXHRcdC8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqL1xuLVx0XHRpZiAoIXVkcF9jc3VtX2NoZWNrKGNwLVx1MDAzZWFmLCBza2IsIHBwLCB1ZHBob2ZmKSlcbitcdFx0aWYgKCF1ZHBfY3N1bV9jaGVjayhjcC1cdTAwM2VhZiwgc2tiLCBwcCwgaXBoKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiBcdFx0LypcbkBAIC0yNTQsNyArMjU0LDcgQEAgdWRwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFx0XHRcdHBheWxvYWRfY3N1bSA9IHRydWU7XG4gXHR9XG4gXG4tXHR1ZHBoID0gKHZvaWQgKilza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHVkcGhvZmY7XG4rXHR1ZHBoID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YSArIHVkcGhvZmY7XG4gXHR1ZHBoLVx1MDAzZWRlc3QgPSBjcC1cdTAwM2VkcG9ydDtcbiBcbiBcdC8qXG5AQCAtMjk4LDQ4ICsyOTgsMjAgQEAgdWRwX2RuYXRfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLFxuIFxuIHN0YXRpYyBpbnRcbiB1ZHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsXG4tXHQgICAgICAgdW5zaWduZWQgaW50IHVkcGhvZmYpXG4rXHQgICAgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXG4ge1xuIFx0c3RydWN0IHVkcGhkciBfdWRwaCwgKnVoO1xuIFxuLVx0dWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCB1ZHBob2ZmLCBzaXplb2YoX3VkcGgpLCBcdTAwMjZfdWRwaCk7XG4rXHR1aCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGlwaC1cdTAwM2VsZW4sIHNpemVvZihfdWRwaCksIFx1MDAyNl91ZHBoKTtcbiBcdGlmICh1aCA9PSBOVUxMKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmICh1aC1cdTAwM2VjaGVjayAhPSAwKSB7XG4tXHRcdHN3aXRjaCAoc2tiLVx1MDAzZWlwX3N1bW1lZCkge1xuLVx0XHRjYXNlIENIRUNLU1VNX05PTkU6XG4tXHRcdFx0c2tiLVx1MDAzZWNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCB1ZHBob2ZmLFxuLVx0XHRcdFx0XHRcdCBza2ItXHUwMDNlbGVuIC0gdWRwaG9mZiwgMCk7XG4tXHRcdFx0ZmFsbHRocm91Z2g7XG4tXHRcdGNhc2UgQ0hFQ0tTVU1fQ09NUExFVEU6XG4tI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4tXHRcdFx0aWYgKGFmID09IEFGX0lORVQ2KSB7XG4tXHRcdFx0XHRpZiAoY3N1bV9pcHY2X21hZ2ljKFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlc2FkZHIsXG4tXHRcdFx0XHRcdFx0ICAgIFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlZGFkZHIsXG4tXHRcdFx0XHRcdFx0ICAgIHNrYi1cdTAwM2VsZW4gLSB1ZHBob2ZmLFxuLVx0XHRcdFx0XHRcdCAgICBJUFBST1RPX1VEUCxcbi1cdFx0XHRcdFx0XHQgICAgc2tiLVx1MDAzZWNzdW0pKSB7XG4tXHRcdFx0XHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIDAsXG4tXHRcdFx0XHRcdFx0XHQgXCJGYWlsZWQgY2hlY2tzdW0gZm9yXCIpO1xuLVx0XHRcdFx0XHRyZXR1cm4gMDtcbi1cdFx0XHRcdH1cbi1cdFx0XHR9IGVsc2Vcbi0jZW5kaWZcbi1cdFx0XHRcdGlmIChjc3VtX3RjcHVkcF9tYWdpYyhpcF9oZHIoc2tiKS1cdTAwM2VzYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgICBpcF9oZHIoc2tiKS1cdTAwM2VkYWRkcixcbi1cdFx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlbGVuIC0gdWRwaG9mZixcbi1cdFx0XHRcdFx0XHQgICAgICBpcF9oZHIoc2tiKS1cdTAwM2Vwcm90b2NvbCxcbi1cdFx0XHRcdFx0XHQgICAgICBza2ItXHUwMDNlY3N1bSkpIHtcbi1cdFx0XHRcdFx0SVBfVlNfREJHX1JMX1BLVCgwLCBhZiwgcHAsIHNrYiwgMCxcbi1cdFx0XHRcdFx0XHRcdCBcIkZhaWxlZCBjaGVja3N1bSBmb3JcIik7XG4tXHRcdFx0XHRcdHJldHVybiAwO1xuLVx0XHRcdFx0fVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdC8qIE5vIG5lZWQgdG8gY2hlY2tzdW0uICovXG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbitcdGlmICghdWgtXHUwMDNlY2hlY2spXG4rXHRcdHJldHVybiAxO1xuK1x0aWYgKCFpcF92c19jaGVja3N1bV9jb21tb25fY2hlY2soc2tiLCBpcGgtXHUwMDNlbGVuLCBJUFBST1RPX1VEUCwgYWYpKSB7XG4rXHRcdElQX1ZTX0RCR19STF9QS1QoMCwgYWYsIHBwLCBza2IsIGlwaC1cdTAwM2VvZmYsXG4rXHRcdFx0XHQgXCJGYWlsZWQgY2hlY2tzdW0gZm9yXCIpO1xuK1x0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdHJldHVybiAxO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xuaW5kZXggOWZlZjQzMzVkYTEzZmQuLjBiMGM1MzA0OTkzYTkxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuY1xuQEAgLTE1MDIsMjAgKzE1MDIsMjIgQEAgaXBfdnNfZHJfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gICovXG4gaW50XG4gaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi1cdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4tXHRcdHN0cnVjdCBpcF92c19pcGhkciAqaXBoKVxuK1x0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCB1bnNpZ25lZCBpbnQgdG9mZixcbitcdFx0dW5zaWduZWQgaW50IGhvb2tudW0sIHN0cnVjdCBpcF92c19pcGhkciAqY2lwaClcbiB7XG4gXHRzdHJ1Y3QgcnRhYmxlXHQqcnQ7XHQvKiBSb3V0ZSB0byB0aGUgb3RoZXIgaG9zdCAqL1xuIFx0aW50IHJjO1xuIFx0aW50IGxvY2FsO1xuIFx0aW50IHJ0X21vZGUsIHdhc19pbnB1dDtcbitcdGJvb2wgaGFzX3BvcnRzID0gZmFsc2U7XG4rXHR1bnNpZ25lZCBpbnQgd2xlbjtcbiBcbiBcdC8qIFRoZSBJQ01QIHBhY2tldCBmb3IgVlMvVFVOLCBWUy9EUiBhbmQgTE9DQUxOT0RFIHdpbGwgYmVcbiBcdCAgIGZvcndhcmRlZCBkaXJlY3RseSBoZXJlLCBiZWNhdXNlIHRoZXJlIGlzIG5vIG5lZWQgdG9cbiBcdCAgIHRyYW5zbGF0ZSBhZGRyZXNzL3BvcnQgYmFjayAqL1xuIFx0aWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKSB7XG4gXHRcdGlmIChjcC1cdTAwM2VwYWNrZXRfeG1pdClcbi1cdFx0XHRyYyA9IGNwLVx1MDAzZXBhY2tldF94bWl0KHNrYiwgY3AsIHBwLCBpcGgpO1xuK1x0XHRcdHJjID0gY3AtXHUwMDNlcGFja2V0X3htaXQoc2tiLCBjcCwgcHAsIGNpcGgpO1xuIFx0XHRlbHNlXG4gXHRcdFx0cmMgPSBORl9BQ0NFUFQ7XG4gXHRcdC8qIGRvIG5vdCB0b3VjaCBza2IgYW55bW9yZSAqL1xuQEAgLTE1MzMsNyArMTUzNSw3IEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdCAgSVBfVlNfUlRfTU9ERV9MT0NBTCB8IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMIHxcbiBcdFx0ICBJUF9WU19SVF9NT0RFX1JEUiA6IElQX1ZTX1JUX01PREVfTk9OX0xPQ0FMO1xuIFx0bG9jYWwgPSBfX2lwX3ZzX2dldF9vdXRfcnQoY3AtXHUwMDNlaXB2cywgY3AtXHUwMDNlYWYsIHNrYiwgY3AtXHUwMDNlZGVzdCwgY3AtXHUwMDNlZGFkZHIuaXAsIHJ0X21vZGUsXG4tXHRcdFx0XHQgICBOVUxMLCBpcGgpO1xuK1x0XHRcdFx0ICAgTlVMTCwgY2lwaCk7XG4gXHRpZiAobG9jYWwgXHUwMDNjIDApXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXHRydCA9IHNrYl9ydGFibGUoc2tiKTtcbkBAIC0xNTY0LDE0ICsxNTY2LDIxIEBAIGlwX3ZzX2ljbXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXHR9XG4gXG4rXHR3bGVuID0gY2lwaC1cdTAwM2VsZW47XG4rXHRpZiAoY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fCBjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XG4rXHQgICAgY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1NDVFApIHtcbitcdFx0d2xlbiArPSAyICogc2l6ZW9mKF9fdTE2KTsgLyogQWxzbyBtYW5nbGUgcG9ydHMgKi9cbitcdFx0aGFzX3BvcnRzID0gdHJ1ZTtcbitcdH1cbitcbiBcdC8qIGNvcHktb24td3JpdGUgdGhlIHBhY2tldCBiZWZvcmUgbWFuZ2xpbmcgaXQgKi9cbi1cdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcbitcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgd2xlbikpXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXG4gXHRpZiAoc2tiX2Nvdyhza2IsIHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSlcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcbi1cdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwKTtcbitcdGlwX3ZzX25hdF9pY21wKHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMpO1xuIFxuIFx0LyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi9cbiBcdHNrYi1cdTAwM2VpZ25vcmVfZGYgPSAxO1xuQEAgLTE1ODcsMTAgKzE1OTYsMTIgQEAgaXBfdnNfaWNtcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbiBpbnRcbiBpcF92c19pY21wX3htaXRfdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuLVx0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaG9va251bSxcbi1cdFx0c3RydWN0IGlwX3ZzX2lwaGRyICppcHZzaClcbitcdFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgdW5zaWduZWQgaW50IHRvZmYsXG4rXHRcdHVuc2lnbmVkIGludCBob29rbnVtLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmNpcGgpXG4ge1xuK1x0Ym9vbCBoYXNfcG9ydHMgPSBmYWxzZTtcbiBcdHN0cnVjdCBydDZfaW5mb1x0KnJ0O1x0LyogUm91dGUgdG8gdGhlIG90aGVyIGhvc3QgKi9cbitcdHVuc2lnbmVkIGludCB3bGVuO1xuIFx0aW50IHJjO1xuIFx0aW50IGxvY2FsO1xuIFx0aW50IHJ0X21vZGU7XG5AQCAtMTYwMCw3ICsxNjExLDcgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdCAgIHRyYW5zbGF0ZSBhZGRyZXNzL3BvcnQgYmFjayAqL1xuIFx0aWYgKElQX1ZTX0ZXRF9NRVRIT0QoY3ApICE9IElQX1ZTX0NPTk5fRl9NQVNRKSB7XG4gXHRcdGlmIChjcC1cdTAwM2VwYWNrZXRfeG1pdClcbi1cdFx0XHRyYyA9IGNwLVx1MDAzZXBhY2tldF94bWl0KHNrYiwgY3AsIHBwLCBpcHZzaCk7XG4rXHRcdFx0cmMgPSBjcC1cdTAwM2VwYWNrZXRfeG1pdChza2IsIGNwLCBwcCwgY2lwaCk7XG4gXHRcdGVsc2VcbiBcdFx0XHRyYyA9IE5GX0FDQ0VQVDtcbiBcdFx0LyogZG8gbm90IHRvdWNoIHNrYiBhbnltb3JlICovXG5AQCAtMTYxNyw3ICsxNjI4LDcgQEAgaXBfdnNfaWNtcF94bWl0X3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbiBcdFx0ICBJUF9WU19SVF9NT0RFX0xPQ0FMIHwgSVBfVlNfUlRfTU9ERV9OT05fTE9DQUwgfFxuIFx0XHQgIElQX1ZTX1JUX01PREVfUkRSIDogSVBfVlNfUlRfTU9ERV9OT05fTE9DQUw7XG4gXHRsb2NhbCA9IF9faXBfdnNfZ2V0X291dF9ydF92NihjcC1cdTAwM2VpcHZzLCBjcC1cdTAwM2VhZiwgc2tiLCBjcC1cdTAwM2VkZXN0LFxuLVx0XHRcdFx0ICAgICAgXHUwMDI2Y3AtXHUwMDNlZGFkZHIuaW42LCBOVUxMLCBpcHZzaCwgMCwgcnRfbW9kZSk7XG4rXHRcdFx0XHQgICAgICBcdTAwMjZjcC1cdTAwM2VkYWRkci5pbjYsIE5VTEwsIGNpcGgsIDAsIHJ0X21vZGUpO1xuIFx0aWYgKGxvY2FsIFx1MDAzYyAwKVxuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFx0cnQgPSBkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKTtcbkBAIC0xNjQ4LDE0ICsxNjU5LDIxIEBAIGlwX3ZzX2ljbXBfeG1pdF92NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXHR9XG4gXG4rXHR3bGVuID0gY2lwaC1cdTAwM2VsZW47XG4rXHRpZiAoY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fCBjaXBoLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XG4rXHQgICAgY2lwaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1NDVFApIHtcbitcdFx0d2xlbiArPSAyICogc2l6ZW9mKF9fdTE2KTsgLyogQWxzbyBtYW5nbGUgcG9ydHMgKi9cbitcdFx0aGFzX3BvcnRzID0gdHJ1ZTtcbitcdH1cbitcbiBcdC8qIGNvcHktb24td3JpdGUgdGhlIHBhY2tldCBiZWZvcmUgbWFuZ2xpbmcgaXQgKi9cbi1cdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSlcbitcdGlmIChza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgd2xlbikpXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXG4gXHRpZiAoc2tiX2Nvdyhza2IsIHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSlcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcbi1cdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAwKTtcbitcdGlwX3ZzX25hdF9pY21wX3Y2KHNrYiwgcHAsIGNwLCAwLCB0b2ZmLCBoYXNfcG9ydHMsIGNpcGgpO1xuIFxuIFx0LyogQW5vdGhlciBoYWNrOiBhdm9pZCBpY21wX3NlbmQgaW4gaXBfZnJhZ21lbnQgKi9cbiBcdHNrYi1cdTAwM2VpZ25vcmVfZGYgPSAxO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDc6NTU6MTguNDYwNDM0MTQ0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzkxODMwODEwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQVlMgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMgYWltZWQgYXQgbW9kaWZ5aW5nIHRoZSBJUFZTIGNvZGUgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL2lwdnMvYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gSUNNUCBOQVQgaGFuZGxpbmcgYW5kIGNoZWNrc3VtIHZhbGlkYXRpb24uIEl0IGxvb2tzIGxpa2UgdGhleSd2ZSB0b3VjaGVkIHF1aXRlIGEgZmV3IGZ1bmN0aW9ucywgaW5jbHVkaW5nIGBpcF92c19uYXRfaWNtcGAsIGBpcF92c19uYXRfaWNtcF92NmAsIGBpcF92c19pbl9pY21wYCwgYGlwX3ZzX291dF9pY21wYCwgYGlwX3ZzX2ljbXBfeG1pdGAsIGFuZCB0aGVpciBJUHY2IGNvdW50ZXJwYXJ0cy4gVGhleSd2ZSBhbHNvIHJlZmFjdG9yZWQgY2hlY2tzdW0gY2hlY2tpbmcgd2l0aGluIHRoZSBwcm90b2NvbCBoYW5kbGVycyAoYGlwX3ZzX3Byb3RvX3RjcC5jYCwgYGlwX3ZzX3Byb3RvX3VkcC5jYCwgYGlwX3ZzX3Byb3RvX3NjdHAuY2ApIHVzaW5nIHRoaXMgbmV3IGhlbHBlciwgYGlwX3ZzX2NoZWNrc3VtX2NvbW1vbl9jaGVja2AsIHdoaWNoIGlzIGludGVyZXN0aW5nLlxuXG5CZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgSVBWUyBpcyBldmVuIGVuYWJsZWQgYW5kIGFjY2Vzc2libGUsIHdoaWNoIEkgY2FuIGNvbmZpcm0gaXMgdGhlIGNhc2UsIHNvIGdvb2QsIGdvb2QuIE5vdywgbGV0J3MgbmFpbCBkb3duIHByZWNpc2VseSB3aGljaCBmdW5jdGlvbnMgYXJlIGJlaW5nIG1vZGlmaWVkLCBiZWNhdXNlIHRob3NlIGFyZSB0aGUgcHJpbWUgY2FuZGlkYXRlcyBmb3IgZnV6emluZyBhbmQgdGFyZ2V0ZWQgYW5hbHlzaXMuIEkgd2FudCB0byBoaWdobGlnaHQgdGhlIGFyZWFzIHRoYXQgYXJlIGxpa2VseSB0byBiZSB0aGUgbW9zdCBpbXBhY3RlZC4gSSd2ZSBnb3QgYSBsaXN0IG9mIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGBpcF92c19uYXRfaWNtcGAsIGBpcF92c19uYXRfaWNtcF92NmAsIGBoYW5kbGVfcmVzcG9uc2VfaWNtcGAsIGBpcF92c19vdXRfaWNtcGAsIGBpcF92c19vdXRfaWNtcF92NmAsIGBpcF92c19pbl9pY21wYCwgYGlwX3ZzX2luX2ljbXBfdjZgLCBgaXBfdnNfZm9yd2FyZF9pY21wYCwgYHNjdHBfY3N1bV9jaGVja2AsIGB0Y3BfY3N1bV9jaGVja2AsIGB1ZHBfY3N1bV9jaGVja2AsIGBpcF92c19pY21wX3htaXRgLCBhbmQgYGlwX3ZzX2ljbXBfeG1pdF92NmAuIFRoaXMgZ2l2ZXMgbWUgYSBtdWNoIG1vcmUgZm9jdXNlZCB2aWV3IG9mIHdoZXJlIHRvIGFwcGx5IG15IHRlc3RpbmcuXG5cbk5leHQgc3RlcDogZG91YmxlLWNoZWNraW5nIHRoZSBLY29uZmlnIG9wdGlvbnMuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgbGlrZSBgQ09ORklHX0lQX1ZTYCwgYENPTkZJR19JUF9WU19JUFY2YCwgYENPTkZJR19JUF9WU19QUk9UT19UQ1BgLCBgQ09ORklHX0lQX1ZTX1BST1RPX1VEUGAsIGFuZCBgQ09ORklHX0lQX1ZTX1BST1RPX1NDVFBgIGFyZSBhbGwgc2V0IGNvcnJlY3RseSBhbmQgaGF2ZW4ndCBpbnRyb2R1Y2VkIGFueSB1bmV4cGVjdGVkIGRlcGVuZGVuY2llcyBvciBjb25mbGljdHMuIFRoZW4gaXQncyB0aW1lIHRvIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiBhbmQgcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzMDYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNzo1NToyNi4zNzg3NDU5NDJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE0Mzc5MDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJ0lQVlMgU0ggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVxcdGludCBcXFwiSVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJ0lQVlMgTUggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cXHRpbnQgXFxcIklQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNzo1NToyNi45OTMxMzA4NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDQ4OTU5NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipFeGFtaW5pbmcgSVBWUyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdmVyaWZ5IGEgY291cGxlIG9mIElQVlMgKElQIFZpcnR1YWwgU2VydmVyKSBjb25maWd1cmF0aW9ucyBoZXJlLiBMZXQncyBzZWUuLi4gRmlyc3QsIEkgd2FudCB0byBjb25maXJtIHRoZSBzdGF0dXMgb2YgYENPTkZJR19JUF9WU19JUFY2YC4gTWFrZXMgc2Vuc2Ug4oCTIHdlIG5lZWQgdG8gZW5zdXJlIElQdjYgc3VwcG9ydCBpcyBlbmFibGVkLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBkaXJlY3Rpb24gb2YgbmV0d29yayBpbmZyYXN0cnVjdHVyZS4gSVB2NiBpcyBpbmNyZWFzaW5nbHkgaW1wb3J0YW50LCBhbmQgd2l0aG91dCB0aGlzLCB0aGUgSVBWUyBzZXR1cCB3aWxsIGJlIHNldmVyZWx5IGxpbWl0ZWQuIEknbSB0aGlua2luZywgdGhpcyBpcyBwcm9iYWJseSBjcml0aWNhbCBmb3IgbW9kZXJuIGRlcGxveW1lbnRzLiBUaGVuLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiBgQ09ORklHX0lQX1ZTX1BST1RPX1NDVFBgLiBTQ1RQIGlzIGEgYml0IGxlc3MgY29tbW9uIHRoYW4gVENQIGFuZCBVRFAsIGJ1dCBpdOKAmXMgc3RpbGwgaW1wb3J0YW50IGZvciBjZXJ0YWluIGFwcGxpY2F0aW9ucy4gV2Ugc2hvdWxkIHZlcmlmeSB0aGF0IFNDVFAgc3VwcG9ydCBpcyBwcm9wZXJseSBpbnRlZ3JhdGVkIGFuZCBlbmFibGVkIGlmIHRoZSBzcGVjaWZpYyB1c2UgY2FzZSBkZW1hbmRzIGl0LiBCYXNpY2FsbHksIHRoZXNlIGNvbmZpZyBvcHRpb25zIGRldGVybWluZSB0aGUgZnVuZGFtZW50YWwgY2FwYWJpbGl0aWVzIG9mIElQVlMsIHNvIHRoZXkgYXJlIHRoZSBzdGFydGluZyBwb2ludCBmb3IgZXZlcnl0aGluZy4gTmVlZCB0byBtYWtlIHN1cmUgYm90aCBvZiB0aGVzZSBhcmUgc2V0IGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1ODAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNzo1NTozMC45MzgwMzA4MDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc3MTM5OTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU19JUFY2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNzo1NTozMS4wMzU3NTQ2NTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDc3Njk2OTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipJbnZlc3RpZ2F0aW5nIGEgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9uKipcblxuSG1tLCBJIHN1c3BlY3QgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciB0aGlzIG1pZ2h0IGJlIGBDT05GSUdfSVBfVlNfSVBWNmAuIEknbSBwcmV0dHkgc3VyZSBJIHNhdyBpdCBpbiBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIGJlZm9yZSwgYnV0IGl0J3MgYWx3YXlzIHdvcnRoIGRvdWJsZS1jaGVja2luZy4gVGltZSB0byB0YWtlIGEgbG9vayBhdCBlaXRoZXIgdGhhdCBmaWxlIG9yIG1heWJlIHRoZSBnZW5lcmFsIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUsIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGVuc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIHNvbWV0aGluZy4gR290dGEgdHJhY2sgZG93biBleGFjdGx5IHdoZXJlIHRoYXQgdGhpbmcgaXMgZGVmaW5lZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg3OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA3OjU1OjM2LjExMzQ1NTQzNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc1NTI0MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQtI1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXFx0dHJpc3RhdGUgXFxcIklQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAnSVBWUyBTSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXFx0aW50IFxcXCJJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAnSVBWUyBNSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVxcdGludCBcXFwiSVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA3OjU1OjM2LjI1MTAxMTM5NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTM0OTMzNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIElQdjYgYW5kIElQVlMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcuLi4gZ290dGEgZ2V0IGEgaGFuZGxlIG9uIHRoZSBJUHY2IGltcGxlbWVudGF0aW9uIHdpdGggSVBWUywgcmlnaHQ/IExldCdzIHN0YXJ0IHdpdGggYSBzb2xpZCBgZ3JlcGAgdG8gcXVpY2tseSBpZGVudGlmeSByZWxldmFudCBjb2RlIHNlY3Rpb25zLiBUaGF0IGBJUF9WU19JUFY2YCBzeW1ib2wgZmVlbHMgbGlrZSB0aGUgYmVzdCBzdGFydGluZyBwb2ludC4gSXTigJlzIHRoZSB1c3VhbCBnby10byBpZGVudGlmaWVyIGZvciBhbnkgSVB2NiBzcGVjaWZpYyBlbGVtZW50cyBpbiB0aGUga2VybmVsIG1vZHVsZSwgYW5kIHdpbGwgaGVscCBtZSBwaW5wb2ludCB0aGUgcGFydHMgb2YgdGhlIGNvZGUgYmFzZS4gR3JhYmJpbmcgYWxsIHRoZSBpbnN0YW5jZXMgb2YgYElQX1ZTX0lQVjZgIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBsYXkgb2YgdGhlIGxhbmQsIGVzcGVjaWFsbHkgaWYgSSBoYXZlIHRvIGRlYnVnIHNvbWUgY29ubmVjdGl2aXR5IGlzc3Vlcy4gVGhhdCBzaG91bGQgY292ZXIgdGhlIGJhc2ljcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzNzAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNzo1NTo0MC4wNDQ1MTE0NjJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwOTgxMTg2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJUF9WU19JUFY2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI3PWlmIElQX1ZTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjgtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjk6Y29uZmlnXFx0SVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwLVxcdGJvb2wgXFxcIklQdjYgc3VwcG9ydCBmb3IgSVBWU1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDc6NTU6NDAuNDU0MzI4MzIyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2NDM4NzMzNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCdzIGEgZGlyZWN0IHJlcHJlc2VudGF0aW9uIG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipTQ1RQIENvbnNpZGVyYXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBuZXR3b3JrIHByb3RvY29sIGNvbnNpZGVyYXRpb25zLiBXZSd2ZSBnb3QgdGhlIHVzdWFsIHN1c3BlY3RzIHRvIHRoaW5rIGFib3V0LCBidXQgd2FpdCBhIHNlY29uZC4uLiB3aGF0IGFib3V0IGBJUF9WU19QUk9UT19TQ1RQYD8gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiSGF2ZSB3ZSBmdWxseSBjb25zaWRlcmVkIHRoZSBpbXBsaWNhdGlvbnMgb2YgU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sIChTQ1RQKSB3aXRoaW4gdGhpcyBjb250ZXh0P1wiIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCBhbnkgc3BlY2lmaWMgb3B0aW1pemF0aW9ucyBvciBxdWlya3MgcmVsYXRlZCB0byB1c2luZyBTQ1RQLiBTcGVjaWZpY2FsbHksIGhvdyB3aWxsIHRoaXMgcHJvdG9jb2wgYWZmZWN0IHRoZSBWaXJ0dWFsIFNlcnZlciAoVlMpIGltcGxlbWVudGF0aW9uPyBEb2VzIFNDVFAgaW50cm9kdWNlIHVuaXF1ZSBjaGFsbGVuZ2VzIG9yIG9wcG9ydHVuaXRpZXMgd2UgbmVlZCB0byBhY2NvdW50IGZvciBpbiB0aGUgc2V0dXA/IEFyZSB0aGVyZSBudWFuY2VzIHRvIHRoZSBTQ1RQIHRoYXQgd2UgbXVzdCBiZSBhd2FyZSBvZiBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZT8gV2UgbWlnaHQgbmVlZCB0byByZWZyZXNoIHRoZSBkb2N1bWVudGF0aW9uIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIGZ1bGx5IGFjY291bnRlZCBmb3IgaXRzIHVzZS4gSSBzaG91bGQgbWFrZSBhIG5vdGUgdG8gY2lyY2xlIGJhY2sgYW5kIGZ1bGx5IHRoaW5rIHRocm91Z2ggaXRzIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NzAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNzo1NTo1MC4wOTgyMTMyMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzNTMzODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQX1ZTX1BST1RPX1NDVFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MTAwPWNvbmZpZ1xcdElQX1ZTX1BST1RPX0FIXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0xMDUtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MTA2OmNvbmZpZyAgSVBfVlNfUFJPVE9fU0NUUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTEwNy1cXHRib29sIFxcXCJTQ1RQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA3OjU1OjUwLjI1MTc1NDAzOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODg4ODA1NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSwgYW4gZXhwZXJ0LCBhbSBwcm9jZXNzaW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBUQ1AgUHJvdG9jb2wgSW50ZXJhY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gd2hhdCBhYm91dCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gSVAgYW5kIFRDUCwgc3BlY2lmaWNhbGx5IHRoYXQgYElQX1ZTX1BST1RPX1RDUGAgdGhpbmc/IFRoYXQncyBhIGtleSBlbGVtZW50LCBpc24ndCBpdD8gSSBuZWVkIHRvIHRoaW5rIGNhcmVmdWxseSBhYm91dCBob3cgdGhhdCBhZmZlY3RzIHRyYWZmaWMgbWFuYWdlbWVudCwgZXNwZWNpYWxseSBpbiB2aXJ0dWFsIHNlcnZlciBzZXR1cHMuIEl0J3Mgbm90IGp1c3QgYSBzdGFuZGFsb25lIHByb3RvY29sOyBpdCdzIHRoZSBpbnRlcnBsYXksIHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSBsYXllcnMgdGhhdCByZWFsbHkgbWF0dGVycyBmb3IgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5LiBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIGhvdyB0aGlzIHNwZWNpZmljIHByb3RvY29sIGludGVyYWN0aW9uIGluZmx1ZW5jZXMgbG9hZCBiYWxhbmNpbmcgdGVjaG5pcXVlcy4gVGhpbmtpbmcgYWJvdXQgaXQgbm93IEkgY2FuIHNlZSB0aGF0IHRoaXMgaXMgYSBxdWVzdGlvbiB0aGF0IHJlcXVpcmVzIGEgZGVlcGVyIGRpdmUgYW5kIEkgc2hvdWxkIGRvIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDMyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMDc6NTU6NTQuMTQwNTYyMjY3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgxMDcxNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBfVlNfUFJPVE9fVENQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTc3PWNvbW1lbnQgXFxcIklQVlMgdHJhbnNwb3J0IHByb3RvY29sIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNzgtXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Nzk6Y29uZmlnXFx0SVBfVlNfUFJPVE9fVENQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctODAtXFx0Ym9vbCBcXFwiVENQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMjE9Y29uZmlnXFx0SVBfVlNfRlRQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzIyLVxcdHRyaXN0YXRlIFxcXCJGVFAgcHJvdG9jb2wgaGVscGVyXFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMyMzpcXHRkZXBlbmRzIG9uIElQX1ZTX1BST1RPX1RDUCBcXHUwMDI2XFx1MDAyNiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkZfTkFUIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjQtXFx0XFx0TkZfQ09OTlRSQUNLX0ZUUFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNzo1NTo1NC4yNDg2NzM4M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDY4NjM2ODUxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipVRFAgQ29uc2lkZXJhdGlvbnMgaW4gSVBWUyoqXG5cblJpZ2h0LCBsZXQncyBzZWUuLi4gd2UncmUgdGFsa2luZyBhYm91dCBJUCBWaXJ0dWFsIFNlcnZlciAoSVBWUykgYW5kIGl0cyBwcm90b2NvbCBoYW5kbGluZy4gSSdtIGRlZXAgaW4gdGhlIHdlZWRzIGhlcmUsIGNvbnNpZGVyaW5nIHRoZSBudWFuY2VzLiBPa2F5LCBzbyB3ZSdyZSBzZXR0aW5nIHVwIGEgbG9hZCBiYWxhbmNpbmcgc3lzdGVtIHVzaW5nIElQVlMuIFRoYXQncyBhIHNvbGlkIGNob2ljZSwgY29uc2lkZXJpbmcgaXRzIHBlcmZvcm1hbmNlIGFkdmFudGFnZXMsIGVzcGVjaWFsbHkgd2l0aCBVRFAuIEFuZCBJIGtub3cgaXQncyBjYXBhYmxlIG9mIGhhbmRsaW5nIHZhcmlvdXMgdHlwZXMgb2YgcHJvdG9jb2xzLCB3aGljaCBnZXRzIG1lIHRoaW5raW5nLi4uIHdoYXQgYWJvdXQgdGhlIHNwZWNpZmljcyBvZiBoYW5kbGluZyBVRFAgd2l0aCBJUFZTLCBzaW5jZSB0aGVyZSBhcmUgc29tZSBkaWZmZXJlbmNlcy4gVGhlIHF1ZXN0aW9uIG9uIG15IG1pbmQgaXM6IFdoYXQgYWJvdXQgdGhlIGBJUF9WU19QUk9UT19VRFBgIG9wdGlvbiBpbiBwYXJ0aWN1bGFyPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGNvbnNpZGVyYXRpb25zIHRoYXQgSSBzaG91bGQgYmUgbWFraW5nIGZvciBVRFAgY29ubmVjdGlvbnMgdXNpbmcgdGhpcyBJUFZTIHByb3RvY29sIG9wdGlvbiwgc28gdGhhdCBJIGRvbid0IG92ZXJsb29rIGEgY3JpdGljYWwgZGV0YWlsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQ0OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA3OjU2OjA0LjkzNTA0NTI5MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg2NDMzMjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQX1ZTX1BST1RPX1VEUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz03OT1jb25maWdcXHRJUF9WU19QUk9UT19UQ1BcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTg0LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjg1OmNvbmZpZ1xcdElQX1ZTX1BST1RPX1VEUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTg2LVxcdGJvb2wgXFxcIlVEUCBsb2FkIGJhbGFuY2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzQ1PWNvbmZpZ1xcdElQX1ZTX1BFX1NJUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM0Ni1cXHR0cmlzdGF0ZSBcXFwiU0lQIHBlcnNpc3RlbmNlIGVuZ2luZVxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozNDc6XFx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19VRFBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDgtXFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tfU0lQXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDA3OjU2OjA1LjQyMTQ4Mzc5OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQwNzE0NDQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBcdTAwMjYgRnVuY3Rpb24gQW5hbHlzaXMgZm9yIElQVlMgSUNNUCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGVuYWJsaW5nIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gSVAgVmlydHVhbCBTZXJ2ZXIgKElQVlMpIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZvbGxvd2luZyBhcmUgZW5hYmxlZCBpbiB0aGUga2VybmVsOiBgSVBfVlNgLCBgSVBfVlNfSVBWNmAsIGBJUF9WU19QUk9UT19UQ1BgLCBgSVBfVlNfUFJPVE9fVURQYCwgYW5kIGBJUF9WU19QUk9UT19TQ1RQYC4gVGhlc2UgYXJlIHRoZSBiYXNpY3MgZm9yIHRoZSBkaWZmZXJlbnQgcHJvdG9jb2wgc3VwcG9ydC5cblxuTm93LCBJJ20gZm9jdXNpbmcgb24gc29tZSBrZXkgc3ltYm9scywgcHJpbWFyaWx5IHJlbGF0ZWQgdG8gSUNNUCBhbmQgY2hlY2tzdW0gaGFuZGxpbmcgd2l0aGluIElQVlMuIEknbSB0aGlua2luZyBhYm91dDpcblxuKiAgIElDTVAgTkFUIGZ1bmN0aW9uczogYGlwX3ZzX25hdF9pY21wYCwgYGlwX3ZzX25hdF9pY21wX3Y2YFxuKiAgIElDTVAgcmVzcG9uc2UgaGFuZGxpbmc6IGBoYW5kbGVfcmVzcG9uc2VfaWNtcGBcbiogICBJQ01QIHRyYW5zbWlzc2lvbiBhbmQgcmVjZXB0aW9uOiBgaXBfdnNfb3V0X2ljbXBgLCBgaXBfdnNfb3V0X2ljbXBfdjZgLCBgaXBfdnNfaW5faWNtcGAsIGBpcF92c19pbl9pY21wX3Y2YCwgYGlwX3ZzX2ZvcndhcmRfaWNtcGBcbiogICBDaGVja3N1bSBjaGVja3M6IGBzY3RwX2NzdW1fY2hlY2tgLCBgdGNwX2NzdW1fY2hlY2tgLCBgdWRwX2NzdW1fY2hlY2tgXG4qICAgSUNNUCB0cmFuc21pdCBmdW5jdGlvbnM6IGBpcF92c19pY21wX3htaXRgLCBgaXBfdnNfaWNtcF94bWl0X3Y2YFxuXG5JIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRob3NlIGNoZWNrc3VtIGNoZWNrIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCBhbmQgd2hlcmUgdGhlIG90aGVycyBhcmUgZGVmaW5lZC4gU28gSSd2ZSBjaGVja2VkLi4uIGBzY3RwX2NzdW1fY2hlY2tgLCBgdGNwX2NzdW1fY2hlY2tgLCBhbmQgYHVkcF9jc3VtX2NoZWNrYCBhcmUgc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlaXIgcmVzcGVjdGl2ZSBwcm90b2NvbCBmaWxlczogYGlwX3ZzX3Byb3RvX3NjdHAuY2AsIGBpcF92c19wcm90b190Y3AuY2AsIGFuZCBgaXBfdnNfcHJvdG9fdWRwLmNgLiBHb29kLCB0aGF0J3MgZXhwZWN0ZWQuXG5cbkkgZm91bmQgdGhhdCBgaXBfdnNfbmF0X2ljbXBgLCBgaGFuZGxlX3Jlc3BvbnNlX2ljbXBgLCBgaXBfdnNfb3V0X2ljbXBgLCBgaXBfdnNfaW5faWNtcGAsIGBpcF92c19mb3J3YXJkX2ljbXBgIGFsbCByZXNpZGUgYW5kIGFyZSBzdGF0aWMgd2l0aGluIGBpcF92c19jb3JlLmNgLiBBbmQgZmluYWxseSwgYGlwX3ZzX2ljbXBfeG1pdGAgaXMgZm91bmQgd2l0aGluIGBpcF92c194bWl0LmNgLlxuXG5Pa2F5LCBJIHRoaW5rIEkgaGF2ZSB3aGF0IEkgbmVlZCwgbm93LiBMZXQncyB1c2UgYHNldC1yZXN1bHRzYCB0byBnZXQgdGhpcyBpbmZvcm1hdGlvbiBpbiBhIHVzYWJsZSBmb3JtYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODk3LCJPdXRwdXRUb2tlbnMiOjI4MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QwNzo1NjoxNS44Mjg2MzIyMjVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzk3MTU2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCIsXG4gICAgXCJJUF9WU19JUFY2XCIsXG4gICAgXCJJUF9WU19QUk9UT19UQ1BcIixcbiAgICBcIklQX1ZTX1BST1RPX1VEUFwiLFxuICAgIFwiSVBfVlNfUFJPVE9fU0NUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX25hdF9pY21wXCIsXG4gICAgXCJpcF92c19uYXRfaWNtcF92NlwiLFxuICAgIFwiaGFuZGxlX3Jlc3BvbnNlX2ljbXBcIixcbiAgICBcImlwX3ZzX291dF9pY21wXCIsXG4gICAgXCJpcF92c19vdXRfaWNtcF92NlwiLFxuICAgIFwiaXBfdnNfaW5faWNtcFwiLFxuICAgIFwiaXBfdnNfaW5faWNtcF92NlwiLFxuICAgIFwiaXBfdnNfZm9yd2FyZF9pY21wXCIsXG4gICAgXCJzY3RwX2NzdW1fY2hlY2tcIixcbiAgICBcInRjcF9jc3VtX2NoZWNrXCIsXG4gICAgXCJ1ZHBfY3N1bV9jaGVja1wiLFxuICAgIFwiaXBfdnNfaWNtcF94bWl0XCIsXG4gICAgXCJpcF92c19pY21wX3htaXRfdjZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBJQ01QIE5BVCBoYW5kbGluZyBhbmQgY2hlY2tzdW0gdmFsaWRhdGlvbiBsb2dpYyBpbiBJUFZTLiBJdCBjaGFuZ2VzIGhvdyBJQ01QIHBhY2tldHMgYXJlIHByb2Nlc3NlZCwgTkFUZWQsIGFuZCB0cmFuc21pdHRlZCwgYW5kIHVwZGF0ZXMgY2hlY2tzdW0gdmFsaWRhdGlvbiBmb3IgVENQLCBVRFAsIGFuZCBTQ1RQIHByb3RvY29scyB3aXRoaW4gSVBWUy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgbW9kaWZpZWQgSUNNUCBoYW5kbGluZyBhbmQgY2hlY2tzdW0gdmFsaWRhdGlvbiBmdW5jdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIixcbiAgICBcIklQX1ZTX0lQVjZcIixcbiAgICBcIklQX1ZTX1BST1RPX1RDUFwiLFxuICAgIFwiSVBfVlNfUFJPVE9fVURQXCIsXG4gICAgXCJJUF9WU19QUk9UT19TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfbmF0X2ljbXBcIixcbiAgICBcImlwX3ZzX25hdF9pY21wX3Y2XCIsXG4gICAgXCJoYW5kbGVfcmVzcG9uc2VfaWNtcFwiLFxuICAgIFwiaXBfdnNfb3V0X2ljbXBcIixcbiAgICBcImlwX3ZzX291dF9pY21wX3Y2XCIsXG4gICAgXCJpcF92c19pbl9pY21wXCIsXG4gICAgXCJpcF92c19pbl9pY21wX3Y2XCIsXG4gICAgXCJpcF92c19mb3J3YXJkX2ljbXBcIixcbiAgICBcInNjdHBfY3N1bV9jaGVja1wiLFxuICAgIFwidGNwX2NzdW1fY2hlY2tcIixcbiAgICBcInVkcF9jc3VtX2NoZWNrXCIsXG4gICAgXCJpcF92c19pY21wX3htaXRcIixcbiAgICBcImlwX3ZzX2ljbXBfeG1pdF92NlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIElDTVAgTkFUIGhhbmRsaW5nIGFuZCBjaGVja3N1bSB2YWxpZGF0aW9uIGxvZ2ljIGluIElQVlMuIEl0IGNoYW5nZXMgaG93IElDTVAgcGFja2V0cyBhcmUgcHJvY2Vzc2VkLCBOQVRlZCwgYW5kIHRyYW5zbWl0dGVkLCBhbmQgdXBkYXRlcyBjaGVja3N1bSB2YWxpZGF0aW9uIGZvciBUQ1AsIFVEUCwgYW5kIFNDVFAgcHJvdG9jb2xzIHdpdGhpbiBJUFZTLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBtb2RpZmllZCBJQ01QIGhhbmRsaW5nIGFuZCBjaGVja3N1bSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow2fbsc[1] Phase: Succeeded StartedAt: 2026-07-23 07:56:28 +0000 UTC FinishedAt: 2026-07-23 07:56:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2fbsc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-23 07:56:28 +0000 UTC FinishedAt: 2026-07-23 07:56:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2fbsc[2] Phase: Succeeded StartedAt: 2026-07-23 07:56:28 +0000 UTC FinishedAt: 2026-07-23 12:33:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-23 07:56:28 +0000 UTC FinishedAt: 2026-07-23 12:33:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-23 07:56:28 +0000 UTC FinishedAt: 2026-07-23 07:56:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-23 07:56:28 +0000 UTC FinishedAt: 2026-07-23 07:56:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2fbsc/series-workflow2fbsc-convert-artifact-823207582/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-23 07:56:38 +0000 UTC FinishedAt: 2026-07-23 08:31:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-23 07:56:38 +0000 UTC FinishedAt: 2026-07-23 08:31:49 +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:*9505131c-ff40-4c23-a2d4-7d2bdcbfb50e,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-workflow2fbsc/series-workflow2fbsc-convert-artifact-823207582/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": "01a0e2eb-0fa3-4805-bf92-b9b2a3e1dc9d", "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-workflow2fbsc/series-workflow2fbsc-build-action-1331620740/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-23 07:56:38 +0000 UTC FinishedAt: 2026-07-23 08:31:39 +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:*9505131c-ff40-4c23-a2d4-7d2bdcbfb50e,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-workflow2fbsc/series-workflow2fbsc-convert-artifact-823207582/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": "01a0e2eb-0fa3-4805-bf92-b9b2a3e1dc9d", "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-workflow2fbsc/series-workflow2fbsc-build-action-1331620740/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-23 08:31:49 +0000 UTC FinishedAt: 2026-07-23 08:31:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-23 08:31:49 +0000 UTC FinishedAt: 2026-07-23 08:31:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-23 08:31:49 +0000 UTC FinishedAt: 2026-07-23 08:31:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-23 08:31:49 +0000 UTC FinishedAt: 2026-07-23 08:31:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2fbsc/series-workflow2fbsc-convert-artifact-98537041/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-23 08:31:59 +0000 UTC FinishedAt: 2026-07-23 08:34:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-23 08:31:59 +0000 UTC FinishedAt: 2026-07-23 08:34:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*01a0e2eb-0fa3-4805-bf92-b9b2a3e1dc9d,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-workflow2fbsc/series-workflow2fbsc-build-action-1331620740/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-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-23 08:34:12 +0000 UTC FinishedAt: 2026-07-23 08:34:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-23 08:34:12 +0000 UTC FinishedAt: 2026-07-23 08:34:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-23 08:34:12 +0000 UTC FinishedAt: 2026-07-23 09:28:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-23 08:34:12 +0000 UTC FinishedAt: 2026-07-23 09:28: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:*9505131c-ff40-4c23-a2d4-7d2bdcbfb50e,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-workflow2fbsc/series-workflow2fbsc-convert-artifact-98537041/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": "c6f3174a-b337-43fb-a660-c1a577be655c", "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-workflow2fbsc/series-workflow2fbsc-build-action-451507229/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-23 08:34:12 +0000 UTC FinishedAt: 2026-07-23 09:27:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*9505131c-ff40-4c23-a2d4-7d2bdcbfb50e,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-workflow2fbsc/series-workflow2fbsc-convert-artifact-98537041/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": "c6f3174a-b337-43fb-a660-c1a577be655c", "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-workflow2fbsc/series-workflow2fbsc-build-action-451507229/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-23 09:28:09 +0000 UTC FinishedAt: 2026-07-23 09:28:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-23 09:28:09 +0000 UTC FinishedAt: 2026-07-23 09:28:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-23 09:28:09 +0000 UTC FinishedAt: 2026-07-23 09:30:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-23 09:28:09 +0000 UTC FinishedAt: 2026-07-23 09:30:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c6f3174a-b337-43fb-a660-c1a577be655c,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-workflow2fbsc/series-workflow2fbsc-build-action-451507229/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-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-23 09:30:21 +0000 UTC FinishedAt: 2026-07-23 12:33:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-23 09:30:21 +0000 UTC FinishedAt: 2026-07-23 12:33:01 +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":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"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:*01a0e2eb-0fa3-4805-bf92-b9b2a3e1dc9d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c6f3174a-b337-43fb-a660-c1a577be655c,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-workflow2fbsc/series-workflow2fbsc-build-action-1331620740/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-workflow2fbsc/series-workflow2fbsc-build-action-451507229/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-23 09:30:21 +0000 UTC FinishedAt: 2026-07-23 09:30:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-23 09:30:21 +0000 UTC FinishedAt: 2026-07-23 09:30:25 +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":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"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-workflow2fbsc/series-workflow2fbsc-convert-artifact-1017156230/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-23 09:30:21 +0000 UTC FinishedAt: 2026-07-23 09:30:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-23 09:30:21 +0000 UTC FinishedAt: 2026-07-23 09:30:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-23 09:30:21 +0000 UTC FinishedAt: 2026-07-23 09:30:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-23 09:30:31 +0000 UTC FinishedAt: 2026-07-23 12:33:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2fbsc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_nat_icmp","ip_vs_nat_icmp_v6","handle_response_icmp","ip_vs_out_icmp","ip_vs_out_icmp_v6","ip_vs_in_icmp","ip_vs_in_icmp_v6","ip_vs_forward_icmp","sctp_csum_check","tcp_csum_check","udp_csum_check","ip_vs_icmp_xmit","ip_vs_icmp_xmit_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"56d96fededd61192cd7cc8d2b0f36adfd59036c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS","IP_VS_IPV6","IP_VS_PROTO_TCP","IP_VS_PROTO_UDP","IP_VS_PROTO_SCTP"],"series_id":"50bb7c56-be69-4816-a006-ecbf0b0488a1","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-23 09:30:31 +0000 UTC FinishedAt: 2026-07-23 12:32:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*01a0e2eb-0fa3-4805-bf92-b9b2a3e1dc9d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c6f3174a-b337-43fb-a660-c1a577be655c,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-workflow2fbsc/series-workflow2fbsc-build-action-1331620740/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-workflow2fbsc/series-workflow2fbsc-build-action-451507229/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-workflow2fbsc/series-workflow2fbsc-convert-artifact-1017156230/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,}