Name: series-workflowlxlqp Phase: Succeeded StartedAt: 2026-08-04 02:02:10 +0000 UTC FinishedAt: 2026-08-04 05:50:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxlqp[0] Phase: Succeeded StartedAt: 2026-08-04 02:02:10 +0000 UTC FinishedAt: 2026-08-04 02:09:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxlqp[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 02:02:10 +0000 UTC FinishedAt: 2026-08-04 02:09:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN", "VHOST_NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN", "VHOST_NET" ], "series_id": "2ea0ccf2-9452-423f-8732-44c08f49c418" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "tun_net_xmit", "tun_set_iff", "tun_chr_ioctl", "tun_chr_read_iter", "tun_net_close", "tun_queue_resize", "tun_wake_queue", "vhost_net_ioctl", "vhost_net_open" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7LAogICAgJiMzNDtWSE9TVF9ORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0dW5fbmV0X3htaXQmIzM0OywKICAgICYjMzQ7dHVuX3NldF9pZmYmIzM0OywKICAgICYjMzQ7dHVuX2Nocl9pb2N0bCYjMzQ7LAogICAgJiMzNDt0dW5fY2hyX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDt0dW5fbmV0X2Nsb3NlJiMzNDssCiAgICAmIzM0O3R1bl9xdWV1ZV9yZXNpemUmIzM0OywKICAgICYjMzQ7dHVuX3dha2VfcXVldWUmIzM0OywKICAgICYjMzQ7dmhvc3RfbmV0X2lvY3RsJiMzNDssCiAgICAmIzM0O3Zob3N0X25ldF9vcGVuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSAoSUZGX0JBQ0tQUkVTU1VSRSkgdG8gdGhlIFRVTi9UQVAgZHJpdmVyLCBhbGxvd2luZyB0aGUga2VybmVsIHRvIHN0b3AgdGhlIHF1ZXVlIGluc3RlYWQgb2YgZHJvcHBpbmcgcGFja2V0cyB3aGVuIHRoZSBpbnRlcm5hbCByaW5nIGJ1ZmZlciBpcyBmdWxsLiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBhbmQgVFVOL1RBUCBkcml2ZXIgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSB2aG9zdC1uZXQgZHJpdmVyIHRvIHdha2UgdGhlIHF1ZXVlIHdoZW4gaXRlbXMgYXJlIGNvbnN1bWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWEzMjBkOTJiZGE2ODE4YTQ1YmQ2MWEyYWUwZTg5ODFmYTYyYTUzM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDQgMDI6MDU6NDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdFxuaW5kZXggNGQ3MDg3ZjcyN2JlNS4uNTZjOWRjN2I5NmFmYiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdFxuQEAgLTIwNiw2ICYjNDM7MjA2LDM4IEBAIGVuYWJsZSBpcyB0cnVlIHdlIGVuYWJsZSBpdCwgb3RoZXJ3aXNlIHdlIGRpc2FibGUgaXQ6OlxuICAgICAgIHJldHVybiBpb2N0bChmZCwgVFVOU0VUUVVFVUUsICh2b2lkICopXHUwMDI2aWZyKTtcbiAgIH1cbiBcbiYjNDM7My40IHFkaXNjIGJhY2twcmVzc3VyZVxuJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzO1xuJiM0MztJRkZfQkFDS1BSRVNTVVJFIGNhbiBiZSBzZXQgdG8gZW5hYmxlIHFkaXNjIGJhY2twcmVzc3VyZS4gV2l0aG91dCBpdCwgVFhcbiYjNDM7ZHJvcHMgb2NjdXIgd2hlbiB0aGUgaW50ZXJuYWwgcmluZyBidWZmZXIgaXMgZnVsbCwgc28gYW55IGF0dGFjaGVkIHFkaXNjXG4mIzQzO2lzIGVmZmVjdGl2ZWx5IGJ5cGFzc2VkIGFuZCBhcHBsaWNhdGlvbnMgb25seSBsZWFybiBhYm91dCBjb25nZXN0aW9uXG4mIzQzO3Rocm91Z2ggdGhvc2UgZHJvcHMuXG4mIzQzO1xuJiM0MztXaXRoIGl0LCB0aGUga2VybmVsIHN0b3BzIHRoZSBxdWV1ZSBpbnN0ZWFkLCBsZXR0aW5nIHRoZSBxZGlzYyBob2xkIGFuZFxuJiM0MztzY2hlZHVsZSBwYWNrZXRzLCBzbyBpdHMgQVFNLCBzaGFwaW5nIGFuZCBmYWlybmVzcyBhY3R1YWxseSBhcHBseS4gVGhpc1xuJiM0MztoZWxwcyBwcm90b2NvbHMgbGlrZSBUQ1AsIHdoaWNoIGN1dCB0aHJvdWdocHV0IGluIHJlYWN0aW9uIHRvIHBhY2tldFxuJiM0Mztkcm9wcy4gV2l0aCBJRkZfQkFDS1BSRVNTVVJFLCBkcm9wcyB0aGVuIG9ubHkgb2NjdXIgYXMgYSByYXJlIHJhY2UuXG4mIzQzO0JhY2twcmVzc3VyZSByZXF1aXJlcyBhIHFkaXNjIHRvIGJlIGF0dGFjaGVkIGFuZCBoYXMgbm8gZWZmZWN0IHdpdGhcbiYjNDM7bm9xdWV1ZS5cbiYjNDM7XG4mIzQzO1RoZSBmbGFnIGlzIGEgcHJvcGVydHkgb2YgdGhlIFRVTi9UQVAgZGV2aWNlIHJhdGhlciB0aGFuIG9mIHRoZSBmaWxlXG4mIzQzO2Rlc2NyaXB0b3IgaXQgd2FzIHNldCBvbiwgc28gaXQgYXBwbGllcyB0byBhbGwgcXVldWVzIG9mIHRoZSBkZXZpY2UsXG4mIzQzO3JlZ2FyZGxlc3Mgb2Ygd2hpY2ggcHJvY2VzcyBvcGVuZWQgd2hpY2ggcXVldWUuXG4mIzQzO1xuJiM0MztUaGUgZmxhZyBjYW4gb25seSBiZSBjaGFuZ2VkIHdoaWxlIHRoZSBkZXZpY2UgaGFzIGF0IG1vc3Qgb25lIHF1ZXVlLiBPbiBhXG4mIzQzO211bHRpcXVldWUgZGV2aWNlIHRoYXQgYWxyZWFkeSBoYXMgYSBzZWNvbmQgcXVldWUgYXR0YWNoZWQgb3IgZGV0YWNoZWQsIGFcbiYjNDM7bGF0ZXIgVFVOU0VUSUZGIHN1Y2NlZWRzIGJ1dCBsZWF2ZXMgdGhlIGZsYWcgYXMgaXQgaXMuIEFsbCB0aGUgb3RoZXJcbiYjNDM7VFVOU0VUSUZGIGZsYWdzIGJlaGF2ZSB0aGUgc2FtZSB3YXkuXG4mIzQzO1xuJiM0MztUaGUgdHhxdWV1ZWxlbiBjYW4gYmUgcmVkdWNlZCBhbG9uZ3NpZGUgdGhpcyBmbGFnIHRvIGZ1cnRoZXIgc2hpZnRcbiYjNDM7YnVmZmVyaW5nIGludG8gdGhlIHFkaXNjIGFuZCByZWR1Y2UgYnVmZmVyYmxvYXQsIGF0IGEgcG9zc2libGVcbiYjNDM7cGVyZm9ybWFuY2UgY29zdC5cbiYjNDM7XG4mIzQzO1doZW4gcnVubmluZyBtdWx0aXBsZSBuZXR3b3JrIHN0cmVhbXMgaW4gcGFyYWxsZWwgdGhyb3VnaCBhIHNpbmdsZVxuJiM0MztUVU4vVEFQIHF1ZXVlLCB0aGUgZmxhZyBtYXkgcmVkdWNlIHBlcmZvcm1hbmNlIGR1ZSB0byB0aGUgZXh0cmEgb3ZlcmhlYWRcbiYjNDM7b2YgdGhlIGJhY2twcmVzc3VyZSBtZWNoYW5pc20uXG4mIzQzO1xuIFVuaXZlcnNhbCBUVU4vVEFQIGRldmljZSBkcml2ZXIgRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvblxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bi5jIGIvZHJpdmVycy9uZXQvdHVuLmNcbmluZGV4IDUxZTgwMDAwYmQwZWQuLmVjOTBmZWY0YTQyZjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC90dW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdHVuLmNcbkBAIC05OCw3ICYjNDM7OTgsOCBAQCBzdGF0aWMgdm9pZCB0dW5fZGVmYXVsdF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuICNkZWZpbmUgVFVOX0ZBU1lOQ1x0SUZGX0FUVEFDSF9RVUVVRVxuIFxuICNkZWZpbmUgVFVOX0ZFQVRVUkVTIChJRkZfTk9fUEkgfCBJRkZfT05FX1FVRVVFIHwgSUZGX1ZORVRfSERSIHwgXFxcbi1cdFx0ICAgICAgSUZGX01VTFRJX1FVRVVFIHwgSUZGX05BUEkgfCBJRkZfTkFQSV9GUkFHUylcbiYjNDM7XHRcdCAgICAgIElGRl9NVUxUSV9RVUVVRSB8IElGRl9OQVBJIHwgSUZGX05BUElfRlJBR1MgfCBcXFxuJiM0MztcdFx0ICAgICAgSUZGX0JBQ0tQUkVTU1VSRSlcbiBcbiAjZGVmaW5lIEdPT0RDT1BZX0xFTiAxMjhcbiBcbkBAIC0xNDUsNiAmIzQzOzE0Niw4IEBAIHN0cnVjdCB0dW5fZmlsZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG5leHQ7XG4gXHRzdHJ1Y3QgdHVuX3N0cnVjdCAqZGV0YWNoZWQ7XG4gXHRzdHJ1Y3QgcHRyX3JpbmcgdHhfcmluZztcbiYjNDM7XHQvKiBQcm90ZWN0ZWQgYnkgdHhfcmluZy5jb25zdW1lcl9sb2NrICovXG4mIzQzO1x0aW50IGNvbnNfY250O1xuIFx0c3RydWN0IHhkcF9yeHFfaW5mbyB4ZHBfcnhxO1xuIH07XG4gXG5AQCAtNTg1LDExICYjNDM7NTg4LDE2IEBAIHN0YXRpYyB2b2lkIF9fdHVuX2RldGFjaChzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBib29sIGNsZWFuKVxuIFx0XHR1MTYgaW5kZXggPSB0ZmlsZS1cdTAwM2VxdWV1ZV9pbmRleDtcbiBcdFx0QlVHX09OKGluZGV4IFx1MDAzZT0gdHVuLVx1MDAzZW51bXF1ZXVlcyk7XG4gXG4mIzQzO1x0XHRzcGluX2xvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHR1bi1cdTAwM2V0ZmlsZXNbaW5kZXhdLFxuIFx0XHRcdFx0ICAgdHVuLVx1MDAzZXRmaWxlc1t0dW4tXHUwMDNlbnVtcXVldWVzIC0gMV0pO1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbiBcdFx0bnRmaWxlID0gcnRubF9kZXJlZmVyZW5jZSh0dW4tXHUwMDNldGZpbGVzW2luZGV4XSk7XG4mIzQzO1x0XHRzcGluX2xvY2soXHUwMDI2bnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4gXHRcdG50ZmlsZS1cdTAwM2VxdWV1ZV9pbmRleCA9IGluZGV4O1xuIFx0XHRudGZpbGUtXHUwMDNleGRwX3J4cS5xdWV1ZV9pbmRleCA9IGluZGV4O1xuJiM0MztcdFx0bnRmaWxlLVx1MDAzZWNvbnNfY250ID0gMDtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrKFx1MDAyNm50ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIodHVuLVx1MDAzZXRmaWxlc1t0dW4tXHUwMDNlbnVtcXVldWVzIC0gMV0sXG4gXHRcdFx0XHQgICBOVUxMKTtcbiBcbkBAIC02MDYsNiAmIzQzOzYxNCwxNCBAQCBzdGF0aWMgdm9pZCBfX3R1bl9kZXRhY2goc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgYm9vbCBjbGVhbilcbiBcdFx0dHVuX2Zsb3dfZGVsZXRlX2J5X3F1ZXVlKHR1biwgdHVuLVx1MDAzZW51bXF1ZXVlcyAmIzQzOyAxKTtcbiBcdFx0LyogRHJvcCByZWFkIHF1ZXVlICovXG4gXHRcdHR1bl9xdWV1ZV9wdXJnZSh0ZmlsZSk7XG4mIzQzO1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2bnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4mIzQzO1x0XHRzcGluX2xvY2soXHUwMDI2bnRmaWxlLVx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XG4mIzQzO1x0XHRudGZpbGUtXHUwMDNlY29uc19jbnQgPSAwO1xuJiM0MztcdFx0aWYgKG5ldGlmX3J1bm5pbmcodHVuLVx1MDAzZWRldikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgX19wdHJfcmluZ19lbXB0eShcdTAwMjZudGZpbGUtXHUwMDNldHhfcmluZykpXG4mIzQzO1x0XHRcdG5ldGlmX3dha2Vfc3VicXVldWUodHVuLVx1MDAzZWRldiwgaW5kZXgpO1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2bnRmaWxlLVx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZudGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbiBcdFx0dHVuX3NldF9yZWFsX251bV9xdWV1ZXModHVuKTtcbiBcdH0gZWxzZSBpZiAodGZpbGUtXHUwMDNlZGV0YWNoZWQgXHUwMDI2XHUwMDI2IGNsZWFuKSB7XG4gXHRcdHR1biA9IHR1bl9lbmFibGVfcXVldWUodGZpbGUpO1xuQEAgLTY4Nyw2ICYjNDM7NzAzLDI1IEBAIHN0YXRpYyB2b2lkIHR1bl9kZXRhY2hfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgdHVuX2ZvcmNlX3dha2VfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbiYjNDM7XHRcdFx0XHQgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcbiYjNDM7e1xuJiM0MztcdC8qIEVuc3VyZSB0aGF0IHRoZSBwcm9kdWNlciBjYW4gbm90IHN0b3AgdGhlXG4mIzQzO1x0ICogcXVldWUgY29uY3VycmVudGx5IGJ5IHRha2luZyBsb2Nrcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcbiYjNDM7XHR0ZmlsZS1cdTAwM2Vjb25zX2NudCA9IDA7XG4mIzQzO1x0LyogVGVzdGVkIHVuZGVyIHRoZSBsb2NrcyB0aGF0IHR1bl9uZXRfY2xvc2UoKSB0YWtlcywgc28gdGhpcyBjYW4gbm90XG4mIzQzO1x0ICogdW5kbyBpdHMgc3RvcC4gdHVuX25ldF9vcGVuKCkgd2FrZXMgdGhlIHF1ZXVlcyBvZiBhIGRldmljZSB0aGF0XG4mIzQzO1x0ICogY29tZXMgYmFjayB1cC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobmV0aWZfcnVubmluZyh0dW4tXHUwMDNlZGV2KSlcbiYjNDM7XHRcdG5ldGlmX3dha2Vfc3VicXVldWUodHVuLVx1MDAzZWRldiwgdGZpbGUtXHUwMDNlcXVldWVfaW5kZXgpO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHR1bl9hdHRhY2goc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdCAgICAgIGJvb2wgc2tpcF9maWx0ZXIsIGJvb2wgbmFwaSwgYm9vbCBuYXBpX2ZyYWdzLFxuIFx0XHQgICAgICBib29sIHB1Ymxpc2hfdHVuKVxuQEAgLTczMCw4ICYjNDM7NzY1LDExIEBAIHN0YXRpYyBpbnQgdHVuX2F0dGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4gXHR0ZmlsZS1cdTAwM2VxdWV1ZV9pbmRleCA9IHR1bi1cdTAwM2VudW1xdWV1ZXM7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbiBcdHRmaWxlLVx1MDAzZXNvY2tldC5zay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjY9IH5SQ1ZfU0hVVERPV047XG4mIzQzO1x0dHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCB0ZmlsZSk7XG4gXG4gXHRpZiAodGZpbGUtXHUwMDNlZGV0YWNoZWQpIHtcbiBcdFx0LyogUmUtYXR0YWNoIGRldGFjaGVkIHRmaWxlLCB1cGRhdGluZyBYRFAgcXVldWVfaW5kZXggKi9cbkBAIC05NjQsNiAmIzQzOzEwMDIsMjQgQEAgc3RhdGljIGludCB0dW5fbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAvKiBOZXQgZGV2aWNlIGNsb3NlLiAqL1xuIHN0YXRpYyBpbnQgdHVuX25ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHQvKiBuZXRpZl9ydW5uaW5nKCkgaXMgYWxyZWFkeSBmYWxzZTogdGFrZSBib3RoIHJpbmcgbG9ja3MgdG8ga2VlcCB0aGVcbiYjNDM7XHQgKiB3YWtlIHNpdGVzIG91dCwgc28gdGhlIHN0b3AgYmVsb3cgaXMgdGhlIGxhc3Qgd3JpdGUgdG9cbiYjNDM7XHQgKiBfX1FVRVVFX1NUQVRFX0RSVl9YT0ZGLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHR1bi1cdTAwM2VudW1xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR0ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLVx1MDAzZXRmaWxlc1tpXSk7XG4mIzQzO1xuJiM0MztcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4mIzQzO1x0XHRzcGluX2xvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcbiYjNDM7XHRcdHRmaWxlLVx1MDAzZWNvbnNfY250ID0gMDtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoZGV2KTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xMDA4LDYgJiM0MzsxMDY0LDcgQEAgc3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqcXVldWU7XG4gXHRzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlO1xuIFx0aW50IGxlbiA9IHNrYi1cdTAwM2VsZW47XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHRmaWxlID0gcmN1X2RlcmVmZXJlbmNlKHR1bi1cdTAwM2V0ZmlsZXNbdHhxXSk7XG5AQCAtMTA2MiwxMyAmIzQzOzExMTksMzUgQEAgc3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0bmZfcmVzZXRfY3Qoc2tiKTtcbiBcbi1cdGlmIChwdHJfcmluZ19wcm9kdWNlKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcsIHNrYikpIHtcbiYjNDM7XHRxdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCB0eHEpO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcbiYjNDM7XHRyZXQgPSBfX3B0cl9yaW5nX3Byb2R1Y2UoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZywgc2tiKTtcbiYjNDM7XHQvKiBEbyBub3QgdG91Y2ggdGhlIHF1ZXVlIHN0YXRlIG9mIGEgZGV2aWNlIHRoYXQgaXMgZ29pbmcgZG93bi4gKi9cbiYjNDM7XHRpZiAoKHR1bi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX0JBQ0tQUkVTU1VSRSkgXHUwMDI2XHUwMDI2IG5ldGlmX3J1bm5pbmcoZGV2KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIXFkaXNjX3R4cV9oYXNfbm9fcXVldWUocXVldWUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2UoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZykgPT0gLUVOT1NQQykge1xuJiM0MztcdFx0bmV0aWZfdHhfc3RvcF9xdWV1ZShxdWV1ZSk7XG4mIzQzO1x0XHQvKiBQYWlyZWQgd2l0aCBzbXBfbWIoKSBpbiBfX3R1bl93YWtlX3F1ZXVlKCkgKi9cbiYjNDM7XHRcdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XG4mIzQzO1x0XHRpZiAoIV9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nKSlcbiYjNDM7XHRcdFx0bmV0aWZfdHhfd2FrZV9xdWV1ZShxdWV1ZSk7XG4mIzQzO1x0fVxuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdC8qIFRoaXMgc2hvdWxkIGJlIGEgcmFyZSBjYXNlIGlmIElGRl9CQUNLUFJFU1NVUkUgaXMgZW5hYmxlZCBhbmRcbiYjNDM7XHRcdCAqIGEgcWRpc2MgaXMgcHJlc2VudCwgYnV0IGNhbiBoYXBwZW4gZHVlIHRvIGxsdHguXG4mIzQzO1x0XHQgKiBTaW5jZSBza2JfdHhfdGltZXN0YW1wKCksIHNrYl9vcnBoYW4oKSxcbiYjNDM7XHRcdCAqIHJ1bl9lYnBmX2ZpbHRlcigpIGFuZCBwc2tiX3RyaW0oKSBjb3VsZCBoYXZlIHRpbmtlcmVkXG4mIzQzO1x0XHQgKiB3aXRoIHRoZSBTS0IsIHJldHVybmluZyBORVRERVZfVFhfQlVTWSBpcyB1bnNhZmUgYW5kXG4mIzQzO1x0XHQgKiB3ZSBtdXN0IGRyb3AgaW5zdGVhZC5cbiYjNDM7XHRcdCAqL1xuIFx0XHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9GVUxMX1JJTkc7XG4gXHRcdGdvdG8gZHJvcDtcbiBcdH1cbiBcbiBcdC8qIGRldi1cdTAwM2VsbHR4IHJlcXVpcmVzIHRvIGRvIG91ciBvd24gdXBkYXRlIG9mIHRyYW5zX3N0YXJ0ICovXG4tXHRxdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCB0eHEpO1xuIFx0dHhxX3RyYW5zX2NvbmRfdXBkYXRlKHF1ZXVlKTtcbiBcbiBcdC8qIE5vdGlmeSBhbmQgd2FrZSB1cCByZWFkZXIgcHJvY2VzcyAqL1xuQEAgLTIxMTYsMTMgJiM0MzsyMTk1LDYxIEBAIHN0YXRpYyBzc2l6ZV90IHR1bl9wdXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuIFx0cmV0dXJuIHRvdGFsO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgbm9ibG9jaywgaW50ICplcnIpXG4mIzQzOy8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqL1xuJiM0MztzdGF0aWMgdm9pZCBfX3R1bl93YWtlX3F1ZXVlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXG4mIzQzO1x0XHRcdCAgICAgc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgaW50IGNvbnN1bWVkKVxuJiM0Mzt7XG4mIzQzO1x0dTE2IHF1ZXVlX2luZGV4ID0gdGZpbGUtXHUwMDNlcXVldWVfaW5kZXg7XG4mIzQzO1x0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmICghKHR1bi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX0JBQ0tQUkVTU1VSRSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIEEgc3RvcCBmcm9tIHR1bl9uZXRfY2xvc2UoKSBpcyBub3QgYmFja3ByZXNzdXJlLCBsZWF2ZSBpdCBhbG9uZS4gKi9cbiYjNDM7XHRpZiAodW5saWtlbHkoIW5ldGlmX3J1bm5pbmcodHVuLVx1MDAzZWRldikpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBPbmx5IHRoZSBjdXJyZW50IG93bmVyIG9mIHRoZSBzbG90IG1heSB3YWtlIGl0cyBzdWJxdWV1ZS4gKi9cbiYjNDM7XHRpZiAodW5saWtlbHkocmN1X2FjY2Vzc19wb2ludGVyKHR1bi1cdTAwM2V0ZmlsZXNbcXVldWVfaW5kZXhdKSAhPSB0ZmlsZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUodHVuLVx1MDAzZWRldiwgcXVldWVfaW5kZXgpO1xuJiM0MztcbiYjNDM7XHQvKiBQYWlyZWQgd2l0aCBzbXBfbWJfX2FmdGVyX2F0b21pYygpIGluIHR1bl9uZXRfeG1pdCgpICovXG4mIzQzO1x0c21wX21iKCk7XG4mIzQzO1x0aWYgKG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkge1xuJiM0MztcdFx0dGZpbGUtXHUwMDNlY29uc19jbnQgJiM0Mzs9IGNvbnN1bWVkO1xuJiM0MztcdFx0aWYgKHRmaWxlLVx1MDAzZWNvbnNfY250IFx1MDAzZT0gdGZpbGUtXHUwMDNldHhfcmluZy5zaXplIC8gMiB8fFxuJiM0MztcdFx0ICAgIF9fcHRyX3JpbmdfZW1wdHkoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZykpIHtcbiYjNDM7XHRcdFx0bmV0aWZfdHhfd2FrZV9xdWV1ZSh0eHEpO1xuJiM0MztcdFx0XHR0ZmlsZS1cdTAwM2Vjb25zX2NudCA9IDA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCAqdHVuX3JpbmdfY29uc3VtZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCAqcHRyO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbiYjNDM7XHRwdHIgPSBfX3B0cl9yaW5nX2NvbnN1bWUoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZyk7XG4mIzQzO1x0aWYgKHB0cilcbiYjNDM7XHRcdF9fdHVuX3dha2VfcXVldWUodHVuLCB0ZmlsZSwgMSk7XG4mIzQzO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4mIzQzO1x0cmV0dXJuIHB0cjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgKnR1bl9yaW5nX3JlY3Yoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbiYjNDM7XHRcdFx0ICAgaW50IG5vYmxvY2ssIGludCAqZXJyKVxuIHtcbiBcdERFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpO1xuIFx0dm9pZCAqcHRyID0gTlVMTDtcbiBcdGludCBlcnJvciA9IDA7XG4gXG4tXHRwdHIgPSBwdHJfcmluZ19jb25zdW1lKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcpO1xuJiM0MztcdHB0ciA9IHR1bl9yaW5nX2NvbnN1bWUodHVuLCB0ZmlsZSk7XG4gXHRpZiAocHRyKVxuIFx0XHRnb3RvIG91dDtcbiBcdGlmIChub2Jsb2NrKSB7XG5AQCAtMjEzNCw3ICYjNDM7MjI2MSw3IEBAIHN0YXRpYyB2b2lkICp0dW5fcmluZ19yZWN2KHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGludCBub2Jsb2NrLCBpbnQgKmVycilcbiBcbiBcdHdoaWxlICgxKSB7XG4gXHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XG4tXHRcdHB0ciA9IHB0cl9yaW5nX2NvbnN1bWUoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZyk7XG4mIzQzO1x0XHRwdHIgPSB0dW5fcmluZ19jb25zdW1lKHR1biwgdGZpbGUpO1xuIFx0XHRpZiAocHRyKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbkBAIC0yMTcxLDcgJiM0MzsyMjk4LDcgQEAgc3RhdGljIHNzaXplX3QgdHVuX2RvX3JlYWQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbiBcbiBcdGlmICghcHRyKSB7XG4gXHRcdC8qIFJlYWQgZnJhbWVzIGZyb20gcmluZyAqL1xuLVx0XHRwdHIgPSB0dW5fcmluZ19yZWN2KHRmaWxlLCBub2Jsb2NrLCBcdTAwMjZlcnIpO1xuJiM0MztcdFx0cHRyID0gdHVuX3JpbmdfcmVjdih0dW4sIHRmaWxlLCBub2Jsb2NrLCBcdTAwMjZlcnIpO1xuIFx0XHRpZiAoIXB0cilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuQEAgLTI3MDMsOCAmIzQzOzI4MzAsOSBAQCBzdGF0aWMgaW50IHR1bl9zZXRfaWZmKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKVxuIHtcbiBcdHN0cnVjdCB0dW5fc3RydWN0ICp0dW47XG4gXHRzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4mIzQzO1x0c3RydWN0IHR1bl9maWxlICpudGZpbGU7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuLVx0aW50IGVycjtcbiYjNDM7XHRpbnQgZXJyLCBpO1xuIFxuIFx0aWYgKHRmaWxlLVx1MDAzZWRldGFjaGVkKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0yODMzLDggJiM0MzsyOTYxLDEwIEBAIHN0YXRpYyBpbnQgdHVuX3NldF9pZmYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlmcmVxICppZnIpXG4gXHQvKiBNYWtlIHN1cmUgcGVyc2lzdGVudCBkZXZpY2VzIGRvIG5vdCBnZXQgc3R1Y2sgaW5cbiBcdCAqIHhvZmYgc3RhdGUuXG4gXHQgKi9cbi1cdGlmIChuZXRpZl9ydW5uaW5nKHR1bi1cdTAwM2VkZXYpKVxuLVx0XHRuZXRpZl90eF93YWtlX2FsbF9xdWV1ZXModHVuLVx1MDAzZWRldik7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHVuLVx1MDAzZW51bXF1ZXVlczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdG50ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLVx1MDAzZXRmaWxlc1tpXSk7XG4mIzQzO1x0XHR0dW5fZm9yY2Vfd2FrZV9xdWV1ZSh0dW4sIG50ZmlsZSk7XG4mIzQzO1x0fVxuIFxuIFx0c3Ryc2NweShpZnItXHUwMDNlaWZyX25hbWUsIHR1bi1cdTAwM2VkZXYtXHUwMDNlbmFtZSk7XG4gXHRyZXR1cm4gMDtcbkBAIC0zNjMwLDYgJiM0MzszNzYwLDEzIEBAIHN0YXRpYyBpbnQgdHVuX3F1ZXVlX3Jlc2l6ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxuIFx0XHRcdFx0XHQgIGRldi1cdTAwM2V0eF9xdWV1ZV9sZW4sIEdGUF9LRVJORUwsXG4gXHRcdFx0XHRcdCAgdHVuX3B0cl9mcmVlKTtcbiBcbiYjNDM7XHRpZiAoIXJldCkge1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHVuLVx1MDAzZW51bXF1ZXVlczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0dGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cdTAwM2V0ZmlsZXNbaV0pO1xuJiM0MztcdFx0XHR0dW5fZm9yY2Vfd2FrZV9xdWV1ZSh0dW4sIHRmaWxlKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0a2ZyZWUocmluZ3MpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMzczOCw2ICYjNDM7Mzg3NSwzMSBAQCBzdHJ1Y3QgcHRyX3JpbmcgKnR1bl9nZXRfdHhfcmluZyhzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodHVuX2dldF90eF9yaW5nKTtcbiBcbiYjNDM7LyogQ2FsbGVycyBtdXN0IGhvbGQgcmluZy5jb25zdW1lcl9sb2NrICovXG4mIzQzO3ZvaWQgdHVuX3dha2VfcXVldWUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBjb25zdW1lZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0dW5fZmlsZSAqdGZpbGU7XG4mIzQzO1x0c3RydWN0IHR1bl9zdHJ1Y3QgKnR1bjtcbiYjNDM7XG4mIzQzO1x0aWYgKGZpbGUtXHUwMDNlZl9vcCAhPSBcdTAwMjZ0dW5fZm9wcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dGZpbGUgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiYjNDM7XHRpZiAoIXRmaWxlKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XG4mIzQzO1x0dHVuID0gcmN1X2RlcmVmZXJlbmNlKHRmaWxlLVx1MDAzZXR1bik7XG4mIzQzO1x0aWYgKHR1bilcbiYjNDM7XHRcdF9fdHVuX3dha2VfcXVldWUodHVuLCB0ZmlsZSwgY29uc3VtZWQpO1xuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTCh0dW5fd2FrZV9xdWV1ZSk7XG4mIzQzO1xuIG1vZHVsZV9pbml0KHR1bl9pbml0KTtcbiBtb2R1bGVfZXhpdCh0dW5fY2xlYW51cCk7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDUklQVElPTik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmNcbmluZGV4IDY5NDliNzA0MTY2ZDUuLjNlNzJiOWM2YWYwY2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L25ldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L25ldC5jXG5AQCAtMTc2LDEzICYjNDM7MTc2LDIxIEBAIHN0YXRpYyB2b2lkICp2aG9zdF9uZXRfYnVmX2NvbnN1bWUoc3RydWN0IHZob3N0X25ldF9idWYgKnJ4cSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXG4mIzQzO3N0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKHN0cnVjdCBzb2NrICpzayxcbiYjNDM7XHRcdFx0XHQgc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcbiB7XG4mIzQzO1x0c3RydWN0IGZpbGUgKmZpbGUgPSBzay1cdTAwM2Vza19zb2NrZXQtXHUwMDNlZmlsZTtcbiBcdHN0cnVjdCB2aG9zdF9uZXRfYnVmICpyeHEgPSBcdTAwMjZudnEtXHUwMDNlcnhxO1xuIFxuIFx0cnhxLVx1MDAzZWhlYWQgPSAwO1xuLVx0cnhxLVx1MDAzZXRhaWwgPSBwdHJfcmluZ19jb25zdW1lX2JhdGNoZWQobnZxLVx1MDAzZXJ4X3JpbmcsIHJ4cS1cdTAwM2VxdWV1ZSxcbi1cdFx0XHRcdFx0ICAgICAgVkhPU1RfTkVUX0JBVENIKTtcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2bnZxLVx1MDAzZXJ4X3JpbmctXHUwMDNlY29uc3VtZXJfbG9jayk7XG4mIzQzO1x0cnhxLVx1MDAzZXRhaWwgPSBfX3B0cl9yaW5nX2NvbnN1bWVfYmF0Y2hlZChudnEtXHUwMDNlcnhfcmluZywgcnhxLVx1MDAzZXF1ZXVlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFZIT1NUX05FVF9CQVRDSCk7XG4mIzQzO1xuJiM0MztcdGlmIChyeHEtXHUwMDNldGFpbClcbiYjNDM7XHRcdHR1bl93YWtlX3F1ZXVlKGZpbGUsIHJ4cS1cdTAwM2V0YWlsKTtcbiYjNDM7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2bnZxLVx1MDAzZXJ4X3JpbmctXHUwMDNlY29uc3VtZXJfbG9jayk7XG4gXHRyZXR1cm4gcnhxLVx1MDAzZXRhaWw7XG4gfVxuIFxuQEAgLTIwOSwxNCAmIzQzOzIxNywxNSBAQCBzdGF0aWMgaW50IHZob3N0X25ldF9idWZfcGVla19sZW4odm9pZCAqcHRyKVxuIFx0cmV0dXJuIF9fc2tiX2FycmF5X2xlbl93aXRoX3RhZyhwdHIpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHZob3N0X25ldF9idWZfcGVlayhzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqbnZxKVxuJiM0MztzdGF0aWMgaW50IHZob3N0X25ldF9idWZfcGVlayhzdHJ1Y3Qgc29jayAqc2ssXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXG4ge1xuIFx0c3RydWN0IHZob3N0X25ldF9idWYgKnJ4cSA9IFx1MDAyNm52cS1cdTAwM2VyeHE7XG4gXG4gXHRpZiAoIXZob3N0X25ldF9idWZfaXNfZW1wdHkocnhxKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShudnEpKVxuJiM0MztcdGlmICghdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKHNrLCBudnEpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBvdXQ6XG5AQCAtMTAwNCw3ICYjNDM7MTAxMyw3IEBAIHN0YXRpYyBpbnQgcGVla19oZWFkX2xlbihzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqcnZxLCBzdHJ1Y3Qgc29jayAqc2spXG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0aWYgKHJ2cS1cdTAwM2VyeF9yaW5nKVxuLVx0XHRyZXR1cm4gdmhvc3RfbmV0X2J1Zl9wZWVrKHJ2cSk7XG4mIzQzO1x0XHRyZXR1cm4gdmhvc3RfbmV0X2J1Zl9wZWVrKHNrLCBydnEpO1xuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrLCBmbGFncyk7XG4gXHRoZWFkID0gc2tiX3BlZWsoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl90dW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdHVuLmhcbmluZGV4IDgwMTY2ZWI2MmY0MWMuLmVlYjllZDNjNWEyMzkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oXG5AQCAtMjIsNiAmIzQzOzIyLDggQEAgc3RydWN0IHR1bl9tc2dfY3RsIHtcbiAjaWYgZGVmaW5lZChDT05GSUdfVFVOKSB8fCBkZWZpbmVkKENPTkZJR19UVU5fTU9EVUxFKVxuIHN0cnVjdCBzb2NrZXQgKnR1bl9nZXRfc29ja2V0KHN0cnVjdCBmaWxlICopO1xuIHN0cnVjdCBwdHJfcmluZyAqdHVuX2dldF90eF9yaW5nKHN0cnVjdCBmaWxlICpmaWxlKTtcbiYjNDM7LyogQ2FsbGVycyBtdXN0IGhvbGQgdGhlIGNvbnN1bWVyX2xvY2sgb2YgdGhlIHJpbmcgb2YgZmlsZSAqL1xuJiM0Mzt2b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY29uc3VtZWQpO1xuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0dW5faXNfeGRwX2ZyYW1lKHZvaWQgKnB0cilcbiB7XG5AQCAtNTUsNiAmIzQzOzU3LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcHRyX3JpbmcgKnR1bl9nZXRfdHhfcmluZyhzdHJ1Y3QgZmlsZSAqZilcbiBcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmLCBpbnQgY29uc3VtZWQpIHt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCB0dW5faXNfeGRwX2ZyYW1lKHZvaWQgKnB0cilcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oIGIvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oXG5pbmRleCBkMmMzNjI5YmJlNDUxLi42MzFjNDNmZGU0NDA3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmhcbkBAIC05Niw2ICYjNDM7OTYsMjYgQEAgc3RhdGljIGlubGluZSBib29sIHB0cl9yaW5nX2Z1bGxfYmgoc3RydWN0IHB0cl9yaW5nICpyKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOy8qIFJlcG9ydCB3aGV0aGVyIHRoZSBuZXh0IF9fcHRyX3JpbmdfcHJvZHVjZSgpIGhhcyByb29tIGZvciBvbmUgZW50cnk6XG4mIzQzOyAqIDAgbWVhbnMgdGhlIHNpbmdsZSBzbG90IGF0IHItXHUwMDNlcXVldWVbci1cdTAwM2Vwcm9kdWNlcl0gaXMgZnJlZSwgLUVOT1NQQyBtZWFuc1xuJiM0MzsgKiB0aGUgcmluZyBpcyBmdWxsLCB3aGljaCBpcyB0cmFuc2llbnQsIGFuZCAtRUlOVkFMIG1lYW5zIHItXHUwMDNlc2l6ZSBpcyAwLFxuJiM0MzsgKiB3aGljaCBpcyBwZXJtYW5lbnQuIEEgY2FsbGVyIHRoYXQgc3RvcHMgcHJvZHVjaW5nIGFuZCB3YWl0cyBmb3Igc3BhY2VcbiYjNDM7ICogbXVzdCB0aGVyZWZvcmUgZG8gc28gb25seSBmb3IgLUVOT1NQQy5cbiYjNDM7ICpcbiYjNDM7ICogTm90ZTogY2FsbGVycyBpbnZva2luZyB0aGlzIGluIGEgbG9vcCBtdXN0IHVzZSBhIGNvbXBpbGVyIGJhcnJpZXIsXG4mIzQzOyAqIGZvciBleGFtcGxlIGNwdV9yZWxheCgpLiBDYWxsZXJzIG11c3QgaG9sZCBwcm9kdWNlcl9sb2NrLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBpbnQgX19wdHJfcmluZ19jaGVja19wcm9kdWNlKHN0cnVjdCBwdHJfcmluZyAqcilcbiYjNDM7e1xuJiM0MztcdGlmICh1bmxpa2VseSghci1cdTAwM2VzaXplKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoZGF0YV9yYWNlKHItXHUwMDNlcXVldWVbci1cdTAwM2Vwcm9kdWNlcl0pKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9TUEM7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLFxuICAqIGZvciBleGFtcGxlIGNwdV9yZWxheCgpLiBDYWxsZXJzIG11c3QgaG9sZCBwcm9kdWNlcl9sb2NrLlxuICAqIENhbGxlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc3VyZSBwb2ludGVyIHRoYXQgaXMgYmVpbmcgcXVldWVkXG5AQCAtMTAzLDggJiM0MzsxMjMsMTAgQEAgc3RhdGljIGlubGluZSBib29sIHB0cl9yaW5nX2Z1bGxfYmgoc3RydWN0IHB0cl9yaW5nICpyKVxuICAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3JpbmdfcHJvZHVjZShzdHJ1Y3QgcHRyX3JpbmcgKnIsIHZvaWQgKnB0cilcbiB7XG4tXHRpZiAodW5saWtlbHkoIXItXHUwMDNlc2l6ZSkgfHwgZGF0YV9yYWNlKHItXHUwMDNlcXVldWVbci1cdTAwM2Vwcm9kdWNlcl0pKVxuLVx0XHRyZXR1cm4gLUVOT1NQQztcbiYjNDM7XHRpbnQgcmV0ID0gX19wdHJfcmluZ19jaGVja19wcm9kdWNlKHIpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcbiBcdC8qIE1ha2Ugc3VyZSB0aGUgcG9pbnRlciB3ZSBhcmUgc3RvcmluZyBwb2ludHMgdG8gYSB2YWxpZCBkYXRhLiAqL1xuIFx0LyogUGFpcnMgd2l0aCB0aGUgZGVwZW5kZW5jeSBvcmRlcmluZyBpbiBfX3B0cl9yaW5nX2NvbnN1bWUuICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXG5pbmRleCA3OWQ1M2M3YTFlYmRjLi5hMGRkYzUwYTc1MzQyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcbkBAIC02OSw2ICYjNDM7NjksMTAgQEBcbiAjZGVmaW5lIElGRl9OQVBJX0ZSQUdTXHQweDAwMjBcbiAvKiBVc2VkIGluIFRVTlNFVElGRiB0byBicmluZyB1cCB0dW4vdGFwIHdpdGhvdXQgY2FycmllciAqL1xuICNkZWZpbmUgSUZGX05PX0NBUlJJRVJcdDB4MDA0MFxuJiM0MzsvKiBTdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHdoZW4gdGhlIGludGVybmFsIHJpbmcgaXMgZnVsbCwgc28gYW5cbiYjNDM7ICogYXR0YWNoZWQgcWRpc2MgYXBwbGllcyBiYWNrcHJlc3N1cmUgaW5zdGVhZCBvZiBiZWluZyBieXBhc3NlZC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgSUZGX0JBQ0tQUkVTU1VSRVx0MHgwMDgwXG4gI2RlZmluZSBJRkZfTk9fUElcdDB4MTAwMFxuIC8qIFRoaXMgZmxhZyBoYXMgbm8gcmVhbCBlZmZlY3QgKi9cbiAjZGVmaW5lIElGRl9PTkVfUVVFVUVcdDB4MjAwMFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxuaW5kZXggMmVjMDdkZTFkNzNiZS4uMmM4NTUyNTcwNGMxNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXG5AQCAtNjcsNiAmIzQzOzY3LDEwIEBAXG4gI2RlZmluZSBJRkZfVEFQXHRcdDB4MDAwMlxuICNkZWZpbmUgSUZGX05BUElcdDB4MDAxMFxuICNkZWZpbmUgSUZGX05BUElfRlJBR1NcdDB4MDAyMFxuJiM0MzsvKiBTdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHdoZW4gdGhlIGludGVybmFsIHJpbmcgaXMgZnVsbCwgc28gYW5cbiYjNDM7ICogYXR0YWNoZWQgcWRpc2MgYXBwbGllcyBiYWNrcHJlc3N1cmUgaW5zdGVhZCBvZiBiZWluZyBieXBhc3NlZC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgSUZGX0JBQ0tQUkVTU1VSRVx0MHgwMDgwXG4gI2RlZmluZSBJRkZfTk9fUElcdDB4MTAwMFxuIC8qIFRoaXMgZmxhZyBoYXMgbm8gcmVhbCBlZmZlY3QgKi9cbiAjZGVmaW5lIElGRl9PTkVfUVVFVUVcdDB4MjAwMFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUVU4mIzM0OywKICAgICYjMzQ7VkhPU1RfTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHVuX25ldF94bWl0JiMzNDssCiAgICAmIzM0O3R1bl9zZXRfaWZmJiMzNDssCiAgICAmIzM0O3R1bl9jaHJfaW9jdGwmIzM0OywKICAgICYjMzQ7dHVuX2Nocl9yZWFkX2l0ZXImIzM0OywKICAgICYjMzQ7dHVuX25ldF9jbG9zZSYjMzQ7LAogICAgJiMzNDt0dW5fcXVldWVfcmVzaXplJiMzNDssCiAgICAmIzM0O3R1bl93YWtlX3F1ZXVlJiMzNDssCiAgICAmIzM0O3Zob3N0X25ldF9pb2N0bCYjMzQ7LAogICAgJiMzNDt2aG9zdF9uZXRfb3BlbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgKElGRl9CQUNLUFJFU1NVUkUpIHRvIHRoZSBUVU4vVEFQIGRyaXZlciwgYWxsb3dpbmcgdGhlIGtlcm5lbCB0byBzdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHBhY2tldHMgd2hlbiB0aGUgaW50ZXJuYWwgcmluZyBidWZmZXIgaXMgZnVsbC4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgYW5kIFRVTi9UQVAgZHJpdmVyIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gSXQgYWxzbyBtb2RpZmllcyB0aGUgdmhvc3QtbmV0IGRyaXZlciB0byB3YWtlIHRoZSBxdWV1ZSB3aGVuIGl0ZW1zIGFyZSBjb25zdW1lZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFhMzIwZDkyYmRhNjgxOGE0NWJkNjFhMmFlMGU4OTgxZmE2MmE1MzMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyA0IDAyOjA1OjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdAppbmRleCA0ZDcwODdmNzI3YmU1Li41NmM5ZGM3Yjk2YWZiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdApAQCAtMjA2LDYgJiM0MzsyMDYsMzggQEAgZW5hYmxlIGlzIHRydWUgd2UgZW5hYmxlIGl0LCBvdGhlcndpc2Ugd2UgZGlzYWJsZSBpdDo6CiAgICAgICByZXR1cm4gaW9jdGwoZmQsIFRVTlNFVFFVRVVFLCAodm9pZCAqKSZhbXA7aWZyKTsKICAgfQogCiYjNDM7My40IHFkaXNjIGJhY2twcmVzc3VyZQomIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsKJiM0MztJRkZfQkFDS1BSRVNTVVJFIGNhbiBiZSBzZXQgdG8gZW5hYmxlIHFkaXNjIGJhY2twcmVzc3VyZS4gV2l0aG91dCBpdCwgVFgKJiM0Mztkcm9wcyBvY2N1ciB3aGVuIHRoZSBpbnRlcm5hbCByaW5nIGJ1ZmZlciBpcyBmdWxsLCBzbyBhbnkgYXR0YWNoZWQgcWRpc2MKJiM0MztpcyBlZmZlY3RpdmVseSBieXBhc3NlZCBhbmQgYXBwbGljYXRpb25zIG9ubHkgbGVhcm4gYWJvdXQgY29uZ2VzdGlvbgomIzQzO3Rocm91Z2ggdGhvc2UgZHJvcHMuCiYjNDM7CiYjNDM7V2l0aCBpdCwgdGhlIGtlcm5lbCBzdG9wcyB0aGUgcXVldWUgaW5zdGVhZCwgbGV0dGluZyB0aGUgcWRpc2MgaG9sZCBhbmQKJiM0MztzY2hlZHVsZSBwYWNrZXRzLCBzbyBpdHMgQVFNLCBzaGFwaW5nIGFuZCBmYWlybmVzcyBhY3R1YWxseSBhcHBseS4gVGhpcwomIzQzO2hlbHBzIHByb3RvY29scyBsaWtlIFRDUCwgd2hpY2ggY3V0IHRocm91Z2hwdXQgaW4gcmVhY3Rpb24gdG8gcGFja2V0CiYjNDM7ZHJvcHMuIFdpdGggSUZGX0JBQ0tQUkVTU1VSRSwgZHJvcHMgdGhlbiBvbmx5IG9jY3VyIGFzIGEgcmFyZSByYWNlLgomIzQzO0JhY2twcmVzc3VyZSByZXF1aXJlcyBhIHFkaXNjIHRvIGJlIGF0dGFjaGVkIGFuZCBoYXMgbm8gZWZmZWN0IHdpdGgKJiM0Mztub3F1ZXVlLgomIzQzOwomIzQzO1RoZSBmbGFnIGlzIGEgcHJvcGVydHkgb2YgdGhlIFRVTi9UQVAgZGV2aWNlIHJhdGhlciB0aGFuIG9mIHRoZSBmaWxlCiYjNDM7ZGVzY3JpcHRvciBpdCB3YXMgc2V0IG9uLCBzbyBpdCBhcHBsaWVzIHRvIGFsbCBxdWV1ZXMgb2YgdGhlIGRldmljZSwKJiM0MztyZWdhcmRsZXNzIG9mIHdoaWNoIHByb2Nlc3Mgb3BlbmVkIHdoaWNoIHF1ZXVlLgomIzQzOwomIzQzO1RoZSBmbGFnIGNhbiBvbmx5IGJlIGNoYW5nZWQgd2hpbGUgdGhlIGRldmljZSBoYXMgYXQgbW9zdCBvbmUgcXVldWUuIE9uIGEKJiM0MzttdWx0aXF1ZXVlIGRldmljZSB0aGF0IGFscmVhZHkgaGFzIGEgc2Vjb25kIHF1ZXVlIGF0dGFjaGVkIG9yIGRldGFjaGVkLCBhCiYjNDM7bGF0ZXIgVFVOU0VUSUZGIHN1Y2NlZWRzIGJ1dCBsZWF2ZXMgdGhlIGZsYWcgYXMgaXQgaXMuIEFsbCB0aGUgb3RoZXIKJiM0MztUVU5TRVRJRkYgZmxhZ3MgYmVoYXZlIHRoZSBzYW1lIHdheS4KJiM0MzsKJiM0MztUaGUgdHhxdWV1ZWxlbiBjYW4gYmUgcmVkdWNlZCBhbG9uZ3NpZGUgdGhpcyBmbGFnIHRvIGZ1cnRoZXIgc2hpZnQKJiM0MztidWZmZXJpbmcgaW50byB0aGUgcWRpc2MgYW5kIHJlZHVjZSBidWZmZXJibG9hdCwgYXQgYSBwb3NzaWJsZQomIzQzO3BlcmZvcm1hbmNlIGNvc3QuCiYjNDM7CiYjNDM7V2hlbiBydW5uaW5nIG11bHRpcGxlIG5ldHdvcmsgc3RyZWFtcyBpbiBwYXJhbGxlbCB0aHJvdWdoIGEgc2luZ2xlCiYjNDM7VFVOL1RBUCBxdWV1ZSwgdGhlIGZsYWcgbWF5IHJlZHVjZSBwZXJmb3JtYW5jZSBkdWUgdG8gdGhlIGV4dHJhIG92ZXJoZWFkCiYjNDM7b2YgdGhlIGJhY2twcmVzc3VyZSBtZWNoYW5pc20uCiYjNDM7CiBVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb24KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jCmluZGV4IDUxZTgwMDAwYmQwZWQuLmVjOTBmZWY0YTQyZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3R1bi5jCkBAIC05OCw3ICYjNDM7OTgsOCBAQCBzdGF0aWMgdm9pZCB0dW5fZGVmYXVsdF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogI2RlZmluZSBUVU5fRkFTWU5DCUlGRl9BVFRBQ0hfUVVFVUUKIAogI2RlZmluZSBUVU5fRkVBVFVSRVMgKElGRl9OT19QSSB8IElGRl9PTkVfUVVFVUUgfCBJRkZfVk5FVF9IRFIgfCBcCi0JCSAgICAgIElGRl9NVUxUSV9RVUVVRSB8IElGRl9OQVBJIHwgSUZGX05BUElfRlJBR1MpCiYjNDM7CQkgICAgICBJRkZfTVVMVElfUVVFVUUgfCBJRkZfTkFQSSB8IElGRl9OQVBJX0ZSQUdTIHwgXAomIzQzOwkJICAgICAgSUZGX0JBQ0tQUkVTU1VSRSkKIAogI2RlZmluZSBHT09EQ09QWV9MRU4gMTI4CiAKQEAgLTE0NSw2ICYjNDM7MTQ2LDggQEAgc3RydWN0IHR1bl9maWxlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5leHQ7CiAJc3RydWN0IHR1bl9zdHJ1Y3QgKmRldGFjaGVkOwogCXN0cnVjdCBwdHJfcmluZyB0eF9yaW5nOwomIzQzOwkvKiBQcm90ZWN0ZWQgYnkgdHhfcmluZy5jb25zdW1lcl9sb2NrICovCiYjNDM7CWludCBjb25zX2NudDsKIAlzdHJ1Y3QgeGRwX3J4cV9pbmZvIHhkcF9yeHE7CiB9OwogCkBAIC01ODUsMTEgJiM0Mzs1ODgsMTYgQEAgc3RhdGljIHZvaWQgX190dW5fZGV0YWNoKHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGJvb2wgY2xlYW4pCiAJCXUxNiBpbmRleCA9IHRmaWxlLSZndDtxdWV1ZV9pbmRleDsKIAkJQlVHX09OKGluZGV4ICZndDs9IHR1bi0mZ3Q7bnVtcXVldWVzKTsKIAomIzQzOwkJc3Bpbl9sb2NrKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcuY29uc3VtZXJfbG9jayk7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcih0dW4tJmd0O3RmaWxlc1tpbmRleF0sCiAJCQkJICAgdHVuLSZndDt0ZmlsZXNbdHVuLSZndDtudW1xdWV1ZXMgLSAxXSk7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO3RmaWxlLSZndDt0eF9yaW5nLmNvbnN1bWVyX2xvY2spOwogCQludGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi0mZ3Q7dGZpbGVzW2luZGV4XSk7CiYjNDM7CQlzcGluX2xvY2soJmFtcDtudGZpbGUtJmd0O3R4X3JpbmcuY29uc3VtZXJfbG9jayk7CiAJCW50ZmlsZS0mZ3Q7cXVldWVfaW5kZXggPSBpbmRleDsKIAkJbnRmaWxlLSZndDt4ZHBfcnhxLnF1ZXVlX2luZGV4ID0gaW5kZXg7CiYjNDM7CQludGZpbGUtJmd0O2NvbnNfY250ID0gMDsKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7bnRmaWxlLSZndDt0eF9yaW5nLmNvbnN1bWVyX2xvY2spOwogCQlyY3VfYXNzaWduX3BvaW50ZXIodHVuLSZndDt0ZmlsZXNbdHVuLSZndDtudW1xdWV1ZXMgLSAxXSwKIAkJCQkgICBOVUxMKTsKIApAQCAtNjA2LDYgJiM0Mzs2MTQsMTQgQEAgc3RhdGljIHZvaWQgX190dW5fZGV0YWNoKHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGJvb2wgY2xlYW4pCiAJCXR1bl9mbG93X2RlbGV0ZV9ieV9xdWV1ZSh0dW4sIHR1bi0mZ3Q7bnVtcXVldWVzICYjNDM7IDEpOwogCQkvKiBEcm9wIHJlYWQgcXVldWUgKi8KIAkJdHVuX3F1ZXVlX3B1cmdlKHRmaWxlKTsKJiM0MzsJCXNwaW5fbG9ja19iaCgmYW1wO250ZmlsZS0mZ3Q7dHhfcmluZy5jb25zdW1lcl9sb2NrKTsKJiM0MzsJCXNwaW5fbG9jaygmYW1wO250ZmlsZS0mZ3Q7dHhfcmluZy5wcm9kdWNlcl9sb2NrKTsKJiM0MzsJCW50ZmlsZS0mZ3Q7Y29uc19jbnQgPSAwOwomIzQzOwkJaWYgKG5ldGlmX3J1bm5pbmcodHVuLSZndDtkZXYpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBfX3B0cl9yaW5nX2VtcHR5KCZhbXA7bnRmaWxlLSZndDt0eF9yaW5nKSkKJiM0MzsJCQluZXRpZl93YWtlX3N1YnF1ZXVlKHR1bi0mZ3Q7ZGV2LCBpbmRleCk7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO250ZmlsZS0mZ3Q7dHhfcmluZy5wcm9kdWNlcl9sb2NrKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bnRmaWxlLSZndDt0eF9yaW5nLmNvbnN1bWVyX2xvY2spOwogCQl0dW5fc2V0X3JlYWxfbnVtX3F1ZXVlcyh0dW4pOwogCX0gZWxzZSBpZiAodGZpbGUtJmd0O2RldGFjaGVkICZhbXA7JmFtcDsgY2xlYW4pIHsKIAkJdHVuID0gdHVuX2VuYWJsZV9xdWV1ZSh0ZmlsZSk7CkBAIC02ODcsNiAmIzQzOzcwMywyNSBAQCBzdGF0aWMgdm9pZCB0dW5fZGV0YWNoX2FsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHR1bl9mb3JjZV93YWtlX3F1ZXVlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sCiYjNDM7CQkJCSBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKQomIzQzO3sKJiM0MzsJLyogRW5zdXJlIHRoYXQgdGhlIHByb2R1Y2VyIGNhbiBub3Qgc3RvcCB0aGUKJiM0MzsJICogcXVldWUgY29uY3VycmVudGx5IGJ5IHRha2luZyBsb2Nrcy4KJiM0MzsJICovCiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3RmaWxlLSZndDt0eF9yaW5nLmNvbnN1bWVyX2xvY2spOwomIzQzOwlzcGluX2xvY2soJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZy5wcm9kdWNlcl9sb2NrKTsKJiM0MzsJdGZpbGUtJmd0O2NvbnNfY250ID0gMDsKJiM0MzsJLyogVGVzdGVkIHVuZGVyIHRoZSBsb2NrcyB0aGF0IHR1bl9uZXRfY2xvc2UoKSB0YWtlcywgc28gdGhpcyBjYW4gbm90CiYjNDM7CSAqIHVuZG8gaXRzIHN0b3AuIHR1bl9uZXRfb3BlbigpIHdha2VzIHRoZSBxdWV1ZXMgb2YgYSBkZXZpY2UgdGhhdAomIzQzOwkgKiBjb21lcyBiYWNrIHVwLgomIzQzOwkgKi8KJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcodHVuLSZndDtkZXYpKQomIzQzOwkJbmV0aWZfd2FrZV9zdWJxdWV1ZSh0dW4tJmd0O2RldiwgdGZpbGUtJmd0O3F1ZXVlX2luZGV4KTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZy5wcm9kdWNlcl9sb2NrKTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZy5jb25zdW1lcl9sb2NrKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHR1bl9hdHRhY2goc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCSAgICAgIGJvb2wgc2tpcF9maWx0ZXIsIGJvb2wgbmFwaSwgYm9vbCBuYXBpX2ZyYWdzLAogCQkgICAgICBib29sIHB1Ymxpc2hfdHVuKQpAQCAtNzMwLDggJiM0Mzs3NjUsMTEgQEAgc3RhdGljIGludCB0dW5fYXR0YWNoKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCBmaWxlICpmaWxlLAogCQlnb3RvIG91dDsKIAl9CiAKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcuY29uc3VtZXJfbG9jayk7CiAJdGZpbGUtJmd0O3F1ZXVlX2luZGV4ID0gdHVuLSZndDtudW1xdWV1ZXM7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcuY29uc3VtZXJfbG9jayk7CiAJdGZpbGUtJmd0O3NvY2tldC5zay0mZ3Q7c2tfc2h1dGRvd24gJmFtcDs9IH5SQ1ZfU0hVVERPV047CiYjNDM7CXR1bl9mb3JjZV93YWtlX3F1ZXVlKHR1biwgdGZpbGUpOwogCiAJaWYgKHRmaWxlLSZndDtkZXRhY2hlZCkgewogCQkvKiBSZS1hdHRhY2ggZGV0YWNoZWQgdGZpbGUsIHVwZGF0aW5nIFhEUCBxdWV1ZV9pbmRleCAqLwpAQCAtOTY0LDYgJiM0MzsxMDAyLDI0IEBAIHN0YXRpYyBpbnQgdHVuX25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAvKiBOZXQgZGV2aWNlIGNsb3NlLiAqLwogc3RhdGljIGludCB0dW5fbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiYjNDM7CXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwlzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJLyogbmV0aWZfcnVubmluZygpIGlzIGFscmVhZHkgZmFsc2U6IHRha2UgYm90aCByaW5nIGxvY2tzIHRvIGtlZXAgdGhlCiYjNDM7CSAqIHdha2Ugc2l0ZXMgb3V0LCBzbyB0aGUgc3RvcCBiZWxvdyBpcyB0aGUgbGFzdCB3cml0ZSB0bwomIzQzOwkgKiBfX1FVRVVFX1NUQVRFX0RSVl9YT0ZGLgomIzQzOwkgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHR1bi0mZ3Q7bnVtcXVldWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi0mZ3Q7dGZpbGVzW2ldKTsKJiM0MzsKJiM0MzsJCXNwaW5fbG9ja19iaCgmYW1wO3RmaWxlLSZndDt0eF9yaW5nLmNvbnN1bWVyX2xvY2spOwomIzQzOwkJc3Bpbl9sb2NrKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcucHJvZHVjZXJfbG9jayk7CiYjNDM7CQl0ZmlsZS0mZ3Q7Y29uc19jbnQgPSAwOwomIzQzOwkJc3Bpbl91bmxvY2soJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZy5wcm9kdWNlcl9sb2NrKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcuY29uc3VtZXJfbG9jayk7CiYjNDM7CX0KJiM0MzsKIAluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoZGV2KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEwMDgsNiAmIzQzOzEwNjQsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJc3RydWN0IG5ldGRldl9xdWV1ZSAqcXVldWU7CiAJc3RydWN0IHR1bl9maWxlICp0ZmlsZTsKIAlpbnQgbGVuID0gc2tiLSZndDtsZW47CiYjNDM7CWludCByZXQ7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJdGZpbGUgPSByY3VfZGVyZWZlcmVuY2UodHVuLSZndDt0ZmlsZXNbdHhxXSk7CkBAIC0xMDYyLDEzICYjNDM7MTExOSwzNSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIAluZl9yZXNldF9jdChza2IpOwogCi0JaWYgKHB0cl9yaW5nX3Byb2R1Y2UoJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZywgc2tiKSkgewomIzQzOwlxdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCB0eHEpOwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZy5wcm9kdWNlcl9sb2NrKTsKJiM0MzsJcmV0ID0gX19wdHJfcmluZ19wcm9kdWNlKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcsIHNrYik7CiYjNDM7CS8qIERvIG5vdCB0b3VjaCB0aGUgcXVldWUgc3RhdGUgb2YgYSBkZXZpY2UgdGhhdCBpcyBnb2luZyBkb3duLiAqLwomIzQzOwlpZiAoKHR1bi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX0JBQ0tQUkVTU1VSRSkgJmFtcDsmYW1wOyBuZXRpZl9ydW5uaW5nKGRldikgJmFtcDsmYW1wOwomIzQzOwkgICAgIXFkaXNjX3R4cV9oYXNfbm9fcXVldWUocXVldWUpICZhbXA7JmFtcDsKJiM0MzsJICAgIF9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZSgmYW1wO3RmaWxlLSZndDt0eF9yaW5nKSA9PSAtRU5PU1BDKSB7CiYjNDM7CQluZXRpZl90eF9zdG9wX3F1ZXVlKHF1ZXVlKTsKJiM0MzsJCS8qIFBhaXJlZCB3aXRoIHNtcF9tYigpIGluIF9fdHVuX3dha2VfcXVldWUoKSAqLwomIzQzOwkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKJiM0MzsJCWlmICghX19wdHJfcmluZ19jaGVja19wcm9kdWNlKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcpKQomIzQzOwkJCW5ldGlmX3R4X3dha2VfcXVldWUocXVldWUpOwomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcucHJvZHVjZXJfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCS8qIFRoaXMgc2hvdWxkIGJlIGEgcmFyZSBjYXNlIGlmIElGRl9CQUNLUFJFU1NVUkUgaXMgZW5hYmxlZCBhbmQKJiM0MzsJCSAqIGEgcWRpc2MgaXMgcHJlc2VudCwgYnV0IGNhbiBoYXBwZW4gZHVlIHRvIGxsdHguCiYjNDM7CQkgKiBTaW5jZSBza2JfdHhfdGltZXN0YW1wKCksIHNrYl9vcnBoYW4oKSwKJiM0MzsJCSAqIHJ1bl9lYnBmX2ZpbHRlcigpIGFuZCBwc2tiX3RyaW0oKSBjb3VsZCBoYXZlIHRpbmtlcmVkCiYjNDM7CQkgKiB3aXRoIHRoZSBTS0IsIHJldHVybmluZyBORVRERVZfVFhfQlVTWSBpcyB1bnNhZmUgYW5kCiYjNDM7CQkgKiB3ZSBtdXN0IGRyb3AgaW5zdGVhZC4KJiM0MzsJCSAqLwogCQlkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9GVUxMX1JJTkc7CiAJCWdvdG8gZHJvcDsKIAl9CiAKIAkvKiBkZXYtJmd0O2xsdHggcmVxdWlyZXMgdG8gZG8gb3VyIG93biB1cGRhdGUgb2YgdHJhbnNfc3RhcnQgKi8KLQlxdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCB0eHEpOwogCXR4cV90cmFuc19jb25kX3VwZGF0ZShxdWV1ZSk7CiAKIAkvKiBOb3RpZnkgYW5kIHdha2UgdXAgcmVhZGVyIHByb2Nlc3MgKi8KQEAgLTIxMTYsMTMgJiM0MzsyMTk1LDYxIEBAIHN0YXRpYyBzc2l6ZV90IHR1bl9wdXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLAogCXJldHVybiB0b3RhbDsKIH0KIAotc3RhdGljIHZvaWQgKnR1bl9yaW5nX3JlY3Yoc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgaW50IG5vYmxvY2ssIGludCAqZXJyKQomIzQzOy8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqLwomIzQzO3N0YXRpYyB2b2lkIF9fdHVuX3dha2VfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwKJiM0MzsJCQkgICAgIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGludCBjb25zdW1lZCkKJiM0Mzt7CiYjNDM7CXUxNiBxdWV1ZV9pbmRleCA9IHRmaWxlLSZndDtxdWV1ZV9pbmRleDsKJiM0MzsJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcuY29uc3VtZXJfbG9jayk7CiYjNDM7CiYjNDM7CWlmICghKHR1bi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX0JBQ0tQUkVTU1VSRSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIEEgc3RvcCBmcm9tIHR1bl9uZXRfY2xvc2UoKSBpcyBub3QgYmFja3ByZXNzdXJlLCBsZWF2ZSBpdCBhbG9uZS4gKi8KJiM0MzsJaWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKHR1bi0mZ3Q7ZGV2KSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIE9ubHkgdGhlIGN1cnJlbnQgb3duZXIgb2YgdGhlIHNsb3QgbWF5IHdha2UgaXRzIHN1YnF1ZXVlLiAqLwomIzQzOwlpZiAodW5saWtlbHkocmN1X2FjY2Vzc19wb2ludGVyKHR1bi0mZ3Q7dGZpbGVzW3F1ZXVlX2luZGV4XSkgIT0gdGZpbGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHR1bi0mZ3Q7ZGV2LCBxdWV1ZV9pbmRleCk7CiYjNDM7CiYjNDM7CS8qIFBhaXJlZCB3aXRoIHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCkgaW4gdHVuX25ldF94bWl0KCkgKi8KJiM0MzsJc21wX21iKCk7CiYjNDM7CWlmIChuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkpIHsKJiM0MzsJCXRmaWxlLSZndDtjb25zX2NudCAmIzQzOz0gY29uc3VtZWQ7CiYjNDM7CQlpZiAodGZpbGUtJmd0O2NvbnNfY250ICZndDs9IHRmaWxlLSZndDt0eF9yaW5nLnNpemUgLyAyIHx8CiYjNDM7CQkgICAgX19wdHJfcmluZ19lbXB0eSgmYW1wO3RmaWxlLSZndDt0eF9yaW5nKSkgewomIzQzOwkJCW5ldGlmX3R4X3dha2VfcXVldWUodHhxKTsKJiM0MzsJCQl0ZmlsZS0mZ3Q7Y29uc19jbnQgPSAwOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkICp0dW5fcmluZ19jb25zdW1lKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpCiYjNDM7ewomIzQzOwl2b2lkICpwdHI7CiYjNDM7CiYjNDM7CXNwaW5fbG9jaygmYW1wO3RmaWxlLSZndDt0eF9yaW5nLmNvbnN1bWVyX2xvY2spOwomIzQzOwlwdHIgPSBfX3B0cl9yaW5nX2NvbnN1bWUoJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZyk7CiYjNDM7CWlmIChwdHIpCiYjNDM7CQlfX3R1bl93YWtlX3F1ZXVlKHR1biwgdGZpbGUsIDEpOwomIzQzOwomIzQzOwlzcGluX3VubG9jaygmYW1wO3RmaWxlLSZndDt0eF9yaW5nLmNvbnN1bWVyX2xvY2spOwomIzQzOwlyZXR1cm4gcHRyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLAomIzQzOwkJCSAgIGludCBub2Jsb2NrLCBpbnQgKmVycikKIHsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAl2b2lkICpwdHIgPSBOVUxMOwogCWludCBlcnJvciA9IDA7CiAKLQlwdHIgPSBwdHJfcmluZ19jb25zdW1lKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcpOwomIzQzOwlwdHIgPSB0dW5fcmluZ19jb25zdW1lKHR1biwgdGZpbGUpOwogCWlmIChwdHIpCiAJCWdvdG8gb3V0OwogCWlmIChub2Jsb2NrKSB7CkBAIC0yMTM0LDcgJiM0MzsyMjYxLDcgQEAgc3RhdGljIHZvaWQgKnR1bl9yaW5nX3JlY3Yoc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgaW50IG5vYmxvY2ssIGludCAqZXJyKQogCiAJd2hpbGUgKDEpIHsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJcHRyID0gcHRyX3JpbmdfY29uc3VtZSgmYW1wO3RmaWxlLSZndDt0eF9yaW5nKTsKJiM0MzsJCXB0ciA9IHR1bl9yaW5nX2NvbnN1bWUodHVuLCB0ZmlsZSk7CiAJCWlmIChwdHIpCiAJCQlicmVhazsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CkBAIC0yMTcxLDcgJiM0MzsyMjk4LDcgQEAgc3RhdGljIHNzaXplX3QgdHVuX2RvX3JlYWQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSwKIAogCWlmICghcHRyKSB7CiAJCS8qIFJlYWQgZnJhbWVzIGZyb20gcmluZyAqLwotCQlwdHIgPSB0dW5fcmluZ19yZWN2KHRmaWxlLCBub2Jsb2NrLCAmYW1wO2Vycik7CiYjNDM7CQlwdHIgPSB0dW5fcmluZ19yZWN2KHR1biwgdGZpbGUsIG5vYmxvY2ssICZhbXA7ZXJyKTsKIAkJaWYgKCFwdHIpCiAJCQlyZXR1cm4gZXJyOwogCX0KQEAgLTI3MDMsOCAmIzQzOzI4MzAsOSBAQCBzdGF0aWMgaW50IHR1bl9zZXRfaWZmKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKQogewogCXN0cnVjdCB0dW5fc3RydWN0ICp0dW47CiAJc3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsJc3RydWN0IHR1bl9maWxlICpudGZpbGU7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlpbnQgZXJyOwomIzQzOwlpbnQgZXJyLCBpOwogCiAJaWYgKHRmaWxlLSZndDtkZXRhY2hlZCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yODMzLDggJiM0MzsyOTYxLDEwIEBAIHN0YXRpYyBpbnQgdHVuX3NldF9pZmYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlmcmVxICppZnIpCiAJLyogTWFrZSBzdXJlIHBlcnNpc3RlbnQgZGV2aWNlcyBkbyBub3QgZ2V0IHN0dWNrIGluCiAJICogeG9mZiBzdGF0ZS4KIAkgKi8KLQlpZiAobmV0aWZfcnVubmluZyh0dW4tJmd0O2RldikpCi0JCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyh0dW4tJmd0O2Rldik7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0dW4tJmd0O251bXF1ZXVlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCW50ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLSZndDt0ZmlsZXNbaV0pOwomIzQzOwkJdHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCBudGZpbGUpOwomIzQzOwl9CiAKIAlzdHJzY3B5KGlmci0mZ3Q7aWZyX25hbWUsIHR1bi0mZ3Q7ZGV2LSZndDtuYW1lKTsKIAlyZXR1cm4gMDsKQEAgLTM2MzAsNiAmIzQzOzM3NjAsMTMgQEAgc3RhdGljIGludCB0dW5fcXVldWVfcmVzaXplKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4pCiAJCQkJCSAgZGV2LSZndDt0eF9xdWV1ZV9sZW4sIEdGUF9LRVJORUwsCiAJCQkJCSAgdHVuX3B0cl9mcmVlKTsKIAomIzQzOwlpZiAoIXJldCkgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHR1bi0mZ3Q7bnVtcXVldWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCXRmaWxlID0gcnRubF9kZXJlZmVyZW5jZSh0dW4tJmd0O3RmaWxlc1tpXSk7CiYjNDM7CQkJdHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCB0ZmlsZSk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlrZnJlZShyaW5ncyk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTM3MzgsNiAmIzQzOzM4NzUsMzEgQEAgc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpCiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0dW5fZ2V0X3R4X3JpbmcpOwogCiYjNDM7LyogQ2FsbGVycyBtdXN0IGhvbGQgcmluZy5jb25zdW1lcl9sb2NrICovCiYjNDM7dm9pZCB0dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNvbnN1bWVkKQomIzQzO3sKJiM0MzsJc3RydWN0IHR1bl9maWxlICp0ZmlsZTsKJiM0MzsJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bjsKJiM0MzsKJiM0MzsJaWYgKGZpbGUtJmd0O2Zfb3AgIT0gJmFtcDt0dW5fZm9wcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJdGZpbGUgPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CWlmICghdGZpbGUpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZy5jb25zdW1lcl9sb2NrKTsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwomIzQzOwl0dW4gPSByY3VfZGVyZWZlcmVuY2UodGZpbGUtJmd0O3R1bik7CiYjNDM7CWlmICh0dW4pCiYjNDM7CQlfX3R1bl93YWtlX3F1ZXVlKHR1biwgdGZpbGUsIGNvbnN1bWVkKTsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHR1bl93YWtlX3F1ZXVlKTsKJiM0MzsKIG1vZHVsZV9pbml0KHR1bl9pbml0KTsKIG1vZHVsZV9leGl0KHR1bl9jbGVhbnVwKTsKIE1PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQ1JJUFRJT04pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmMKaW5kZXggNjk0OWI3MDQxNjZkNS4uM2U3MmI5YzZhZjBjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC9uZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L25ldC5jCkBAIC0xNzYsMTMgJiM0MzsxNzYsMjEgQEAgc3RhdGljIHZvaWQgKnZob3N0X25ldF9idWZfY29uc3VtZShzdHJ1Y3Qgdmhvc3RfbmV0X2J1ZiAqcnhxKQogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpCiYjNDM7c3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc3RydWN0IHNvY2sgKnNrLAomIzQzOwkJCQkgc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSkKIHsKJiM0MzsJc3RydWN0IGZpbGUgKmZpbGUgPSBzay0mZ3Q7c2tfc29ja2V0LSZndDtmaWxlOwogCXN0cnVjdCB2aG9zdF9uZXRfYnVmICpyeHEgPSAmYW1wO252cS0mZ3Q7cnhxOwogCiAJcnhxLSZndDtoZWFkID0gMDsKLQlyeHEtJmd0O3RhaWwgPSBwdHJfcmluZ19jb25zdW1lX2JhdGNoZWQobnZxLSZndDtyeF9yaW5nLCByeHEtJmd0O3F1ZXVlLAotCQkJCQkgICAgICBWSE9TVF9ORVRfQkFUQ0gpOwomIzQzOwlzcGluX2xvY2soJmFtcDtudnEtJmd0O3J4X3JpbmctJmd0O2NvbnN1bWVyX2xvY2spOwomIzQzOwlyeHEtJmd0O3RhaWwgPSBfX3B0cl9yaW5nX2NvbnN1bWVfYmF0Y2hlZChudnEtJmd0O3J4X3JpbmcsIHJ4cS0mZ3Q7cXVldWUsCiYjNDM7CQkJCQkgICAgICAgVkhPU1RfTkVUX0JBVENIKTsKJiM0MzsKJiM0MzsJaWYgKHJ4cS0mZ3Q7dGFpbCkKJiM0MzsJCXR1bl93YWtlX3F1ZXVlKGZpbGUsIHJ4cS0mZ3Q7dGFpbCk7CiYjNDM7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7bnZxLSZndDtyeF9yaW5nLSZndDtjb25zdW1lcl9sb2NrKTsKIAlyZXR1cm4gcnhxLSZndDt0YWlsOwogfQogCkBAIC0yMDksMTQgJiM0MzsyMTcsMTUgQEAgc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWtfbGVuKHZvaWQgKnB0cikKIAlyZXR1cm4gX19za2JfYXJyYXlfbGVuX3dpdGhfdGFnKHB0cik7CiB9CiAKLXN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpCiYjNDM7c3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWsoc3RydWN0IHNvY2sgKnNrLAomIzQzOwkJCSAgICAgIHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpCiB7CiAJc3RydWN0IHZob3N0X25ldF9idWYgKnJ4cSA9ICZhbXA7bnZxLSZndDtyeHE7CiAKIAlpZiAoIXZob3N0X25ldF9idWZfaXNfZW1wdHkocnhxKSkKIAkJZ290byBvdXQ7CiAKLQlpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShudnEpKQomIzQzOwlpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShzaywgbnZxKSkKIAkJcmV0dXJuIDA7CiAKIG91dDoKQEAgLTEwMDQsNyAmIzQzOzEwMTMsNyBAQCBzdGF0aWMgaW50IHBlZWtfaGVhZF9sZW4oc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKnJ2cSwgc3RydWN0IHNvY2sgKnNrKQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAocnZxLSZndDtyeF9yaW5nKQotCQlyZXR1cm4gdmhvc3RfbmV0X2J1Zl9wZWVrKHJ2cSk7CiYjNDM7CQlyZXR1cm4gdmhvc3RfbmV0X2J1Zl9wZWVrKHNrLCBydnEpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtzay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrLCBmbGFncyk7CiAJaGVhZCA9IHNrYl9wZWVrKCZhbXA7c2stJmd0O3NrX3JlY2VpdmVfcXVldWUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl90dW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdHVuLmgKaW5kZXggODAxNjZlYjYyZjQxYy4uZWViOWVkM2M1YTIzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl90dW4uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oCkBAIC0yMiw2ICYjNDM7MjIsOCBAQCBzdHJ1Y3QgdHVuX21zZ19jdGwgewogI2lmIGRlZmluZWQoQ09ORklHX1RVTikgfHwgZGVmaW5lZChDT05GSUdfVFVOX01PRFVMRSkKIHN0cnVjdCBzb2NrZXQgKnR1bl9nZXRfc29ja2V0KHN0cnVjdCBmaWxlICopOwogc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpOwomIzQzOy8qIENhbGxlcnMgbXVzdCBob2xkIHRoZSBjb25zdW1lcl9sb2NrIG9mIHRoZSByaW5nIG9mIGZpbGUgKi8KJiM0Mzt2b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY29uc3VtZWQpOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgdHVuX2lzX3hkcF9mcmFtZSh2b2lkICpwdHIpCiB7CkBAIC01NSw2ICYjNDM7NTcsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwdHJfcmluZyAqdHVuX2dldF90eF9yaW5nKHN0cnVjdCBmaWxlICpmKQogCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmLCBpbnQgY29uc3VtZWQpIHt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGJvb2wgdHVuX2lzX3hkcF9mcmFtZSh2b2lkICpwdHIpCiB7CiAJcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oIGIvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oCmluZGV4IGQyYzM2MjliYmU0NTEuLjYzMWM0M2ZkZTQ0MDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmgKQEAgLTk2LDYgJiM0Mzs5NiwyNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcHRyX3JpbmdfZnVsbF9iaChzdHJ1Y3QgcHRyX3JpbmcgKnIpCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzOy8qIFJlcG9ydCB3aGV0aGVyIHRoZSBuZXh0IF9fcHRyX3JpbmdfcHJvZHVjZSgpIGhhcyByb29tIGZvciBvbmUgZW50cnk6CiYjNDM7ICogMCBtZWFucyB0aGUgc2luZ2xlIHNsb3QgYXQgci0mZ3Q7cXVldWVbci0mZ3Q7cHJvZHVjZXJdIGlzIGZyZWUsIC1FTk9TUEMgbWVhbnMKJiM0MzsgKiB0aGUgcmluZyBpcyBmdWxsLCB3aGljaCBpcyB0cmFuc2llbnQsIGFuZCAtRUlOVkFMIG1lYW5zIHItJmd0O3NpemUgaXMgMCwKJiM0MzsgKiB3aGljaCBpcyBwZXJtYW5lbnQuIEEgY2FsbGVyIHRoYXQgc3RvcHMgcHJvZHVjaW5nIGFuZCB3YWl0cyBmb3Igc3BhY2UKJiM0MzsgKiBtdXN0IHRoZXJlZm9yZSBkbyBzbyBvbmx5IGZvciAtRU5PU1BDLgomIzQzOyAqCiYjNDM7ICogTm90ZTogY2FsbGVycyBpbnZva2luZyB0aGlzIGluIGEgbG9vcCBtdXN0IHVzZSBhIGNvbXBpbGVyIGJhcnJpZXIsCiYjNDM7ICogZm9yIGV4YW1wbGUgY3B1X3JlbGF4KCkuIENhbGxlcnMgbXVzdCBob2xkIHByb2R1Y2VyX2xvY2suCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBpbnQgX19wdHJfcmluZ19jaGVja19wcm9kdWNlKHN0cnVjdCBwdHJfcmluZyAqcikKJiM0Mzt7CiYjNDM7CWlmICh1bmxpa2VseSghci0mZ3Q7c2l6ZSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKGRhdGFfcmFjZShyLSZndDtxdWV1ZVtyLSZndDtwcm9kdWNlcl0pKQomIzQzOwkJcmV0dXJuIC1FTk9TUEM7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLAogICogZm9yIGV4YW1wbGUgY3B1X3JlbGF4KCkuIENhbGxlcnMgbXVzdCBob2xkIHByb2R1Y2VyX2xvY2suCiAgKiBDYWxsZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgcG9pbnRlciB0aGF0IGlzIGJlaW5nIHF1ZXVlZApAQCAtMTAzLDggJiM0MzsxMjMsMTAgQEAgc3RhdGljIGlubGluZSBib29sIHB0cl9yaW5nX2Z1bGxfYmgoc3RydWN0IHB0cl9yaW5nICpyKQogICovCiBzdGF0aWMgaW5saW5lIGludCBfX3B0cl9yaW5nX3Byb2R1Y2Uoc3RydWN0IHB0cl9yaW5nICpyLCB2b2lkICpwdHIpCiB7Ci0JaWYgKHVubGlrZWx5KCFyLSZndDtzaXplKSB8fCBkYXRhX3JhY2Uoci0mZ3Q7cXVldWVbci0mZ3Q7cHJvZHVjZXJdKSkKLQkJcmV0dXJuIC1FTk9TUEM7CiYjNDM7CWludCByZXQgPSBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2Uocik7CiYjNDM7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJLyogTWFrZSBzdXJlIHRoZSBwb2ludGVyIHdlIGFyZSBzdG9yaW5nIHBvaW50cyB0byBhIHZhbGlkIGRhdGEuICovCiAJLyogUGFpcnMgd2l0aCB0aGUgZGVwZW5kZW5jeSBvcmRlcmluZyBpbiBfX3B0cl9yaW5nX2NvbnN1bWUuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmgKaW5kZXggNzlkNTNjN2ExZWJkYy4uYTBkZGM1MGE3NTM0MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaApAQCAtNjksNiAmIzQzOzY5LDEwIEBACiAjZGVmaW5lIElGRl9OQVBJX0ZSQUdTCTB4MDAyMAogLyogVXNlZCBpbiBUVU5TRVRJRkYgdG8gYnJpbmcgdXAgdHVuL3RhcCB3aXRob3V0IGNhcnJpZXIgKi8KICNkZWZpbmUgSUZGX05PX0NBUlJJRVIJMHgwMDQwCiYjNDM7LyogU3RvcCB0aGUgcXVldWUgaW5zdGVhZCBvZiBkcm9wcGluZyB3aGVuIHRoZSBpbnRlcm5hbCByaW5nIGlzIGZ1bGwsIHNvIGFuCiYjNDM7ICogYXR0YWNoZWQgcWRpc2MgYXBwbGllcyBiYWNrcHJlc3N1cmUgaW5zdGVhZCBvZiBiZWluZyBieXBhc3NlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIElGRl9CQUNLUFJFU1NVUkUJMHgwMDgwCiAjZGVmaW5lIElGRl9OT19QSQkweDEwMDAKIC8qIFRoaXMgZmxhZyBoYXMgbm8gcmVhbCBlZmZlY3QgKi8KICNkZWZpbmUgSUZGX09ORV9RVUVVRQkweDIwMDAKZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaAppbmRleCAyZWMwN2RlMWQ3M2JlLi4yYzg1NTI1NzA0YzE2IDEwMDY0NAotLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oCkBAIC02Nyw2ICYjNDM7NjcsMTAgQEAKICNkZWZpbmUgSUZGX1RBUAkJMHgwMDAyCiAjZGVmaW5lIElGRl9OQVBJCTB4MDAxMAogI2RlZmluZSBJRkZfTkFQSV9GUkFHUwkweDAwMjAKJiM0MzsvKiBTdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHdoZW4gdGhlIGludGVybmFsIHJpbmcgaXMgZnVsbCwgc28gYW4KJiM0MzsgKiBhdHRhY2hlZCBxZGlzYyBhcHBsaWVzIGJhY2twcmVzc3VyZSBpbnN0ZWFkIG9mIGJlaW5nIGJ5cGFzc2VkLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgSUZGX0JBQ0tQUkVTU1VSRQkweDAwODAKICNkZWZpbmUgSUZGX05PX1BJCTB4MTAwMAogLyogVGhpcyBmbGFnIGhhcyBubyByZWFsIGVmZmVjdCAqLwogI2RlZmluZSBJRkZfT05FX1FVRVVFCTB4MjAwMAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTY5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSUZGX0JBQ0tQUkVTU1VSRSBQYXRjaCBmb3IgVFVOL1RBUCBEZXZpY2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGludHJvZHVjaW5nIGBJRkZfQkFDS1BSRVNTVVJFYCBmb3IgVFVOL1RBUCBkZXZpY2VzLiBUaGlzIGlzIGEgcHJldHR5IGludGVyZXN0aW5nIGFkZGl0aW9uOyBpdCYjMzk7cyBkZXNpZ25lZCB0byBwcmV2ZW50IHBhY2tldCBkcm9wcyB3aGVuIHRoZSByaW5nIGJ1ZmZlciBpcyBmdWxsIGJ5IGFsbG93aW5nIHRoZSBrZXJuZWwgdG8gKnN0b3AqIHRoZSBxdWV1ZSBpbnN0ZWFkLiBUaGF0IGVuYWJsZXMgYW4gYXR0YWNoZWQgcWRpc2MgdG8gYXBwbHkgYmFja3ByZXNzdXJlIOKAkyB2ZXJ5IGNsZXZlci4KClRoZSBjaGFuZ2VzIGFyZSBzcHJlYWQgYWNyb3NzIHNldmVyYWwgZmlsZXMsIHNvIGxldCYjMzk7cyBicmVhayBpdCBkb3duOiBgZHJpdmVycy9uZXQvdHVuLmNgLCBgZHJpdmVycy92aG9zdC9uZXQuY2AsIHRoZSBpbmNsdWRlcyBgaWZfdHVuLmhgLCBgcHRyX3JpbmcuaGAsIGFuZCB0aGUgVUFQSSBoZWFkZXIgYGlmX3R1bi5oYC4KCkRpdmluZyBpbnRvIGBkcml2ZXJzL25ldC90dW4uY2AsIEkgc2VlIGEgZmV3IGtleSBhZGRpdGlvbnMgYW5kIG1vZGlmaWNhdGlvbnM6IGB0dW5fZm9yY2Vfd2FrZV9xdWV1ZWAgaXMgbmV3LCBhIG1vZGlmaWNhdGlvbiB0byBgdHVuX25ldF9jbG9zZWAgdG8gY2xlYXIgYGNvbnNfY250YC4gVGhlIHJlYWwgbWVhdCBpcyBpbiBgdHVuX25ldF94bWl0YDsgaXQmIzM5O3Mgbm93IGNoZWNraW5nIGZvciBgSUZGX0JBQ0tQUkVTU1VSRWAgYW5kIHN0b3BwaW5nIHRoZSBxdWV1ZSB3aGVuIHRoZSByaW5nIGlzIGZ1bGwg4oCTIGV4YWN0bHkgYXMgZXhwZWN0ZWQuIFdlIGFsc28gaGF2ZSBgX190dW5fd2FrZV9xdWV1ZWAgdG8gd2FrZSB1cCB0aGUgcXVldWUgd2hlbiBpdGVtcyBhcmUgY29uc3VtZWQgZnJvbSB0aGUgcmluZywgYHR1bl9yaW5nX2NvbnN1bWVgICh3aGljaCBsb29rcyBsaWtlIGEgbmV3IHJpbmcgYnVmZmVyIGZ1bmN0aW9uKSwgYHR1bl9yaW5nX3JlY3ZgIG1vZGlmaWVkIHRvIHVzZSBgdHVuX3JpbmdfY29uc3VtZWAsIGFuZCB0aGUgYHR1bl93YWtlX3F1ZXVlYCBpcyBub3cgZXhwb3J0ZWQgZm9yIHZob3N0LiBUaGlzIGxvb2tzIHNvbGlkIGluIHRlcm1zIG9mIGZ1bmN0aW9uYWxpdHkuCgpUaGVuLCBpbiBgZHJpdmVycy92aG9zdC9uZXQuY2AsIGB2aG9zdF9uZXRfYnVmX3Byb2R1Y2VgIGlzIGJlaW5nIG1vZGlmaWVkIHRvIGNhbGwgYHR1bl93YWtlX3F1ZXVlYCB3aGVuIGl0ZW1zIGFyZSBjb25zdW1lZC4gVGhpcyBpbnRlZ3JhdGVzIHRoZSB2aG9zdCBzaWRlIG5pY2VseSwgZW5zdXJpbmcgcHJvcGVyIHF1ZXVlIHdha2luZyBpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYXQgdGhlIGNvcmUgbGV2ZWwgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIHBhcnRpY3VsYXJseSBpbXBhY3RzIFRVTi9UQVAsIHdoaWNoIGFyZSB3aWRlbHkgdXNlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBHaXZlbiBpdHMgcmVhY2gsIGZ1enppbmcgaXMgYW4gYWJzb2x1dGUgbXVzdC1kbyBmb3IgdGhpcy4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgQ09ORklHIG9wdGlvbnMuIE9idmlvdXNseSwgYENPTkZJR19UVU5gIGlzIHRoZSBwcmltYXJ5IG9uZS4gQW5kIHNpbmNlIGl0JiMzOTtzIHZob3N0LWF3YXJlLCBgQ09ORklHX1ZIT1NUX05FVGAgaXMgY3JpdGljYWwsIHRvby4KCkkgbmVlZCB0byBjb25maXJtIHRoZWlyIGxvY2F0aW9uIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLCBzbyBJJiMzOTtsbCBjaGVjayBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZm9yIHRoZSBgVFVOYCBzZXR0aW5nIGFuZCBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBmb3IgYFZIT1NUX05FVGAuIEdvdHRhIG1ha2Ugc3VyZSBhbGwgYmFzZXMgYXJlIGNvdmVyZWQgZnJvbSBhIGJ1aWxkIHBlcnNwZWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUVU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9Mzg2PWNvbmZpZyBSSU9ORVRfUlhfU0laRVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzkwLVxuZHJpdmVycy9uZXQvS2NvbmZpZzozOTE6Y29uZmlnIFRVTlxuZHJpdmVycy9uZXQvS2NvbmZpZy0zOTItXHR0cmlzdGF0ZSBcJiMzNDtVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTQxNT1jb25maWcgVEFQXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy00MjAtXG5kcml2ZXJzL25ldC9LY29uZmlnOjQyMTpjb25maWcgVFVOX1ZORVRfQ1JPU1NfTEVcbmRyaXZlcnMvbmV0L0tjb25maWctNDIyLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBjcm9zcy1lbmRpYW4gdm5ldCBoZWFkZXJzIG9uIGxpdHRsZS1lbmRpYW4ga2VybmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MzYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBWSE9TVF9ORVQgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBmaWxlLiBHaXZlbiBteSBleHBlcmllbmNlLCB0aGF0JiMzOTtzIGFsbW9zdCBhbHdheXMgdGhlIGZpcnN0IHBsYWNlIEkmIzM5O2QgbG9vayB3aGVuIGRlYWxpbmcgd2l0aCBhbnl0aGluZyByZWxhdGVkIHRvIHZob3N0LCBlc3BlY2lhbGx5IHdoZW4gaXQgY29uY2VybnMgbmV0d29ya2luZy4gSSBrbm93IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgdmhvc3QgZnJhbWV3b3JrIGFyZSBkZWZpbmVkLCBhbmQgYFZIT1NUX05FVGAgaXMgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgdGhlIHNwZWNpZmljIG5ldHdvcmtpbmcgYXNwZWN0IEkmIzM5O20gZm9jdXNlZCBvbi4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IGJ5IGNoZWNraW5nIGBkcml2ZXJzL3Zob3N0L0tjb25maWdgIEkgd2lsbCB1bmRlcnN0YW5kIGlmIHRoYXQmIzM5O3MgZW5hYmxlZCBhbmQgaG93IHRvIGNvbmZpZ3VyZSB0aGF0IHBvcnRpb24gb2YgdGhlIHZpcnR1YWwgaG9zdCBmcmFtZXdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZIT1NUX05FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWc9MzI9aWYgVkhPU1RfTUVOVVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTMzLVxuZHJpdmVycy92aG9zdC9LY29uZmlnOjM0OmNvbmZpZyBWSE9TVF9ORVRcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0zNS1cdHRyaXN0YXRlIFwmIzM0O0hvc3Qga2VybmVsIGFjY2VsZXJhdG9yIGZvciB2aXJ0aW8gbmV0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDI6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMzQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBhcyBpZiBJJiMzOTttIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBWSE9TVF9ORVQgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgVkhPU1RfTkVUYCB0aGluZyBhIGJpdCBiZXR0ZXIuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBpZiBpdCByZWxpZXMgb24gYW55dGhpbmcgc3BlY2lmaWMg4oCTIGFueSBvdGhlciBrZXJuZWwgbW9kdWxlcywgZmVhdHVyZXMsIG9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgKm11c3QqIGJlIGluIHBsYWNlIGZvciBpdCB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBmb3IgYW55IG9idmlvdXMgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvbm5lY3Rpb25zIGFyZS4gVGhpcyBpcyB0aGUgYmVzdCBhcHByb2FjaCB0byBnYWluIGEgc29saWQgZ3Jhc3Agb2YgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnPTM0PWNvbmZpZyBWSE9TVF9ORVRcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0zNS1cdHRyaXN0YXRlIFwmIzM0O0hvc3Qga2VybmVsIGFjY2VsZXJhdG9yIGZvciB2aXJ0aW8gbmV0XCYjMzQ7XG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MzY6XHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgRVZFTlRGRCBcdTAwMjZcdTAwMjYgKFRVTiB8fCAhVFVOKSBcdTAwMjZcdTAwMjYgKFRBUCB8fCAhVEFQKVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTM3LVx0c2VsZWN0IFZIT1NUXG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnPTQ2PWNvbmZpZyBWSE9TVF9TQ1NJXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNDctXHR0cmlzdGF0ZSBcJiMzNDtWSE9TVF9TQ1NJIFRDTSBmYWJyaWMgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NDg6XHRkZXBlbmRzIG9uIFRBUkdFVF9DT1JFIFx1MDAyNlx1MDAyNiBFVkVOVEZEXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNDktXHRzZWxlY3QgVkhPU1Rcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9NTY9Y29uZmlnIFZIT1NUX1ZTT0NLXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTctXHR0cmlzdGF0ZSBcJiMzNDt2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NTg6XHRkZXBlbmRzIG9uIFZTT0NLRVRTIFx1MDAyNlx1MDAyNiBFVkVOVEZEXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTktXHRzZWxlY3QgVkhPU1Rcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9NzA9Y29uZmlnIFZIT1NUX1ZEUEFcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03MS1cdHRyaXN0YXRlIFwmIzM0O1Zob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXCYjMzQ7XG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NzI6XHRkZXBlbmRzIG9uIEVWRU5URkRcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03My1cdHNlbGVjdCBWSE9TVFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTc0LVx0c2VsZWN0IElSUV9CWVBBU1NfTUFOQUdFUlxuZHJpdmVycy92aG9zdC9LY29uZmlnOjc1Olx0ZGVwZW5kcyBvbiBWRFBBXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNzYtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2MTQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBbmFseXNpcyBvZiBUVU4gYW5kIFZIT1NUX05FVCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGBUVU5gIGFuZCBgVkhPU1RfTkVUYCBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVyZS4gTGV0JiMzOTtzIGdldCByaWdodCB0byB0aGUgY29yZSBvZiB0aGUgbWF0dGVyLCB0aGUga2V5IHN5bWJvbHMuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZXNlIGZ1bmN0aW9ucyB3aXRoaW4gYGRyaXZlcnMvbmV0L3R1bi5jYDoKCiogICBgdHVuX25ldF94bWl0YCAtIFRoaXMgaXMgY2xlYXJseSBpbXBvcnRhbnQgZm9yIHRyYW5zbWlzc2lvbi4KKiAgIGB0dW5fc2V0X2lmZmAgLSBEZWZpbml0ZWx5IGEgY3JpdGljYWwgb25lIGZvciBpbnRlcmZhY2UgY29uZmlndXJhdGlvbi4KKiAgIGB0dW5fd2FrZV9xdWV1ZWAgLSBUaGlzIGlzIGFsd2F5cyBhbiBpbnRlcmVzdGluZyBvbmUgcmVsYXRlZCB0byBxdWV1ZSBtYW5hZ2VtZW50LgoqICAgYHR1bl9yaW5nX3JlY3ZgIC0gU2VlbXMgdG8gYmUgc3RhdGljLCBidXQgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgb24gaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSBmaWxlLCBsaWtlbHkgdGhyb3VnaCBgdHVuX2RvX3JlYWRgIG9yIGB0dW5fY2hyX3JlYWRfaXRlcmAuCiogICBgdHVuX25ldF9jbG9zZWAgLSBNdXN0IGJlIGltcG9ydGFudCBmb3IgY2xlYW51cAoqICAgYHR1bl9xdWV1ZV9yZXNpemVgIC0gQWx3YXlzIGltcG9ydGFudCB0byBrbm93IGhvdyB0byBtYW5hZ2UgdGhlIHF1ZXVlIHNpemUKKiAgIGB0dW5fZGV0YWNoX2FsbGAgLSBQb3NzaWJseSBpbXBvcnRhbnQsIHdvcnRoIGEgbG9vay4KKiAgIGB0dW5fYXR0YWNoYCAtIGFsc28gYSBzdGF0aWMgZnVuY3Rpb24gY2FsbGVkIGJ5IGB0dW5fc2V0X2lmZmAuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIGBkcml2ZXJzL25ldC90dW4uY2AgZm9yIGhvdyBgdHVuX3JpbmdfcmVjdmAgYW5kIGB0dW5fd2FrZV9xdWV1ZWAgYXJlIHVzZWQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGNvbnRleHQgdG8gZGV0ZXJtaW5lIHRoZWlyIHRydWUgc2lnbmlmaWNhbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dW5fd2FrZV9xdWV1ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jPTEwNTk9c3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTExMzAtXHRcdG5ldGlmX3R4X3N0b3BfcXVldWUocXVldWUpO1xuZHJpdmVycy9uZXQvdHVuLmM6MTEzMTpcdFx0LyogUGFpcmVkIHdpdGggc21wX21iKCkgaW4gX190dW5fd2FrZV9xdWV1ZSgpICovXG5kcml2ZXJzL25ldC90dW4uYy0xMTMyLVx0XHRzbXBfbWJfX2FmdGVyX2F0b21pYygpO1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTIxMTQ9c3RhdGljIHNzaXplX3QgdHVuX3B1dF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjE5OC0vKiBDYWxsZXJzIG11c3QgaG9sZCByaW5nLmNvbnN1bWVyX2xvY2sgKi9cbmRyaXZlcnMvbmV0L3R1bi5jOjIxOTk6c3RhdGljIHZvaWQgX190dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuZHJpdmVycy9uZXQvdHVuLmMtMjIwMC1cdFx0XHQgICAgIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGludCBjb25zdW1lZClcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0yMjMyPXN0YXRpYyB2b2lkICp0dW5fcmluZ19jb25zdW1lKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjIzOC1cdGlmIChwdHIpXG5kcml2ZXJzL25ldC90dW4uYzoyMjM5Olx0XHRfX3R1bl93YWtlX3F1ZXVlKHR1biwgdGZpbGUsIDEpO1xuZHJpdmVycy9uZXQvdHVuLmMtMjI0MC1cbi0tXG5kcml2ZXJzL25ldC90dW4uYz0zODc2PUVYUE9SVF9TWU1CT0xfR1BMKHR1bl9nZXRfdHhfcmluZyk7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzg3OC0vKiBDYWxsZXJzIG11c3QgaG9sZCByaW5nLmNvbnN1bWVyX2xvY2sgKi9cbmRyaXZlcnMvbmV0L3R1bi5jOjM4Nzk6dm9pZCB0dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNvbnN1bWVkKVxuZHJpdmVycy9uZXQvdHVuLmMtMzg4MC17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzg5Ni1cdGlmICh0dW4pXG5kcml2ZXJzL25ldC90dW4uYzozODk3Olx0XHRfX3R1bl93YWtlX3F1ZXVlKHR1biwgdGZpbGUsIGNvbnN1bWVkKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTM4OTgtXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzkwMC19XG5kcml2ZXJzL25ldC90dW4uYzozOTAxOkVYUE9SVF9TWU1CT0xfR1BMKHR1bl93YWtlX3F1ZXVlKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTM5MDItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzI3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVFVOL1ZIT1NUIE5ldHdvcmsgSW50ZXJmYWNlIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgVFVOL1ZIT1NUIG5ldHdvcmtpbmcgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgaW50ZXJhY3Rpb24gcG9pbnRzLiBJIHNlZSB0aGF0IGB0dW5fd2FrZV9xdWV1ZWAgaXMgZXhwb3J0ZWQsIHdoaWNoIGlzIGltcG9ydGFudCBmb3Igc2lnbmFsaW5nIGRhdGEgYXZhaWxhYmlsaXR5LiBUaGVuIHdlIGhhdmUgYHR1bl9uZXRfeG1pdGAsIHdoaWNoIGlzIHRoZSBuZXRkZXYgdHJhbnNtaXQgZnVuY3Rpb24g4oCTIHRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgaG93IHBhY2tldHMgZ2V0IHNlbnQgb3V0LiBgdHVuX3NldF9pZmZgIGhhbmRsZXMgdGhlIGlvY3RscywgdGhhdCBtYWtlcyBzZW5zZS4gQW5kIGB0dW5fcXVldWVfcmVzaXplYCBpcywgb2YgY291cnNlLCB0aGUgZnVuY3Rpb24gdG8gaGFuZGxlIHF1ZXVlIHNpemUgY2hhbmdlcyBhbmQgaXMgY2FsbGVkIGVpdGhlciBieSBgdHVuX2Nocl9pb2N0bGAgb3IgYHR1bl9uZXRfY2hhbmdlX210dWAuCgpOb3csIHRoaW5ncyBnZXQgYSBiaXQgbW9yZSBpbnRyaWNhdGUgd2l0aCB0aGUgVkhPU1Qgc2lkZS4gSSBzZWUgYHZob3N0X25ldF9idWZfcHJvZHVjZWAgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYnV0IGl0IGdldHMgY2FsbGVkIGZyb20gYHZob3N0X25ldF9idWZfcGVla2AuIFRoYXQgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZnJvbSBgcGVla19oZWFkX2xlbmAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGVpdGhlciBgdmhvc3RfbmV0X3J4X3BlZWtfaGVhZF9sZW5gIG9yLCBtb3JlIGltcG9ydGFudGx5LCBgaGFuZGxlX3J4YC4gU28sIGBoYW5kbGVfcnhgIGFuZCBgdmhvc3RfbmV0X3J4X3BlZWtfaGVhZF9sZW5gIGxpa2VseSBkbyBhIGxvdCBvZiB0aGUgaGVhdnkgbGlmdGluZy4gVGltZSB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBkcml2ZXJzL3Zob3N0L25ldC5jYCBmaWxlIGFuZCB1bmRlcnN0YW5kIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9ucyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfbmV0X2J1Zl9wcm9kdWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9uZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L25ldC5jPTE3Mj1zdGF0aWMgdm9pZCAqdmhvc3RfbmV0X2J1Zl9jb25zdW1lKHN0cnVjdCB2aG9zdF9uZXRfYnVmICpyeHEpXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xNzgtXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE3OTpzdGF0aWMgaW50IHZob3N0X25ldF9idWZfcHJvZHVjZShzdHJ1Y3Qgc29jayAqc2ssXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4MC1cdFx0XHRcdCBzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqbnZxKVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM9MjIwPXN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrKHN0cnVjdCBzb2NrICpzayxcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTIyNy1cbmRyaXZlcnMvdmhvc3QvbmV0LmM6MjI4Olx0aWYgKCF2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc2ssIG52cSkpXG5kcml2ZXJzL3Zob3N0L25ldC5jLTIyOS1cdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDMxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBEYXRhIEZsb3c6IHZob3N0X25ldF9idWZfcGVlayB0byBoYW5kbGVfcngqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgbWluZCBpcyB0cmFjaW5nIGEgc3BlY2lmaWMgcGF0aCB3aXRoaW4gdGhlIHZob3N0LW5ldCBkcml2ZXIsIGFuZCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSBzZWVpbmcuIGB2aG9zdF9uZXRfYnVmX3BlZWtgIGlzIHRoZSBrZXkgZnVuY3Rpb24gSSYjMzk7bSBmb2N1c2luZyBvbiByaWdodCBub3cuIEl0JiMzOTtzIGRpcmVjdGx5IGludm9rZWQgYnkgYHBlZWtfaGVhZF9sZW5gLCB3aGljaCBpbiB0dXJuLCBpcyBhIGNhbGxlZCBieSBgaGFuZGxlX3J4YC4gVGhpcyBpcyBjbGVhcmx5IHRoZSBkYXRhIHBhdGggSSBuZWVkIHRvIGJlIGNvbmNlcm5lZCB3aXRoLgoKSSYjMzk7bSBlc3NlbnRpYWxseSB0cmFja2luZyBkYXRhIHRocm91Z2ggdGhlIG5ldHdvcmsgc3RhY2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBtdWNoIGRhdGEgaXMgYXZhaWxhYmxlLCB3aGVyZSBpcyBpdCwgYW5kIHdoYXQgYXJlIHRoZSBzdGVwcyB0byBhY3R1YWxseSBnZXQgaXQgdGhyb3VnaCB0byB0aGUgdXNlci4gYHZob3N0X25ldF9idWZfcGVla2AgaXMsIG9idmlvdXNseSwgdGFza2VkIHdpdGggZ2V0dGluZyBhIGxvb2sgYXQgdGhlIGRhdGEgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyLiBgcGVla19oZWFkX2xlbmAgdGhlbiBhcHBlYXJzIHRvIGJlIHVzaW5nIHRoYXQgcGVlayB0byB3b3JrIG91dCBob3cgbXVjaCBpcyBhdCB0aGUgaGVhZCBvZiB0aGUgYnVmZmVyLiBGaW5hbGx5LCBgaGFuZGxlX3J4YC4uLiB0aGF0JiMzOTtzIHdoZXJlIHRoZSBkYXRhIGlzIHVsdGltYXRlbHkgcHJvY2Vzc2VkLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSB0aGUgYWN0dWFsIHJlY2VpdmUgaGFuZGxpbmcgaXMgcGVyZm9ybWVkLiBTbywgSSBzZWUgdGhpcyBhcyB0aGUgbWFpbiAmIzM0O2RhdGEgcmV0cmlldmFsIGFuZCBwcm9jZXNzaW5nJiMzNDsgdGhyZWFkLiBUaGlzIGFsc28gaW1wbGllcyB0aGF0IEkgbmVlZCB0byBiZSBjYXJlZnVsIHdoZW4gbW9kaWZ5aW5nIHRoZSBpbml0aWFsIHBlZWtpbmcgYXMgaXQgYWZmZWN0cyB0aGUgZGF0YSB0cmFuc2ZlciBhbGwgdGhlIHdheSB0byBpdHMgZGVzdGluYXRpb24uIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBteSBjdXJyZW50IGRlYnVnZ2luZyB0YXNrLiBOb3cgSSBqdXN0IG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGVhY2ggZnVuY3Rpb24gYW5kIHNlZSB3aGVyZSB0aGUga2V5IGludGVyYWN0aW9ucywgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQgYW55IHBvc3NpYmxlIGVycm9ycyBsaWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BlZWtfaGVhZF9sZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmM9OTgzPXN0YXRpYyB2b2lkIGhhbmRsZV90eChzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQpXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDA4LVxuZHJpdmVycy92aG9zdC9uZXQuYzoxMDA5OnN0YXRpYyBpbnQgcGVla19oZWFkX2xlbihzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqcnZxLCBzdHJ1Y3Qgc29jayAqc2spXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEwMTAte1xuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAyOS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTAzMDpzdGF0aWMgaW50IHZob3N0X25ldF9yeF9wZWVrX2hlYWRfbGVuKHN0cnVjdCB2aG9zdF9uZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDMxLVx0XHRcdFx0ICAgICAgYm9vbCAqYnVzeWxvb3BfaW50ciwgdW5zaWduZWQgaW50ICpjb3VudClcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEwMzYtXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp0dnEgPSBcdTAwMjZ0bnZxLVx1MDAzZXZxO1xuZHJpdmVycy92aG9zdC9uZXQuYzoxMDM3Olx0aW50IGxlbiA9IHBlZWtfaGVhZF9sZW4ocm52cSwgc2spO1xuZHJpdmVycy92aG9zdC9uZXQuYy0xMDM4LVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTA0NS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTA0NjpcdFx0bGVuID0gcGVla19oZWFkX2xlbihybnZxLCBzayk7XG5kcml2ZXJzL3Zob3N0L25ldC5jLTEwNDctXHR9XG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYz0xMTQ5PXN0YXRpYyB2b2lkIGhhbmRsZV9yeChzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQpXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xMjAxLVx0ZG8ge1xuZHJpdmVycy92aG9zdC9uZXQuYzoxMjAyOlx0XHRzb2NrX2xlbiA9IHZob3N0X25ldF9yeF9wZWVrX2hlYWRfbGVuKG5ldCwgc29jay1cdTAwM2VzayxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTIwMy1cdFx0XHRcdFx0XHQgICAgICBcdTAwMjZidXN5bG9vcF9pbnRyLCBcdTAwMjZjb3VudCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzAwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6CgoqKkZvY3VzaW5nIEluIG9uIFZob3N0LU5ldCBmb3IgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBob25pbmcgaW4gb24gdGhlIGB2aG9zdF9uZXRgIG1vZHVsZSwgc3BlY2lmaWNhbGx5IHRoZSBgaGFuZGxlX3J4YCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIGEgcHJpbWUgc3BvdCB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIHBhY2tldCByZWNlcHRpb24gcGF0aC4gSSYjMzk7bSBhbHNvIGpvdHRpbmcgZG93biBhIGZldyBvdGhlciBmdW5jdGlvbnMgdGhhdCBsb29rIHByb21pc2luZyBhcyBJIGV4cGFuZCBteSBzY29wZTogYHR1bl9uZXRfeG1pdGAsIHdoaWNoIHNob3VsZCBoYW5kbGUgdHJhbnNtaXNzaW9uIGZyb20gdGhlIFRVTiBpbnRlcmZhY2UsICBgdHVuX3NldF9pZmZgLCB3aGljaCBoYW5kbGVzIGludGVyZmFjZSBjb25maWd1cmF0aW9uLCBgdHVuX3dha2VfcXVldWVgLCBhbmQgYHR1bl9jaHJfcmVhZF9pdGVyYCB3aGljaCBldmVudHVhbGx5IGNhbGxzIGB0dW5fZG9fcmVhZGAgYW5kIHRoZW4gaW50byBgdHVuX3JpbmdfcmVjdmAuIFRoZXNlLCB0YWtlbiB0b2dldGhlciwgZ2l2ZSBtZSBhIGdvb2QgaW5pdGlhbCByb2FkbWFwIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgdGhyb3VnaCB0aGUgVFVOIGRldmljZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBlbm91Z2ggaW5mbyB0byBtYXAgdGhlIG1ham9yIHBsYXllcnMgYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdG8gaW5zZXJ0IHNvbWUgaW5zdHJ1bWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dW5fY2hyX3JlYWRfaXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jPTIyODc9c3RhdGljIHNzaXplX3QgdHVuX2RvX3JlYWQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yMzIzLVxuZHJpdmVycy9uZXQvdHVuLmM6MjMyNDpzdGF0aWMgc3NpemVfdCB0dW5fY2hyX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG5kcml2ZXJzL25ldC90dW4uYy0yMzI1LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0zNjAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR1bl9mb3BzID0ge1xuZHJpdmVycy9uZXQvdHVuLmMtMzYwNC1cdC5vd25lclx0PSBUSElTX01PRFVMRSxcbmRyaXZlcnMvbmV0L3R1bi5jOjM2MDU6XHQucmVhZF9pdGVyICA9IHR1bl9jaHJfcmVhZF9pdGVyLFxuZHJpdmVycy9uZXQvdHVuLmMtMzYwNi1cdC53cml0ZV9pdGVyID0gdHVuX2Nocl93cml0ZV9pdGVyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgzMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIGB0dW5fbmV0X2Nsb3NlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSByaWdodCBpbi4gVGhlIGltbWVkaWF0ZSBjb25jZXJuIGlzIHRvIHNjcnV0aW5pemUgdGhlIGB0dW5fbmV0X2Nsb3NlYCBmdW5jdGlvbi4gTXkgbWVudGFsIGNoZWNrbGlzdCBzdGFydHMgcnVubmluZzogd2hhdCYjMzk7cyB0aGUgY29udGV4dD8gV2hhdCYjMzk7cyBpdCBzdXBwb3NlZCB0byBiZSBkb2luZz8gTWVtb3J5IGxlYWtzPyBSZXNvdXJjZSBjb250ZW50aW9uPyBSYWNlIGNvbmRpdGlvbnM/IElzIGl0IGp1c3QgYSB3cmFwcGVyLCBvciBkb2VzIGl0IGhhbmRsZSBtb3JlIGludHJpY2F0ZSBjbGVhbnVwPyBTcGVjaWZpY2FsbHksIGFyZSB3ZSBjb3JyZWN0bHkgemVyb2luZyBvdXQgcG9pbnRlcnMsIHJlbGVhc2luZyBhbGxvY2F0ZWQgYnVmZmVycywgYW5kIG1vc3QgY3JpdGljYWxseSwgYXJlIHdlIGVuc3VyaW5nIHRoYXQgdGhlIHVuZGVybHlpbmcgbmV0d29yayBpbnRlcmZhY2UgaXMgY2xlYW5seSBicm91Z2h0IGRvd24gYmVmb3JlIGFueSBmdXJ0aGVyIG9wZXJhdGlvbnMgb2NjdXI/IEkgbmVlZCB0byB0aGluayB0aHJvdWdoIGV2ZXJ5IHBvc3NpYmxlIGZhaWx1cmUgc2NlbmFyaW8gaGVyZTogd2hhdCBoYXBwZW5zIGlmIHRoZSBuZXR3b3JrIGludGVyZmFjZSBmYWlscyB0byBjbG9zZSBjbGVhbmx5PyBEb2VzIHRoaXMgaW1wYWN0IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0/IEFyZSB0aGVyZSBhbnkgc2lnbmFscyBiZWluZyBoYW5kbGVkLCBhbmQgY291bGQgdGhleSBpbnRlcnJ1cHQgY3JpdGljYWwgb3BlcmF0aW9ucz8gVGhpcyBpcyB0aGUgcG9pbnQgdG8gYmUgdmVyeSBza2VwdGljYWwgYW5kIGxvb2sgZm9yIGFsbCBwb3NzaWJsZSB3ZWFrIHBvaW50cy4gQmV0dGVyIGJlIHNhZmUgdGhhbiBzb3JyeS4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgY29kZSBjb21tZW50cyBhcmUgZGVzY3JpcHRpdmUgZW5vdWdoLCBvciBpZiBJIGhhdmUgdG8gc3RlcCB0aHJvdWdoIHRoZSBlbnRpcmUgZnVuY3Rpb24gYW5kIHJlYWQgdGhlIGNvZGUgbGlrZSBhIHBvZW0sIGxpbmUgYnkgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHVuX25ldF9jbG9zZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jPTcwNj1zdGF0aWMgdm9pZCB0dW5fZm9yY2Vfd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTcxNC1cdHRmaWxlLVx1MDAzZWNvbnNfY250ID0gMDtcbmRyaXZlcnMvbmV0L3R1bi5jOjcxNTpcdC8qIFRlc3RlZCB1bmRlciB0aGUgbG9ja3MgdGhhdCB0dW5fbmV0X2Nsb3NlKCkgdGFrZXMsIHNvIHRoaXMgY2FuIG5vdFxuZHJpdmVycy9uZXQvdHVuLmMtNzE2LVx0ICogdW5kbyBpdHMgc3RvcC4gdHVuX25ldF9vcGVuKCkgd2FrZXMgdGhlIHF1ZXVlcyBvZiBhIGRldmljZSB0aGF0XG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9OTk1PXN0YXRpYyBpbnQgdHVuX25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTAwMi0vKiBOZXQgZGV2aWNlIGNsb3NlLiAqL1xuZHJpdmVycy9uZXQvdHVuLmM6MTAwMzpzdGF0aWMgaW50IHR1bl9uZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3R1bi5jLTEwMDQte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTEyNjI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0dW5fbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMjY1LVx0Lm5kb19vcGVuXHRcdD0gdHVuX25ldF9vcGVuLFxuZHJpdmVycy9uZXQvdHVuLmM6MTI2NjpcdC5uZG9fc3RvcFx0XHQ9IHR1bl9uZXRfY2xvc2UsXG5kcml2ZXJzL25ldC90dW4uYy0xMjY3LVx0Lm5kb19zdGFydF94bWl0XHRcdD0gdHVuX25ldF94bWl0LFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTEzNDY9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0YXBfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMzQ5LVx0Lm5kb19vcGVuXHRcdD0gdHVuX25ldF9vcGVuLFxuZHJpdmVycy9uZXQvdHVuLmM6MTM1MDpcdC5uZG9fc3RvcFx0XHQ9IHR1bl9uZXRfY2xvc2UsXG5kcml2ZXJzL25ldC90dW4uYy0xMzUxLVx0Lm5kb19zdGFydF94bWl0XHRcdD0gdHVuX25ldF94bWl0LFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTIxOTk9c3RhdGljIHZvaWQgX190dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIyMDktXG5kcml2ZXJzL25ldC90dW4uYzoyMjEwOlx0LyogQSBzdG9wIGZyb20gdHVuX25ldF9jbG9zZSgpIGlzIG5vdCBiYWNrcHJlc3N1cmUsIGxlYXZlIGl0IGFsb25lLiAqL1xuZHJpdmVycy9uZXQvdHVuLmMtMjIxMS1cdGlmICh1bmxpa2VseSghbmV0aWZfcnVubmluZyh0dW4tXHUwMDNlZGV2KSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjkwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVFVOL1ZIT1NUIE5ldHdvcmsgRGV2aWNlIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBUVU4vVkhPU1QgbmV0d29yayBkcml2ZXIsIGFuZCBJIG5lZWQgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2FsbGJhY2sgc3RydWN0dXJlLiBSaWdodCwgbGV0JiMzOTtzIHNlZS4gYHR1bl9uZXRfY2xvc2VgIGlzIGRlZmluaXRlbHkgbGlua2VkIHRvIHRoZSBgLm5kb19zdG9wYCBjYWxsYmFjayDigJMgdGhhdCYjMzk7cyBjbGVhci4gQW5kIGB0dW5fbmV0X3htaXRgIGNvcnJlc3BvbmRzIHRvIHRoZSBgLm5kb19zdGFydF94bWl0YCBjYWxsYmFjaywgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGhhbmRsaW5nIHRyYW5zbWl0IG9wZXJhdGlvbnMuIEkgcmVtZW1iZXIgc2VlaW5nIGB0dW5fc2V0X2lmZmAgYmVpbmcgaW52b2tlZCB3aXRoaW4gYHR1bl9jaHJfaW9jdGxgLCB3aGljaCBoYW5kbGVzIHRoZSBpb2N0bCBjb21tYW5kcy4gVGhhdCYjMzk7cyBob3cgaXQmIzM5O3MgY29uZmlndXJlZCwgZ290IGl0LgoKSSBhbHNvIHNlZSB0aGF0IGB0dW5fd2FrZV9xdWV1ZWAgaXMgZXhwb3J0ZWQsIGltcGx5aW5nIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGJlIHVzZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSB0byBzaWduYWwgcGFja2V0IGF2YWlsYWJpbGl0eS4gQW5kLCBmb3IgdGhlIFZIT1NUIHNpZGUsIGBoYW5kbGVfcnhgIGluIGB2aG9zdF9uZXRgIGlzIHRoZSB3b3JraG9yc2UgaGVyZSwgaXQmIzM5O3MgdGhlIHZob3N0IHdvcmtlciBmb3IgcmVjZWl2ZSBvcGVyYXRpb25zLgoKTm93LCBJIHJlYWxseSBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBob3cgaW50ZXJmYWNlcyBhcmUgc2V0IHVwLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgd2hhdCBjYWxscyBgdHVuX3NldF9pZmZgIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBpcyBtYW5hZ2VkLiBUaGlzIGlzIGtleSBmb3Igb3ZlcmFsbCBmbG93IGNvbnRyb2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R1bl9zZXRfaWZmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmM9MjgyNT1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB0dW5fYXR0cl9ncm91cCA9IHtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yODI4LVxuZHJpdmVycy9uZXQvdHVuLmM6MjgyOTpzdGF0aWMgaW50IHR1bl9zZXRfaWZmKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKVxuZHJpdmVycy9uZXQvdHVuLmMtMjgzMC17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MzE4MD1zdGF0aWMgbG9uZyBfX3R1bl9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzIyNy1cbmRyaXZlcnMvbmV0L3R1bi5jOjMyMjg6XHRcdHJldCA9IHR1bl9zZXRfaWZmKG5ldCwgZmlsZSwgXHUwMDI2aWZyKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTMyMjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Mjg2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgVFVOL1RBUCBJbnRlcmZhY2UqKgoKT2theSwgc28gYF9fdHVuX2Nocl9pb2N0bGAgc2VlbXMgbGlrZSBhIGdvb2QgZW50cnkgcG9pbnQuIFRoYXQgbGlrZWx5IGhhbmRsZXMgdGhlIGlvY3RsIGNhbGxzIGZvciB0aGUgVFVOL1RBUCBjaGFyYWN0ZXIgZGV2aWNlLCB3aGljaCBpcyBhIGNvcmUgcGFydCBvZiBpdHMgZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCB0cmFjZSB0aHJvdWdoIHRoaXMgdG8gdW5kZXJzdGFuZCBob3cgcmVxdWVzdHMgYXJlIHJvdXRlZCBhbmQgaGFuZGxlZCwgYW5kIG1heWJlIGZpbmQgc29tZSBjbHVlcyByZWdhcmRpbmcgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBJJiMzOTttIGxvb2tpbmcgZm9yLgoKTm93LCBsZXQmIzM5O3MgcGl2b3QgdG8gaW52ZXN0aWdhdGluZyBgdHVuX3F1ZXVlX3Jlc2l6ZWAuLi4gdGhhdCBzdWdnZXN0cyB0aGVyZSYjMzk7cyBhIGR5bmFtaWMgYnVmZmVyIG1hbmFnZW1lbnQgYXNwZWN0IEkgc2hvdWxkIGxvb2sgaW50by4gVGhpcyBjb3VsZCBiZSByZWxldmFudCBmb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIGluIHRoZSBkYXRhIHBhdGguIEnigJlsbCBpbnZlc3RpZ2F0ZSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlZ3JhdGVzIHdpdGggdGhlIGFjdHVhbCBwYWNrZXQgcXVldWVpbmcgYW5kIGRlcXVldWluZyBtZWNoYW5pc21zLiBUaGlzIGNvdWxkIHZlcnkgd2VsbCBsZWFkIG1lIHRvIHRoZSByb290IG9mIHRoZSBwZXJmb3JtYW5jZSBjb25jZXJucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHVuX3F1ZXVlX3Jlc2l6ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jPTM3MjY9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB0dW5fZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzczOS1cbmRyaXZlcnMvbmV0L3R1bi5jOjM3NDA6c3RhdGljIGludCB0dW5fcXVldWVfcmVzaXplKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4pXG5kcml2ZXJzL25ldC90dW4uYy0zNzQxLXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0zNzc0PXN0YXRpYyBpbnQgdHVuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCxcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNzg1LVx0Y2FzZSBORVRERVZfQ0hBTkdFX1RYX1FVRVVFX0xFTjpcbmRyaXZlcnMvbmV0L3R1bi5jOjM3ODY6XHRcdGlmICh0dW5fcXVldWVfcmVzaXplKHR1bikpXG5kcml2ZXJzL25ldC90dW4uYy0zNzg3LVx0XHRcdHJldHVybiBOT1RJRllfQkFEO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTczOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBEZXZpY2UgRXZlbnRzIGluIHRoZSBUVU4gRHJpdmVyKioKCk9rYXksIHNvIGB0dW5fZGV2aWNlX2V2ZW50YCBoYXMganVzdCBiZWVuIHRyaWdnZXJlZC4gVGhhdCYjMzk7cyBvdXIgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIG5ldHdvcmsgZGV2aWNlIGV2ZW50cyB3aXRoaW4gdGhlIFRVTiBkcml2ZXIg4oCTIGdvdCBpdC4gTm93LCB3aGF0JiMzOTtzIGhhcHBlbmluZz8gTGV0JiMzOTtzIHF1aWNrbHkgc2hpZnQgZ2VhcnMgYW5kIGNoZWNrIHRoZSBzdGF0dXMgb2YgYHR1bl9mb3JjZV93YWtlX3F1ZXVlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZXZlbnQgcmVsYXRlcyB0byBmb3JjZWQgd2FrZS11cHMuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGVyZSBtaWdodCBiZSBhIGNvbm5lY3Rpb24gaGVyZSBpbiBob3cgdGhlIGV2ZW50IGlzIGhhbmRsZWQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHJlbGF0aW9uc2hpcC4gVGhpcyBjb3VsZCBiZSBhYm91dCByZXNvdXJjZSBtYW5hZ2VtZW50LCBzaWduYWxpbmcsIG9yIGV2ZW4gcHJldmVudGluZyBkZWFkbG9ja3Mg4oCTIGFsbCBjb3JlIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIFRoaXMgcmVxdWlyZXMgYSBkZWVwZXIgZGl2ZSBpbnRvIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHVuX2ZvcmNlX3dha2VfcXVldWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYz02NjI9c3RhdGljIHZvaWQgdHVuX2RldGFjaF9hbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC90dW4uYy03MDUtXG5kcml2ZXJzL25ldC90dW4uYzo3MDY6c3RhdGljIHZvaWQgdHVuX2ZvcmNlX3dha2VfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbmRyaXZlcnMvbmV0L3R1bi5jLTcwNy1cdFx0XHRcdCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTcyNT1zdGF0aWMgaW50IHR1bl9hdHRhY2goc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtNzcxLVx0dGZpbGUtXHUwMDNlc29ja2V0LnNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNj0gflJDVl9TSFVURE9XTjtcbmRyaXZlcnMvbmV0L3R1bi5jOjc3MjpcdHR1bl9mb3JjZV93YWtlX3F1ZXVlKHR1biwgdGZpbGUpO1xuZHJpdmVycy9uZXQvdHVuLmMtNzczLVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTI4Mjk9c3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcilcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yOTY1LVx0XHRudGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cdTAwM2V0ZmlsZXNbaV0pO1xuZHJpdmVycy9uZXQvdHVuLmM6Mjk2NjpcdFx0dHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCBudGZpbGUpO1xuZHJpdmVycy9uZXQvdHVuLmMtMjk2Ny1cdH1cbi0tXG5kcml2ZXJzL25ldC90dW4uYz0zNzQwPXN0YXRpYyBpbnQgdHVuX3F1ZXVlX3Jlc2l6ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTM3NjUtXHRcdFx0dGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cdTAwM2V0ZmlsZXNbaV0pO1xuZHJpdmVycy9uZXQvdHVuLmM6Mzc2NjpcdFx0XHR0dW5fZm9yY2Vfd2FrZV9xdWV1ZSh0dW4sIHRmaWxlKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTM3NjctXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0MDMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgVFVOIERyaXZlciYjMzk7cyBXYWtlLVVwIE1lY2hhbmlzbSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGNvcmUgb2YgdGhlIFRVTiBkcml2ZXImIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCBpdHMgcXVldWVzIGFuZCBJIHNlZSB0aGF0IGZ1bmN0aW9ucyBsaWtlIGB0dW5fYXR0YWNoYCwgYHR1bl9zZXRfaWZmYCwgYW5kIGB0dW5fcXVldWVfcmVzaXplYCBhbGwgdWx0aW1hdGVseSBmdW5uZWwgZG93biB0byBhIGZ1bmN0aW9uIGNhbGxlZCBgdHVuX2ZvcmNlX3dha2VfcXVldWVgLiBJbnRlcmVzdGluZy4gVGhhdCBpbW1lZGlhdGVseSBzdWdnZXN0cyBzb21lIGtpbmQgb2YgZGVsaWJlcmF0ZSBtZWNoYW5pc20gZm9yIHNpZ25hbGluZyBkYXRhIGF2YWlsYWJpbGl0eSBvciBzdGF0ZSBjaGFuZ2VzIHRvIHByb2Nlc3NlcyB3YWl0aW5nIG9uIHRoZXNlIHF1ZXVlcy4gSXQgYWxzbyBtZWFucyB0aGF0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSBJJiMzOTtsbCBwcm9iYWJseSBmaW5kIHRoZSBrZXkgbG9naWMuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIGBfX3R1bl93YWtlX3F1ZXVlYC4gVGhhdCBmdW5jdGlvbiYjMzk7cyBsaWtlbHkgdGhlIGhlYXJ0IG9mIHRoZSB3YWtlLXVwIHByb2Nlc3MuIEl04oCZcyBwcm9iYWJseSB3aGVyZSBzaWduYWxzIGFyZSBzZW50LCBvciB0aHJlYWRzIGFyZSBub3RpZmllZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb25kaXRpb25zIHRyaWdnZXIgdGhlIHdha2UtdXAsIHdoYXQgZGF0YSBpdCBvcGVyYXRlcyBvbiwgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IHdha2UtdXAgYXJlIGluIHRlcm1zIG9mIGRhdGEgdHJhbnNmZXIgYW5kIHJlc291cmNlIGFsbG9jYXRpb24uIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZ2V0IGEgcmVhbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkcml2ZXImIzM5O3MgcmVzcG9uc2l2ZW5lc3MgYW5kIGhvdyBpdCBoYW5kbGVzIGNvbmN1cnJlbmN5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3R1bl93YWtlX3F1ZXVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmM9MTA1OT1zdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTEzMC1cdFx0bmV0aWZfdHhfc3RvcF9xdWV1ZShxdWV1ZSk7XG5kcml2ZXJzL25ldC90dW4uYzoxMTMxOlx0XHQvKiBQYWlyZWQgd2l0aCBzbXBfbWIoKSBpbiBfX3R1bl93YWtlX3F1ZXVlKCkgKi9cbmRyaXZlcnMvbmV0L3R1bi5jLTExMzItXHRcdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MjExND1zdGF0aWMgc3NpemVfdCB0dW5fcHV0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yMTk4LS8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqL1xuZHJpdmVycy9uZXQvdHVuLmM6MjE5OTpzdGF0aWMgdm9pZCBfX3R1bl93YWtlX3F1ZXVlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXG5kcml2ZXJzL25ldC90dW4uYy0yMjAwLVx0XHRcdCAgICAgc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgaW50IGNvbnN1bWVkKVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTIyMzI9c3RhdGljIHZvaWQgKnR1bl9yaW5nX2NvbnN1bWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yMjM4LVx0aWYgKHB0cilcbmRyaXZlcnMvbmV0L3R1bi5jOjIyMzk6XHRcdF9fdHVuX3dha2VfcXVldWUodHVuLCB0ZmlsZSwgMSk7XG5kcml2ZXJzL25ldC90dW4uYy0yMjQwLVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTM4Nzk9dm9pZCB0dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNvbnN1bWVkKVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTM4OTYtXHRpZiAodHVuKVxuZHJpdmVycy9uZXQvdHVuLmM6Mzg5NzpcdFx0X190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCBjb25zdW1lZCk7XG5kcml2ZXJzL25ldC90dW4uYy0zODk4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzE4MwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDEzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCYjMzk7cyBUVU4vVkhPU1QgTmV0d29yayBJbnRlcmZhY2UgQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBmb2N1cyByaWdodCBub3cgaXMgcGlucG9pbnRpbmcga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBUVU4vVkhPU1QgbmV0d29ya2luZyBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7dmUgZ290IGEgbWVudGFsIGNoZWNrbGlzdCBvZiBzeW1ib2xzIHRvIGludmVzdGlnYXRlOiBgdHVuX25ldF94bWl0YCwgYHR1bl9zZXRfaWZmYCwgYHR1bl9jaHJfaW9jdGxgLCBgdHVuX2Nocl9yZWFkX2l0ZXJgLCBgdHVuX25ldF9jbG9zZWAsIGB0dW5fcXVldWVfcmVzaXplYCwgYW5kIGB0dW5fd2FrZV9xdWV1ZWAuIFRoZXNlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgd2hlbiBJJiMzOTttIGRlYWxpbmcgd2l0aCB0aGUgZGF0YSBmbG93IGFuZCBjb250cm9sIHdpdGhpbiB0aGUgVFVOIGludGVyZmFjZS4KCkhtbSwgd2FpdCBhIG1pbnV0ZS4uLiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgdmhvc3RfbmV0X2J1Zl9wZWVrYCBvciBgaGFuZGxlX3J4YCBhcmUgdXNlZC4gVGhleSBhcmUgc3RhdGljLCB3aGljaCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBhcyB0aG9zZSBmdW5jdGlvbnMgd29uJiMzOTt0IGJlIGFzIGludGVyZXN0aW5nIGZvciB0cmFjaW5nIHRoZSBjYWxsaW5nIGZsb3cgZnJvbSBvdXRzaWRlLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxscyBpbiBgZHJpdmVycy92aG9zdC9uZXQuY2AsIHRvIGNoZWNrIGZvciBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSB2aG9zdCBpbnRlcmZhY2UuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgZXh0ZXJuYWxseSBjYWxsYWJsZSBmdW5jdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIGJ1aWxkIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyB0aGUgZGF0YSBhY3R1YWxseSBnZXRzIGluIGFuZCBvdXQgb2YgdGhlIHZob3N0IG5ldHdvcmsgaW50ZXJmYWNlLCB3aGljaCBpcyB0aGUgY3J1eCBvZiB0aGUgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihbYS16X0EtWjAtOV0mIzQzOylcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmM9Mzg9c3RhdGljIGludCBleHBlcmltZW50YWxfemNvcHl0eCA9IDA7XG5kcml2ZXJzL3Zob3N0L25ldC5jOjM5Om1vZHVsZV9wYXJhbShleHBlcmltZW50YWxfemNvcHl0eCwgaW50LCAwNDQ0KTtcbmRyaXZlcnMvdmhvc3QvbmV0LmM6NDA6TU9EVUxFX1BBUk1fREVTQyhleHBlcmltZW50YWxfemNvcHl0eCwgXCYjMzQ7RW5hYmxlIFplcm8gQ29weSBUWDtcJiMzNDtcbmRyaXZlcnMvdmhvc3QvbmV0LmMtNDEtXHRcdCAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7IDEgLUVuYWJsZTsgMCAtIERpc2FibGVcJiMzNDspO1xuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM9MjQ1PXN0YXRpYyBzdHJ1Y3Qgdmhvc3RfbmV0X3VidWZfcmVmICpcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MjQ2OnZob3N0X25ldF91YnVmX2FsbG9jKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBib29sIHpjb3B5KVxuZHJpdmVycy92aG9zdC9uZXQuYy0yNDcte1xuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM9MTg5Mz1zdGF0aWMgaW50IF9faW5pdCB2aG9zdF9uZXRfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTg5OC19XG5kcml2ZXJzL3Zob3N0L25ldC5jOjE4OTk6bW9kdWxlX2luaXQodmhvc3RfbmV0X2luaXQpO1xuZHJpdmVycy92aG9zdC9uZXQuYy0xOTAwLVxuZHJpdmVycy92aG9zdC9uZXQuYz0xOTAxPXN0YXRpYyB2b2lkIF9fZXhpdCB2aG9zdF9uZXRfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTkwNC19XG5kcml2ZXJzL3Zob3N0L25ldC5jOjE5MDU6bW9kdWxlX2V4aXQodmhvc3RfbmV0X2V4aXQpO1xuZHJpdmVycy92aG9zdC9uZXQuYy0xOTA2LVxuZHJpdmVycy92aG9zdC9uZXQuYzoxOTA3Ok1PRFVMRV9WRVJTSU9OKFwmIzM0OzAuMC4xXCYjMzQ7KTtcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTkwODpNT0RVTEVfTElDRU5TRShcJiMzNDtHUEwgdjJcJiMzNDspO1xuZHJpdmVycy92aG9zdC9uZXQuYzoxOTA5Ok1PRFVMRV9BVVRIT1IoXCYjMzQ7TWljaGFlbCBTLiBUc2lya2luXCYjMzQ7KTtcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTkxMDpNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7SG9zdCBrZXJuZWwgYWNjZWxlcmF0b3IgZm9yIHZpcnRpbyBuZXRcJiMzNDspO1xuZHJpdmVycy92aG9zdC9uZXQuYzoxOTExOk1PRFVMRV9BTElBU19NSVNDREVWKFZIT1NUX05FVF9NSU5PUik7XG5kcml2ZXJzL3Zob3N0L25ldC5jOjE5MTI6TU9EVUxFX0FMSUFTKFwmIzM0O2Rldm5hbWU6dmhvc3QtbmV0XCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxNzgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgZm9yIHRoZSBWaXJ0dWFsIEhvc3QgTmV0d29yayBJbnRlcmZhY2UqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaGVyZS4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgY29tZXMgdG8gbWluZCBpcyB0aGUgdmlydHVhbCBob3N0IG5ldHdvcmsgaW50ZXJmYWNlLiBNeSBndXQgdGVsbHMgbWUgdGhhdCYjMzk7cyB0aGUgYXJlYSBJIHNob3VsZCBiZSBmb2N1c2luZyBvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGRpZ2dpbmcgYXJvdW5kIGZvciBhbnkgbWVudGlvbiBvZiBgdmhvc3RfbmV0X2lvY3RsYCBvciBzb21ldGhpbmcgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQuIFRoYXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgc3RhcnRpbmcgcG9pbnQgd2hlbiBJJiMzOTttIGRlYWxpbmcgd2l0aCBuZXR3b3JraW5nIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEl0JiMzOTtzIG9mdGVuIHdoZXJlIHRoZSBhY3Rpb24gaXMsIHNvIGxldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4gSXQmIzM5O3MgdGltZSB0byBzdGFydCBzZWFyY2hpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X25ldF9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9uZXQuYz0xNzI2PXN0YXRpYyBsb25nIHZob3N0X25ldF9zZXRfb3duZXIoc3RydWN0IHZob3N0X25ldCAqbilcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE3NDYtXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE3NDc6c3RhdGljIGxvbmcgdmhvc3RfbmV0X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE3NDgtXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM9MTg3NT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9uZXRfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4ODAtXHQucG9sbCAgICAgICAgICAgPSB2aG9zdF9uZXRfY2hyX3BvbGwsXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE4ODE6XHQudW5sb2NrZWRfaW9jdGwgPSB2aG9zdF9uZXRfaW9jdGwsXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4ODItXHQuY29tcGF0X2lvY3RsICAgPSBjb21wYXRfcHRyX2lvY3RsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODYyMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uc2lkZXJpbmcgYHZob3N0X25ldF9vcGVuYCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdmlydHVhbCBuZXR3b3JrIGRldmljZSBzZXR1cCwgYW5kIGB2aG9zdF9uZXRfb3BlbmAgaW1tZWRpYXRlbHkganVtcHMgdG8gbWluZC4gSSYjMzk7bSBmb2N1c2luZyBvbiBpdCBiZWNhdXNlIGl0JiMzOTtzIGEgY3JpdGljYWwgZW50cnkgcG9pbnQuIFRoZSBpbXBsaWNhdGlvbnMgb2Ygd2hhdCBpdCBkb2VzLCBvciBkb2VzbiYjMzk7dCBkbywgYXJlIHNpZ25pZmljYW50IGZvciBwZXJmb3JtYW5jZSwgc2VjdXJpdHksIGFuZCBzdGFiaWxpdHkuIEkmIzM5O20gd29uZGVyaW5nIGlmIGEgcmVjZW50IGNoYW5nZSB0byB0aGF0IHNlY3Rpb24gaXMgdGhlIHNvdXJjZSBvZiB0aGUgaXNzdWUuIEEgbmV3IGNvbmZpZ3VyYXRpb24/IEEgbmV3IHZlcnNpb24/IEEgcmVmYWN0b3IgdGhhdCB0b3VjaGVkIG9uIGRldmljZSBjYXBhYmlsaXRpZXM/IFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3dzIGludm9sdmVkIGluIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGZyb20gYHZob3N0X25ldF9vcGVuYD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkmIzM5O20gbWlzc2luZz8gQW5kIGRvZXMgaXQgcGxheSB3ZWxsIHdpdGggdGhlIGh5cGVydmlzb3I/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X25ldF9vcGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9uZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L25ldC5jPTEzMzE9c3RhdGljIHZvaWQgaGFuZGxlX3J4X25ldChzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEzMzctXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEzMzg6c3RhdGljIGludCB2aG9zdF9uZXRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTMzOS17XG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYz0xODc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X25ldF9mb3BzID0ge1xuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTg4Mi1cdC5jb21wYXRfaW9jdGwgICA9IGNvbXBhdF9wdHJfaW9jdGwsXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE4ODM6XHQub3BlbiAgICAgICAgICAgPSB2aG9zdF9uZXRfb3BlbixcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTg4NC1cdC5sbHNlZWtcdFx0PSBub29wX2xsc2VlayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwNzAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBUcmFjaW5nIEtleSBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIHZob3N0LW5ldCBhbmQgdHVuLmMgY29kZS4gVGhlIGNyaXRpY2FsIHRoaW5nIHRvIHJlbWVtYmVyIGlzIHRoYXQgdGhlIHZob3N0IHdvcmtlciBydW5zIGluIGEga2VybmVsIHRocmVhZCwgc28gaXQmIzM5O3Mgbm90IGEgZGlyZWN0IHN5c2NhbGwgZW50cnkuIFRoZSByZWFsIGVudHJ5IHBvaW50cyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlIGB2aG9zdF9uZXRfaW9jdGxgIGFuZCBgdmhvc3RfbmV0X29wZW5gLiBXaGlsZSB0aG9zZSBoYW5kbGUgdGhlIGluaXRpYWwgc2V0dXAsIEkga25vdyBgaGFuZGxlX3J4YCBpcyB3aGVyZSB0aGUgcmVhbCBwcm9jZXNzaW5nIGhhcHBlbnMsIHNvIEkmIzM5O2xsIGRlZmluaXRlbHkga2VlcCBhbiBleWUgb24gdGhhdC4gSSYjMzk7bGwgaW5jbHVkZSBgdmhvc3RfbmV0X2lvY3RsYCBhbmQgYHZob3N0X25ldF9vcGVuYCBpbiBteSBpbnZlc3RpZ2F0aW9uLgoKTm93LCBmb3IgYHR1bi5jYCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyB0aGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGB0dW5fY2hyX2lvY3RsYCwgdGhlbiBgdHVuX2Nocl9yZWFkX2l0ZXJgLiBJJiMzOTtsbCBhbHNvIGFkZCBgdHVuX25ldF94bWl0YCwgYHR1bl9uZXRfY2xvc2VgLCBgdHVuX3NldF9pZmZgLCBhbmQgYHR1bl93YWtlX3F1ZXVlYCB0byB0aGUgbGlzdC4gVGhleSBhbGwgc2VlbSBsaWtlIHRoZXkgY291bGQgYmUgaW1wb3J0YW50IHBpZWNlcyBvZiB0aGUgcHV6emxlLiBJ4oCZbGwgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGB0dW5fY2hyX2lvY3RsYCB0byBnZXQgYSBmZWVsIGZvciBob3cgaXQgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R1bl9jaHJfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYz0zMTQyPXN0YXRpYyB1bnNpZ25lZCBjaGFyIHR1bl9nZXRfYWRkcl9sZW4odW5zaWduZWQgc2hvcnQgdHlwZSlcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zMTc5LVxuZHJpdmVycy9uZXQvdHVuLmM6MzE4MDpzdGF0aWMgbG9uZyBfX3R1bl9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG5kcml2ZXJzL25ldC90dW4uYy0zMTgxLVx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFyZywgaW50IGlmcmVxX2xlbilcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zMjU2LVxuZHJpdmVycy9uZXQvdHVuLmM6MzI1NzpcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cdTAwM2VkZXYsIFwmIzM0O3R1bl9jaHJfaW9jdGwgY21kICV1XFxuXCYjMzQ7LCBjbWQpO1xuZHJpdmVycy9uZXQvdHVuLmMtMzI1OC1cbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNDczLVxuZHJpdmVycy9uZXQvdHVuLmM6MzQ3NDpzdGF0aWMgbG9uZyB0dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ3NS1cdFx0XHQgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuZHJpdmVycy9uZXQvdHVuLmMtMzQ3Ni17XG5kcml2ZXJzL25ldC90dW4uYzozNDc3Olx0cmV0dXJuIF9fdHVuX2Nocl9pb2N0bChmaWxlLCBjbWQsIGFyZywgc2l6ZW9mIChzdHJ1Y3QgaWZyZXEpKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTM0NzgtfVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTM0ODE9c3RhdGljIGxvbmcgdHVuX2Nocl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzUwNC1cdCAqL1xuZHJpdmVycy9uZXQvdHVuLmM6MzUwNTpcdHJldHVybiBfX3R1bl9jaHJfaW9jdGwoZmlsZSwgY21kLCBhcmcsIHNpemVvZihzdHJ1Y3QgY29tcGF0X2lmcmVxKSk7XG5kcml2ZXJzL25ldC90dW4uYy0zNTA2LX1cbi0tXG5kcml2ZXJzL25ldC90dW4uYz0zNjAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR1bl9mb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTM2MDctXHQucG9sbFx0PSB0dW5fY2hyX3BvbGwsXG5kcml2ZXJzL25ldC90dW4uYzozNjA4Olx0LnVubG9ja2VkX2lvY3RsXHQ9IHR1bl9jaHJfaW9jdGwsXG5kcml2ZXJzL25ldC90dW4uYy0zNjA5LSNpZmRlZiBDT05GSUdfQ09NUEFUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDMyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBJT0NUTCBQcm9jZXNzKioKCk9rYXksIHNvIHdlJiMzOTtyZSBzdGFydGluZyB3aXRoIGB0dW5fY2hyX2lvY3RsYC4gVGhhdCYjMzk7cyBvdXIgZW50cnkgcG9pbnQsIHRoZSBmaXJzdCBwbGFjZSB0aGUga2VybmVsIGlzIGhhbmRsaW5nIG91ciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBUVU4gZGV2aWNlLiBLbm93aW5nIHRoYXQmIzM5O3Mgd2hlcmUgd2UmIzM5O3JlIGF0IGhlbHBzIGZyYW1lIGV2ZXJ5dGhpbmcgZWxzZS4gTm93LCBmcm9tIHRoZXJlLCBJIG5lZWQgdG8ga25vdyAqd2hhdCogdGhhdCBpbml0aWFsIGludGVyYWN0aW9uIHRyaWdnZXJzLiBHaXZlbiB0aGUgdGFzayBhdCBoYW5kLCBJIHRoaW5rIGl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgb3V0IGhvdyBgdHVuX25ldF94bWl0YCBmaXRzIGludG8gYWxsIHRoaXMuIFdlIG5lZWQgdG8gYmUgY2hlY2tpbmcgdGhlIGRhdGEgdHJhbnNtaXQgcGF0aCwgYW5kIHRoaXMgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R1bl9uZXRfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jPTEwNDY9c3RhdGljIHVuc2lnbmVkIGludCBydW5fZWJwZl9maWx0ZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMDU4LS8qIE5ldCBkZXZpY2Ugc3RhcnQgeG1pdCAqL1xuZHJpdmVycy9uZXQvdHVuLmM6MTA1OTpzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC90dW4uYy0xMDYwLXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0xMjYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdHVuX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTI2Ni1cdC5uZG9fc3RvcFx0XHQ9IHR1bl9uZXRfY2xvc2UsXG5kcml2ZXJzL25ldC90dW4uYzoxMjY3Olx0Lm5kb19zdGFydF94bWl0XHRcdD0gdHVuX25ldF94bWl0LFxuZHJpdmVycy9uZXQvdHVuLmMtMTI2OC1cdC5uZG9fZml4X2ZlYXR1cmVzXHQ9IHR1bl9uZXRfZml4X2ZlYXR1cmVzLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTEzNDY9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0YXBfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMzUwLVx0Lm5kb19zdG9wXHRcdD0gdHVuX25ldF9jbG9zZSxcbmRyaXZlcnMvbmV0L3R1bi5jOjEzNTE6XHQubmRvX3N0YXJ0X3htaXRcdFx0PSB0dW5fbmV0X3htaXQsXG5kcml2ZXJzL25ldC90dW4uYy0xMzUyLVx0Lm5kb19maXhfZmVhdHVyZXNcdD0gdHVuX25ldF9maXhfZmVhdHVyZXMsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MjE5OT1zdGF0aWMgdm9pZCBfX3R1bl93YWtlX3F1ZXVlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjIxOS1cbmRyaXZlcnMvbmV0L3R1bi5jOjIyMjA6XHQvKiBQYWlyZWQgd2l0aCBzbXBfbWJfX2FmdGVyX2F0b21pYygpIGluIHR1bl9uZXRfeG1pdCgpICovXG5kcml2ZXJzL25ldC90dW4uYy0yMjIxLVx0c21wX21iKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzAxCgkJCQkJCQlvdXRwdXQ6IDIwOAoJCQkJCQkJdGhvdWdodHM6IDMwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgUGF0Y2ggb24gVHVuL1RhcCBEcml2ZXJzKioKCk9rYXksIHNvIHRoZSBwYXRjaCBpcyBmdW5jdGlvbmFsLCBhbmQgaXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBjb3JlIHR1bi90YXAgZHJpdmVycywgd2hpY2ggbWVhbnMgaXQmIzM5O3MgcHJldHR5IGZ1bmRhbWVudGFsLiBHb29kLCBnb29kLiBJIHNlZSBpdCYjMzk7cyByZWFjaGFibGUgYW5kIHRoZSBjb25maWdzIGFyZSBgVFVOYCBhbmQgYFZIT1NUX05FVGAuCgpJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBrZXkgZnVuY3Rpb25zIGFmZmVjdGVkLCBsZXQmIzM5O3Mgc2VlLi4uIHRoZSBmb2N1cyBzeW1ib2xzIGFyZSBgdHVuX25ldF94bWl0YCwgYHR1bl9zZXRfaWZmYCwgYHR1bl9jaHJfaW9jdGxgLCBgdHVuX2Nocl9yZWFkX2l0ZXJgLCBgdHVuX25ldF9jbG9zZWAsIGB0dW5fcXVldWVfcmVzaXplYCwgYHR1bl93YWtlX3F1ZXVlYCwgYHZob3N0X25ldF9pb2N0bGAsIGFuZCBgdmhvc3RfbmV0X29wZW5gLiBHb3QgaXQuIE5vdywgYXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgZm9yIGBWSE9TVF9ORVRgIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2Y/CgpMZXQmIzM5O3MgY2hlY2vigKYgaXQgZGVwZW5kcyBvbiBgTkVUICZhbXA7JmFtcDsgRVZFTlRGRCAmYW1wOyZhbXA7IChUVU4gfHwgIVRVTikgJmFtcDsmYW1wOyAoVEFQIHx8ICFUQVApYC4gSG1tLCBgRVZFTlRGRGAgaXMgdHlwaWNhbGx5IGVuYWJsZWQsIGFuZCBgTkVUYCBhbHNvLiAgV2UmIzM5O3JlIGV4cGxpY2l0bHkgZW5hYmxpbmcgYFRVTmAsIHNvIHRoYXQmIzM5O3MgY292ZXJlZC4KCldhaXQgYSBzZWNvbmQsIGB0dW5fd2FrZV9xdWV1ZWAgaXMgZXhwb3J0ZWQsIHNvIHRoYXQgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1cnRoZXIgc2NydXRpbnkuIEFuZCBJIHJlY2FsbCBgdHVuX3NldF9pZmZgIGlzIGNhbGxlZCBmcm9tIGB0dW5fY2hyX2lvY3RsYCwgYW5kIGB0dW5fcXVldWVfcmVzaXplYCBpcyBjYWxsZWQgZnJvbSBib3RoIGB0dW5fZGV2aWNlX2V2ZW50YCBhbmQgYHR1bl9jaHJfaW9jdGxgLiBPa2F5LCB0aGF0JiMzOTtzIHVzZWZ1bCBjb250ZXh0LgoKTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gTm9wZSwgc2VlbXMgYENPTkZJR19UVU5gIGlzIHN1ZmZpY2llbnQgZm9yIGB0dW4uY2AgYW5kIGBDT05GSUdfVkhPU1RfTkVUYCBjb3ZlcnMgYHZob3N0L25ldC5jYC4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IG5vdy4gSSYjMzk7bGwgc2V0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFVOJiMzNDssCiAgICAmIzM0O1ZIT1NUX05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3R1bl9uZXRfeG1pdCYjMzQ7LAogICAgJiMzNDt0dW5fc2V0X2lmZiYjMzQ7LAogICAgJiMzNDt0dW5fY2hyX2lvY3RsJiMzNDssCiAgICAmIzM0O3R1bl9jaHJfcmVhZF9pdGVyJiMzNDssCiAgICAmIzM0O3R1bl9uZXRfY2xvc2UmIzM0OywKICAgICYjMzQ7dHVuX3F1ZXVlX3Jlc2l6ZSYjMzQ7LAogICAgJiMzNDt0dW5fd2FrZV9xdWV1ZSYjMzQ7LAogICAgJiMzNDt2aG9zdF9uZXRfaW9jdGwmIzM0OywKICAgICYjMzQ7dmhvc3RfbmV0X29wZW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIChJRkZfQkFDS1BSRVNTVVJFKSB0byB0aGUgVFVOL1RBUCBkcml2ZXIsIGFsbG93aW5nIHRoZSBrZXJuZWwgdG8gc3RvcCB0aGUgcXVldWUgaW5zdGVhZCBvZiBkcm9wcGluZyBwYWNrZXRzIHdoZW4gdGhlIGludGVybmFsIHJpbmcgYnVmZmVyIGlzIGZ1bGwuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGFuZCBUVU4vVEFQIGRyaXZlciBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIEl0IGFsc28gbW9kaWZpZXMgdGhlIHZob3N0LW5ldCBkcml2ZXIgdG8gd2FrZSB0aGUgcXVldWUgd2hlbiBpdGVtcyBhcmUgY29uc3VtZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7LAogICAgJiMzNDtWSE9TVF9ORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0dW5fbmV0X3htaXQmIzM0OywKICAgICYjMzQ7dHVuX3NldF9pZmYmIzM0OywKICAgICYjMzQ7dHVuX2Nocl9pb2N0bCYjMzQ7LAogICAgJiMzNDt0dW5fY2hyX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDt0dW5fbmV0X2Nsb3NlJiMzNDssCiAgICAmIzM0O3R1bl9xdWV1ZV9yZXNpemUmIzM0OywKICAgICYjMzQ7dHVuX3dha2VfcXVldWUmIzM0OywKICAgICYjMzQ7dmhvc3RfbmV0X2lvY3RsJiMzNDssCiAgICAmIzM0O3Zob3N0X25ldF9vcGVuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSAoSUZGX0JBQ0tQUkVTU1VSRSkgdG8gdGhlIFRVTi9UQVAgZHJpdmVyLCBhbGxvd2luZyB0aGUga2VybmVsIHRvIHN0b3AgdGhlIHF1ZXVlIGluc3RlYWQgb2YgZHJvcHBpbmcgcGFja2V0cyB3aGVuIHRoZSBpbnRlcm5hbCByaW5nIGJ1ZmZlciBpcyBmdWxsLiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBhbmQgVFVOL1RBUCBkcml2ZXIgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSB2aG9zdC1uZXQgZHJpdmVyIHRvIHdha2UgdGhlIHF1ZXVlIHdoZW4gaXRlbXMgYXJlIGNvbnN1bWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MDU6NDYuMjA5OTM1MDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDM1ODIyMDc0NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFVOXCIsXG4gICAgXCJWSE9TVF9ORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0dW5fbmV0X3htaXRcIixcbiAgICBcInR1bl9zZXRfaWZmXCIsXG4gICAgXCJ0dW5fY2hyX2lvY3RsXCIsXG4gICAgXCJ0dW5fY2hyX3JlYWRfaXRlclwiLFxuICAgIFwidHVuX25ldF9jbG9zZVwiLFxuICAgIFwidHVuX3F1ZXVlX3Jlc2l6ZVwiLFxuICAgIFwidHVuX3dha2VfcXVldWVcIixcbiAgICBcInZob3N0X25ldF9pb2N0bFwiLFxuICAgIFwidmhvc3RfbmV0X29wZW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgKElGRl9CQUNLUFJFU1NVUkUpIHRvIHRoZSBUVU4vVEFQIGRyaXZlciwgYWxsb3dpbmcgdGhlIGtlcm5lbCB0byBzdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHBhY2tldHMgd2hlbiB0aGUgaW50ZXJuYWwgcmluZyBidWZmZXIgaXMgZnVsbC4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgYW5kIFRVTi9UQVAgZHJpdmVyIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gSXQgYWxzbyBtb2RpZmllcyB0aGUgdmhvc3QtbmV0IGRyaXZlciB0byB3YWtlIHRoZSBxdWV1ZSB3aGVuIGl0ZW1zIGFyZSBjb25zdW1lZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MDU6NDYuMjA5OTQyNTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzA5OTkwNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxYTMyMGQ5MmJkYTY4MThhNDViZDYxYTJhZTBlODk4MWZhNjJhNTMzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDQgMDI6MDU6NDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdFxcbmluZGV4IDRkNzA4N2Y3MjdiZTUuLjU2YzlkYzdiOTZhZmIgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdFxcbkBAIC0yMDYsNiArMjA2LDM4IEBAIGVuYWJsZSBpcyB0cnVlIHdlIGVuYWJsZSBpdCwgb3RoZXJ3aXNlIHdlIGRpc2FibGUgaXQ6OlxcbiAgICAgICByZXR1cm4gaW9jdGwoZmQsIFRVTlNFVFFVRVVFLCAodm9pZCAqKVxcdTAwMjZpZnIpO1xcbiAgIH1cXG4gXFxuKzMuNCBxZGlzYyBiYWNrcHJlc3N1cmVcXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbitcXG4rSUZGX0JBQ0tQUkVTU1VSRSBjYW4gYmUgc2V0IHRvIGVuYWJsZSBxZGlzYyBiYWNrcHJlc3N1cmUuIFdpdGhvdXQgaXQsIFRYXFxuK2Ryb3BzIG9jY3VyIHdoZW4gdGhlIGludGVybmFsIHJpbmcgYnVmZmVyIGlzIGZ1bGwsIHNvIGFueSBhdHRhY2hlZCBxZGlzY1xcbitpcyBlZmZlY3RpdmVseSBieXBhc3NlZCBhbmQgYXBwbGljYXRpb25zIG9ubHkgbGVhcm4gYWJvdXQgY29uZ2VzdGlvblxcbit0aHJvdWdoIHRob3NlIGRyb3BzLlxcbitcXG4rV2l0aCBpdCwgdGhlIGtlcm5lbCBzdG9wcyB0aGUgcXVldWUgaW5zdGVhZCwgbGV0dGluZyB0aGUgcWRpc2MgaG9sZCBhbmRcXG4rc2NoZWR1bGUgcGFja2V0cywgc28gaXRzIEFRTSwgc2hhcGluZyBhbmQgZmFpcm5lc3MgYWN0dWFsbHkgYXBwbHkuIFRoaXNcXG4raGVscHMgcHJvdG9jb2xzIGxpa2UgVENQLCB3aGljaCBjdXQgdGhyb3VnaHB1dCBpbiByZWFjdGlvbiB0byBwYWNrZXRcXG4rZHJvcHMuIFdpdGggSUZGX0JBQ0tQUkVTU1VSRSwgZHJvcHMgdGhlbiBvbmx5IG9jY3VyIGFzIGEgcmFyZSByYWNlLlxcbitCYWNrcHJlc3N1cmUgcmVxdWlyZXMgYSBxZGlzYyB0byBiZSBhdHRhY2hlZCBhbmQgaGFzIG5vIGVmZmVjdCB3aXRoXFxuK25vcXVldWUuXFxuK1xcbitUaGUgZmxhZyBpcyBhIHByb3BlcnR5IG9mIHRoZSBUVU4vVEFQIGRldmljZSByYXRoZXIgdGhhbiBvZiB0aGUgZmlsZVxcbitkZXNjcmlwdG9yIGl0IHdhcyBzZXQgb24sIHNvIGl0IGFwcGxpZXMgdG8gYWxsIHF1ZXVlcyBvZiB0aGUgZGV2aWNlLFxcbityZWdhcmRsZXNzIG9mIHdoaWNoIHByb2Nlc3Mgb3BlbmVkIHdoaWNoIHF1ZXVlLlxcbitcXG4rVGhlIGZsYWcgY2FuIG9ubHkgYmUgY2hhbmdlZCB3aGlsZSB0aGUgZGV2aWNlIGhhcyBhdCBtb3N0IG9uZSBxdWV1ZS4gT24gYVxcbittdWx0aXF1ZXVlIGRldmljZSB0aGF0IGFscmVhZHkgaGFzIGEgc2Vjb25kIHF1ZXVlIGF0dGFjaGVkIG9yIGRldGFjaGVkLCBhXFxuK2xhdGVyIFRVTlNFVElGRiBzdWNjZWVkcyBidXQgbGVhdmVzIHRoZSBmbGFnIGFzIGl0IGlzLiBBbGwgdGhlIG90aGVyXFxuK1RVTlNFVElGRiBmbGFncyBiZWhhdmUgdGhlIHNhbWUgd2F5LlxcbitcXG4rVGhlIHR4cXVldWVsZW4gY2FuIGJlIHJlZHVjZWQgYWxvbmdzaWRlIHRoaXMgZmxhZyB0byBmdXJ0aGVyIHNoaWZ0XFxuK2J1ZmZlcmluZyBpbnRvIHRoZSBxZGlzYyBhbmQgcmVkdWNlIGJ1ZmZlcmJsb2F0LCBhdCBhIHBvc3NpYmxlXFxuK3BlcmZvcm1hbmNlIGNvc3QuXFxuK1xcbitXaGVuIHJ1bm5pbmcgbXVsdGlwbGUgbmV0d29yayBzdHJlYW1zIGluIHBhcmFsbGVsIHRocm91Z2ggYSBzaW5nbGVcXG4rVFVOL1RBUCBxdWV1ZSwgdGhlIGZsYWcgbWF5IHJlZHVjZSBwZXJmb3JtYW5jZSBkdWUgdG8gdGhlIGV4dHJhIG92ZXJoZWFkXFxuK29mIHRoZSBiYWNrcHJlc3N1cmUgbWVjaGFuaXNtLlxcbitcXG4gVW5pdmVyc2FsIFRVTi9UQVAgZGV2aWNlIGRyaXZlciBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9uXFxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVuLmMgYi9kcml2ZXJzL25ldC90dW4uY1xcbmluZGV4IDUxZTgwMDAwYmQwZWQuLmVjOTBmZWY0YTQyZjggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvdHVuLmNcXG4rKysgYi9kcml2ZXJzL25ldC90dW4uY1xcbkBAIC05OCw3ICs5OCw4IEBAIHN0YXRpYyB2b2lkIHR1bl9kZWZhdWx0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuICNkZWZpbmUgVFVOX0ZBU1lOQ1xcdElGRl9BVFRBQ0hfUVVFVUVcXG4gXFxuICNkZWZpbmUgVFVOX0ZFQVRVUkVTIChJRkZfTk9fUEkgfCBJRkZfT05FX1FVRVVFIHwgSUZGX1ZORVRfSERSIHwgXFxcXFxcbi1cXHRcXHQgICAgICBJRkZfTVVMVElfUVVFVUUgfCBJRkZfTkFQSSB8IElGRl9OQVBJX0ZSQUdTKVxcbitcXHRcXHQgICAgICBJRkZfTVVMVElfUVVFVUUgfCBJRkZfTkFQSSB8IElGRl9OQVBJX0ZSQUdTIHwgXFxcXFxcbitcXHRcXHQgICAgICBJRkZfQkFDS1BSRVNTVVJFKVxcbiBcXG4gI2RlZmluZSBHT09EQ09QWV9MRU4gMTI4XFxuIFxcbkBAIC0xNDUsNiArMTQ2LDggQEAgc3RydWN0IHR1bl9maWxlIHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBuZXh0O1xcbiBcXHRzdHJ1Y3QgdHVuX3N0cnVjdCAqZGV0YWNoZWQ7XFxuIFxcdHN0cnVjdCBwdHJfcmluZyB0eF9yaW5nO1xcbitcXHQvKiBQcm90ZWN0ZWQgYnkgdHhfcmluZy5jb25zdW1lcl9sb2NrICovXFxuK1xcdGludCBjb25zX2NudDtcXG4gXFx0c3RydWN0IHhkcF9yeHFfaW5mbyB4ZHBfcnhxO1xcbiB9O1xcbiBcXG5AQCAtNTg1LDExICs1ODgsMTYgQEAgc3RhdGljIHZvaWQgX190dW5fZGV0YWNoKHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGJvb2wgY2xlYW4pXFxuIFxcdFxcdHUxNiBpbmRleCA9IHRmaWxlLVxcdTAwM2VxdWV1ZV9pbmRleDtcXG4gXFx0XFx0QlVHX09OKGluZGV4IFxcdTAwM2U9IHR1bi1cXHUwMDNlbnVtcXVldWVzKTtcXG4gXFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XFxuIFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcih0dW4tXFx1MDAzZXRmaWxlc1tpbmRleF0sXFxuIFxcdFxcdFxcdFxcdCAgIHR1bi1cXHUwMDNldGZpbGVzW3R1bi1cXHUwMDNlbnVtcXVldWVzIC0gMV0pO1xcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XFxuIFxcdFxcdG50ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLVxcdTAwM2V0ZmlsZXNbaW5kZXhdKTtcXG4rXFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZudGZpbGUtXFx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XFxuIFxcdFxcdG50ZmlsZS1cXHUwMDNlcXVldWVfaW5kZXggPSBpbmRleDtcXG4gXFx0XFx0bnRmaWxlLVxcdTAwM2V4ZHBfcnhxLnF1ZXVlX2luZGV4ID0gaW5kZXg7XFxuK1xcdFxcdG50ZmlsZS1cXHUwMDNlY29uc19jbnQgPSAwO1xcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bnRmaWxlLVxcdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xcbiBcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIodHVuLVxcdTAwM2V0ZmlsZXNbdHVuLVxcdTAwM2VudW1xdWV1ZXMgLSAxXSxcXG4gXFx0XFx0XFx0XFx0ICAgTlVMTCk7XFxuIFxcbkBAIC02MDYsNiArNjE0LDE0IEBAIHN0YXRpYyB2b2lkIF9fdHVuX2RldGFjaChzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBib29sIGNsZWFuKVxcbiBcXHRcXHR0dW5fZmxvd19kZWxldGVfYnlfcXVldWUodHVuLCB0dW4tXFx1MDAzZW51bXF1ZXVlcyArIDEpO1xcbiBcXHRcXHQvKiBEcm9wIHJlYWQgcXVldWUgKi9cXG4gXFx0XFx0dHVuX3F1ZXVlX3B1cmdlKHRmaWxlKTtcXG4rXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZudGZpbGUtXFx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2bnRmaWxlLVxcdTAwM2V0eF9yaW5nLnByb2R1Y2VyX2xvY2spO1xcbitcXHRcXHRudGZpbGUtXFx1MDAzZWNvbnNfY250ID0gMDtcXG4rXFx0XFx0aWYgKG5ldGlmX3J1bm5pbmcodHVuLVxcdTAwM2VkZXYpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBfX3B0cl9yaW5nX2VtcHR5KFxcdTAwMjZudGZpbGUtXFx1MDAzZXR4X3JpbmcpKVxcbitcXHRcXHRcXHRuZXRpZl93YWtlX3N1YnF1ZXVlKHR1bi1cXHUwMDNlZGV2LCBpbmRleCk7XFxuK1xcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZudGZpbGUtXFx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZudGZpbGUtXFx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XFxuIFxcdFxcdHR1bl9zZXRfcmVhbF9udW1fcXVldWVzKHR1bik7XFxuIFxcdH0gZWxzZSBpZiAodGZpbGUtXFx1MDAzZWRldGFjaGVkIFxcdTAwMjZcXHUwMDI2IGNsZWFuKSB7XFxuIFxcdFxcdHR1biA9IHR1bl9lbmFibGVfcXVldWUodGZpbGUpO1xcbkBAIC02ODcsNiArNzAzLDI1IEBAIHN0YXRpYyB2b2lkIHR1bl9kZXRhY2hfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdFxcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB0dW5fZm9yY2Vfd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcXG4re1xcbitcXHQvKiBFbnN1cmUgdGhhdCB0aGUgcHJvZHVjZXIgY2FuIG5vdCBzdG9wIHRoZVxcbitcXHQgKiBxdWV1ZSBjb25jdXJyZW50bHkgYnkgdGFraW5nIGxvY2tzLlxcbitcXHQgKi9cXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcXG4rXFx0dGZpbGUtXFx1MDAzZWNvbnNfY250ID0gMDtcXG4rXFx0LyogVGVzdGVkIHVuZGVyIHRoZSBsb2NrcyB0aGF0IHR1bl9uZXRfY2xvc2UoKSB0YWtlcywgc28gdGhpcyBjYW4gbm90XFxuK1xcdCAqIHVuZG8gaXRzIHN0b3AuIHR1bl9uZXRfb3BlbigpIHdha2VzIHRoZSBxdWV1ZXMgb2YgYSBkZXZpY2UgdGhhdFxcbitcXHQgKiBjb21lcyBiYWNrIHVwLlxcbitcXHQgKi9cXG4rXFx0aWYgKG5ldGlmX3J1bm5pbmcodHVuLVxcdTAwM2VkZXYpKVxcbitcXHRcXHRuZXRpZl93YWtlX3N1YnF1ZXVlKHR1bi1cXHUwMDNlZGV2LCB0ZmlsZS1cXHUwMDNlcXVldWVfaW5kZXgpO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCB0dW5fYXR0YWNoKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCBmaWxlICpmaWxlLFxcbiBcXHRcXHQgICAgICBib29sIHNraXBfZmlsdGVyLCBib29sIG5hcGksIGJvb2wgbmFwaV9mcmFncyxcXG4gXFx0XFx0ICAgICAgYm9vbCBwdWJsaXNoX3R1bilcXG5AQCAtNzMwLDggKzc2NSwxMSBAQCBzdGF0aWMgaW50IHR1bl9hdHRhY2goc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGZpbGUgKmZpbGUsXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbitcXHRzcGluX2xvY2soXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xcbiBcXHR0ZmlsZS1cXHUwMDNlcXVldWVfaW5kZXggPSB0dW4tXFx1MDAzZW51bXF1ZXVlcztcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xcbiBcXHR0ZmlsZS1cXHUwMDNlc29ja2V0LnNrLVxcdTAwM2Vza19zaHV0ZG93biBcXHUwMDI2PSB+UkNWX1NIVVRET1dOO1xcbitcXHR0dW5fZm9yY2Vfd2FrZV9xdWV1ZSh0dW4sIHRmaWxlKTtcXG4gXFxuIFxcdGlmICh0ZmlsZS1cXHUwMDNlZGV0YWNoZWQpIHtcXG4gXFx0XFx0LyogUmUtYXR0YWNoIGRldGFjaGVkIHRmaWxlLCB1cGRhdGluZyBYRFAgcXVldWVfaW5kZXggKi9cXG5AQCAtOTY0LDYgKzEwMDIsMjQgQEAgc3RhdGljIGludCB0dW5fbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gLyogTmV0IGRldmljZSBjbG9zZS4gKi9cXG4gc3RhdGljIGludCB0dW5fbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4rXFx0c3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IG5ldGRldl9wcml2KGRldik7XFxuK1xcdHN0cnVjdCB0dW5fZmlsZSAqdGZpbGU7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0LyogbmV0aWZfcnVubmluZygpIGlzIGFscmVhZHkgZmFsc2U6IHRha2UgYm90aCByaW5nIGxvY2tzIHRvIGtlZXAgdGhlXFxuK1xcdCAqIHdha2Ugc2l0ZXMgb3V0LCBzbyB0aGUgc3RvcCBiZWxvdyBpcyB0aGUgbGFzdCB3cml0ZSB0b1xcbitcXHQgKiBfX1FVRVVFX1NUQVRFX0RSVl9YT0ZGLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHR1bi1cXHUwMDNlbnVtcXVldWVzOyBpKyspIHtcXG4rXFx0XFx0dGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cXHUwMDNldGZpbGVzW2ldKTtcXG4rXFxuK1xcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XFxuK1xcdFxcdHRmaWxlLVxcdTAwM2Vjb25zX2NudCA9IDA7XFxuK1xcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xcbitcXHR9XFxuK1xcbiBcXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoZGV2KTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMTAwOCw2ICsxMDY0LDcgQEAgc3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpxdWV1ZTtcXG4gXFx0c3RydWN0IHR1bl9maWxlICp0ZmlsZTtcXG4gXFx0aW50IGxlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHR0ZmlsZSA9IHJjdV9kZXJlZmVyZW5jZSh0dW4tXFx1MDAzZXRmaWxlc1t0eHFdKTtcXG5AQCAtMTA2MiwxMyArMTExOSwzNSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcbiBcXHRuZl9yZXNldF9jdChza2IpO1xcbiBcXG4tXFx0aWYgKHB0cl9yaW5nX3Byb2R1Y2UoXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nLCBza2IpKSB7XFxuK1xcdHF1ZXVlID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHR4cSk7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nLnByb2R1Y2VyX2xvY2spO1xcbitcXHRyZXQgPSBfX3B0cl9yaW5nX3Byb2R1Y2UoXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nLCBza2IpO1xcbitcXHQvKiBEbyBub3QgdG91Y2ggdGhlIHF1ZXVlIHN0YXRlIG9mIGEgZGV2aWNlIHRoYXQgaXMgZ29pbmcgZG93bi4gKi9cXG4rXFx0aWYgKCh0dW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX0JBQ0tQUkVTU1VSRSkgXFx1MDAyNlxcdTAwMjYgbmV0aWZfcnVubmluZyhkZXYpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhcWRpc2NfdHhxX2hhc19ub19xdWV1ZShxdWV1ZSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIF9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZShcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcpID09IC1FTk9TUEMpIHtcXG4rXFx0XFx0bmV0aWZfdHhfc3RvcF9xdWV1ZShxdWV1ZSk7XFxuK1xcdFxcdC8qIFBhaXJlZCB3aXRoIHNtcF9tYigpIGluIF9fdHVuX3dha2VfcXVldWUoKSAqL1xcbitcXHRcXHRzbXBfbWJfX2FmdGVyX2F0b21pYygpO1xcbitcXHRcXHRpZiAoIV9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZShcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcpKVxcbitcXHRcXHRcXHRuZXRpZl90eF93YWtlX3F1ZXVlKHF1ZXVlKTtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9jayhcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XFxuK1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdC8qIFRoaXMgc2hvdWxkIGJlIGEgcmFyZSBjYXNlIGlmIElGRl9CQUNLUFJFU1NVUkUgaXMgZW5hYmxlZCBhbmRcXG4rXFx0XFx0ICogYSBxZGlzYyBpcyBwcmVzZW50LCBidXQgY2FuIGhhcHBlbiBkdWUgdG8gbGx0eC5cXG4rXFx0XFx0ICogU2luY2Ugc2tiX3R4X3RpbWVzdGFtcCgpLCBza2Jfb3JwaGFuKCksXFxuK1xcdFxcdCAqIHJ1bl9lYnBmX2ZpbHRlcigpIGFuZCBwc2tiX3RyaW0oKSBjb3VsZCBoYXZlIHRpbmtlcmVkXFxuK1xcdFxcdCAqIHdpdGggdGhlIFNLQiwgcmV0dXJuaW5nIE5FVERFVl9UWF9CVVNZIGlzIHVuc2FmZSBhbmRcXG4rXFx0XFx0ICogd2UgbXVzdCBkcm9wIGluc3RlYWQuXFxuK1xcdFxcdCAqL1xcbiBcXHRcXHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9GVUxMX1JJTkc7XFxuIFxcdFxcdGdvdG8gZHJvcDtcXG4gXFx0fVxcbiBcXG4gXFx0LyogZGV2LVxcdTAwM2VsbHR4IHJlcXVpcmVzIHRvIGRvIG91ciBvd24gdXBkYXRlIG9mIHRyYW5zX3N0YXJ0ICovXFxuLVxcdHF1ZXVlID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHR4cSk7XFxuIFxcdHR4cV90cmFuc19jb25kX3VwZGF0ZShxdWV1ZSk7XFxuIFxcbiBcXHQvKiBOb3RpZnkgYW5kIHdha2UgdXAgcmVhZGVyIHByb2Nlc3MgKi9cXG5AQCAtMjExNiwxMyArMjE5NSw2MSBAQCBzdGF0aWMgc3NpemVfdCB0dW5fcHV0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcXG4gXFx0cmV0dXJuIHRvdGFsO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgbm9ibG9jaywgaW50ICplcnIpXFxuKy8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqL1xcbitzdGF0aWMgdm9pZCBfX3R1bl93YWtlX3F1ZXVlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgaW50IGNvbnN1bWVkKVxcbit7XFxuK1xcdHUxNiBxdWV1ZV9pbmRleCA9IHRmaWxlLVxcdTAwM2VxdWV1ZV9pbmRleDtcXG4rXFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XFxuK1xcbitcXHRpZiAoISh0dW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX0JBQ0tQUkVTU1VSRSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qIEEgc3RvcCBmcm9tIHR1bl9uZXRfY2xvc2UoKSBpcyBub3QgYmFja3ByZXNzdXJlLCBsZWF2ZSBpdCBhbG9uZS4gKi9cXG4rXFx0aWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKHR1bi1cXHUwMDNlZGV2KSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qIE9ubHkgdGhlIGN1cnJlbnQgb3duZXIgb2YgdGhlIHNsb3QgbWF5IHdha2UgaXRzIHN1YnF1ZXVlLiAqL1xcbitcXHRpZiAodW5saWtlbHkocmN1X2FjY2Vzc19wb2ludGVyKHR1bi1cXHUwMDNldGZpbGVzW3F1ZXVlX2luZGV4XSkgIT0gdGZpbGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHR1bi1cXHUwMDNlZGV2LCBxdWV1ZV9pbmRleCk7XFxuK1xcbitcXHQvKiBQYWlyZWQgd2l0aCBzbXBfbWJfX2FmdGVyX2F0b21pYygpIGluIHR1bl9uZXRfeG1pdCgpICovXFxuK1xcdHNtcF9tYigpO1xcbitcXHRpZiAobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpKSB7XFxuK1xcdFxcdHRmaWxlLVxcdTAwM2Vjb25zX2NudCArPSBjb25zdW1lZDtcXG4rXFx0XFx0aWYgKHRmaWxlLVxcdTAwM2Vjb25zX2NudCBcXHUwMDNlPSB0ZmlsZS1cXHUwMDNldHhfcmluZy5zaXplIC8gMiB8fFxcbitcXHRcXHQgICAgX19wdHJfcmluZ19lbXB0eShcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcpKSB7XFxuK1xcdFxcdFxcdG5ldGlmX3R4X3dha2VfcXVldWUodHhxKTtcXG4rXFx0XFx0XFx0dGZpbGUtXFx1MDAzZWNvbnNfY250ID0gMDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkICp0dW5fcmluZ19jb25zdW1lKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXFxuK3tcXG4rXFx0dm9pZCAqcHRyO1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcXG4rXFx0cHRyID0gX19wdHJfcmluZ19jb25zdW1lKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZyk7XFxuK1xcdGlmIChwdHIpXFxuK1xcdFxcdF9fdHVuX3dha2VfcXVldWUodHVuLCB0ZmlsZSwgMSk7XFxuK1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XFxuK1xcdHJldHVybiBwdHI7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkICp0dW5fcmluZ19yZWN2KHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXFxuK1xcdFxcdFxcdCAgIGludCBub2Jsb2NrLCBpbnQgKmVycilcXG4ge1xcbiBcXHRERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTtcXG4gXFx0dm9pZCAqcHRyID0gTlVMTDtcXG4gXFx0aW50IGVycm9yID0gMDtcXG4gXFxuLVxcdHB0ciA9IHB0cl9yaW5nX2NvbnN1bWUoXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nKTtcXG4rXFx0cHRyID0gdHVuX3JpbmdfY29uc3VtZSh0dW4sIHRmaWxlKTtcXG4gXFx0aWYgKHB0cilcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdGlmIChub2Jsb2NrKSB7XFxuQEAgLTIxMzQsNyArMjI2MSw3IEBAIHN0YXRpYyB2b2lkICp0dW5fcmluZ19yZWN2KHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGludCBub2Jsb2NrLCBpbnQgKmVycilcXG4gXFxuIFxcdHdoaWxlICgxKSB7XFxuIFxcdFxcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XFxuLVxcdFxcdHB0ciA9IHB0cl9yaW5nX2NvbnN1bWUoXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nKTtcXG4rXFx0XFx0cHRyID0gdHVuX3JpbmdfY29uc3VtZSh0dW4sIHRmaWxlKTtcXG4gXFx0XFx0aWYgKHB0cilcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbkBAIC0yMTcxLDcgKzIyOTgsNyBAQCBzdGF0aWMgc3NpemVfdCB0dW5fZG9fcmVhZChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxcbiBcXG4gXFx0aWYgKCFwdHIpIHtcXG4gXFx0XFx0LyogUmVhZCBmcmFtZXMgZnJvbSByaW5nICovXFxuLVxcdFxcdHB0ciA9IHR1bl9yaW5nX3JlY3YodGZpbGUsIG5vYmxvY2ssIFxcdTAwMjZlcnIpO1xcbitcXHRcXHRwdHIgPSB0dW5fcmluZ19yZWN2KHR1biwgdGZpbGUsIG5vYmxvY2ssIFxcdTAwMjZlcnIpO1xcbiBcXHRcXHRpZiAoIXB0cilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbkBAIC0yNzAzLDggKzI4MzAsOSBAQCBzdGF0aWMgaW50IHR1bl9zZXRfaWZmKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKVxcbiB7XFxuIFxcdHN0cnVjdCB0dW5fc3RydWN0ICp0dW47XFxuIFxcdHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuK1xcdHN0cnVjdCB0dW5fZmlsZSAqbnRmaWxlO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbi1cXHRpbnQgZXJyO1xcbitcXHRpbnQgZXJyLCBpO1xcbiBcXG4gXFx0aWYgKHRmaWxlLVxcdTAwM2VkZXRhY2hlZClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTI4MzMsOCArMjk2MSwxMCBAQCBzdGF0aWMgaW50IHR1bl9zZXRfaWZmKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKVxcbiBcXHQvKiBNYWtlIHN1cmUgcGVyc2lzdGVudCBkZXZpY2VzIGRvIG5vdCBnZXQgc3R1Y2sgaW5cXG4gXFx0ICogeG9mZiBzdGF0ZS5cXG4gXFx0ICovXFxuLVxcdGlmIChuZXRpZl9ydW5uaW5nKHR1bi1cXHUwMDNlZGV2KSlcXG4tXFx0XFx0bmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKHR1bi1cXHUwMDNlZGV2KTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHR1bi1cXHUwMDNlbnVtcXVldWVzOyBpKyspIHtcXG4rXFx0XFx0bnRmaWxlID0gcnRubF9kZXJlZmVyZW5jZSh0dW4tXFx1MDAzZXRmaWxlc1tpXSk7XFxuK1xcdFxcdHR1bl9mb3JjZV93YWtlX3F1ZXVlKHR1biwgbnRmaWxlKTtcXG4rXFx0fVxcbiBcXG4gXFx0c3Ryc2NweShpZnItXFx1MDAzZWlmcl9uYW1lLCB0dW4tXFx1MDAzZWRldi1cXHUwMDNlbmFtZSk7XFxuIFxcdHJldHVybiAwO1xcbkBAIC0zNjMwLDYgKzM3NjAsMTMgQEAgc3RhdGljIGludCB0dW5fcXVldWVfcmVzaXplKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4pXFxuIFxcdFxcdFxcdFxcdFxcdCAgZGV2LVxcdTAwM2V0eF9xdWV1ZV9sZW4sIEdGUF9LRVJORUwsXFxuIFxcdFxcdFxcdFxcdFxcdCAgdHVuX3B0cl9mcmVlKTtcXG4gXFxuK1xcdGlmICghcmV0KSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0dW4tXFx1MDAzZW51bXF1ZXVlczsgaSsrKSB7XFxuK1xcdFxcdFxcdHRmaWxlID0gcnRubF9kZXJlZmVyZW5jZSh0dW4tXFx1MDAzZXRmaWxlc1tpXSk7XFxuK1xcdFxcdFxcdHR1bl9mb3JjZV93YWtlX3F1ZXVlKHR1biwgdGZpbGUpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuIFxcdGtmcmVlKHJpbmdzKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC0zNzM4LDYgKzM4NzUsMzEgQEAgc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwodHVuX2dldF90eF9yaW5nKTtcXG4gXFxuKy8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqL1xcbit2b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY29uc3VtZWQpXFxuK3tcXG4rXFx0c3RydWN0IHR1bl9maWxlICp0ZmlsZTtcXG4rXFx0c3RydWN0IHR1bl9zdHJ1Y3QgKnR1bjtcXG4rXFxuK1xcdGlmIChmaWxlLVxcdTAwM2VmX29wICE9IFxcdTAwMjZ0dW5fZm9wcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0dGZpbGUgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuK1xcdGlmICghdGZpbGUpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xcbitcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXG4rXFx0dHVuID0gcmN1X2RlcmVmZXJlbmNlKHRmaWxlLVxcdTAwM2V0dW4pO1xcbitcXHRpZiAodHVuKVxcbitcXHRcXHRfX3R1bl93YWtlX3F1ZXVlKHR1biwgdGZpbGUsIGNvbnN1bWVkKTtcXG4rXFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHR1bl93YWtlX3F1ZXVlKTtcXG4rXFxuIG1vZHVsZV9pbml0KHR1bl9pbml0KTtcXG4gbW9kdWxlX2V4aXQodHVuX2NsZWFudXApO1xcbiBNT0RVTEVfREVTQ1JJUFRJT04oRFJWX0RFU0NSSVBUSU9OKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmNcXG5pbmRleCA2OTQ5YjcwNDE2NmQ1Li4zZTcyYjljNmFmMGNhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmhvc3QvbmV0LmNcXG4rKysgYi9kcml2ZXJzL3Zob3N0L25ldC5jXFxuQEAgLTE3NiwxMyArMTc2LDIxIEBAIHN0YXRpYyB2b2lkICp2aG9zdF9uZXRfYnVmX2NvbnN1bWUoc3RydWN0IHZob3N0X25ldF9idWYgKnJ4cSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcXG4rc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc3RydWN0IHNvY2sgKnNrLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcXG4ge1xcbitcXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IHNrLVxcdTAwM2Vza19zb2NrZXQtXFx1MDAzZWZpbGU7XFxuIFxcdHN0cnVjdCB2aG9zdF9uZXRfYnVmICpyeHEgPSBcXHUwMDI2bnZxLVxcdTAwM2VyeHE7XFxuIFxcbiBcXHRyeHEtXFx1MDAzZWhlYWQgPSAwO1xcbi1cXHRyeHEtXFx1MDAzZXRhaWwgPSBwdHJfcmluZ19jb25zdW1lX2JhdGNoZWQobnZxLVxcdTAwM2VyeF9yaW5nLCByeHEtXFx1MDAzZXF1ZXVlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBWSE9TVF9ORVRfQkFUQ0gpO1xcbitcXHRzcGluX2xvY2soXFx1MDAyNm52cS1cXHUwMDNlcnhfcmluZy1cXHUwMDNlY29uc3VtZXJfbG9jayk7XFxuK1xcdHJ4cS1cXHUwMDNldGFpbCA9IF9fcHRyX3JpbmdfY29uc3VtZV9iYXRjaGVkKG52cS1cXHUwMDNlcnhfcmluZywgcnhxLVxcdTAwM2VxdWV1ZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIFZIT1NUX05FVF9CQVRDSCk7XFxuK1xcbitcXHRpZiAocnhxLVxcdTAwM2V0YWlsKVxcbitcXHRcXHR0dW5fd2FrZV9xdWV1ZShmaWxlLCByeHEtXFx1MDAzZXRhaWwpO1xcbitcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNm52cS1cXHUwMDNlcnhfcmluZy1cXHUwMDNlY29uc3VtZXJfbG9jayk7XFxuIFxcdHJldHVybiByeHEtXFx1MDAzZXRhaWw7XFxuIH1cXG4gXFxuQEAgLTIwOSwxNCArMjE3LDE1IEBAIHN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrX2xlbih2b2lkICpwdHIpXFxuIFxcdHJldHVybiBfX3NrYl9hcnJheV9sZW5fd2l0aF90YWcocHRyKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWsoc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcXG4rc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWsoc3RydWN0IHNvY2sgKnNrLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqbnZxKVxcbiB7XFxuIFxcdHN0cnVjdCB2aG9zdF9uZXRfYnVmICpyeHEgPSBcXHUwMDI2bnZxLVxcdTAwM2VyeHE7XFxuIFxcbiBcXHRpZiAoIXZob3N0X25ldF9idWZfaXNfZW1wdHkocnhxKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHRpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShudnEpKVxcbitcXHRpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShzaywgbnZxKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBvdXQ6XFxuQEAgLTEwMDQsNyArMTAxMyw3IEBAIHN0YXRpYyBpbnQgcGVla19oZWFkX2xlbihzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqcnZxLCBzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbiBcXHRpZiAocnZxLVxcdTAwM2VyeF9yaW5nKVxcbi1cXHRcXHRyZXR1cm4gdmhvc3RfbmV0X2J1Zl9wZWVrKHJ2cSk7XFxuK1xcdFxcdHJldHVybiB2aG9zdF9uZXRfYnVmX3BlZWsoc2ssIHJ2cSk7XFxuIFxcbiBcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jaywgZmxhZ3MpO1xcbiBcXHRoZWFkID0gc2tiX3BlZWsoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl90dW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdHVuLmhcXG5pbmRleCA4MDE2NmViNjJmNDFjLi5lZWI5ZWQzYzVhMjM5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaWZfdHVuLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oXFxuQEAgLTIyLDYgKzIyLDggQEAgc3RydWN0IHR1bl9tc2dfY3RsIHtcXG4gI2lmIGRlZmluZWQoQ09ORklHX1RVTikgfHwgZGVmaW5lZChDT05GSUdfVFVOX01PRFVMRSlcXG4gc3RydWN0IHNvY2tldCAqdHVuX2dldF9zb2NrZXQoc3RydWN0IGZpbGUgKik7XFxuIHN0cnVjdCBwdHJfcmluZyAqdHVuX2dldF90eF9yaW5nKHN0cnVjdCBmaWxlICpmaWxlKTtcXG4rLyogQ2FsbGVycyBtdXN0IGhvbGQgdGhlIGNvbnN1bWVyX2xvY2sgb2YgdGhlIHJpbmcgb2YgZmlsZSAqL1xcbit2b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY29uc3VtZWQpO1xcbiBcXG4gc3RhdGljIGlubGluZSBib29sIHR1bl9pc194ZHBfZnJhbWUodm9pZCAqcHRyKVxcbiB7XFxuQEAgLTU1LDYgKzU3LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcHRyX3JpbmcgKnR1bl9nZXRfdHhfcmluZyhzdHJ1Y3QgZmlsZSAqZilcXG4gXFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB0dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgZmlsZSAqZiwgaW50IGNvbnN1bWVkKSB7fVxcbitcXG4gc3RhdGljIGlubGluZSBib29sIHR1bl9pc194ZHBfZnJhbWUodm9pZCAqcHRyKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oIGIvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oXFxuaW5kZXggZDJjMzYyOWJiZTQ1MS4uNjMxYzQzZmRlNDQwNyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmhcXG5AQCAtOTYsNiArOTYsMjYgQEAgc3RhdGljIGlubGluZSBib29sIHB0cl9yaW5nX2Z1bGxfYmgoc3RydWN0IHB0cl9yaW5nICpyKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbisvKiBSZXBvcnQgd2hldGhlciB0aGUgbmV4dCBfX3B0cl9yaW5nX3Byb2R1Y2UoKSBoYXMgcm9vbSBmb3Igb25lIGVudHJ5OlxcbisgKiAwIG1lYW5zIHRoZSBzaW5nbGUgc2xvdCBhdCByLVxcdTAwM2VxdWV1ZVtyLVxcdTAwM2Vwcm9kdWNlcl0gaXMgZnJlZSwgLUVOT1NQQyBtZWFuc1xcbisgKiB0aGUgcmluZyBpcyBmdWxsLCB3aGljaCBpcyB0cmFuc2llbnQsIGFuZCAtRUlOVkFMIG1lYW5zIHItXFx1MDAzZXNpemUgaXMgMCxcXG4rICogd2hpY2ggaXMgcGVybWFuZW50LiBBIGNhbGxlciB0aGF0IHN0b3BzIHByb2R1Y2luZyBhbmQgd2FpdHMgZm9yIHNwYWNlXFxuKyAqIG11c3QgdGhlcmVmb3JlIGRvIHNvIG9ubHkgZm9yIC1FTk9TUEMuXFxuKyAqXFxuKyAqIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLFxcbisgKiBmb3IgZXhhbXBsZSBjcHVfcmVsYXgoKS4gQ2FsbGVycyBtdXN0IGhvbGQgcHJvZHVjZXJfbG9jay5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZShzdHJ1Y3QgcHRyX3JpbmcgKnIpXFxuK3tcXG4rXFx0aWYgKHVubGlrZWx5KCFyLVxcdTAwM2VzaXplKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAoZGF0YV9yYWNlKHItXFx1MDAzZXF1ZXVlW3ItXFx1MDAzZXByb2R1Y2VyXSkpXFxuK1xcdFxcdHJldHVybiAtRU5PU1BDO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLFxcbiAgKiBmb3IgZXhhbXBsZSBjcHVfcmVsYXgoKS4gQ2FsbGVycyBtdXN0IGhvbGQgcHJvZHVjZXJfbG9jay5cXG4gICogQ2FsbGVycyBhcmUgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHBvaW50ZXIgdGhhdCBpcyBiZWluZyBxdWV1ZWRcXG5AQCAtMTAzLDggKzEyMywxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcHRyX3JpbmdfZnVsbF9iaChzdHJ1Y3QgcHRyX3JpbmcgKnIpXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIGludCBfX3B0cl9yaW5nX3Byb2R1Y2Uoc3RydWN0IHB0cl9yaW5nICpyLCB2b2lkICpwdHIpXFxuIHtcXG4tXFx0aWYgKHVubGlrZWx5KCFyLVxcdTAwM2VzaXplKSB8fCBkYXRhX3JhY2Uoci1cXHUwMDNlcXVldWVbci1cXHUwMDNlcHJvZHVjZXJdKSlcXG4tXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuK1xcdGludCByZXQgPSBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2Uocik7XFxuK1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0LyogTWFrZSBzdXJlIHRoZSBwb2ludGVyIHdlIGFyZSBzdG9yaW5nIHBvaW50cyB0byBhIHZhbGlkIGRhdGEuICovXFxuIFxcdC8qIFBhaXJzIHdpdGggdGhlIGRlcGVuZGVuY3kgb3JkZXJpbmcgaW4gX19wdHJfcmluZ19jb25zdW1lLiAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcXG5pbmRleCA3OWQ1M2M3YTFlYmRjLi5hMGRkYzUwYTc1MzQyIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxcbkBAIC02OSw2ICs2OSwxMCBAQFxcbiAjZGVmaW5lIElGRl9OQVBJX0ZSQUdTXFx0MHgwMDIwXFxuIC8qIFVzZWQgaW4gVFVOU0VUSUZGIHRvIGJyaW5nIHVwIHR1bi90YXAgd2l0aG91dCBjYXJyaWVyICovXFxuICNkZWZpbmUgSUZGX05PX0NBUlJJRVJcXHQweDAwNDBcXG4rLyogU3RvcCB0aGUgcXVldWUgaW5zdGVhZCBvZiBkcm9wcGluZyB3aGVuIHRoZSBpbnRlcm5hbCByaW5nIGlzIGZ1bGwsIHNvIGFuXFxuKyAqIGF0dGFjaGVkIHFkaXNjIGFwcGxpZXMgYmFja3ByZXNzdXJlIGluc3RlYWQgb2YgYmVpbmcgYnlwYXNzZWQuXFxuKyAqL1xcbisjZGVmaW5lIElGRl9CQUNLUFJFU1NVUkVcXHQweDAwODBcXG4gI2RlZmluZSBJRkZfTk9fUElcXHQweDEwMDBcXG4gLyogVGhpcyBmbGFnIGhhcyBubyByZWFsIGVmZmVjdCAqL1xcbiAjZGVmaW5lIElGRl9PTkVfUVVFVUVcXHQweDIwMDBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXFxuaW5kZXggMmVjMDdkZTFkNzNiZS4uMmM4NTUyNTcwNGMxNiAxMDA2NDRcXG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcXG4rKysgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcXG5AQCAtNjcsNiArNjcsMTAgQEBcXG4gI2RlZmluZSBJRkZfVEFQXFx0XFx0MHgwMDAyXFxuICNkZWZpbmUgSUZGX05BUElcXHQweDAwMTBcXG4gI2RlZmluZSBJRkZfTkFQSV9GUkFHU1xcdDB4MDAyMFxcbisvKiBTdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHdoZW4gdGhlIGludGVybmFsIHJpbmcgaXMgZnVsbCwgc28gYW5cXG4rICogYXR0YWNoZWQgcWRpc2MgYXBwbGllcyBiYWNrcHJlc3N1cmUgaW5zdGVhZCBvZiBiZWluZyBieXBhc3NlZC5cXG4rICovXFxuKyNkZWZpbmUgSUZGX0JBQ0tQUkVTU1VSRVxcdDB4MDA4MFxcbiAjZGVmaW5lIElGRl9OT19QSVxcdDB4MTAwMFxcbiAvKiBUaGlzIGZsYWcgaGFzIG5vIHJlYWwgZWZmZWN0ICovXFxuICNkZWZpbmUgSUZGX09ORV9RVUVVRVxcdDB4MjAwMFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjowNTo0Ny41ODE1MTg1NjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMDIyMTA2MTM2NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFVOXCIsXG4gICAgXCJWSE9TVF9ORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0dW5fbmV0X3htaXRcIixcbiAgICBcInR1bl9zZXRfaWZmXCIsXG4gICAgXCJ0dW5fY2hyX2lvY3RsXCIsXG4gICAgXCJ0dW5fY2hyX3JlYWRfaXRlclwiLFxuICAgIFwidHVuX25ldF9jbG9zZVwiLFxuICAgIFwidHVuX3F1ZXVlX3Jlc2l6ZVwiLFxuICAgIFwidHVuX3dha2VfcXVldWVcIixcbiAgICBcInZob3N0X25ldF9pb2N0bFwiLFxuICAgIFwidmhvc3RfbmV0X29wZW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgKElGRl9CQUNLUFJFU1NVUkUpIHRvIHRoZSBUVU4vVEFQIGRyaXZlciwgYWxsb3dpbmcgdGhlIGtlcm5lbCB0byBzdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHBhY2tldHMgd2hlbiB0aGUgaW50ZXJuYWwgcmluZyBidWZmZXIgaXMgZnVsbC4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgYW5kIFRVTi9UQVAgZHJpdmVyIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gSXQgYWxzbyBtb2RpZmllcyB0aGUgdmhvc3QtbmV0IGRyaXZlciB0byB3YWtlIHRoZSBxdWV1ZSB3aGVuIGl0ZW1zIGFyZSBjb25zdW1lZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWEzMjBkOTJiZGE2ODE4YTQ1YmQ2MWEyYWUwZTg5ODFmYTYyYTUzM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDQgMDI6MDU6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0XG5pbmRleCA0ZDcwODdmNzI3YmU1Li41NmM5ZGM3Yjk2YWZiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0XG5AQCAtMjA2LDYgKzIwNiwzOCBAQCBlbmFibGUgaXMgdHJ1ZSB3ZSBlbmFibGUgaXQsIG90aGVyd2lzZSB3ZSBkaXNhYmxlIGl0OjpcbiAgICAgICByZXR1cm4gaW9jdGwoZmQsIFRVTlNFVFFVRVVFLCAodm9pZCAqKVx1MDAyNmlmcik7XG4gICB9XG4gXG4rMy40IHFkaXNjIGJhY2twcmVzc3VyZVxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbitcbitJRkZfQkFDS1BSRVNTVVJFIGNhbiBiZSBzZXQgdG8gZW5hYmxlIHFkaXNjIGJhY2twcmVzc3VyZS4gV2l0aG91dCBpdCwgVFhcbitkcm9wcyBvY2N1ciB3aGVuIHRoZSBpbnRlcm5hbCByaW5nIGJ1ZmZlciBpcyBmdWxsLCBzbyBhbnkgYXR0YWNoZWQgcWRpc2NcbitpcyBlZmZlY3RpdmVseSBieXBhc3NlZCBhbmQgYXBwbGljYXRpb25zIG9ubHkgbGVhcm4gYWJvdXQgY29uZ2VzdGlvblxuK3Rocm91Z2ggdGhvc2UgZHJvcHMuXG4rXG4rV2l0aCBpdCwgdGhlIGtlcm5lbCBzdG9wcyB0aGUgcXVldWUgaW5zdGVhZCwgbGV0dGluZyB0aGUgcWRpc2MgaG9sZCBhbmRcbitzY2hlZHVsZSBwYWNrZXRzLCBzbyBpdHMgQVFNLCBzaGFwaW5nIGFuZCBmYWlybmVzcyBhY3R1YWxseSBhcHBseS4gVGhpc1xuK2hlbHBzIHByb3RvY29scyBsaWtlIFRDUCwgd2hpY2ggY3V0IHRocm91Z2hwdXQgaW4gcmVhY3Rpb24gdG8gcGFja2V0XG4rZHJvcHMuIFdpdGggSUZGX0JBQ0tQUkVTU1VSRSwgZHJvcHMgdGhlbiBvbmx5IG9jY3VyIGFzIGEgcmFyZSByYWNlLlxuK0JhY2twcmVzc3VyZSByZXF1aXJlcyBhIHFkaXNjIHRvIGJlIGF0dGFjaGVkIGFuZCBoYXMgbm8gZWZmZWN0IHdpdGhcbitub3F1ZXVlLlxuK1xuK1RoZSBmbGFnIGlzIGEgcHJvcGVydHkgb2YgdGhlIFRVTi9UQVAgZGV2aWNlIHJhdGhlciB0aGFuIG9mIHRoZSBmaWxlXG4rZGVzY3JpcHRvciBpdCB3YXMgc2V0IG9uLCBzbyBpdCBhcHBsaWVzIHRvIGFsbCBxdWV1ZXMgb2YgdGhlIGRldmljZSxcbityZWdhcmRsZXNzIG9mIHdoaWNoIHByb2Nlc3Mgb3BlbmVkIHdoaWNoIHF1ZXVlLlxuK1xuK1RoZSBmbGFnIGNhbiBvbmx5IGJlIGNoYW5nZWQgd2hpbGUgdGhlIGRldmljZSBoYXMgYXQgbW9zdCBvbmUgcXVldWUuIE9uIGFcbittdWx0aXF1ZXVlIGRldmljZSB0aGF0IGFscmVhZHkgaGFzIGEgc2Vjb25kIHF1ZXVlIGF0dGFjaGVkIG9yIGRldGFjaGVkLCBhXG4rbGF0ZXIgVFVOU0VUSUZGIHN1Y2NlZWRzIGJ1dCBsZWF2ZXMgdGhlIGZsYWcgYXMgaXQgaXMuIEFsbCB0aGUgb3RoZXJcbitUVU5TRVRJRkYgZmxhZ3MgYmVoYXZlIHRoZSBzYW1lIHdheS5cbitcbitUaGUgdHhxdWV1ZWxlbiBjYW4gYmUgcmVkdWNlZCBhbG9uZ3NpZGUgdGhpcyBmbGFnIHRvIGZ1cnRoZXIgc2hpZnRcbitidWZmZXJpbmcgaW50byB0aGUgcWRpc2MgYW5kIHJlZHVjZSBidWZmZXJibG9hdCwgYXQgYSBwb3NzaWJsZVxuK3BlcmZvcm1hbmNlIGNvc3QuXG4rXG4rV2hlbiBydW5uaW5nIG11bHRpcGxlIG5ldHdvcmsgc3RyZWFtcyBpbiBwYXJhbGxlbCB0aHJvdWdoIGEgc2luZ2xlXG4rVFVOL1RBUCBxdWV1ZSwgdGhlIGZsYWcgbWF5IHJlZHVjZSBwZXJmb3JtYW5jZSBkdWUgdG8gdGhlIGV4dHJhIG92ZXJoZWFkXG4rb2YgdGhlIGJhY2twcmVzc3VyZSBtZWNoYW5pc20uXG4rXG4gVW5pdmVyc2FsIFRVTi9UQVAgZGV2aWNlIGRyaXZlciBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9uXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVuLmMgYi9kcml2ZXJzL25ldC90dW4uY1xuaW5kZXggNTFlODAwMDBiZDBlZC4uZWM5MGZlZjRhNDJmOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jXG4rKysgYi9kcml2ZXJzL25ldC90dW4uY1xuQEAgLTk4LDcgKzk4LDggQEAgc3RhdGljIHZvaWQgdHVuX2RlZmF1bHRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiAjZGVmaW5lIFRVTl9GQVNZTkNcdElGRl9BVFRBQ0hfUVVFVUVcbiBcbiAjZGVmaW5lIFRVTl9GRUFUVVJFUyAoSUZGX05PX1BJIHwgSUZGX09ORV9RVUVVRSB8IElGRl9WTkVUX0hEUiB8IFxcXG4tXHRcdCAgICAgIElGRl9NVUxUSV9RVUVVRSB8IElGRl9OQVBJIHwgSUZGX05BUElfRlJBR1MpXG4rXHRcdCAgICAgIElGRl9NVUxUSV9RVUVVRSB8IElGRl9OQVBJIHwgSUZGX05BUElfRlJBR1MgfCBcXFxuK1x0XHQgICAgICBJRkZfQkFDS1BSRVNTVVJFKVxuIFxuICNkZWZpbmUgR09PRENPUFlfTEVOIDEyOFxuIFxuQEAgLTE0NSw2ICsxNDYsOCBAQCBzdHJ1Y3QgdHVuX2ZpbGUge1xuIFx0c3RydWN0IGxpc3RfaGVhZCBuZXh0O1xuIFx0c3RydWN0IHR1bl9zdHJ1Y3QgKmRldGFjaGVkO1xuIFx0c3RydWN0IHB0cl9yaW5nIHR4X3Jpbmc7XG4rXHQvKiBQcm90ZWN0ZWQgYnkgdHhfcmluZy5jb25zdW1lcl9sb2NrICovXG4rXHRpbnQgY29uc19jbnQ7XG4gXHRzdHJ1Y3QgeGRwX3J4cV9pbmZvIHhkcF9yeHE7XG4gfTtcbiBcbkBAIC01ODUsMTEgKzU4OCwxNiBAQCBzdGF0aWMgdm9pZCBfX3R1bl9kZXRhY2goc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgYm9vbCBjbGVhbilcbiBcdFx0dTE2IGluZGV4ID0gdGZpbGUtXHUwMDNlcXVldWVfaW5kZXg7XG4gXHRcdEJVR19PTihpbmRleCBcdTAwM2U9IHR1bi1cdTAwM2VudW1xdWV1ZXMpO1xuIFxuK1x0XHRzcGluX2xvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHR1bi1cdTAwM2V0ZmlsZXNbaW5kZXhdLFxuIFx0XHRcdFx0ICAgdHVuLVx1MDAzZXRmaWxlc1t0dW4tXHUwMDNlbnVtcXVldWVzIC0gMV0pO1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuIFx0XHRudGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cdTAwM2V0ZmlsZXNbaW5kZXhdKTtcbitcdFx0c3Bpbl9sb2NrKFx1MDAyNm50ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuIFx0XHRudGZpbGUtXHUwMDNlcXVldWVfaW5kZXggPSBpbmRleDtcbiBcdFx0bnRmaWxlLVx1MDAzZXhkcF9yeHEucXVldWVfaW5kZXggPSBpbmRleDtcbitcdFx0bnRmaWxlLVx1MDAzZWNvbnNfY250ID0gMDtcbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2bnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcih0dW4tXHUwMDNldGZpbGVzW3R1bi1cdTAwM2VudW1xdWV1ZXMgLSAxXSxcbiBcdFx0XHRcdCAgIE5VTEwpO1xuIFxuQEAgLTYwNiw2ICs2MTQsMTQgQEAgc3RhdGljIHZvaWQgX190dW5fZGV0YWNoKHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGJvb2wgY2xlYW4pXG4gXHRcdHR1bl9mbG93X2RlbGV0ZV9ieV9xdWV1ZSh0dW4sIHR1bi1cdTAwM2VudW1xdWV1ZXMgKyAxKTtcbiBcdFx0LyogRHJvcCByZWFkIHF1ZXVlICovXG4gXHRcdHR1bl9xdWV1ZV9wdXJnZSh0ZmlsZSk7XG4rXHRcdHNwaW5fbG9ja19iaChcdTAwMjZudGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbitcdFx0c3Bpbl9sb2NrKFx1MDAyNm50ZmlsZS1cdTAwM2V0eF9yaW5nLnByb2R1Y2VyX2xvY2spO1xuK1x0XHRudGZpbGUtXHUwMDNlY29uc19jbnQgPSAwO1xuK1x0XHRpZiAobmV0aWZfcnVubmluZyh0dW4tXHUwMDNlZGV2KSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIF9fcHRyX3JpbmdfZW1wdHkoXHUwMDI2bnRmaWxlLVx1MDAzZXR4X3JpbmcpKVxuK1x0XHRcdG5ldGlmX3dha2Vfc3VicXVldWUodHVuLVx1MDAzZWRldiwgaW5kZXgpO1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZudGZpbGUtXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4gXHRcdHR1bl9zZXRfcmVhbF9udW1fcXVldWVzKHR1bik7XG4gXHR9IGVsc2UgaWYgKHRmaWxlLVx1MDAzZWRldGFjaGVkIFx1MDAyNlx1MDAyNiBjbGVhbikge1xuIFx0XHR0dW4gPSB0dW5fZW5hYmxlX3F1ZXVlKHRmaWxlKTtcbkBAIC02ODcsNiArNzAzLDI1IEBAIHN0YXRpYyB2b2lkIHR1bl9kZXRhY2hfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB0dW5fZm9yY2Vfd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuK1x0XHRcdFx0IHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXG4re1xuK1x0LyogRW5zdXJlIHRoYXQgdGhlIHByb2R1Y2VyIGNhbiBub3Qgc3RvcCB0aGVcbitcdCAqIHF1ZXVlIGNvbmN1cnJlbnRseSBieSB0YWtpbmcgbG9ja3MuXG4rXHQgKi9cbitcdHNwaW5fbG9ja19iaChcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuK1x0c3Bpbl9sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XG4rXHR0ZmlsZS1cdTAwM2Vjb25zX2NudCA9IDA7XG4rXHQvKiBUZXN0ZWQgdW5kZXIgdGhlIGxvY2tzIHRoYXQgdHVuX25ldF9jbG9zZSgpIHRha2VzLCBzbyB0aGlzIGNhbiBub3RcbitcdCAqIHVuZG8gaXRzIHN0b3AuIHR1bl9uZXRfb3BlbigpIHdha2VzIHRoZSBxdWV1ZXMgb2YgYSBkZXZpY2UgdGhhdFxuK1x0ICogY29tZXMgYmFjayB1cC5cbitcdCAqL1xuK1x0aWYgKG5ldGlmX3J1bm5pbmcodHVuLVx1MDAzZWRldikpXG4rXHRcdG5ldGlmX3dha2Vfc3VicXVldWUodHVuLVx1MDAzZWRldiwgdGZpbGUtXHUwMDNlcXVldWVfaW5kZXgpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgdHVuX2F0dGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0ICAgICAgYm9vbCBza2lwX2ZpbHRlciwgYm9vbCBuYXBpLCBib29sIG5hcGlfZnJhZ3MsXG4gXHRcdCAgICAgIGJvb2wgcHVibGlzaF90dW4pXG5AQCAtNzMwLDggKzc2NSwxMSBAQCBzdGF0aWMgaW50IHR1bl9hdHRhY2goc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuK1x0c3Bpbl9sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4gXHR0ZmlsZS1cdTAwM2VxdWV1ZV9pbmRleCA9IHR1bi1cdTAwM2VudW1xdWV1ZXM7XG4rXHRzcGluX3VubG9jayhcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuIFx0dGZpbGUtXHUwMDNlc29ja2V0LnNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNj0gflJDVl9TSFVURE9XTjtcbitcdHR1bl9mb3JjZV93YWtlX3F1ZXVlKHR1biwgdGZpbGUpO1xuIFxuIFx0aWYgKHRmaWxlLVx1MDAzZWRldGFjaGVkKSB7XG4gXHRcdC8qIFJlLWF0dGFjaCBkZXRhY2hlZCB0ZmlsZSwgdXBkYXRpbmcgWERQIHF1ZXVlX2luZGV4ICovXG5AQCAtOTY0LDYgKzEwMDIsMjQgQEAgc3RhdGljIGludCB0dW5fbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAvKiBOZXQgZGV2aWNlIGNsb3NlLiAqL1xuIHN0YXRpYyBpbnQgdHVuX25ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbitcdHN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0c3RydWN0IHR1bl9maWxlICp0ZmlsZTtcbitcdGludCBpO1xuK1xuK1x0LyogbmV0aWZfcnVubmluZygpIGlzIGFscmVhZHkgZmFsc2U6IHRha2UgYm90aCByaW5nIGxvY2tzIHRvIGtlZXAgdGhlXG4rXHQgKiB3YWtlIHNpdGVzIG91dCwgc28gdGhlIHN0b3AgYmVsb3cgaXMgdGhlIGxhc3Qgd3JpdGUgdG9cbitcdCAqIF9fUVVFVUVfU1RBVEVfRFJWX1hPRkYuXG4rXHQgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHR1bi1cdTAwM2VudW1xdWV1ZXM7IGkrKykge1xuK1x0XHR0ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLVx1MDAzZXRmaWxlc1tpXSk7XG4rXG4rXHRcdHNwaW5fbG9ja19iaChcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuK1x0XHRzcGluX2xvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcbitcdFx0dGZpbGUtXHUwMDNlY29uc19jbnQgPSAwO1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLnByb2R1Y2VyX2xvY2spO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuK1x0fVxuK1xuIFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKGRldik7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMTAwOCw2ICsxMDY0LDcgQEAgc3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqcXVldWU7XG4gXHRzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlO1xuIFx0aW50IGxlbiA9IHNrYi1cdTAwM2VsZW47XG4rXHRpbnQgcmV0O1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0dGZpbGUgPSByY3VfZGVyZWZlcmVuY2UodHVuLVx1MDAzZXRmaWxlc1t0eHFdKTtcbkBAIC0xMDYyLDEzICsxMTE5LDM1IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiBcdG5mX3Jlc2V0X2N0KHNrYik7XG4gXG4tXHRpZiAocHRyX3JpbmdfcHJvZHVjZShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLCBza2IpKSB7XG4rXHRxdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCB0eHEpO1xuK1xuK1x0c3Bpbl9sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XG4rXHRyZXQgPSBfX3B0cl9yaW5nX3Byb2R1Y2UoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZywgc2tiKTtcbitcdC8qIERvIG5vdCB0b3VjaCB0aGUgcXVldWUgc3RhdGUgb2YgYSBkZXZpY2UgdGhhdCBpcyBnb2luZyBkb3duLiAqL1xuK1x0aWYgKCh0dW4tXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9CQUNLUFJFU1NVUkUpIFx1MDAyNlx1MDAyNiBuZXRpZl9ydW5uaW5nKGRldikgXHUwMDI2XHUwMDI2XG4rXHQgICAgIXFkaXNjX3R4cV9oYXNfbm9fcXVldWUocXVldWUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIF9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nKSA9PSAtRU5PU1BDKSB7XG4rXHRcdG5ldGlmX3R4X3N0b3BfcXVldWUocXVldWUpO1xuK1x0XHQvKiBQYWlyZWQgd2l0aCBzbXBfbWIoKSBpbiBfX3R1bl93YWtlX3F1ZXVlKCkgKi9cbitcdFx0c21wX21iX19hZnRlcl9hdG9taWMoKTtcbitcdFx0aWYgKCFfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2UoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZykpXG4rXHRcdFx0bmV0aWZfdHhfd2FrZV9xdWV1ZShxdWV1ZSk7XG4rXHR9XG4rXHRzcGluX3VubG9jayhcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLnByb2R1Y2VyX2xvY2spO1xuK1xuK1x0aWYgKHJldCkge1xuK1x0XHQvKiBUaGlzIHNob3VsZCBiZSBhIHJhcmUgY2FzZSBpZiBJRkZfQkFDS1BSRVNTVVJFIGlzIGVuYWJsZWQgYW5kXG4rXHRcdCAqIGEgcWRpc2MgaXMgcHJlc2VudCwgYnV0IGNhbiBoYXBwZW4gZHVlIHRvIGxsdHguXG4rXHRcdCAqIFNpbmNlIHNrYl90eF90aW1lc3RhbXAoKSwgc2tiX29ycGhhbigpLFxuK1x0XHQgKiBydW5fZWJwZl9maWx0ZXIoKSBhbmQgcHNrYl90cmltKCkgY291bGQgaGF2ZSB0aW5rZXJlZFxuK1x0XHQgKiB3aXRoIHRoZSBTS0IsIHJldHVybmluZyBORVRERVZfVFhfQlVTWSBpcyB1bnNhZmUgYW5kXG4rXHRcdCAqIHdlIG11c3QgZHJvcCBpbnN0ZWFkLlxuK1x0XHQgKi9cbiBcdFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fRlVMTF9SSU5HO1xuIFx0XHRnb3RvIGRyb3A7XG4gXHR9XG4gXG4gXHQvKiBkZXYtXHUwMDNlbGx0eCByZXF1aXJlcyB0byBkbyBvdXIgb3duIHVwZGF0ZSBvZiB0cmFuc19zdGFydCAqL1xuLVx0cXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgdHhxKTtcbiBcdHR4cV90cmFuc19jb25kX3VwZGF0ZShxdWV1ZSk7XG4gXG4gXHQvKiBOb3RpZnkgYW5kIHdha2UgdXAgcmVhZGVyIHByb2Nlc3MgKi9cbkBAIC0yMTE2LDEzICsyMTk1LDYxIEBAIHN0YXRpYyBzc2l6ZV90IHR1bl9wdXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuIFx0cmV0dXJuIHRvdGFsO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgbm9ibG9jaywgaW50ICplcnIpXG4rLyogQ2FsbGVycyBtdXN0IGhvbGQgcmluZy5jb25zdW1lcl9sb2NrICovXG4rc3RhdGljIHZvaWQgX190dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuK1x0XHRcdCAgICAgc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgaW50IGNvbnN1bWVkKVxuK3tcbitcdHUxNiBxdWV1ZV9pbmRleCA9IHRmaWxlLVx1MDAzZXF1ZXVlX2luZGV4O1xuK1x0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuK1xuK1x0aWYgKCEodHVuLVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfQkFDS1BSRVNTVVJFKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LyogQSBzdG9wIGZyb20gdHVuX25ldF9jbG9zZSgpIGlzIG5vdCBiYWNrcHJlc3N1cmUsIGxlYXZlIGl0IGFsb25lLiAqL1xuK1x0aWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKHR1bi1cdTAwM2VkZXYpKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LyogT25seSB0aGUgY3VycmVudCBvd25lciBvZiB0aGUgc2xvdCBtYXkgd2FrZSBpdHMgc3VicXVldWUuICovXG4rXHRpZiAodW5saWtlbHkocmN1X2FjY2Vzc19wb2ludGVyKHR1bi1cdTAwM2V0ZmlsZXNbcXVldWVfaW5kZXhdKSAhPSB0ZmlsZSkpXG4rXHRcdHJldHVybjtcbitcbitcdHR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUodHVuLVx1MDAzZWRldiwgcXVldWVfaW5kZXgpO1xuK1xuK1x0LyogUGFpcmVkIHdpdGggc21wX21iX19hZnRlcl9hdG9taWMoKSBpbiB0dW5fbmV0X3htaXQoKSAqL1xuK1x0c21wX21iKCk7XG4rXHRpZiAobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpKSB7XG4rXHRcdHRmaWxlLVx1MDAzZWNvbnNfY250ICs9IGNvbnN1bWVkO1xuK1x0XHRpZiAodGZpbGUtXHUwMDNlY29uc19jbnQgXHUwMDNlPSB0ZmlsZS1cdTAwM2V0eF9yaW5nLnNpemUgLyAyIHx8XG4rXHRcdCAgICBfX3B0cl9yaW5nX2VtcHR5KFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcpKSB7XG4rXHRcdFx0bmV0aWZfdHhfd2FrZV9xdWV1ZSh0eHEpO1xuK1x0XHRcdHRmaWxlLVx1MDAzZWNvbnNfY250ID0gMDtcbitcdFx0fVxuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCAqdHVuX3JpbmdfY29uc3VtZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKVxuK3tcbitcdHZvaWQgKnB0cjtcbitcbitcdHNwaW5fbG9jayhcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuK1x0cHRyID0gX19wdHJfcmluZ19jb25zdW1lKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcpO1xuK1x0aWYgKHB0cilcbitcdFx0X190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCAxKTtcbitcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4rXHRyZXR1cm4gcHRyO1xuK31cbitcbitzdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuK1x0XHRcdCAgIGludCBub2Jsb2NrLCBpbnQgKmVycilcbiB7XG4gXHRERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTtcbiBcdHZvaWQgKnB0ciA9IE5VTEw7XG4gXHRpbnQgZXJyb3IgPSAwO1xuIFxuLVx0cHRyID0gcHRyX3JpbmdfY29uc3VtZShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nKTtcbitcdHB0ciA9IHR1bl9yaW5nX2NvbnN1bWUodHVuLCB0ZmlsZSk7XG4gXHRpZiAocHRyKVxuIFx0XHRnb3RvIG91dDtcbiBcdGlmIChub2Jsb2NrKSB7XG5AQCAtMjEzNCw3ICsyMjYxLDcgQEAgc3RhdGljIHZvaWQgKnR1bl9yaW5nX3JlY3Yoc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgaW50IG5vYmxvY2ssIGludCAqZXJyKVxuIFxuIFx0d2hpbGUgKDEpIHtcbiBcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcbi1cdFx0cHRyID0gcHRyX3JpbmdfY29uc3VtZShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nKTtcbitcdFx0cHRyID0gdHVuX3JpbmdfY29uc3VtZSh0dW4sIHRmaWxlKTtcbiBcdFx0aWYgKHB0cilcbiBcdFx0XHRicmVhaztcbiBcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XG5AQCAtMjE3MSw3ICsyMjk4LDcgQEAgc3RhdGljIHNzaXplX3QgdHVuX2RvX3JlYWQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbiBcbiBcdGlmICghcHRyKSB7XG4gXHRcdC8qIFJlYWQgZnJhbWVzIGZyb20gcmluZyAqL1xuLVx0XHRwdHIgPSB0dW5fcmluZ19yZWN2KHRmaWxlLCBub2Jsb2NrLCBcdTAwMjZlcnIpO1xuK1x0XHRwdHIgPSB0dW5fcmluZ19yZWN2KHR1biwgdGZpbGUsIG5vYmxvY2ssIFx1MDAyNmVycik7XG4gXHRcdGlmICghcHRyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHR9XG5AQCAtMjcwMyw4ICsyODMwLDkgQEAgc3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcilcbiB7XG4gXHRzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuO1xuIFx0c3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuK1x0c3RydWN0IHR1bl9maWxlICpudGZpbGU7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuLVx0aW50IGVycjtcbitcdGludCBlcnIsIGk7XG4gXG4gXHRpZiAodGZpbGUtXHUwMDNlZGV0YWNoZWQpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTI4MzMsOCArMjk2MSwxMCBAQCBzdGF0aWMgaW50IHR1bl9zZXRfaWZmKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKVxuIFx0LyogTWFrZSBzdXJlIHBlcnNpc3RlbnQgZGV2aWNlcyBkbyBub3QgZ2V0IHN0dWNrIGluXG4gXHQgKiB4b2ZmIHN0YXRlLlxuIFx0ICovXG4tXHRpZiAobmV0aWZfcnVubmluZyh0dW4tXHUwMDNlZGV2KSlcbi1cdFx0bmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKHR1bi1cdTAwM2VkZXYpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHVuLVx1MDAzZW51bXF1ZXVlczsgaSsrKSB7XG4rXHRcdG50ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLVx1MDAzZXRmaWxlc1tpXSk7XG4rXHRcdHR1bl9mb3JjZV93YWtlX3F1ZXVlKHR1biwgbnRmaWxlKTtcbitcdH1cbiBcbiBcdHN0cnNjcHkoaWZyLVx1MDAzZWlmcl9uYW1lLCB0dW4tXHUwMDNlZGV2LVx1MDAzZW5hbWUpO1xuIFx0cmV0dXJuIDA7XG5AQCAtMzYzMCw2ICszNzYwLDEzIEBAIHN0YXRpYyBpbnQgdHVuX3F1ZXVlX3Jlc2l6ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxuIFx0XHRcdFx0XHQgIGRldi1cdTAwM2V0eF9xdWV1ZV9sZW4sIEdGUF9LRVJORUwsXG4gXHRcdFx0XHRcdCAgdHVuX3B0cl9mcmVlKTtcbiBcbitcdGlmICghcmV0KSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHR1bi1cdTAwM2VudW1xdWV1ZXM7IGkrKykge1xuK1x0XHRcdHRmaWxlID0gcnRubF9kZXJlZmVyZW5jZSh0dW4tXHUwMDNldGZpbGVzW2ldKTtcbitcdFx0XHR0dW5fZm9yY2Vfd2FrZV9xdWV1ZSh0dW4sIHRmaWxlKTtcbitcdFx0fVxuK1x0fVxuK1xuIFx0a2ZyZWUocmluZ3MpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMzczOCw2ICszODc1LDMxIEBAIHN0cnVjdCBwdHJfcmluZyAqdHVuX2dldF90eF9yaW5nKHN0cnVjdCBmaWxlICpmaWxlKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh0dW5fZ2V0X3R4X3JpbmcpO1xuIFxuKy8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqL1xuK3ZvaWQgdHVuX3dha2VfcXVldWUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBjb25zdW1lZClcbit7XG4rXHRzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlO1xuK1x0c3RydWN0IHR1bl9zdHJ1Y3QgKnR1bjtcbitcbitcdGlmIChmaWxlLVx1MDAzZWZfb3AgIT0gXHUwMDI2dHVuX2ZvcHMpXG4rXHRcdHJldHVybjtcbitcbitcdHRmaWxlID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXHRpZiAoIXRmaWxlKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXG4rXHR0dW4gPSByY3VfZGVyZWZlcmVuY2UodGZpbGUtXHUwMDNldHVuKTtcbitcdGlmICh0dW4pXG4rXHRcdF9fdHVuX3dha2VfcXVldWUodHVuLCB0ZmlsZSwgY29uc3VtZWQpO1xuK1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHR1bl93YWtlX3F1ZXVlKTtcbitcbiBtb2R1bGVfaW5pdCh0dW5faW5pdCk7XG4gbW9kdWxlX2V4aXQodHVuX2NsZWFudXApO1xuIE1PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQ1JJUFRJT04pO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvbmV0LmMgYi9kcml2ZXJzL3Zob3N0L25ldC5jXG5pbmRleCA2OTQ5YjcwNDE2NmQ1Li4zZTcyYjljNmFmMGNhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC9uZXQuY1xuKysrIGIvZHJpdmVycy92aG9zdC9uZXQuY1xuQEAgLTE3NiwxMyArMTc2LDIxIEBAIHN0YXRpYyB2b2lkICp2aG9zdF9uZXRfYnVmX2NvbnN1bWUoc3RydWN0IHZob3N0X25ldF9idWYgKnJ4cSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXG4rc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc3RydWN0IHNvY2sgKnNrLFxuK1x0XHRcdFx0IHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXG4ge1xuK1x0c3RydWN0IGZpbGUgKmZpbGUgPSBzay1cdTAwM2Vza19zb2NrZXQtXHUwMDNlZmlsZTtcbiBcdHN0cnVjdCB2aG9zdF9uZXRfYnVmICpyeHEgPSBcdTAwMjZudnEtXHUwMDNlcnhxO1xuIFxuIFx0cnhxLVx1MDAzZWhlYWQgPSAwO1xuLVx0cnhxLVx1MDAzZXRhaWwgPSBwdHJfcmluZ19jb25zdW1lX2JhdGNoZWQobnZxLVx1MDAzZXJ4X3JpbmcsIHJ4cS1cdTAwM2VxdWV1ZSxcbi1cdFx0XHRcdFx0ICAgICAgVkhPU1RfTkVUX0JBVENIKTtcbitcdHNwaW5fbG9jayhcdTAwMjZudnEtXHUwMDNlcnhfcmluZy1cdTAwM2Vjb25zdW1lcl9sb2NrKTtcbitcdHJ4cS1cdTAwM2V0YWlsID0gX19wdHJfcmluZ19jb25zdW1lX2JhdGNoZWQobnZxLVx1MDAzZXJ4X3JpbmcsIHJ4cS1cdTAwM2VxdWV1ZSxcbitcdFx0XHRcdFx0ICAgICAgIFZIT1NUX05FVF9CQVRDSCk7XG4rXG4rXHRpZiAocnhxLVx1MDAzZXRhaWwpXG4rXHRcdHR1bl93YWtlX3F1ZXVlKGZpbGUsIHJ4cS1cdTAwM2V0YWlsKTtcbitcbitcdHNwaW5fdW5sb2NrKFx1MDAyNm52cS1cdTAwM2VyeF9yaW5nLVx1MDAzZWNvbnN1bWVyX2xvY2spO1xuIFx0cmV0dXJuIHJ4cS1cdTAwM2V0YWlsO1xuIH1cbiBcbkBAIC0yMDksMTQgKzIxNywxNSBAQCBzdGF0aWMgaW50IHZob3N0X25ldF9idWZfcGVla19sZW4odm9pZCAqcHRyKVxuIFx0cmV0dXJuIF9fc2tiX2FycmF5X2xlbl93aXRoX3RhZyhwdHIpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHZob3N0X25ldF9idWZfcGVlayhzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqbnZxKVxuK3N0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrKHN0cnVjdCBzb2NrICpzayxcbitcdFx0XHQgICAgICBzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqbnZxKVxuIHtcbiBcdHN0cnVjdCB2aG9zdF9uZXRfYnVmICpyeHEgPSBcdTAwMjZudnEtXHUwMDNlcnhxO1xuIFxuIFx0aWYgKCF2aG9zdF9uZXRfYnVmX2lzX2VtcHR5KHJ4cSkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0aWYgKCF2aG9zdF9uZXRfYnVmX3Byb2R1Y2UobnZxKSlcbitcdGlmICghdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKHNrLCBudnEpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBvdXQ6XG5AQCAtMTAwNCw3ICsxMDEzLDcgQEAgc3RhdGljIGludCBwZWVrX2hlYWRfbGVuKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpydnEsIHN0cnVjdCBzb2NrICpzaylcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRpZiAocnZxLVx1MDAzZXJ4X3JpbmcpXG4tXHRcdHJldHVybiB2aG9zdF9uZXRfYnVmX3BlZWsocnZxKTtcbitcdFx0cmV0dXJuIHZob3N0X25ldF9idWZfcGVlayhzaywgcnZxKTtcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jaywgZmxhZ3MpO1xuIFx0aGVhZCA9IHNrYl9wZWVrKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfdHVuLmggYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oXG5pbmRleCA4MDE2NmViNjJmNDFjLi5lZWI5ZWQzYzVhMjM5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pZl90dW4uaFxuKysrIGIvaW5jbHVkZS9saW51eC9pZl90dW4uaFxuQEAgLTIyLDYgKzIyLDggQEAgc3RydWN0IHR1bl9tc2dfY3RsIHtcbiAjaWYgZGVmaW5lZChDT05GSUdfVFVOKSB8fCBkZWZpbmVkKENPTkZJR19UVU5fTU9EVUxFKVxuIHN0cnVjdCBzb2NrZXQgKnR1bl9nZXRfc29ja2V0KHN0cnVjdCBmaWxlICopO1xuIHN0cnVjdCBwdHJfcmluZyAqdHVuX2dldF90eF9yaW5nKHN0cnVjdCBmaWxlICpmaWxlKTtcbisvKiBDYWxsZXJzIG11c3QgaG9sZCB0aGUgY29uc3VtZXJfbG9jayBvZiB0aGUgcmluZyBvZiBmaWxlICovXG4rdm9pZCB0dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNvbnN1bWVkKTtcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgdHVuX2lzX3hkcF9mcmFtZSh2b2lkICpwdHIpXG4ge1xuQEAgLTU1LDYgKzU3LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcHRyX3JpbmcgKnR1bl9nZXRfdHhfcmluZyhzdHJ1Y3QgZmlsZSAqZilcbiBcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgdHVuX3dha2VfcXVldWUoc3RydWN0IGZpbGUgKmYsIGludCBjb25zdW1lZCkge31cbitcbiBzdGF0aWMgaW5saW5lIGJvb2wgdHVuX2lzX3hkcF9mcmFtZSh2b2lkICpwdHIpXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaCBiL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaFxuaW5kZXggZDJjMzYyOWJiZTQ1MS4uNjMxYzQzZmRlNDQwNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oXG5AQCAtOTYsNiArOTYsMjYgQEAgc3RhdGljIGlubGluZSBib29sIHB0cl9yaW5nX2Z1bGxfYmgoc3RydWN0IHB0cl9yaW5nICpyKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLyogUmVwb3J0IHdoZXRoZXIgdGhlIG5leHQgX19wdHJfcmluZ19wcm9kdWNlKCkgaGFzIHJvb20gZm9yIG9uZSBlbnRyeTpcbisgKiAwIG1lYW5zIHRoZSBzaW5nbGUgc2xvdCBhdCByLVx1MDAzZXF1ZXVlW3ItXHUwMDNlcHJvZHVjZXJdIGlzIGZyZWUsIC1FTk9TUEMgbWVhbnNcbisgKiB0aGUgcmluZyBpcyBmdWxsLCB3aGljaCBpcyB0cmFuc2llbnQsIGFuZCAtRUlOVkFMIG1lYW5zIHItXHUwMDNlc2l6ZSBpcyAwLFxuKyAqIHdoaWNoIGlzIHBlcm1hbmVudC4gQSBjYWxsZXIgdGhhdCBzdG9wcyBwcm9kdWNpbmcgYW5kIHdhaXRzIGZvciBzcGFjZVxuKyAqIG11c3QgdGhlcmVmb3JlIGRvIHNvIG9ubHkgZm9yIC1FTk9TUEMuXG4rICpcbisgKiBOb3RlOiBjYWxsZXJzIGludm9raW5nIHRoaXMgaW4gYSBsb29wIG11c3QgdXNlIGEgY29tcGlsZXIgYmFycmllcixcbisgKiBmb3IgZXhhbXBsZSBjcHVfcmVsYXgoKS4gQ2FsbGVycyBtdXN0IGhvbGQgcHJvZHVjZXJfbG9jay5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2Uoc3RydWN0IHB0cl9yaW5nICpyKVxuK3tcbitcdGlmICh1bmxpa2VseSghci1cdTAwM2VzaXplKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoZGF0YV9yYWNlKHItXHUwMDNlcXVldWVbci1cdTAwM2Vwcm9kdWNlcl0pKVxuK1x0XHRyZXR1cm4gLUVOT1NQQztcbitcbitcdHJldHVybiAwO1xuK31cbitcbiAvKiBOb3RlOiBjYWxsZXJzIGludm9raW5nIHRoaXMgaW4gYSBsb29wIG11c3QgdXNlIGEgY29tcGlsZXIgYmFycmllcixcbiAgKiBmb3IgZXhhbXBsZSBjcHVfcmVsYXgoKS4gQ2FsbGVycyBtdXN0IGhvbGQgcHJvZHVjZXJfbG9jay5cbiAgKiBDYWxsZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgcG9pbnRlciB0aGF0IGlzIGJlaW5nIHF1ZXVlZFxuQEAgLTEwMyw4ICsxMjMsMTAgQEAgc3RhdGljIGlubGluZSBib29sIHB0cl9yaW5nX2Z1bGxfYmgoc3RydWN0IHB0cl9yaW5nICpyKVxuICAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3JpbmdfcHJvZHVjZShzdHJ1Y3QgcHRyX3JpbmcgKnIsIHZvaWQgKnB0cilcbiB7XG4tXHRpZiAodW5saWtlbHkoIXItXHUwMDNlc2l6ZSkgfHwgZGF0YV9yYWNlKHItXHUwMDNlcXVldWVbci1cdTAwM2Vwcm9kdWNlcl0pKVxuLVx0XHRyZXR1cm4gLUVOT1NQQztcbitcdGludCByZXQgPSBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2Uocik7XG4rXG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0LyogTWFrZSBzdXJlIHRoZSBwb2ludGVyIHdlIGFyZSBzdG9yaW5nIHBvaW50cyB0byBhIHZhbGlkIGRhdGEuICovXG4gXHQvKiBQYWlycyB3aXRoIHRoZSBkZXBlbmRlbmN5IG9yZGVyaW5nIGluIF9fcHRyX3JpbmdfY29uc3VtZS4gKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcbmluZGV4IDc5ZDUzYzdhMWViZGMuLmEwZGRjNTBhNzUzNDIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxuQEAgLTY5LDYgKzY5LDEwIEBAXG4gI2RlZmluZSBJRkZfTkFQSV9GUkFHU1x0MHgwMDIwXG4gLyogVXNlZCBpbiBUVU5TRVRJRkYgdG8gYnJpbmcgdXAgdHVuL3RhcCB3aXRob3V0IGNhcnJpZXIgKi9cbiAjZGVmaW5lIElGRl9OT19DQVJSSUVSXHQweDAwNDBcbisvKiBTdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHdoZW4gdGhlIGludGVybmFsIHJpbmcgaXMgZnVsbCwgc28gYW5cbisgKiBhdHRhY2hlZCBxZGlzYyBhcHBsaWVzIGJhY2twcmVzc3VyZSBpbnN0ZWFkIG9mIGJlaW5nIGJ5cGFzc2VkLlxuKyAqL1xuKyNkZWZpbmUgSUZGX0JBQ0tQUkVTU1VSRVx0MHgwMDgwXG4gI2RlZmluZSBJRkZfTk9fUElcdDB4MTAwMFxuIC8qIFRoaXMgZmxhZyBoYXMgbm8gcmVhbCBlZmZlY3QgKi9cbiAjZGVmaW5lIElGRl9PTkVfUVVFVUVcdDB4MjAwMFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxuaW5kZXggMmVjMDdkZTFkNzNiZS4uMmM4NTUyNTcwNGMxNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxuKysrIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXG5AQCAtNjcsNiArNjcsMTAgQEBcbiAjZGVmaW5lIElGRl9UQVBcdFx0MHgwMDAyXG4gI2RlZmluZSBJRkZfTkFQSVx0MHgwMDEwXG4gI2RlZmluZSBJRkZfTkFQSV9GUkFHU1x0MHgwMDIwXG4rLyogU3RvcCB0aGUgcXVldWUgaW5zdGVhZCBvZiBkcm9wcGluZyB3aGVuIHRoZSBpbnRlcm5hbCByaW5nIGlzIGZ1bGwsIHNvIGFuXG4rICogYXR0YWNoZWQgcWRpc2MgYXBwbGllcyBiYWNrcHJlc3N1cmUgaW5zdGVhZCBvZiBiZWluZyBieXBhc3NlZC5cbisgKi9cbisjZGVmaW5lIElGRl9CQUNLUFJFU1NVUkVcdDB4MDA4MFxuICNkZWZpbmUgSUZGX05PX1BJXHQweDEwMDBcbiAvKiBUaGlzIGZsYWcgaGFzIG5vIHJlYWwgZWZmZWN0ICovXG4gI2RlZmluZSBJRkZfT05FX1FVRVVFXHQweDIwMDBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjA1OjQ3LjU4MTUxOTcyNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMzU3MjQwOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJRkZfQkFDS1BSRVNTVVJFIFBhdGNoIGZvciBUVU4vVEFQIERldmljZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGludHJvZHVjaW5nIGBJRkZfQkFDS1BSRVNTVVJFYCBmb3IgVFVOL1RBUCBkZXZpY2VzLiBUaGlzIGlzIGEgcHJldHR5IGludGVyZXN0aW5nIGFkZGl0aW9uOyBpdCdzIGRlc2lnbmVkIHRvIHByZXZlbnQgcGFja2V0IGRyb3BzIHdoZW4gdGhlIHJpbmcgYnVmZmVyIGlzIGZ1bGwgYnkgYWxsb3dpbmcgdGhlIGtlcm5lbCB0byAqc3RvcCogdGhlIHF1ZXVlIGluc3RlYWQuIFRoYXQgZW5hYmxlcyBhbiBhdHRhY2hlZCBxZGlzYyB0byBhcHBseSBiYWNrcHJlc3N1cmUg4oCTIHZlcnkgY2xldmVyLlxuXG5UaGUgY2hhbmdlcyBhcmUgc3ByZWFkIGFjcm9zcyBzZXZlcmFsIGZpbGVzLCBzbyBsZXQncyBicmVhayBpdCBkb3duOiBgZHJpdmVycy9uZXQvdHVuLmNgLCBgZHJpdmVycy92aG9zdC9uZXQuY2AsIHRoZSBpbmNsdWRlcyBgaWZfdHVuLmhgLCBgcHRyX3JpbmcuaGAsIGFuZCB0aGUgVUFQSSBoZWFkZXIgYGlmX3R1bi5oYC5cblxuRGl2aW5nIGludG8gYGRyaXZlcnMvbmV0L3R1bi5jYCwgSSBzZWUgYSBmZXcga2V5IGFkZGl0aW9ucyBhbmQgbW9kaWZpY2F0aW9uczogYHR1bl9mb3JjZV93YWtlX3F1ZXVlYCBpcyBuZXcsIGEgbW9kaWZpY2F0aW9uIHRvIGB0dW5fbmV0X2Nsb3NlYCB0byBjbGVhciBgY29uc19jbnRgLiBUaGUgcmVhbCBtZWF0IGlzIGluIGB0dW5fbmV0X3htaXRgOyBpdCdzIG5vdyBjaGVja2luZyBmb3IgYElGRl9CQUNLUFJFU1NVUkVgIGFuZCBzdG9wcGluZyB0aGUgcXVldWUgd2hlbiB0aGUgcmluZyBpcyBmdWxsIOKAkyBleGFjdGx5IGFzIGV4cGVjdGVkLiBXZSBhbHNvIGhhdmUgYF9fdHVuX3dha2VfcXVldWVgIHRvIHdha2UgdXAgdGhlIHF1ZXVlIHdoZW4gaXRlbXMgYXJlIGNvbnN1bWVkIGZyb20gdGhlIHJpbmcsIGB0dW5fcmluZ19jb25zdW1lYCAod2hpY2ggbG9va3MgbGlrZSBhIG5ldyByaW5nIGJ1ZmZlciBmdW5jdGlvbiksIGB0dW5fcmluZ19yZWN2YCBtb2RpZmllZCB0byB1c2UgYHR1bl9yaW5nX2NvbnN1bWVgLCBhbmQgdGhlIGB0dW5fd2FrZV9xdWV1ZWAgaXMgbm93IGV4cG9ydGVkIGZvciB2aG9zdC4gVGhpcyBsb29rcyBzb2xpZCBpbiB0ZXJtcyBvZiBmdW5jdGlvbmFsaXR5LlxuXG5UaGVuLCBpbiBgZHJpdmVycy92aG9zdC9uZXQuY2AsIGB2aG9zdF9uZXRfYnVmX3Byb2R1Y2VgIGlzIGJlaW5nIG1vZGlmaWVkIHRvIGNhbGwgYHR1bl93YWtlX3F1ZXVlYCB3aGVuIGl0ZW1zIGFyZSBjb25zdW1lZC4gVGhpcyBpbnRlZ3JhdGVzIHRoZSB2aG9zdCBzaWRlIG5pY2VseSwgZW5zdXJpbmcgcHJvcGVyIHF1ZXVlIHdha2luZyBpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhdCB0aGUgY29yZSBsZXZlbCBvZiB0aGUgbmV0d29ya2luZyBzdGFjayBhbmQgcGFydGljdWxhcmx5IGltcGFjdHMgVFVOL1RBUCwgd2hpY2ggYXJlIHdpZGVseSB1c2VkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIEdpdmVuIGl0cyByZWFjaCwgZnV6emluZyBpcyBhbiBhYnNvbHV0ZSBtdXN0LWRvIGZvciB0aGlzLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgQ09ORklHIG9wdGlvbnMuIE9idmlvdXNseSwgYENPTkZJR19UVU5gIGlzIHRoZSBwcmltYXJ5IG9uZS4gQW5kIHNpbmNlIGl0J3Mgdmhvc3QtYXdhcmUsIGBDT05GSUdfVkhPU1RfTkVUYCBpcyBjcml0aWNhbCwgdG9vLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGVpciBsb2NhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSwgc28gSSdsbCBjaGVjayBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZm9yIHRoZSBgVFVOYCBzZXR0aW5nIGFuZCBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBmb3IgYFZIT1NUX05FVGAuIEdvdHRhIG1ha2Ugc3VyZSBhbGwgYmFzZXMgYXJlIGNvdmVyZWQgZnJvbSBhIGJ1aWxkIHBlcnNwZWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTY5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MDU6NTQuOTE3MjQ3ODg1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxOTkzMzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUVU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTM4Nj1jb25maWcgUklPTkVUX1JYX1NJWkVcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzkwLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzkxOmNvbmZpZyBUVU5cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM5Mi1cXHR0cmlzdGF0ZSBcXFwiVW5pdmVyc2FsIFRVTi9UQVAgZGV2aWNlIGRyaXZlciBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz00MTU9Y29uZmlnIFRBUFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MjAtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0MjE6Y29uZmlnIFRVTl9WTkVUX0NST1NTX0xFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MjItXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgY3Jvc3MtZW5kaWFuIHZuZXQgaGVhZGVycyBvbiBsaXR0bGUtZW5kaWFuIGtlcm5lbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjA1OjU0Ljk5OTI0NTg1N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDAzNTYzNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIFZIT1NUX05FVCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhhdCdzIGFsbW9zdCBhbHdheXMgdGhlIGZpcnN0IHBsYWNlIEknZCBsb29rIHdoZW4gZGVhbGluZyB3aXRoIGFueXRoaW5nIHJlbGF0ZWQgdG8gdmhvc3QsIGVzcGVjaWFsbHkgd2hlbiBpdCBjb25jZXJucyBuZXR3b3JraW5nLiBJIGtub3cgdGhhdCdzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHZob3N0IGZyYW1ld29yayBhcmUgZGVmaW5lZCwgYW5kIGBWSE9TVF9ORVRgIGlzIHRoZSBtb3N0IGxpa2VseSBjYW5kaWRhdGUgZm9yIHRoZSBzcGVjaWZpYyBuZXR3b3JraW5nIGFzcGVjdCBJJ20gZm9jdXNlZCBvbi4gSSdtIGFzc3VtaW5nIHRoYXQgYnkgY2hlY2tpbmcgYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2AgSSB3aWxsIHVuZGVyc3RhbmQgaWYgdGhhdCdzIGVuYWJsZWQgYW5kIGhvdyB0byBjb25maWd1cmUgdGhhdCBwb3J0aW9uIG9mIHRoZSB2aXJ0dWFsIGhvc3QgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzM2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MDU6NTguMjM5NjA0ODY4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNTY2ODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWSE9TVF9ORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZz0zMj1pZiBWSE9TVF9NRU5VXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTMzLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzozNDpjb25maWcgVkhPU1RfTkVUXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTM1LVxcdHRyaXN0YXRlIFxcXCJIb3N0IGtlcm5lbCBhY2NlbGVyYXRvciBmb3IgdmlydGlvIG5ldFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MDU6NTguMzAxMTc2ODUyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkxMDE1MDgwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRhaWxvcmVkIGFzIGlmIEknbSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBWSE9TVF9ORVQgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBWSE9TVF9ORVRgIHRoaW5nIGEgYml0IGJldHRlci4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIGlmIGl0IHJlbGllcyBvbiBhbnl0aGluZyBzcGVjaWZpYyDigJMgYW55IG90aGVyIGtlcm5lbCBtb2R1bGVzLCBmZWF0dXJlcywgb3IgY29uZmlndXJhdGlvbnMgdGhhdCAqbXVzdCogYmUgaW4gcGxhY2UgZm9yIGl0IHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBvYnZpb3VzIGRlcGVuZGVuY2llcy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvbm5lY3Rpb25zIGFyZS4gVGhpcyBpcyB0aGUgYmVzdCBhcHByb2FjaCB0byBnYWluIGEgc29saWQgZ3Jhc3Agb2YgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDAzNCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjA2OjAxLjIxMTMzMDg5M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTU3NDkyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWc9MzQ9Y29uZmlnIFZIT1NUX05FVFxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0zNS1cXHR0cmlzdGF0ZSBcXFwiSG9zdCBrZXJuZWwgYWNjZWxlcmF0b3IgZm9yIHZpcnRpbyBuZXRcXFwiXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjM2OlxcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IEVWRU5URkQgXFx1MDAyNlxcdTAwMjYgKFRVTiB8fCAhVFVOKSBcXHUwMDI2XFx1MDAyNiAoVEFQIHx8ICFUQVApXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTM3LVxcdHNlbGVjdCBWSE9TVFxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnPTQ2PWNvbmZpZyBWSE9TVF9TQ1NJXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTQ3LVxcdHRyaXN0YXRlIFxcXCJWSE9TVF9TQ1NJIFRDTSBmYWJyaWMgZHJpdmVyXFxcIlxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo0ODpcXHRkZXBlbmRzIG9uIFRBUkdFVF9DT1JFIFxcdTAwMjZcXHUwMDI2IEVWRU5URkRcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNDktXFx0c2VsZWN0IFZIT1NUXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9NTY9Y29uZmlnIFZIT1NUX1ZTT0NLXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTU3LVxcdHRyaXN0YXRlIFxcXCJ2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXFxcIlxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo1ODpcXHRkZXBlbmRzIG9uIFZTT0NLRVRTIFxcdTAwMjZcXHUwMDI2IEVWRU5URkRcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTktXFx0c2VsZWN0IFZIT1NUXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9NzA9Y29uZmlnIFZIT1NUX1ZEUEFcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNzEtXFx0dHJpc3RhdGUgXFxcIlZob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXFxcIlxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo3MjpcXHRkZXBlbmRzIG9uIEVWRU5URkRcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNzMtXFx0c2VsZWN0IFZIT1NUXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTc0LVxcdHNlbGVjdCBJUlFfQllQQVNTX01BTkFHRVJcXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NzU6XFx0ZGVwZW5kcyBvbiBWRFBBXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTc2LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MDY6MDEuMjk2OTExNjQ1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAyNzEyNzg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFuYWx5c2lzIG9mIFRVTiBhbmQgVkhPU1RfTkVUKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGBUVU5gIGFuZCBgVkhPU1RfTkVUYCBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVyZS4gTGV0J3MgZ2V0IHJpZ2h0IHRvIHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIsIHRoZSBrZXkgc3ltYm9scy4gSSdtIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGVzZSBmdW5jdGlvbnMgd2l0aGluIGBkcml2ZXJzL25ldC90dW4uY2A6XG5cbiogICBgdHVuX25ldF94bWl0YCAtIFRoaXMgaXMgY2xlYXJseSBpbXBvcnRhbnQgZm9yIHRyYW5zbWlzc2lvbi5cbiogICBgdHVuX3NldF9pZmZgIC0gRGVmaW5pdGVseSBhIGNyaXRpY2FsIG9uZSBmb3IgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24uXG4qICAgYHR1bl93YWtlX3F1ZXVlYCAtIFRoaXMgaXMgYWx3YXlzIGFuIGludGVyZXN0aW5nIG9uZSByZWxhdGVkIHRvIHF1ZXVlIG1hbmFnZW1lbnQuXG4qICAgYHR1bl9yaW5nX3JlY3ZgIC0gU2VlbXMgdG8gYmUgc3RhdGljLCBidXQgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgb24gaG93IGl0J3MgdXNlZCB3aXRoaW4gdGhlIGZpbGUsIGxpa2VseSB0aHJvdWdoIGB0dW5fZG9fcmVhZGAgb3IgYHR1bl9jaHJfcmVhZF9pdGVyYC5cbiogICBgdHVuX25ldF9jbG9zZWAgLSBNdXN0IGJlIGltcG9ydGFudCBmb3IgY2xlYW51cFxuKiAgIGB0dW5fcXVldWVfcmVzaXplYCAtIEFsd2F5cyBpbXBvcnRhbnQgdG8ga25vdyBob3cgdG8gbWFuYWdlIHRoZSBxdWV1ZSBzaXplXG4qICAgYHR1bl9kZXRhY2hfYWxsYCAtIFBvc3NpYmx5IGltcG9ydGFudCwgd29ydGggYSBsb29rLlxuKiAgIGB0dW5fYXR0YWNoYCAtIGFsc28gYSBzdGF0aWMgZnVuY3Rpb24gY2FsbGVkIGJ5IGB0dW5fc2V0X2lmZmAuXG5cbk5vdywgSSdtIGdvaW5nIHRvIGRvdWJsZSBjaGVjayBgZHJpdmVycy9uZXQvdHVuLmNgIGZvciBob3cgYHR1bl9yaW5nX3JlY3ZgIGFuZCBgdHVuX3dha2VfcXVldWVgIGFyZSB1c2VkOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBjb250ZXh0IHRvIGRldGVybWluZSB0aGVpciB0cnVlIHNpZ25pZmljYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MTQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MDY6MDYuMzI0MDQzNzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MjY0ODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR1bl93YWtlX3F1ZXVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTEwNTk9c3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTEzMC1cXHRcXHRuZXRpZl90eF9zdG9wX3F1ZXVlKHF1ZXVlKTtcXG5kcml2ZXJzL25ldC90dW4uYzoxMTMxOlxcdFxcdC8qIFBhaXJlZCB3aXRoIHNtcF9tYigpIGluIF9fdHVuX3dha2VfcXVldWUoKSAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jLTExMzItXFx0XFx0c21wX21iX19hZnRlcl9hdG9taWMoKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTIxMTQ9c3RhdGljIHNzaXplX3QgdHVuX3B1dF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yMTk4LS8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjIxOTk6c3RhdGljIHZvaWQgX190dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTIyMDAtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgY29uc3VtZWQpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0yMjMyPXN0YXRpYyB2b2lkICp0dW5fcmluZ19jb25zdW1lKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yMjM4LVxcdGlmIChwdHIpXFxuZHJpdmVycy9uZXQvdHVuLmM6MjIzOTpcXHRcXHRfX3R1bl93YWtlX3F1ZXVlKHR1biwgdGZpbGUsIDEpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTIyNDAtXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0zODc2PUVYUE9SVF9TWU1CT0xfR1BMKHR1bl9nZXRfdHhfcmluZyk7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zODc4LS8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjM4Nzk6dm9pZCB0dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNvbnN1bWVkKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM4ODAte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzg5Ni1cXHRpZiAodHVuKVxcbmRyaXZlcnMvbmV0L3R1bi5jOjM4OTc6XFx0XFx0X190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCBjb25zdW1lZCk7XFxuZHJpdmVycy9uZXQvdHVuLmMtMzg5OC1cXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM5MDAtfVxcbmRyaXZlcnMvbmV0L3R1bi5jOjM5MDE6RVhQT1JUX1NZTUJPTF9HUEwodHVuX3dha2VfcXVldWUpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTM5MDItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjA2OjA2LjQwMDMxMzczM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjY2NTIyOTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVFVOL1ZIT1NUIE5ldHdvcmsgSW50ZXJmYWNlIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIFRVTi9WSE9TVCBuZXR3b3JraW5nIGNvZGUgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGludGVyYWN0aW9uIHBvaW50cy4gSSBzZWUgdGhhdCBgdHVuX3dha2VfcXVldWVgIGlzIGV4cG9ydGVkLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHNpZ25hbGluZyBkYXRhIGF2YWlsYWJpbGl0eS4gVGhlbiB3ZSBoYXZlIGB0dW5fbmV0X3htaXRgLCB3aGljaCBpcyB0aGUgbmV0ZGV2IHRyYW5zbWl0IGZ1bmN0aW9uIOKAkyB0aGF0J3MgdGhlIGNvcmUgb2YgaG93IHBhY2tldHMgZ2V0IHNlbnQgb3V0LiBgdHVuX3NldF9pZmZgIGhhbmRsZXMgdGhlIGlvY3RscywgdGhhdCBtYWtlcyBzZW5zZS4gQW5kIGB0dW5fcXVldWVfcmVzaXplYCBpcywgb2YgY291cnNlLCB0aGUgZnVuY3Rpb24gdG8gaGFuZGxlIHF1ZXVlIHNpemUgY2hhbmdlcyBhbmQgaXMgY2FsbGVkIGVpdGhlciBieSBgdHVuX2Nocl9pb2N0bGAgb3IgYHR1bl9uZXRfY2hhbmdlX210dWAuXG5cbk5vdywgdGhpbmdzIGdldCBhIGJpdCBtb3JlIGludHJpY2F0ZSB3aXRoIHRoZSBWSE9TVCBzaWRlLiBJIHNlZSBgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBidXQgaXQgZ2V0cyBjYWxsZWQgZnJvbSBgdmhvc3RfbmV0X2J1Zl9wZWVrYC4gVGhhdCBmdW5jdGlvbiBnZXRzIGNhbGxlZCBmcm9tIGBwZWVrX2hlYWRfbGVuYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgZWl0aGVyIGB2aG9zdF9uZXRfcnhfcGVla19oZWFkX2xlbmAgb3IsIG1vcmUgaW1wb3J0YW50bHksIGBoYW5kbGVfcnhgLiBTbywgYGhhbmRsZV9yeGAgYW5kIGB2aG9zdF9uZXRfcnhfcGVla19oZWFkX2xlbmAgbGlrZWx5IGRvIGEgbG90IG9mIHRoZSBoZWF2eSBsaWZ0aW5nLiBUaW1lIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYGRyaXZlcnMvdmhvc3QvbmV0LmNgIGZpbGUgYW5kIHVuZGVyc3RhbmQgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTcyNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjowNjoxMS4wNjY4NDE5MTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzEyMTMzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF9uZXRfYnVmX3Byb2R1Y2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9uZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L25ldC5jPTE3Mj1zdGF0aWMgdm9pZCAqdmhvc3RfbmV0X2J1Zl9jb25zdW1lKHN0cnVjdCB2aG9zdF9uZXRfYnVmICpyeHEpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE3OC1cXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE3OTpzdGF0aWMgaW50IHZob3N0X25ldF9idWZfcHJvZHVjZShzdHJ1Y3Qgc29jayAqc2ssXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODAtXFx0XFx0XFx0XFx0IHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jPTIyMD1zdGF0aWMgaW50IHZob3N0X25ldF9idWZfcGVlayhzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTIyNy1cXG5kcml2ZXJzL3Zob3N0L25ldC5jOjIyODpcXHRpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShzaywgbnZxKSlcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTIyOS1cXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MDY6MTEuMTgzOTY4OThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2Nzc1MTgwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBEYXRhIEZsb3c6IHZob3N0X25ldF9idWZfcGVlayB0byBoYW5kbGVfcngqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IG1pbmQgaXMgdHJhY2luZyBhIHNwZWNpZmljIHBhdGggd2l0aGluIHRoZSB2aG9zdC1uZXQgZHJpdmVyLCBhbmQgaGVyZSdzIHdoYXQgSSdtIHNlZWluZy4gYHZob3N0X25ldF9idWZfcGVla2AgaXMgdGhlIGtleSBmdW5jdGlvbiBJJ20gZm9jdXNpbmcgb24gcmlnaHQgbm93LiBJdCdzIGRpcmVjdGx5IGludm9rZWQgYnkgYHBlZWtfaGVhZF9sZW5gLCB3aGljaCBpbiB0dXJuLCBpcyBhIGNhbGxlZCBieSBgaGFuZGxlX3J4YC4gVGhpcyBpcyBjbGVhcmx5IHRoZSBkYXRhIHBhdGggSSBuZWVkIHRvIGJlIGNvbmNlcm5lZCB3aXRoLlxuXG5JJ20gZXNzZW50aWFsbHkgdHJhY2tpbmcgZGF0YSB0aHJvdWdoIHRoZSBuZXR3b3JrIHN0YWNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgbXVjaCBkYXRhIGlzIGF2YWlsYWJsZSwgd2hlcmUgaXMgaXQsIGFuZCB3aGF0IGFyZSB0aGUgc3RlcHMgdG8gYWN0dWFsbHkgZ2V0IGl0IHRocm91Z2ggdG8gdGhlIHVzZXIuIGB2aG9zdF9uZXRfYnVmX3BlZWtgIGlzLCBvYnZpb3VzbHksIHRhc2tlZCB3aXRoIGdldHRpbmcgYSBsb29rIGF0IHRoZSBkYXRhIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlci4gYHBlZWtfaGVhZF9sZW5gIHRoZW4gYXBwZWFycyB0byBiZSB1c2luZyB0aGF0IHBlZWsgdG8gd29yayBvdXQgaG93IG11Y2ggaXMgYXQgdGhlIGhlYWQgb2YgdGhlIGJ1ZmZlci4gRmluYWxseSwgYGhhbmRsZV9yeGAuLi4gdGhhdCdzIHdoZXJlIHRoZSBkYXRhIGlzIHVsdGltYXRlbHkgcHJvY2Vzc2VkLiBJdCBzZWVtcyBsaWtlIGl0J3MgdGhlIHBvaW50IHdoZXJlIHRoZSBhY3R1YWwgcmVjZWl2ZSBoYW5kbGluZyBpcyBwZXJmb3JtZWQuIFNvLCBJIHNlZSB0aGlzIGFzIHRoZSBtYWluIFwiZGF0YSByZXRyaWV2YWwgYW5kIHByb2Nlc3NpbmdcIiB0aHJlYWQuIFRoaXMgYWxzbyBpbXBsaWVzIHRoYXQgSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2hlbiBtb2RpZnlpbmcgdGhlIGluaXRpYWwgcGVla2luZyBhcyBpdCBhZmZlY3RzIHRoZSBkYXRhIHRyYW5zZmVyIGFsbCB0aGUgd2F5IHRvIGl0cyBkZXN0aW5hdGlvbi4gVGhpcyBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIG15IGN1cnJlbnQgZGVidWdnaW5nIHRhc2suIE5vdyBJIGp1c3QgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gZWFjaCBmdW5jdGlvbiBhbmQgc2VlIHdoZXJlIHRoZSBrZXkgaW50ZXJhY3Rpb25zLCBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFuZCBhbnkgcG9zc2libGUgZXJyb3JzIGxpZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MzEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjowNjoxNC44NTE3MjU4MDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzODU5Njk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBlZWtfaGVhZF9sZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9uZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L25ldC5jPTk4Mz1zdGF0aWMgdm9pZCBoYW5kbGVfdHgoc3RydWN0IHZob3N0X25ldCAqbmV0KVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDA4LVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTAwOTpzdGF0aWMgaW50IHBlZWtfaGVhZF9sZW4oc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKnJ2cSwgc3RydWN0IHNvY2sgKnNrKVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAxMC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEwMjktXFxuZHJpdmVycy92aG9zdC9uZXQuYzoxMDMwOnN0YXRpYyBpbnQgdmhvc3RfbmV0X3J4X3BlZWtfaGVhZF9sZW4oc3RydWN0IHZob3N0X25ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDMxLVxcdFxcdFxcdFxcdCAgICAgIGJvb2wgKmJ1c3lsb29wX2ludHIsIHVuc2lnbmVkIGludCAqY291bnQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEwMzYtXFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdHZxID0gXFx1MDAyNnRudnEtXFx1MDAzZXZxO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTAzNzpcXHRpbnQgbGVuID0gcGVla19oZWFkX2xlbihybnZxLCBzayk7XFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDM4LVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDQ1LVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTA0NjpcXHRcXHRsZW4gPSBwZWVrX2hlYWRfbGVuKHJudnEsIHNrKTtcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEwNDctXFx0fVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYz0xMTQ5PXN0YXRpYyB2b2lkIGhhbmRsZV9yeChzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEyMDEtXFx0ZG8ge1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTIwMjpcXHRcXHRzb2NrX2xlbiA9IHZob3N0X25ldF9yeF9wZWVrX2hlYWRfbGVuKG5ldCwgc29jay1cXHUwMDNlc2ssXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMjAzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZidXN5bG9vcF9pbnRyLCBcXHUwMDI2Y291bnQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjowNjoxNC45MDU1ODk5NzZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2MTMwMjEyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OlxuXG4qKkZvY3VzaW5nIEluIG9uIFZob3N0LU5ldCBmb3IgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBgdmhvc3RfbmV0YCBtb2R1bGUsIHNwZWNpZmljYWxseSB0aGUgYGhhbmRsZV9yeGAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSBhIHByaW1lIHNwb3QgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBwYWNrZXQgcmVjZXB0aW9uIHBhdGguIEknbSBhbHNvIGpvdHRpbmcgZG93biBhIGZldyBvdGhlciBmdW5jdGlvbnMgdGhhdCBsb29rIHByb21pc2luZyBhcyBJIGV4cGFuZCBteSBzY29wZTogYHR1bl9uZXRfeG1pdGAsIHdoaWNoIHNob3VsZCBoYW5kbGUgdHJhbnNtaXNzaW9uIGZyb20gdGhlIFRVTiBpbnRlcmZhY2UsICBgdHVuX3NldF9pZmZgLCB3aGljaCBoYW5kbGVzIGludGVyZmFjZSBjb25maWd1cmF0aW9uLCBgdHVuX3dha2VfcXVldWVgLCBhbmQgYHR1bl9jaHJfcmVhZF9pdGVyYCB3aGljaCBldmVudHVhbGx5IGNhbGxzIGB0dW5fZG9fcmVhZGAgYW5kIHRoZW4gaW50byBgdHVuX3JpbmdfcmVjdmAuIFRoZXNlLCB0YWtlbiB0b2dldGhlciwgZ2l2ZSBtZSBhIGdvb2QgaW5pdGlhbCByb2FkbWFwIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgdGhyb3VnaCB0aGUgVFVOIGRldmljZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBlbm91Z2ggaW5mbyB0byBtYXAgdGhlIG1ham9yIHBsYXllcnMgYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdG8gaW5zZXJ0IHNvbWUgaW5zdHJ1bWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzMwMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjA2OjE4LjQ2Njg5NDg2N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE2ODUxNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHVuX2Nocl9yZWFkX2l0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdHVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdHVuLmM9MjI4Nz1zdGF0aWMgc3NpemVfdCB0dW5fZG9fcmVhZChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjMyMy1cXG5kcml2ZXJzL25ldC90dW4uYzoyMzI0OnN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG5kcml2ZXJzL25ldC90dW4uYy0yMzI1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTM2MDM9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHVuX2ZvcHMgPSB7XFxuZHJpdmVycy9uZXQvdHVuLmMtMzYwNC1cXHQub3duZXJcXHQ9IFRISVNfTU9EVUxFLFxcbmRyaXZlcnMvbmV0L3R1bi5jOjM2MDU6XFx0LnJlYWRfaXRlciAgPSB0dW5fY2hyX3JlYWRfaXRlcixcXG5kcml2ZXJzL25ldC90dW4uYy0zNjA2LVxcdC53cml0ZV9pdGVyID0gdHVuX2Nocl93cml0ZV9pdGVyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjowNjoxOC41MTg1ODU4ODJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3ODY5NjU0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgYHR1bl9uZXRfY2xvc2VgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSByaWdodCBpbi4gVGhlIGltbWVkaWF0ZSBjb25jZXJuIGlzIHRvIHNjcnV0aW5pemUgdGhlIGB0dW5fbmV0X2Nsb3NlYCBmdW5jdGlvbi4gTXkgbWVudGFsIGNoZWNrbGlzdCBzdGFydHMgcnVubmluZzogd2hhdCdzIHRoZSBjb250ZXh0PyBXaGF0J3MgaXQgc3VwcG9zZWQgdG8gYmUgZG9pbmc/IE1lbW9yeSBsZWFrcz8gUmVzb3VyY2UgY29udGVudGlvbj8gUmFjZSBjb25kaXRpb25zPyBJcyBpdCBqdXN0IGEgd3JhcHBlciwgb3IgZG9lcyBpdCBoYW5kbGUgbW9yZSBpbnRyaWNhdGUgY2xlYW51cD8gU3BlY2lmaWNhbGx5LCBhcmUgd2UgY29ycmVjdGx5IHplcm9pbmcgb3V0IHBvaW50ZXJzLCByZWxlYXNpbmcgYWxsb2NhdGVkIGJ1ZmZlcnMsIGFuZCBtb3N0IGNyaXRpY2FsbHksIGFyZSB3ZSBlbnN1cmluZyB0aGF0IHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgaW50ZXJmYWNlIGlzIGNsZWFubHkgYnJvdWdodCBkb3duIGJlZm9yZSBhbnkgZnVydGhlciBvcGVyYXRpb25zIG9jY3VyPyBJIG5lZWQgdG8gdGhpbmsgdGhyb3VnaCBldmVyeSBwb3NzaWJsZSBmYWlsdXJlIHNjZW5hcmlvIGhlcmU6IHdoYXQgaGFwcGVucyBpZiB0aGUgbmV0d29yayBpbnRlcmZhY2UgZmFpbHMgdG8gY2xvc2UgY2xlYW5seT8gRG9lcyB0aGlzIGltcGFjdCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtPyBBcmUgdGhlcmUgYW55IHNpZ25hbHMgYmVpbmcgaGFuZGxlZCwgYW5kIGNvdWxkIHRoZXkgaW50ZXJydXB0IGNyaXRpY2FsIG9wZXJhdGlvbnM/IFRoaXMgaXMgdGhlIHBvaW50IHRvIGJlIHZlcnkgc2tlcHRpY2FsIGFuZCBsb29rIGZvciBhbGwgcG9zc2libGUgd2VhayBwb2ludHMuIEJldHRlciBiZSBzYWZlIHRoYW4gc29ycnkuIExldCdzIHNlZSBpZiB0aGUgY29kZSBjb21tZW50cyBhcmUgZGVzY3JpcHRpdmUgZW5vdWdoLCBvciBpZiBJIGhhdmUgdG8gc3RlcCB0aHJvdWdoIHRoZSBlbnRpcmUgZnVuY3Rpb24gYW5kIHJlYWQgdGhlIGNvZGUgbGlrZSBhIHBvZW0sIGxpbmUgYnkgbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MzEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjowNjoyMS44OTcyODQ4NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQwMzU3NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHVuX25ldF9jbG9zZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90dW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90dW4uYz03MDY9c3RhdGljIHZvaWQgdHVuX2ZvcmNlX3dha2VfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTcxNC1cXHR0ZmlsZS1cXHUwMDNlY29uc19jbnQgPSAwO1xcbmRyaXZlcnMvbmV0L3R1bi5jOjcxNTpcXHQvKiBUZXN0ZWQgdW5kZXIgdGhlIGxvY2tzIHRoYXQgdHVuX25ldF9jbG9zZSgpIHRha2VzLCBzbyB0aGlzIGNhbiBub3RcXG5kcml2ZXJzL25ldC90dW4uYy03MTYtXFx0ICogdW5kbyBpdHMgc3RvcC4gdHVuX25ldF9vcGVuKCkgd2FrZXMgdGhlIHF1ZXVlcyBvZiBhIGRldmljZSB0aGF0XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz05OTU9c3RhdGljIGludCB0dW5fbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEwMDItLyogTmV0IGRldmljZSBjbG9zZS4gKi9cXG5kcml2ZXJzL25ldC90dW4uYzoxMDAzOnN0YXRpYyBpbnQgdHVuX25ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEwMDQte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MTI2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHR1bl9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTI2NS1cXHQubmRvX29wZW5cXHRcXHQ9IHR1bl9uZXRfb3BlbixcXG5kcml2ZXJzL25ldC90dW4uYzoxMjY2OlxcdC5uZG9fc3RvcFxcdFxcdD0gdHVuX25ldF9jbG9zZSxcXG5kcml2ZXJzL25ldC90dW4uYy0xMjY3LVxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gdHVuX25ldF94bWl0LFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MTM0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRhcF9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTM0OS1cXHQubmRvX29wZW5cXHRcXHQ9IHR1bl9uZXRfb3BlbixcXG5kcml2ZXJzL25ldC90dW4uYzoxMzUwOlxcdC5uZG9fc3RvcFxcdFxcdD0gdHVuX25ldF9jbG9zZSxcXG5kcml2ZXJzL25ldC90dW4uYy0xMzUxLVxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gdHVuX25ldF94bWl0LFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MjE5OT1zdGF0aWMgdm9pZCBfX3R1bl93YWtlX3F1ZXVlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yMjA5LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjIyMTA6XFx0LyogQSBzdG9wIGZyb20gdHVuX25ldF9jbG9zZSgpIGlzIG5vdCBiYWNrcHJlc3N1cmUsIGxlYXZlIGl0IGFsb25lLiAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jLTIyMTEtXFx0aWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKHR1bi1cXHUwMDNlZGV2KSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjA2OjIxLjk4MTMyNTY0MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTc3MDU4NDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVFVOL1ZIT1NUIE5ldHdvcmsgRGV2aWNlIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgVFVOL1ZIT1NUIG5ldHdvcmsgZHJpdmVyLCBhbmQgSSBuZWVkIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNhbGxiYWNrIHN0cnVjdHVyZS4gUmlnaHQsIGxldCdzIHNlZS4gYHR1bl9uZXRfY2xvc2VgIGlzIGRlZmluaXRlbHkgbGlua2VkIHRvIHRoZSBgLm5kb19zdG9wYCBjYWxsYmFjayDigJMgdGhhdCdzIGNsZWFyLiBBbmQgYHR1bl9uZXRfeG1pdGAgY29ycmVzcG9uZHMgdG8gdGhlIGAubmRvX3N0YXJ0X3htaXRgIGNhbGxiYWNrLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgaGFuZGxpbmcgdHJhbnNtaXQgb3BlcmF0aW9ucy4gSSByZW1lbWJlciBzZWVpbmcgYHR1bl9zZXRfaWZmYCBiZWluZyBpbnZva2VkIHdpdGhpbiBgdHVuX2Nocl9pb2N0bGAsIHdoaWNoIGhhbmRsZXMgdGhlIGlvY3RsIGNvbW1hbmRzLiBUaGF0J3MgaG93IGl0J3MgY29uZmlndXJlZCwgZ290IGl0LlxuXG5JIGFsc28gc2VlIHRoYXQgYHR1bl93YWtlX3F1ZXVlYCBpcyBleHBvcnRlZCwgaW1wbHlpbmcgaXQncyBkZXNpZ25lZCB0byBiZSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gdG8gc2lnbmFsIHBhY2tldCBhdmFpbGFiaWxpdHkuIEFuZCwgZm9yIHRoZSBWSE9TVCBzaWRlLCBgaGFuZGxlX3J4YCBpbiBgdmhvc3RfbmV0YCBpcyB0aGUgd29ya2hvcnNlIGhlcmUsIGl0J3MgdGhlIHZob3N0IHdvcmtlciBmb3IgcmVjZWl2ZSBvcGVyYXRpb25zLlxuXG5Ob3csIEkgcmVhbGx5IG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIGhvdyBpbnRlcmZhY2VzIGFyZSBzZXQgdXAuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHdoYXQgY2FsbHMgYHR1bl9zZXRfaWZmYCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gaXMgbWFuYWdlZC4gVGhpcyBpcyBrZXkgZm9yIG92ZXJhbGwgZmxvdyBjb250cm9sLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY5MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjowNjoyNS45NTgzODgyNTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMjk3ODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR1bl9zZXRfaWZmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTI4MjU9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdHVuX2F0dHJfZ3JvdXAgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yODI4LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjI4Mjk6c3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcilcXG5kcml2ZXJzL25ldC90dW4uYy0yODMwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTMxODA9c3RhdGljIGxvbmcgX190dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzIyNy1cXG5kcml2ZXJzL25ldC90dW4uYzozMjI4OlxcdFxcdHJldCA9IHR1bl9zZXRfaWZmKG5ldCwgZmlsZSwgXFx1MDAyNmlmcik7XFxuZHJpdmVycy9uZXQvdHVuLmMtMzIyOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MDY6MjYuMDM4NzMzNjg3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTgxNjA4MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIFRVTi9UQVAgSW50ZXJmYWNlKipcblxuT2theSwgc28gYF9fdHVuX2Nocl9pb2N0bGAgc2VlbXMgbGlrZSBhIGdvb2QgZW50cnkgcG9pbnQuIFRoYXQgbGlrZWx5IGhhbmRsZXMgdGhlIGlvY3RsIGNhbGxzIGZvciB0aGUgVFVOL1RBUCBjaGFyYWN0ZXIgZGV2aWNlLCB3aGljaCBpcyBhIGNvcmUgcGFydCBvZiBpdHMgZnVuY3Rpb25hbGl0eS4gTGV0J3Mgc2VlLi4uIEknbGwgdHJhY2UgdGhyb3VnaCB0aGlzIHRvIHVuZGVyc3RhbmQgaG93IHJlcXVlc3RzIGFyZSByb3V0ZWQgYW5kIGhhbmRsZWQsIGFuZCBtYXliZSBmaW5kIHNvbWUgY2x1ZXMgcmVnYXJkaW5nIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgSSdtIGxvb2tpbmcgZm9yLlxuXG5Ob3csIGxldCdzIHBpdm90IHRvIGludmVzdGlnYXRpbmcgYHR1bl9xdWV1ZV9yZXNpemVgLi4uIHRoYXQgc3VnZ2VzdHMgdGhlcmUncyBhIGR5bmFtaWMgYnVmZmVyIG1hbmFnZW1lbnQgYXNwZWN0IEkgc2hvdWxkIGxvb2sgaW50by4gVGhpcyBjb3VsZCBiZSByZWxldmFudCBmb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIGluIHRoZSBkYXRhIHBhdGguIEnigJlsbCBpbnZlc3RpZ2F0ZSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlZ3JhdGVzIHdpdGggdGhlIGFjdHVhbCBwYWNrZXQgcXVldWVpbmcgYW5kIGRlcXVldWluZyBtZWNoYW5pc21zLiBUaGlzIGNvdWxkIHZlcnkgd2VsbCBsZWFkIG1lIHRvIHRoZSByb290IG9mIHRoZSBwZXJmb3JtYW5jZSBjb25jZXJucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyODYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjowNjoyOS4yOTY5MDA1MTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMDk0MzA5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0dW5fcXVldWVfcmVzaXplXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTM3MjY9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB0dW5fZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNzM5LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjM3NDA6c3RhdGljIGludCB0dW5fcXVldWVfcmVzaXplKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4pXFxuZHJpdmVycy9uZXQvdHVuLmMtMzc0MS17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0zNzc0PXN0YXRpYyBpbnQgdHVuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM3ODUtXFx0Y2FzZSBORVRERVZfQ0hBTkdFX1RYX1FVRVVFX0xFTjpcXG5kcml2ZXJzL25ldC90dW4uYzozNzg2OlxcdFxcdGlmICh0dW5fcXVldWVfcmVzaXplKHR1bikpXFxuZHJpdmVycy9uZXQvdHVuLmMtMzc4Ny1cXHRcXHRcXHRyZXR1cm4gTk9USUZZX0JBRDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MDY6MzAuMjA3ODUxMjEyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMDc2NTE1MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBEZXZpY2UgRXZlbnRzIGluIHRoZSBUVU4gRHJpdmVyKipcblxuT2theSwgc28gYHR1bl9kZXZpY2VfZXZlbnRgIGhhcyBqdXN0IGJlZW4gdHJpZ2dlcmVkLiBUaGF0J3Mgb3VyIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBuZXR3b3JrIGRldmljZSBldmVudHMgd2l0aGluIHRoZSBUVU4gZHJpdmVyIOKAkyBnb3QgaXQuIE5vdywgd2hhdCdzIGhhcHBlbmluZz8gTGV0J3MgcXVpY2tseSBzaGlmdCBnZWFycyBhbmQgY2hlY2sgdGhlIHN0YXR1cyBvZiBgdHVuX2ZvcmNlX3dha2VfcXVldWVgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBldmVudCByZWxhdGVzIHRvIGZvcmNlZCB3YWtlLXVwcy4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoZXJlIG1pZ2h0IGJlIGEgY29ubmVjdGlvbiBoZXJlIGluIGhvdyB0aGUgZXZlbnQgaXMgaGFuZGxlZCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcmVsYXRpb25zaGlwLiBUaGlzIGNvdWxkIGJlIGFib3V0IHJlc291cmNlIG1hbmFnZW1lbnQsIHNpZ25hbGluZywgb3IgZXZlbiBwcmV2ZW50aW5nIGRlYWRsb2NrcyDigJMgYWxsIGNvcmUgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gVGhpcyByZXF1aXJlcyBhIGRlZXBlciBkaXZlIGludG8gdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTczOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjA2OjMzLjMxNTUwNjA3M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAzOTA4ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHVuX2ZvcmNlX3dha2VfcXVldWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdHVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdHVuLmM9NjYyPXN0YXRpYyB2b2lkIHR1bl9kZXRhY2hfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy03MDUtXFxuZHJpdmVycy9uZXQvdHVuLmM6NzA2OnN0YXRpYyB2b2lkIHR1bl9mb3JjZV93YWtlX3F1ZXVlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuZHJpdmVycy9uZXQvdHVuLmMtNzA3LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9NzI1PXN0YXRpYyBpbnQgdHVuX2F0dGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTc3MS1cXHR0ZmlsZS1cXHUwMDNlc29ja2V0LnNrLVxcdTAwM2Vza19zaHV0ZG93biBcXHUwMDI2PSB+UkNWX1NIVVRET1dOO1xcbmRyaXZlcnMvbmV0L3R1bi5jOjc3MjpcXHR0dW5fZm9yY2Vfd2FrZV9xdWV1ZSh0dW4sIHRmaWxlKTtcXG5kcml2ZXJzL25ldC90dW4uYy03NzMtXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0yODI5PXN0YXRpYyBpbnQgdHVuX3NldF9pZmYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlmcmVxICppZnIpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yOTY1LVxcdFxcdG50ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLVxcdTAwM2V0ZmlsZXNbaV0pO1xcbmRyaXZlcnMvbmV0L3R1bi5jOjI5NjY6XFx0XFx0dHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCBudGZpbGUpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTI5NjctXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9Mzc0MD1zdGF0aWMgaW50IHR1bl9xdWV1ZV9yZXNpemUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bilcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM3NjUtXFx0XFx0XFx0dGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cXHUwMDNldGZpbGVzW2ldKTtcXG5kcml2ZXJzL25ldC90dW4uYzozNzY2OlxcdFxcdFxcdHR1bl9mb3JjZV93YWtlX3F1ZXVlKHR1biwgdGZpbGUpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTM3NjctXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjowNjozMy4zOTU5MDE2MzZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg5MzkyODkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVFVOIERyaXZlcidzIFdha2UtVXAgTWVjaGFuaXNtKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGNvcmUgb2YgdGhlIFRVTiBkcml2ZXIncyBpbnRlcmFjdGlvbiB3aXRoIGl0cyBxdWV1ZXMgYW5kIEkgc2VlIHRoYXQgZnVuY3Rpb25zIGxpa2UgYHR1bl9hdHRhY2hgLCBgdHVuX3NldF9pZmZgLCBhbmQgYHR1bl9xdWV1ZV9yZXNpemVgIGFsbCB1bHRpbWF0ZWx5IGZ1bm5lbCBkb3duIHRvIGEgZnVuY3Rpb24gY2FsbGVkIGB0dW5fZm9yY2Vfd2FrZV9xdWV1ZWAuIEludGVyZXN0aW5nLiBUaGF0IGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHNvbWUga2luZCBvZiBkZWxpYmVyYXRlIG1lY2hhbmlzbSBmb3Igc2lnbmFsaW5nIGRhdGEgYXZhaWxhYmlsaXR5IG9yIHN0YXRlIGNoYW5nZXMgdG8gcHJvY2Vzc2VzIHdhaXRpbmcgb24gdGhlc2UgcXVldWVzLiBJdCBhbHNvIG1lYW5zIHRoYXQncyB0aGUgcG9pbnQgd2hlcmUgSSdsbCBwcm9iYWJseSBmaW5kIHRoZSBrZXkgbG9naWMuXG5cbk15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gYF9fdHVuX3dha2VfcXVldWVgLiBUaGF0IGZ1bmN0aW9uJ3MgbGlrZWx5IHRoZSBoZWFydCBvZiB0aGUgd2FrZS11cCBwcm9jZXNzLiBJdOKAmXMgcHJvYmFibHkgd2hlcmUgc2lnbmFscyBhcmUgc2VudCwgb3IgdGhyZWFkcyBhcmUgbm90aWZpZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIHRoZSB3YWtlLXVwLCB3aGF0IGRhdGEgaXQgb3BlcmF0ZXMgb24sIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCB3YWtlLXVwIGFyZSBpbiB0ZXJtcyBvZiBkYXRhIHRyYW5zZmVyIGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uLiBUaGlzIGlzIHdoZXJlIEknbGwgZ2V0IGEgcmVhbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkcml2ZXIncyByZXNwb25zaXZlbmVzcyBhbmQgaG93IGl0IGhhbmRsZXMgY29uY3VycmVuY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDAzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MDY6MzguMjg5ODMzMjUzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDk2ODMzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3R1bl93YWtlX3F1ZXVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTEwNTk9c3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTEzMC1cXHRcXHRuZXRpZl90eF9zdG9wX3F1ZXVlKHF1ZXVlKTtcXG5kcml2ZXJzL25ldC90dW4uYzoxMTMxOlxcdFxcdC8qIFBhaXJlZCB3aXRoIHNtcF9tYigpIGluIF9fdHVuX3dha2VfcXVldWUoKSAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jLTExMzItXFx0XFx0c21wX21iX19hZnRlcl9hdG9taWMoKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTIxMTQ9c3RhdGljIHNzaXplX3QgdHVuX3B1dF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yMTk4LS8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjIxOTk6c3RhdGljIHZvaWQgX190dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTIyMDAtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgY29uc3VtZWQpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0yMjMyPXN0YXRpYyB2b2lkICp0dW5fcmluZ19jb25zdW1lKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yMjM4LVxcdGlmIChwdHIpXFxuZHJpdmVycy9uZXQvdHVuLmM6MjIzOTpcXHRcXHRfX3R1bl93YWtlX3F1ZXVlKHR1biwgdGZpbGUsIDEpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTIyNDAtXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0zODc5PXZvaWQgdHVuX3dha2VfcXVldWUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBjb25zdW1lZClcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM4OTYtXFx0aWYgKHR1bilcXG5kcml2ZXJzL25ldC90dW4uYzozODk3OlxcdFxcdF9fdHVuX3dha2VfcXVldWUodHVuLCB0ZmlsZSwgY29uc3VtZWQpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTM4OTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjA2OjM4LjM4MDgwNzE3NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzQ1MTkwNjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsJ3MgVFVOL1ZIT1NUIE5ldHdvcmsgSW50ZXJmYWNlIENvZGUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBwaW5wb2ludGluZyBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIFRVTi9WSE9TVCBuZXR3b3JraW5nIGltcGxlbWVudGF0aW9uLiBJJ3ZlIGdvdCBhIG1lbnRhbCBjaGVja2xpc3Qgb2Ygc3ltYm9scyB0byBpbnZlc3RpZ2F0ZTogYHR1bl9uZXRfeG1pdGAsIGB0dW5fc2V0X2lmZmAsIGB0dW5fY2hyX2lvY3RsYCwgYHR1bl9jaHJfcmVhZF9pdGVyYCwgYHR1bl9uZXRfY2xvc2VgLCBgdHVuX3F1ZXVlX3Jlc2l6ZWAsIGFuZCBgdHVuX3dha2VfcXVldWVgLiBUaGVzZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4gSSdtIGRlYWxpbmcgd2l0aCB0aGUgZGF0YSBmbG93IGFuZCBjb250cm9sIHdpdGhpbiB0aGUgVFVOIGludGVyZmFjZS5cblxuSG1tLCB3YWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byB2ZXJpZnkgaG93IGB2aG9zdF9uZXRfYnVmX3BlZWtgIG9yIGBoYW5kbGVfcnhgIGFyZSB1c2VkLiBUaGV5IGFyZSBzdGF0aWMsIHdoaWNoIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIGFzIHRob3NlIGZ1bmN0aW9ucyB3b24ndCBiZSBhcyBpbnRlcmVzdGluZyBmb3IgdHJhY2luZyB0aGUgY2FsbGluZyBmbG93IGZyb20gb3V0c2lkZS4gVGhhdCBtZWFucyBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxscyBpbiBgZHJpdmVycy92aG9zdC9uZXQuY2AsIHRvIGNoZWNrIGZvciBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSB2aG9zdCBpbnRlcmZhY2UuIFRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIGV4dGVybmFsbHkgY2FsbGFibGUgZnVuY3Rpb25zLiBUaGlzIHdpbGwgaGVscCBtZSBidWlsZCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgdGhlIGRhdGEgYWN0dWFsbHkgZ2V0cyBpbiBhbmQgb3V0IG9mIHRoZSB2aG9zdCBuZXR3b3JrIGludGVyZmFjZSwgd2hpY2ggaXMgdGhlIGNydXggb2YgdGhlIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTgzLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjA2OjQyLjcyNjAwMjMwNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU1MDgzOTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oW2Etel9BLVowLTldKylcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmM9Mzg9c3RhdGljIGludCBleHBlcmltZW50YWxfemNvcHl0eCA9IDA7XFxuZHJpdmVycy92aG9zdC9uZXQuYzozOTptb2R1bGVfcGFyYW0oZXhwZXJpbWVudGFsX3pjb3B5dHgsIGludCwgMDQ0NCk7XFxuZHJpdmVycy92aG9zdC9uZXQuYzo0MDpNT0RVTEVfUEFSTV9ERVNDKGV4cGVyaW1lbnRhbF96Y29weXR4LCBcXFwiRW5hYmxlIFplcm8gQ29weSBUWDtcXFwiXFxuZHJpdmVycy92aG9zdC9uZXQuYy00MS1cXHRcXHQgICAgICAgICAgICAgICAgICAgICAgIFxcXCIgMSAtRW5hYmxlOyAwIC0gRGlzYWJsZVxcXCIpO1xcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYz0yNDU9c3RhdGljIHN0cnVjdCB2aG9zdF9uZXRfdWJ1Zl9yZWYgKlxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MjQ2OnZob3N0X25ldF91YnVmX2FsbG9jKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBib29sIHpjb3B5KVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMjQ3LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM9MTg5Mz1zdGF0aWMgaW50IF9faW5pdCB2aG9zdF9uZXRfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODk4LX1cXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE4OTk6bW9kdWxlX2luaXQodmhvc3RfbmV0X2luaXQpO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTkwMC1cXG5kcml2ZXJzL3Zob3N0L25ldC5jPTE5MDE9c3RhdGljIHZvaWQgX19leGl0IHZob3N0X25ldF9leGl0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE5MDQtfVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTkwNTptb2R1bGVfZXhpdCh2aG9zdF9uZXRfZXhpdCk7XFxuZHJpdmVycy92aG9zdC9uZXQuYy0xOTA2LVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTkwNzpNT0RVTEVfVkVSU0lPTihcXFwiMC4wLjFcXFwiKTtcXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE5MDg6TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTCB2MlxcXCIpO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTkwOTpNT0RVTEVfQVVUSE9SKFxcXCJNaWNoYWVsIFMuIFRzaXJraW5cXFwiKTtcXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE5MTA6TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJIb3N0IGtlcm5lbCBhY2NlbGVyYXRvciBmb3IgdmlydGlvIG5ldFxcXCIpO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTkxMTpNT0RVTEVfQUxJQVNfTUlTQ0RFVihWSE9TVF9ORVRfTUlOT1IpO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTkxMjpNT0RVTEVfQUxJQVMoXFxcImRldm5hbWU6dmhvc3QtbmV0XFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjA2OjQzLjA4MTA5MjIzMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODE0OTYyODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgZm9yIHRoZSBWaXJ0dWFsIEhvc3QgTmV0d29yayBJbnRlcmZhY2UqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgaGFwcGVuaW5nIGhlcmUuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGNvbWVzIHRvIG1pbmQgaXMgdGhlIHZpcnR1YWwgaG9zdCBuZXR3b3JrIGludGVyZmFjZS4gTXkgZ3V0IHRlbGxzIG1lIHRoYXQncyB0aGUgYXJlYSBJIHNob3VsZCBiZSBmb2N1c2luZyBvbi4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgZGlnZ2luZyBhcm91bmQgZm9yIGFueSBtZW50aW9uIG9mIGB2aG9zdF9uZXRfaW9jdGxgIG9yIHNvbWV0aGluZyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudC4gVGhhdCdzIGEgcHJldHR5IHN0YW5kYXJkIHN0YXJ0aW5nIHBvaW50IHdoZW4gSSdtIGRlYWxpbmcgd2l0aCBuZXR3b3JraW5nIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEl0J3Mgb2Z0ZW4gd2hlcmUgdGhlIGFjdGlvbiBpcywgc28gbGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEl0J3MgdGltZSB0byBzdGFydCBzZWFyY2hpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTc4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MDY6NDUuODk2MDU4MzQ5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzkxNDc0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF9uZXRfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9uZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L25ldC5jPTE3MjY9c3RhdGljIGxvbmcgdmhvc3RfbmV0X3NldF9vd25lcihzdHJ1Y3Qgdmhvc3RfbmV0ICpuKVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xNzQ2LVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTc0NzpzdGF0aWMgbG9uZyB2aG9zdF9uZXRfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE3NDgtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYz0xODc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X25ldF9mb3BzID0ge1xcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODgwLVxcdC5wb2xsICAgICAgICAgICA9IHZob3N0X25ldF9jaHJfcG9sbCxcXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE4ODE6XFx0LnVubG9ja2VkX2lvY3RsID0gdmhvc3RfbmV0X2lvY3RsLFxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTg4Mi1cXHQuY29tcGF0X2lvY3RsICAgPSBjb21wYXRfcHRyX2lvY3RsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjowNjo0NS45Nzk5Nzk1OTJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkzNDUxNDI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25zaWRlcmluZyBgdmhvc3RfbmV0X29wZW5gKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdmlydHVhbCBuZXR3b3JrIGRldmljZSBzZXR1cCwgYW5kIGB2aG9zdF9uZXRfb3BlbmAgaW1tZWRpYXRlbHkganVtcHMgdG8gbWluZC4gSSdtIGZvY3VzaW5nIG9uIGl0IGJlY2F1c2UgaXQncyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50LiBUaGUgaW1wbGljYXRpb25zIG9mIHdoYXQgaXQgZG9lcywgb3IgZG9lc24ndCBkbywgYXJlIHNpZ25pZmljYW50IGZvciBwZXJmb3JtYW5jZSwgc2VjdXJpdHksIGFuZCBzdGFiaWxpdHkuIEknbSB3b25kZXJpbmcgaWYgYSByZWNlbnQgY2hhbmdlIHRvIHRoYXQgc2VjdGlvbiBpcyB0aGUgc291cmNlIG9mIHRoZSBpc3N1ZS4gQSBuZXcgY29uZmlndXJhdGlvbj8gQSBuZXcgdmVyc2lvbj8gQSByZWZhY3RvciB0aGF0IHRvdWNoZWQgb24gZGV2aWNlIGNhcGFiaWxpdGllcz8gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxvd3MgaW52b2x2ZWQgaW4gdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgZnJvbSBgdmhvc3RfbmV0X29wZW5gPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgSSdtIG1pc3Npbmc/IEFuZCBkb2VzIGl0IHBsYXkgd2VsbCB3aXRoIHRoZSBoeXBlcnZpc29yP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxODYyMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjA2OjUwLjkxNDQ5NzE0NloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg0MjkxMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfbmV0X29wZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9uZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L25ldC5jPTEzMzE9c3RhdGljIHZvaWQgaGFuZGxlX3J4X25ldChzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTMzNy1cXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEzMzg6c3RhdGljIGludCB2aG9zdF9uZXRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEzMzkte1xcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYz0xODc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X25ldF9mb3BzID0ge1xcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODgyLVxcdC5jb21wYXRfaW9jdGwgICA9IGNvbXBhdF9wdHJfaW9jdGwsXFxuZHJpdmVycy92aG9zdC9uZXQuYzoxODgzOlxcdC5vcGVuICAgICAgICAgICA9IHZob3N0X25ldF9vcGVuLFxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTg4NC1cXHQubGxzZWVrXFx0XFx0PSBub29wX2xsc2VlayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MDY6NTAuOTgyOTMwNzg5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNzI3MDkyNTY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFRyYWNpbmcgS2V5IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHZob3N0LW5ldCBhbmQgdHVuLmMgY29kZS4gVGhlIGNyaXRpY2FsIHRoaW5nIHRvIHJlbWVtYmVyIGlzIHRoYXQgdGhlIHZob3N0IHdvcmtlciBydW5zIGluIGEga2VybmVsIHRocmVhZCwgc28gaXQncyBub3QgYSBkaXJlY3Qgc3lzY2FsbCBlbnRyeS4gVGhlIHJlYWwgZW50cnkgcG9pbnRzIEkgbmVlZCB0byBmb2N1cyBvbiBhcmUgYHZob3N0X25ldF9pb2N0bGAgYW5kIGB2aG9zdF9uZXRfb3BlbmAuIFdoaWxlIHRob3NlIGhhbmRsZSB0aGUgaW5pdGlhbCBzZXR1cCwgSSBrbm93IGBoYW5kbGVfcnhgIGlzIHdoZXJlIHRoZSByZWFsIHByb2Nlc3NpbmcgaGFwcGVucywgc28gSSdsbCBkZWZpbml0ZWx5IGtlZXAgYW4gZXllIG9uIHRoYXQuIEknbGwgaW5jbHVkZSBgdmhvc3RfbmV0X2lvY3RsYCBhbmQgYHZob3N0X25ldF9vcGVuYCBpbiBteSBpbnZlc3RpZ2F0aW9uLlxuXG5Ob3csIGZvciBgdHVuLmNgLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgZnVuY3Rpb25zIHRoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgYHR1bl9jaHJfaW9jdGxgLCB0aGVuIGB0dW5fY2hyX3JlYWRfaXRlcmAuIEknbGwgYWxzbyBhZGQgYHR1bl9uZXRfeG1pdGAsIGB0dW5fbmV0X2Nsb3NlYCwgYHR1bl9zZXRfaWZmYCwgYW5kIGB0dW5fd2FrZV9xdWV1ZWAgdG8gdGhlIGxpc3QuIFRoZXkgYWxsIHNlZW0gbGlrZSB0aGV5IGNvdWxkIGJlIGltcG9ydGFudCBwaWVjZXMgb2YgdGhlIHB1enpsZS4gSeKAmWxsIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgdHVuX2Nocl9pb2N0bGAgdG8gZ2V0IGEgZmVlbCBmb3IgaG93IGl0IHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA3MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjowODo1OC4yNTM4NjAwNjhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDczOTQwODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHVuX2Nocl9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90dW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90dW4uYz0zMTQyPXN0YXRpYyB1bnNpZ25lZCBjaGFyIHR1bl9nZXRfYWRkcl9sZW4odW5zaWduZWQgc2hvcnQgdHlwZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTMxNzktXFxuZHJpdmVycy9uZXQvdHVuLmM6MzE4MDpzdGF0aWMgbG9uZyBfX3R1bl9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXFxuZHJpdmVycy9uZXQvdHVuLmMtMzE4MS1cXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhcmcsIGludCBpZnJlcV9sZW4pXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zMjU2LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjMyNTc6XFx0bmV0aWZfaW5mbyh0dW4sIGRydiwgdHVuLVxcdTAwM2VkZXYsIFxcXCJ0dW5fY2hyX2lvY3RsIGNtZCAldVxcXFxuXFxcIiwgY21kKTtcXG5kcml2ZXJzL25ldC90dW4uYy0zMjU4LVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ3My1cXG5kcml2ZXJzL25ldC90dW4uYzozNDc0OnN0YXRpYyBsb25nIHR1bl9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsXFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ3NS1cXHRcXHRcXHQgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM0NzYte1xcbmRyaXZlcnMvbmV0L3R1bi5jOjM0Nzc6XFx0cmV0dXJuIF9fdHVuX2Nocl9pb2N0bChmaWxlLCBjbWQsIGFyZywgc2l6ZW9mIChzdHJ1Y3QgaWZyZXEpKTtcXG5kcml2ZXJzL25ldC90dW4uYy0zNDc4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTM0ODE9c3RhdGljIGxvbmcgdHVuX2Nocl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNTA0LVxcdCAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjM1MDU6XFx0cmV0dXJuIF9fdHVuX2Nocl9pb2N0bChmaWxlLCBjbWQsIGFyZywgc2l6ZW9mKHN0cnVjdCBjb21wYXRfaWZyZXEpKTtcXG5kcml2ZXJzL25ldC90dW4uYy0zNTA2LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTM2MDM9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHVuX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNjA3LVxcdC5wb2xsXFx0PSB0dW5fY2hyX3BvbGwsXFxuZHJpdmVycy9uZXQvdHVuLmM6MzYwODpcXHQudW5sb2NrZWRfaW9jdGxcXHQ9IHR1bl9jaHJfaW9jdGwsXFxuZHJpdmVycy9uZXQvdHVuLmMtMzYwOS0jaWZkZWYgQ09ORklHX0NPTVBBVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjowODo1OS41MDEyNjQ4MDNaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0MDI2OTQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBJT0NUTCBQcm9jZXNzKipcblxuT2theSwgc28gd2UncmUgc3RhcnRpbmcgd2l0aCBgdHVuX2Nocl9pb2N0bGAuIFRoYXQncyBvdXIgZW50cnkgcG9pbnQsIHRoZSBmaXJzdCBwbGFjZSB0aGUga2VybmVsIGlzIGhhbmRsaW5nIG91ciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBUVU4gZGV2aWNlLiBLbm93aW5nIHRoYXQncyB3aGVyZSB3ZSdyZSBhdCBoZWxwcyBmcmFtZSBldmVyeXRoaW5nIGVsc2UuIE5vdywgZnJvbSB0aGVyZSwgSSBuZWVkIHRvIGtub3cgKndoYXQqIHRoYXQgaW5pdGlhbCBpbnRlcmFjdGlvbiB0cmlnZ2Vycy4gR2l2ZW4gdGhlIHRhc2sgYXQgaGFuZCwgSSB0aGluayBpdCdzIHRpbWUgdG8gY2hlY2sgb3V0IGhvdyBgdHVuX25ldF94bWl0YCBmaXRzIGludG8gYWxsIHRoaXMuIFdlIG5lZWQgdG8gYmUgY2hlY2tpbmcgdGhlIGRhdGEgdHJhbnNtaXQgcGF0aCwgYW5kIHRoaXMgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDMyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MDk6MDIuNTQxNTM4MjQyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTg0MTUxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0dW5fbmV0X3htaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdHVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdHVuLmM9MTA0Nj1zdGF0aWMgdW5zaWduZWQgaW50IHJ1bl9lYnBmX2ZpbHRlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTA1OC0vKiBOZXQgZGV2aWNlIHN0YXJ0IHhtaXQgKi9cXG5kcml2ZXJzL25ldC90dW4uYzoxMDU5OnN0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC90dW4uYy0xMDYwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTEyNjI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0dW5fbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEyNjYtXFx0Lm5kb19zdG9wXFx0XFx0PSB0dW5fbmV0X2Nsb3NlLFxcbmRyaXZlcnMvbmV0L3R1bi5jOjEyNjc6XFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSB0dW5fbmV0X3htaXQsXFxuZHJpdmVycy9uZXQvdHVuLmMtMTI2OC1cXHQubmRvX2ZpeF9mZWF0dXJlc1xcdD0gdHVuX25ldF9maXhfZmVhdHVyZXMsXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0xMzQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdGFwX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xMzUwLVxcdC5uZG9fc3RvcFxcdFxcdD0gdHVuX25ldF9jbG9zZSxcXG5kcml2ZXJzL25ldC90dW4uYzoxMzUxOlxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gdHVuX25ldF94bWl0LFxcbmRyaXZlcnMvbmV0L3R1bi5jLTEzNTItXFx0Lm5kb19maXhfZmVhdHVyZXNcXHQ9IHR1bl9uZXRfZml4X2ZlYXR1cmVzLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MjE5OT1zdGF0aWMgdm9pZCBfX3R1bl93YWtlX3F1ZXVlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yMjE5LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjIyMjA6XFx0LyogUGFpcmVkIHdpdGggc21wX21iX19hZnRlcl9hdG9taWMoKSBpbiB0dW5fbmV0X3htaXQoKSAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jLTIyMjEtXFx0c21wX21iKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjA5OjAyLjYwMTM4NTg1NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDQyMDIzMDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBQYXRjaCBvbiBUdW4vVGFwIERyaXZlcnMqKlxuXG5Pa2F5LCBzbyB0aGUgcGF0Y2ggaXMgZnVuY3Rpb25hbCwgYW5kIGl0J3MgbW9kaWZ5aW5nIHRoZSBjb3JlIHR1bi90YXAgZHJpdmVycywgd2hpY2ggbWVhbnMgaXQncyBwcmV0dHkgZnVuZGFtZW50YWwuIEdvb2QsIGdvb2QuIEkgc2VlIGl0J3MgcmVhY2hhYmxlIGFuZCB0aGUgY29uZmlncyBhcmUgYFRVTmAgYW5kIGBWSE9TVF9ORVRgLlxuXG5JIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBrZXkgZnVuY3Rpb25zIGFmZmVjdGVkLCBsZXQncyBzZWUuLi4gdGhlIGZvY3VzIHN5bWJvbHMgYXJlIGB0dW5fbmV0X3htaXRgLCBgdHVuX3NldF9pZmZgLCBgdHVuX2Nocl9pb2N0bGAsIGB0dW5fY2hyX3JlYWRfaXRlcmAsIGB0dW5fbmV0X2Nsb3NlYCwgYHR1bl9xdWV1ZV9yZXNpemVgLCBgdHVuX3dha2VfcXVldWVgLCBgdmhvc3RfbmV0X2lvY3RsYCwgYW5kIGB2aG9zdF9uZXRfb3BlbmAuIEdvdCBpdC4gTm93LCBhcmUgdGhlcmUgYW55IGRlcGVuZGVuY2llcyBmb3IgYFZIT1NUX05FVGAgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZj9cblxuTGV0J3MgY2hlY2vigKYgaXQgZGVwZW5kcyBvbiBgTkVUIFx1MDAyNlx1MDAyNiBFVkVOVEZEIFx1MDAyNlx1MDAyNiAoVFVOIHx8ICFUVU4pIFx1MDAyNlx1MDAyNiAoVEFQIHx8ICFUQVApYC4gSG1tLCBgRVZFTlRGRGAgaXMgdHlwaWNhbGx5IGVuYWJsZWQsIGFuZCBgTkVUYCBhbHNvLiAgV2UncmUgZXhwbGljaXRseSBlbmFibGluZyBgVFVOYCwgc28gdGhhdCdzIGNvdmVyZWQuXG5cbldhaXQgYSBzZWNvbmQsIGB0dW5fd2FrZV9xdWV1ZWAgaXMgZXhwb3J0ZWQsIHNvIHRoYXQgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1cnRoZXIgc2NydXRpbnkuIEFuZCBJIHJlY2FsbCBgdHVuX3NldF9pZmZgIGlzIGNhbGxlZCBmcm9tIGB0dW5fY2hyX2lvY3RsYCwgYW5kIGB0dW5fcXVldWVfcmVzaXplYCBpcyBjYWxsZWQgZnJvbSBib3RoIGB0dW5fZGV2aWNlX2V2ZW50YCBhbmQgYHR1bl9jaHJfaW9jdGxgLiBPa2F5LCB0aGF0J3MgdXNlZnVsIGNvbnRleHQuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIE5vcGUsIHNlZW1zIGBDT05GSUdfVFVOYCBpcyBzdWZmaWNpZW50IGZvciBgdHVuLmNgIGFuZCBgQ09ORklHX1ZIT1NUX05FVGAgY292ZXJzIGB2aG9zdC9uZXQuY2AuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgbm93LiBJJ2xsIHNldCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3MDEsIk91dHB1dFRva2VucyI6MjA4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjA5OjA5LjY0MzQyMDU0NVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODcwODU4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFVOXCIsXG4gICAgXCJWSE9TVF9ORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0dW5fbmV0X3htaXRcIixcbiAgICBcInR1bl9zZXRfaWZmXCIsXG4gICAgXCJ0dW5fY2hyX2lvY3RsXCIsXG4gICAgXCJ0dW5fY2hyX3JlYWRfaXRlclwiLFxuICAgIFwidHVuX25ldF9jbG9zZVwiLFxuICAgIFwidHVuX3F1ZXVlX3Jlc2l6ZVwiLFxuICAgIFwidHVuX3dha2VfcXVldWVcIixcbiAgICBcInZob3N0X25ldF9pb2N0bFwiLFxuICAgIFwidmhvc3RfbmV0X29wZW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgKElGRl9CQUNLUFJFU1NVUkUpIHRvIHRoZSBUVU4vVEFQIGRyaXZlciwgYWxsb3dpbmcgdGhlIGtlcm5lbCB0byBzdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHBhY2tldHMgd2hlbiB0aGUgaW50ZXJuYWwgcmluZyBidWZmZXIgaXMgZnVsbC4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgYW5kIFRVTi9UQVAgZHJpdmVyIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gSXQgYWxzbyBtb2RpZmllcyB0aGUgdmhvc3QtbmV0IGRyaXZlciB0byB3YWtlIHRoZSBxdWV1ZSB3aGVuIGl0ZW1zIGFyZSBjb25zdW1lZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUVU5cIixcbiAgICBcIlZIT1NUX05FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInR1bl9uZXRfeG1pdFwiLFxuICAgIFwidHVuX3NldF9pZmZcIixcbiAgICBcInR1bl9jaHJfaW9jdGxcIixcbiAgICBcInR1bl9jaHJfcmVhZF9pdGVyXCIsXG4gICAgXCJ0dW5fbmV0X2Nsb3NlXCIsXG4gICAgXCJ0dW5fcXVldWVfcmVzaXplXCIsXG4gICAgXCJ0dW5fd2FrZV9xdWV1ZVwiLFxuICAgIFwidmhvc3RfbmV0X2lvY3RsXCIsXG4gICAgXCJ2aG9zdF9uZXRfb3BlblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSAoSUZGX0JBQ0tQUkVTU1VSRSkgdG8gdGhlIFRVTi9UQVAgZHJpdmVyLCBhbGxvd2luZyB0aGUga2VybmVsIHRvIHN0b3AgdGhlIHF1ZXVlIGluc3RlYWQgb2YgZHJvcHBpbmcgcGFja2V0cyB3aGVuIHRoZSBpbnRlcm5hbCByaW5nIGJ1ZmZlciBpcyBmdWxsLiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBhbmQgVFVOL1RBUCBkcml2ZXIgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSB2aG9zdC1uZXQgZHJpdmVyIHRvIHdha2UgdGhlIHF1ZXVlIHdoZW4gaXRlbXMgYXJlIGNvbnN1bWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlxlqp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 02:02:10 +0000 UTC FinishedAt: 2026-08-04 02:09:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN", "VHOST_NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN", "VHOST_NET" ], "series_id": "2ea0ccf2-9452-423f-8732-44c08f49c418" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "tun_net_xmit", "tun_set_iff", "tun_chr_ioctl", "tun_chr_read_iter", "tun_net_close", "tun_queue_resize", "tun_wake_queue", "vhost_net_ioctl", "vhost_net_open" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7LAogICAgJiMzNDtWSE9TVF9ORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0dW5fbmV0X3htaXQmIzM0OywKICAgICYjMzQ7dHVuX3NldF9pZmYmIzM0OywKICAgICYjMzQ7dHVuX2Nocl9pb2N0bCYjMzQ7LAogICAgJiMzNDt0dW5fY2hyX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDt0dW5fbmV0X2Nsb3NlJiMzNDssCiAgICAmIzM0O3R1bl9xdWV1ZV9yZXNpemUmIzM0OywKICAgICYjMzQ7dHVuX3dha2VfcXVldWUmIzM0OywKICAgICYjMzQ7dmhvc3RfbmV0X2lvY3RsJiMzNDssCiAgICAmIzM0O3Zob3N0X25ldF9vcGVuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSAoSUZGX0JBQ0tQUkVTU1VSRSkgdG8gdGhlIFRVTi9UQVAgZHJpdmVyLCBhbGxvd2luZyB0aGUga2VybmVsIHRvIHN0b3AgdGhlIHF1ZXVlIGluc3RlYWQgb2YgZHJvcHBpbmcgcGFja2V0cyB3aGVuIHRoZSBpbnRlcm5hbCByaW5nIGJ1ZmZlciBpcyBmdWxsLiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBhbmQgVFVOL1RBUCBkcml2ZXIgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSB2aG9zdC1uZXQgZHJpdmVyIHRvIHdha2UgdGhlIHF1ZXVlIHdoZW4gaXRlbXMgYXJlIGNvbnN1bWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWEzMjBkOTJiZGE2ODE4YTQ1YmQ2MWEyYWUwZTg5ODFmYTYyYTUzM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDQgMDI6MDU6NDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdFxuaW5kZXggNGQ3MDg3ZjcyN2JlNS4uNTZjOWRjN2I5NmFmYiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdFxuQEAgLTIwNiw2ICYjNDM7MjA2LDM4IEBAIGVuYWJsZSBpcyB0cnVlIHdlIGVuYWJsZSBpdCwgb3RoZXJ3aXNlIHdlIGRpc2FibGUgaXQ6OlxuICAgICAgIHJldHVybiBpb2N0bChmZCwgVFVOU0VUUVVFVUUsICh2b2lkICopXHUwMDI2aWZyKTtcbiAgIH1cbiBcbiYjNDM7My40IHFkaXNjIGJhY2twcmVzc3VyZVxuJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzO1xuJiM0MztJRkZfQkFDS1BSRVNTVVJFIGNhbiBiZSBzZXQgdG8gZW5hYmxlIHFkaXNjIGJhY2twcmVzc3VyZS4gV2l0aG91dCBpdCwgVFhcbiYjNDM7ZHJvcHMgb2NjdXIgd2hlbiB0aGUgaW50ZXJuYWwgcmluZyBidWZmZXIgaXMgZnVsbCwgc28gYW55IGF0dGFjaGVkIHFkaXNjXG4mIzQzO2lzIGVmZmVjdGl2ZWx5IGJ5cGFzc2VkIGFuZCBhcHBsaWNhdGlvbnMgb25seSBsZWFybiBhYm91dCBjb25nZXN0aW9uXG4mIzQzO3Rocm91Z2ggdGhvc2UgZHJvcHMuXG4mIzQzO1xuJiM0MztXaXRoIGl0LCB0aGUga2VybmVsIHN0b3BzIHRoZSBxdWV1ZSBpbnN0ZWFkLCBsZXR0aW5nIHRoZSBxZGlzYyBob2xkIGFuZFxuJiM0MztzY2hlZHVsZSBwYWNrZXRzLCBzbyBpdHMgQVFNLCBzaGFwaW5nIGFuZCBmYWlybmVzcyBhY3R1YWxseSBhcHBseS4gVGhpc1xuJiM0MztoZWxwcyBwcm90b2NvbHMgbGlrZSBUQ1AsIHdoaWNoIGN1dCB0aHJvdWdocHV0IGluIHJlYWN0aW9uIHRvIHBhY2tldFxuJiM0Mztkcm9wcy4gV2l0aCBJRkZfQkFDS1BSRVNTVVJFLCBkcm9wcyB0aGVuIG9ubHkgb2NjdXIgYXMgYSByYXJlIHJhY2UuXG4mIzQzO0JhY2twcmVzc3VyZSByZXF1aXJlcyBhIHFkaXNjIHRvIGJlIGF0dGFjaGVkIGFuZCBoYXMgbm8gZWZmZWN0IHdpdGhcbiYjNDM7bm9xdWV1ZS5cbiYjNDM7XG4mIzQzO1RoZSBmbGFnIGlzIGEgcHJvcGVydHkgb2YgdGhlIFRVTi9UQVAgZGV2aWNlIHJhdGhlciB0aGFuIG9mIHRoZSBmaWxlXG4mIzQzO2Rlc2NyaXB0b3IgaXQgd2FzIHNldCBvbiwgc28gaXQgYXBwbGllcyB0byBhbGwgcXVldWVzIG9mIHRoZSBkZXZpY2UsXG4mIzQzO3JlZ2FyZGxlc3Mgb2Ygd2hpY2ggcHJvY2VzcyBvcGVuZWQgd2hpY2ggcXVldWUuXG4mIzQzO1xuJiM0MztUaGUgZmxhZyBjYW4gb25seSBiZSBjaGFuZ2VkIHdoaWxlIHRoZSBkZXZpY2UgaGFzIGF0IG1vc3Qgb25lIHF1ZXVlLiBPbiBhXG4mIzQzO211bHRpcXVldWUgZGV2aWNlIHRoYXQgYWxyZWFkeSBoYXMgYSBzZWNvbmQgcXVldWUgYXR0YWNoZWQgb3IgZGV0YWNoZWQsIGFcbiYjNDM7bGF0ZXIgVFVOU0VUSUZGIHN1Y2NlZWRzIGJ1dCBsZWF2ZXMgdGhlIGZsYWcgYXMgaXQgaXMuIEFsbCB0aGUgb3RoZXJcbiYjNDM7VFVOU0VUSUZGIGZsYWdzIGJlaGF2ZSB0aGUgc2FtZSB3YXkuXG4mIzQzO1xuJiM0MztUaGUgdHhxdWV1ZWxlbiBjYW4gYmUgcmVkdWNlZCBhbG9uZ3NpZGUgdGhpcyBmbGFnIHRvIGZ1cnRoZXIgc2hpZnRcbiYjNDM7YnVmZmVyaW5nIGludG8gdGhlIHFkaXNjIGFuZCByZWR1Y2UgYnVmZmVyYmxvYXQsIGF0IGEgcG9zc2libGVcbiYjNDM7cGVyZm9ybWFuY2UgY29zdC5cbiYjNDM7XG4mIzQzO1doZW4gcnVubmluZyBtdWx0aXBsZSBuZXR3b3JrIHN0cmVhbXMgaW4gcGFyYWxsZWwgdGhyb3VnaCBhIHNpbmdsZVxuJiM0MztUVU4vVEFQIHF1ZXVlLCB0aGUgZmxhZyBtYXkgcmVkdWNlIHBlcmZvcm1hbmNlIGR1ZSB0byB0aGUgZXh0cmEgb3ZlcmhlYWRcbiYjNDM7b2YgdGhlIGJhY2twcmVzc3VyZSBtZWNoYW5pc20uXG4mIzQzO1xuIFVuaXZlcnNhbCBUVU4vVEFQIGRldmljZSBkcml2ZXIgRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvblxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bi5jIGIvZHJpdmVycy9uZXQvdHVuLmNcbmluZGV4IDUxZTgwMDAwYmQwZWQuLmVjOTBmZWY0YTQyZjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC90dW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdHVuLmNcbkBAIC05OCw3ICYjNDM7OTgsOCBAQCBzdGF0aWMgdm9pZCB0dW5fZGVmYXVsdF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuICNkZWZpbmUgVFVOX0ZBU1lOQ1x0SUZGX0FUVEFDSF9RVUVVRVxuIFxuICNkZWZpbmUgVFVOX0ZFQVRVUkVTIChJRkZfTk9fUEkgfCBJRkZfT05FX1FVRVVFIHwgSUZGX1ZORVRfSERSIHwgXFxcbi1cdFx0ICAgICAgSUZGX01VTFRJX1FVRVVFIHwgSUZGX05BUEkgfCBJRkZfTkFQSV9GUkFHUylcbiYjNDM7XHRcdCAgICAgIElGRl9NVUxUSV9RVUVVRSB8IElGRl9OQVBJIHwgSUZGX05BUElfRlJBR1MgfCBcXFxuJiM0MztcdFx0ICAgICAgSUZGX0JBQ0tQUkVTU1VSRSlcbiBcbiAjZGVmaW5lIEdPT0RDT1BZX0xFTiAxMjhcbiBcbkBAIC0xNDUsNiAmIzQzOzE0Niw4IEBAIHN0cnVjdCB0dW5fZmlsZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG5leHQ7XG4gXHRzdHJ1Y3QgdHVuX3N0cnVjdCAqZGV0YWNoZWQ7XG4gXHRzdHJ1Y3QgcHRyX3JpbmcgdHhfcmluZztcbiYjNDM7XHQvKiBQcm90ZWN0ZWQgYnkgdHhfcmluZy5jb25zdW1lcl9sb2NrICovXG4mIzQzO1x0aW50IGNvbnNfY250O1xuIFx0c3RydWN0IHhkcF9yeHFfaW5mbyB4ZHBfcnhxO1xuIH07XG4gXG5AQCAtNTg1LDExICYjNDM7NTg4LDE2IEBAIHN0YXRpYyB2b2lkIF9fdHVuX2RldGFjaChzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBib29sIGNsZWFuKVxuIFx0XHR1MTYgaW5kZXggPSB0ZmlsZS1cdTAwM2VxdWV1ZV9pbmRleDtcbiBcdFx0QlVHX09OKGluZGV4IFx1MDAzZT0gdHVuLVx1MDAzZW51bXF1ZXVlcyk7XG4gXG4mIzQzO1x0XHRzcGluX2xvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHR1bi1cdTAwM2V0ZmlsZXNbaW5kZXhdLFxuIFx0XHRcdFx0ICAgdHVuLVx1MDAzZXRmaWxlc1t0dW4tXHUwMDNlbnVtcXVldWVzIC0gMV0pO1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbiBcdFx0bnRmaWxlID0gcnRubF9kZXJlZmVyZW5jZSh0dW4tXHUwMDNldGZpbGVzW2luZGV4XSk7XG4mIzQzO1x0XHRzcGluX2xvY2soXHUwMDI2bnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4gXHRcdG50ZmlsZS1cdTAwM2VxdWV1ZV9pbmRleCA9IGluZGV4O1xuIFx0XHRudGZpbGUtXHUwMDNleGRwX3J4cS5xdWV1ZV9pbmRleCA9IGluZGV4O1xuJiM0MztcdFx0bnRmaWxlLVx1MDAzZWNvbnNfY250ID0gMDtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrKFx1MDAyNm50ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIodHVuLVx1MDAzZXRmaWxlc1t0dW4tXHUwMDNlbnVtcXVldWVzIC0gMV0sXG4gXHRcdFx0XHQgICBOVUxMKTtcbiBcbkBAIC02MDYsNiAmIzQzOzYxNCwxNCBAQCBzdGF0aWMgdm9pZCBfX3R1bl9kZXRhY2goc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgYm9vbCBjbGVhbilcbiBcdFx0dHVuX2Zsb3dfZGVsZXRlX2J5X3F1ZXVlKHR1biwgdHVuLVx1MDAzZW51bXF1ZXVlcyAmIzQzOyAxKTtcbiBcdFx0LyogRHJvcCByZWFkIHF1ZXVlICovXG4gXHRcdHR1bl9xdWV1ZV9wdXJnZSh0ZmlsZSk7XG4mIzQzO1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2bnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4mIzQzO1x0XHRzcGluX2xvY2soXHUwMDI2bnRmaWxlLVx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XG4mIzQzO1x0XHRudGZpbGUtXHUwMDNlY29uc19jbnQgPSAwO1xuJiM0MztcdFx0aWYgKG5ldGlmX3J1bm5pbmcodHVuLVx1MDAzZWRldikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgX19wdHJfcmluZ19lbXB0eShcdTAwMjZudGZpbGUtXHUwMDNldHhfcmluZykpXG4mIzQzO1x0XHRcdG5ldGlmX3dha2Vfc3VicXVldWUodHVuLVx1MDAzZWRldiwgaW5kZXgpO1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2bnRmaWxlLVx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZudGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbiBcdFx0dHVuX3NldF9yZWFsX251bV9xdWV1ZXModHVuKTtcbiBcdH0gZWxzZSBpZiAodGZpbGUtXHUwMDNlZGV0YWNoZWQgXHUwMDI2XHUwMDI2IGNsZWFuKSB7XG4gXHRcdHR1biA9IHR1bl9lbmFibGVfcXVldWUodGZpbGUpO1xuQEAgLTY4Nyw2ICYjNDM7NzAzLDI1IEBAIHN0YXRpYyB2b2lkIHR1bl9kZXRhY2hfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgdHVuX2ZvcmNlX3dha2VfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbiYjNDM7XHRcdFx0XHQgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcbiYjNDM7e1xuJiM0MztcdC8qIEVuc3VyZSB0aGF0IHRoZSBwcm9kdWNlciBjYW4gbm90IHN0b3AgdGhlXG4mIzQzO1x0ICogcXVldWUgY29uY3VycmVudGx5IGJ5IHRha2luZyBsb2Nrcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcbiYjNDM7XHR0ZmlsZS1cdTAwM2Vjb25zX2NudCA9IDA7XG4mIzQzO1x0LyogVGVzdGVkIHVuZGVyIHRoZSBsb2NrcyB0aGF0IHR1bl9uZXRfY2xvc2UoKSB0YWtlcywgc28gdGhpcyBjYW4gbm90XG4mIzQzO1x0ICogdW5kbyBpdHMgc3RvcC4gdHVuX25ldF9vcGVuKCkgd2FrZXMgdGhlIHF1ZXVlcyBvZiBhIGRldmljZSB0aGF0XG4mIzQzO1x0ICogY29tZXMgYmFjayB1cC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobmV0aWZfcnVubmluZyh0dW4tXHUwMDNlZGV2KSlcbiYjNDM7XHRcdG5ldGlmX3dha2Vfc3VicXVldWUodHVuLVx1MDAzZWRldiwgdGZpbGUtXHUwMDNlcXVldWVfaW5kZXgpO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHR1bl9hdHRhY2goc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdCAgICAgIGJvb2wgc2tpcF9maWx0ZXIsIGJvb2wgbmFwaSwgYm9vbCBuYXBpX2ZyYWdzLFxuIFx0XHQgICAgICBib29sIHB1Ymxpc2hfdHVuKVxuQEAgLTczMCw4ICYjNDM7NzY1LDExIEBAIHN0YXRpYyBpbnQgdHVuX2F0dGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4gXHR0ZmlsZS1cdTAwM2VxdWV1ZV9pbmRleCA9IHR1bi1cdTAwM2VudW1xdWV1ZXM7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbiBcdHRmaWxlLVx1MDAzZXNvY2tldC5zay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjY9IH5SQ1ZfU0hVVERPV047XG4mIzQzO1x0dHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCB0ZmlsZSk7XG4gXG4gXHRpZiAodGZpbGUtXHUwMDNlZGV0YWNoZWQpIHtcbiBcdFx0LyogUmUtYXR0YWNoIGRldGFjaGVkIHRmaWxlLCB1cGRhdGluZyBYRFAgcXVldWVfaW5kZXggKi9cbkBAIC05NjQsNiAmIzQzOzEwMDIsMjQgQEAgc3RhdGljIGludCB0dW5fbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAvKiBOZXQgZGV2aWNlIGNsb3NlLiAqL1xuIHN0YXRpYyBpbnQgdHVuX25ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHQvKiBuZXRpZl9ydW5uaW5nKCkgaXMgYWxyZWFkeSBmYWxzZTogdGFrZSBib3RoIHJpbmcgbG9ja3MgdG8ga2VlcCB0aGVcbiYjNDM7XHQgKiB3YWtlIHNpdGVzIG91dCwgc28gdGhlIHN0b3AgYmVsb3cgaXMgdGhlIGxhc3Qgd3JpdGUgdG9cbiYjNDM7XHQgKiBfX1FVRVVFX1NUQVRFX0RSVl9YT0ZGLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHR1bi1cdTAwM2VudW1xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR0ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLVx1MDAzZXRmaWxlc1tpXSk7XG4mIzQzO1xuJiM0MztcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4mIzQzO1x0XHRzcGluX2xvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcbiYjNDM7XHRcdHRmaWxlLVx1MDAzZWNvbnNfY250ID0gMDtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoZGV2KTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xMDA4LDYgJiM0MzsxMDY0LDcgQEAgc3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqcXVldWU7XG4gXHRzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlO1xuIFx0aW50IGxlbiA9IHNrYi1cdTAwM2VsZW47XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHRmaWxlID0gcmN1X2RlcmVmZXJlbmNlKHR1bi1cdTAwM2V0ZmlsZXNbdHhxXSk7XG5AQCAtMTA2MiwxMyAmIzQzOzExMTksMzUgQEAgc3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0bmZfcmVzZXRfY3Qoc2tiKTtcbiBcbi1cdGlmIChwdHJfcmluZ19wcm9kdWNlKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcsIHNrYikpIHtcbiYjNDM7XHRxdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCB0eHEpO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcbiYjNDM7XHRyZXQgPSBfX3B0cl9yaW5nX3Byb2R1Y2UoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZywgc2tiKTtcbiYjNDM7XHQvKiBEbyBub3QgdG91Y2ggdGhlIHF1ZXVlIHN0YXRlIG9mIGEgZGV2aWNlIHRoYXQgaXMgZ29pbmcgZG93bi4gKi9cbiYjNDM7XHRpZiAoKHR1bi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX0JBQ0tQUkVTU1VSRSkgXHUwMDI2XHUwMDI2IG5ldGlmX3J1bm5pbmcoZGV2KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIXFkaXNjX3R4cV9oYXNfbm9fcXVldWUocXVldWUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2UoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZykgPT0gLUVOT1NQQykge1xuJiM0MztcdFx0bmV0aWZfdHhfc3RvcF9xdWV1ZShxdWV1ZSk7XG4mIzQzO1x0XHQvKiBQYWlyZWQgd2l0aCBzbXBfbWIoKSBpbiBfX3R1bl93YWtlX3F1ZXVlKCkgKi9cbiYjNDM7XHRcdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XG4mIzQzO1x0XHRpZiAoIV9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nKSlcbiYjNDM7XHRcdFx0bmV0aWZfdHhfd2FrZV9xdWV1ZShxdWV1ZSk7XG4mIzQzO1x0fVxuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdC8qIFRoaXMgc2hvdWxkIGJlIGEgcmFyZSBjYXNlIGlmIElGRl9CQUNLUFJFU1NVUkUgaXMgZW5hYmxlZCBhbmRcbiYjNDM7XHRcdCAqIGEgcWRpc2MgaXMgcHJlc2VudCwgYnV0IGNhbiBoYXBwZW4gZHVlIHRvIGxsdHguXG4mIzQzO1x0XHQgKiBTaW5jZSBza2JfdHhfdGltZXN0YW1wKCksIHNrYl9vcnBoYW4oKSxcbiYjNDM7XHRcdCAqIHJ1bl9lYnBmX2ZpbHRlcigpIGFuZCBwc2tiX3RyaW0oKSBjb3VsZCBoYXZlIHRpbmtlcmVkXG4mIzQzO1x0XHQgKiB3aXRoIHRoZSBTS0IsIHJldHVybmluZyBORVRERVZfVFhfQlVTWSBpcyB1bnNhZmUgYW5kXG4mIzQzO1x0XHQgKiB3ZSBtdXN0IGRyb3AgaW5zdGVhZC5cbiYjNDM7XHRcdCAqL1xuIFx0XHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9GVUxMX1JJTkc7XG4gXHRcdGdvdG8gZHJvcDtcbiBcdH1cbiBcbiBcdC8qIGRldi1cdTAwM2VsbHR4IHJlcXVpcmVzIHRvIGRvIG91ciBvd24gdXBkYXRlIG9mIHRyYW5zX3N0YXJ0ICovXG4tXHRxdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCB0eHEpO1xuIFx0dHhxX3RyYW5zX2NvbmRfdXBkYXRlKHF1ZXVlKTtcbiBcbiBcdC8qIE5vdGlmeSBhbmQgd2FrZSB1cCByZWFkZXIgcHJvY2VzcyAqL1xuQEAgLTIxMTYsMTMgJiM0MzsyMTk1LDYxIEBAIHN0YXRpYyBzc2l6ZV90IHR1bl9wdXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuIFx0cmV0dXJuIHRvdGFsO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgbm9ibG9jaywgaW50ICplcnIpXG4mIzQzOy8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqL1xuJiM0MztzdGF0aWMgdm9pZCBfX3R1bl93YWtlX3F1ZXVlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXG4mIzQzO1x0XHRcdCAgICAgc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgaW50IGNvbnN1bWVkKVxuJiM0Mzt7XG4mIzQzO1x0dTE2IHF1ZXVlX2luZGV4ID0gdGZpbGUtXHUwMDNlcXVldWVfaW5kZXg7XG4mIzQzO1x0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmICghKHR1bi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX0JBQ0tQUkVTU1VSRSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIEEgc3RvcCBmcm9tIHR1bl9uZXRfY2xvc2UoKSBpcyBub3QgYmFja3ByZXNzdXJlLCBsZWF2ZSBpdCBhbG9uZS4gKi9cbiYjNDM7XHRpZiAodW5saWtlbHkoIW5ldGlmX3J1bm5pbmcodHVuLVx1MDAzZWRldikpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBPbmx5IHRoZSBjdXJyZW50IG93bmVyIG9mIHRoZSBzbG90IG1heSB3YWtlIGl0cyBzdWJxdWV1ZS4gKi9cbiYjNDM7XHRpZiAodW5saWtlbHkocmN1X2FjY2Vzc19wb2ludGVyKHR1bi1cdTAwM2V0ZmlsZXNbcXVldWVfaW5kZXhdKSAhPSB0ZmlsZSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUodHVuLVx1MDAzZWRldiwgcXVldWVfaW5kZXgpO1xuJiM0MztcbiYjNDM7XHQvKiBQYWlyZWQgd2l0aCBzbXBfbWJfX2FmdGVyX2F0b21pYygpIGluIHR1bl9uZXRfeG1pdCgpICovXG4mIzQzO1x0c21wX21iKCk7XG4mIzQzO1x0aWYgKG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkge1xuJiM0MztcdFx0dGZpbGUtXHUwMDNlY29uc19jbnQgJiM0Mzs9IGNvbnN1bWVkO1xuJiM0MztcdFx0aWYgKHRmaWxlLVx1MDAzZWNvbnNfY250IFx1MDAzZT0gdGZpbGUtXHUwMDNldHhfcmluZy5zaXplIC8gMiB8fFxuJiM0MztcdFx0ICAgIF9fcHRyX3JpbmdfZW1wdHkoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZykpIHtcbiYjNDM7XHRcdFx0bmV0aWZfdHhfd2FrZV9xdWV1ZSh0eHEpO1xuJiM0MztcdFx0XHR0ZmlsZS1cdTAwM2Vjb25zX2NudCA9IDA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCAqdHVuX3JpbmdfY29uc3VtZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCAqcHRyO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbiYjNDM7XHRwdHIgPSBfX3B0cl9yaW5nX2NvbnN1bWUoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZyk7XG4mIzQzO1x0aWYgKHB0cilcbiYjNDM7XHRcdF9fdHVuX3dha2VfcXVldWUodHVuLCB0ZmlsZSwgMSk7XG4mIzQzO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4mIzQzO1x0cmV0dXJuIHB0cjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgKnR1bl9yaW5nX3JlY3Yoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbiYjNDM7XHRcdFx0ICAgaW50IG5vYmxvY2ssIGludCAqZXJyKVxuIHtcbiBcdERFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpO1xuIFx0dm9pZCAqcHRyID0gTlVMTDtcbiBcdGludCBlcnJvciA9IDA7XG4gXG4tXHRwdHIgPSBwdHJfcmluZ19jb25zdW1lKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcpO1xuJiM0MztcdHB0ciA9IHR1bl9yaW5nX2NvbnN1bWUodHVuLCB0ZmlsZSk7XG4gXHRpZiAocHRyKVxuIFx0XHRnb3RvIG91dDtcbiBcdGlmIChub2Jsb2NrKSB7XG5AQCAtMjEzNCw3ICYjNDM7MjI2MSw3IEBAIHN0YXRpYyB2b2lkICp0dW5fcmluZ19yZWN2KHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGludCBub2Jsb2NrLCBpbnQgKmVycilcbiBcbiBcdHdoaWxlICgxKSB7XG4gXHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XG4tXHRcdHB0ciA9IHB0cl9yaW5nX2NvbnN1bWUoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZyk7XG4mIzQzO1x0XHRwdHIgPSB0dW5fcmluZ19jb25zdW1lKHR1biwgdGZpbGUpO1xuIFx0XHRpZiAocHRyKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbkBAIC0yMTcxLDcgJiM0MzsyMjk4LDcgQEAgc3RhdGljIHNzaXplX3QgdHVuX2RvX3JlYWQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbiBcbiBcdGlmICghcHRyKSB7XG4gXHRcdC8qIFJlYWQgZnJhbWVzIGZyb20gcmluZyAqL1xuLVx0XHRwdHIgPSB0dW5fcmluZ19yZWN2KHRmaWxlLCBub2Jsb2NrLCBcdTAwMjZlcnIpO1xuJiM0MztcdFx0cHRyID0gdHVuX3JpbmdfcmVjdih0dW4sIHRmaWxlLCBub2Jsb2NrLCBcdTAwMjZlcnIpO1xuIFx0XHRpZiAoIXB0cilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuQEAgLTI3MDMsOCAmIzQzOzI4MzAsOSBAQCBzdGF0aWMgaW50IHR1bl9zZXRfaWZmKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKVxuIHtcbiBcdHN0cnVjdCB0dW5fc3RydWN0ICp0dW47XG4gXHRzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4mIzQzO1x0c3RydWN0IHR1bl9maWxlICpudGZpbGU7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuLVx0aW50IGVycjtcbiYjNDM7XHRpbnQgZXJyLCBpO1xuIFxuIFx0aWYgKHRmaWxlLVx1MDAzZWRldGFjaGVkKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0yODMzLDggJiM0MzsyOTYxLDEwIEBAIHN0YXRpYyBpbnQgdHVuX3NldF9pZmYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlmcmVxICppZnIpXG4gXHQvKiBNYWtlIHN1cmUgcGVyc2lzdGVudCBkZXZpY2VzIGRvIG5vdCBnZXQgc3R1Y2sgaW5cbiBcdCAqIHhvZmYgc3RhdGUuXG4gXHQgKi9cbi1cdGlmIChuZXRpZl9ydW5uaW5nKHR1bi1cdTAwM2VkZXYpKVxuLVx0XHRuZXRpZl90eF93YWtlX2FsbF9xdWV1ZXModHVuLVx1MDAzZWRldik7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHVuLVx1MDAzZW51bXF1ZXVlczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdG50ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLVx1MDAzZXRmaWxlc1tpXSk7XG4mIzQzO1x0XHR0dW5fZm9yY2Vfd2FrZV9xdWV1ZSh0dW4sIG50ZmlsZSk7XG4mIzQzO1x0fVxuIFxuIFx0c3Ryc2NweShpZnItXHUwMDNlaWZyX25hbWUsIHR1bi1cdTAwM2VkZXYtXHUwMDNlbmFtZSk7XG4gXHRyZXR1cm4gMDtcbkBAIC0zNjMwLDYgJiM0MzszNzYwLDEzIEBAIHN0YXRpYyBpbnQgdHVuX3F1ZXVlX3Jlc2l6ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxuIFx0XHRcdFx0XHQgIGRldi1cdTAwM2V0eF9xdWV1ZV9sZW4sIEdGUF9LRVJORUwsXG4gXHRcdFx0XHRcdCAgdHVuX3B0cl9mcmVlKTtcbiBcbiYjNDM7XHRpZiAoIXJldCkge1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHVuLVx1MDAzZW51bXF1ZXVlczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0dGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cdTAwM2V0ZmlsZXNbaV0pO1xuJiM0MztcdFx0XHR0dW5fZm9yY2Vfd2FrZV9xdWV1ZSh0dW4sIHRmaWxlKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0a2ZyZWUocmluZ3MpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMzczOCw2ICYjNDM7Mzg3NSwzMSBAQCBzdHJ1Y3QgcHRyX3JpbmcgKnR1bl9nZXRfdHhfcmluZyhzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodHVuX2dldF90eF9yaW5nKTtcbiBcbiYjNDM7LyogQ2FsbGVycyBtdXN0IGhvbGQgcmluZy5jb25zdW1lcl9sb2NrICovXG4mIzQzO3ZvaWQgdHVuX3dha2VfcXVldWUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBjb25zdW1lZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0dW5fZmlsZSAqdGZpbGU7XG4mIzQzO1x0c3RydWN0IHR1bl9zdHJ1Y3QgKnR1bjtcbiYjNDM7XG4mIzQzO1x0aWYgKGZpbGUtXHUwMDNlZl9vcCAhPSBcdTAwMjZ0dW5fZm9wcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dGZpbGUgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiYjNDM7XHRpZiAoIXRmaWxlKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XG4mIzQzO1x0dHVuID0gcmN1X2RlcmVmZXJlbmNlKHRmaWxlLVx1MDAzZXR1bik7XG4mIzQzO1x0aWYgKHR1bilcbiYjNDM7XHRcdF9fdHVuX3dha2VfcXVldWUodHVuLCB0ZmlsZSwgY29uc3VtZWQpO1xuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTCh0dW5fd2FrZV9xdWV1ZSk7XG4mIzQzO1xuIG1vZHVsZV9pbml0KHR1bl9pbml0KTtcbiBtb2R1bGVfZXhpdCh0dW5fY2xlYW51cCk7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDUklQVElPTik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmNcbmluZGV4IDY5NDliNzA0MTY2ZDUuLjNlNzJiOWM2YWYwY2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L25ldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L25ldC5jXG5AQCAtMTc2LDEzICYjNDM7MTc2LDIxIEBAIHN0YXRpYyB2b2lkICp2aG9zdF9uZXRfYnVmX2NvbnN1bWUoc3RydWN0IHZob3N0X25ldF9idWYgKnJ4cSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXG4mIzQzO3N0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKHN0cnVjdCBzb2NrICpzayxcbiYjNDM7XHRcdFx0XHQgc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcbiB7XG4mIzQzO1x0c3RydWN0IGZpbGUgKmZpbGUgPSBzay1cdTAwM2Vza19zb2NrZXQtXHUwMDNlZmlsZTtcbiBcdHN0cnVjdCB2aG9zdF9uZXRfYnVmICpyeHEgPSBcdTAwMjZudnEtXHUwMDNlcnhxO1xuIFxuIFx0cnhxLVx1MDAzZWhlYWQgPSAwO1xuLVx0cnhxLVx1MDAzZXRhaWwgPSBwdHJfcmluZ19jb25zdW1lX2JhdGNoZWQobnZxLVx1MDAzZXJ4X3JpbmcsIHJ4cS1cdTAwM2VxdWV1ZSxcbi1cdFx0XHRcdFx0ICAgICAgVkhPU1RfTkVUX0JBVENIKTtcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2bnZxLVx1MDAzZXJ4X3JpbmctXHUwMDNlY29uc3VtZXJfbG9jayk7XG4mIzQzO1x0cnhxLVx1MDAzZXRhaWwgPSBfX3B0cl9yaW5nX2NvbnN1bWVfYmF0Y2hlZChudnEtXHUwMDNlcnhfcmluZywgcnhxLVx1MDAzZXF1ZXVlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFZIT1NUX05FVF9CQVRDSCk7XG4mIzQzO1xuJiM0MztcdGlmIChyeHEtXHUwMDNldGFpbClcbiYjNDM7XHRcdHR1bl93YWtlX3F1ZXVlKGZpbGUsIHJ4cS1cdTAwM2V0YWlsKTtcbiYjNDM7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2bnZxLVx1MDAzZXJ4X3JpbmctXHUwMDNlY29uc3VtZXJfbG9jayk7XG4gXHRyZXR1cm4gcnhxLVx1MDAzZXRhaWw7XG4gfVxuIFxuQEAgLTIwOSwxNCAmIzQzOzIxNywxNSBAQCBzdGF0aWMgaW50IHZob3N0X25ldF9idWZfcGVla19sZW4odm9pZCAqcHRyKVxuIFx0cmV0dXJuIF9fc2tiX2FycmF5X2xlbl93aXRoX3RhZyhwdHIpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHZob3N0X25ldF9idWZfcGVlayhzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqbnZxKVxuJiM0MztzdGF0aWMgaW50IHZob3N0X25ldF9idWZfcGVlayhzdHJ1Y3Qgc29jayAqc2ssXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXG4ge1xuIFx0c3RydWN0IHZob3N0X25ldF9idWYgKnJ4cSA9IFx1MDAyNm52cS1cdTAwM2VyeHE7XG4gXG4gXHRpZiAoIXZob3N0X25ldF9idWZfaXNfZW1wdHkocnhxKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShudnEpKVxuJiM0MztcdGlmICghdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKHNrLCBudnEpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBvdXQ6XG5AQCAtMTAwNCw3ICYjNDM7MTAxMyw3IEBAIHN0YXRpYyBpbnQgcGVla19oZWFkX2xlbihzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqcnZxLCBzdHJ1Y3Qgc29jayAqc2spXG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0aWYgKHJ2cS1cdTAwM2VyeF9yaW5nKVxuLVx0XHRyZXR1cm4gdmhvc3RfbmV0X2J1Zl9wZWVrKHJ2cSk7XG4mIzQzO1x0XHRyZXR1cm4gdmhvc3RfbmV0X2J1Zl9wZWVrKHNrLCBydnEpO1xuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrLCBmbGFncyk7XG4gXHRoZWFkID0gc2tiX3BlZWsoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl90dW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdHVuLmhcbmluZGV4IDgwMTY2ZWI2MmY0MWMuLmVlYjllZDNjNWEyMzkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oXG5AQCAtMjIsNiAmIzQzOzIyLDggQEAgc3RydWN0IHR1bl9tc2dfY3RsIHtcbiAjaWYgZGVmaW5lZChDT05GSUdfVFVOKSB8fCBkZWZpbmVkKENPTkZJR19UVU5fTU9EVUxFKVxuIHN0cnVjdCBzb2NrZXQgKnR1bl9nZXRfc29ja2V0KHN0cnVjdCBmaWxlICopO1xuIHN0cnVjdCBwdHJfcmluZyAqdHVuX2dldF90eF9yaW5nKHN0cnVjdCBmaWxlICpmaWxlKTtcbiYjNDM7LyogQ2FsbGVycyBtdXN0IGhvbGQgdGhlIGNvbnN1bWVyX2xvY2sgb2YgdGhlIHJpbmcgb2YgZmlsZSAqL1xuJiM0Mzt2b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY29uc3VtZWQpO1xuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0dW5faXNfeGRwX2ZyYW1lKHZvaWQgKnB0cilcbiB7XG5AQCAtNTUsNiAmIzQzOzU3LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcHRyX3JpbmcgKnR1bl9nZXRfdHhfcmluZyhzdHJ1Y3QgZmlsZSAqZilcbiBcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmLCBpbnQgY29uc3VtZWQpIHt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCB0dW5faXNfeGRwX2ZyYW1lKHZvaWQgKnB0cilcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oIGIvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oXG5pbmRleCBkMmMzNjI5YmJlNDUxLi42MzFjNDNmZGU0NDA3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmhcbkBAIC05Niw2ICYjNDM7OTYsMjYgQEAgc3RhdGljIGlubGluZSBib29sIHB0cl9yaW5nX2Z1bGxfYmgoc3RydWN0IHB0cl9yaW5nICpyKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOy8qIFJlcG9ydCB3aGV0aGVyIHRoZSBuZXh0IF9fcHRyX3JpbmdfcHJvZHVjZSgpIGhhcyByb29tIGZvciBvbmUgZW50cnk6XG4mIzQzOyAqIDAgbWVhbnMgdGhlIHNpbmdsZSBzbG90IGF0IHItXHUwMDNlcXVldWVbci1cdTAwM2Vwcm9kdWNlcl0gaXMgZnJlZSwgLUVOT1NQQyBtZWFuc1xuJiM0MzsgKiB0aGUgcmluZyBpcyBmdWxsLCB3aGljaCBpcyB0cmFuc2llbnQsIGFuZCAtRUlOVkFMIG1lYW5zIHItXHUwMDNlc2l6ZSBpcyAwLFxuJiM0MzsgKiB3aGljaCBpcyBwZXJtYW5lbnQuIEEgY2FsbGVyIHRoYXQgc3RvcHMgcHJvZHVjaW5nIGFuZCB3YWl0cyBmb3Igc3BhY2VcbiYjNDM7ICogbXVzdCB0aGVyZWZvcmUgZG8gc28gb25seSBmb3IgLUVOT1NQQy5cbiYjNDM7ICpcbiYjNDM7ICogTm90ZTogY2FsbGVycyBpbnZva2luZyB0aGlzIGluIGEgbG9vcCBtdXN0IHVzZSBhIGNvbXBpbGVyIGJhcnJpZXIsXG4mIzQzOyAqIGZvciBleGFtcGxlIGNwdV9yZWxheCgpLiBDYWxsZXJzIG11c3QgaG9sZCBwcm9kdWNlcl9sb2NrLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBpbnQgX19wdHJfcmluZ19jaGVja19wcm9kdWNlKHN0cnVjdCBwdHJfcmluZyAqcilcbiYjNDM7e1xuJiM0MztcdGlmICh1bmxpa2VseSghci1cdTAwM2VzaXplKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoZGF0YV9yYWNlKHItXHUwMDNlcXVldWVbci1cdTAwM2Vwcm9kdWNlcl0pKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9TUEM7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLFxuICAqIGZvciBleGFtcGxlIGNwdV9yZWxheCgpLiBDYWxsZXJzIG11c3QgaG9sZCBwcm9kdWNlcl9sb2NrLlxuICAqIENhbGxlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc3VyZSBwb2ludGVyIHRoYXQgaXMgYmVpbmcgcXVldWVkXG5AQCAtMTAzLDggJiM0MzsxMjMsMTAgQEAgc3RhdGljIGlubGluZSBib29sIHB0cl9yaW5nX2Z1bGxfYmgoc3RydWN0IHB0cl9yaW5nICpyKVxuICAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3JpbmdfcHJvZHVjZShzdHJ1Y3QgcHRyX3JpbmcgKnIsIHZvaWQgKnB0cilcbiB7XG4tXHRpZiAodW5saWtlbHkoIXItXHUwMDNlc2l6ZSkgfHwgZGF0YV9yYWNlKHItXHUwMDNlcXVldWVbci1cdTAwM2Vwcm9kdWNlcl0pKVxuLVx0XHRyZXR1cm4gLUVOT1NQQztcbiYjNDM7XHRpbnQgcmV0ID0gX19wdHJfcmluZ19jaGVja19wcm9kdWNlKHIpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcbiBcdC8qIE1ha2Ugc3VyZSB0aGUgcG9pbnRlciB3ZSBhcmUgc3RvcmluZyBwb2ludHMgdG8gYSB2YWxpZCBkYXRhLiAqL1xuIFx0LyogUGFpcnMgd2l0aCB0aGUgZGVwZW5kZW5jeSBvcmRlcmluZyBpbiBfX3B0cl9yaW5nX2NvbnN1bWUuICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXG5pbmRleCA3OWQ1M2M3YTFlYmRjLi5hMGRkYzUwYTc1MzQyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcbkBAIC02OSw2ICYjNDM7NjksMTAgQEBcbiAjZGVmaW5lIElGRl9OQVBJX0ZSQUdTXHQweDAwMjBcbiAvKiBVc2VkIGluIFRVTlNFVElGRiB0byBicmluZyB1cCB0dW4vdGFwIHdpdGhvdXQgY2FycmllciAqL1xuICNkZWZpbmUgSUZGX05PX0NBUlJJRVJcdDB4MDA0MFxuJiM0MzsvKiBTdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHdoZW4gdGhlIGludGVybmFsIHJpbmcgaXMgZnVsbCwgc28gYW5cbiYjNDM7ICogYXR0YWNoZWQgcWRpc2MgYXBwbGllcyBiYWNrcHJlc3N1cmUgaW5zdGVhZCBvZiBiZWluZyBieXBhc3NlZC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgSUZGX0JBQ0tQUkVTU1VSRVx0MHgwMDgwXG4gI2RlZmluZSBJRkZfTk9fUElcdDB4MTAwMFxuIC8qIFRoaXMgZmxhZyBoYXMgbm8gcmVhbCBlZmZlY3QgKi9cbiAjZGVmaW5lIElGRl9PTkVfUVVFVUVcdDB4MjAwMFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxuaW5kZXggMmVjMDdkZTFkNzNiZS4uMmM4NTUyNTcwNGMxNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXG5AQCAtNjcsNiAmIzQzOzY3LDEwIEBAXG4gI2RlZmluZSBJRkZfVEFQXHRcdDB4MDAwMlxuICNkZWZpbmUgSUZGX05BUElcdDB4MDAxMFxuICNkZWZpbmUgSUZGX05BUElfRlJBR1NcdDB4MDAyMFxuJiM0MzsvKiBTdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHdoZW4gdGhlIGludGVybmFsIHJpbmcgaXMgZnVsbCwgc28gYW5cbiYjNDM7ICogYXR0YWNoZWQgcWRpc2MgYXBwbGllcyBiYWNrcHJlc3N1cmUgaW5zdGVhZCBvZiBiZWluZyBieXBhc3NlZC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgSUZGX0JBQ0tQUkVTU1VSRVx0MHgwMDgwXG4gI2RlZmluZSBJRkZfTk9fUElcdDB4MTAwMFxuIC8qIFRoaXMgZmxhZyBoYXMgbm8gcmVhbCBlZmZlY3QgKi9cbiAjZGVmaW5lIElGRl9PTkVfUVVFVUVcdDB4MjAwMFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUVU4mIzM0OywKICAgICYjMzQ7VkhPU1RfTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHVuX25ldF94bWl0JiMzNDssCiAgICAmIzM0O3R1bl9zZXRfaWZmJiMzNDssCiAgICAmIzM0O3R1bl9jaHJfaW9jdGwmIzM0OywKICAgICYjMzQ7dHVuX2Nocl9yZWFkX2l0ZXImIzM0OywKICAgICYjMzQ7dHVuX25ldF9jbG9zZSYjMzQ7LAogICAgJiMzNDt0dW5fcXVldWVfcmVzaXplJiMzNDssCiAgICAmIzM0O3R1bl93YWtlX3F1ZXVlJiMzNDssCiAgICAmIzM0O3Zob3N0X25ldF9pb2N0bCYjMzQ7LAogICAgJiMzNDt2aG9zdF9uZXRfb3BlbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgKElGRl9CQUNLUFJFU1NVUkUpIHRvIHRoZSBUVU4vVEFQIGRyaXZlciwgYWxsb3dpbmcgdGhlIGtlcm5lbCB0byBzdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHBhY2tldHMgd2hlbiB0aGUgaW50ZXJuYWwgcmluZyBidWZmZXIgaXMgZnVsbC4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgYW5kIFRVTi9UQVAgZHJpdmVyIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gSXQgYWxzbyBtb2RpZmllcyB0aGUgdmhvc3QtbmV0IGRyaXZlciB0byB3YWtlIHRoZSBxdWV1ZSB3aGVuIGl0ZW1zIGFyZSBjb25zdW1lZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFhMzIwZDkyYmRhNjgxOGE0NWJkNjFhMmFlMGU4OTgxZmE2MmE1MzMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyA0IDAyOjA1OjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdAppbmRleCA0ZDcwODdmNzI3YmU1Li41NmM5ZGM3Yjk2YWZiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdApAQCAtMjA2LDYgJiM0MzsyMDYsMzggQEAgZW5hYmxlIGlzIHRydWUgd2UgZW5hYmxlIGl0LCBvdGhlcndpc2Ugd2UgZGlzYWJsZSBpdDo6CiAgICAgICByZXR1cm4gaW9jdGwoZmQsIFRVTlNFVFFVRVVFLCAodm9pZCAqKSZhbXA7aWZyKTsKICAgfQogCiYjNDM7My40IHFkaXNjIGJhY2twcmVzc3VyZQomIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsKJiM0MztJRkZfQkFDS1BSRVNTVVJFIGNhbiBiZSBzZXQgdG8gZW5hYmxlIHFkaXNjIGJhY2twcmVzc3VyZS4gV2l0aG91dCBpdCwgVFgKJiM0Mztkcm9wcyBvY2N1ciB3aGVuIHRoZSBpbnRlcm5hbCByaW5nIGJ1ZmZlciBpcyBmdWxsLCBzbyBhbnkgYXR0YWNoZWQgcWRpc2MKJiM0MztpcyBlZmZlY3RpdmVseSBieXBhc3NlZCBhbmQgYXBwbGljYXRpb25zIG9ubHkgbGVhcm4gYWJvdXQgY29uZ2VzdGlvbgomIzQzO3Rocm91Z2ggdGhvc2UgZHJvcHMuCiYjNDM7CiYjNDM7V2l0aCBpdCwgdGhlIGtlcm5lbCBzdG9wcyB0aGUgcXVldWUgaW5zdGVhZCwgbGV0dGluZyB0aGUgcWRpc2MgaG9sZCBhbmQKJiM0MztzY2hlZHVsZSBwYWNrZXRzLCBzbyBpdHMgQVFNLCBzaGFwaW5nIGFuZCBmYWlybmVzcyBhY3R1YWxseSBhcHBseS4gVGhpcwomIzQzO2hlbHBzIHByb3RvY29scyBsaWtlIFRDUCwgd2hpY2ggY3V0IHRocm91Z2hwdXQgaW4gcmVhY3Rpb24gdG8gcGFja2V0CiYjNDM7ZHJvcHMuIFdpdGggSUZGX0JBQ0tQUkVTU1VSRSwgZHJvcHMgdGhlbiBvbmx5IG9jY3VyIGFzIGEgcmFyZSByYWNlLgomIzQzO0JhY2twcmVzc3VyZSByZXF1aXJlcyBhIHFkaXNjIHRvIGJlIGF0dGFjaGVkIGFuZCBoYXMgbm8gZWZmZWN0IHdpdGgKJiM0Mztub3F1ZXVlLgomIzQzOwomIzQzO1RoZSBmbGFnIGlzIGEgcHJvcGVydHkgb2YgdGhlIFRVTi9UQVAgZGV2aWNlIHJhdGhlciB0aGFuIG9mIHRoZSBmaWxlCiYjNDM7ZGVzY3JpcHRvciBpdCB3YXMgc2V0IG9uLCBzbyBpdCBhcHBsaWVzIHRvIGFsbCBxdWV1ZXMgb2YgdGhlIGRldmljZSwKJiM0MztyZWdhcmRsZXNzIG9mIHdoaWNoIHByb2Nlc3Mgb3BlbmVkIHdoaWNoIHF1ZXVlLgomIzQzOwomIzQzO1RoZSBmbGFnIGNhbiBvbmx5IGJlIGNoYW5nZWQgd2hpbGUgdGhlIGRldmljZSBoYXMgYXQgbW9zdCBvbmUgcXVldWUuIE9uIGEKJiM0MzttdWx0aXF1ZXVlIGRldmljZSB0aGF0IGFscmVhZHkgaGFzIGEgc2Vjb25kIHF1ZXVlIGF0dGFjaGVkIG9yIGRldGFjaGVkLCBhCiYjNDM7bGF0ZXIgVFVOU0VUSUZGIHN1Y2NlZWRzIGJ1dCBsZWF2ZXMgdGhlIGZsYWcgYXMgaXQgaXMuIEFsbCB0aGUgb3RoZXIKJiM0MztUVU5TRVRJRkYgZmxhZ3MgYmVoYXZlIHRoZSBzYW1lIHdheS4KJiM0MzsKJiM0MztUaGUgdHhxdWV1ZWxlbiBjYW4gYmUgcmVkdWNlZCBhbG9uZ3NpZGUgdGhpcyBmbGFnIHRvIGZ1cnRoZXIgc2hpZnQKJiM0MztidWZmZXJpbmcgaW50byB0aGUgcWRpc2MgYW5kIHJlZHVjZSBidWZmZXJibG9hdCwgYXQgYSBwb3NzaWJsZQomIzQzO3BlcmZvcm1hbmNlIGNvc3QuCiYjNDM7CiYjNDM7V2hlbiBydW5uaW5nIG11bHRpcGxlIG5ldHdvcmsgc3RyZWFtcyBpbiBwYXJhbGxlbCB0aHJvdWdoIGEgc2luZ2xlCiYjNDM7VFVOL1RBUCBxdWV1ZSwgdGhlIGZsYWcgbWF5IHJlZHVjZSBwZXJmb3JtYW5jZSBkdWUgdG8gdGhlIGV4dHJhIG92ZXJoZWFkCiYjNDM7b2YgdGhlIGJhY2twcmVzc3VyZSBtZWNoYW5pc20uCiYjNDM7CiBVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb24KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jCmluZGV4IDUxZTgwMDAwYmQwZWQuLmVjOTBmZWY0YTQyZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3R1bi5jCkBAIC05OCw3ICYjNDM7OTgsOCBAQCBzdGF0aWMgdm9pZCB0dW5fZGVmYXVsdF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogI2RlZmluZSBUVU5fRkFTWU5DCUlGRl9BVFRBQ0hfUVVFVUUKIAogI2RlZmluZSBUVU5fRkVBVFVSRVMgKElGRl9OT19QSSB8IElGRl9PTkVfUVVFVUUgfCBJRkZfVk5FVF9IRFIgfCBcCi0JCSAgICAgIElGRl9NVUxUSV9RVUVVRSB8IElGRl9OQVBJIHwgSUZGX05BUElfRlJBR1MpCiYjNDM7CQkgICAgICBJRkZfTVVMVElfUVVFVUUgfCBJRkZfTkFQSSB8IElGRl9OQVBJX0ZSQUdTIHwgXAomIzQzOwkJICAgICAgSUZGX0JBQ0tQUkVTU1VSRSkKIAogI2RlZmluZSBHT09EQ09QWV9MRU4gMTI4CiAKQEAgLTE0NSw2ICYjNDM7MTQ2LDggQEAgc3RydWN0IHR1bl9maWxlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5leHQ7CiAJc3RydWN0IHR1bl9zdHJ1Y3QgKmRldGFjaGVkOwogCXN0cnVjdCBwdHJfcmluZyB0eF9yaW5nOwomIzQzOwkvKiBQcm90ZWN0ZWQgYnkgdHhfcmluZy5jb25zdW1lcl9sb2NrICovCiYjNDM7CWludCBjb25zX2NudDsKIAlzdHJ1Y3QgeGRwX3J4cV9pbmZvIHhkcF9yeHE7CiB9OwogCkBAIC01ODUsMTEgJiM0Mzs1ODgsMTYgQEAgc3RhdGljIHZvaWQgX190dW5fZGV0YWNoKHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGJvb2wgY2xlYW4pCiAJCXUxNiBpbmRleCA9IHRmaWxlLSZndDtxdWV1ZV9pbmRleDsKIAkJQlVHX09OKGluZGV4ICZndDs9IHR1bi0mZ3Q7bnVtcXVldWVzKTsKIAomIzQzOwkJc3Bpbl9sb2NrKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcuY29uc3VtZXJfbG9jayk7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcih0dW4tJmd0O3RmaWxlc1tpbmRleF0sCiAJCQkJICAgdHVuLSZndDt0ZmlsZXNbdHVuLSZndDtudW1xdWV1ZXMgLSAxXSk7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO3RmaWxlLSZndDt0eF9yaW5nLmNvbnN1bWVyX2xvY2spOwogCQludGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi0mZ3Q7dGZpbGVzW2luZGV4XSk7CiYjNDM7CQlzcGluX2xvY2soJmFtcDtudGZpbGUtJmd0O3R4X3JpbmcuY29uc3VtZXJfbG9jayk7CiAJCW50ZmlsZS0mZ3Q7cXVldWVfaW5kZXggPSBpbmRleDsKIAkJbnRmaWxlLSZndDt4ZHBfcnhxLnF1ZXVlX2luZGV4ID0gaW5kZXg7CiYjNDM7CQludGZpbGUtJmd0O2NvbnNfY250ID0gMDsKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7bnRmaWxlLSZndDt0eF9yaW5nLmNvbnN1bWVyX2xvY2spOwogCQlyY3VfYXNzaWduX3BvaW50ZXIodHVuLSZndDt0ZmlsZXNbdHVuLSZndDtudW1xdWV1ZXMgLSAxXSwKIAkJCQkgICBOVUxMKTsKIApAQCAtNjA2LDYgJiM0Mzs2MTQsMTQgQEAgc3RhdGljIHZvaWQgX190dW5fZGV0YWNoKHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGJvb2wgY2xlYW4pCiAJCXR1bl9mbG93X2RlbGV0ZV9ieV9xdWV1ZSh0dW4sIHR1bi0mZ3Q7bnVtcXVldWVzICYjNDM7IDEpOwogCQkvKiBEcm9wIHJlYWQgcXVldWUgKi8KIAkJdHVuX3F1ZXVlX3B1cmdlKHRmaWxlKTsKJiM0MzsJCXNwaW5fbG9ja19iaCgmYW1wO250ZmlsZS0mZ3Q7dHhfcmluZy5jb25zdW1lcl9sb2NrKTsKJiM0MzsJCXNwaW5fbG9jaygmYW1wO250ZmlsZS0mZ3Q7dHhfcmluZy5wcm9kdWNlcl9sb2NrKTsKJiM0MzsJCW50ZmlsZS0mZ3Q7Y29uc19jbnQgPSAwOwomIzQzOwkJaWYgKG5ldGlmX3J1bm5pbmcodHVuLSZndDtkZXYpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBfX3B0cl9yaW5nX2VtcHR5KCZhbXA7bnRmaWxlLSZndDt0eF9yaW5nKSkKJiM0MzsJCQluZXRpZl93YWtlX3N1YnF1ZXVlKHR1bi0mZ3Q7ZGV2LCBpbmRleCk7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO250ZmlsZS0mZ3Q7dHhfcmluZy5wcm9kdWNlcl9sb2NrKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bnRmaWxlLSZndDt0eF9yaW5nLmNvbnN1bWVyX2xvY2spOwogCQl0dW5fc2V0X3JlYWxfbnVtX3F1ZXVlcyh0dW4pOwogCX0gZWxzZSBpZiAodGZpbGUtJmd0O2RldGFjaGVkICZhbXA7JmFtcDsgY2xlYW4pIHsKIAkJdHVuID0gdHVuX2VuYWJsZV9xdWV1ZSh0ZmlsZSk7CkBAIC02ODcsNiAmIzQzOzcwMywyNSBAQCBzdGF0aWMgdm9pZCB0dW5fZGV0YWNoX2FsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHR1bl9mb3JjZV93YWtlX3F1ZXVlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sCiYjNDM7CQkJCSBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKQomIzQzO3sKJiM0MzsJLyogRW5zdXJlIHRoYXQgdGhlIHByb2R1Y2VyIGNhbiBub3Qgc3RvcCB0aGUKJiM0MzsJICogcXVldWUgY29uY3VycmVudGx5IGJ5IHRha2luZyBsb2Nrcy4KJiM0MzsJICovCiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3RmaWxlLSZndDt0eF9yaW5nLmNvbnN1bWVyX2xvY2spOwomIzQzOwlzcGluX2xvY2soJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZy5wcm9kdWNlcl9sb2NrKTsKJiM0MzsJdGZpbGUtJmd0O2NvbnNfY250ID0gMDsKJiM0MzsJLyogVGVzdGVkIHVuZGVyIHRoZSBsb2NrcyB0aGF0IHR1bl9uZXRfY2xvc2UoKSB0YWtlcywgc28gdGhpcyBjYW4gbm90CiYjNDM7CSAqIHVuZG8gaXRzIHN0b3AuIHR1bl9uZXRfb3BlbigpIHdha2VzIHRoZSBxdWV1ZXMgb2YgYSBkZXZpY2UgdGhhdAomIzQzOwkgKiBjb21lcyBiYWNrIHVwLgomIzQzOwkgKi8KJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcodHVuLSZndDtkZXYpKQomIzQzOwkJbmV0aWZfd2FrZV9zdWJxdWV1ZSh0dW4tJmd0O2RldiwgdGZpbGUtJmd0O3F1ZXVlX2luZGV4KTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZy5wcm9kdWNlcl9sb2NrKTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZy5jb25zdW1lcl9sb2NrKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHR1bl9hdHRhY2goc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCSAgICAgIGJvb2wgc2tpcF9maWx0ZXIsIGJvb2wgbmFwaSwgYm9vbCBuYXBpX2ZyYWdzLAogCQkgICAgICBib29sIHB1Ymxpc2hfdHVuKQpAQCAtNzMwLDggJiM0Mzs3NjUsMTEgQEAgc3RhdGljIGludCB0dW5fYXR0YWNoKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCBmaWxlICpmaWxlLAogCQlnb3RvIG91dDsKIAl9CiAKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcuY29uc3VtZXJfbG9jayk7CiAJdGZpbGUtJmd0O3F1ZXVlX2luZGV4ID0gdHVuLSZndDtudW1xdWV1ZXM7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcuY29uc3VtZXJfbG9jayk7CiAJdGZpbGUtJmd0O3NvY2tldC5zay0mZ3Q7c2tfc2h1dGRvd24gJmFtcDs9IH5SQ1ZfU0hVVERPV047CiYjNDM7CXR1bl9mb3JjZV93YWtlX3F1ZXVlKHR1biwgdGZpbGUpOwogCiAJaWYgKHRmaWxlLSZndDtkZXRhY2hlZCkgewogCQkvKiBSZS1hdHRhY2ggZGV0YWNoZWQgdGZpbGUsIHVwZGF0aW5nIFhEUCBxdWV1ZV9pbmRleCAqLwpAQCAtOTY0LDYgJiM0MzsxMDAyLDI0IEBAIHN0YXRpYyBpbnQgdHVuX25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAvKiBOZXQgZGV2aWNlIGNsb3NlLiAqLwogc3RhdGljIGludCB0dW5fbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiYjNDM7CXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwlzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJLyogbmV0aWZfcnVubmluZygpIGlzIGFscmVhZHkgZmFsc2U6IHRha2UgYm90aCByaW5nIGxvY2tzIHRvIGtlZXAgdGhlCiYjNDM7CSAqIHdha2Ugc2l0ZXMgb3V0LCBzbyB0aGUgc3RvcCBiZWxvdyBpcyB0aGUgbGFzdCB3cml0ZSB0bwomIzQzOwkgKiBfX1FVRVVFX1NUQVRFX0RSVl9YT0ZGLgomIzQzOwkgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHR1bi0mZ3Q7bnVtcXVldWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi0mZ3Q7dGZpbGVzW2ldKTsKJiM0MzsKJiM0MzsJCXNwaW5fbG9ja19iaCgmYW1wO3RmaWxlLSZndDt0eF9yaW5nLmNvbnN1bWVyX2xvY2spOwomIzQzOwkJc3Bpbl9sb2NrKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcucHJvZHVjZXJfbG9jayk7CiYjNDM7CQl0ZmlsZS0mZ3Q7Y29uc19jbnQgPSAwOwomIzQzOwkJc3Bpbl91bmxvY2soJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZy5wcm9kdWNlcl9sb2NrKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcuY29uc3VtZXJfbG9jayk7CiYjNDM7CX0KJiM0MzsKIAluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoZGV2KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEwMDgsNiAmIzQzOzEwNjQsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJc3RydWN0IG5ldGRldl9xdWV1ZSAqcXVldWU7CiAJc3RydWN0IHR1bl9maWxlICp0ZmlsZTsKIAlpbnQgbGVuID0gc2tiLSZndDtsZW47CiYjNDM7CWludCByZXQ7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJdGZpbGUgPSByY3VfZGVyZWZlcmVuY2UodHVuLSZndDt0ZmlsZXNbdHhxXSk7CkBAIC0xMDYyLDEzICYjNDM7MTExOSwzNSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIAluZl9yZXNldF9jdChza2IpOwogCi0JaWYgKHB0cl9yaW5nX3Byb2R1Y2UoJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZywgc2tiKSkgewomIzQzOwlxdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCB0eHEpOwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZy5wcm9kdWNlcl9sb2NrKTsKJiM0MzsJcmV0ID0gX19wdHJfcmluZ19wcm9kdWNlKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcsIHNrYik7CiYjNDM7CS8qIERvIG5vdCB0b3VjaCB0aGUgcXVldWUgc3RhdGUgb2YgYSBkZXZpY2UgdGhhdCBpcyBnb2luZyBkb3duLiAqLwomIzQzOwlpZiAoKHR1bi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX0JBQ0tQUkVTU1VSRSkgJmFtcDsmYW1wOyBuZXRpZl9ydW5uaW5nKGRldikgJmFtcDsmYW1wOwomIzQzOwkgICAgIXFkaXNjX3R4cV9oYXNfbm9fcXVldWUocXVldWUpICZhbXA7JmFtcDsKJiM0MzsJICAgIF9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZSgmYW1wO3RmaWxlLSZndDt0eF9yaW5nKSA9PSAtRU5PU1BDKSB7CiYjNDM7CQluZXRpZl90eF9zdG9wX3F1ZXVlKHF1ZXVlKTsKJiM0MzsJCS8qIFBhaXJlZCB3aXRoIHNtcF9tYigpIGluIF9fdHVuX3dha2VfcXVldWUoKSAqLwomIzQzOwkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKJiM0MzsJCWlmICghX19wdHJfcmluZ19jaGVja19wcm9kdWNlKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcpKQomIzQzOwkJCW5ldGlmX3R4X3dha2VfcXVldWUocXVldWUpOwomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcucHJvZHVjZXJfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCS8qIFRoaXMgc2hvdWxkIGJlIGEgcmFyZSBjYXNlIGlmIElGRl9CQUNLUFJFU1NVUkUgaXMgZW5hYmxlZCBhbmQKJiM0MzsJCSAqIGEgcWRpc2MgaXMgcHJlc2VudCwgYnV0IGNhbiBoYXBwZW4gZHVlIHRvIGxsdHguCiYjNDM7CQkgKiBTaW5jZSBza2JfdHhfdGltZXN0YW1wKCksIHNrYl9vcnBoYW4oKSwKJiM0MzsJCSAqIHJ1bl9lYnBmX2ZpbHRlcigpIGFuZCBwc2tiX3RyaW0oKSBjb3VsZCBoYXZlIHRpbmtlcmVkCiYjNDM7CQkgKiB3aXRoIHRoZSBTS0IsIHJldHVybmluZyBORVRERVZfVFhfQlVTWSBpcyB1bnNhZmUgYW5kCiYjNDM7CQkgKiB3ZSBtdXN0IGRyb3AgaW5zdGVhZC4KJiM0MzsJCSAqLwogCQlkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9GVUxMX1JJTkc7CiAJCWdvdG8gZHJvcDsKIAl9CiAKIAkvKiBkZXYtJmd0O2xsdHggcmVxdWlyZXMgdG8gZG8gb3VyIG93biB1cGRhdGUgb2YgdHJhbnNfc3RhcnQgKi8KLQlxdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCB0eHEpOwogCXR4cV90cmFuc19jb25kX3VwZGF0ZShxdWV1ZSk7CiAKIAkvKiBOb3RpZnkgYW5kIHdha2UgdXAgcmVhZGVyIHByb2Nlc3MgKi8KQEAgLTIxMTYsMTMgJiM0MzsyMTk1LDYxIEBAIHN0YXRpYyBzc2l6ZV90IHR1bl9wdXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLAogCXJldHVybiB0b3RhbDsKIH0KIAotc3RhdGljIHZvaWQgKnR1bl9yaW5nX3JlY3Yoc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgaW50IG5vYmxvY2ssIGludCAqZXJyKQomIzQzOy8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqLwomIzQzO3N0YXRpYyB2b2lkIF9fdHVuX3dha2VfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwKJiM0MzsJCQkgICAgIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGludCBjb25zdW1lZCkKJiM0Mzt7CiYjNDM7CXUxNiBxdWV1ZV9pbmRleCA9IHRmaWxlLSZndDtxdWV1ZV9pbmRleDsKJiM0MzsJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcuY29uc3VtZXJfbG9jayk7CiYjNDM7CiYjNDM7CWlmICghKHR1bi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX0JBQ0tQUkVTU1VSRSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIEEgc3RvcCBmcm9tIHR1bl9uZXRfY2xvc2UoKSBpcyBub3QgYmFja3ByZXNzdXJlLCBsZWF2ZSBpdCBhbG9uZS4gKi8KJiM0MzsJaWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKHR1bi0mZ3Q7ZGV2KSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIE9ubHkgdGhlIGN1cnJlbnQgb3duZXIgb2YgdGhlIHNsb3QgbWF5IHdha2UgaXRzIHN1YnF1ZXVlLiAqLwomIzQzOwlpZiAodW5saWtlbHkocmN1X2FjY2Vzc19wb2ludGVyKHR1bi0mZ3Q7dGZpbGVzW3F1ZXVlX2luZGV4XSkgIT0gdGZpbGUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHR1bi0mZ3Q7ZGV2LCBxdWV1ZV9pbmRleCk7CiYjNDM7CiYjNDM7CS8qIFBhaXJlZCB3aXRoIHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCkgaW4gdHVuX25ldF94bWl0KCkgKi8KJiM0MzsJc21wX21iKCk7CiYjNDM7CWlmIChuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkpIHsKJiM0MzsJCXRmaWxlLSZndDtjb25zX2NudCAmIzQzOz0gY29uc3VtZWQ7CiYjNDM7CQlpZiAodGZpbGUtJmd0O2NvbnNfY250ICZndDs9IHRmaWxlLSZndDt0eF9yaW5nLnNpemUgLyAyIHx8CiYjNDM7CQkgICAgX19wdHJfcmluZ19lbXB0eSgmYW1wO3RmaWxlLSZndDt0eF9yaW5nKSkgewomIzQzOwkJCW5ldGlmX3R4X3dha2VfcXVldWUodHhxKTsKJiM0MzsJCQl0ZmlsZS0mZ3Q7Y29uc19jbnQgPSAwOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkICp0dW5fcmluZ19jb25zdW1lKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpCiYjNDM7ewomIzQzOwl2b2lkICpwdHI7CiYjNDM7CiYjNDM7CXNwaW5fbG9jaygmYW1wO3RmaWxlLSZndDt0eF9yaW5nLmNvbnN1bWVyX2xvY2spOwomIzQzOwlwdHIgPSBfX3B0cl9yaW5nX2NvbnN1bWUoJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZyk7CiYjNDM7CWlmIChwdHIpCiYjNDM7CQlfX3R1bl93YWtlX3F1ZXVlKHR1biwgdGZpbGUsIDEpOwomIzQzOwomIzQzOwlzcGluX3VubG9jaygmYW1wO3RmaWxlLSZndDt0eF9yaW5nLmNvbnN1bWVyX2xvY2spOwomIzQzOwlyZXR1cm4gcHRyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLAomIzQzOwkJCSAgIGludCBub2Jsb2NrLCBpbnQgKmVycikKIHsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAl2b2lkICpwdHIgPSBOVUxMOwogCWludCBlcnJvciA9IDA7CiAKLQlwdHIgPSBwdHJfcmluZ19jb25zdW1lKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcpOwomIzQzOwlwdHIgPSB0dW5fcmluZ19jb25zdW1lKHR1biwgdGZpbGUpOwogCWlmIChwdHIpCiAJCWdvdG8gb3V0OwogCWlmIChub2Jsb2NrKSB7CkBAIC0yMTM0LDcgJiM0MzsyMjYxLDcgQEAgc3RhdGljIHZvaWQgKnR1bl9yaW5nX3JlY3Yoc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgaW50IG5vYmxvY2ssIGludCAqZXJyKQogCiAJd2hpbGUgKDEpIHsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJcHRyID0gcHRyX3JpbmdfY29uc3VtZSgmYW1wO3RmaWxlLSZndDt0eF9yaW5nKTsKJiM0MzsJCXB0ciA9IHR1bl9yaW5nX2NvbnN1bWUodHVuLCB0ZmlsZSk7CiAJCWlmIChwdHIpCiAJCQlicmVhazsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CkBAIC0yMTcxLDcgJiM0MzsyMjk4LDcgQEAgc3RhdGljIHNzaXplX3QgdHVuX2RvX3JlYWQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSwKIAogCWlmICghcHRyKSB7CiAJCS8qIFJlYWQgZnJhbWVzIGZyb20gcmluZyAqLwotCQlwdHIgPSB0dW5fcmluZ19yZWN2KHRmaWxlLCBub2Jsb2NrLCAmYW1wO2Vycik7CiYjNDM7CQlwdHIgPSB0dW5fcmluZ19yZWN2KHR1biwgdGZpbGUsIG5vYmxvY2ssICZhbXA7ZXJyKTsKIAkJaWYgKCFwdHIpCiAJCQlyZXR1cm4gZXJyOwogCX0KQEAgLTI3MDMsOCAmIzQzOzI4MzAsOSBAQCBzdGF0aWMgaW50IHR1bl9zZXRfaWZmKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKQogewogCXN0cnVjdCB0dW5fc3RydWN0ICp0dW47CiAJc3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKJiM0MzsJc3RydWN0IHR1bl9maWxlICpudGZpbGU7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlpbnQgZXJyOwomIzQzOwlpbnQgZXJyLCBpOwogCiAJaWYgKHRmaWxlLSZndDtkZXRhY2hlZCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yODMzLDggJiM0MzsyOTYxLDEwIEBAIHN0YXRpYyBpbnQgdHVuX3NldF9pZmYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlmcmVxICppZnIpCiAJLyogTWFrZSBzdXJlIHBlcnNpc3RlbnQgZGV2aWNlcyBkbyBub3QgZ2V0IHN0dWNrIGluCiAJICogeG9mZiBzdGF0ZS4KIAkgKi8KLQlpZiAobmV0aWZfcnVubmluZyh0dW4tJmd0O2RldikpCi0JCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyh0dW4tJmd0O2Rldik7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0dW4tJmd0O251bXF1ZXVlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCW50ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLSZndDt0ZmlsZXNbaV0pOwomIzQzOwkJdHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCBudGZpbGUpOwomIzQzOwl9CiAKIAlzdHJzY3B5KGlmci0mZ3Q7aWZyX25hbWUsIHR1bi0mZ3Q7ZGV2LSZndDtuYW1lKTsKIAlyZXR1cm4gMDsKQEAgLTM2MzAsNiAmIzQzOzM3NjAsMTMgQEAgc3RhdGljIGludCB0dW5fcXVldWVfcmVzaXplKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4pCiAJCQkJCSAgZGV2LSZndDt0eF9xdWV1ZV9sZW4sIEdGUF9LRVJORUwsCiAJCQkJCSAgdHVuX3B0cl9mcmVlKTsKIAomIzQzOwlpZiAoIXJldCkgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHR1bi0mZ3Q7bnVtcXVldWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCXRmaWxlID0gcnRubF9kZXJlZmVyZW5jZSh0dW4tJmd0O3RmaWxlc1tpXSk7CiYjNDM7CQkJdHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCB0ZmlsZSk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlrZnJlZShyaW5ncyk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTM3MzgsNiAmIzQzOzM4NzUsMzEgQEAgc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpCiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0dW5fZ2V0X3R4X3JpbmcpOwogCiYjNDM7LyogQ2FsbGVycyBtdXN0IGhvbGQgcmluZy5jb25zdW1lcl9sb2NrICovCiYjNDM7dm9pZCB0dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNvbnN1bWVkKQomIzQzO3sKJiM0MzsJc3RydWN0IHR1bl9maWxlICp0ZmlsZTsKJiM0MzsJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bjsKJiM0MzsKJiM0MzsJaWYgKGZpbGUtJmd0O2Zfb3AgIT0gJmFtcDt0dW5fZm9wcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJdGZpbGUgPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CWlmICghdGZpbGUpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZy5jb25zdW1lcl9sb2NrKTsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwomIzQzOwl0dW4gPSByY3VfZGVyZWZlcmVuY2UodGZpbGUtJmd0O3R1bik7CiYjNDM7CWlmICh0dW4pCiYjNDM7CQlfX3R1bl93YWtlX3F1ZXVlKHR1biwgdGZpbGUsIGNvbnN1bWVkKTsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHR1bl93YWtlX3F1ZXVlKTsKJiM0MzsKIG1vZHVsZV9pbml0KHR1bl9pbml0KTsKIG1vZHVsZV9leGl0KHR1bl9jbGVhbnVwKTsKIE1PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQ1JJUFRJT04pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmMKaW5kZXggNjk0OWI3MDQxNjZkNS4uM2U3MmI5YzZhZjBjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC9uZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L25ldC5jCkBAIC0xNzYsMTMgJiM0MzsxNzYsMjEgQEAgc3RhdGljIHZvaWQgKnZob3N0X25ldF9idWZfY29uc3VtZShzdHJ1Y3Qgdmhvc3RfbmV0X2J1ZiAqcnhxKQogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpCiYjNDM7c3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc3RydWN0IHNvY2sgKnNrLAomIzQzOwkJCQkgc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSkKIHsKJiM0MzsJc3RydWN0IGZpbGUgKmZpbGUgPSBzay0mZ3Q7c2tfc29ja2V0LSZndDtmaWxlOwogCXN0cnVjdCB2aG9zdF9uZXRfYnVmICpyeHEgPSAmYW1wO252cS0mZ3Q7cnhxOwogCiAJcnhxLSZndDtoZWFkID0gMDsKLQlyeHEtJmd0O3RhaWwgPSBwdHJfcmluZ19jb25zdW1lX2JhdGNoZWQobnZxLSZndDtyeF9yaW5nLCByeHEtJmd0O3F1ZXVlLAotCQkJCQkgICAgICBWSE9TVF9ORVRfQkFUQ0gpOwomIzQzOwlzcGluX2xvY2soJmFtcDtudnEtJmd0O3J4X3JpbmctJmd0O2NvbnN1bWVyX2xvY2spOwomIzQzOwlyeHEtJmd0O3RhaWwgPSBfX3B0cl9yaW5nX2NvbnN1bWVfYmF0Y2hlZChudnEtJmd0O3J4X3JpbmcsIHJ4cS0mZ3Q7cXVldWUsCiYjNDM7CQkJCQkgICAgICAgVkhPU1RfTkVUX0JBVENIKTsKJiM0MzsKJiM0MzsJaWYgKHJ4cS0mZ3Q7dGFpbCkKJiM0MzsJCXR1bl93YWtlX3F1ZXVlKGZpbGUsIHJ4cS0mZ3Q7dGFpbCk7CiYjNDM7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7bnZxLSZndDtyeF9yaW5nLSZndDtjb25zdW1lcl9sb2NrKTsKIAlyZXR1cm4gcnhxLSZndDt0YWlsOwogfQogCkBAIC0yMDksMTQgJiM0MzsyMTcsMTUgQEAgc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWtfbGVuKHZvaWQgKnB0cikKIAlyZXR1cm4gX19za2JfYXJyYXlfbGVuX3dpdGhfdGFnKHB0cik7CiB9CiAKLXN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpCiYjNDM7c3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWsoc3RydWN0IHNvY2sgKnNrLAomIzQzOwkJCSAgICAgIHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpCiB7CiAJc3RydWN0IHZob3N0X25ldF9idWYgKnJ4cSA9ICZhbXA7bnZxLSZndDtyeHE7CiAKIAlpZiAoIXZob3N0X25ldF9idWZfaXNfZW1wdHkocnhxKSkKIAkJZ290byBvdXQ7CiAKLQlpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShudnEpKQomIzQzOwlpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShzaywgbnZxKSkKIAkJcmV0dXJuIDA7CiAKIG91dDoKQEAgLTEwMDQsNyAmIzQzOzEwMTMsNyBAQCBzdGF0aWMgaW50IHBlZWtfaGVhZF9sZW4oc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKnJ2cSwgc3RydWN0IHNvY2sgKnNrKQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAocnZxLSZndDtyeF9yaW5nKQotCQlyZXR1cm4gdmhvc3RfbmV0X2J1Zl9wZWVrKHJ2cSk7CiYjNDM7CQlyZXR1cm4gdmhvc3RfbmV0X2J1Zl9wZWVrKHNrLCBydnEpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtzay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrLCBmbGFncyk7CiAJaGVhZCA9IHNrYl9wZWVrKCZhbXA7c2stJmd0O3NrX3JlY2VpdmVfcXVldWUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl90dW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdHVuLmgKaW5kZXggODAxNjZlYjYyZjQxYy4uZWViOWVkM2M1YTIzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl90dW4uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oCkBAIC0yMiw2ICYjNDM7MjIsOCBAQCBzdHJ1Y3QgdHVuX21zZ19jdGwgewogI2lmIGRlZmluZWQoQ09ORklHX1RVTikgfHwgZGVmaW5lZChDT05GSUdfVFVOX01PRFVMRSkKIHN0cnVjdCBzb2NrZXQgKnR1bl9nZXRfc29ja2V0KHN0cnVjdCBmaWxlICopOwogc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpOwomIzQzOy8qIENhbGxlcnMgbXVzdCBob2xkIHRoZSBjb25zdW1lcl9sb2NrIG9mIHRoZSByaW5nIG9mIGZpbGUgKi8KJiM0Mzt2b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY29uc3VtZWQpOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgdHVuX2lzX3hkcF9mcmFtZSh2b2lkICpwdHIpCiB7CkBAIC01NSw2ICYjNDM7NTcsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwdHJfcmluZyAqdHVuX2dldF90eF9yaW5nKHN0cnVjdCBmaWxlICpmKQogCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmLCBpbnQgY29uc3VtZWQpIHt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGJvb2wgdHVuX2lzX3hkcF9mcmFtZSh2b2lkICpwdHIpCiB7CiAJcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oIGIvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oCmluZGV4IGQyYzM2MjliYmU0NTEuLjYzMWM0M2ZkZTQ0MDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmgKQEAgLTk2LDYgJiM0Mzs5NiwyNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcHRyX3JpbmdfZnVsbF9iaChzdHJ1Y3QgcHRyX3JpbmcgKnIpCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzOy8qIFJlcG9ydCB3aGV0aGVyIHRoZSBuZXh0IF9fcHRyX3JpbmdfcHJvZHVjZSgpIGhhcyByb29tIGZvciBvbmUgZW50cnk6CiYjNDM7ICogMCBtZWFucyB0aGUgc2luZ2xlIHNsb3QgYXQgci0mZ3Q7cXVldWVbci0mZ3Q7cHJvZHVjZXJdIGlzIGZyZWUsIC1FTk9TUEMgbWVhbnMKJiM0MzsgKiB0aGUgcmluZyBpcyBmdWxsLCB3aGljaCBpcyB0cmFuc2llbnQsIGFuZCAtRUlOVkFMIG1lYW5zIHItJmd0O3NpemUgaXMgMCwKJiM0MzsgKiB3aGljaCBpcyBwZXJtYW5lbnQuIEEgY2FsbGVyIHRoYXQgc3RvcHMgcHJvZHVjaW5nIGFuZCB3YWl0cyBmb3Igc3BhY2UKJiM0MzsgKiBtdXN0IHRoZXJlZm9yZSBkbyBzbyBvbmx5IGZvciAtRU5PU1BDLgomIzQzOyAqCiYjNDM7ICogTm90ZTogY2FsbGVycyBpbnZva2luZyB0aGlzIGluIGEgbG9vcCBtdXN0IHVzZSBhIGNvbXBpbGVyIGJhcnJpZXIsCiYjNDM7ICogZm9yIGV4YW1wbGUgY3B1X3JlbGF4KCkuIENhbGxlcnMgbXVzdCBob2xkIHByb2R1Y2VyX2xvY2suCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBpbnQgX19wdHJfcmluZ19jaGVja19wcm9kdWNlKHN0cnVjdCBwdHJfcmluZyAqcikKJiM0Mzt7CiYjNDM7CWlmICh1bmxpa2VseSghci0mZ3Q7c2l6ZSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKGRhdGFfcmFjZShyLSZndDtxdWV1ZVtyLSZndDtwcm9kdWNlcl0pKQomIzQzOwkJcmV0dXJuIC1FTk9TUEM7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLAogICogZm9yIGV4YW1wbGUgY3B1X3JlbGF4KCkuIENhbGxlcnMgbXVzdCBob2xkIHByb2R1Y2VyX2xvY2suCiAgKiBDYWxsZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgcG9pbnRlciB0aGF0IGlzIGJlaW5nIHF1ZXVlZApAQCAtMTAzLDggJiM0MzsxMjMsMTAgQEAgc3RhdGljIGlubGluZSBib29sIHB0cl9yaW5nX2Z1bGxfYmgoc3RydWN0IHB0cl9yaW5nICpyKQogICovCiBzdGF0aWMgaW5saW5lIGludCBfX3B0cl9yaW5nX3Byb2R1Y2Uoc3RydWN0IHB0cl9yaW5nICpyLCB2b2lkICpwdHIpCiB7Ci0JaWYgKHVubGlrZWx5KCFyLSZndDtzaXplKSB8fCBkYXRhX3JhY2Uoci0mZ3Q7cXVldWVbci0mZ3Q7cHJvZHVjZXJdKSkKLQkJcmV0dXJuIC1FTk9TUEM7CiYjNDM7CWludCByZXQgPSBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2Uocik7CiYjNDM7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJLyogTWFrZSBzdXJlIHRoZSBwb2ludGVyIHdlIGFyZSBzdG9yaW5nIHBvaW50cyB0byBhIHZhbGlkIGRhdGEuICovCiAJLyogUGFpcnMgd2l0aCB0aGUgZGVwZW5kZW5jeSBvcmRlcmluZyBpbiBfX3B0cl9yaW5nX2NvbnN1bWUuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmgKaW5kZXggNzlkNTNjN2ExZWJkYy4uYTBkZGM1MGE3NTM0MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaApAQCAtNjksNiAmIzQzOzY5LDEwIEBACiAjZGVmaW5lIElGRl9OQVBJX0ZSQUdTCTB4MDAyMAogLyogVXNlZCBpbiBUVU5TRVRJRkYgdG8gYnJpbmcgdXAgdHVuL3RhcCB3aXRob3V0IGNhcnJpZXIgKi8KICNkZWZpbmUgSUZGX05PX0NBUlJJRVIJMHgwMDQwCiYjNDM7LyogU3RvcCB0aGUgcXVldWUgaW5zdGVhZCBvZiBkcm9wcGluZyB3aGVuIHRoZSBpbnRlcm5hbCByaW5nIGlzIGZ1bGwsIHNvIGFuCiYjNDM7ICogYXR0YWNoZWQgcWRpc2MgYXBwbGllcyBiYWNrcHJlc3N1cmUgaW5zdGVhZCBvZiBiZWluZyBieXBhc3NlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIElGRl9CQUNLUFJFU1NVUkUJMHgwMDgwCiAjZGVmaW5lIElGRl9OT19QSQkweDEwMDAKIC8qIFRoaXMgZmxhZyBoYXMgbm8gcmVhbCBlZmZlY3QgKi8KICNkZWZpbmUgSUZGX09ORV9RVUVVRQkweDIwMDAKZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaAppbmRleCAyZWMwN2RlMWQ3M2JlLi4yYzg1NTI1NzA0YzE2IDEwMDY0NAotLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oCkBAIC02Nyw2ICYjNDM7NjcsMTAgQEAKICNkZWZpbmUgSUZGX1RBUAkJMHgwMDAyCiAjZGVmaW5lIElGRl9OQVBJCTB4MDAxMAogI2RlZmluZSBJRkZfTkFQSV9GUkFHUwkweDAwMjAKJiM0MzsvKiBTdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHdoZW4gdGhlIGludGVybmFsIHJpbmcgaXMgZnVsbCwgc28gYW4KJiM0MzsgKiBhdHRhY2hlZCBxZGlzYyBhcHBsaWVzIGJhY2twcmVzc3VyZSBpbnN0ZWFkIG9mIGJlaW5nIGJ5cGFzc2VkLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgSUZGX0JBQ0tQUkVTU1VSRQkweDAwODAKICNkZWZpbmUgSUZGX05PX1BJCTB4MTAwMAogLyogVGhpcyBmbGFnIGhhcyBubyByZWFsIGVmZmVjdCAqLwogI2RlZmluZSBJRkZfT05FX1FVRVVFCTB4MjAwMAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTY5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSUZGX0JBQ0tQUkVTU1VSRSBQYXRjaCBmb3IgVFVOL1RBUCBEZXZpY2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGludHJvZHVjaW5nIGBJRkZfQkFDS1BSRVNTVVJFYCBmb3IgVFVOL1RBUCBkZXZpY2VzLiBUaGlzIGlzIGEgcHJldHR5IGludGVyZXN0aW5nIGFkZGl0aW9uOyBpdCYjMzk7cyBkZXNpZ25lZCB0byBwcmV2ZW50IHBhY2tldCBkcm9wcyB3aGVuIHRoZSByaW5nIGJ1ZmZlciBpcyBmdWxsIGJ5IGFsbG93aW5nIHRoZSBrZXJuZWwgdG8gKnN0b3AqIHRoZSBxdWV1ZSBpbnN0ZWFkLiBUaGF0IGVuYWJsZXMgYW4gYXR0YWNoZWQgcWRpc2MgdG8gYXBwbHkgYmFja3ByZXNzdXJlIOKAkyB2ZXJ5IGNsZXZlci4KClRoZSBjaGFuZ2VzIGFyZSBzcHJlYWQgYWNyb3NzIHNldmVyYWwgZmlsZXMsIHNvIGxldCYjMzk7cyBicmVhayBpdCBkb3duOiBgZHJpdmVycy9uZXQvdHVuLmNgLCBgZHJpdmVycy92aG9zdC9uZXQuY2AsIHRoZSBpbmNsdWRlcyBgaWZfdHVuLmhgLCBgcHRyX3JpbmcuaGAsIGFuZCB0aGUgVUFQSSBoZWFkZXIgYGlmX3R1bi5oYC4KCkRpdmluZyBpbnRvIGBkcml2ZXJzL25ldC90dW4uY2AsIEkgc2VlIGEgZmV3IGtleSBhZGRpdGlvbnMgYW5kIG1vZGlmaWNhdGlvbnM6IGB0dW5fZm9yY2Vfd2FrZV9xdWV1ZWAgaXMgbmV3LCBhIG1vZGlmaWNhdGlvbiB0byBgdHVuX25ldF9jbG9zZWAgdG8gY2xlYXIgYGNvbnNfY250YC4gVGhlIHJlYWwgbWVhdCBpcyBpbiBgdHVuX25ldF94bWl0YDsgaXQmIzM5O3Mgbm93IGNoZWNraW5nIGZvciBgSUZGX0JBQ0tQUkVTU1VSRWAgYW5kIHN0b3BwaW5nIHRoZSBxdWV1ZSB3aGVuIHRoZSByaW5nIGlzIGZ1bGwg4oCTIGV4YWN0bHkgYXMgZXhwZWN0ZWQuIFdlIGFsc28gaGF2ZSBgX190dW5fd2FrZV9xdWV1ZWAgdG8gd2FrZSB1cCB0aGUgcXVldWUgd2hlbiBpdGVtcyBhcmUgY29uc3VtZWQgZnJvbSB0aGUgcmluZywgYHR1bl9yaW5nX2NvbnN1bWVgICh3aGljaCBsb29rcyBsaWtlIGEgbmV3IHJpbmcgYnVmZmVyIGZ1bmN0aW9uKSwgYHR1bl9yaW5nX3JlY3ZgIG1vZGlmaWVkIHRvIHVzZSBgdHVuX3JpbmdfY29uc3VtZWAsIGFuZCB0aGUgYHR1bl93YWtlX3F1ZXVlYCBpcyBub3cgZXhwb3J0ZWQgZm9yIHZob3N0LiBUaGlzIGxvb2tzIHNvbGlkIGluIHRlcm1zIG9mIGZ1bmN0aW9uYWxpdHkuCgpUaGVuLCBpbiBgZHJpdmVycy92aG9zdC9uZXQuY2AsIGB2aG9zdF9uZXRfYnVmX3Byb2R1Y2VgIGlzIGJlaW5nIG1vZGlmaWVkIHRvIGNhbGwgYHR1bl93YWtlX3F1ZXVlYCB3aGVuIGl0ZW1zIGFyZSBjb25zdW1lZC4gVGhpcyBpbnRlZ3JhdGVzIHRoZSB2aG9zdCBzaWRlIG5pY2VseSwgZW5zdXJpbmcgcHJvcGVyIHF1ZXVlIHdha2luZyBpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYXQgdGhlIGNvcmUgbGV2ZWwgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIHBhcnRpY3VsYXJseSBpbXBhY3RzIFRVTi9UQVAsIHdoaWNoIGFyZSB3aWRlbHkgdXNlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBHaXZlbiBpdHMgcmVhY2gsIGZ1enppbmcgaXMgYW4gYWJzb2x1dGUgbXVzdC1kbyBmb3IgdGhpcy4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgQ09ORklHIG9wdGlvbnMuIE9idmlvdXNseSwgYENPTkZJR19UVU5gIGlzIHRoZSBwcmltYXJ5IG9uZS4gQW5kIHNpbmNlIGl0JiMzOTtzIHZob3N0LWF3YXJlLCBgQ09ORklHX1ZIT1NUX05FVGAgaXMgY3JpdGljYWwsIHRvby4KCkkgbmVlZCB0byBjb25maXJtIHRoZWlyIGxvY2F0aW9uIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLCBzbyBJJiMzOTtsbCBjaGVjayBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZm9yIHRoZSBgVFVOYCBzZXR0aW5nIGFuZCBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBmb3IgYFZIT1NUX05FVGAuIEdvdHRhIG1ha2Ugc3VyZSBhbGwgYmFzZXMgYXJlIGNvdmVyZWQgZnJvbSBhIGJ1aWxkIHBlcnNwZWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUVU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9Mzg2PWNvbmZpZyBSSU9ORVRfUlhfU0laRVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzkwLVxuZHJpdmVycy9uZXQvS2NvbmZpZzozOTE6Y29uZmlnIFRVTlxuZHJpdmVycy9uZXQvS2NvbmZpZy0zOTItXHR0cmlzdGF0ZSBcJiMzNDtVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTQxNT1jb25maWcgVEFQXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy00MjAtXG5kcml2ZXJzL25ldC9LY29uZmlnOjQyMTpjb25maWcgVFVOX1ZORVRfQ1JPU1NfTEVcbmRyaXZlcnMvbmV0L0tjb25maWctNDIyLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBjcm9zcy1lbmRpYW4gdm5ldCBoZWFkZXJzIG9uIGxpdHRsZS1lbmRpYW4ga2VybmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MzYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBWSE9TVF9ORVQgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBmaWxlLiBHaXZlbiBteSBleHBlcmllbmNlLCB0aGF0JiMzOTtzIGFsbW9zdCBhbHdheXMgdGhlIGZpcnN0IHBsYWNlIEkmIzM5O2QgbG9vayB3aGVuIGRlYWxpbmcgd2l0aCBhbnl0aGluZyByZWxhdGVkIHRvIHZob3N0LCBlc3BlY2lhbGx5IHdoZW4gaXQgY29uY2VybnMgbmV0d29ya2luZy4gSSBrbm93IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgdmhvc3QgZnJhbWV3b3JrIGFyZSBkZWZpbmVkLCBhbmQgYFZIT1NUX05FVGAgaXMgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgdGhlIHNwZWNpZmljIG5ldHdvcmtpbmcgYXNwZWN0IEkmIzM5O20gZm9jdXNlZCBvbi4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IGJ5IGNoZWNraW5nIGBkcml2ZXJzL3Zob3N0L0tjb25maWdgIEkgd2lsbCB1bmRlcnN0YW5kIGlmIHRoYXQmIzM5O3MgZW5hYmxlZCBhbmQgaG93IHRvIGNvbmZpZ3VyZSB0aGF0IHBvcnRpb24gb2YgdGhlIHZpcnR1YWwgaG9zdCBmcmFtZXdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZIT1NUX05FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWc9MzI9aWYgVkhPU1RfTUVOVVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTMzLVxuZHJpdmVycy92aG9zdC9LY29uZmlnOjM0OmNvbmZpZyBWSE9TVF9ORVRcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0zNS1cdHRyaXN0YXRlIFwmIzM0O0hvc3Qga2VybmVsIGFjY2VsZXJhdG9yIGZvciB2aXJ0aW8gbmV0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDI6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMzQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBhcyBpZiBJJiMzOTttIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBWSE9TVF9ORVQgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgVkhPU1RfTkVUYCB0aGluZyBhIGJpdCBiZXR0ZXIuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBpZiBpdCByZWxpZXMgb24gYW55dGhpbmcgc3BlY2lmaWMg4oCTIGFueSBvdGhlciBrZXJuZWwgbW9kdWxlcywgZmVhdHVyZXMsIG9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgKm11c3QqIGJlIGluIHBsYWNlIGZvciBpdCB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBmb3IgYW55IG9idmlvdXMgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvbm5lY3Rpb25zIGFyZS4gVGhpcyBpcyB0aGUgYmVzdCBhcHByb2FjaCB0byBnYWluIGEgc29saWQgZ3Jhc3Agb2YgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnPTM0PWNvbmZpZyBWSE9TVF9ORVRcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0zNS1cdHRyaXN0YXRlIFwmIzM0O0hvc3Qga2VybmVsIGFjY2VsZXJhdG9yIGZvciB2aXJ0aW8gbmV0XCYjMzQ7XG5kcml2ZXJzL3Zob3N0L0tjb25maWc6MzY6XHRkZXBlbmRzIG9uIE5FVCBcdTAwMjZcdTAwMjYgRVZFTlRGRCBcdTAwMjZcdTAwMjYgKFRVTiB8fCAhVFVOKSBcdTAwMjZcdTAwMjYgKFRBUCB8fCAhVEFQKVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTM3LVx0c2VsZWN0IFZIT1NUXG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnPTQ2PWNvbmZpZyBWSE9TVF9TQ1NJXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNDctXHR0cmlzdGF0ZSBcJiMzNDtWSE9TVF9TQ1NJIFRDTSBmYWJyaWMgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NDg6XHRkZXBlbmRzIG9uIFRBUkdFVF9DT1JFIFx1MDAyNlx1MDAyNiBFVkVOVEZEXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNDktXHRzZWxlY3QgVkhPU1Rcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9NTY9Y29uZmlnIFZIT1NUX1ZTT0NLXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTctXHR0cmlzdGF0ZSBcJiMzNDt2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NTg6XHRkZXBlbmRzIG9uIFZTT0NLRVRTIFx1MDAyNlx1MDAyNiBFVkVOVEZEXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTktXHRzZWxlY3QgVkhPU1Rcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9NzA9Y29uZmlnIFZIT1NUX1ZEUEFcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03MS1cdHRyaXN0YXRlIFwmIzM0O1Zob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXCYjMzQ7XG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NzI6XHRkZXBlbmRzIG9uIEVWRU5URkRcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03My1cdHNlbGVjdCBWSE9TVFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTc0LVx0c2VsZWN0IElSUV9CWVBBU1NfTUFOQUdFUlxuZHJpdmVycy92aG9zdC9LY29uZmlnOjc1Olx0ZGVwZW5kcyBvbiBWRFBBXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNzYtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2MTQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBbmFseXNpcyBvZiBUVU4gYW5kIFZIT1NUX05FVCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGBUVU5gIGFuZCBgVkhPU1RfTkVUYCBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVyZS4gTGV0JiMzOTtzIGdldCByaWdodCB0byB0aGUgY29yZSBvZiB0aGUgbWF0dGVyLCB0aGUga2V5IHN5bWJvbHMuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZXNlIGZ1bmN0aW9ucyB3aXRoaW4gYGRyaXZlcnMvbmV0L3R1bi5jYDoKCiogICBgdHVuX25ldF94bWl0YCAtIFRoaXMgaXMgY2xlYXJseSBpbXBvcnRhbnQgZm9yIHRyYW5zbWlzc2lvbi4KKiAgIGB0dW5fc2V0X2lmZmAgLSBEZWZpbml0ZWx5IGEgY3JpdGljYWwgb25lIGZvciBpbnRlcmZhY2UgY29uZmlndXJhdGlvbi4KKiAgIGB0dW5fd2FrZV9xdWV1ZWAgLSBUaGlzIGlzIGFsd2F5cyBhbiBpbnRlcmVzdGluZyBvbmUgcmVsYXRlZCB0byBxdWV1ZSBtYW5hZ2VtZW50LgoqICAgYHR1bl9yaW5nX3JlY3ZgIC0gU2VlbXMgdG8gYmUgc3RhdGljLCBidXQgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgb24gaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSBmaWxlLCBsaWtlbHkgdGhyb3VnaCBgdHVuX2RvX3JlYWRgIG9yIGB0dW5fY2hyX3JlYWRfaXRlcmAuCiogICBgdHVuX25ldF9jbG9zZWAgLSBNdXN0IGJlIGltcG9ydGFudCBmb3IgY2xlYW51cAoqICAgYHR1bl9xdWV1ZV9yZXNpemVgIC0gQWx3YXlzIGltcG9ydGFudCB0byBrbm93IGhvdyB0byBtYW5hZ2UgdGhlIHF1ZXVlIHNpemUKKiAgIGB0dW5fZGV0YWNoX2FsbGAgLSBQb3NzaWJseSBpbXBvcnRhbnQsIHdvcnRoIGEgbG9vay4KKiAgIGB0dW5fYXR0YWNoYCAtIGFsc28gYSBzdGF0aWMgZnVuY3Rpb24gY2FsbGVkIGJ5IGB0dW5fc2V0X2lmZmAuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIGBkcml2ZXJzL25ldC90dW4uY2AgZm9yIGhvdyBgdHVuX3JpbmdfcmVjdmAgYW5kIGB0dW5fd2FrZV9xdWV1ZWAgYXJlIHVzZWQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGNvbnRleHQgdG8gZGV0ZXJtaW5lIHRoZWlyIHRydWUgc2lnbmlmaWNhbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dW5fd2FrZV9xdWV1ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jPTEwNTk9c3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTExMzAtXHRcdG5ldGlmX3R4X3N0b3BfcXVldWUocXVldWUpO1xuZHJpdmVycy9uZXQvdHVuLmM6MTEzMTpcdFx0LyogUGFpcmVkIHdpdGggc21wX21iKCkgaW4gX190dW5fd2FrZV9xdWV1ZSgpICovXG5kcml2ZXJzL25ldC90dW4uYy0xMTMyLVx0XHRzbXBfbWJfX2FmdGVyX2F0b21pYygpO1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTIxMTQ9c3RhdGljIHNzaXplX3QgdHVuX3B1dF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjE5OC0vKiBDYWxsZXJzIG11c3QgaG9sZCByaW5nLmNvbnN1bWVyX2xvY2sgKi9cbmRyaXZlcnMvbmV0L3R1bi5jOjIxOTk6c3RhdGljIHZvaWQgX190dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuZHJpdmVycy9uZXQvdHVuLmMtMjIwMC1cdFx0XHQgICAgIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGludCBjb25zdW1lZClcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0yMjMyPXN0YXRpYyB2b2lkICp0dW5fcmluZ19jb25zdW1lKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjIzOC1cdGlmIChwdHIpXG5kcml2ZXJzL25ldC90dW4uYzoyMjM5Olx0XHRfX3R1bl93YWtlX3F1ZXVlKHR1biwgdGZpbGUsIDEpO1xuZHJpdmVycy9uZXQvdHVuLmMtMjI0MC1cbi0tXG5kcml2ZXJzL25ldC90dW4uYz0zODc2PUVYUE9SVF9TWU1CT0xfR1BMKHR1bl9nZXRfdHhfcmluZyk7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzg3OC0vKiBDYWxsZXJzIG11c3QgaG9sZCByaW5nLmNvbnN1bWVyX2xvY2sgKi9cbmRyaXZlcnMvbmV0L3R1bi5jOjM4Nzk6dm9pZCB0dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNvbnN1bWVkKVxuZHJpdmVycy9uZXQvdHVuLmMtMzg4MC17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzg5Ni1cdGlmICh0dW4pXG5kcml2ZXJzL25ldC90dW4uYzozODk3Olx0XHRfX3R1bl93YWtlX3F1ZXVlKHR1biwgdGZpbGUsIGNvbnN1bWVkKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTM4OTgtXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzkwMC19XG5kcml2ZXJzL25ldC90dW4uYzozOTAxOkVYUE9SVF9TWU1CT0xfR1BMKHR1bl93YWtlX3F1ZXVlKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTM5MDItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzI3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVFVOL1ZIT1NUIE5ldHdvcmsgSW50ZXJmYWNlIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgVFVOL1ZIT1NUIG5ldHdvcmtpbmcgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgaW50ZXJhY3Rpb24gcG9pbnRzLiBJIHNlZSB0aGF0IGB0dW5fd2FrZV9xdWV1ZWAgaXMgZXhwb3J0ZWQsIHdoaWNoIGlzIGltcG9ydGFudCBmb3Igc2lnbmFsaW5nIGRhdGEgYXZhaWxhYmlsaXR5LiBUaGVuIHdlIGhhdmUgYHR1bl9uZXRfeG1pdGAsIHdoaWNoIGlzIHRoZSBuZXRkZXYgdHJhbnNtaXQgZnVuY3Rpb24g4oCTIHRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgaG93IHBhY2tldHMgZ2V0IHNlbnQgb3V0LiBgdHVuX3NldF9pZmZgIGhhbmRsZXMgdGhlIGlvY3RscywgdGhhdCBtYWtlcyBzZW5zZS4gQW5kIGB0dW5fcXVldWVfcmVzaXplYCBpcywgb2YgY291cnNlLCB0aGUgZnVuY3Rpb24gdG8gaGFuZGxlIHF1ZXVlIHNpemUgY2hhbmdlcyBhbmQgaXMgY2FsbGVkIGVpdGhlciBieSBgdHVuX2Nocl9pb2N0bGAgb3IgYHR1bl9uZXRfY2hhbmdlX210dWAuCgpOb3csIHRoaW5ncyBnZXQgYSBiaXQgbW9yZSBpbnRyaWNhdGUgd2l0aCB0aGUgVkhPU1Qgc2lkZS4gSSBzZWUgYHZob3N0X25ldF9idWZfcHJvZHVjZWAgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYnV0IGl0IGdldHMgY2FsbGVkIGZyb20gYHZob3N0X25ldF9idWZfcGVla2AuIFRoYXQgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZnJvbSBgcGVla19oZWFkX2xlbmAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGVpdGhlciBgdmhvc3RfbmV0X3J4X3BlZWtfaGVhZF9sZW5gIG9yLCBtb3JlIGltcG9ydGFudGx5LCBgaGFuZGxlX3J4YC4gU28sIGBoYW5kbGVfcnhgIGFuZCBgdmhvc3RfbmV0X3J4X3BlZWtfaGVhZF9sZW5gIGxpa2VseSBkbyBhIGxvdCBvZiB0aGUgaGVhdnkgbGlmdGluZy4gVGltZSB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBkcml2ZXJzL3Zob3N0L25ldC5jYCBmaWxlIGFuZCB1bmRlcnN0YW5kIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9ucyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfbmV0X2J1Zl9wcm9kdWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9uZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L25ldC5jPTE3Mj1zdGF0aWMgdm9pZCAqdmhvc3RfbmV0X2J1Zl9jb25zdW1lKHN0cnVjdCB2aG9zdF9uZXRfYnVmICpyeHEpXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xNzgtXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE3OTpzdGF0aWMgaW50IHZob3N0X25ldF9idWZfcHJvZHVjZShzdHJ1Y3Qgc29jayAqc2ssXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4MC1cdFx0XHRcdCBzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqbnZxKVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM9MjIwPXN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrKHN0cnVjdCBzb2NrICpzayxcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTIyNy1cbmRyaXZlcnMvdmhvc3QvbmV0LmM6MjI4Olx0aWYgKCF2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc2ssIG52cSkpXG5kcml2ZXJzL3Zob3N0L25ldC5jLTIyOS1cdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDMxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBEYXRhIEZsb3c6IHZob3N0X25ldF9idWZfcGVlayB0byBoYW5kbGVfcngqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgbWluZCBpcyB0cmFjaW5nIGEgc3BlY2lmaWMgcGF0aCB3aXRoaW4gdGhlIHZob3N0LW5ldCBkcml2ZXIsIGFuZCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSBzZWVpbmcuIGB2aG9zdF9uZXRfYnVmX3BlZWtgIGlzIHRoZSBrZXkgZnVuY3Rpb24gSSYjMzk7bSBmb2N1c2luZyBvbiByaWdodCBub3cuIEl0JiMzOTtzIGRpcmVjdGx5IGludm9rZWQgYnkgYHBlZWtfaGVhZF9sZW5gLCB3aGljaCBpbiB0dXJuLCBpcyBhIGNhbGxlZCBieSBgaGFuZGxlX3J4YC4gVGhpcyBpcyBjbGVhcmx5IHRoZSBkYXRhIHBhdGggSSBuZWVkIHRvIGJlIGNvbmNlcm5lZCB3aXRoLgoKSSYjMzk7bSBlc3NlbnRpYWxseSB0cmFja2luZyBkYXRhIHRocm91Z2ggdGhlIG5ldHdvcmsgc3RhY2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBtdWNoIGRhdGEgaXMgYXZhaWxhYmxlLCB3aGVyZSBpcyBpdCwgYW5kIHdoYXQgYXJlIHRoZSBzdGVwcyB0byBhY3R1YWxseSBnZXQgaXQgdGhyb3VnaCB0byB0aGUgdXNlci4gYHZob3N0X25ldF9idWZfcGVla2AgaXMsIG9idmlvdXNseSwgdGFza2VkIHdpdGggZ2V0dGluZyBhIGxvb2sgYXQgdGhlIGRhdGEgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyLiBgcGVla19oZWFkX2xlbmAgdGhlbiBhcHBlYXJzIHRvIGJlIHVzaW5nIHRoYXQgcGVlayB0byB3b3JrIG91dCBob3cgbXVjaCBpcyBhdCB0aGUgaGVhZCBvZiB0aGUgYnVmZmVyLiBGaW5hbGx5LCBgaGFuZGxlX3J4YC4uLiB0aGF0JiMzOTtzIHdoZXJlIHRoZSBkYXRhIGlzIHVsdGltYXRlbHkgcHJvY2Vzc2VkLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSB0aGUgYWN0dWFsIHJlY2VpdmUgaGFuZGxpbmcgaXMgcGVyZm9ybWVkLiBTbywgSSBzZWUgdGhpcyBhcyB0aGUgbWFpbiAmIzM0O2RhdGEgcmV0cmlldmFsIGFuZCBwcm9jZXNzaW5nJiMzNDsgdGhyZWFkLiBUaGlzIGFsc28gaW1wbGllcyB0aGF0IEkgbmVlZCB0byBiZSBjYXJlZnVsIHdoZW4gbW9kaWZ5aW5nIHRoZSBpbml0aWFsIHBlZWtpbmcgYXMgaXQgYWZmZWN0cyB0aGUgZGF0YSB0cmFuc2ZlciBhbGwgdGhlIHdheSB0byBpdHMgZGVzdGluYXRpb24uIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBteSBjdXJyZW50IGRlYnVnZ2luZyB0YXNrLiBOb3cgSSBqdXN0IG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGVhY2ggZnVuY3Rpb24gYW5kIHNlZSB3aGVyZSB0aGUga2V5IGludGVyYWN0aW9ucywgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQgYW55IHBvc3NpYmxlIGVycm9ycyBsaWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BlZWtfaGVhZF9sZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmM9OTgzPXN0YXRpYyB2b2lkIGhhbmRsZV90eChzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQpXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDA4LVxuZHJpdmVycy92aG9zdC9uZXQuYzoxMDA5OnN0YXRpYyBpbnQgcGVla19oZWFkX2xlbihzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqcnZxLCBzdHJ1Y3Qgc29jayAqc2spXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEwMTAte1xuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAyOS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTAzMDpzdGF0aWMgaW50IHZob3N0X25ldF9yeF9wZWVrX2hlYWRfbGVuKHN0cnVjdCB2aG9zdF9uZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDMxLVx0XHRcdFx0ICAgICAgYm9vbCAqYnVzeWxvb3BfaW50ciwgdW5zaWduZWQgaW50ICpjb3VudClcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEwMzYtXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp0dnEgPSBcdTAwMjZ0bnZxLVx1MDAzZXZxO1xuZHJpdmVycy92aG9zdC9uZXQuYzoxMDM3Olx0aW50IGxlbiA9IHBlZWtfaGVhZF9sZW4ocm52cSwgc2spO1xuZHJpdmVycy92aG9zdC9uZXQuYy0xMDM4LVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTA0NS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTA0NjpcdFx0bGVuID0gcGVla19oZWFkX2xlbihybnZxLCBzayk7XG5kcml2ZXJzL3Zob3N0L25ldC5jLTEwNDctXHR9XG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYz0xMTQ5PXN0YXRpYyB2b2lkIGhhbmRsZV9yeChzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQpXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xMjAxLVx0ZG8ge1xuZHJpdmVycy92aG9zdC9uZXQuYzoxMjAyOlx0XHRzb2NrX2xlbiA9IHZob3N0X25ldF9yeF9wZWVrX2hlYWRfbGVuKG5ldCwgc29jay1cdTAwM2VzayxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTIwMy1cdFx0XHRcdFx0XHQgICAgICBcdTAwMjZidXN5bG9vcF9pbnRyLCBcdTAwMjZjb3VudCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzAwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6CgoqKkZvY3VzaW5nIEluIG9uIFZob3N0LU5ldCBmb3IgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBob25pbmcgaW4gb24gdGhlIGB2aG9zdF9uZXRgIG1vZHVsZSwgc3BlY2lmaWNhbGx5IHRoZSBgaGFuZGxlX3J4YCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIGEgcHJpbWUgc3BvdCB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIHBhY2tldCByZWNlcHRpb24gcGF0aC4gSSYjMzk7bSBhbHNvIGpvdHRpbmcgZG93biBhIGZldyBvdGhlciBmdW5jdGlvbnMgdGhhdCBsb29rIHByb21pc2luZyBhcyBJIGV4cGFuZCBteSBzY29wZTogYHR1bl9uZXRfeG1pdGAsIHdoaWNoIHNob3VsZCBoYW5kbGUgdHJhbnNtaXNzaW9uIGZyb20gdGhlIFRVTiBpbnRlcmZhY2UsICBgdHVuX3NldF9pZmZgLCB3aGljaCBoYW5kbGVzIGludGVyZmFjZSBjb25maWd1cmF0aW9uLCBgdHVuX3dha2VfcXVldWVgLCBhbmQgYHR1bl9jaHJfcmVhZF9pdGVyYCB3aGljaCBldmVudHVhbGx5IGNhbGxzIGB0dW5fZG9fcmVhZGAgYW5kIHRoZW4gaW50byBgdHVuX3JpbmdfcmVjdmAuIFRoZXNlLCB0YWtlbiB0b2dldGhlciwgZ2l2ZSBtZSBhIGdvb2QgaW5pdGlhbCByb2FkbWFwIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgdGhyb3VnaCB0aGUgVFVOIGRldmljZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBlbm91Z2ggaW5mbyB0byBtYXAgdGhlIG1ham9yIHBsYXllcnMgYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdG8gaW5zZXJ0IHNvbWUgaW5zdHJ1bWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dW5fY2hyX3JlYWRfaXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jPTIyODc9c3RhdGljIHNzaXplX3QgdHVuX2RvX3JlYWQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yMzIzLVxuZHJpdmVycy9uZXQvdHVuLmM6MjMyNDpzdGF0aWMgc3NpemVfdCB0dW5fY2hyX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG5kcml2ZXJzL25ldC90dW4uYy0yMzI1LXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0zNjAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR1bl9mb3BzID0ge1xuZHJpdmVycy9uZXQvdHVuLmMtMzYwNC1cdC5vd25lclx0PSBUSElTX01PRFVMRSxcbmRyaXZlcnMvbmV0L3R1bi5jOjM2MDU6XHQucmVhZF9pdGVyICA9IHR1bl9jaHJfcmVhZF9pdGVyLFxuZHJpdmVycy9uZXQvdHVuLmMtMzYwNi1cdC53cml0ZV9pdGVyID0gdHVuX2Nocl93cml0ZV9pdGVyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgzMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIGB0dW5fbmV0X2Nsb3NlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSByaWdodCBpbi4gVGhlIGltbWVkaWF0ZSBjb25jZXJuIGlzIHRvIHNjcnV0aW5pemUgdGhlIGB0dW5fbmV0X2Nsb3NlYCBmdW5jdGlvbi4gTXkgbWVudGFsIGNoZWNrbGlzdCBzdGFydHMgcnVubmluZzogd2hhdCYjMzk7cyB0aGUgY29udGV4dD8gV2hhdCYjMzk7cyBpdCBzdXBwb3NlZCB0byBiZSBkb2luZz8gTWVtb3J5IGxlYWtzPyBSZXNvdXJjZSBjb250ZW50aW9uPyBSYWNlIGNvbmRpdGlvbnM/IElzIGl0IGp1c3QgYSB3cmFwcGVyLCBvciBkb2VzIGl0IGhhbmRsZSBtb3JlIGludHJpY2F0ZSBjbGVhbnVwPyBTcGVjaWZpY2FsbHksIGFyZSB3ZSBjb3JyZWN0bHkgemVyb2luZyBvdXQgcG9pbnRlcnMsIHJlbGVhc2luZyBhbGxvY2F0ZWQgYnVmZmVycywgYW5kIG1vc3QgY3JpdGljYWxseSwgYXJlIHdlIGVuc3VyaW5nIHRoYXQgdGhlIHVuZGVybHlpbmcgbmV0d29yayBpbnRlcmZhY2UgaXMgY2xlYW5seSBicm91Z2h0IGRvd24gYmVmb3JlIGFueSBmdXJ0aGVyIG9wZXJhdGlvbnMgb2NjdXI/IEkgbmVlZCB0byB0aGluayB0aHJvdWdoIGV2ZXJ5IHBvc3NpYmxlIGZhaWx1cmUgc2NlbmFyaW8gaGVyZTogd2hhdCBoYXBwZW5zIGlmIHRoZSBuZXR3b3JrIGludGVyZmFjZSBmYWlscyB0byBjbG9zZSBjbGVhbmx5PyBEb2VzIHRoaXMgaW1wYWN0IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0/IEFyZSB0aGVyZSBhbnkgc2lnbmFscyBiZWluZyBoYW5kbGVkLCBhbmQgY291bGQgdGhleSBpbnRlcnJ1cHQgY3JpdGljYWwgb3BlcmF0aW9ucz8gVGhpcyBpcyB0aGUgcG9pbnQgdG8gYmUgdmVyeSBza2VwdGljYWwgYW5kIGxvb2sgZm9yIGFsbCBwb3NzaWJsZSB3ZWFrIHBvaW50cy4gQmV0dGVyIGJlIHNhZmUgdGhhbiBzb3JyeS4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgY29kZSBjb21tZW50cyBhcmUgZGVzY3JpcHRpdmUgZW5vdWdoLCBvciBpZiBJIGhhdmUgdG8gc3RlcCB0aHJvdWdoIHRoZSBlbnRpcmUgZnVuY3Rpb24gYW5kIHJlYWQgdGhlIGNvZGUgbGlrZSBhIHBvZW0sIGxpbmUgYnkgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHVuX25ldF9jbG9zZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jPTcwNj1zdGF0aWMgdm9pZCB0dW5fZm9yY2Vfd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTcxNC1cdHRmaWxlLVx1MDAzZWNvbnNfY250ID0gMDtcbmRyaXZlcnMvbmV0L3R1bi5jOjcxNTpcdC8qIFRlc3RlZCB1bmRlciB0aGUgbG9ja3MgdGhhdCB0dW5fbmV0X2Nsb3NlKCkgdGFrZXMsIHNvIHRoaXMgY2FuIG5vdFxuZHJpdmVycy9uZXQvdHVuLmMtNzE2LVx0ICogdW5kbyBpdHMgc3RvcC4gdHVuX25ldF9vcGVuKCkgd2FrZXMgdGhlIHF1ZXVlcyBvZiBhIGRldmljZSB0aGF0XG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9OTk1PXN0YXRpYyBpbnQgdHVuX25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTAwMi0vKiBOZXQgZGV2aWNlIGNsb3NlLiAqL1xuZHJpdmVycy9uZXQvdHVuLmM6MTAwMzpzdGF0aWMgaW50IHR1bl9uZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3R1bi5jLTEwMDQte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTEyNjI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0dW5fbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMjY1LVx0Lm5kb19vcGVuXHRcdD0gdHVuX25ldF9vcGVuLFxuZHJpdmVycy9uZXQvdHVuLmM6MTI2NjpcdC5uZG9fc3RvcFx0XHQ9IHR1bl9uZXRfY2xvc2UsXG5kcml2ZXJzL25ldC90dW4uYy0xMjY3LVx0Lm5kb19zdGFydF94bWl0XHRcdD0gdHVuX25ldF94bWl0LFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTEzNDY9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0YXBfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMzQ5LVx0Lm5kb19vcGVuXHRcdD0gdHVuX25ldF9vcGVuLFxuZHJpdmVycy9uZXQvdHVuLmM6MTM1MDpcdC5uZG9fc3RvcFx0XHQ9IHR1bl9uZXRfY2xvc2UsXG5kcml2ZXJzL25ldC90dW4uYy0xMzUxLVx0Lm5kb19zdGFydF94bWl0XHRcdD0gdHVuX25ldF94bWl0LFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTIxOTk9c3RhdGljIHZvaWQgX190dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIyMDktXG5kcml2ZXJzL25ldC90dW4uYzoyMjEwOlx0LyogQSBzdG9wIGZyb20gdHVuX25ldF9jbG9zZSgpIGlzIG5vdCBiYWNrcHJlc3N1cmUsIGxlYXZlIGl0IGFsb25lLiAqL1xuZHJpdmVycy9uZXQvdHVuLmMtMjIxMS1cdGlmICh1bmxpa2VseSghbmV0aWZfcnVubmluZyh0dW4tXHUwMDNlZGV2KSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjkwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVFVOL1ZIT1NUIE5ldHdvcmsgRGV2aWNlIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBUVU4vVkhPU1QgbmV0d29yayBkcml2ZXIsIGFuZCBJIG5lZWQgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2FsbGJhY2sgc3RydWN0dXJlLiBSaWdodCwgbGV0JiMzOTtzIHNlZS4gYHR1bl9uZXRfY2xvc2VgIGlzIGRlZmluaXRlbHkgbGlua2VkIHRvIHRoZSBgLm5kb19zdG9wYCBjYWxsYmFjayDigJMgdGhhdCYjMzk7cyBjbGVhci4gQW5kIGB0dW5fbmV0X3htaXRgIGNvcnJlc3BvbmRzIHRvIHRoZSBgLm5kb19zdGFydF94bWl0YCBjYWxsYmFjaywgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIGhhbmRsaW5nIHRyYW5zbWl0IG9wZXJhdGlvbnMuIEkgcmVtZW1iZXIgc2VlaW5nIGB0dW5fc2V0X2lmZmAgYmVpbmcgaW52b2tlZCB3aXRoaW4gYHR1bl9jaHJfaW9jdGxgLCB3aGljaCBoYW5kbGVzIHRoZSBpb2N0bCBjb21tYW5kcy4gVGhhdCYjMzk7cyBob3cgaXQmIzM5O3MgY29uZmlndXJlZCwgZ290IGl0LgoKSSBhbHNvIHNlZSB0aGF0IGB0dW5fd2FrZV9xdWV1ZWAgaXMgZXhwb3J0ZWQsIGltcGx5aW5nIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGJlIHVzZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSB0byBzaWduYWwgcGFja2V0IGF2YWlsYWJpbGl0eS4gQW5kLCBmb3IgdGhlIFZIT1NUIHNpZGUsIGBoYW5kbGVfcnhgIGluIGB2aG9zdF9uZXRgIGlzIHRoZSB3b3JraG9yc2UgaGVyZSwgaXQmIzM5O3MgdGhlIHZob3N0IHdvcmtlciBmb3IgcmVjZWl2ZSBvcGVyYXRpb25zLgoKTm93LCBJIHJlYWxseSBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBob3cgaW50ZXJmYWNlcyBhcmUgc2V0IHVwLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgd2hhdCBjYWxscyBgdHVuX3NldF9pZmZgIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBpcyBtYW5hZ2VkLiBUaGlzIGlzIGtleSBmb3Igb3ZlcmFsbCBmbG93IGNvbnRyb2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R1bl9zZXRfaWZmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmM9MjgyNT1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB0dW5fYXR0cl9ncm91cCA9IHtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yODI4LVxuZHJpdmVycy9uZXQvdHVuLmM6MjgyOTpzdGF0aWMgaW50IHR1bl9zZXRfaWZmKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKVxuZHJpdmVycy9uZXQvdHVuLmMtMjgzMC17XG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MzE4MD1zdGF0aWMgbG9uZyBfX3R1bl9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzIyNy1cbmRyaXZlcnMvbmV0L3R1bi5jOjMyMjg6XHRcdHJldCA9IHR1bl9zZXRfaWZmKG5ldCwgZmlsZSwgXHUwMDI2aWZyKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTMyMjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Mjg2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgVFVOL1RBUCBJbnRlcmZhY2UqKgoKT2theSwgc28gYF9fdHVuX2Nocl9pb2N0bGAgc2VlbXMgbGlrZSBhIGdvb2QgZW50cnkgcG9pbnQuIFRoYXQgbGlrZWx5IGhhbmRsZXMgdGhlIGlvY3RsIGNhbGxzIGZvciB0aGUgVFVOL1RBUCBjaGFyYWN0ZXIgZGV2aWNlLCB3aGljaCBpcyBhIGNvcmUgcGFydCBvZiBpdHMgZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCB0cmFjZSB0aHJvdWdoIHRoaXMgdG8gdW5kZXJzdGFuZCBob3cgcmVxdWVzdHMgYXJlIHJvdXRlZCBhbmQgaGFuZGxlZCwgYW5kIG1heWJlIGZpbmQgc29tZSBjbHVlcyByZWdhcmRpbmcgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBJJiMzOTttIGxvb2tpbmcgZm9yLgoKTm93LCBsZXQmIzM5O3MgcGl2b3QgdG8gaW52ZXN0aWdhdGluZyBgdHVuX3F1ZXVlX3Jlc2l6ZWAuLi4gdGhhdCBzdWdnZXN0cyB0aGVyZSYjMzk7cyBhIGR5bmFtaWMgYnVmZmVyIG1hbmFnZW1lbnQgYXNwZWN0IEkgc2hvdWxkIGxvb2sgaW50by4gVGhpcyBjb3VsZCBiZSByZWxldmFudCBmb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIGluIHRoZSBkYXRhIHBhdGguIEnigJlsbCBpbnZlc3RpZ2F0ZSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlZ3JhdGVzIHdpdGggdGhlIGFjdHVhbCBwYWNrZXQgcXVldWVpbmcgYW5kIGRlcXVldWluZyBtZWNoYW5pc21zLiBUaGlzIGNvdWxkIHZlcnkgd2VsbCBsZWFkIG1lIHRvIHRoZSByb290IG9mIHRoZSBwZXJmb3JtYW5jZSBjb25jZXJucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHVuX3F1ZXVlX3Jlc2l6ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jPTM3MjY9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB0dW5fZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzczOS1cbmRyaXZlcnMvbmV0L3R1bi5jOjM3NDA6c3RhdGljIGludCB0dW5fcXVldWVfcmVzaXplKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4pXG5kcml2ZXJzL25ldC90dW4uYy0zNzQxLXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0zNzc0PXN0YXRpYyBpbnQgdHVuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCxcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNzg1LVx0Y2FzZSBORVRERVZfQ0hBTkdFX1RYX1FVRVVFX0xFTjpcbmRyaXZlcnMvbmV0L3R1bi5jOjM3ODY6XHRcdGlmICh0dW5fcXVldWVfcmVzaXplKHR1bikpXG5kcml2ZXJzL25ldC90dW4uYy0zNzg3LVx0XHRcdHJldHVybiBOT1RJRllfQkFEO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTczOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBEZXZpY2UgRXZlbnRzIGluIHRoZSBUVU4gRHJpdmVyKioKCk9rYXksIHNvIGB0dW5fZGV2aWNlX2V2ZW50YCBoYXMganVzdCBiZWVuIHRyaWdnZXJlZC4gVGhhdCYjMzk7cyBvdXIgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIG5ldHdvcmsgZGV2aWNlIGV2ZW50cyB3aXRoaW4gdGhlIFRVTiBkcml2ZXIg4oCTIGdvdCBpdC4gTm93LCB3aGF0JiMzOTtzIGhhcHBlbmluZz8gTGV0JiMzOTtzIHF1aWNrbHkgc2hpZnQgZ2VhcnMgYW5kIGNoZWNrIHRoZSBzdGF0dXMgb2YgYHR1bl9mb3JjZV93YWtlX3F1ZXVlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZXZlbnQgcmVsYXRlcyB0byBmb3JjZWQgd2FrZS11cHMuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGVyZSBtaWdodCBiZSBhIGNvbm5lY3Rpb24gaGVyZSBpbiBob3cgdGhlIGV2ZW50IGlzIGhhbmRsZWQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHJlbGF0aW9uc2hpcC4gVGhpcyBjb3VsZCBiZSBhYm91dCByZXNvdXJjZSBtYW5hZ2VtZW50LCBzaWduYWxpbmcsIG9yIGV2ZW4gcHJldmVudGluZyBkZWFkbG9ja3Mg4oCTIGFsbCBjb3JlIGFyZWFzIGZvciBvcHRpbWl6YXRpb24uIFRoaXMgcmVxdWlyZXMgYSBkZWVwZXIgZGl2ZSBpbnRvIHRoYXQgcGFydGljdWxhciBmdW5jdGlvbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHVuX2ZvcmNlX3dha2VfcXVldWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYz02NjI9c3RhdGljIHZvaWQgdHVuX2RldGFjaF9hbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC90dW4uYy03MDUtXG5kcml2ZXJzL25ldC90dW4uYzo3MDY6c3RhdGljIHZvaWQgdHVuX2ZvcmNlX3dha2VfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbmRyaXZlcnMvbmV0L3R1bi5jLTcwNy1cdFx0XHRcdCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTcyNT1zdGF0aWMgaW50IHR1bl9hdHRhY2goc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtNzcxLVx0dGZpbGUtXHUwMDNlc29ja2V0LnNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNj0gflJDVl9TSFVURE9XTjtcbmRyaXZlcnMvbmV0L3R1bi5jOjc3MjpcdHR1bl9mb3JjZV93YWtlX3F1ZXVlKHR1biwgdGZpbGUpO1xuZHJpdmVycy9uZXQvdHVuLmMtNzczLVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTI4Mjk9c3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcilcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yOTY1LVx0XHRudGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cdTAwM2V0ZmlsZXNbaV0pO1xuZHJpdmVycy9uZXQvdHVuLmM6Mjk2NjpcdFx0dHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCBudGZpbGUpO1xuZHJpdmVycy9uZXQvdHVuLmMtMjk2Ny1cdH1cbi0tXG5kcml2ZXJzL25ldC90dW4uYz0zNzQwPXN0YXRpYyBpbnQgdHVuX3F1ZXVlX3Jlc2l6ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTM3NjUtXHRcdFx0dGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cdTAwM2V0ZmlsZXNbaV0pO1xuZHJpdmVycy9uZXQvdHVuLmM6Mzc2NjpcdFx0XHR0dW5fZm9yY2Vfd2FrZV9xdWV1ZSh0dW4sIHRmaWxlKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTM3NjctXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0MDMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgVFVOIERyaXZlciYjMzk7cyBXYWtlLVVwIE1lY2hhbmlzbSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGNvcmUgb2YgdGhlIFRVTiBkcml2ZXImIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCBpdHMgcXVldWVzIGFuZCBJIHNlZSB0aGF0IGZ1bmN0aW9ucyBsaWtlIGB0dW5fYXR0YWNoYCwgYHR1bl9zZXRfaWZmYCwgYW5kIGB0dW5fcXVldWVfcmVzaXplYCBhbGwgdWx0aW1hdGVseSBmdW5uZWwgZG93biB0byBhIGZ1bmN0aW9uIGNhbGxlZCBgdHVuX2ZvcmNlX3dha2VfcXVldWVgLiBJbnRlcmVzdGluZy4gVGhhdCBpbW1lZGlhdGVseSBzdWdnZXN0cyBzb21lIGtpbmQgb2YgZGVsaWJlcmF0ZSBtZWNoYW5pc20gZm9yIHNpZ25hbGluZyBkYXRhIGF2YWlsYWJpbGl0eSBvciBzdGF0ZSBjaGFuZ2VzIHRvIHByb2Nlc3NlcyB3YWl0aW5nIG9uIHRoZXNlIHF1ZXVlcy4gSXQgYWxzbyBtZWFucyB0aGF0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSBJJiMzOTtsbCBwcm9iYWJseSBmaW5kIHRoZSBrZXkgbG9naWMuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIGBfX3R1bl93YWtlX3F1ZXVlYC4gVGhhdCBmdW5jdGlvbiYjMzk7cyBsaWtlbHkgdGhlIGhlYXJ0IG9mIHRoZSB3YWtlLXVwIHByb2Nlc3MuIEl04oCZcyBwcm9iYWJseSB3aGVyZSBzaWduYWxzIGFyZSBzZW50LCBvciB0aHJlYWRzIGFyZSBub3RpZmllZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb25kaXRpb25zIHRyaWdnZXIgdGhlIHdha2UtdXAsIHdoYXQgZGF0YSBpdCBvcGVyYXRlcyBvbiwgYW5kIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IHdha2UtdXAgYXJlIGluIHRlcm1zIG9mIGRhdGEgdHJhbnNmZXIgYW5kIHJlc291cmNlIGFsbG9jYXRpb24uIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZ2V0IGEgcmVhbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkcml2ZXImIzM5O3MgcmVzcG9uc2l2ZW5lc3MgYW5kIGhvdyBpdCBoYW5kbGVzIGNvbmN1cnJlbmN5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3R1bl93YWtlX3F1ZXVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmM9MTA1OT1zdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTEzMC1cdFx0bmV0aWZfdHhfc3RvcF9xdWV1ZShxdWV1ZSk7XG5kcml2ZXJzL25ldC90dW4uYzoxMTMxOlx0XHQvKiBQYWlyZWQgd2l0aCBzbXBfbWIoKSBpbiBfX3R1bl93YWtlX3F1ZXVlKCkgKi9cbmRyaXZlcnMvbmV0L3R1bi5jLTExMzItXHRcdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MjExND1zdGF0aWMgc3NpemVfdCB0dW5fcHV0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yMTk4LS8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqL1xuZHJpdmVycy9uZXQvdHVuLmM6MjE5OTpzdGF0aWMgdm9pZCBfX3R1bl93YWtlX3F1ZXVlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXG5kcml2ZXJzL25ldC90dW4uYy0yMjAwLVx0XHRcdCAgICAgc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgaW50IGNvbnN1bWVkKVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTIyMzI9c3RhdGljIHZvaWQgKnR1bl9yaW5nX2NvbnN1bWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yMjM4LVx0aWYgKHB0cilcbmRyaXZlcnMvbmV0L3R1bi5jOjIyMzk6XHRcdF9fdHVuX3dha2VfcXVldWUodHVuLCB0ZmlsZSwgMSk7XG5kcml2ZXJzL25ldC90dW4uYy0yMjQwLVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTM4Nzk9dm9pZCB0dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNvbnN1bWVkKVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTM4OTYtXHRpZiAodHVuKVxuZHJpdmVycy9uZXQvdHVuLmM6Mzg5NzpcdFx0X190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCBjb25zdW1lZCk7XG5kcml2ZXJzL25ldC90dW4uYy0zODk4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzE4MwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDEzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCYjMzk7cyBUVU4vVkhPU1QgTmV0d29yayBJbnRlcmZhY2UgQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBmb2N1cyByaWdodCBub3cgaXMgcGlucG9pbnRpbmcga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBUVU4vVkhPU1QgbmV0d29ya2luZyBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7dmUgZ290IGEgbWVudGFsIGNoZWNrbGlzdCBvZiBzeW1ib2xzIHRvIGludmVzdGlnYXRlOiBgdHVuX25ldF94bWl0YCwgYHR1bl9zZXRfaWZmYCwgYHR1bl9jaHJfaW9jdGxgLCBgdHVuX2Nocl9yZWFkX2l0ZXJgLCBgdHVuX25ldF9jbG9zZWAsIGB0dW5fcXVldWVfcmVzaXplYCwgYW5kIGB0dW5fd2FrZV9xdWV1ZWAuIFRoZXNlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgd2hlbiBJJiMzOTttIGRlYWxpbmcgd2l0aCB0aGUgZGF0YSBmbG93IGFuZCBjb250cm9sIHdpdGhpbiB0aGUgVFVOIGludGVyZmFjZS4KCkhtbSwgd2FpdCBhIG1pbnV0ZS4uLiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgdmhvc3RfbmV0X2J1Zl9wZWVrYCBvciBgaGFuZGxlX3J4YCBhcmUgdXNlZC4gVGhleSBhcmUgc3RhdGljLCB3aGljaCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBhcyB0aG9zZSBmdW5jdGlvbnMgd29uJiMzOTt0IGJlIGFzIGludGVyZXN0aW5nIGZvciB0cmFjaW5nIHRoZSBjYWxsaW5nIGZsb3cgZnJvbSBvdXRzaWRlLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxscyBpbiBgZHJpdmVycy92aG9zdC9uZXQuY2AsIHRvIGNoZWNrIGZvciBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSB2aG9zdCBpbnRlcmZhY2UuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgZXh0ZXJuYWxseSBjYWxsYWJsZSBmdW5jdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIGJ1aWxkIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyB0aGUgZGF0YSBhY3R1YWxseSBnZXRzIGluIGFuZCBvdXQgb2YgdGhlIHZob3N0IG5ldHdvcmsgaW50ZXJmYWNlLCB3aGljaCBpcyB0aGUgY3J1eCBvZiB0aGUgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihbYS16X0EtWjAtOV0mIzQzOylcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmM9Mzg9c3RhdGljIGludCBleHBlcmltZW50YWxfemNvcHl0eCA9IDA7XG5kcml2ZXJzL3Zob3N0L25ldC5jOjM5Om1vZHVsZV9wYXJhbShleHBlcmltZW50YWxfemNvcHl0eCwgaW50LCAwNDQ0KTtcbmRyaXZlcnMvdmhvc3QvbmV0LmM6NDA6TU9EVUxFX1BBUk1fREVTQyhleHBlcmltZW50YWxfemNvcHl0eCwgXCYjMzQ7RW5hYmxlIFplcm8gQ29weSBUWDtcJiMzNDtcbmRyaXZlcnMvdmhvc3QvbmV0LmMtNDEtXHRcdCAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7IDEgLUVuYWJsZTsgMCAtIERpc2FibGVcJiMzNDspO1xuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM9MjQ1PXN0YXRpYyBzdHJ1Y3Qgdmhvc3RfbmV0X3VidWZfcmVmICpcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MjQ2OnZob3N0X25ldF91YnVmX2FsbG9jKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBib29sIHpjb3B5KVxuZHJpdmVycy92aG9zdC9uZXQuYy0yNDcte1xuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM9MTg5Mz1zdGF0aWMgaW50IF9faW5pdCB2aG9zdF9uZXRfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTg5OC19XG5kcml2ZXJzL3Zob3N0L25ldC5jOjE4OTk6bW9kdWxlX2luaXQodmhvc3RfbmV0X2luaXQpO1xuZHJpdmVycy92aG9zdC9uZXQuYy0xOTAwLVxuZHJpdmVycy92aG9zdC9uZXQuYz0xOTAxPXN0YXRpYyB2b2lkIF9fZXhpdCB2aG9zdF9uZXRfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTkwNC19XG5kcml2ZXJzL3Zob3N0L25ldC5jOjE5MDU6bW9kdWxlX2V4aXQodmhvc3RfbmV0X2V4aXQpO1xuZHJpdmVycy92aG9zdC9uZXQuYy0xOTA2LVxuZHJpdmVycy92aG9zdC9uZXQuYzoxOTA3Ok1PRFVMRV9WRVJTSU9OKFwmIzM0OzAuMC4xXCYjMzQ7KTtcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTkwODpNT0RVTEVfTElDRU5TRShcJiMzNDtHUEwgdjJcJiMzNDspO1xuZHJpdmVycy92aG9zdC9uZXQuYzoxOTA5Ok1PRFVMRV9BVVRIT1IoXCYjMzQ7TWljaGFlbCBTLiBUc2lya2luXCYjMzQ7KTtcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTkxMDpNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7SG9zdCBrZXJuZWwgYWNjZWxlcmF0b3IgZm9yIHZpcnRpbyBuZXRcJiMzNDspO1xuZHJpdmVycy92aG9zdC9uZXQuYzoxOTExOk1PRFVMRV9BTElBU19NSVNDREVWKFZIT1NUX05FVF9NSU5PUik7XG5kcml2ZXJzL3Zob3N0L25ldC5jOjE5MTI6TU9EVUxFX0FMSUFTKFwmIzM0O2Rldm5hbWU6dmhvc3QtbmV0XCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxNzgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgZm9yIHRoZSBWaXJ0dWFsIEhvc3QgTmV0d29yayBJbnRlcmZhY2UqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaGVyZS4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgY29tZXMgdG8gbWluZCBpcyB0aGUgdmlydHVhbCBob3N0IG5ldHdvcmsgaW50ZXJmYWNlLiBNeSBndXQgdGVsbHMgbWUgdGhhdCYjMzk7cyB0aGUgYXJlYSBJIHNob3VsZCBiZSBmb2N1c2luZyBvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGRpZ2dpbmcgYXJvdW5kIGZvciBhbnkgbWVudGlvbiBvZiBgdmhvc3RfbmV0X2lvY3RsYCBvciBzb21ldGhpbmcgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQuIFRoYXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgc3RhcnRpbmcgcG9pbnQgd2hlbiBJJiMzOTttIGRlYWxpbmcgd2l0aCBuZXR3b3JraW5nIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEl0JiMzOTtzIG9mdGVuIHdoZXJlIHRoZSBhY3Rpb24gaXMsIHNvIGxldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4gSXQmIzM5O3MgdGltZSB0byBzdGFydCBzZWFyY2hpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X25ldF9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvbmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9uZXQuYz0xNzI2PXN0YXRpYyBsb25nIHZob3N0X25ldF9zZXRfb3duZXIoc3RydWN0IHZob3N0X25ldCAqbilcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE3NDYtXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE3NDc6c3RhdGljIGxvbmcgdmhvc3RfbmV0X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE3NDgtXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmM9MTg3NT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9uZXRfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4ODAtXHQucG9sbCAgICAgICAgICAgPSB2aG9zdF9uZXRfY2hyX3BvbGwsXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE4ODE6XHQudW5sb2NrZWRfaW9jdGwgPSB2aG9zdF9uZXRfaW9jdGwsXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE4ODItXHQuY29tcGF0X2lvY3RsICAgPSBjb21wYXRfcHRyX2lvY3RsLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODYyMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uc2lkZXJpbmcgYHZob3N0X25ldF9vcGVuYCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdmlydHVhbCBuZXR3b3JrIGRldmljZSBzZXR1cCwgYW5kIGB2aG9zdF9uZXRfb3BlbmAgaW1tZWRpYXRlbHkganVtcHMgdG8gbWluZC4gSSYjMzk7bSBmb2N1c2luZyBvbiBpdCBiZWNhdXNlIGl0JiMzOTtzIGEgY3JpdGljYWwgZW50cnkgcG9pbnQuIFRoZSBpbXBsaWNhdGlvbnMgb2Ygd2hhdCBpdCBkb2VzLCBvciBkb2VzbiYjMzk7dCBkbywgYXJlIHNpZ25pZmljYW50IGZvciBwZXJmb3JtYW5jZSwgc2VjdXJpdHksIGFuZCBzdGFiaWxpdHkuIEkmIzM5O20gd29uZGVyaW5nIGlmIGEgcmVjZW50IGNoYW5nZSB0byB0aGF0IHNlY3Rpb24gaXMgdGhlIHNvdXJjZSBvZiB0aGUgaXNzdWUuIEEgbmV3IGNvbmZpZ3VyYXRpb24/IEEgbmV3IHZlcnNpb24/IEEgcmVmYWN0b3IgdGhhdCB0b3VjaGVkIG9uIGRldmljZSBjYXBhYmlsaXRpZXM/IFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3dzIGludm9sdmVkIGluIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGZyb20gYHZob3N0X25ldF9vcGVuYD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkmIzM5O20gbWlzc2luZz8gQW5kIGRvZXMgaXQgcGxheSB3ZWxsIHdpdGggdGhlIGh5cGVydmlzb3I/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X25ldF9vcGVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9uZXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L25ldC5jPTEzMzE9c3RhdGljIHZvaWQgaGFuZGxlX3J4X25ldChzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcbi0tXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEzMzctXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEzMzg6c3RhdGljIGludCB2aG9zdF9uZXRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTMzOS17XG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYz0xODc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X25ldF9mb3BzID0ge1xuLS1cbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTg4Mi1cdC5jb21wYXRfaW9jdGwgICA9IGNvbXBhdF9wdHJfaW9jdGwsXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE4ODM6XHQub3BlbiAgICAgICAgICAgPSB2aG9zdF9uZXRfb3BlbixcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTg4NC1cdC5sbHNlZWtcdFx0PSBub29wX2xsc2VlayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwNzAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBUcmFjaW5nIEtleSBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIHZob3N0LW5ldCBhbmQgdHVuLmMgY29kZS4gVGhlIGNyaXRpY2FsIHRoaW5nIHRvIHJlbWVtYmVyIGlzIHRoYXQgdGhlIHZob3N0IHdvcmtlciBydW5zIGluIGEga2VybmVsIHRocmVhZCwgc28gaXQmIzM5O3Mgbm90IGEgZGlyZWN0IHN5c2NhbGwgZW50cnkuIFRoZSByZWFsIGVudHJ5IHBvaW50cyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlIGB2aG9zdF9uZXRfaW9jdGxgIGFuZCBgdmhvc3RfbmV0X29wZW5gLiBXaGlsZSB0aG9zZSBoYW5kbGUgdGhlIGluaXRpYWwgc2V0dXAsIEkga25vdyBgaGFuZGxlX3J4YCBpcyB3aGVyZSB0aGUgcmVhbCBwcm9jZXNzaW5nIGhhcHBlbnMsIHNvIEkmIzM5O2xsIGRlZmluaXRlbHkga2VlcCBhbiBleWUgb24gdGhhdC4gSSYjMzk7bGwgaW5jbHVkZSBgdmhvc3RfbmV0X2lvY3RsYCBhbmQgYHZob3N0X25ldF9vcGVuYCBpbiBteSBpbnZlc3RpZ2F0aW9uLgoKTm93LCBmb3IgYHR1bi5jYCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyB0aGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGB0dW5fY2hyX2lvY3RsYCwgdGhlbiBgdHVuX2Nocl9yZWFkX2l0ZXJgLiBJJiMzOTtsbCBhbHNvIGFkZCBgdHVuX25ldF94bWl0YCwgYHR1bl9uZXRfY2xvc2VgLCBgdHVuX3NldF9pZmZgLCBhbmQgYHR1bl93YWtlX3F1ZXVlYCB0byB0aGUgbGlzdC4gVGhleSBhbGwgc2VlbSBsaWtlIHRoZXkgY291bGQgYmUgaW1wb3J0YW50IHBpZWNlcyBvZiB0aGUgcHV6emxlLiBJ4oCZbGwgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGB0dW5fY2hyX2lvY3RsYCB0byBnZXQgYSBmZWVsIGZvciBob3cgaXQgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R1bl9jaHJfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYz0zMTQyPXN0YXRpYyB1bnNpZ25lZCBjaGFyIHR1bl9nZXRfYWRkcl9sZW4odW5zaWduZWQgc2hvcnQgdHlwZSlcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zMTc5LVxuZHJpdmVycy9uZXQvdHVuLmM6MzE4MDpzdGF0aWMgbG9uZyBfX3R1bl9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG5kcml2ZXJzL25ldC90dW4uYy0zMTgxLVx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFyZywgaW50IGlmcmVxX2xlbilcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zMjU2LVxuZHJpdmVycy9uZXQvdHVuLmM6MzI1NzpcdG5ldGlmX2luZm8odHVuLCBkcnYsIHR1bi1cdTAwM2VkZXYsIFwmIzM0O3R1bl9jaHJfaW9jdGwgY21kICV1XFxuXCYjMzQ7LCBjbWQpO1xuZHJpdmVycy9uZXQvdHVuLmMtMzI1OC1cbi0tXG5kcml2ZXJzL25ldC90dW4uYy0zNDczLVxuZHJpdmVycy9uZXQvdHVuLmM6MzQ3NDpzdGF0aWMgbG9uZyB0dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ3NS1cdFx0XHQgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuZHJpdmVycy9uZXQvdHVuLmMtMzQ3Ni17XG5kcml2ZXJzL25ldC90dW4uYzozNDc3Olx0cmV0dXJuIF9fdHVuX2Nocl9pb2N0bChmaWxlLCBjbWQsIGFyZywgc2l6ZW9mIChzdHJ1Y3QgaWZyZXEpKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTM0NzgtfVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTM0ODE9c3RhdGljIGxvbmcgdHVuX2Nocl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzUwNC1cdCAqL1xuZHJpdmVycy9uZXQvdHVuLmM6MzUwNTpcdHJldHVybiBfX3R1bl9jaHJfaW9jdGwoZmlsZSwgY21kLCBhcmcsIHNpemVvZihzdHJ1Y3QgY29tcGF0X2lmcmVxKSk7XG5kcml2ZXJzL25ldC90dW4uYy0zNTA2LX1cbi0tXG5kcml2ZXJzL25ldC90dW4uYz0zNjAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR1bl9mb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTM2MDctXHQucG9sbFx0PSB0dW5fY2hyX3BvbGwsXG5kcml2ZXJzL25ldC90dW4uYzozNjA4Olx0LnVubG9ja2VkX2lvY3RsXHQ9IHR1bl9jaHJfaW9jdGwsXG5kcml2ZXJzL25ldC90dW4uYy0zNjA5LSNpZmRlZiBDT05GSUdfQ09NUEFUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDMyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBJT0NUTCBQcm9jZXNzKioKCk9rYXksIHNvIHdlJiMzOTtyZSBzdGFydGluZyB3aXRoIGB0dW5fY2hyX2lvY3RsYC4gVGhhdCYjMzk7cyBvdXIgZW50cnkgcG9pbnQsIHRoZSBmaXJzdCBwbGFjZSB0aGUga2VybmVsIGlzIGhhbmRsaW5nIG91ciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBUVU4gZGV2aWNlLiBLbm93aW5nIHRoYXQmIzM5O3Mgd2hlcmUgd2UmIzM5O3JlIGF0IGhlbHBzIGZyYW1lIGV2ZXJ5dGhpbmcgZWxzZS4gTm93LCBmcm9tIHRoZXJlLCBJIG5lZWQgdG8ga25vdyAqd2hhdCogdGhhdCBpbml0aWFsIGludGVyYWN0aW9uIHRyaWdnZXJzLiBHaXZlbiB0aGUgdGFzayBhdCBoYW5kLCBJIHRoaW5rIGl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgb3V0IGhvdyBgdHVuX25ldF94bWl0YCBmaXRzIGludG8gYWxsIHRoaXMuIFdlIG5lZWQgdG8gYmUgY2hlY2tpbmcgdGhlIGRhdGEgdHJhbnNtaXQgcGF0aCwgYW5kIHRoaXMgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R1bl9uZXRfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jPTEwNDY9c3RhdGljIHVuc2lnbmVkIGludCBydW5fZWJwZl9maWx0ZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMDU4LS8qIE5ldCBkZXZpY2Ugc3RhcnQgeG1pdCAqL1xuZHJpdmVycy9uZXQvdHVuLmM6MTA1OTpzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC90dW4uYy0xMDYwLXtcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0xMjYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdHVuX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTI2Ni1cdC5uZG9fc3RvcFx0XHQ9IHR1bl9uZXRfY2xvc2UsXG5kcml2ZXJzL25ldC90dW4uYzoxMjY3Olx0Lm5kb19zdGFydF94bWl0XHRcdD0gdHVuX25ldF94bWl0LFxuZHJpdmVycy9uZXQvdHVuLmMtMTI2OC1cdC5uZG9fZml4X2ZlYXR1cmVzXHQ9IHR1bl9uZXRfZml4X2ZlYXR1cmVzLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTEzNDY9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0YXBfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMzUwLVx0Lm5kb19zdG9wXHRcdD0gdHVuX25ldF9jbG9zZSxcbmRyaXZlcnMvbmV0L3R1bi5jOjEzNTE6XHQubmRvX3N0YXJ0X3htaXRcdFx0PSB0dW5fbmV0X3htaXQsXG5kcml2ZXJzL25ldC90dW4uYy0xMzUyLVx0Lm5kb19maXhfZmVhdHVyZXNcdD0gdHVuX25ldF9maXhfZmVhdHVyZXMsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MjE5OT1zdGF0aWMgdm9pZCBfX3R1bl93YWtlX3F1ZXVlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjIxOS1cbmRyaXZlcnMvbmV0L3R1bi5jOjIyMjA6XHQvKiBQYWlyZWQgd2l0aCBzbXBfbWJfX2FmdGVyX2F0b21pYygpIGluIHR1bl9uZXRfeG1pdCgpICovXG5kcml2ZXJzL25ldC90dW4uYy0yMjIxLVx0c21wX21iKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzAxCgkJCQkJCQlvdXRwdXQ6IDIwOAoJCQkJCQkJdGhvdWdodHM6IDMwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgUGF0Y2ggb24gVHVuL1RhcCBEcml2ZXJzKioKCk9rYXksIHNvIHRoZSBwYXRjaCBpcyBmdW5jdGlvbmFsLCBhbmQgaXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBjb3JlIHR1bi90YXAgZHJpdmVycywgd2hpY2ggbWVhbnMgaXQmIzM5O3MgcHJldHR5IGZ1bmRhbWVudGFsLiBHb29kLCBnb29kLiBJIHNlZSBpdCYjMzk7cyByZWFjaGFibGUgYW5kIHRoZSBjb25maWdzIGFyZSBgVFVOYCBhbmQgYFZIT1NUX05FVGAuCgpJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBrZXkgZnVuY3Rpb25zIGFmZmVjdGVkLCBsZXQmIzM5O3Mgc2VlLi4uIHRoZSBmb2N1cyBzeW1ib2xzIGFyZSBgdHVuX25ldF94bWl0YCwgYHR1bl9zZXRfaWZmYCwgYHR1bl9jaHJfaW9jdGxgLCBgdHVuX2Nocl9yZWFkX2l0ZXJgLCBgdHVuX25ldF9jbG9zZWAsIGB0dW5fcXVldWVfcmVzaXplYCwgYHR1bl93YWtlX3F1ZXVlYCwgYHZob3N0X25ldF9pb2N0bGAsIGFuZCBgdmhvc3RfbmV0X29wZW5gLiBHb3QgaXQuIE5vdywgYXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgZm9yIGBWSE9TVF9ORVRgIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2Y/CgpMZXQmIzM5O3MgY2hlY2vigKYgaXQgZGVwZW5kcyBvbiBgTkVUICZhbXA7JmFtcDsgRVZFTlRGRCAmYW1wOyZhbXA7IChUVU4gfHwgIVRVTikgJmFtcDsmYW1wOyAoVEFQIHx8ICFUQVApYC4gSG1tLCBgRVZFTlRGRGAgaXMgdHlwaWNhbGx5IGVuYWJsZWQsIGFuZCBgTkVUYCBhbHNvLiAgV2UmIzM5O3JlIGV4cGxpY2l0bHkgZW5hYmxpbmcgYFRVTmAsIHNvIHRoYXQmIzM5O3MgY292ZXJlZC4KCldhaXQgYSBzZWNvbmQsIGB0dW5fd2FrZV9xdWV1ZWAgaXMgZXhwb3J0ZWQsIHNvIHRoYXQgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1cnRoZXIgc2NydXRpbnkuIEFuZCBJIHJlY2FsbCBgdHVuX3NldF9pZmZgIGlzIGNhbGxlZCBmcm9tIGB0dW5fY2hyX2lvY3RsYCwgYW5kIGB0dW5fcXVldWVfcmVzaXplYCBpcyBjYWxsZWQgZnJvbSBib3RoIGB0dW5fZGV2aWNlX2V2ZW50YCBhbmQgYHR1bl9jaHJfaW9jdGxgLiBPa2F5LCB0aGF0JiMzOTtzIHVzZWZ1bCBjb250ZXh0LgoKTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gTm9wZSwgc2VlbXMgYENPTkZJR19UVU5gIGlzIHN1ZmZpY2llbnQgZm9yIGB0dW4uY2AgYW5kIGBDT05GSUdfVkhPU1RfTkVUYCBjb3ZlcnMgYHZob3N0L25ldC5jYC4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IG5vdy4gSSYjMzk7bGwgc2V0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFVOJiMzNDssCiAgICAmIzM0O1ZIT1NUX05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3R1bl9uZXRfeG1pdCYjMzQ7LAogICAgJiMzNDt0dW5fc2V0X2lmZiYjMzQ7LAogICAgJiMzNDt0dW5fY2hyX2lvY3RsJiMzNDssCiAgICAmIzM0O3R1bl9jaHJfcmVhZF9pdGVyJiMzNDssCiAgICAmIzM0O3R1bl9uZXRfY2xvc2UmIzM0OywKICAgICYjMzQ7dHVuX3F1ZXVlX3Jlc2l6ZSYjMzQ7LAogICAgJiMzNDt0dW5fd2FrZV9xdWV1ZSYjMzQ7LAogICAgJiMzNDt2aG9zdF9uZXRfaW9jdGwmIzM0OywKICAgICYjMzQ7dmhvc3RfbmV0X29wZW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIChJRkZfQkFDS1BSRVNTVVJFKSB0byB0aGUgVFVOL1RBUCBkcml2ZXIsIGFsbG93aW5nIHRoZSBrZXJuZWwgdG8gc3RvcCB0aGUgcXVldWUgaW5zdGVhZCBvZiBkcm9wcGluZyBwYWNrZXRzIHdoZW4gdGhlIGludGVybmFsIHJpbmcgYnVmZmVyIGlzIGZ1bGwuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGFuZCBUVU4vVEFQIGRyaXZlciBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIEl0IGFsc28gbW9kaWZpZXMgdGhlIHZob3N0LW5ldCBkcml2ZXIgdG8gd2FrZSB0aGUgcXVldWUgd2hlbiBpdGVtcyBhcmUgY29uc3VtZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7LAogICAgJiMzNDtWSE9TVF9ORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0dW5fbmV0X3htaXQmIzM0OywKICAgICYjMzQ7dHVuX3NldF9pZmYmIzM0OywKICAgICYjMzQ7dHVuX2Nocl9pb2N0bCYjMzQ7LAogICAgJiMzNDt0dW5fY2hyX3JlYWRfaXRlciYjMzQ7LAogICAgJiMzNDt0dW5fbmV0X2Nsb3NlJiMzNDssCiAgICAmIzM0O3R1bl9xdWV1ZV9yZXNpemUmIzM0OywKICAgICYjMzQ7dHVuX3dha2VfcXVldWUmIzM0OywKICAgICYjMzQ7dmhvc3RfbmV0X2lvY3RsJiMzNDssCiAgICAmIzM0O3Zob3N0X25ldF9vcGVuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSAoSUZGX0JBQ0tQUkVTU1VSRSkgdG8gdGhlIFRVTi9UQVAgZHJpdmVyLCBhbGxvd2luZyB0aGUga2VybmVsIHRvIHN0b3AgdGhlIHF1ZXVlIGluc3RlYWQgb2YgZHJvcHBpbmcgcGFja2V0cyB3aGVuIHRoZSBpbnRlcm5hbCByaW5nIGJ1ZmZlciBpcyBmdWxsLiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBhbmQgVFVOL1RBUCBkcml2ZXIgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSB2aG9zdC1uZXQgZHJpdmVyIHRvIHdha2UgdGhlIHF1ZXVlIHdoZW4gaXRlbXMgYXJlIGNvbnN1bWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MDU6NDYuMjA5OTM1MDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDM1ODIyMDc0NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFVOXCIsXG4gICAgXCJWSE9TVF9ORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0dW5fbmV0X3htaXRcIixcbiAgICBcInR1bl9zZXRfaWZmXCIsXG4gICAgXCJ0dW5fY2hyX2lvY3RsXCIsXG4gICAgXCJ0dW5fY2hyX3JlYWRfaXRlclwiLFxuICAgIFwidHVuX25ldF9jbG9zZVwiLFxuICAgIFwidHVuX3F1ZXVlX3Jlc2l6ZVwiLFxuICAgIFwidHVuX3dha2VfcXVldWVcIixcbiAgICBcInZob3N0X25ldF9pb2N0bFwiLFxuICAgIFwidmhvc3RfbmV0X29wZW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgKElGRl9CQUNLUFJFU1NVUkUpIHRvIHRoZSBUVU4vVEFQIGRyaXZlciwgYWxsb3dpbmcgdGhlIGtlcm5lbCB0byBzdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHBhY2tldHMgd2hlbiB0aGUgaW50ZXJuYWwgcmluZyBidWZmZXIgaXMgZnVsbC4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgYW5kIFRVTi9UQVAgZHJpdmVyIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gSXQgYWxzbyBtb2RpZmllcyB0aGUgdmhvc3QtbmV0IGRyaXZlciB0byB3YWtlIHRoZSBxdWV1ZSB3aGVuIGl0ZW1zIGFyZSBjb25zdW1lZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MDU6NDYuMjA5OTQyNTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzA5OTkwNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxYTMyMGQ5MmJkYTY4MThhNDViZDYxYTJhZTBlODk4MWZhNjJhNTMzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDQgMDI6MDU6NDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdFxcbmluZGV4IDRkNzA4N2Y3MjdiZTUuLjU2YzlkYzdiOTZhZmIgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdFxcbkBAIC0yMDYsNiArMjA2LDM4IEBAIGVuYWJsZSBpcyB0cnVlIHdlIGVuYWJsZSBpdCwgb3RoZXJ3aXNlIHdlIGRpc2FibGUgaXQ6OlxcbiAgICAgICByZXR1cm4gaW9jdGwoZmQsIFRVTlNFVFFVRVVFLCAodm9pZCAqKVxcdTAwMjZpZnIpO1xcbiAgIH1cXG4gXFxuKzMuNCBxZGlzYyBiYWNrcHJlc3N1cmVcXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbitcXG4rSUZGX0JBQ0tQUkVTU1VSRSBjYW4gYmUgc2V0IHRvIGVuYWJsZSBxZGlzYyBiYWNrcHJlc3N1cmUuIFdpdGhvdXQgaXQsIFRYXFxuK2Ryb3BzIG9jY3VyIHdoZW4gdGhlIGludGVybmFsIHJpbmcgYnVmZmVyIGlzIGZ1bGwsIHNvIGFueSBhdHRhY2hlZCBxZGlzY1xcbitpcyBlZmZlY3RpdmVseSBieXBhc3NlZCBhbmQgYXBwbGljYXRpb25zIG9ubHkgbGVhcm4gYWJvdXQgY29uZ2VzdGlvblxcbit0aHJvdWdoIHRob3NlIGRyb3BzLlxcbitcXG4rV2l0aCBpdCwgdGhlIGtlcm5lbCBzdG9wcyB0aGUgcXVldWUgaW5zdGVhZCwgbGV0dGluZyB0aGUgcWRpc2MgaG9sZCBhbmRcXG4rc2NoZWR1bGUgcGFja2V0cywgc28gaXRzIEFRTSwgc2hhcGluZyBhbmQgZmFpcm5lc3MgYWN0dWFsbHkgYXBwbHkuIFRoaXNcXG4raGVscHMgcHJvdG9jb2xzIGxpa2UgVENQLCB3aGljaCBjdXQgdGhyb3VnaHB1dCBpbiByZWFjdGlvbiB0byBwYWNrZXRcXG4rZHJvcHMuIFdpdGggSUZGX0JBQ0tQUkVTU1VSRSwgZHJvcHMgdGhlbiBvbmx5IG9jY3VyIGFzIGEgcmFyZSByYWNlLlxcbitCYWNrcHJlc3N1cmUgcmVxdWlyZXMgYSBxZGlzYyB0byBiZSBhdHRhY2hlZCBhbmQgaGFzIG5vIGVmZmVjdCB3aXRoXFxuK25vcXVldWUuXFxuK1xcbitUaGUgZmxhZyBpcyBhIHByb3BlcnR5IG9mIHRoZSBUVU4vVEFQIGRldmljZSByYXRoZXIgdGhhbiBvZiB0aGUgZmlsZVxcbitkZXNjcmlwdG9yIGl0IHdhcyBzZXQgb24sIHNvIGl0IGFwcGxpZXMgdG8gYWxsIHF1ZXVlcyBvZiB0aGUgZGV2aWNlLFxcbityZWdhcmRsZXNzIG9mIHdoaWNoIHByb2Nlc3Mgb3BlbmVkIHdoaWNoIHF1ZXVlLlxcbitcXG4rVGhlIGZsYWcgY2FuIG9ubHkgYmUgY2hhbmdlZCB3aGlsZSB0aGUgZGV2aWNlIGhhcyBhdCBtb3N0IG9uZSBxdWV1ZS4gT24gYVxcbittdWx0aXF1ZXVlIGRldmljZSB0aGF0IGFscmVhZHkgaGFzIGEgc2Vjb25kIHF1ZXVlIGF0dGFjaGVkIG9yIGRldGFjaGVkLCBhXFxuK2xhdGVyIFRVTlNFVElGRiBzdWNjZWVkcyBidXQgbGVhdmVzIHRoZSBmbGFnIGFzIGl0IGlzLiBBbGwgdGhlIG90aGVyXFxuK1RVTlNFVElGRiBmbGFncyBiZWhhdmUgdGhlIHNhbWUgd2F5LlxcbitcXG4rVGhlIHR4cXVldWVsZW4gY2FuIGJlIHJlZHVjZWQgYWxvbmdzaWRlIHRoaXMgZmxhZyB0byBmdXJ0aGVyIHNoaWZ0XFxuK2J1ZmZlcmluZyBpbnRvIHRoZSBxZGlzYyBhbmQgcmVkdWNlIGJ1ZmZlcmJsb2F0LCBhdCBhIHBvc3NpYmxlXFxuK3BlcmZvcm1hbmNlIGNvc3QuXFxuK1xcbitXaGVuIHJ1bm5pbmcgbXVsdGlwbGUgbmV0d29yayBzdHJlYW1zIGluIHBhcmFsbGVsIHRocm91Z2ggYSBzaW5nbGVcXG4rVFVOL1RBUCBxdWV1ZSwgdGhlIGZsYWcgbWF5IHJlZHVjZSBwZXJmb3JtYW5jZSBkdWUgdG8gdGhlIGV4dHJhIG92ZXJoZWFkXFxuK29mIHRoZSBiYWNrcHJlc3N1cmUgbWVjaGFuaXNtLlxcbitcXG4gVW5pdmVyc2FsIFRVTi9UQVAgZGV2aWNlIGRyaXZlciBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9uXFxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVuLmMgYi9kcml2ZXJzL25ldC90dW4uY1xcbmluZGV4IDUxZTgwMDAwYmQwZWQuLmVjOTBmZWY0YTQyZjggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvdHVuLmNcXG4rKysgYi9kcml2ZXJzL25ldC90dW4uY1xcbkBAIC05OCw3ICs5OCw4IEBAIHN0YXRpYyB2b2lkIHR1bl9kZWZhdWx0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuICNkZWZpbmUgVFVOX0ZBU1lOQ1xcdElGRl9BVFRBQ0hfUVVFVUVcXG4gXFxuICNkZWZpbmUgVFVOX0ZFQVRVUkVTIChJRkZfTk9fUEkgfCBJRkZfT05FX1FVRVVFIHwgSUZGX1ZORVRfSERSIHwgXFxcXFxcbi1cXHRcXHQgICAgICBJRkZfTVVMVElfUVVFVUUgfCBJRkZfTkFQSSB8IElGRl9OQVBJX0ZSQUdTKVxcbitcXHRcXHQgICAgICBJRkZfTVVMVElfUVVFVUUgfCBJRkZfTkFQSSB8IElGRl9OQVBJX0ZSQUdTIHwgXFxcXFxcbitcXHRcXHQgICAgICBJRkZfQkFDS1BSRVNTVVJFKVxcbiBcXG4gI2RlZmluZSBHT09EQ09QWV9MRU4gMTI4XFxuIFxcbkBAIC0xNDUsNiArMTQ2LDggQEAgc3RydWN0IHR1bl9maWxlIHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBuZXh0O1xcbiBcXHRzdHJ1Y3QgdHVuX3N0cnVjdCAqZGV0YWNoZWQ7XFxuIFxcdHN0cnVjdCBwdHJfcmluZyB0eF9yaW5nO1xcbitcXHQvKiBQcm90ZWN0ZWQgYnkgdHhfcmluZy5jb25zdW1lcl9sb2NrICovXFxuK1xcdGludCBjb25zX2NudDtcXG4gXFx0c3RydWN0IHhkcF9yeHFfaW5mbyB4ZHBfcnhxO1xcbiB9O1xcbiBcXG5AQCAtNTg1LDExICs1ODgsMTYgQEAgc3RhdGljIHZvaWQgX190dW5fZGV0YWNoKHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGJvb2wgY2xlYW4pXFxuIFxcdFxcdHUxNiBpbmRleCA9IHRmaWxlLVxcdTAwM2VxdWV1ZV9pbmRleDtcXG4gXFx0XFx0QlVHX09OKGluZGV4IFxcdTAwM2U9IHR1bi1cXHUwMDNlbnVtcXVldWVzKTtcXG4gXFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XFxuIFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcih0dW4tXFx1MDAzZXRmaWxlc1tpbmRleF0sXFxuIFxcdFxcdFxcdFxcdCAgIHR1bi1cXHUwMDNldGZpbGVzW3R1bi1cXHUwMDNlbnVtcXVldWVzIC0gMV0pO1xcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XFxuIFxcdFxcdG50ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLVxcdTAwM2V0ZmlsZXNbaW5kZXhdKTtcXG4rXFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZudGZpbGUtXFx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XFxuIFxcdFxcdG50ZmlsZS1cXHUwMDNlcXVldWVfaW5kZXggPSBpbmRleDtcXG4gXFx0XFx0bnRmaWxlLVxcdTAwM2V4ZHBfcnhxLnF1ZXVlX2luZGV4ID0gaW5kZXg7XFxuK1xcdFxcdG50ZmlsZS1cXHUwMDNlY29uc19jbnQgPSAwO1xcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bnRmaWxlLVxcdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xcbiBcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIodHVuLVxcdTAwM2V0ZmlsZXNbdHVuLVxcdTAwM2VudW1xdWV1ZXMgLSAxXSxcXG4gXFx0XFx0XFx0XFx0ICAgTlVMTCk7XFxuIFxcbkBAIC02MDYsNiArNjE0LDE0IEBAIHN0YXRpYyB2b2lkIF9fdHVuX2RldGFjaChzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBib29sIGNsZWFuKVxcbiBcXHRcXHR0dW5fZmxvd19kZWxldGVfYnlfcXVldWUodHVuLCB0dW4tXFx1MDAzZW51bXF1ZXVlcyArIDEpO1xcbiBcXHRcXHQvKiBEcm9wIHJlYWQgcXVldWUgKi9cXG4gXFx0XFx0dHVuX3F1ZXVlX3B1cmdlKHRmaWxlKTtcXG4rXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZudGZpbGUtXFx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2bnRmaWxlLVxcdTAwM2V0eF9yaW5nLnByb2R1Y2VyX2xvY2spO1xcbitcXHRcXHRudGZpbGUtXFx1MDAzZWNvbnNfY250ID0gMDtcXG4rXFx0XFx0aWYgKG5ldGlmX3J1bm5pbmcodHVuLVxcdTAwM2VkZXYpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBfX3B0cl9yaW5nX2VtcHR5KFxcdTAwMjZudGZpbGUtXFx1MDAzZXR4X3JpbmcpKVxcbitcXHRcXHRcXHRuZXRpZl93YWtlX3N1YnF1ZXVlKHR1bi1cXHUwMDNlZGV2LCBpbmRleCk7XFxuK1xcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZudGZpbGUtXFx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZudGZpbGUtXFx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XFxuIFxcdFxcdHR1bl9zZXRfcmVhbF9udW1fcXVldWVzKHR1bik7XFxuIFxcdH0gZWxzZSBpZiAodGZpbGUtXFx1MDAzZWRldGFjaGVkIFxcdTAwMjZcXHUwMDI2IGNsZWFuKSB7XFxuIFxcdFxcdHR1biA9IHR1bl9lbmFibGVfcXVldWUodGZpbGUpO1xcbkBAIC02ODcsNiArNzAzLDI1IEBAIHN0YXRpYyB2b2lkIHR1bl9kZXRhY2hfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdFxcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB0dW5fZm9yY2Vfd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IHR1bl9maWxlICp0ZmlsZSlcXG4re1xcbitcXHQvKiBFbnN1cmUgdGhhdCB0aGUgcHJvZHVjZXIgY2FuIG5vdCBzdG9wIHRoZVxcbitcXHQgKiBxdWV1ZSBjb25jdXJyZW50bHkgYnkgdGFraW5nIGxvY2tzLlxcbitcXHQgKi9cXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcXG4rXFx0dGZpbGUtXFx1MDAzZWNvbnNfY250ID0gMDtcXG4rXFx0LyogVGVzdGVkIHVuZGVyIHRoZSBsb2NrcyB0aGF0IHR1bl9uZXRfY2xvc2UoKSB0YWtlcywgc28gdGhpcyBjYW4gbm90XFxuK1xcdCAqIHVuZG8gaXRzIHN0b3AuIHR1bl9uZXRfb3BlbigpIHdha2VzIHRoZSBxdWV1ZXMgb2YgYSBkZXZpY2UgdGhhdFxcbitcXHQgKiBjb21lcyBiYWNrIHVwLlxcbitcXHQgKi9cXG4rXFx0aWYgKG5ldGlmX3J1bm5pbmcodHVuLVxcdTAwM2VkZXYpKVxcbitcXHRcXHRuZXRpZl93YWtlX3N1YnF1ZXVlKHR1bi1cXHUwMDNlZGV2LCB0ZmlsZS1cXHUwMDNlcXVldWVfaW5kZXgpO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCB0dW5fYXR0YWNoKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCBmaWxlICpmaWxlLFxcbiBcXHRcXHQgICAgICBib29sIHNraXBfZmlsdGVyLCBib29sIG5hcGksIGJvb2wgbmFwaV9mcmFncyxcXG4gXFx0XFx0ICAgICAgYm9vbCBwdWJsaXNoX3R1bilcXG5AQCAtNzMwLDggKzc2NSwxMSBAQCBzdGF0aWMgaW50IHR1bl9hdHRhY2goc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGZpbGUgKmZpbGUsXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbitcXHRzcGluX2xvY2soXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xcbiBcXHR0ZmlsZS1cXHUwMDNlcXVldWVfaW5kZXggPSB0dW4tXFx1MDAzZW51bXF1ZXVlcztcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xcbiBcXHR0ZmlsZS1cXHUwMDNlc29ja2V0LnNrLVxcdTAwM2Vza19zaHV0ZG93biBcXHUwMDI2PSB+UkNWX1NIVVRET1dOO1xcbitcXHR0dW5fZm9yY2Vfd2FrZV9xdWV1ZSh0dW4sIHRmaWxlKTtcXG4gXFxuIFxcdGlmICh0ZmlsZS1cXHUwMDNlZGV0YWNoZWQpIHtcXG4gXFx0XFx0LyogUmUtYXR0YWNoIGRldGFjaGVkIHRmaWxlLCB1cGRhdGluZyBYRFAgcXVldWVfaW5kZXggKi9cXG5AQCAtOTY0LDYgKzEwMDIsMjQgQEAgc3RhdGljIGludCB0dW5fbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gLyogTmV0IGRldmljZSBjbG9zZS4gKi9cXG4gc3RhdGljIGludCB0dW5fbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4rXFx0c3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IG5ldGRldl9wcml2KGRldik7XFxuK1xcdHN0cnVjdCB0dW5fZmlsZSAqdGZpbGU7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0LyogbmV0aWZfcnVubmluZygpIGlzIGFscmVhZHkgZmFsc2U6IHRha2UgYm90aCByaW5nIGxvY2tzIHRvIGtlZXAgdGhlXFxuK1xcdCAqIHdha2Ugc2l0ZXMgb3V0LCBzbyB0aGUgc3RvcCBiZWxvdyBpcyB0aGUgbGFzdCB3cml0ZSB0b1xcbitcXHQgKiBfX1FVRVVFX1NUQVRFX0RSVl9YT0ZGLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHR1bi1cXHUwMDNlbnVtcXVldWVzOyBpKyspIHtcXG4rXFx0XFx0dGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cXHUwMDNldGZpbGVzW2ldKTtcXG4rXFxuK1xcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XFxuK1xcdFxcdHRmaWxlLVxcdTAwM2Vjb25zX2NudCA9IDA7XFxuK1xcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xcbitcXHR9XFxuK1xcbiBcXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoZGV2KTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMTAwOCw2ICsxMDY0LDcgQEAgc3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpxdWV1ZTtcXG4gXFx0c3RydWN0IHR1bl9maWxlICp0ZmlsZTtcXG4gXFx0aW50IGxlbiA9IHNrYi1cXHUwMDNlbGVuO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHR0ZmlsZSA9IHJjdV9kZXJlZmVyZW5jZSh0dW4tXFx1MDAzZXRmaWxlc1t0eHFdKTtcXG5AQCAtMTA2MiwxMyArMTExOSwzNSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcbiBcXHRuZl9yZXNldF9jdChza2IpO1xcbiBcXG4tXFx0aWYgKHB0cl9yaW5nX3Byb2R1Y2UoXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nLCBza2IpKSB7XFxuK1xcdHF1ZXVlID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHR4cSk7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nLnByb2R1Y2VyX2xvY2spO1xcbitcXHRyZXQgPSBfX3B0cl9yaW5nX3Byb2R1Y2UoXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nLCBza2IpO1xcbitcXHQvKiBEbyBub3QgdG91Y2ggdGhlIHF1ZXVlIHN0YXRlIG9mIGEgZGV2aWNlIHRoYXQgaXMgZ29pbmcgZG93bi4gKi9cXG4rXFx0aWYgKCh0dW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX0JBQ0tQUkVTU1VSRSkgXFx1MDAyNlxcdTAwMjYgbmV0aWZfcnVubmluZyhkZXYpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhcWRpc2NfdHhxX2hhc19ub19xdWV1ZShxdWV1ZSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIF9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZShcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcpID09IC1FTk9TUEMpIHtcXG4rXFx0XFx0bmV0aWZfdHhfc3RvcF9xdWV1ZShxdWV1ZSk7XFxuK1xcdFxcdC8qIFBhaXJlZCB3aXRoIHNtcF9tYigpIGluIF9fdHVuX3dha2VfcXVldWUoKSAqL1xcbitcXHRcXHRzbXBfbWJfX2FmdGVyX2F0b21pYygpO1xcbitcXHRcXHRpZiAoIV9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZShcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcpKVxcbitcXHRcXHRcXHRuZXRpZl90eF93YWtlX3F1ZXVlKHF1ZXVlKTtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9jayhcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XFxuK1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdC8qIFRoaXMgc2hvdWxkIGJlIGEgcmFyZSBjYXNlIGlmIElGRl9CQUNLUFJFU1NVUkUgaXMgZW5hYmxlZCBhbmRcXG4rXFx0XFx0ICogYSBxZGlzYyBpcyBwcmVzZW50LCBidXQgY2FuIGhhcHBlbiBkdWUgdG8gbGx0eC5cXG4rXFx0XFx0ICogU2luY2Ugc2tiX3R4X3RpbWVzdGFtcCgpLCBza2Jfb3JwaGFuKCksXFxuK1xcdFxcdCAqIHJ1bl9lYnBmX2ZpbHRlcigpIGFuZCBwc2tiX3RyaW0oKSBjb3VsZCBoYXZlIHRpbmtlcmVkXFxuK1xcdFxcdCAqIHdpdGggdGhlIFNLQiwgcmV0dXJuaW5nIE5FVERFVl9UWF9CVVNZIGlzIHVuc2FmZSBhbmRcXG4rXFx0XFx0ICogd2UgbXVzdCBkcm9wIGluc3RlYWQuXFxuK1xcdFxcdCAqL1xcbiBcXHRcXHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9GVUxMX1JJTkc7XFxuIFxcdFxcdGdvdG8gZHJvcDtcXG4gXFx0fVxcbiBcXG4gXFx0LyogZGV2LVxcdTAwM2VsbHR4IHJlcXVpcmVzIHRvIGRvIG91ciBvd24gdXBkYXRlIG9mIHRyYW5zX3N0YXJ0ICovXFxuLVxcdHF1ZXVlID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHR4cSk7XFxuIFxcdHR4cV90cmFuc19jb25kX3VwZGF0ZShxdWV1ZSk7XFxuIFxcbiBcXHQvKiBOb3RpZnkgYW5kIHdha2UgdXAgcmVhZGVyIHByb2Nlc3MgKi9cXG5AQCAtMjExNiwxMyArMjE5NSw2MSBAQCBzdGF0aWMgc3NpemVfdCB0dW5fcHV0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcXG4gXFx0cmV0dXJuIHRvdGFsO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgbm9ibG9jaywgaW50ICplcnIpXFxuKy8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqL1xcbitzdGF0aWMgdm9pZCBfX3R1bl93YWtlX3F1ZXVlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgaW50IGNvbnN1bWVkKVxcbit7XFxuK1xcdHUxNiBxdWV1ZV9pbmRleCA9IHRmaWxlLVxcdTAwM2VxdWV1ZV9pbmRleDtcXG4rXFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XFxuK1xcbitcXHRpZiAoISh0dW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX0JBQ0tQUkVTU1VSRSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qIEEgc3RvcCBmcm9tIHR1bl9uZXRfY2xvc2UoKSBpcyBub3QgYmFja3ByZXNzdXJlLCBsZWF2ZSBpdCBhbG9uZS4gKi9cXG4rXFx0aWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKHR1bi1cXHUwMDNlZGV2KSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qIE9ubHkgdGhlIGN1cnJlbnQgb3duZXIgb2YgdGhlIHNsb3QgbWF5IHdha2UgaXRzIHN1YnF1ZXVlLiAqL1xcbitcXHRpZiAodW5saWtlbHkocmN1X2FjY2Vzc19wb2ludGVyKHR1bi1cXHUwMDNldGZpbGVzW3F1ZXVlX2luZGV4XSkgIT0gdGZpbGUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHR1bi1cXHUwMDNlZGV2LCBxdWV1ZV9pbmRleCk7XFxuK1xcbitcXHQvKiBQYWlyZWQgd2l0aCBzbXBfbWJfX2FmdGVyX2F0b21pYygpIGluIHR1bl9uZXRfeG1pdCgpICovXFxuK1xcdHNtcF9tYigpO1xcbitcXHRpZiAobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpKSB7XFxuK1xcdFxcdHRmaWxlLVxcdTAwM2Vjb25zX2NudCArPSBjb25zdW1lZDtcXG4rXFx0XFx0aWYgKHRmaWxlLVxcdTAwM2Vjb25zX2NudCBcXHUwMDNlPSB0ZmlsZS1cXHUwMDNldHhfcmluZy5zaXplIC8gMiB8fFxcbitcXHRcXHQgICAgX19wdHJfcmluZ19lbXB0eShcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcpKSB7XFxuK1xcdFxcdFxcdG5ldGlmX3R4X3dha2VfcXVldWUodHhxKTtcXG4rXFx0XFx0XFx0dGZpbGUtXFx1MDAzZWNvbnNfY250ID0gMDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkICp0dW5fcmluZ19jb25zdW1lKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXFxuK3tcXG4rXFx0dm9pZCAqcHRyO1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcXG4rXFx0cHRyID0gX19wdHJfcmluZ19jb25zdW1lKFxcdTAwMjZ0ZmlsZS1cXHUwMDNldHhfcmluZyk7XFxuK1xcdGlmIChwdHIpXFxuK1xcdFxcdF9fdHVuX3dha2VfcXVldWUodHVuLCB0ZmlsZSwgMSk7XFxuK1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XFxuK1xcdHJldHVybiBwdHI7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkICp0dW5fcmluZ19yZWN2KHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsXFxuK1xcdFxcdFxcdCAgIGludCBub2Jsb2NrLCBpbnQgKmVycilcXG4ge1xcbiBcXHRERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTtcXG4gXFx0dm9pZCAqcHRyID0gTlVMTDtcXG4gXFx0aW50IGVycm9yID0gMDtcXG4gXFxuLVxcdHB0ciA9IHB0cl9yaW5nX2NvbnN1bWUoXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nKTtcXG4rXFx0cHRyID0gdHVuX3JpbmdfY29uc3VtZSh0dW4sIHRmaWxlKTtcXG4gXFx0aWYgKHB0cilcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdGlmIChub2Jsb2NrKSB7XFxuQEAgLTIxMzQsNyArMjI2MSw3IEBAIHN0YXRpYyB2b2lkICp0dW5fcmluZ19yZWN2KHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGludCBub2Jsb2NrLCBpbnQgKmVycilcXG4gXFxuIFxcdHdoaWxlICgxKSB7XFxuIFxcdFxcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XFxuLVxcdFxcdHB0ciA9IHB0cl9yaW5nX2NvbnN1bWUoXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nKTtcXG4rXFx0XFx0cHRyID0gdHVuX3JpbmdfY29uc3VtZSh0dW4sIHRmaWxlKTtcXG4gXFx0XFx0aWYgKHB0cilcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbkBAIC0yMTcxLDcgKzIyOTgsNyBAQCBzdGF0aWMgc3NpemVfdCB0dW5fZG9fcmVhZChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxcbiBcXG4gXFx0aWYgKCFwdHIpIHtcXG4gXFx0XFx0LyogUmVhZCBmcmFtZXMgZnJvbSByaW5nICovXFxuLVxcdFxcdHB0ciA9IHR1bl9yaW5nX3JlY3YodGZpbGUsIG5vYmxvY2ssIFxcdTAwMjZlcnIpO1xcbitcXHRcXHRwdHIgPSB0dW5fcmluZ19yZWN2KHR1biwgdGZpbGUsIG5vYmxvY2ssIFxcdTAwMjZlcnIpO1xcbiBcXHRcXHRpZiAoIXB0cilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbkBAIC0yNzAzLDggKzI4MzAsOSBAQCBzdGF0aWMgaW50IHR1bl9zZXRfaWZmKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKVxcbiB7XFxuIFxcdHN0cnVjdCB0dW5fc3RydWN0ICp0dW47XFxuIFxcdHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuK1xcdHN0cnVjdCB0dW5fZmlsZSAqbnRmaWxlO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbi1cXHRpbnQgZXJyO1xcbitcXHRpbnQgZXJyLCBpO1xcbiBcXG4gXFx0aWYgKHRmaWxlLVxcdTAwM2VkZXRhY2hlZClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTI4MzMsOCArMjk2MSwxMCBAQCBzdGF0aWMgaW50IHR1bl9zZXRfaWZmKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKVxcbiBcXHQvKiBNYWtlIHN1cmUgcGVyc2lzdGVudCBkZXZpY2VzIGRvIG5vdCBnZXQgc3R1Y2sgaW5cXG4gXFx0ICogeG9mZiBzdGF0ZS5cXG4gXFx0ICovXFxuLVxcdGlmIChuZXRpZl9ydW5uaW5nKHR1bi1cXHUwMDNlZGV2KSlcXG4tXFx0XFx0bmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKHR1bi1cXHUwMDNlZGV2KTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHR1bi1cXHUwMDNlbnVtcXVldWVzOyBpKyspIHtcXG4rXFx0XFx0bnRmaWxlID0gcnRubF9kZXJlZmVyZW5jZSh0dW4tXFx1MDAzZXRmaWxlc1tpXSk7XFxuK1xcdFxcdHR1bl9mb3JjZV93YWtlX3F1ZXVlKHR1biwgbnRmaWxlKTtcXG4rXFx0fVxcbiBcXG4gXFx0c3Ryc2NweShpZnItXFx1MDAzZWlmcl9uYW1lLCB0dW4tXFx1MDAzZWRldi1cXHUwMDNlbmFtZSk7XFxuIFxcdHJldHVybiAwO1xcbkBAIC0zNjMwLDYgKzM3NjAsMTMgQEAgc3RhdGljIGludCB0dW5fcXVldWVfcmVzaXplKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4pXFxuIFxcdFxcdFxcdFxcdFxcdCAgZGV2LVxcdTAwM2V0eF9xdWV1ZV9sZW4sIEdGUF9LRVJORUwsXFxuIFxcdFxcdFxcdFxcdFxcdCAgdHVuX3B0cl9mcmVlKTtcXG4gXFxuK1xcdGlmICghcmV0KSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0dW4tXFx1MDAzZW51bXF1ZXVlczsgaSsrKSB7XFxuK1xcdFxcdFxcdHRmaWxlID0gcnRubF9kZXJlZmVyZW5jZSh0dW4tXFx1MDAzZXRmaWxlc1tpXSk7XFxuK1xcdFxcdFxcdHR1bl9mb3JjZV93YWtlX3F1ZXVlKHR1biwgdGZpbGUpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuIFxcdGtmcmVlKHJpbmdzKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC0zNzM4LDYgKzM4NzUsMzEgQEAgc3RydWN0IHB0cl9yaW5nICp0dW5fZ2V0X3R4X3Jpbmcoc3RydWN0IGZpbGUgKmZpbGUpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwodHVuX2dldF90eF9yaW5nKTtcXG4gXFxuKy8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqL1xcbit2b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY29uc3VtZWQpXFxuK3tcXG4rXFx0c3RydWN0IHR1bl9maWxlICp0ZmlsZTtcXG4rXFx0c3RydWN0IHR1bl9zdHJ1Y3QgKnR1bjtcXG4rXFxuK1xcdGlmIChmaWxlLVxcdTAwM2VmX29wICE9IFxcdTAwMjZ0dW5fZm9wcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0dGZpbGUgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuK1xcdGlmICghdGZpbGUpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xcbitcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXG4rXFx0dHVuID0gcmN1X2RlcmVmZXJlbmNlKHRmaWxlLVxcdTAwM2V0dW4pO1xcbitcXHRpZiAodHVuKVxcbitcXHRcXHRfX3R1bl93YWtlX3F1ZXVlKHR1biwgdGZpbGUsIGNvbnN1bWVkKTtcXG4rXFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHR1bl93YWtlX3F1ZXVlKTtcXG4rXFxuIG1vZHVsZV9pbml0KHR1bl9pbml0KTtcXG4gbW9kdWxlX2V4aXQodHVuX2NsZWFudXApO1xcbiBNT0RVTEVfREVTQ1JJUFRJT04oRFJWX0RFU0NSSVBUSU9OKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmNcXG5pbmRleCA2OTQ5YjcwNDE2NmQ1Li4zZTcyYjljNmFmMGNhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmhvc3QvbmV0LmNcXG4rKysgYi9kcml2ZXJzL3Zob3N0L25ldC5jXFxuQEAgLTE3NiwxMyArMTc2LDIxIEBAIHN0YXRpYyB2b2lkICp2aG9zdF9uZXRfYnVmX2NvbnN1bWUoc3RydWN0IHZob3N0X25ldF9idWYgKnJ4cSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcXG4rc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc3RydWN0IHNvY2sgKnNrLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcXG4ge1xcbitcXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IHNrLVxcdTAwM2Vza19zb2NrZXQtXFx1MDAzZWZpbGU7XFxuIFxcdHN0cnVjdCB2aG9zdF9uZXRfYnVmICpyeHEgPSBcXHUwMDI2bnZxLVxcdTAwM2VyeHE7XFxuIFxcbiBcXHRyeHEtXFx1MDAzZWhlYWQgPSAwO1xcbi1cXHRyeHEtXFx1MDAzZXRhaWwgPSBwdHJfcmluZ19jb25zdW1lX2JhdGNoZWQobnZxLVxcdTAwM2VyeF9yaW5nLCByeHEtXFx1MDAzZXF1ZXVlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBWSE9TVF9ORVRfQkFUQ0gpO1xcbitcXHRzcGluX2xvY2soXFx1MDAyNm52cS1cXHUwMDNlcnhfcmluZy1cXHUwMDNlY29uc3VtZXJfbG9jayk7XFxuK1xcdHJ4cS1cXHUwMDNldGFpbCA9IF9fcHRyX3JpbmdfY29uc3VtZV9iYXRjaGVkKG52cS1cXHUwMDNlcnhfcmluZywgcnhxLVxcdTAwM2VxdWV1ZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIFZIT1NUX05FVF9CQVRDSCk7XFxuK1xcbitcXHRpZiAocnhxLVxcdTAwM2V0YWlsKVxcbitcXHRcXHR0dW5fd2FrZV9xdWV1ZShmaWxlLCByeHEtXFx1MDAzZXRhaWwpO1xcbitcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNm52cS1cXHUwMDNlcnhfcmluZy1cXHUwMDNlY29uc3VtZXJfbG9jayk7XFxuIFxcdHJldHVybiByeHEtXFx1MDAzZXRhaWw7XFxuIH1cXG4gXFxuQEAgLTIwOSwxNCArMjE3LDE1IEBAIHN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrX2xlbih2b2lkICpwdHIpXFxuIFxcdHJldHVybiBfX3NrYl9hcnJheV9sZW5fd2l0aF90YWcocHRyKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWsoc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSlcXG4rc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3BlZWsoc3RydWN0IHNvY2sgKnNrLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqbnZxKVxcbiB7XFxuIFxcdHN0cnVjdCB2aG9zdF9uZXRfYnVmICpyeHEgPSBcXHUwMDI2bnZxLVxcdTAwM2VyeHE7XFxuIFxcbiBcXHRpZiAoIXZob3N0X25ldF9idWZfaXNfZW1wdHkocnhxKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHRpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShudnEpKVxcbitcXHRpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShzaywgbnZxKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBvdXQ6XFxuQEAgLTEwMDQsNyArMTAxMyw3IEBAIHN0YXRpYyBpbnQgcGVla19oZWFkX2xlbihzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqcnZxLCBzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbiBcXHRpZiAocnZxLVxcdTAwM2VyeF9yaW5nKVxcbi1cXHRcXHRyZXR1cm4gdmhvc3RfbmV0X2J1Zl9wZWVrKHJ2cSk7XFxuK1xcdFxcdHJldHVybiB2aG9zdF9uZXRfYnVmX3BlZWsoc2ssIHJ2cSk7XFxuIFxcbiBcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jaywgZmxhZ3MpO1xcbiBcXHRoZWFkID0gc2tiX3BlZWsoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl90dW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdHVuLmhcXG5pbmRleCA4MDE2NmViNjJmNDFjLi5lZWI5ZWQzYzVhMjM5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaWZfdHVuLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oXFxuQEAgLTIyLDYgKzIyLDggQEAgc3RydWN0IHR1bl9tc2dfY3RsIHtcXG4gI2lmIGRlZmluZWQoQ09ORklHX1RVTikgfHwgZGVmaW5lZChDT05GSUdfVFVOX01PRFVMRSlcXG4gc3RydWN0IHNvY2tldCAqdHVuX2dldF9zb2NrZXQoc3RydWN0IGZpbGUgKik7XFxuIHN0cnVjdCBwdHJfcmluZyAqdHVuX2dldF90eF9yaW5nKHN0cnVjdCBmaWxlICpmaWxlKTtcXG4rLyogQ2FsbGVycyBtdXN0IGhvbGQgdGhlIGNvbnN1bWVyX2xvY2sgb2YgdGhlIHJpbmcgb2YgZmlsZSAqL1xcbit2b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY29uc3VtZWQpO1xcbiBcXG4gc3RhdGljIGlubGluZSBib29sIHR1bl9pc194ZHBfZnJhbWUodm9pZCAqcHRyKVxcbiB7XFxuQEAgLTU1LDYgKzU3LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcHRyX3JpbmcgKnR1bl9nZXRfdHhfcmluZyhzdHJ1Y3QgZmlsZSAqZilcXG4gXFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB0dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgZmlsZSAqZiwgaW50IGNvbnN1bWVkKSB7fVxcbitcXG4gc3RhdGljIGlubGluZSBib29sIHR1bl9pc194ZHBfZnJhbWUodm9pZCAqcHRyKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oIGIvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oXFxuaW5kZXggZDJjMzYyOWJiZTQ1MS4uNjMxYzQzZmRlNDQwNyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3B0cl9yaW5nLmhcXG5AQCAtOTYsNiArOTYsMjYgQEAgc3RhdGljIGlubGluZSBib29sIHB0cl9yaW5nX2Z1bGxfYmgoc3RydWN0IHB0cl9yaW5nICpyKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbisvKiBSZXBvcnQgd2hldGhlciB0aGUgbmV4dCBfX3B0cl9yaW5nX3Byb2R1Y2UoKSBoYXMgcm9vbSBmb3Igb25lIGVudHJ5OlxcbisgKiAwIG1lYW5zIHRoZSBzaW5nbGUgc2xvdCBhdCByLVxcdTAwM2VxdWV1ZVtyLVxcdTAwM2Vwcm9kdWNlcl0gaXMgZnJlZSwgLUVOT1NQQyBtZWFuc1xcbisgKiB0aGUgcmluZyBpcyBmdWxsLCB3aGljaCBpcyB0cmFuc2llbnQsIGFuZCAtRUlOVkFMIG1lYW5zIHItXFx1MDAzZXNpemUgaXMgMCxcXG4rICogd2hpY2ggaXMgcGVybWFuZW50LiBBIGNhbGxlciB0aGF0IHN0b3BzIHByb2R1Y2luZyBhbmQgd2FpdHMgZm9yIHNwYWNlXFxuKyAqIG11c3QgdGhlcmVmb3JlIGRvIHNvIG9ubHkgZm9yIC1FTk9TUEMuXFxuKyAqXFxuKyAqIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLFxcbisgKiBmb3IgZXhhbXBsZSBjcHVfcmVsYXgoKS4gQ2FsbGVycyBtdXN0IGhvbGQgcHJvZHVjZXJfbG9jay5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZShzdHJ1Y3QgcHRyX3JpbmcgKnIpXFxuK3tcXG4rXFx0aWYgKHVubGlrZWx5KCFyLVxcdTAwM2VzaXplKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAoZGF0YV9yYWNlKHItXFx1MDAzZXF1ZXVlW3ItXFx1MDAzZXByb2R1Y2VyXSkpXFxuK1xcdFxcdHJldHVybiAtRU5PU1BDO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qIE5vdGU6IGNhbGxlcnMgaW52b2tpbmcgdGhpcyBpbiBhIGxvb3AgbXVzdCB1c2UgYSBjb21waWxlciBiYXJyaWVyLFxcbiAgKiBmb3IgZXhhbXBsZSBjcHVfcmVsYXgoKS4gQ2FsbGVycyBtdXN0IGhvbGQgcHJvZHVjZXJfbG9jay5cXG4gICogQ2FsbGVycyBhcmUgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHBvaW50ZXIgdGhhdCBpcyBiZWluZyBxdWV1ZWRcXG5AQCAtMTAzLDggKzEyMywxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcHRyX3JpbmdfZnVsbF9iaChzdHJ1Y3QgcHRyX3JpbmcgKnIpXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIGludCBfX3B0cl9yaW5nX3Byb2R1Y2Uoc3RydWN0IHB0cl9yaW5nICpyLCB2b2lkICpwdHIpXFxuIHtcXG4tXFx0aWYgKHVubGlrZWx5KCFyLVxcdTAwM2VzaXplKSB8fCBkYXRhX3JhY2Uoci1cXHUwMDNlcXVldWVbci1cXHUwMDNlcHJvZHVjZXJdKSlcXG4tXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuK1xcdGludCByZXQgPSBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2Uocik7XFxuK1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0LyogTWFrZSBzdXJlIHRoZSBwb2ludGVyIHdlIGFyZSBzdG9yaW5nIHBvaW50cyB0byBhIHZhbGlkIGRhdGEuICovXFxuIFxcdC8qIFBhaXJzIHdpdGggdGhlIGRlcGVuZGVuY3kgb3JkZXJpbmcgaW4gX19wdHJfcmluZ19jb25zdW1lLiAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcXG5pbmRleCA3OWQ1M2M3YTFlYmRjLi5hMGRkYzUwYTc1MzQyIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxcbkBAIC02OSw2ICs2OSwxMCBAQFxcbiAjZGVmaW5lIElGRl9OQVBJX0ZSQUdTXFx0MHgwMDIwXFxuIC8qIFVzZWQgaW4gVFVOU0VUSUZGIHRvIGJyaW5nIHVwIHR1bi90YXAgd2l0aG91dCBjYXJyaWVyICovXFxuICNkZWZpbmUgSUZGX05PX0NBUlJJRVJcXHQweDAwNDBcXG4rLyogU3RvcCB0aGUgcXVldWUgaW5zdGVhZCBvZiBkcm9wcGluZyB3aGVuIHRoZSBpbnRlcm5hbCByaW5nIGlzIGZ1bGwsIHNvIGFuXFxuKyAqIGF0dGFjaGVkIHFkaXNjIGFwcGxpZXMgYmFja3ByZXNzdXJlIGluc3RlYWQgb2YgYmVpbmcgYnlwYXNzZWQuXFxuKyAqL1xcbisjZGVmaW5lIElGRl9CQUNLUFJFU1NVUkVcXHQweDAwODBcXG4gI2RlZmluZSBJRkZfTk9fUElcXHQweDEwMDBcXG4gLyogVGhpcyBmbGFnIGhhcyBubyByZWFsIGVmZmVjdCAqL1xcbiAjZGVmaW5lIElGRl9PTkVfUVVFVUVcXHQweDIwMDBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXFxuaW5kZXggMmVjMDdkZTFkNzNiZS4uMmM4NTUyNTcwNGMxNiAxMDA2NDRcXG4tLS0gYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcXG4rKysgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcXG5AQCAtNjcsNiArNjcsMTAgQEBcXG4gI2RlZmluZSBJRkZfVEFQXFx0XFx0MHgwMDAyXFxuICNkZWZpbmUgSUZGX05BUElcXHQweDAwMTBcXG4gI2RlZmluZSBJRkZfTkFQSV9GUkFHU1xcdDB4MDAyMFxcbisvKiBTdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHdoZW4gdGhlIGludGVybmFsIHJpbmcgaXMgZnVsbCwgc28gYW5cXG4rICogYXR0YWNoZWQgcWRpc2MgYXBwbGllcyBiYWNrcHJlc3N1cmUgaW5zdGVhZCBvZiBiZWluZyBieXBhc3NlZC5cXG4rICovXFxuKyNkZWZpbmUgSUZGX0JBQ0tQUkVTU1VSRVxcdDB4MDA4MFxcbiAjZGVmaW5lIElGRl9OT19QSVxcdDB4MTAwMFxcbiAvKiBUaGlzIGZsYWcgaGFzIG5vIHJlYWwgZWZmZWN0ICovXFxuICNkZWZpbmUgSUZGX09ORV9RVUVVRVxcdDB4MjAwMFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjowNTo0Ny41ODE1MTg1NjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMDIyMTA2MTM2NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFVOXCIsXG4gICAgXCJWSE9TVF9ORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0dW5fbmV0X3htaXRcIixcbiAgICBcInR1bl9zZXRfaWZmXCIsXG4gICAgXCJ0dW5fY2hyX2lvY3RsXCIsXG4gICAgXCJ0dW5fY2hyX3JlYWRfaXRlclwiLFxuICAgIFwidHVuX25ldF9jbG9zZVwiLFxuICAgIFwidHVuX3F1ZXVlX3Jlc2l6ZVwiLFxuICAgIFwidHVuX3dha2VfcXVldWVcIixcbiAgICBcInZob3N0X25ldF9pb2N0bFwiLFxuICAgIFwidmhvc3RfbmV0X29wZW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgKElGRl9CQUNLUFJFU1NVUkUpIHRvIHRoZSBUVU4vVEFQIGRyaXZlciwgYWxsb3dpbmcgdGhlIGtlcm5lbCB0byBzdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHBhY2tldHMgd2hlbiB0aGUgaW50ZXJuYWwgcmluZyBidWZmZXIgaXMgZnVsbC4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgYW5kIFRVTi9UQVAgZHJpdmVyIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gSXQgYWxzbyBtb2RpZmllcyB0aGUgdmhvc3QtbmV0IGRyaXZlciB0byB3YWtlIHRoZSBxdWV1ZSB3aGVuIGl0ZW1zIGFyZSBjb25zdW1lZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWEzMjBkOTJiZGE2ODE4YTQ1YmQ2MWEyYWUwZTg5ODFmYTYyYTUzM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDQgMDI6MDU6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0XG5pbmRleCA0ZDcwODdmNzI3YmU1Li41NmM5ZGM3Yjk2YWZiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0XG5AQCAtMjA2LDYgKzIwNiwzOCBAQCBlbmFibGUgaXMgdHJ1ZSB3ZSBlbmFibGUgaXQsIG90aGVyd2lzZSB3ZSBkaXNhYmxlIGl0OjpcbiAgICAgICByZXR1cm4gaW9jdGwoZmQsIFRVTlNFVFFVRVVFLCAodm9pZCAqKVx1MDAyNmlmcik7XG4gICB9XG4gXG4rMy40IHFkaXNjIGJhY2twcmVzc3VyZVxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbitcbitJRkZfQkFDS1BSRVNTVVJFIGNhbiBiZSBzZXQgdG8gZW5hYmxlIHFkaXNjIGJhY2twcmVzc3VyZS4gV2l0aG91dCBpdCwgVFhcbitkcm9wcyBvY2N1ciB3aGVuIHRoZSBpbnRlcm5hbCByaW5nIGJ1ZmZlciBpcyBmdWxsLCBzbyBhbnkgYXR0YWNoZWQgcWRpc2NcbitpcyBlZmZlY3RpdmVseSBieXBhc3NlZCBhbmQgYXBwbGljYXRpb25zIG9ubHkgbGVhcm4gYWJvdXQgY29uZ2VzdGlvblxuK3Rocm91Z2ggdGhvc2UgZHJvcHMuXG4rXG4rV2l0aCBpdCwgdGhlIGtlcm5lbCBzdG9wcyB0aGUgcXVldWUgaW5zdGVhZCwgbGV0dGluZyB0aGUgcWRpc2MgaG9sZCBhbmRcbitzY2hlZHVsZSBwYWNrZXRzLCBzbyBpdHMgQVFNLCBzaGFwaW5nIGFuZCBmYWlybmVzcyBhY3R1YWxseSBhcHBseS4gVGhpc1xuK2hlbHBzIHByb3RvY29scyBsaWtlIFRDUCwgd2hpY2ggY3V0IHRocm91Z2hwdXQgaW4gcmVhY3Rpb24gdG8gcGFja2V0XG4rZHJvcHMuIFdpdGggSUZGX0JBQ0tQUkVTU1VSRSwgZHJvcHMgdGhlbiBvbmx5IG9jY3VyIGFzIGEgcmFyZSByYWNlLlxuK0JhY2twcmVzc3VyZSByZXF1aXJlcyBhIHFkaXNjIHRvIGJlIGF0dGFjaGVkIGFuZCBoYXMgbm8gZWZmZWN0IHdpdGhcbitub3F1ZXVlLlxuK1xuK1RoZSBmbGFnIGlzIGEgcHJvcGVydHkgb2YgdGhlIFRVTi9UQVAgZGV2aWNlIHJhdGhlciB0aGFuIG9mIHRoZSBmaWxlXG4rZGVzY3JpcHRvciBpdCB3YXMgc2V0IG9uLCBzbyBpdCBhcHBsaWVzIHRvIGFsbCBxdWV1ZXMgb2YgdGhlIGRldmljZSxcbityZWdhcmRsZXNzIG9mIHdoaWNoIHByb2Nlc3Mgb3BlbmVkIHdoaWNoIHF1ZXVlLlxuK1xuK1RoZSBmbGFnIGNhbiBvbmx5IGJlIGNoYW5nZWQgd2hpbGUgdGhlIGRldmljZSBoYXMgYXQgbW9zdCBvbmUgcXVldWUuIE9uIGFcbittdWx0aXF1ZXVlIGRldmljZSB0aGF0IGFscmVhZHkgaGFzIGEgc2Vjb25kIHF1ZXVlIGF0dGFjaGVkIG9yIGRldGFjaGVkLCBhXG4rbGF0ZXIgVFVOU0VUSUZGIHN1Y2NlZWRzIGJ1dCBsZWF2ZXMgdGhlIGZsYWcgYXMgaXQgaXMuIEFsbCB0aGUgb3RoZXJcbitUVU5TRVRJRkYgZmxhZ3MgYmVoYXZlIHRoZSBzYW1lIHdheS5cbitcbitUaGUgdHhxdWV1ZWxlbiBjYW4gYmUgcmVkdWNlZCBhbG9uZ3NpZGUgdGhpcyBmbGFnIHRvIGZ1cnRoZXIgc2hpZnRcbitidWZmZXJpbmcgaW50byB0aGUgcWRpc2MgYW5kIHJlZHVjZSBidWZmZXJibG9hdCwgYXQgYSBwb3NzaWJsZVxuK3BlcmZvcm1hbmNlIGNvc3QuXG4rXG4rV2hlbiBydW5uaW5nIG11bHRpcGxlIG5ldHdvcmsgc3RyZWFtcyBpbiBwYXJhbGxlbCB0aHJvdWdoIGEgc2luZ2xlXG4rVFVOL1RBUCBxdWV1ZSwgdGhlIGZsYWcgbWF5IHJlZHVjZSBwZXJmb3JtYW5jZSBkdWUgdG8gdGhlIGV4dHJhIG92ZXJoZWFkXG4rb2YgdGhlIGJhY2twcmVzc3VyZSBtZWNoYW5pc20uXG4rXG4gVW5pdmVyc2FsIFRVTi9UQVAgZGV2aWNlIGRyaXZlciBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9uXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVuLmMgYi9kcml2ZXJzL25ldC90dW4uY1xuaW5kZXggNTFlODAwMDBiZDBlZC4uZWM5MGZlZjRhNDJmOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jXG4rKysgYi9kcml2ZXJzL25ldC90dW4uY1xuQEAgLTk4LDcgKzk4LDggQEAgc3RhdGljIHZvaWQgdHVuX2RlZmF1bHRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiAjZGVmaW5lIFRVTl9GQVNZTkNcdElGRl9BVFRBQ0hfUVVFVUVcbiBcbiAjZGVmaW5lIFRVTl9GRUFUVVJFUyAoSUZGX05PX1BJIHwgSUZGX09ORV9RVUVVRSB8IElGRl9WTkVUX0hEUiB8IFxcXG4tXHRcdCAgICAgIElGRl9NVUxUSV9RVUVVRSB8IElGRl9OQVBJIHwgSUZGX05BUElfRlJBR1MpXG4rXHRcdCAgICAgIElGRl9NVUxUSV9RVUVVRSB8IElGRl9OQVBJIHwgSUZGX05BUElfRlJBR1MgfCBcXFxuK1x0XHQgICAgICBJRkZfQkFDS1BSRVNTVVJFKVxuIFxuICNkZWZpbmUgR09PRENPUFlfTEVOIDEyOFxuIFxuQEAgLTE0NSw2ICsxNDYsOCBAQCBzdHJ1Y3QgdHVuX2ZpbGUge1xuIFx0c3RydWN0IGxpc3RfaGVhZCBuZXh0O1xuIFx0c3RydWN0IHR1bl9zdHJ1Y3QgKmRldGFjaGVkO1xuIFx0c3RydWN0IHB0cl9yaW5nIHR4X3Jpbmc7XG4rXHQvKiBQcm90ZWN0ZWQgYnkgdHhfcmluZy5jb25zdW1lcl9sb2NrICovXG4rXHRpbnQgY29uc19jbnQ7XG4gXHRzdHJ1Y3QgeGRwX3J4cV9pbmZvIHhkcF9yeHE7XG4gfTtcbiBcbkBAIC01ODUsMTEgKzU4OCwxNiBAQCBzdGF0aWMgdm9pZCBfX3R1bl9kZXRhY2goc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgYm9vbCBjbGVhbilcbiBcdFx0dTE2IGluZGV4ID0gdGZpbGUtXHUwMDNlcXVldWVfaW5kZXg7XG4gXHRcdEJVR19PTihpbmRleCBcdTAwM2U9IHR1bi1cdTAwM2VudW1xdWV1ZXMpO1xuIFxuK1x0XHRzcGluX2xvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHR1bi1cdTAwM2V0ZmlsZXNbaW5kZXhdLFxuIFx0XHRcdFx0ICAgdHVuLVx1MDAzZXRmaWxlc1t0dW4tXHUwMDNlbnVtcXVldWVzIC0gMV0pO1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuIFx0XHRudGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cdTAwM2V0ZmlsZXNbaW5kZXhdKTtcbitcdFx0c3Bpbl9sb2NrKFx1MDAyNm50ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuIFx0XHRudGZpbGUtXHUwMDNlcXVldWVfaW5kZXggPSBpbmRleDtcbiBcdFx0bnRmaWxlLVx1MDAzZXhkcF9yeHEucXVldWVfaW5kZXggPSBpbmRleDtcbitcdFx0bnRmaWxlLVx1MDAzZWNvbnNfY250ID0gMDtcbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2bnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcih0dW4tXHUwMDNldGZpbGVzW3R1bi1cdTAwM2VudW1xdWV1ZXMgLSAxXSxcbiBcdFx0XHRcdCAgIE5VTEwpO1xuIFxuQEAgLTYwNiw2ICs2MTQsMTQgQEAgc3RhdGljIHZvaWQgX190dW5fZGV0YWNoKHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUsIGJvb2wgY2xlYW4pXG4gXHRcdHR1bl9mbG93X2RlbGV0ZV9ieV9xdWV1ZSh0dW4sIHR1bi1cdTAwM2VudW1xdWV1ZXMgKyAxKTtcbiBcdFx0LyogRHJvcCByZWFkIHF1ZXVlICovXG4gXHRcdHR1bl9xdWV1ZV9wdXJnZSh0ZmlsZSk7XG4rXHRcdHNwaW5fbG9ja19iaChcdTAwMjZudGZpbGUtXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcbitcdFx0c3Bpbl9sb2NrKFx1MDAyNm50ZmlsZS1cdTAwM2V0eF9yaW5nLnByb2R1Y2VyX2xvY2spO1xuK1x0XHRudGZpbGUtXHUwMDNlY29uc19jbnQgPSAwO1xuK1x0XHRpZiAobmV0aWZfcnVubmluZyh0dW4tXHUwMDNlZGV2KSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIF9fcHRyX3JpbmdfZW1wdHkoXHUwMDI2bnRmaWxlLVx1MDAzZXR4X3JpbmcpKVxuK1x0XHRcdG5ldGlmX3dha2Vfc3VicXVldWUodHVuLVx1MDAzZWRldiwgaW5kZXgpO1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZudGZpbGUtXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4gXHRcdHR1bl9zZXRfcmVhbF9udW1fcXVldWVzKHR1bik7XG4gXHR9IGVsc2UgaWYgKHRmaWxlLVx1MDAzZWRldGFjaGVkIFx1MDAyNlx1MDAyNiBjbGVhbikge1xuIFx0XHR0dW4gPSB0dW5fZW5hYmxlX3F1ZXVlKHRmaWxlKTtcbkBAIC02ODcsNiArNzAzLDI1IEBAIHN0YXRpYyB2b2lkIHR1bl9kZXRhY2hfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB0dW5fZm9yY2Vfd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuK1x0XHRcdFx0IHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXG4re1xuK1x0LyogRW5zdXJlIHRoYXQgdGhlIHByb2R1Y2VyIGNhbiBub3Qgc3RvcCB0aGVcbitcdCAqIHF1ZXVlIGNvbmN1cnJlbnRseSBieSB0YWtpbmcgbG9ja3MuXG4rXHQgKi9cbitcdHNwaW5fbG9ja19iaChcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuK1x0c3Bpbl9sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XG4rXHR0ZmlsZS1cdTAwM2Vjb25zX2NudCA9IDA7XG4rXHQvKiBUZXN0ZWQgdW5kZXIgdGhlIGxvY2tzIHRoYXQgdHVuX25ldF9jbG9zZSgpIHRha2VzLCBzbyB0aGlzIGNhbiBub3RcbitcdCAqIHVuZG8gaXRzIHN0b3AuIHR1bl9uZXRfb3BlbigpIHdha2VzIHRoZSBxdWV1ZXMgb2YgYSBkZXZpY2UgdGhhdFxuK1x0ICogY29tZXMgYmFjayB1cC5cbitcdCAqL1xuK1x0aWYgKG5ldGlmX3J1bm5pbmcodHVuLVx1MDAzZWRldikpXG4rXHRcdG5ldGlmX3dha2Vfc3VicXVldWUodHVuLVx1MDAzZWRldiwgdGZpbGUtXHUwMDNlcXVldWVfaW5kZXgpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgdHVuX2F0dGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0ICAgICAgYm9vbCBza2lwX2ZpbHRlciwgYm9vbCBuYXBpLCBib29sIG5hcGlfZnJhZ3MsXG4gXHRcdCAgICAgIGJvb2wgcHVibGlzaF90dW4pXG5AQCAtNzMwLDggKzc2NSwxMSBAQCBzdGF0aWMgaW50IHR1bl9hdHRhY2goc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuK1x0c3Bpbl9sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4gXHR0ZmlsZS1cdTAwM2VxdWV1ZV9pbmRleCA9IHR1bi1cdTAwM2VudW1xdWV1ZXM7XG4rXHRzcGluX3VubG9jayhcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuIFx0dGZpbGUtXHUwMDNlc29ja2V0LnNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNj0gflJDVl9TSFVURE9XTjtcbitcdHR1bl9mb3JjZV93YWtlX3F1ZXVlKHR1biwgdGZpbGUpO1xuIFxuIFx0aWYgKHRmaWxlLVx1MDAzZWRldGFjaGVkKSB7XG4gXHRcdC8qIFJlLWF0dGFjaCBkZXRhY2hlZCB0ZmlsZSwgdXBkYXRpbmcgWERQIHF1ZXVlX2luZGV4ICovXG5AQCAtOTY0LDYgKzEwMDIsMjQgQEAgc3RhdGljIGludCB0dW5fbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAvKiBOZXQgZGV2aWNlIGNsb3NlLiAqL1xuIHN0YXRpYyBpbnQgdHVuX25ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbitcdHN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0c3RydWN0IHR1bl9maWxlICp0ZmlsZTtcbitcdGludCBpO1xuK1xuK1x0LyogbmV0aWZfcnVubmluZygpIGlzIGFscmVhZHkgZmFsc2U6IHRha2UgYm90aCByaW5nIGxvY2tzIHRvIGtlZXAgdGhlXG4rXHQgKiB3YWtlIHNpdGVzIG91dCwgc28gdGhlIHN0b3AgYmVsb3cgaXMgdGhlIGxhc3Qgd3JpdGUgdG9cbitcdCAqIF9fUVVFVUVfU1RBVEVfRFJWX1hPRkYuXG4rXHQgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHR1bi1cdTAwM2VudW1xdWV1ZXM7IGkrKykge1xuK1x0XHR0ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLVx1MDAzZXRmaWxlc1tpXSk7XG4rXG4rXHRcdHNwaW5fbG9ja19iaChcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuK1x0XHRzcGluX2xvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcbitcdFx0dGZpbGUtXHUwMDNlY29uc19jbnQgPSAwO1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLnByb2R1Y2VyX2xvY2spO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuK1x0fVxuK1xuIFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKGRldik7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMTAwOCw2ICsxMDY0LDcgQEAgc3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqcXVldWU7XG4gXHRzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlO1xuIFx0aW50IGxlbiA9IHNrYi1cdTAwM2VsZW47XG4rXHRpbnQgcmV0O1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0dGZpbGUgPSByY3VfZGVyZWZlcmVuY2UodHVuLVx1MDAzZXRmaWxlc1t0eHFdKTtcbkBAIC0xMDYyLDEzICsxMTE5LDM1IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiBcdG5mX3Jlc2V0X2N0KHNrYik7XG4gXG4tXHRpZiAocHRyX3JpbmdfcHJvZHVjZShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLCBza2IpKSB7XG4rXHRxdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCB0eHEpO1xuK1xuK1x0c3Bpbl9sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XG4rXHRyZXQgPSBfX3B0cl9yaW5nX3Byb2R1Y2UoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZywgc2tiKTtcbitcdC8qIERvIG5vdCB0b3VjaCB0aGUgcXVldWUgc3RhdGUgb2YgYSBkZXZpY2UgdGhhdCBpcyBnb2luZyBkb3duLiAqL1xuK1x0aWYgKCh0dW4tXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9CQUNLUFJFU1NVUkUpIFx1MDAyNlx1MDAyNiBuZXRpZl9ydW5uaW5nKGRldikgXHUwMDI2XHUwMDI2XG4rXHQgICAgIXFkaXNjX3R4cV9oYXNfbm9fcXVldWUocXVldWUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIF9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nKSA9PSAtRU5PU1BDKSB7XG4rXHRcdG5ldGlmX3R4X3N0b3BfcXVldWUocXVldWUpO1xuK1x0XHQvKiBQYWlyZWQgd2l0aCBzbXBfbWIoKSBpbiBfX3R1bl93YWtlX3F1ZXVlKCkgKi9cbitcdFx0c21wX21iX19hZnRlcl9hdG9taWMoKTtcbitcdFx0aWYgKCFfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2UoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZykpXG4rXHRcdFx0bmV0aWZfdHhfd2FrZV9xdWV1ZShxdWV1ZSk7XG4rXHR9XG4rXHRzcGluX3VubG9jayhcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLnByb2R1Y2VyX2xvY2spO1xuK1xuK1x0aWYgKHJldCkge1xuK1x0XHQvKiBUaGlzIHNob3VsZCBiZSBhIHJhcmUgY2FzZSBpZiBJRkZfQkFDS1BSRVNTVVJFIGlzIGVuYWJsZWQgYW5kXG4rXHRcdCAqIGEgcWRpc2MgaXMgcHJlc2VudCwgYnV0IGNhbiBoYXBwZW4gZHVlIHRvIGxsdHguXG4rXHRcdCAqIFNpbmNlIHNrYl90eF90aW1lc3RhbXAoKSwgc2tiX29ycGhhbigpLFxuK1x0XHQgKiBydW5fZWJwZl9maWx0ZXIoKSBhbmQgcHNrYl90cmltKCkgY291bGQgaGF2ZSB0aW5rZXJlZFxuK1x0XHQgKiB3aXRoIHRoZSBTS0IsIHJldHVybmluZyBORVRERVZfVFhfQlVTWSBpcyB1bnNhZmUgYW5kXG4rXHRcdCAqIHdlIG11c3QgZHJvcCBpbnN0ZWFkLlxuK1x0XHQgKi9cbiBcdFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fRlVMTF9SSU5HO1xuIFx0XHRnb3RvIGRyb3A7XG4gXHR9XG4gXG4gXHQvKiBkZXYtXHUwMDNlbGx0eCByZXF1aXJlcyB0byBkbyBvdXIgb3duIHVwZGF0ZSBvZiB0cmFuc19zdGFydCAqL1xuLVx0cXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgdHhxKTtcbiBcdHR4cV90cmFuc19jb25kX3VwZGF0ZShxdWV1ZSk7XG4gXG4gXHQvKiBOb3RpZnkgYW5kIHdha2UgdXAgcmVhZGVyIHByb2Nlc3MgKi9cbkBAIC0yMTE2LDEzICsyMTk1LDYxIEBAIHN0YXRpYyBzc2l6ZV90IHR1bl9wdXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuIFx0cmV0dXJuIHRvdGFsO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgbm9ibG9jaywgaW50ICplcnIpXG4rLyogQ2FsbGVycyBtdXN0IGhvbGQgcmluZy5jb25zdW1lcl9sb2NrICovXG4rc3RhdGljIHZvaWQgX190dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuK1x0XHRcdCAgICAgc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgaW50IGNvbnN1bWVkKVxuK3tcbitcdHUxNiBxdWV1ZV9pbmRleCA9IHRmaWxlLVx1MDAzZXF1ZXVlX2luZGV4O1xuK1x0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuK1xuK1x0aWYgKCEodHVuLVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfQkFDS1BSRVNTVVJFKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LyogQSBzdG9wIGZyb20gdHVuX25ldF9jbG9zZSgpIGlzIG5vdCBiYWNrcHJlc3N1cmUsIGxlYXZlIGl0IGFsb25lLiAqL1xuK1x0aWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKHR1bi1cdTAwM2VkZXYpKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0LyogT25seSB0aGUgY3VycmVudCBvd25lciBvZiB0aGUgc2xvdCBtYXkgd2FrZSBpdHMgc3VicXVldWUuICovXG4rXHRpZiAodW5saWtlbHkocmN1X2FjY2Vzc19wb2ludGVyKHR1bi1cdTAwM2V0ZmlsZXNbcXVldWVfaW5kZXhdKSAhPSB0ZmlsZSkpXG4rXHRcdHJldHVybjtcbitcbitcdHR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUodHVuLVx1MDAzZWRldiwgcXVldWVfaW5kZXgpO1xuK1xuK1x0LyogUGFpcmVkIHdpdGggc21wX21iX19hZnRlcl9hdG9taWMoKSBpbiB0dW5fbmV0X3htaXQoKSAqL1xuK1x0c21wX21iKCk7XG4rXHRpZiAobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpKSB7XG4rXHRcdHRmaWxlLVx1MDAzZWNvbnNfY250ICs9IGNvbnN1bWVkO1xuK1x0XHRpZiAodGZpbGUtXHUwMDNlY29uc19jbnQgXHUwMDNlPSB0ZmlsZS1cdTAwM2V0eF9yaW5nLnNpemUgLyAyIHx8XG4rXHRcdCAgICBfX3B0cl9yaW5nX2VtcHR5KFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcpKSB7XG4rXHRcdFx0bmV0aWZfdHhfd2FrZV9xdWV1ZSh0eHEpO1xuK1x0XHRcdHRmaWxlLVx1MDAzZWNvbnNfY250ID0gMDtcbitcdFx0fVxuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCAqdHVuX3JpbmdfY29uc3VtZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKVxuK3tcbitcdHZvaWQgKnB0cjtcbitcbitcdHNwaW5fbG9jayhcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuK1x0cHRyID0gX19wdHJfcmluZ19jb25zdW1lKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcpO1xuK1x0aWYgKHB0cilcbitcdFx0X190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCAxKTtcbitcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4rXHRyZXR1cm4gcHRyO1xuK31cbitcbitzdGF0aWMgdm9pZCAqdHVuX3JpbmdfcmVjdihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxuK1x0XHRcdCAgIGludCBub2Jsb2NrLCBpbnQgKmVycilcbiB7XG4gXHRERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTtcbiBcdHZvaWQgKnB0ciA9IE5VTEw7XG4gXHRpbnQgZXJyb3IgPSAwO1xuIFxuLVx0cHRyID0gcHRyX3JpbmdfY29uc3VtZShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nKTtcbitcdHB0ciA9IHR1bl9yaW5nX2NvbnN1bWUodHVuLCB0ZmlsZSk7XG4gXHRpZiAocHRyKVxuIFx0XHRnb3RvIG91dDtcbiBcdGlmIChub2Jsb2NrKSB7XG5AQCAtMjEzNCw3ICsyMjYxLDcgQEAgc3RhdGljIHZvaWQgKnR1bl9yaW5nX3JlY3Yoc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgaW50IG5vYmxvY2ssIGludCAqZXJyKVxuIFxuIFx0d2hpbGUgKDEpIHtcbiBcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcbi1cdFx0cHRyID0gcHRyX3JpbmdfY29uc3VtZShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nKTtcbitcdFx0cHRyID0gdHVuX3JpbmdfY29uc3VtZSh0dW4sIHRmaWxlKTtcbiBcdFx0aWYgKHB0cilcbiBcdFx0XHRicmVhaztcbiBcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XG5AQCAtMjE3MSw3ICsyMjk4LDcgQEAgc3RhdGljIHNzaXplX3QgdHVuX2RvX3JlYWQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IHR1bl9maWxlICp0ZmlsZSxcbiBcbiBcdGlmICghcHRyKSB7XG4gXHRcdC8qIFJlYWQgZnJhbWVzIGZyb20gcmluZyAqL1xuLVx0XHRwdHIgPSB0dW5fcmluZ19yZWN2KHRmaWxlLCBub2Jsb2NrLCBcdTAwMjZlcnIpO1xuK1x0XHRwdHIgPSB0dW5fcmluZ19yZWN2KHR1biwgdGZpbGUsIG5vYmxvY2ssIFx1MDAyNmVycik7XG4gXHRcdGlmICghcHRyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHR9XG5AQCAtMjcwMyw4ICsyODMwLDkgQEAgc3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcilcbiB7XG4gXHRzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuO1xuIFx0c3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuK1x0c3RydWN0IHR1bl9maWxlICpudGZpbGU7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuLVx0aW50IGVycjtcbitcdGludCBlcnIsIGk7XG4gXG4gXHRpZiAodGZpbGUtXHUwMDNlZGV0YWNoZWQpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTI4MzMsOCArMjk2MSwxMCBAQCBzdGF0aWMgaW50IHR1bl9zZXRfaWZmKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKVxuIFx0LyogTWFrZSBzdXJlIHBlcnNpc3RlbnQgZGV2aWNlcyBkbyBub3QgZ2V0IHN0dWNrIGluXG4gXHQgKiB4b2ZmIHN0YXRlLlxuIFx0ICovXG4tXHRpZiAobmV0aWZfcnVubmluZyh0dW4tXHUwMDNlZGV2KSlcbi1cdFx0bmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKHR1bi1cdTAwM2VkZXYpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHVuLVx1MDAzZW51bXF1ZXVlczsgaSsrKSB7XG4rXHRcdG50ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLVx1MDAzZXRmaWxlc1tpXSk7XG4rXHRcdHR1bl9mb3JjZV93YWtlX3F1ZXVlKHR1biwgbnRmaWxlKTtcbitcdH1cbiBcbiBcdHN0cnNjcHkoaWZyLVx1MDAzZWlmcl9uYW1lLCB0dW4tXHUwMDNlZGV2LVx1MDAzZW5hbWUpO1xuIFx0cmV0dXJuIDA7XG5AQCAtMzYzMCw2ICszNzYwLDEzIEBAIHN0YXRpYyBpbnQgdHVuX3F1ZXVlX3Jlc2l6ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuKVxuIFx0XHRcdFx0XHQgIGRldi1cdTAwM2V0eF9xdWV1ZV9sZW4sIEdGUF9LRVJORUwsXG4gXHRcdFx0XHRcdCAgdHVuX3B0cl9mcmVlKTtcbiBcbitcdGlmICghcmV0KSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHR1bi1cdTAwM2VudW1xdWV1ZXM7IGkrKykge1xuK1x0XHRcdHRmaWxlID0gcnRubF9kZXJlZmVyZW5jZSh0dW4tXHUwMDNldGZpbGVzW2ldKTtcbitcdFx0XHR0dW5fZm9yY2Vfd2FrZV9xdWV1ZSh0dW4sIHRmaWxlKTtcbitcdFx0fVxuK1x0fVxuK1xuIFx0a2ZyZWUocmluZ3MpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMzczOCw2ICszODc1LDMxIEBAIHN0cnVjdCBwdHJfcmluZyAqdHVuX2dldF90eF9yaW5nKHN0cnVjdCBmaWxlICpmaWxlKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh0dW5fZ2V0X3R4X3JpbmcpO1xuIFxuKy8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqL1xuK3ZvaWQgdHVuX3dha2VfcXVldWUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBjb25zdW1lZClcbit7XG4rXHRzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlO1xuK1x0c3RydWN0IHR1bl9zdHJ1Y3QgKnR1bjtcbitcbitcdGlmIChmaWxlLVx1MDAzZWZfb3AgIT0gXHUwMDI2dHVuX2ZvcHMpXG4rXHRcdHJldHVybjtcbitcbitcdHRmaWxlID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXHRpZiAoIXRmaWxlKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXG4rXHR0dW4gPSByY3VfZGVyZWZlcmVuY2UodGZpbGUtXHUwMDNldHVuKTtcbitcdGlmICh0dW4pXG4rXHRcdF9fdHVuX3dha2VfcXVldWUodHVuLCB0ZmlsZSwgY29uc3VtZWQpO1xuK1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHR1bl93YWtlX3F1ZXVlKTtcbitcbiBtb2R1bGVfaW5pdCh0dW5faW5pdCk7XG4gbW9kdWxlX2V4aXQodHVuX2NsZWFudXApO1xuIE1PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQ1JJUFRJT04pO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvbmV0LmMgYi9kcml2ZXJzL3Zob3N0L25ldC5jXG5pbmRleCA2OTQ5YjcwNDE2NmQ1Li4zZTcyYjljNmFmMGNhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC9uZXQuY1xuKysrIGIvZHJpdmVycy92aG9zdC9uZXQuY1xuQEAgLTE3NiwxMyArMTc2LDIxIEBAIHN0YXRpYyB2b2lkICp2aG9zdF9uZXRfYnVmX2NvbnN1bWUoc3RydWN0IHZob3N0X25ldF9idWYgKnJ4cSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXG4rc3RhdGljIGludCB2aG9zdF9uZXRfYnVmX3Byb2R1Y2Uoc3RydWN0IHNvY2sgKnNrLFxuK1x0XHRcdFx0IHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXG4ge1xuK1x0c3RydWN0IGZpbGUgKmZpbGUgPSBzay1cdTAwM2Vza19zb2NrZXQtXHUwMDNlZmlsZTtcbiBcdHN0cnVjdCB2aG9zdF9uZXRfYnVmICpyeHEgPSBcdTAwMjZudnEtXHUwMDNlcnhxO1xuIFxuIFx0cnhxLVx1MDAzZWhlYWQgPSAwO1xuLVx0cnhxLVx1MDAzZXRhaWwgPSBwdHJfcmluZ19jb25zdW1lX2JhdGNoZWQobnZxLVx1MDAzZXJ4X3JpbmcsIHJ4cS1cdTAwM2VxdWV1ZSxcbi1cdFx0XHRcdFx0ICAgICAgVkhPU1RfTkVUX0JBVENIKTtcbitcdHNwaW5fbG9jayhcdTAwMjZudnEtXHUwMDNlcnhfcmluZy1cdTAwM2Vjb25zdW1lcl9sb2NrKTtcbitcdHJ4cS1cdTAwM2V0YWlsID0gX19wdHJfcmluZ19jb25zdW1lX2JhdGNoZWQobnZxLVx1MDAzZXJ4X3JpbmcsIHJ4cS1cdTAwM2VxdWV1ZSxcbitcdFx0XHRcdFx0ICAgICAgIFZIT1NUX05FVF9CQVRDSCk7XG4rXG4rXHRpZiAocnhxLVx1MDAzZXRhaWwpXG4rXHRcdHR1bl93YWtlX3F1ZXVlKGZpbGUsIHJ4cS1cdTAwM2V0YWlsKTtcbitcbitcdHNwaW5fdW5sb2NrKFx1MDAyNm52cS1cdTAwM2VyeF9yaW5nLVx1MDAzZWNvbnN1bWVyX2xvY2spO1xuIFx0cmV0dXJuIHJ4cS1cdTAwM2V0YWlsO1xuIH1cbiBcbkBAIC0yMDksMTQgKzIxNywxNSBAQCBzdGF0aWMgaW50IHZob3N0X25ldF9idWZfcGVla19sZW4odm9pZCAqcHRyKVxuIFx0cmV0dXJuIF9fc2tiX2FycmF5X2xlbl93aXRoX3RhZyhwdHIpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHZob3N0X25ldF9idWZfcGVlayhzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqbnZxKVxuK3N0YXRpYyBpbnQgdmhvc3RfbmV0X2J1Zl9wZWVrKHN0cnVjdCBzb2NrICpzayxcbitcdFx0XHQgICAgICBzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqbnZxKVxuIHtcbiBcdHN0cnVjdCB2aG9zdF9uZXRfYnVmICpyeHEgPSBcdTAwMjZudnEtXHUwMDNlcnhxO1xuIFxuIFx0aWYgKCF2aG9zdF9uZXRfYnVmX2lzX2VtcHR5KHJ4cSkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0aWYgKCF2aG9zdF9uZXRfYnVmX3Byb2R1Y2UobnZxKSlcbitcdGlmICghdmhvc3RfbmV0X2J1Zl9wcm9kdWNlKHNrLCBudnEpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBvdXQ6XG5AQCAtMTAwNCw3ICsxMDEzLDcgQEAgc3RhdGljIGludCBwZWVrX2hlYWRfbGVuKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpydnEsIHN0cnVjdCBzb2NrICpzaylcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRpZiAocnZxLVx1MDAzZXJ4X3JpbmcpXG4tXHRcdHJldHVybiB2aG9zdF9uZXRfYnVmX3BlZWsocnZxKTtcbitcdFx0cmV0dXJuIHZob3N0X25ldF9idWZfcGVlayhzaywgcnZxKTtcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jaywgZmxhZ3MpO1xuIFx0aGVhZCA9IHNrYl9wZWVrKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfdHVuLmggYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oXG5pbmRleCA4MDE2NmViNjJmNDFjLi5lZWI5ZWQzYzVhMjM5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pZl90dW4uaFxuKysrIGIvaW5jbHVkZS9saW51eC9pZl90dW4uaFxuQEAgLTIyLDYgKzIyLDggQEAgc3RydWN0IHR1bl9tc2dfY3RsIHtcbiAjaWYgZGVmaW5lZChDT05GSUdfVFVOKSB8fCBkZWZpbmVkKENPTkZJR19UVU5fTU9EVUxFKVxuIHN0cnVjdCBzb2NrZXQgKnR1bl9nZXRfc29ja2V0KHN0cnVjdCBmaWxlICopO1xuIHN0cnVjdCBwdHJfcmluZyAqdHVuX2dldF90eF9yaW5nKHN0cnVjdCBmaWxlICpmaWxlKTtcbisvKiBDYWxsZXJzIG11c3QgaG9sZCB0aGUgY29uc3VtZXJfbG9jayBvZiB0aGUgcmluZyBvZiBmaWxlICovXG4rdm9pZCB0dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNvbnN1bWVkKTtcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgdHVuX2lzX3hkcF9mcmFtZSh2b2lkICpwdHIpXG4ge1xuQEAgLTU1LDYgKzU3LDggQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcHRyX3JpbmcgKnR1bl9nZXRfdHhfcmluZyhzdHJ1Y3QgZmlsZSAqZilcbiBcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgdHVuX3dha2VfcXVldWUoc3RydWN0IGZpbGUgKmYsIGludCBjb25zdW1lZCkge31cbitcbiBzdGF0aWMgaW5saW5lIGJvb2wgdHVuX2lzX3hkcF9mcmFtZSh2b2lkICpwdHIpXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaCBiL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaFxuaW5kZXggZDJjMzYyOWJiZTQ1MS4uNjMxYzQzZmRlNDQwNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcHRyX3JpbmcuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wdHJfcmluZy5oXG5AQCAtOTYsNiArOTYsMjYgQEAgc3RhdGljIGlubGluZSBib29sIHB0cl9yaW5nX2Z1bGxfYmgoc3RydWN0IHB0cl9yaW5nICpyKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLyogUmVwb3J0IHdoZXRoZXIgdGhlIG5leHQgX19wdHJfcmluZ19wcm9kdWNlKCkgaGFzIHJvb20gZm9yIG9uZSBlbnRyeTpcbisgKiAwIG1lYW5zIHRoZSBzaW5nbGUgc2xvdCBhdCByLVx1MDAzZXF1ZXVlW3ItXHUwMDNlcHJvZHVjZXJdIGlzIGZyZWUsIC1FTk9TUEMgbWVhbnNcbisgKiB0aGUgcmluZyBpcyBmdWxsLCB3aGljaCBpcyB0cmFuc2llbnQsIGFuZCAtRUlOVkFMIG1lYW5zIHItXHUwMDNlc2l6ZSBpcyAwLFxuKyAqIHdoaWNoIGlzIHBlcm1hbmVudC4gQSBjYWxsZXIgdGhhdCBzdG9wcyBwcm9kdWNpbmcgYW5kIHdhaXRzIGZvciBzcGFjZVxuKyAqIG11c3QgdGhlcmVmb3JlIGRvIHNvIG9ubHkgZm9yIC1FTk9TUEMuXG4rICpcbisgKiBOb3RlOiBjYWxsZXJzIGludm9raW5nIHRoaXMgaW4gYSBsb29wIG11c3QgdXNlIGEgY29tcGlsZXIgYmFycmllcixcbisgKiBmb3IgZXhhbXBsZSBjcHVfcmVsYXgoKS4gQ2FsbGVycyBtdXN0IGhvbGQgcHJvZHVjZXJfbG9jay5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2Uoc3RydWN0IHB0cl9yaW5nICpyKVxuK3tcbitcdGlmICh1bmxpa2VseSghci1cdTAwM2VzaXplKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoZGF0YV9yYWNlKHItXHUwMDNlcXVldWVbci1cdTAwM2Vwcm9kdWNlcl0pKVxuK1x0XHRyZXR1cm4gLUVOT1NQQztcbitcbitcdHJldHVybiAwO1xuK31cbitcbiAvKiBOb3RlOiBjYWxsZXJzIGludm9raW5nIHRoaXMgaW4gYSBsb29wIG11c3QgdXNlIGEgY29tcGlsZXIgYmFycmllcixcbiAgKiBmb3IgZXhhbXBsZSBjcHVfcmVsYXgoKS4gQ2FsbGVycyBtdXN0IGhvbGQgcHJvZHVjZXJfbG9jay5cbiAgKiBDYWxsZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgcG9pbnRlciB0aGF0IGlzIGJlaW5nIHF1ZXVlZFxuQEAgLTEwMyw4ICsxMjMsMTAgQEAgc3RhdGljIGlubGluZSBib29sIHB0cl9yaW5nX2Z1bGxfYmgoc3RydWN0IHB0cl9yaW5nICpyKVxuICAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IF9fcHRyX3JpbmdfcHJvZHVjZShzdHJ1Y3QgcHRyX3JpbmcgKnIsIHZvaWQgKnB0cilcbiB7XG4tXHRpZiAodW5saWtlbHkoIXItXHUwMDNlc2l6ZSkgfHwgZGF0YV9yYWNlKHItXHUwMDNlcXVldWVbci1cdTAwM2Vwcm9kdWNlcl0pKVxuLVx0XHRyZXR1cm4gLUVOT1NQQztcbitcdGludCByZXQgPSBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2Uocik7XG4rXG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0LyogTWFrZSBzdXJlIHRoZSBwb2ludGVyIHdlIGFyZSBzdG9yaW5nIHBvaW50cyB0byBhIHZhbGlkIGRhdGEuICovXG4gXHQvKiBQYWlycyB3aXRoIHRoZSBkZXBlbmRlbmN5IG9yZGVyaW5nIGluIF9fcHRyX3JpbmdfY29uc3VtZS4gKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcbmluZGV4IDc5ZDUzYzdhMWViZGMuLmEwZGRjNTBhNzUzNDIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxuQEAgLTY5LDYgKzY5LDEwIEBAXG4gI2RlZmluZSBJRkZfTkFQSV9GUkFHU1x0MHgwMDIwXG4gLyogVXNlZCBpbiBUVU5TRVRJRkYgdG8gYnJpbmcgdXAgdHVuL3RhcCB3aXRob3V0IGNhcnJpZXIgKi9cbiAjZGVmaW5lIElGRl9OT19DQVJSSUVSXHQweDAwNDBcbisvKiBTdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHdoZW4gdGhlIGludGVybmFsIHJpbmcgaXMgZnVsbCwgc28gYW5cbisgKiBhdHRhY2hlZCBxZGlzYyBhcHBsaWVzIGJhY2twcmVzc3VyZSBpbnN0ZWFkIG9mIGJlaW5nIGJ5cGFzc2VkLlxuKyAqL1xuKyNkZWZpbmUgSUZGX0JBQ0tQUkVTU1VSRVx0MHgwMDgwXG4gI2RlZmluZSBJRkZfTk9fUElcdDB4MTAwMFxuIC8qIFRoaXMgZmxhZyBoYXMgbm8gcmVhbCBlZmZlY3QgKi9cbiAjZGVmaW5lIElGRl9PTkVfUVVFVUVcdDB4MjAwMFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxuaW5kZXggMmVjMDdkZTFkNzNiZS4uMmM4NTUyNTcwNGMxNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxuKysrIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXG5AQCAtNjcsNiArNjcsMTAgQEBcbiAjZGVmaW5lIElGRl9UQVBcdFx0MHgwMDAyXG4gI2RlZmluZSBJRkZfTkFQSVx0MHgwMDEwXG4gI2RlZmluZSBJRkZfTkFQSV9GUkFHU1x0MHgwMDIwXG4rLyogU3RvcCB0aGUgcXVldWUgaW5zdGVhZCBvZiBkcm9wcGluZyB3aGVuIHRoZSBpbnRlcm5hbCByaW5nIGlzIGZ1bGwsIHNvIGFuXG4rICogYXR0YWNoZWQgcWRpc2MgYXBwbGllcyBiYWNrcHJlc3N1cmUgaW5zdGVhZCBvZiBiZWluZyBieXBhc3NlZC5cbisgKi9cbisjZGVmaW5lIElGRl9CQUNLUFJFU1NVUkVcdDB4MDA4MFxuICNkZWZpbmUgSUZGX05PX1BJXHQweDEwMDBcbiAvKiBUaGlzIGZsYWcgaGFzIG5vIHJlYWwgZWZmZWN0ICovXG4gI2RlZmluZSBJRkZfT05FX1FVRVVFXHQweDIwMDBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjA1OjQ3LjU4MTUxOTcyNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMzU3MjQwOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJRkZfQkFDS1BSRVNTVVJFIFBhdGNoIGZvciBUVU4vVEFQIERldmljZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGludHJvZHVjaW5nIGBJRkZfQkFDS1BSRVNTVVJFYCBmb3IgVFVOL1RBUCBkZXZpY2VzLiBUaGlzIGlzIGEgcHJldHR5IGludGVyZXN0aW5nIGFkZGl0aW9uOyBpdCdzIGRlc2lnbmVkIHRvIHByZXZlbnQgcGFja2V0IGRyb3BzIHdoZW4gdGhlIHJpbmcgYnVmZmVyIGlzIGZ1bGwgYnkgYWxsb3dpbmcgdGhlIGtlcm5lbCB0byAqc3RvcCogdGhlIHF1ZXVlIGluc3RlYWQuIFRoYXQgZW5hYmxlcyBhbiBhdHRhY2hlZCBxZGlzYyB0byBhcHBseSBiYWNrcHJlc3N1cmUg4oCTIHZlcnkgY2xldmVyLlxuXG5UaGUgY2hhbmdlcyBhcmUgc3ByZWFkIGFjcm9zcyBzZXZlcmFsIGZpbGVzLCBzbyBsZXQncyBicmVhayBpdCBkb3duOiBgZHJpdmVycy9uZXQvdHVuLmNgLCBgZHJpdmVycy92aG9zdC9uZXQuY2AsIHRoZSBpbmNsdWRlcyBgaWZfdHVuLmhgLCBgcHRyX3JpbmcuaGAsIGFuZCB0aGUgVUFQSSBoZWFkZXIgYGlmX3R1bi5oYC5cblxuRGl2aW5nIGludG8gYGRyaXZlcnMvbmV0L3R1bi5jYCwgSSBzZWUgYSBmZXcga2V5IGFkZGl0aW9ucyBhbmQgbW9kaWZpY2F0aW9uczogYHR1bl9mb3JjZV93YWtlX3F1ZXVlYCBpcyBuZXcsIGEgbW9kaWZpY2F0aW9uIHRvIGB0dW5fbmV0X2Nsb3NlYCB0byBjbGVhciBgY29uc19jbnRgLiBUaGUgcmVhbCBtZWF0IGlzIGluIGB0dW5fbmV0X3htaXRgOyBpdCdzIG5vdyBjaGVja2luZyBmb3IgYElGRl9CQUNLUFJFU1NVUkVgIGFuZCBzdG9wcGluZyB0aGUgcXVldWUgd2hlbiB0aGUgcmluZyBpcyBmdWxsIOKAkyBleGFjdGx5IGFzIGV4cGVjdGVkLiBXZSBhbHNvIGhhdmUgYF9fdHVuX3dha2VfcXVldWVgIHRvIHdha2UgdXAgdGhlIHF1ZXVlIHdoZW4gaXRlbXMgYXJlIGNvbnN1bWVkIGZyb20gdGhlIHJpbmcsIGB0dW5fcmluZ19jb25zdW1lYCAod2hpY2ggbG9va3MgbGlrZSBhIG5ldyByaW5nIGJ1ZmZlciBmdW5jdGlvbiksIGB0dW5fcmluZ19yZWN2YCBtb2RpZmllZCB0byB1c2UgYHR1bl9yaW5nX2NvbnN1bWVgLCBhbmQgdGhlIGB0dW5fd2FrZV9xdWV1ZWAgaXMgbm93IGV4cG9ydGVkIGZvciB2aG9zdC4gVGhpcyBsb29rcyBzb2xpZCBpbiB0ZXJtcyBvZiBmdW5jdGlvbmFsaXR5LlxuXG5UaGVuLCBpbiBgZHJpdmVycy92aG9zdC9uZXQuY2AsIGB2aG9zdF9uZXRfYnVmX3Byb2R1Y2VgIGlzIGJlaW5nIG1vZGlmaWVkIHRvIGNhbGwgYHR1bl93YWtlX3F1ZXVlYCB3aGVuIGl0ZW1zIGFyZSBjb25zdW1lZC4gVGhpcyBpbnRlZ3JhdGVzIHRoZSB2aG9zdCBzaWRlIG5pY2VseSwgZW5zdXJpbmcgcHJvcGVyIHF1ZXVlIHdha2luZyBpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhdCB0aGUgY29yZSBsZXZlbCBvZiB0aGUgbmV0d29ya2luZyBzdGFjayBhbmQgcGFydGljdWxhcmx5IGltcGFjdHMgVFVOL1RBUCwgd2hpY2ggYXJlIHdpZGVseSB1c2VkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIEdpdmVuIGl0cyByZWFjaCwgZnV6emluZyBpcyBhbiBhYnNvbHV0ZSBtdXN0LWRvIGZvciB0aGlzLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgQ09ORklHIG9wdGlvbnMuIE9idmlvdXNseSwgYENPTkZJR19UVU5gIGlzIHRoZSBwcmltYXJ5IG9uZS4gQW5kIHNpbmNlIGl0J3Mgdmhvc3QtYXdhcmUsIGBDT05GSUdfVkhPU1RfTkVUYCBpcyBjcml0aWNhbCwgdG9vLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGVpciBsb2NhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSwgc28gSSdsbCBjaGVjayBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZm9yIHRoZSBgVFVOYCBzZXR0aW5nIGFuZCBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBmb3IgYFZIT1NUX05FVGAuIEdvdHRhIG1ha2Ugc3VyZSBhbGwgYmFzZXMgYXJlIGNvdmVyZWQgZnJvbSBhIGJ1aWxkIHBlcnNwZWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTY5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MDU6NTQuOTE3MjQ3ODg1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxOTkzMzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUVU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTM4Nj1jb25maWcgUklPTkVUX1JYX1NJWkVcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzkwLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzkxOmNvbmZpZyBUVU5cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM5Mi1cXHR0cmlzdGF0ZSBcXFwiVW5pdmVyc2FsIFRVTi9UQVAgZGV2aWNlIGRyaXZlciBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz00MTU9Y29uZmlnIFRBUFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MjAtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0MjE6Y29uZmlnIFRVTl9WTkVUX0NST1NTX0xFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MjItXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgY3Jvc3MtZW5kaWFuIHZuZXQgaGVhZGVycyBvbiBsaXR0bGUtZW5kaWFuIGtlcm5lbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjA1OjU0Ljk5OTI0NTg1N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDAzNTYzNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIFZIT1NUX05FVCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhhdCdzIGFsbW9zdCBhbHdheXMgdGhlIGZpcnN0IHBsYWNlIEknZCBsb29rIHdoZW4gZGVhbGluZyB3aXRoIGFueXRoaW5nIHJlbGF0ZWQgdG8gdmhvc3QsIGVzcGVjaWFsbHkgd2hlbiBpdCBjb25jZXJucyBuZXR3b3JraW5nLiBJIGtub3cgdGhhdCdzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHZob3N0IGZyYW1ld29yayBhcmUgZGVmaW5lZCwgYW5kIGBWSE9TVF9ORVRgIGlzIHRoZSBtb3N0IGxpa2VseSBjYW5kaWRhdGUgZm9yIHRoZSBzcGVjaWZpYyBuZXR3b3JraW5nIGFzcGVjdCBJJ20gZm9jdXNlZCBvbi4gSSdtIGFzc3VtaW5nIHRoYXQgYnkgY2hlY2tpbmcgYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2AgSSB3aWxsIHVuZGVyc3RhbmQgaWYgdGhhdCdzIGVuYWJsZWQgYW5kIGhvdyB0byBjb25maWd1cmUgdGhhdCBwb3J0aW9uIG9mIHRoZSB2aXJ0dWFsIGhvc3QgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzM2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MDU6NTguMjM5NjA0ODY4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNTY2ODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWSE9TVF9ORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZz0zMj1pZiBWSE9TVF9NRU5VXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTMzLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzozNDpjb25maWcgVkhPU1RfTkVUXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTM1LVxcdHRyaXN0YXRlIFxcXCJIb3N0IGtlcm5lbCBhY2NlbGVyYXRvciBmb3IgdmlydGlvIG5ldFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MDU6NTguMzAxMTc2ODUyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkxMDE1MDgwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRhaWxvcmVkIGFzIGlmIEknbSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBWSE9TVF9ORVQgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBWSE9TVF9ORVRgIHRoaW5nIGEgYml0IGJldHRlci4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIGlmIGl0IHJlbGllcyBvbiBhbnl0aGluZyBzcGVjaWZpYyDigJMgYW55IG90aGVyIGtlcm5lbCBtb2R1bGVzLCBmZWF0dXJlcywgb3IgY29uZmlndXJhdGlvbnMgdGhhdCAqbXVzdCogYmUgaW4gcGxhY2UgZm9yIGl0IHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBvYnZpb3VzIGRlcGVuZGVuY2llcy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvbm5lY3Rpb25zIGFyZS4gVGhpcyBpcyB0aGUgYmVzdCBhcHByb2FjaCB0byBnYWluIGEgc29saWQgZ3Jhc3Agb2YgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDAzNCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjA2OjAxLjIxMTMzMDg5M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTU3NDkyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWc9MzQ9Y29uZmlnIFZIT1NUX05FVFxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy0zNS1cXHR0cmlzdGF0ZSBcXFwiSG9zdCBrZXJuZWwgYWNjZWxlcmF0b3IgZm9yIHZpcnRpbyBuZXRcXFwiXFxuZHJpdmVycy92aG9zdC9LY29uZmlnOjM2OlxcdGRlcGVuZHMgb24gTkVUIFxcdTAwMjZcXHUwMDI2IEVWRU5URkQgXFx1MDAyNlxcdTAwMjYgKFRVTiB8fCAhVFVOKSBcXHUwMDI2XFx1MDAyNiAoVEFQIHx8ICFUQVApXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTM3LVxcdHNlbGVjdCBWSE9TVFxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnPTQ2PWNvbmZpZyBWSE9TVF9TQ1NJXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTQ3LVxcdHRyaXN0YXRlIFxcXCJWSE9TVF9TQ1NJIFRDTSBmYWJyaWMgZHJpdmVyXFxcIlxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo0ODpcXHRkZXBlbmRzIG9uIFRBUkdFVF9DT1JFIFxcdTAwMjZcXHUwMDI2IEVWRU5URkRcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNDktXFx0c2VsZWN0IFZIT1NUXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9NTY9Y29uZmlnIFZIT1NUX1ZTT0NLXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTU3LVxcdHRyaXN0YXRlIFxcXCJ2aG9zdCB2aXJ0aW8tdnNvY2sgZHJpdmVyXFxcIlxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo1ODpcXHRkZXBlbmRzIG9uIFZTT0NLRVRTIFxcdTAwMjZcXHUwMDI2IEVWRU5URkRcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTktXFx0c2VsZWN0IFZIT1NUXFxuLS1cXG5kcml2ZXJzL3Zob3N0L0tjb25maWc9NzA9Y29uZmlnIFZIT1NUX1ZEUEFcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNzEtXFx0dHJpc3RhdGUgXFxcIlZob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXFxcIlxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo3MjpcXHRkZXBlbmRzIG9uIEVWRU5URkRcXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNzMtXFx0c2VsZWN0IFZIT1NUXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTc0LVxcdHNlbGVjdCBJUlFfQllQQVNTX01BTkFHRVJcXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NzU6XFx0ZGVwZW5kcyBvbiBWRFBBXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTc2LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MDY6MDEuMjk2OTExNjQ1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAyNzEyNzg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFuYWx5c2lzIG9mIFRVTiBhbmQgVkhPU1RfTkVUKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGBUVU5gIGFuZCBgVkhPU1RfTkVUYCBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVyZS4gTGV0J3MgZ2V0IHJpZ2h0IHRvIHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIsIHRoZSBrZXkgc3ltYm9scy4gSSdtIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGVzZSBmdW5jdGlvbnMgd2l0aGluIGBkcml2ZXJzL25ldC90dW4uY2A6XG5cbiogICBgdHVuX25ldF94bWl0YCAtIFRoaXMgaXMgY2xlYXJseSBpbXBvcnRhbnQgZm9yIHRyYW5zbWlzc2lvbi5cbiogICBgdHVuX3NldF9pZmZgIC0gRGVmaW5pdGVseSBhIGNyaXRpY2FsIG9uZSBmb3IgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24uXG4qICAgYHR1bl93YWtlX3F1ZXVlYCAtIFRoaXMgaXMgYWx3YXlzIGFuIGludGVyZXN0aW5nIG9uZSByZWxhdGVkIHRvIHF1ZXVlIG1hbmFnZW1lbnQuXG4qICAgYHR1bl9yaW5nX3JlY3ZgIC0gU2VlbXMgdG8gYmUgc3RhdGljLCBidXQgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgb24gaG93IGl0J3MgdXNlZCB3aXRoaW4gdGhlIGZpbGUsIGxpa2VseSB0aHJvdWdoIGB0dW5fZG9fcmVhZGAgb3IgYHR1bl9jaHJfcmVhZF9pdGVyYC5cbiogICBgdHVuX25ldF9jbG9zZWAgLSBNdXN0IGJlIGltcG9ydGFudCBmb3IgY2xlYW51cFxuKiAgIGB0dW5fcXVldWVfcmVzaXplYCAtIEFsd2F5cyBpbXBvcnRhbnQgdG8ga25vdyBob3cgdG8gbWFuYWdlIHRoZSBxdWV1ZSBzaXplXG4qICAgYHR1bl9kZXRhY2hfYWxsYCAtIFBvc3NpYmx5IGltcG9ydGFudCwgd29ydGggYSBsb29rLlxuKiAgIGB0dW5fYXR0YWNoYCAtIGFsc28gYSBzdGF0aWMgZnVuY3Rpb24gY2FsbGVkIGJ5IGB0dW5fc2V0X2lmZmAuXG5cbk5vdywgSSdtIGdvaW5nIHRvIGRvdWJsZSBjaGVjayBgZHJpdmVycy9uZXQvdHVuLmNgIGZvciBob3cgYHR1bl9yaW5nX3JlY3ZgIGFuZCBgdHVuX3dha2VfcXVldWVgIGFyZSB1c2VkOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBjb250ZXh0IHRvIGRldGVybWluZSB0aGVpciB0cnVlIHNpZ25pZmljYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MTQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MDY6MDYuMzI0MDQzNzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MjY0ODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR1bl93YWtlX3F1ZXVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTEwNTk9c3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTEzMC1cXHRcXHRuZXRpZl90eF9zdG9wX3F1ZXVlKHF1ZXVlKTtcXG5kcml2ZXJzL25ldC90dW4uYzoxMTMxOlxcdFxcdC8qIFBhaXJlZCB3aXRoIHNtcF9tYigpIGluIF9fdHVuX3dha2VfcXVldWUoKSAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jLTExMzItXFx0XFx0c21wX21iX19hZnRlcl9hdG9taWMoKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTIxMTQ9c3RhdGljIHNzaXplX3QgdHVuX3B1dF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yMTk4LS8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjIxOTk6c3RhdGljIHZvaWQgX190dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTIyMDAtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgY29uc3VtZWQpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0yMjMyPXN0YXRpYyB2b2lkICp0dW5fcmluZ19jb25zdW1lKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yMjM4LVxcdGlmIChwdHIpXFxuZHJpdmVycy9uZXQvdHVuLmM6MjIzOTpcXHRcXHRfX3R1bl93YWtlX3F1ZXVlKHR1biwgdGZpbGUsIDEpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTIyNDAtXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0zODc2PUVYUE9SVF9TWU1CT0xfR1BMKHR1bl9nZXRfdHhfcmluZyk7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zODc4LS8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjM4Nzk6dm9pZCB0dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNvbnN1bWVkKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM4ODAte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzg5Ni1cXHRpZiAodHVuKVxcbmRyaXZlcnMvbmV0L3R1bi5jOjM4OTc6XFx0XFx0X190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCBjb25zdW1lZCk7XFxuZHJpdmVycy9uZXQvdHVuLmMtMzg5OC1cXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM5MDAtfVxcbmRyaXZlcnMvbmV0L3R1bi5jOjM5MDE6RVhQT1JUX1NZTUJPTF9HUEwodHVuX3dha2VfcXVldWUpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTM5MDItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjA2OjA2LjQwMDMxMzczM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjY2NTIyOTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVFVOL1ZIT1NUIE5ldHdvcmsgSW50ZXJmYWNlIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIFRVTi9WSE9TVCBuZXR3b3JraW5nIGNvZGUgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGludGVyYWN0aW9uIHBvaW50cy4gSSBzZWUgdGhhdCBgdHVuX3dha2VfcXVldWVgIGlzIGV4cG9ydGVkLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHNpZ25hbGluZyBkYXRhIGF2YWlsYWJpbGl0eS4gVGhlbiB3ZSBoYXZlIGB0dW5fbmV0X3htaXRgLCB3aGljaCBpcyB0aGUgbmV0ZGV2IHRyYW5zbWl0IGZ1bmN0aW9uIOKAkyB0aGF0J3MgdGhlIGNvcmUgb2YgaG93IHBhY2tldHMgZ2V0IHNlbnQgb3V0LiBgdHVuX3NldF9pZmZgIGhhbmRsZXMgdGhlIGlvY3RscywgdGhhdCBtYWtlcyBzZW5zZS4gQW5kIGB0dW5fcXVldWVfcmVzaXplYCBpcywgb2YgY291cnNlLCB0aGUgZnVuY3Rpb24gdG8gaGFuZGxlIHF1ZXVlIHNpemUgY2hhbmdlcyBhbmQgaXMgY2FsbGVkIGVpdGhlciBieSBgdHVuX2Nocl9pb2N0bGAgb3IgYHR1bl9uZXRfY2hhbmdlX210dWAuXG5cbk5vdywgdGhpbmdzIGdldCBhIGJpdCBtb3JlIGludHJpY2F0ZSB3aXRoIHRoZSBWSE9TVCBzaWRlLiBJIHNlZSBgdmhvc3RfbmV0X2J1Zl9wcm9kdWNlYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBidXQgaXQgZ2V0cyBjYWxsZWQgZnJvbSBgdmhvc3RfbmV0X2J1Zl9wZWVrYC4gVGhhdCBmdW5jdGlvbiBnZXRzIGNhbGxlZCBmcm9tIGBwZWVrX2hlYWRfbGVuYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgZWl0aGVyIGB2aG9zdF9uZXRfcnhfcGVla19oZWFkX2xlbmAgb3IsIG1vcmUgaW1wb3J0YW50bHksIGBoYW5kbGVfcnhgLiBTbywgYGhhbmRsZV9yeGAgYW5kIGB2aG9zdF9uZXRfcnhfcGVla19oZWFkX2xlbmAgbGlrZWx5IGRvIGEgbG90IG9mIHRoZSBoZWF2eSBsaWZ0aW5nLiBUaW1lIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYGRyaXZlcnMvdmhvc3QvbmV0LmNgIGZpbGUgYW5kIHVuZGVyc3RhbmQgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTcyNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjowNjoxMS4wNjY4NDE5MTFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzEyMTMzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF9uZXRfYnVmX3Byb2R1Y2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9uZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L25ldC5jPTE3Mj1zdGF0aWMgdm9pZCAqdmhvc3RfbmV0X2J1Zl9jb25zdW1lKHN0cnVjdCB2aG9zdF9uZXRfYnVmICpyeHEpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE3OC1cXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE3OTpzdGF0aWMgaW50IHZob3N0X25ldF9idWZfcHJvZHVjZShzdHJ1Y3Qgc29jayAqc2ssXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODAtXFx0XFx0XFx0XFx0IHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpudnEpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jPTIyMD1zdGF0aWMgaW50IHZob3N0X25ldF9idWZfcGVlayhzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTIyNy1cXG5kcml2ZXJzL3Zob3N0L25ldC5jOjIyODpcXHRpZiAoIXZob3N0X25ldF9idWZfcHJvZHVjZShzaywgbnZxKSlcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTIyOS1cXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MDY6MTEuMTgzOTY4OThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2Nzc1MTgwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBEYXRhIEZsb3c6IHZob3N0X25ldF9idWZfcGVlayB0byBoYW5kbGVfcngqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IG1pbmQgaXMgdHJhY2luZyBhIHNwZWNpZmljIHBhdGggd2l0aGluIHRoZSB2aG9zdC1uZXQgZHJpdmVyLCBhbmQgaGVyZSdzIHdoYXQgSSdtIHNlZWluZy4gYHZob3N0X25ldF9idWZfcGVla2AgaXMgdGhlIGtleSBmdW5jdGlvbiBJJ20gZm9jdXNpbmcgb24gcmlnaHQgbm93LiBJdCdzIGRpcmVjdGx5IGludm9rZWQgYnkgYHBlZWtfaGVhZF9sZW5gLCB3aGljaCBpbiB0dXJuLCBpcyBhIGNhbGxlZCBieSBgaGFuZGxlX3J4YC4gVGhpcyBpcyBjbGVhcmx5IHRoZSBkYXRhIHBhdGggSSBuZWVkIHRvIGJlIGNvbmNlcm5lZCB3aXRoLlxuXG5JJ20gZXNzZW50aWFsbHkgdHJhY2tpbmcgZGF0YSB0aHJvdWdoIHRoZSBuZXR3b3JrIHN0YWNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgbXVjaCBkYXRhIGlzIGF2YWlsYWJsZSwgd2hlcmUgaXMgaXQsIGFuZCB3aGF0IGFyZSB0aGUgc3RlcHMgdG8gYWN0dWFsbHkgZ2V0IGl0IHRocm91Z2ggdG8gdGhlIHVzZXIuIGB2aG9zdF9uZXRfYnVmX3BlZWtgIGlzLCBvYnZpb3VzbHksIHRhc2tlZCB3aXRoIGdldHRpbmcgYSBsb29rIGF0IHRoZSBkYXRhIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlci4gYHBlZWtfaGVhZF9sZW5gIHRoZW4gYXBwZWFycyB0byBiZSB1c2luZyB0aGF0IHBlZWsgdG8gd29yayBvdXQgaG93IG11Y2ggaXMgYXQgdGhlIGhlYWQgb2YgdGhlIGJ1ZmZlci4gRmluYWxseSwgYGhhbmRsZV9yeGAuLi4gdGhhdCdzIHdoZXJlIHRoZSBkYXRhIGlzIHVsdGltYXRlbHkgcHJvY2Vzc2VkLiBJdCBzZWVtcyBsaWtlIGl0J3MgdGhlIHBvaW50IHdoZXJlIHRoZSBhY3R1YWwgcmVjZWl2ZSBoYW5kbGluZyBpcyBwZXJmb3JtZWQuIFNvLCBJIHNlZSB0aGlzIGFzIHRoZSBtYWluIFwiZGF0YSByZXRyaWV2YWwgYW5kIHByb2Nlc3NpbmdcIiB0aHJlYWQuIFRoaXMgYWxzbyBpbXBsaWVzIHRoYXQgSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2hlbiBtb2RpZnlpbmcgdGhlIGluaXRpYWwgcGVla2luZyBhcyBpdCBhZmZlY3RzIHRoZSBkYXRhIHRyYW5zZmVyIGFsbCB0aGUgd2F5IHRvIGl0cyBkZXN0aW5hdGlvbi4gVGhpcyBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIG15IGN1cnJlbnQgZGVidWdnaW5nIHRhc2suIE5vdyBJIGp1c3QgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gZWFjaCBmdW5jdGlvbiBhbmQgc2VlIHdoZXJlIHRoZSBrZXkgaW50ZXJhY3Rpb25zLCBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFuZCBhbnkgcG9zc2libGUgZXJyb3JzIGxpZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MzEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjowNjoxNC44NTE3MjU4MDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzODU5Njk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBlZWtfaGVhZF9sZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9uZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L25ldC5jPTk4Mz1zdGF0aWMgdm9pZCBoYW5kbGVfdHgoc3RydWN0IHZob3N0X25ldCAqbmV0KVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDA4LVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTAwOTpzdGF0aWMgaW50IHBlZWtfaGVhZF9sZW4oc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKnJ2cSwgc3RydWN0IHNvY2sgKnNrKVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTAxMC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEwMjktXFxuZHJpdmVycy92aG9zdC9uZXQuYzoxMDMwOnN0YXRpYyBpbnQgdmhvc3RfbmV0X3J4X3BlZWtfaGVhZF9sZW4oc3RydWN0IHZob3N0X25ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDMxLVxcdFxcdFxcdFxcdCAgICAgIGJvb2wgKmJ1c3lsb29wX2ludHIsIHVuc2lnbmVkIGludCAqY291bnQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEwMzYtXFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdHZxID0gXFx1MDAyNnRudnEtXFx1MDAzZXZxO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTAzNzpcXHRpbnQgbGVuID0gcGVla19oZWFkX2xlbihybnZxLCBzayk7XFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDM4LVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMDQ1LVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTA0NjpcXHRcXHRsZW4gPSBwZWVrX2hlYWRfbGVuKHJudnEsIHNrKTtcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEwNDctXFx0fVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYz0xMTQ5PXN0YXRpYyB2b2lkIGhhbmRsZV9yeChzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEyMDEtXFx0ZG8ge1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTIwMjpcXHRcXHRzb2NrX2xlbiA9IHZob3N0X25ldF9yeF9wZWVrX2hlYWRfbGVuKG5ldCwgc29jay1cXHUwMDNlc2ssXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMjAzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZidXN5bG9vcF9pbnRyLCBcXHUwMDI2Y291bnQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjowNjoxNC45MDU1ODk5NzZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2MTMwMjEyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OlxuXG4qKkZvY3VzaW5nIEluIG9uIFZob3N0LU5ldCBmb3IgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBgdmhvc3RfbmV0YCBtb2R1bGUsIHNwZWNpZmljYWxseSB0aGUgYGhhbmRsZV9yeGAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSBhIHByaW1lIHNwb3QgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBwYWNrZXQgcmVjZXB0aW9uIHBhdGguIEknbSBhbHNvIGpvdHRpbmcgZG93biBhIGZldyBvdGhlciBmdW5jdGlvbnMgdGhhdCBsb29rIHByb21pc2luZyBhcyBJIGV4cGFuZCBteSBzY29wZTogYHR1bl9uZXRfeG1pdGAsIHdoaWNoIHNob3VsZCBoYW5kbGUgdHJhbnNtaXNzaW9uIGZyb20gdGhlIFRVTiBpbnRlcmZhY2UsICBgdHVuX3NldF9pZmZgLCB3aGljaCBoYW5kbGVzIGludGVyZmFjZSBjb25maWd1cmF0aW9uLCBgdHVuX3dha2VfcXVldWVgLCBhbmQgYHR1bl9jaHJfcmVhZF9pdGVyYCB3aGljaCBldmVudHVhbGx5IGNhbGxzIGB0dW5fZG9fcmVhZGAgYW5kIHRoZW4gaW50byBgdHVuX3JpbmdfcmVjdmAuIFRoZXNlLCB0YWtlbiB0b2dldGhlciwgZ2l2ZSBtZSBhIGdvb2QgaW5pdGlhbCByb2FkbWFwIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgdGhyb3VnaCB0aGUgVFVOIGRldmljZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBlbm91Z2ggaW5mbyB0byBtYXAgdGhlIG1ham9yIHBsYXllcnMgYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdG8gaW5zZXJ0IHNvbWUgaW5zdHJ1bWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzMwMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjA2OjE4LjQ2Njg5NDg2N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE2ODUxNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHVuX2Nocl9yZWFkX2l0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdHVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdHVuLmM9MjI4Nz1zdGF0aWMgc3NpemVfdCB0dW5fZG9fcmVhZChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjMyMy1cXG5kcml2ZXJzL25ldC90dW4uYzoyMzI0OnN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG5kcml2ZXJzL25ldC90dW4uYy0yMzI1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTM2MDM9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHVuX2ZvcHMgPSB7XFxuZHJpdmVycy9uZXQvdHVuLmMtMzYwNC1cXHQub3duZXJcXHQ9IFRISVNfTU9EVUxFLFxcbmRyaXZlcnMvbmV0L3R1bi5jOjM2MDU6XFx0LnJlYWRfaXRlciAgPSB0dW5fY2hyX3JlYWRfaXRlcixcXG5kcml2ZXJzL25ldC90dW4uYy0zNjA2LVxcdC53cml0ZV9pdGVyID0gdHVuX2Nocl93cml0ZV9pdGVyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjowNjoxOC41MTg1ODU4ODJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3ODY5NjU0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgYHR1bl9uZXRfY2xvc2VgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSByaWdodCBpbi4gVGhlIGltbWVkaWF0ZSBjb25jZXJuIGlzIHRvIHNjcnV0aW5pemUgdGhlIGB0dW5fbmV0X2Nsb3NlYCBmdW5jdGlvbi4gTXkgbWVudGFsIGNoZWNrbGlzdCBzdGFydHMgcnVubmluZzogd2hhdCdzIHRoZSBjb250ZXh0PyBXaGF0J3MgaXQgc3VwcG9zZWQgdG8gYmUgZG9pbmc/IE1lbW9yeSBsZWFrcz8gUmVzb3VyY2UgY29udGVudGlvbj8gUmFjZSBjb25kaXRpb25zPyBJcyBpdCBqdXN0IGEgd3JhcHBlciwgb3IgZG9lcyBpdCBoYW5kbGUgbW9yZSBpbnRyaWNhdGUgY2xlYW51cD8gU3BlY2lmaWNhbGx5LCBhcmUgd2UgY29ycmVjdGx5IHplcm9pbmcgb3V0IHBvaW50ZXJzLCByZWxlYXNpbmcgYWxsb2NhdGVkIGJ1ZmZlcnMsIGFuZCBtb3N0IGNyaXRpY2FsbHksIGFyZSB3ZSBlbnN1cmluZyB0aGF0IHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgaW50ZXJmYWNlIGlzIGNsZWFubHkgYnJvdWdodCBkb3duIGJlZm9yZSBhbnkgZnVydGhlciBvcGVyYXRpb25zIG9jY3VyPyBJIG5lZWQgdG8gdGhpbmsgdGhyb3VnaCBldmVyeSBwb3NzaWJsZSBmYWlsdXJlIHNjZW5hcmlvIGhlcmU6IHdoYXQgaGFwcGVucyBpZiB0aGUgbmV0d29yayBpbnRlcmZhY2UgZmFpbHMgdG8gY2xvc2UgY2xlYW5seT8gRG9lcyB0aGlzIGltcGFjdCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtPyBBcmUgdGhlcmUgYW55IHNpZ25hbHMgYmVpbmcgaGFuZGxlZCwgYW5kIGNvdWxkIHRoZXkgaW50ZXJydXB0IGNyaXRpY2FsIG9wZXJhdGlvbnM/IFRoaXMgaXMgdGhlIHBvaW50IHRvIGJlIHZlcnkgc2tlcHRpY2FsIGFuZCBsb29rIGZvciBhbGwgcG9zc2libGUgd2VhayBwb2ludHMuIEJldHRlciBiZSBzYWZlIHRoYW4gc29ycnkuIExldCdzIHNlZSBpZiB0aGUgY29kZSBjb21tZW50cyBhcmUgZGVzY3JpcHRpdmUgZW5vdWdoLCBvciBpZiBJIGhhdmUgdG8gc3RlcCB0aHJvdWdoIHRoZSBlbnRpcmUgZnVuY3Rpb24gYW5kIHJlYWQgdGhlIGNvZGUgbGlrZSBhIHBvZW0sIGxpbmUgYnkgbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MzEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjowNjoyMS44OTcyODQ4NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQwMzU3NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHVuX25ldF9jbG9zZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90dW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90dW4uYz03MDY9c3RhdGljIHZvaWQgdHVuX2ZvcmNlX3dha2VfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTcxNC1cXHR0ZmlsZS1cXHUwMDNlY29uc19jbnQgPSAwO1xcbmRyaXZlcnMvbmV0L3R1bi5jOjcxNTpcXHQvKiBUZXN0ZWQgdW5kZXIgdGhlIGxvY2tzIHRoYXQgdHVuX25ldF9jbG9zZSgpIHRha2VzLCBzbyB0aGlzIGNhbiBub3RcXG5kcml2ZXJzL25ldC90dW4uYy03MTYtXFx0ICogdW5kbyBpdHMgc3RvcC4gdHVuX25ldF9vcGVuKCkgd2FrZXMgdGhlIHF1ZXVlcyBvZiBhIGRldmljZSB0aGF0XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz05OTU9c3RhdGljIGludCB0dW5fbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEwMDItLyogTmV0IGRldmljZSBjbG9zZS4gKi9cXG5kcml2ZXJzL25ldC90dW4uYzoxMDAzOnN0YXRpYyBpbnQgdHVuX25ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEwMDQte1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MTI2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHR1bl9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTI2NS1cXHQubmRvX29wZW5cXHRcXHQ9IHR1bl9uZXRfb3BlbixcXG5kcml2ZXJzL25ldC90dW4uYzoxMjY2OlxcdC5uZG9fc3RvcFxcdFxcdD0gdHVuX25ldF9jbG9zZSxcXG5kcml2ZXJzL25ldC90dW4uYy0xMjY3LVxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gdHVuX25ldF94bWl0LFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MTM0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRhcF9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTM0OS1cXHQubmRvX29wZW5cXHRcXHQ9IHR1bl9uZXRfb3BlbixcXG5kcml2ZXJzL25ldC90dW4uYzoxMzUwOlxcdC5uZG9fc3RvcFxcdFxcdD0gdHVuX25ldF9jbG9zZSxcXG5kcml2ZXJzL25ldC90dW4uYy0xMzUxLVxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gdHVuX25ldF94bWl0LFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MjE5OT1zdGF0aWMgdm9pZCBfX3R1bl93YWtlX3F1ZXVlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yMjA5LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjIyMTA6XFx0LyogQSBzdG9wIGZyb20gdHVuX25ldF9jbG9zZSgpIGlzIG5vdCBiYWNrcHJlc3N1cmUsIGxlYXZlIGl0IGFsb25lLiAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jLTIyMTEtXFx0aWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKHR1bi1cXHUwMDNlZGV2KSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjA2OjIxLjk4MTMyNTY0MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTc3MDU4NDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVFVOL1ZIT1NUIE5ldHdvcmsgRGV2aWNlIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgVFVOL1ZIT1NUIG5ldHdvcmsgZHJpdmVyLCBhbmQgSSBuZWVkIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNhbGxiYWNrIHN0cnVjdHVyZS4gUmlnaHQsIGxldCdzIHNlZS4gYHR1bl9uZXRfY2xvc2VgIGlzIGRlZmluaXRlbHkgbGlua2VkIHRvIHRoZSBgLm5kb19zdG9wYCBjYWxsYmFjayDigJMgdGhhdCdzIGNsZWFyLiBBbmQgYHR1bl9uZXRfeG1pdGAgY29ycmVzcG9uZHMgdG8gdGhlIGAubmRvX3N0YXJ0X3htaXRgIGNhbGxiYWNrLCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgaGFuZGxpbmcgdHJhbnNtaXQgb3BlcmF0aW9ucy4gSSByZW1lbWJlciBzZWVpbmcgYHR1bl9zZXRfaWZmYCBiZWluZyBpbnZva2VkIHdpdGhpbiBgdHVuX2Nocl9pb2N0bGAsIHdoaWNoIGhhbmRsZXMgdGhlIGlvY3RsIGNvbW1hbmRzLiBUaGF0J3MgaG93IGl0J3MgY29uZmlndXJlZCwgZ290IGl0LlxuXG5JIGFsc28gc2VlIHRoYXQgYHR1bl93YWtlX3F1ZXVlYCBpcyBleHBvcnRlZCwgaW1wbHlpbmcgaXQncyBkZXNpZ25lZCB0byBiZSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gdG8gc2lnbmFsIHBhY2tldCBhdmFpbGFiaWxpdHkuIEFuZCwgZm9yIHRoZSBWSE9TVCBzaWRlLCBgaGFuZGxlX3J4YCBpbiBgdmhvc3RfbmV0YCBpcyB0aGUgd29ya2hvcnNlIGhlcmUsIGl0J3MgdGhlIHZob3N0IHdvcmtlciBmb3IgcmVjZWl2ZSBvcGVyYXRpb25zLlxuXG5Ob3csIEkgcmVhbGx5IG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIGhvdyBpbnRlcmZhY2VzIGFyZSBzZXQgdXAuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHdoYXQgY2FsbHMgYHR1bl9zZXRfaWZmYCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gaXMgbWFuYWdlZC4gVGhpcyBpcyBrZXkgZm9yIG92ZXJhbGwgZmxvdyBjb250cm9sLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY5MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjowNjoyNS45NTgzODgyNTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMjk3ODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR1bl9zZXRfaWZmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTI4MjU9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdHVuX2F0dHJfZ3JvdXAgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yODI4LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjI4Mjk6c3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcilcXG5kcml2ZXJzL25ldC90dW4uYy0yODMwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTMxODA9c3RhdGljIGxvbmcgX190dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzIyNy1cXG5kcml2ZXJzL25ldC90dW4uYzozMjI4OlxcdFxcdHJldCA9IHR1bl9zZXRfaWZmKG5ldCwgZmlsZSwgXFx1MDAyNmlmcik7XFxuZHJpdmVycy9uZXQvdHVuLmMtMzIyOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MDY6MjYuMDM4NzMzNjg3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTgxNjA4MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIFRVTi9UQVAgSW50ZXJmYWNlKipcblxuT2theSwgc28gYF9fdHVuX2Nocl9pb2N0bGAgc2VlbXMgbGlrZSBhIGdvb2QgZW50cnkgcG9pbnQuIFRoYXQgbGlrZWx5IGhhbmRsZXMgdGhlIGlvY3RsIGNhbGxzIGZvciB0aGUgVFVOL1RBUCBjaGFyYWN0ZXIgZGV2aWNlLCB3aGljaCBpcyBhIGNvcmUgcGFydCBvZiBpdHMgZnVuY3Rpb25hbGl0eS4gTGV0J3Mgc2VlLi4uIEknbGwgdHJhY2UgdGhyb3VnaCB0aGlzIHRvIHVuZGVyc3RhbmQgaG93IHJlcXVlc3RzIGFyZSByb3V0ZWQgYW5kIGhhbmRsZWQsIGFuZCBtYXliZSBmaW5kIHNvbWUgY2x1ZXMgcmVnYXJkaW5nIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgSSdtIGxvb2tpbmcgZm9yLlxuXG5Ob3csIGxldCdzIHBpdm90IHRvIGludmVzdGlnYXRpbmcgYHR1bl9xdWV1ZV9yZXNpemVgLi4uIHRoYXQgc3VnZ2VzdHMgdGhlcmUncyBhIGR5bmFtaWMgYnVmZmVyIG1hbmFnZW1lbnQgYXNwZWN0IEkgc2hvdWxkIGxvb2sgaW50by4gVGhpcyBjb3VsZCBiZSByZWxldmFudCBmb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIGluIHRoZSBkYXRhIHBhdGguIEnigJlsbCBpbnZlc3RpZ2F0ZSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlZ3JhdGVzIHdpdGggdGhlIGFjdHVhbCBwYWNrZXQgcXVldWVpbmcgYW5kIGRlcXVldWluZyBtZWNoYW5pc21zLiBUaGlzIGNvdWxkIHZlcnkgd2VsbCBsZWFkIG1lIHRvIHRoZSByb290IG9mIHRoZSBwZXJmb3JtYW5jZSBjb25jZXJucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyODYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjowNjoyOS4yOTY5MDA1MTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMDk0MzA5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0dW5fcXVldWVfcmVzaXplXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTM3MjY9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB0dW5fZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNzM5LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjM3NDA6c3RhdGljIGludCB0dW5fcXVldWVfcmVzaXplKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4pXFxuZHJpdmVycy9uZXQvdHVuLmMtMzc0MS17XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0zNzc0PXN0YXRpYyBpbnQgdHVuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM3ODUtXFx0Y2FzZSBORVRERVZfQ0hBTkdFX1RYX1FVRVVFX0xFTjpcXG5kcml2ZXJzL25ldC90dW4uYzozNzg2OlxcdFxcdGlmICh0dW5fcXVldWVfcmVzaXplKHR1bikpXFxuZHJpdmVycy9uZXQvdHVuLmMtMzc4Ny1cXHRcXHRcXHRyZXR1cm4gTk9USUZZX0JBRDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MDY6MzAuMjA3ODUxMjEyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMDc2NTE1MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBEZXZpY2UgRXZlbnRzIGluIHRoZSBUVU4gRHJpdmVyKipcblxuT2theSwgc28gYHR1bl9kZXZpY2VfZXZlbnRgIGhhcyBqdXN0IGJlZW4gdHJpZ2dlcmVkLiBUaGF0J3Mgb3VyIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBuZXR3b3JrIGRldmljZSBldmVudHMgd2l0aGluIHRoZSBUVU4gZHJpdmVyIOKAkyBnb3QgaXQuIE5vdywgd2hhdCdzIGhhcHBlbmluZz8gTGV0J3MgcXVpY2tseSBzaGlmdCBnZWFycyBhbmQgY2hlY2sgdGhlIHN0YXR1cyBvZiBgdHVuX2ZvcmNlX3dha2VfcXVldWVgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBldmVudCByZWxhdGVzIHRvIGZvcmNlZCB3YWtlLXVwcy4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoZXJlIG1pZ2h0IGJlIGEgY29ubmVjdGlvbiBoZXJlIGluIGhvdyB0aGUgZXZlbnQgaXMgaGFuZGxlZCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgcmVsYXRpb25zaGlwLiBUaGlzIGNvdWxkIGJlIGFib3V0IHJlc291cmNlIG1hbmFnZW1lbnQsIHNpZ25hbGluZywgb3IgZXZlbiBwcmV2ZW50aW5nIGRlYWRsb2NrcyDigJMgYWxsIGNvcmUgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gVGhpcyByZXF1aXJlcyBhIGRlZXBlciBkaXZlIGludG8gdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTczOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjA2OjMzLjMxNTUwNjA3M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAzOTA4ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHVuX2ZvcmNlX3dha2VfcXVldWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdHVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdHVuLmM9NjYyPXN0YXRpYyB2b2lkIHR1bl9kZXRhY2hfYWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy03MDUtXFxuZHJpdmVycy9uZXQvdHVuLmM6NzA2OnN0YXRpYyB2b2lkIHR1bl9mb3JjZV93YWtlX3F1ZXVlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuZHJpdmVycy9uZXQvdHVuLmMtNzA3LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9NzI1PXN0YXRpYyBpbnQgdHVuX2F0dGFjaChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTc3MS1cXHR0ZmlsZS1cXHUwMDNlc29ja2V0LnNrLVxcdTAwM2Vza19zaHV0ZG93biBcXHUwMDI2PSB+UkNWX1NIVVRET1dOO1xcbmRyaXZlcnMvbmV0L3R1bi5jOjc3MjpcXHR0dW5fZm9yY2Vfd2FrZV9xdWV1ZSh0dW4sIHRmaWxlKTtcXG5kcml2ZXJzL25ldC90dW4uYy03NzMtXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0yODI5PXN0YXRpYyBpbnQgdHVuX3NldF9pZmYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlmcmVxICppZnIpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yOTY1LVxcdFxcdG50ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLVxcdTAwM2V0ZmlsZXNbaV0pO1xcbmRyaXZlcnMvbmV0L3R1bi5jOjI5NjY6XFx0XFx0dHVuX2ZvcmNlX3dha2VfcXVldWUodHVuLCBudGZpbGUpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTI5NjctXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9Mzc0MD1zdGF0aWMgaW50IHR1bl9xdWV1ZV9yZXNpemUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bilcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM3NjUtXFx0XFx0XFx0dGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cXHUwMDNldGZpbGVzW2ldKTtcXG5kcml2ZXJzL25ldC90dW4uYzozNzY2OlxcdFxcdFxcdHR1bl9mb3JjZV93YWtlX3F1ZXVlKHR1biwgdGZpbGUpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTM3NjctXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjowNjozMy4zOTU5MDE2MzZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg5MzkyODkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVFVOIERyaXZlcidzIFdha2UtVXAgTWVjaGFuaXNtKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGNvcmUgb2YgdGhlIFRVTiBkcml2ZXIncyBpbnRlcmFjdGlvbiB3aXRoIGl0cyBxdWV1ZXMgYW5kIEkgc2VlIHRoYXQgZnVuY3Rpb25zIGxpa2UgYHR1bl9hdHRhY2hgLCBgdHVuX3NldF9pZmZgLCBhbmQgYHR1bl9xdWV1ZV9yZXNpemVgIGFsbCB1bHRpbWF0ZWx5IGZ1bm5lbCBkb3duIHRvIGEgZnVuY3Rpb24gY2FsbGVkIGB0dW5fZm9yY2Vfd2FrZV9xdWV1ZWAuIEludGVyZXN0aW5nLiBUaGF0IGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHNvbWUga2luZCBvZiBkZWxpYmVyYXRlIG1lY2hhbmlzbSBmb3Igc2lnbmFsaW5nIGRhdGEgYXZhaWxhYmlsaXR5IG9yIHN0YXRlIGNoYW5nZXMgdG8gcHJvY2Vzc2VzIHdhaXRpbmcgb24gdGhlc2UgcXVldWVzLiBJdCBhbHNvIG1lYW5zIHRoYXQncyB0aGUgcG9pbnQgd2hlcmUgSSdsbCBwcm9iYWJseSBmaW5kIHRoZSBrZXkgbG9naWMuXG5cbk15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gYF9fdHVuX3dha2VfcXVldWVgLiBUaGF0IGZ1bmN0aW9uJ3MgbGlrZWx5IHRoZSBoZWFydCBvZiB0aGUgd2FrZS11cCBwcm9jZXNzLiBJdOKAmXMgcHJvYmFibHkgd2hlcmUgc2lnbmFscyBhcmUgc2VudCwgb3IgdGhyZWFkcyBhcmUgbm90aWZpZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIHRoZSB3YWtlLXVwLCB3aGF0IGRhdGEgaXQgb3BlcmF0ZXMgb24sIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCB3YWtlLXVwIGFyZSBpbiB0ZXJtcyBvZiBkYXRhIHRyYW5zZmVyIGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uLiBUaGlzIGlzIHdoZXJlIEknbGwgZ2V0IGEgcmVhbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkcml2ZXIncyByZXNwb25zaXZlbmVzcyBhbmQgaG93IGl0IGhhbmRsZXMgY29uY3VycmVuY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDAzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MDY6MzguMjg5ODMzMjUzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDk2ODMzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3R1bl93YWtlX3F1ZXVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTEwNTk9c3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTEzMC1cXHRcXHRuZXRpZl90eF9zdG9wX3F1ZXVlKHF1ZXVlKTtcXG5kcml2ZXJzL25ldC90dW4uYzoxMTMxOlxcdFxcdC8qIFBhaXJlZCB3aXRoIHNtcF9tYigpIGluIF9fdHVuX3dha2VfcXVldWUoKSAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jLTExMzItXFx0XFx0c21wX21iX19hZnRlcl9hdG9taWMoKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTIxMTQ9c3RhdGljIHNzaXplX3QgdHVuX3B1dF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yMTk4LS8qIENhbGxlcnMgbXVzdCBob2xkIHJpbmcuY29uc3VtZXJfbG9jayAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjIxOTk6c3RhdGljIHZvaWQgX190dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbmRyaXZlcnMvbmV0L3R1bi5jLTIyMDAtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgY29uc3VtZWQpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0yMjMyPXN0YXRpYyB2b2lkICp0dW5fcmluZ19jb25zdW1lKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sIHN0cnVjdCB0dW5fZmlsZSAqdGZpbGUpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yMjM4LVxcdGlmIChwdHIpXFxuZHJpdmVycy9uZXQvdHVuLmM6MjIzOTpcXHRcXHRfX3R1bl93YWtlX3F1ZXVlKHR1biwgdGZpbGUsIDEpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTIyNDAtXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0zODc5PXZvaWQgdHVuX3dha2VfcXVldWUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBjb25zdW1lZClcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM4OTYtXFx0aWYgKHR1bilcXG5kcml2ZXJzL25ldC90dW4uYzozODk3OlxcdFxcdF9fdHVuX3dha2VfcXVldWUodHVuLCB0ZmlsZSwgY29uc3VtZWQpO1xcbmRyaXZlcnMvbmV0L3R1bi5jLTM4OTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjA2OjM4LjM4MDgwNzE3NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzQ1MTkwNjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsJ3MgVFVOL1ZIT1NUIE5ldHdvcmsgSW50ZXJmYWNlIENvZGUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBwaW5wb2ludGluZyBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIFRVTi9WSE9TVCBuZXR3b3JraW5nIGltcGxlbWVudGF0aW9uLiBJJ3ZlIGdvdCBhIG1lbnRhbCBjaGVja2xpc3Qgb2Ygc3ltYm9scyB0byBpbnZlc3RpZ2F0ZTogYHR1bl9uZXRfeG1pdGAsIGB0dW5fc2V0X2lmZmAsIGB0dW5fY2hyX2lvY3RsYCwgYHR1bl9jaHJfcmVhZF9pdGVyYCwgYHR1bl9uZXRfY2xvc2VgLCBgdHVuX3F1ZXVlX3Jlc2l6ZWAsIGFuZCBgdHVuX3dha2VfcXVldWVgLiBUaGVzZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4gSSdtIGRlYWxpbmcgd2l0aCB0aGUgZGF0YSBmbG93IGFuZCBjb250cm9sIHdpdGhpbiB0aGUgVFVOIGludGVyZmFjZS5cblxuSG1tLCB3YWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byB2ZXJpZnkgaG93IGB2aG9zdF9uZXRfYnVmX3BlZWtgIG9yIGBoYW5kbGVfcnhgIGFyZSB1c2VkLiBUaGV5IGFyZSBzdGF0aWMsIHdoaWNoIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIGFzIHRob3NlIGZ1bmN0aW9ucyB3b24ndCBiZSBhcyBpbnRlcmVzdGluZyBmb3IgdHJhY2luZyB0aGUgY2FsbGluZyBmbG93IGZyb20gb3V0c2lkZS4gVGhhdCBtZWFucyBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxscyBpbiBgZHJpdmVycy92aG9zdC9uZXQuY2AsIHRvIGNoZWNrIGZvciBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSB2aG9zdCBpbnRlcmZhY2UuIFRoYXQncyB3aGVyZSBJJ2xsIGZpbmQgdGhlIGV4dGVybmFsbHkgY2FsbGFibGUgZnVuY3Rpb25zLiBUaGlzIHdpbGwgaGVscCBtZSBidWlsZCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgdGhlIGRhdGEgYWN0dWFsbHkgZ2V0cyBpbiBhbmQgb3V0IG9mIHRoZSB2aG9zdCBuZXR3b3JrIGludGVyZmFjZSwgd2hpY2ggaXMgdGhlIGNydXggb2YgdGhlIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTgzLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjA2OjQyLjcyNjAwMjMwNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU1MDgzOTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oW2Etel9BLVowLTldKylcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L25ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmM9Mzg9c3RhdGljIGludCBleHBlcmltZW50YWxfemNvcHl0eCA9IDA7XFxuZHJpdmVycy92aG9zdC9uZXQuYzozOTptb2R1bGVfcGFyYW0oZXhwZXJpbWVudGFsX3pjb3B5dHgsIGludCwgMDQ0NCk7XFxuZHJpdmVycy92aG9zdC9uZXQuYzo0MDpNT0RVTEVfUEFSTV9ERVNDKGV4cGVyaW1lbnRhbF96Y29weXR4LCBcXFwiRW5hYmxlIFplcm8gQ29weSBUWDtcXFwiXFxuZHJpdmVycy92aG9zdC9uZXQuYy00MS1cXHRcXHQgICAgICAgICAgICAgICAgICAgICAgIFxcXCIgMSAtRW5hYmxlOyAwIC0gRGlzYWJsZVxcXCIpO1xcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYz0yNDU9c3RhdGljIHN0cnVjdCB2aG9zdF9uZXRfdWJ1Zl9yZWYgKlxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MjQ2OnZob3N0X25ldF91YnVmX2FsbG9jKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBib29sIHpjb3B5KVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMjQ3LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM9MTg5Mz1zdGF0aWMgaW50IF9faW5pdCB2aG9zdF9uZXRfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODk4LX1cXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE4OTk6bW9kdWxlX2luaXQodmhvc3RfbmV0X2luaXQpO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTkwMC1cXG5kcml2ZXJzL3Zob3N0L25ldC5jPTE5MDE9c3RhdGljIHZvaWQgX19leGl0IHZob3N0X25ldF9leGl0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE5MDQtfVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTkwNTptb2R1bGVfZXhpdCh2aG9zdF9uZXRfZXhpdCk7XFxuZHJpdmVycy92aG9zdC9uZXQuYy0xOTA2LVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTkwNzpNT0RVTEVfVkVSU0lPTihcXFwiMC4wLjFcXFwiKTtcXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE5MDg6TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTCB2MlxcXCIpO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTkwOTpNT0RVTEVfQVVUSE9SKFxcXCJNaWNoYWVsIFMuIFRzaXJraW5cXFwiKTtcXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE5MTA6TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJIb3N0IGtlcm5lbCBhY2NlbGVyYXRvciBmb3IgdmlydGlvIG5ldFxcXCIpO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTkxMTpNT0RVTEVfQUxJQVNfTUlTQ0RFVihWSE9TVF9ORVRfTUlOT1IpO1xcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTkxMjpNT0RVTEVfQUxJQVMoXFxcImRldm5hbWU6dmhvc3QtbmV0XFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjA2OjQzLjA4MTA5MjIzMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODE0OTYyODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgZm9yIHRoZSBWaXJ0dWFsIEhvc3QgTmV0d29yayBJbnRlcmZhY2UqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgaGFwcGVuaW5nIGhlcmUuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGNvbWVzIHRvIG1pbmQgaXMgdGhlIHZpcnR1YWwgaG9zdCBuZXR3b3JrIGludGVyZmFjZS4gTXkgZ3V0IHRlbGxzIG1lIHRoYXQncyB0aGUgYXJlYSBJIHNob3VsZCBiZSBmb2N1c2luZyBvbi4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgZGlnZ2luZyBhcm91bmQgZm9yIGFueSBtZW50aW9uIG9mIGB2aG9zdF9uZXRfaW9jdGxgIG9yIHNvbWV0aGluZyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudC4gVGhhdCdzIGEgcHJldHR5IHN0YW5kYXJkIHN0YXJ0aW5nIHBvaW50IHdoZW4gSSdtIGRlYWxpbmcgd2l0aCBuZXR3b3JraW5nIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEl0J3Mgb2Z0ZW4gd2hlcmUgdGhlIGFjdGlvbiBpcywgc28gbGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEl0J3MgdGltZSB0byBzdGFydCBzZWFyY2hpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTc4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MDY6NDUuODk2MDU4MzQ5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzkxNDc0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF9uZXRfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9uZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L25ldC5jPTE3MjY9c3RhdGljIGxvbmcgdmhvc3RfbmV0X3NldF9vd25lcihzdHJ1Y3Qgdmhvc3RfbmV0ICpuKVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xNzQ2LVxcbmRyaXZlcnMvdmhvc3QvbmV0LmM6MTc0NzpzdGF0aWMgbG9uZyB2aG9zdF9uZXRfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTE3NDgtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYz0xODc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X25ldF9mb3BzID0ge1xcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODgwLVxcdC5wb2xsICAgICAgICAgICA9IHZob3N0X25ldF9jaHJfcG9sbCxcXG5kcml2ZXJzL3Zob3N0L25ldC5jOjE4ODE6XFx0LnVubG9ja2VkX2lvY3RsID0gdmhvc3RfbmV0X2lvY3RsLFxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTg4Mi1cXHQuY29tcGF0X2lvY3RsICAgPSBjb21wYXRfcHRyX2lvY3RsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjowNjo0NS45Nzk5Nzk1OTJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkzNDUxNDI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25zaWRlcmluZyBgdmhvc3RfbmV0X29wZW5gKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdmlydHVhbCBuZXR3b3JrIGRldmljZSBzZXR1cCwgYW5kIGB2aG9zdF9uZXRfb3BlbmAgaW1tZWRpYXRlbHkganVtcHMgdG8gbWluZC4gSSdtIGZvY3VzaW5nIG9uIGl0IGJlY2F1c2UgaXQncyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50LiBUaGUgaW1wbGljYXRpb25zIG9mIHdoYXQgaXQgZG9lcywgb3IgZG9lc24ndCBkbywgYXJlIHNpZ25pZmljYW50IGZvciBwZXJmb3JtYW5jZSwgc2VjdXJpdHksIGFuZCBzdGFiaWxpdHkuIEknbSB3b25kZXJpbmcgaWYgYSByZWNlbnQgY2hhbmdlIHRvIHRoYXQgc2VjdGlvbiBpcyB0aGUgc291cmNlIG9mIHRoZSBpc3N1ZS4gQSBuZXcgY29uZmlndXJhdGlvbj8gQSBuZXcgdmVyc2lvbj8gQSByZWZhY3RvciB0aGF0IHRvdWNoZWQgb24gZGV2aWNlIGNhcGFiaWxpdGllcz8gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxvd3MgaW52b2x2ZWQgaW4gdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgZnJvbSBgdmhvc3RfbmV0X29wZW5gPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgSSdtIG1pc3Npbmc/IEFuZCBkb2VzIGl0IHBsYXkgd2VsbCB3aXRoIHRoZSBoeXBlcnZpc29yP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxODYyMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjA2OjUwLjkxNDQ5NzE0NloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg0MjkxMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfbmV0X29wZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9uZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L25ldC5jPTEzMzE9c3RhdGljIHZvaWQgaGFuZGxlX3J4X25ldChzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcXG4tLVxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTMzNy1cXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEzMzg6c3RhdGljIGludCB2aG9zdF9uZXRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEzMzkte1xcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYz0xODc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X25ldF9mb3BzID0ge1xcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xODgyLVxcdC5jb21wYXRfaW9jdGwgICA9IGNvbXBhdF9wdHJfaW9jdGwsXFxuZHJpdmVycy92aG9zdC9uZXQuYzoxODgzOlxcdC5vcGVuICAgICAgICAgICA9IHZob3N0X25ldF9vcGVuLFxcbmRyaXZlcnMvdmhvc3QvbmV0LmMtMTg4NC1cXHQubGxzZWVrXFx0XFx0PSBub29wX2xsc2VlayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MDY6NTAuOTgyOTMwNzg5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNzI3MDkyNTY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFRyYWNpbmcgS2V5IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHZob3N0LW5ldCBhbmQgdHVuLmMgY29kZS4gVGhlIGNyaXRpY2FsIHRoaW5nIHRvIHJlbWVtYmVyIGlzIHRoYXQgdGhlIHZob3N0IHdvcmtlciBydW5zIGluIGEga2VybmVsIHRocmVhZCwgc28gaXQncyBub3QgYSBkaXJlY3Qgc3lzY2FsbCBlbnRyeS4gVGhlIHJlYWwgZW50cnkgcG9pbnRzIEkgbmVlZCB0byBmb2N1cyBvbiBhcmUgYHZob3N0X25ldF9pb2N0bGAgYW5kIGB2aG9zdF9uZXRfb3BlbmAuIFdoaWxlIHRob3NlIGhhbmRsZSB0aGUgaW5pdGlhbCBzZXR1cCwgSSBrbm93IGBoYW5kbGVfcnhgIGlzIHdoZXJlIHRoZSByZWFsIHByb2Nlc3NpbmcgaGFwcGVucywgc28gSSdsbCBkZWZpbml0ZWx5IGtlZXAgYW4gZXllIG9uIHRoYXQuIEknbGwgaW5jbHVkZSBgdmhvc3RfbmV0X2lvY3RsYCBhbmQgYHZob3N0X25ldF9vcGVuYCBpbiBteSBpbnZlc3RpZ2F0aW9uLlxuXG5Ob3csIGZvciBgdHVuLmNgLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgZnVuY3Rpb25zIHRoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgYHR1bl9jaHJfaW9jdGxgLCB0aGVuIGB0dW5fY2hyX3JlYWRfaXRlcmAuIEknbGwgYWxzbyBhZGQgYHR1bl9uZXRfeG1pdGAsIGB0dW5fbmV0X2Nsb3NlYCwgYHR1bl9zZXRfaWZmYCwgYW5kIGB0dW5fd2FrZV9xdWV1ZWAgdG8gdGhlIGxpc3QuIFRoZXkgYWxsIHNlZW0gbGlrZSB0aGV5IGNvdWxkIGJlIGltcG9ydGFudCBwaWVjZXMgb2YgdGhlIHB1enpsZS4gSeKAmWxsIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgdHVuX2Nocl9pb2N0bGAgdG8gZ2V0IGEgZmVlbCBmb3IgaG93IGl0IHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA3MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjowODo1OC4yNTM4NjAwNjhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDczOTQwODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHVuX2Nocl9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90dW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90dW4uYz0zMTQyPXN0YXRpYyB1bnNpZ25lZCBjaGFyIHR1bl9nZXRfYWRkcl9sZW4odW5zaWduZWQgc2hvcnQgdHlwZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTMxNzktXFxuZHJpdmVycy9uZXQvdHVuLmM6MzE4MDpzdGF0aWMgbG9uZyBfX3R1bl9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXFxuZHJpdmVycy9uZXQvdHVuLmMtMzE4MS1cXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhcmcsIGludCBpZnJlcV9sZW4pXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zMjU2LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjMyNTc6XFx0bmV0aWZfaW5mbyh0dW4sIGRydiwgdHVuLVxcdTAwM2VkZXYsIFxcXCJ0dW5fY2hyX2lvY3RsIGNtZCAldVxcXFxuXFxcIiwgY21kKTtcXG5kcml2ZXJzL25ldC90dW4uYy0zMjU4LVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ3My1cXG5kcml2ZXJzL25ldC90dW4uYzozNDc0OnN0YXRpYyBsb25nIHR1bl9jaHJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsXFxuZHJpdmVycy9uZXQvdHVuLmMtMzQ3NS1cXHRcXHRcXHQgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmRyaXZlcnMvbmV0L3R1bi5jLTM0NzYte1xcbmRyaXZlcnMvbmV0L3R1bi5jOjM0Nzc6XFx0cmV0dXJuIF9fdHVuX2Nocl9pb2N0bChmaWxlLCBjbWQsIGFyZywgc2l6ZW9mIChzdHJ1Y3QgaWZyZXEpKTtcXG5kcml2ZXJzL25ldC90dW4uYy0zNDc4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTM0ODE9c3RhdGljIGxvbmcgdHVuX2Nocl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNTA0LVxcdCAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jOjM1MDU6XFx0cmV0dXJuIF9fdHVuX2Nocl9pb2N0bChmaWxlLCBjbWQsIGFyZywgc2l6ZW9mKHN0cnVjdCBjb21wYXRfaWZyZXEpKTtcXG5kcml2ZXJzL25ldC90dW4uYy0zNTA2LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTM2MDM9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHVuX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zNjA3LVxcdC5wb2xsXFx0PSB0dW5fY2hyX3BvbGwsXFxuZHJpdmVycy9uZXQvdHVuLmM6MzYwODpcXHQudW5sb2NrZWRfaW9jdGxcXHQ9IHR1bl9jaHJfaW9jdGwsXFxuZHJpdmVycy9uZXQvdHVuLmMtMzYwOS0jaWZkZWYgQ09ORklHX0NPTVBBVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMjowODo1OS41MDEyNjQ4MDNaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0MDI2OTQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBJT0NUTCBQcm9jZXNzKipcblxuT2theSwgc28gd2UncmUgc3RhcnRpbmcgd2l0aCBgdHVuX2Nocl9pb2N0bGAuIFRoYXQncyBvdXIgZW50cnkgcG9pbnQsIHRoZSBmaXJzdCBwbGFjZSB0aGUga2VybmVsIGlzIGhhbmRsaW5nIG91ciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBUVU4gZGV2aWNlLiBLbm93aW5nIHRoYXQncyB3aGVyZSB3ZSdyZSBhdCBoZWxwcyBmcmFtZSBldmVyeXRoaW5nIGVsc2UuIE5vdywgZnJvbSB0aGVyZSwgSSBuZWVkIHRvIGtub3cgKndoYXQqIHRoYXQgaW5pdGlhbCBpbnRlcmFjdGlvbiB0cmlnZ2Vycy4gR2l2ZW4gdGhlIHRhc2sgYXQgaGFuZCwgSSB0aGluayBpdCdzIHRpbWUgdG8gY2hlY2sgb3V0IGhvdyBgdHVuX25ldF94bWl0YCBmaXRzIGludG8gYWxsIHRoaXMuIFdlIG5lZWQgdG8gYmUgY2hlY2tpbmcgdGhlIGRhdGEgdHJhbnNtaXQgcGF0aCwgYW5kIHRoaXMgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDMyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDI6MDk6MDIuNTQxNTM4MjQyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTg0MTUxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0dW5fbmV0X3htaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdHVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdHVuLmM9MTA0Nj1zdGF0aWMgdW5zaWduZWQgaW50IHJ1bl9lYnBmX2ZpbHRlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTA1OC0vKiBOZXQgZGV2aWNlIHN0YXJ0IHhtaXQgKi9cXG5kcml2ZXJzL25ldC90dW4uYzoxMDU5OnN0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC90dW4uYy0xMDYwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTEyNjI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0dW5fbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEyNjYtXFx0Lm5kb19zdG9wXFx0XFx0PSB0dW5fbmV0X2Nsb3NlLFxcbmRyaXZlcnMvbmV0L3R1bi5jOjEyNjc6XFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSB0dW5fbmV0X3htaXQsXFxuZHJpdmVycy9uZXQvdHVuLmMtMTI2OC1cXHQubmRvX2ZpeF9mZWF0dXJlc1xcdD0gdHVuX25ldF9maXhfZmVhdHVyZXMsXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0xMzQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdGFwX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xMzUwLVxcdC5uZG9fc3RvcFxcdFxcdD0gdHVuX25ldF9jbG9zZSxcXG5kcml2ZXJzL25ldC90dW4uYzoxMzUxOlxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gdHVuX25ldF94bWl0LFxcbmRyaXZlcnMvbmV0L3R1bi5jLTEzNTItXFx0Lm5kb19maXhfZmVhdHVyZXNcXHQ9IHR1bl9uZXRfZml4X2ZlYXR1cmVzLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MjE5OT1zdGF0aWMgdm9pZCBfX3R1bl93YWtlX3F1ZXVlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yMjE5LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjIyMjA6XFx0LyogUGFpcmVkIHdpdGggc21wX21iX19hZnRlcl9hdG9taWMoKSBpbiB0dW5fbmV0X3htaXQoKSAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jLTIyMjEtXFx0c21wX21iKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjA5OjAyLjYwMTM4NTg1NloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDQyMDIzMDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBQYXRjaCBvbiBUdW4vVGFwIERyaXZlcnMqKlxuXG5Pa2F5LCBzbyB0aGUgcGF0Y2ggaXMgZnVuY3Rpb25hbCwgYW5kIGl0J3MgbW9kaWZ5aW5nIHRoZSBjb3JlIHR1bi90YXAgZHJpdmVycywgd2hpY2ggbWVhbnMgaXQncyBwcmV0dHkgZnVuZGFtZW50YWwuIEdvb2QsIGdvb2QuIEkgc2VlIGl0J3MgcmVhY2hhYmxlIGFuZCB0aGUgY29uZmlncyBhcmUgYFRVTmAgYW5kIGBWSE9TVF9ORVRgLlxuXG5JIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBrZXkgZnVuY3Rpb25zIGFmZmVjdGVkLCBsZXQncyBzZWUuLi4gdGhlIGZvY3VzIHN5bWJvbHMgYXJlIGB0dW5fbmV0X3htaXRgLCBgdHVuX3NldF9pZmZgLCBgdHVuX2Nocl9pb2N0bGAsIGB0dW5fY2hyX3JlYWRfaXRlcmAsIGB0dW5fbmV0X2Nsb3NlYCwgYHR1bl9xdWV1ZV9yZXNpemVgLCBgdHVuX3dha2VfcXVldWVgLCBgdmhvc3RfbmV0X2lvY3RsYCwgYW5kIGB2aG9zdF9uZXRfb3BlbmAuIEdvdCBpdC4gTm93LCBhcmUgdGhlcmUgYW55IGRlcGVuZGVuY2llcyBmb3IgYFZIT1NUX05FVGAgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZj9cblxuTGV0J3MgY2hlY2vigKYgaXQgZGVwZW5kcyBvbiBgTkVUIFx1MDAyNlx1MDAyNiBFVkVOVEZEIFx1MDAyNlx1MDAyNiAoVFVOIHx8ICFUVU4pIFx1MDAyNlx1MDAyNiAoVEFQIHx8ICFUQVApYC4gSG1tLCBgRVZFTlRGRGAgaXMgdHlwaWNhbGx5IGVuYWJsZWQsIGFuZCBgTkVUYCBhbHNvLiAgV2UncmUgZXhwbGljaXRseSBlbmFibGluZyBgVFVOYCwgc28gdGhhdCdzIGNvdmVyZWQuXG5cbldhaXQgYSBzZWNvbmQsIGB0dW5fd2FrZV9xdWV1ZWAgaXMgZXhwb3J0ZWQsIHNvIHRoYXQgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1cnRoZXIgc2NydXRpbnkuIEFuZCBJIHJlY2FsbCBgdHVuX3NldF9pZmZgIGlzIGNhbGxlZCBmcm9tIGB0dW5fY2hyX2lvY3RsYCwgYW5kIGB0dW5fcXVldWVfcmVzaXplYCBpcyBjYWxsZWQgZnJvbSBib3RoIGB0dW5fZGV2aWNlX2V2ZW50YCBhbmQgYHR1bl9jaHJfaW9jdGxgLiBPa2F5LCB0aGF0J3MgdXNlZnVsIGNvbnRleHQuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIE5vcGUsIHNlZW1zIGBDT05GSUdfVFVOYCBpcyBzdWZmaWNpZW50IGZvciBgdHVuLmNgIGFuZCBgQ09ORklHX1ZIT1NUX05FVGAgY292ZXJzIGB2aG9zdC9uZXQuY2AuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgbm93LiBJJ2xsIHNldCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3MDEsIk91dHB1dFRva2VucyI6MjA4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAyOjA5OjA5LjY0MzQyMDU0NVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODcwODU4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFVOXCIsXG4gICAgXCJWSE9TVF9ORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0dW5fbmV0X3htaXRcIixcbiAgICBcInR1bl9zZXRfaWZmXCIsXG4gICAgXCJ0dW5fY2hyX2lvY3RsXCIsXG4gICAgXCJ0dW5fY2hyX3JlYWRfaXRlclwiLFxuICAgIFwidHVuX25ldF9jbG9zZVwiLFxuICAgIFwidHVuX3F1ZXVlX3Jlc2l6ZVwiLFxuICAgIFwidHVuX3dha2VfcXVldWVcIixcbiAgICBcInZob3N0X25ldF9pb2N0bFwiLFxuICAgIFwidmhvc3RfbmV0X29wZW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgKElGRl9CQUNLUFJFU1NVUkUpIHRvIHRoZSBUVU4vVEFQIGRyaXZlciwgYWxsb3dpbmcgdGhlIGtlcm5lbCB0byBzdG9wIHRoZSBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHBhY2tldHMgd2hlbiB0aGUgaW50ZXJuYWwgcmluZyBidWZmZXIgaXMgZnVsbC4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgYW5kIFRVTi9UQVAgZHJpdmVyIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gSXQgYWxzbyBtb2RpZmllcyB0aGUgdmhvc3QtbmV0IGRyaXZlciB0byB3YWtlIHRoZSBxdWV1ZSB3aGVuIGl0ZW1zIGFyZSBjb25zdW1lZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUVU5cIixcbiAgICBcIlZIT1NUX05FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInR1bl9uZXRfeG1pdFwiLFxuICAgIFwidHVuX3NldF9pZmZcIixcbiAgICBcInR1bl9jaHJfaW9jdGxcIixcbiAgICBcInR1bl9jaHJfcmVhZF9pdGVyXCIsXG4gICAgXCJ0dW5fbmV0X2Nsb3NlXCIsXG4gICAgXCJ0dW5fcXVldWVfcmVzaXplXCIsXG4gICAgXCJ0dW5fd2FrZV9xdWV1ZVwiLFxuICAgIFwidmhvc3RfbmV0X2lvY3RsXCIsXG4gICAgXCJ2aG9zdF9uZXRfb3BlblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSAoSUZGX0JBQ0tQUkVTU1VSRSkgdG8gdGhlIFRVTi9UQVAgZHJpdmVyLCBhbGxvd2luZyB0aGUga2VybmVsIHRvIHN0b3AgdGhlIHF1ZXVlIGluc3RlYWQgb2YgZHJvcHBpbmcgcGFja2V0cyB3aGVuIHRoZSBpbnRlcm5hbCByaW5nIGJ1ZmZlciBpcyBmdWxsLiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBhbmQgVFVOL1RBUCBkcml2ZXIgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSB2aG9zdC1uZXQgZHJpdmVyIHRvIHdha2UgdGhlIHF1ZXVlIHdoZW4gaXRlbXMgYXJlIGNvbnN1bWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlxlqp[1] Phase: Succeeded StartedAt: 2026-08-04 02:09:20 +0000 UTC FinishedAt: 2026-08-04 02:09:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxlqp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-04 02:09:20 +0000 UTC FinishedAt: 2026-08-04 02:09:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxlqp[2] Phase: Succeeded StartedAt: 2026-08-04 02:09:20 +0000 UTC FinishedAt: 2026-08-04 05:50:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-04 02:09:20 +0000 UTC FinishedAt: 2026-08-04 05:50:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-04 02:09:20 +0000 UTC FinishedAt: 2026-08-04 02:09:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-04 02:09:20 +0000 UTC FinishedAt: 2026-08-04 02:09:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlxlqp/series-workflowlxlqp-convert-artifact-3077367608/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-04 02:09:31 +0000 UTC FinishedAt: 2026-08-04 02:26:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-04 02:09:31 +0000 UTC FinishedAt: 2026-08-04 02:26:45 +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:*9a932ecc-3f63-43ed-a01b-d0d19a390854,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-workflowlxlqp/series-workflowlxlqp-convert-artifact-3077367608/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": "9a94c0f0-96b4-4903-b182-255b685d9b28", "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-workflowlxlqp/series-workflowlxlqp-build-action-1167994094/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-04 02:09:31 +0000 UTC FinishedAt: 2026-08-04 02:26:35 +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:*9a932ecc-3f63-43ed-a01b-d0d19a390854,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-workflowlxlqp/series-workflowlxlqp-convert-artifact-3077367608/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": "9a94c0f0-96b4-4903-b182-255b685d9b28", "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-workflowlxlqp/series-workflowlxlqp-build-action-1167994094/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-04 02:26:45 +0000 UTC FinishedAt: 2026-08-04 02:26:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-04 02:26:45 +0000 UTC FinishedAt: 2026-08-04 02:26:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-04 02:26:45 +0000 UTC FinishedAt: 2026-08-04 02:26:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-04 02:26:45 +0000 UTC FinishedAt: 2026-08-04 02:26:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlxlqp/series-workflowlxlqp-convert-artifact-1367463071/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-04 02:26:55 +0000 UTC FinishedAt: 2026-08-04 02:28:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-04 02:26:55 +0000 UTC FinishedAt: 2026-08-04 02:28:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9a94c0f0-96b4-4903-b182-255b685d9b28,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-workflowlxlqp/series-workflowlxlqp-build-action-1167994094/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-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-04 02:28:45 +0000 UTC FinishedAt: 2026-08-04 02:28:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-04 02:28:45 +0000 UTC FinishedAt: 2026-08-04 02:28:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-04 02:28:45 +0000 UTC FinishedAt: 2026-08-04 02:45:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-04 02:28:45 +0000 UTC FinishedAt: 2026-08-04 02:45: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:*9a932ecc-3f63-43ed-a01b-d0d19a390854,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-workflowlxlqp/series-workflowlxlqp-convert-artifact-1367463071/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": "46e66bb2-e19e-4410-904b-8c32e020b2a6", "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-workflowlxlqp/series-workflowlxlqp-build-action-3062736691/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-04 02:28:45 +0000 UTC FinishedAt: 2026-08-04 02:45:49 +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:*9a932ecc-3f63-43ed-a01b-d0d19a390854,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-workflowlxlqp/series-workflowlxlqp-convert-artifact-1367463071/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": "46e66bb2-e19e-4410-904b-8c32e020b2a6", "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-workflowlxlqp/series-workflowlxlqp-build-action-3062736691/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-04 02:45:59 +0000 UTC FinishedAt: 2026-08-04 02:45:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-04 02:45:59 +0000 UTC FinishedAt: 2026-08-04 02:45:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-04 02:45:59 +0000 UTC FinishedAt: 2026-08-04 02:48:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-04 02:45:59 +0000 UTC FinishedAt: 2026-08-04 02:47:45 +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:*46e66bb2-e19e-4410-904b-8c32e020b2a6,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-workflowlxlqp/series-workflowlxlqp-build-action-3062736691/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-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-04 02:48:23 +0000 UTC FinishedAt: 2026-08-04 05:50:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-04 02:48:23 +0000 UTC FinishedAt: 2026-08-04 05:50:48 +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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"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:*9a94c0f0-96b4-4903-b182-255b685d9b28,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*46e66bb2-e19e-4410-904b-8c32e020b2a6,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-workflowlxlqp/series-workflowlxlqp-build-action-1167994094/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-workflowlxlqp/series-workflowlxlqp-build-action-3062736691/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-04 02:48:23 +0000 UTC FinishedAt: 2026-08-04 02:48:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-04 02:48:23 +0000 UTC FinishedAt: 2026-08-04 02:48:28 +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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"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-workflowlxlqp/series-workflowlxlqp-convert-artifact-3832941240/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-04 02:48:23 +0000 UTC FinishedAt: 2026-08-04 02:48:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-04 02:48:23 +0000 UTC FinishedAt: 2026-08-04 02:48:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-04 02:48:23 +0000 UTC FinishedAt: 2026-08-04 02:48:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-04 02:48:30 +0000 UTC FinishedAt: 2026-08-04 05:50:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxlqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["tun_net_xmit","tun_set_iff","tun_chr_ioctl","tun_chr_read_iter","tun_net_close","tun_queue_resize","tun_wake_queue","vhost_net_ioctl","vhost_net_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN","VHOST_NET"],"series_id":"2ea0ccf2-9452-423f-8732-44c08f49c418","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-04 02:48:30 +0000 UTC FinishedAt: 2026-08-04 05:50:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9a94c0f0-96b4-4903-b182-255b685d9b28,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*46e66bb2-e19e-4410-904b-8c32e020b2a6,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-workflowlxlqp/series-workflowlxlqp-build-action-1167994094/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-workflowlxlqp/series-workflowlxlqp-build-action-3062736691/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-workflowlxlqp/series-workflowlxlqp-convert-artifact-3832941240/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,}