Name: series-workflowdwm7x Phase: Succeeded StartedAt: 2026-08-18 17:30:58 +0000 UTC FinishedAt: 2026-08-18 21:16:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwm7x[0] Phase: Succeeded StartedAt: 2026-08-18 17:30:58 +0000 UTC FinishedAt: 2026-08-18 17:35:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwm7x[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 17:30:58 +0000 UTC FinishedAt: 2026-08-18 17:35:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a3dee9bb902ee4357fa02e49b415d7724ee0140a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "GTP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a3dee9bb902ee4357fa02e49b415d7724ee0140a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "GTP" ], "series_id": "149c2eef-9448-459a-afda-24dd5b4ac65d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "gtp_genl_new_pdp", "gtp_genl_del_pdp", "gtp_dellink", "gtp_encap_recv", "gtp_dev_xmit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE3OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0dUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2d0cF9nZW5sX25ld19wZHAmIzM0OywKICAgICYjMzQ7Z3RwX2dlbmxfZGVsX3BkcCYjMzQ7LAogICAgJiMzNDtndHBfZGVsbGluayYjMzQ7LAogICAgJiMzNDtndHBfZW5jYXBfcmVjdiYjMzQ7LAogICAgJiMzNDtndHBfZGV2X3htaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG11dGV4IGBndHBfcGRwX2xvY2tgIHRvIHByb3RlY3QgUERQIGNvbnRleHQgb3BlcmF0aW9ucyBpbiB0aGUgR1RQIGRyaXZlciBhbmQgYWRkcyBsb2NrZGVwIGFubm90YXRpb25zIHRvIFJDVSBsaXN0IHRyYXZlcnNhbHMuIFRoaXMgaXMgcHVyZWx5IGEgY29uY3VycmVuY3kgY29udHJvbCBhbmQgbG9ja2luZyBjaGFuZ2UuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbW9kaWZ5IG1lbW9yeSBpbml0aWFsaXphdGlvbiBsb2dpYy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByZWxhdGVkIHRvIGxvY2tpbmcgKGRlYWRsb2NrcywgcmFjZSBjb25kaXRpb25zKSBvciB1c2UtYWZ0ZXItZnJlZS9vdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtdXRleCBgZ3RwX3BkcF9sb2NrYCB0byBwcm90ZWN0IFBEUCBjb250ZXh0IGhhc2ggdGFibGVzIGluIHRoZSBHVFAgZHJpdmVyLiBJdCBtb2RpZmllcyBuZXRsaW5rIGhhbmRsZXJzIChgZ3RwX2dlbmxfbmV3X3BkcGAsIGBndHBfZ2VubF9kZWxfcGRwYCkgYW5kIHRoZSBsaW5rIGRlbGV0aW9uIGhhbmRsZXIgKGBndHBfZGVsbGlua2ApIHRvIGFjcXVpcmUgdGhpcyBsb2NrLCBhbmQgdXBkYXRlcyBSQ1UgbGlzdCB0cmF2ZXJzYWxzIHRvIGNoZWNrIGZvciBpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgbG9ja2luZyBkb2VzIG5vdCBpbnRyb2R1Y2UgZGVhZGxvY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNzozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg2MzExNDBmYjJiMTA5YWIxOThkZmU4ODBlYmMyZWIyYjM2ZmEwZThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxNzozMzoxMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ndHAuYyBiL2RyaXZlcnMvbmV0L2d0cC5jXG5pbmRleCA5YTEyY2M1M2RhMDAyLi4yZjZlNzdjY2UzODVmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZ3RwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2d0cC5jXG5AQCAtMTIsNiAmIzQzOzEyLDcgQEBcbiAjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFwmIzM0OzogXCYjMzQ7IGZtdFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VkcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1bGlzdC5oXHUwMDNlXG5AQCAtMTA4LDYgJiM0MzsxMDksNyBAQCBzdHJ1Y3QgZ3RwX25ldCB7XG4gfTtcbiBcbiBzdGF0aWMgdTMyIGd0cF9oX2luaXR2YWw7XG4mIzQzO3N0YXRpYyBERUZJTkVfTVVURVgoZ3RwX3BkcF9sb2NrKTtcbiBcbiBzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IGd0cF9nZW5sX2ZhbWlseTtcbiBcbkBAIC0xNTEsNyAmIzQzOzE1Myw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqZ3RwMF9wZHBfZmluZChzdHJ1Y3QgZ3RwX2RldiAqZ3RwLCB1NjQgdGlkLCB1MTYgZmFtaWx5KVxuIFxuIFx0aGVhZCA9IFx1MDAyNmd0cC1cdTAwM2V0aWRfaGFzaFtndHAwX2hhc2hmbih0aWQpICUgZ3RwLVx1MDAzZWhhc2hfc2l6ZV07XG4gXG4tXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF90aWQpIHtcbiYjNDM7XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF90aWQsXG4mIzQzO1x0XHRcdFx0IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZndHBfcGRwX2xvY2spKSB7XG4gXHRcdGlmIChwZHAtXHUwMDNlYWYgPT0gZmFtaWx5IFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgcGRwLVx1MDAzZWd0cF92ZXJzaW9uID09IEdUUF9WMCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHBkcC1cdTAwM2V1LnYwLnRpZCA9PSB0aWQpXG5AQCAtMTY4LDcgJiM0MzsxNzEsOCBAQCBzdGF0aWMgc3RydWN0IHBkcF9jdHggKmd0cDFfcGRwX2ZpbmQoc3RydWN0IGd0cF9kZXYgKmd0cCwgdTMyIHRpZCwgdTE2IGZhbWlseSlcbiBcbiBcdGhlYWQgPSBcdTAwMjZndHAtXHUwMDNldGlkX2hhc2hbZ3RwMXVfaGFzaGZuKHRpZCkgJSBndHAtXHUwMDNlaGFzaF9zaXplXTtcbiBcbi1cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X3RpZCkge1xuJiM0MztcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X3RpZCxcbiYjNDM7XHRcdFx0XHQgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmd0cF9wZHBfbG9jaykpIHtcbiBcdFx0aWYgKHBkcC1cdTAwM2VhZiA9PSBmYW1pbHkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBwZHAtXHUwMDNlZ3RwX3ZlcnNpb24gPT0gR1RQX1YxIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgcGRwLVx1MDAzZXUudjEuaV90ZWkgPT0gdGlkKVxuQEAgLTE4NSw3ICYjNDM7MTg5LDggQEAgc3RhdGljIHN0cnVjdCBwZHBfY3R4ICppcHY0X3BkcF9maW5kKHN0cnVjdCBndHBfZGV2ICpndHAsIF9fYmUzMiBtc19hZGRyKVxuIFxuIFx0aGVhZCA9IFx1MDAyNmd0cC1cdTAwM2VhZGRyX2hhc2hbaXB2NF9oYXNoZm4obXNfYWRkcikgJSBndHAtXHUwMDNlaGFzaF9zaXplXTtcbiBcbi1cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X2FkZHIpIHtcbiYjNDM7XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF9hZGRyLFxuJiM0MztcdFx0XHRcdCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2Z3RwX3BkcF9sb2NrKSkge1xuIFx0XHRpZiAocGRwLVx1MDAzZWFmID09IEFGX0lORVQgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBwZHAtXHUwMDNlbXMuYWRkci5zX2FkZHIgPT0gbXNfYWRkcilcbiBcdFx0XHRyZXR1cm4gcGRwO1xuQEAgLTIyMCw3ICYjNDM7MjI1LDggQEAgc3RhdGljIHN0cnVjdCBwZHBfY3R4ICppcHY2X3BkcF9maW5kKHN0cnVjdCBndHBfZGV2ICpndHAsXG4gXG4gXHRoZWFkID0gXHUwMDI2Z3RwLVx1MDAzZWFkZHJfaGFzaFtpcHY2X2hhc2hmbihtc19hZGRyKSAlIGd0cC1cdTAwM2VoYXNoX3NpemVdO1xuIFxuLVx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfYWRkcikge1xuJiM0MztcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X2FkZHIsXG4mIzQzO1x0XHRcdFx0IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZndHBfcGRwX2xvY2spKSB7XG4gXHRcdGlmIChwZHAtXHUwMDNlYWYgPT0gQUZfSU5FVDYgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBpcHY2X3BkcF9hZGRyX2VxdWFsKFx1MDAyNnBkcC1cdTAwM2Vtcy5hZGRyNiwgbXNfYWRkcikpXG4gXHRcdFx0cmV0dXJuIHBkcDtcbkBAIC0xNTU1LDkgJiM0MzsxNTYxLDExIEBAIHN0YXRpYyB2b2lkIGd0cF9kZWxsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4gXHRzdHJ1Y3QgcGRwX2N0eCAqcGN0eDtcbiBcdGludCBpO1xuIFxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2Z3RwX3BkcF9sb2NrKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGd0cC1cdTAwM2VoYXNoX3NpemU7IGkmIzQzOyYjNDM7KVxuIFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBjdHgsIG5leHQsIFx1MDAyNmd0cC1cdTAwM2V0aWRfaGFzaFtpXSwgaGxpc3RfdGlkKVxuIFx0XHRcdHBkcF9jb250ZXh0X2RlbGV0ZShwY3R4KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2Z3RwX3BkcF9sb2NrKTtcbiBcbiBcdGxpc3RfZGVsKFx1MDAyNmd0cC1cdTAwM2VsaXN0KTtcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgaGVhZCk7XG5AQCAtMjA1Myw2ICYjNDM7MjA2MSw3IEBAIHN0YXRpYyBpbnQgZ3RwX2dlbmxfbmV3X3BkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZndHBfcGRwX2xvY2spO1xuIFx0cGN0eCA9IGd0cF9wZHBfYWRkKGd0cCwgc2ssIGluZm8pO1xuIFx0aWYgKElTX0VSUihwY3R4KSkge1xuIFx0XHRlcnIgPSBQVFJfRVJSKHBjdHgpO1xuQEAgLTIwNjAsNiAmIzQzOzIwNjksNyBAQCBzdGF0aWMgaW50IGd0cF9nZW5sX25ld19wZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0Z3RwX3R1bm5lbF9ub3RpZnkocGN0eCwgR1RQX0NNRF9ORVdQRFAsIEdGUF9LRVJORUwpO1xuIFx0XHRlcnIgPSAwO1xuIFx0fVxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZndHBfcGRwX2xvY2spO1xuIFxuIG91dF91bmxvY2s6XG4gXHRydG5sX3VubG9jaygpO1xuQEAgLTIxMzQsNiAmIzQzOzIxNDQsOCBAQCBzdGF0aWMgaW50IGd0cF9nZW5sX2RlbF9wZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdGlmICghaW5mby1cdTAwM2VhdHRyc1tHVFBBX1ZFUlNJT05dKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmd0cF9wZHBfbG9jayk7XG4mIzQzO1xuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFxuIFx0cGN0eCA9IGd0cF9maW5kX3BkcChzb2NrX25ldChza2ItXHUwMDNlc2spLCBpbmZvLVx1MDAzZWF0dHJzKTtcbkBAIC0yMTU0LDYgJiM0MzsyMTY2LDcgQEAgc3RhdGljIGludCBndHBfZ2VubF9kZWxfcGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gb3V0X3VubG9jazpcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZndHBfcGRwX2xvY2spO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTc6MzM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0dUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2d0cF9nZW5sX25ld19wZHAmIzM0OywKICAgICYjMzQ7Z3RwX2dlbmxfZGVsX3BkcCYjMzQ7LAogICAgJiMzNDtndHBfZGVsbGluayYjMzQ7LAogICAgJiMzNDtndHBfZW5jYXBfcmVjdiYjMzQ7LAogICAgJiMzNDtndHBfZGV2X3htaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtdXRleCBgZ3RwX3BkcF9sb2NrYCB0byBwcm90ZWN0IFBEUCBjb250ZXh0IGhhc2ggdGFibGVzIGluIHRoZSBHVFAgZHJpdmVyLiBJdCBtb2RpZmllcyBuZXRsaW5rIGhhbmRsZXJzIChgZ3RwX2dlbmxfbmV3X3BkcGAsIGBndHBfZ2VubF9kZWxfcGRwYCkgYW5kIHRoZSBsaW5rIGRlbGV0aW9uIGhhbmRsZXIgKGBndHBfZGVsbGlua2ApIHRvIGFjcXVpcmUgdGhpcyBsb2NrLCBhbmQgdXBkYXRlcyBSQ1UgbGlzdCB0cmF2ZXJzYWxzIHRvIGNoZWNrIGZvciBpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgbG9ja2luZyBkb2VzIG5vdCBpbnRyb2R1Y2UgZGVhZGxvY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg2MzExNDBmYjJiMTA5YWIxOThkZmU4ODBlYmMyZWIyYjM2ZmEwZTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAxNzozMzoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2d0cC5jIGIvZHJpdmVycy9uZXQvZ3RwLmMKaW5kZXggOWExMmNjNTNkYTAwMi4uMmY2ZTc3Y2NlMzg1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ3RwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZ3RwLmMKQEAgLTEyLDYgJiM0MzsxMiw3IEBACiAjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICYjMzQ7OiAmIzM0OyBmbXQKIAogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VkcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdWxpc3QuaCZndDsKQEAgLTEwOCw2ICYjNDM7MTA5LDcgQEAgc3RydWN0IGd0cF9uZXQgewogfTsKIAogc3RhdGljIHUzMiBndHBfaF9pbml0dmFsOwomIzQzO3N0YXRpYyBERUZJTkVfTVVURVgoZ3RwX3BkcF9sb2NrKTsKIAogc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBndHBfZ2VubF9mYW1pbHk7CiAKQEAgLTE1MSw3ICYjNDM7MTUzLDggQEAgc3RhdGljIHN0cnVjdCBwZHBfY3R4ICpndHAwX3BkcF9maW5kKHN0cnVjdCBndHBfZGV2ICpndHAsIHU2NCB0aWQsIHUxNiBmYW1pbHkpCiAKIAloZWFkID0gJmFtcDtndHAtJmd0O3RpZF9oYXNoW2d0cDBfaGFzaGZuKHRpZCkgJSBndHAtJmd0O2hhc2hfc2l6ZV07CiAKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF90aWQpIHsKJiM0MzsJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfdGlkLAomIzQzOwkJCQkgbG9ja2RlcF9pc19oZWxkKCZhbXA7Z3RwX3BkcF9sb2NrKSkgewogCQlpZiAocGRwLSZndDthZiA9PSBmYW1pbHkgJmFtcDsmYW1wOwogCQkgICAgcGRwLSZndDtndHBfdmVyc2lvbiA9PSBHVFBfVjAgJmFtcDsmYW1wOwogCQkgICAgcGRwLSZndDt1LnYwLnRpZCA9PSB0aWQpCkBAIC0xNjgsNyAmIzQzOzE3MSw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqZ3RwMV9wZHBfZmluZChzdHJ1Y3QgZ3RwX2RldiAqZ3RwLCB1MzIgdGlkLCB1MTYgZmFtaWx5KQogCiAJaGVhZCA9ICZhbXA7Z3RwLSZndDt0aWRfaGFzaFtndHAxdV9oYXNoZm4odGlkKSAlIGd0cC0mZ3Q7aGFzaF9zaXplXTsKIAotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X3RpZCkgewomIzQzOwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF90aWQsCiYjNDM7CQkJCSBsb2NrZGVwX2lzX2hlbGQoJmFtcDtndHBfcGRwX2xvY2spKSB7CiAJCWlmIChwZHAtJmd0O2FmID09IGZhbWlseSAmYW1wOyZhbXA7CiAJCSAgICBwZHAtJmd0O2d0cF92ZXJzaW9uID09IEdUUF9WMSAmYW1wOyZhbXA7CiAJCSAgICBwZHAtJmd0O3UudjEuaV90ZWkgPT0gdGlkKQpAQCAtMTg1LDcgJiM0MzsxODksOCBAQCBzdGF0aWMgc3RydWN0IHBkcF9jdHggKmlwdjRfcGRwX2ZpbmQoc3RydWN0IGd0cF9kZXYgKmd0cCwgX19iZTMyIG1zX2FkZHIpCiAKIAloZWFkID0gJmFtcDtndHAtJmd0O2FkZHJfaGFzaFtpcHY0X2hhc2hmbihtc19hZGRyKSAlIGd0cC0mZ3Q7aGFzaF9zaXplXTsKIAotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X2FkZHIpIHsKJiM0MzsJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfYWRkciwKJiM0MzsJCQkJIGxvY2tkZXBfaXNfaGVsZCgmYW1wO2d0cF9wZHBfbG9jaykpIHsKIAkJaWYgKHBkcC0mZ3Q7YWYgPT0gQUZfSU5FVCAmYW1wOyZhbXA7CiAJCSAgICBwZHAtJmd0O21zLmFkZHIuc19hZGRyID09IG1zX2FkZHIpCiAJCQlyZXR1cm4gcGRwOwpAQCAtMjIwLDcgJiM0MzsyMjUsOCBAQCBzdGF0aWMgc3RydWN0IHBkcF9jdHggKmlwdjZfcGRwX2ZpbmQoc3RydWN0IGd0cF9kZXYgKmd0cCwKIAogCWhlYWQgPSAmYW1wO2d0cC0mZ3Q7YWRkcl9oYXNoW2lwdjZfaGFzaGZuKG1zX2FkZHIpICUgZ3RwLSZndDtoYXNoX3NpemVdOwogCi0JaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfYWRkcikgewomIzQzOwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF9hZGRyLAomIzQzOwkJCQkgbG9ja2RlcF9pc19oZWxkKCZhbXA7Z3RwX3BkcF9sb2NrKSkgewogCQlpZiAocGRwLSZndDthZiA9PSBBRl9JTkVUNiAmYW1wOyZhbXA7CiAJCSAgICBpcHY2X3BkcF9hZGRyX2VxdWFsKCZhbXA7cGRwLSZndDttcy5hZGRyNiwgbXNfYWRkcikpCiAJCQlyZXR1cm4gcGRwOwpAQCAtMTU1NSw5ICYjNDM7MTU2MSwxMSBAQCBzdGF0aWMgdm9pZCBndHBfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQogCXN0cnVjdCBwZHBfY3R4ICpwY3R4OwogCWludCBpOwogCiYjNDM7CW11dGV4X2xvY2soJmFtcDtndHBfcGRwX2xvY2spOwogCWZvciAoaSA9IDA7IGkgJmx0OyBndHAtJmd0O2hhc2hfc2l6ZTsgaSYjNDM7JiM0MzspCiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGN0eCwgbmV4dCwgJmFtcDtndHAtJmd0O3RpZF9oYXNoW2ldLCBobGlzdF90aWQpCiAJCQlwZHBfY29udGV4dF9kZWxldGUocGN0eCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2d0cF9wZHBfbG9jayk7CiAKIAlsaXN0X2RlbCgmYW1wO2d0cC0mZ3Q7bGlzdCk7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCBoZWFkKTsKQEAgLTIwNTMsNiAmIzQzOzIwNjEsNyBAQCBzdGF0aWMgaW50IGd0cF9nZW5sX25ld19wZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAomIzQzOwltdXRleF9sb2NrKCZhbXA7Z3RwX3BkcF9sb2NrKTsKIAlwY3R4ID0gZ3RwX3BkcF9hZGQoZ3RwLCBzaywgaW5mbyk7CiAJaWYgKElTX0VSUihwY3R4KSkgewogCQllcnIgPSBQVFJfRVJSKHBjdHgpOwpAQCAtMjA2MCw2ICYjNDM7MjA2OSw3IEBAIHN0YXRpYyBpbnQgZ3RwX2dlbmxfbmV3X3BkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQlndHBfdHVubmVsX25vdGlmeShwY3R4LCBHVFBfQ01EX05FV1BEUCwgR0ZQX0tFUk5FTCk7CiAJCWVyciA9IDA7CiAJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDtndHBfcGRwX2xvY2spOwogCiBvdXRfdW5sb2NrOgogCXJ0bmxfdW5sb2NrKCk7CkBAIC0yMTM0LDYgJiM0MzsyMTQ0LDggQEAgc3RhdGljIGludCBndHBfZ2VubF9kZWxfcGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJaWYgKCFpbmZvLSZndDthdHRyc1tHVFBBX1ZFUlNJT05dKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwltdXRleF9sb2NrKCZhbXA7Z3RwX3BkcF9sb2NrKTsKJiM0MzsKIAlyY3VfcmVhZF9sb2NrKCk7CiAKIAlwY3R4ID0gZ3RwX2ZpbmRfcGRwKHNvY2tfbmV0KHNrYi0mZ3Q7c2spLCBpbmZvLSZndDthdHRycyk7CkBAIC0yMTU0LDYgJiM0MzsyMTY2LDcgQEAgc3RhdGljIGludCBndHBfZ2VubF9kZWxfcGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAKIG91dF91bmxvY2s6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2d0cF9wZHBfbG9jayk7CiAJcmV0dXJuIGVycjsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDM2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgR1RQIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvbmV0L2d0cC5jYC4gSXQmIzM5O3MgaW50cm9kdWNpbmcgYSBuZXcgbXV0ZXgsIGBndHBfcGRwX2xvY2tgLCBhbmQgdXNpbmcgaXQgaW4gYGd0cF9kZWxsaW5rYCwgYGd0cF9nZW5sX25ld19wZHBgLCBhbmQgYGd0cF9nZW5sX2RlbF9wZHBgLiAgU291bmRzIGxpa2UgdGhleSYjMzk7cmUgYmVlZmluZyB1cCB0aGUgbG9ja2luZyBhcm91bmQgdGhlIFBEUCAoUGFja2V0IERhdGEgUHJvdG9jb2wpIGNvbnRleHQgd2l0aGluIHRoZSBHVFAgZHJpdmVyLiBTbWFydCBtb3ZlLCBsaWtlbHkgYWRkcmVzc2luZyBzb21lIHJhY2UgY29uZGl0aW9uIG9yIGNvbmN1cnJlbmN5IGlzc3VlLgoKSSBzZWUgdGhleSYjMzk7dmUgYWxzbyBhZGRlZCBgbG9ja2RlcF9pc19oZWxkKCZhbXA7Z3RwX3BkcF9sb2NrKWAgY2hlY2tzIHdpdGhpbiB0aG9zZSBgaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1YCBpdGVyYXRpb25zIGluIGBndHAwX3BkcF9maW5kYCwgYGd0cDFfcGRwX2ZpbmRgLCBgaXB2NF9wZHBfZmluZGAsIGFuZCBgaXB2Nl9wZHBfZmluZGAuIEdvb2QsIHRoZXkmIzM5O3JlIGJlaW5nIGNhcmVmdWwgd2l0aCB0aGUgUkNVIChSZWFkLUNvcHktVXBkYXRlKSBtZWNoYW5pc20gaGVyZSwgbWFraW5nIHN1cmUgdGhlIGxvY2sgaXMgaGVsZCB3aGVuIGFwcHJvcHJpYXRlLiBJdCYjMzk7cyBmdW5jdGlvbmFsLCBtZWFuaW5nIGl0JiMzOTtzIGNoYW5naW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgZHJpdmVyLCBhbmQgcG90ZW50aWFsbHkgZml4aW5nIGEgYnVnIG9yIGltcHJvdmluZyBwZXJmb3JtYW5jZS4KCkdUUCBpcyBhIG5ldHdvcmsgZHJpdmVyLCBhbmQgY29uc2lkZXJpbmcgaXRzIHJvbGUgaW4gdHVubmVsaW5nLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIHVzZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgdG8gc2VlIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIG1pZ2h0IGJlIHJlbGF0ZWQgdG8gR1RQLiBUaW1lIHRvIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCBzZWFyY2ggZm9yIHNvbWV0aGluZyBsaWtlIGBjb25maWcgR1RQYCBvciBgR1RQYCBpbiBgZHJpdmVycy9uZXQvS2NvbmZpZ2AuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gaXMgZW5hYmxlZCBmb3IgdGhpcyBwYXRjaCB0byBldmVuIGJlIHJlbGV2YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE3OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBHVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MjYwPWNvbmZpZyBCQVJFVURQXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNzEtXG5kcml2ZXJzL25ldC9LY29uZmlnOjI3Mjpjb25maWcgR1RQXG5kcml2ZXJzL25ldC9LY29uZmlnLTI3My1cdHRyaXN0YXRlIFwmIzM0O0dQUlMgVHVubmVsaW5nIFByb3RvY29sIGRhdGFwYXRoIChHVFAtVSlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTMwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgbmV0d29yayBkcml2ZXIuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBkcml2ZXJzL25ldC9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDI3Mi4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZXNlIHRoaW5ncyBpcyBkZWZpbmVkLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIHJlbGV2YW50IGBjb25maWdgIG9wdGlvbnMsIHRoZWlyIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBjb21wb25lbnRzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIGltcGFjdGluZyBpdHMgYmVoYXZpb3IuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGBkZXBlbmRzIG9uYCwgYHNlbGVjdGAsIG9yIGBkZWZhdWx0YCBjbGF1c2VzIHRoYXQgZGljdGF0ZSB3aGVuIGFuZCBob3cgdGhpcyBkcml2ZXIgZ2V0cyBidWlsdC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGhhbmRsZSBvbiBob3cgaXQmIzM5O3MgaW50ZW5kZWQgdG8gYmUgY29uZmlndXJlZCB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBGcm9tIGhlcmUsIEkgY2FuIHRoZW4gc3RhcnQgdG8gaW5mZXIgaXRzIGltcGxpY2F0aW9ucyBhbmQgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBjb21wb25lbnRzIG9mIHRoZSBrZXJuZWwgbmV0d29yayBzdGFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI3MDpcdFx0ICB3aWxsIGJlIGNhbGxlZCBiYXJldWRwLlxuIDI3MTpcdFxuIDI3MjpcdGNvbmZpZyBHVFBcbiAyNzM6XHRcdHRyaXN0YXRlIFwmIzM0O0dQUlMgVHVubmVsaW5nIFByb3RvY29sIGRhdGFwYXRoIChHVFAtVSlcJiMzNDtcbiAyNzQ6XHRcdGRlcGVuZHMgb24gSU5FVFxuIDI3NTpcdFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4gMjc2Olx0XHRoZWxwXG4gMjc3Olx0XHQgIFRoaXMgYWxsb3dzIG9uZSB0byBjcmVhdGUgZ3RwIHZpcnR1YWwgaW50ZXJmYWNlcyB0aGF0IHByb3ZpZGVcbiAyNzg6XHRcdCAgdGhlIEdQUlMgVHVubmVsaW5nIFByb3RvY29sIGRhdGFwYXRoIChHVFAtVSkuIFRoaXMgdHVubmVsaW5nIHByb3RvY29sXG4gMjc5Olx0XHQgIGlzIHVzZWQgdG8gcHJldmVudCBzdWJzY3JpYmVycyBmcm9tIGFjY2Vzc2luZyBtb2JpbGUgY2FycmllciBjb3JlXG4gMjgwOlx0XHQgIG5ldHdvcmsgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIGEgdXNlcnNwYWNlIHNvZnR3YXJlIHRoYXRcbiAyODE6XHRcdCAgaW1wbGVtZW50cyB0aGUgc2lnbmFsaW5nIHByb3RvY29sIChHVFAtQykgdG8gdXBkYXRlIGl0cyBQRFAgY29udGV4dFxuIDI4MjpcdFx0ICBiYXNlLCBzdWNoIGFzIE9wZW5HR1NOIFx1MDAzY2h0dHA6Ly9naXQub3Ntb2NvbS5vcmcvb3Blbmdnc24vKS4gVGhpc1xuIDI4MzpcdFx0ICB0dW5uZWxpbmcgcHJvdG9jb2wgaXMgaW1wbGVtZW50ZWQgYWNjb3JkaW5nIHRvIHRoZSBHU00gVFMgMDkuNjAgYW5kXG4gMjg0Olx0XHQgIDNHUFAgVFMgMjkuMDYwIHN0YW5kYXJkcy5cbiAyODU6XHRcbiAyODY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlcnMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAyODc6XHRcdCAgd2lsbCBiZSBjYWxsZWQgZ3RwLlxuIDI4ODpcdFxuIDI4OTpcdGNvbmZpZyBQRkNQXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTc6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcxMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgR1RQIENvbmZpZ3VyYXRpb24gUGF0Y2gqKgoKT2theSwgc28gdGhlIGNvbmZpZyBoZXJlIGlzIGBHVFBgLCBhbmQgaXQmIzM5O3MgZGVwZW5kZW50IG9uIGBJTkVUYC4gVGhhdCBtZWFucyBJIGRlZmluaXRlbHkgbmVlZCB0byBtYWtlIHN1cmUgYEdUUGAgaXMgaW5jbHVkZWQgaW4gYEVuYWJsZUNvbmZpZ3NgLiBUaGF0JiMzOTtzIGEgbm8tYnJhaW5lci4KCk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGtleSBmdW5jdGlvbnMgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjaGFuZ2VzLiBUaGUgcGF0Y2ggYWZmZWN0cyBgZ3RwX2RlbGxpbmtgLCBgZ3RwX2dlbmxfbmV3X3BkcGAsIGBndHBfZ2VubF9kZWxfcGRwYCwgYGd0cDBfcGRwX2ZpbmRgLCBgZ3RwMV9wZHBfZmluZGAsIGBpcHY0X3BkcF9maW5kYCwgYW5kIGBpcHY2X3BkcF9maW5kYC4KCmBndHBfZ2VubF9uZXdfcGRwYCBhbmQgYGd0cF9nZW5sX2RlbF9wZHBgIGltbWVkaWF0ZWx5IHN0YW5kIG91dCBhcyBpbXBvcnRhbnQuIFRoZXkmIzM5O3JlIG5ldGxpbmsgaGFuZGxlcnMgc3BlY2lmaWNhbGx5IGZvciBHVFAsIHNvIHRob3NlIGFyZSBkZWZpbml0ZWx5IGdvb2QgY2FuZGlkYXRlcy4gYGd0cF9kZWxsaW5rYCBpcyB0aGUgcnRubCBsaW5rIGRlbGV0ZSBoYW5kbGVyLCBzbyB0aGF0JiMzOTtzIGFsc28gaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBsaW5rIGxpZmVjeWNsZS4gVGhlIGAqX3BkcF9maW5kYCBmdW5jdGlvbnMgYXJlIGludGVybmFsIGhlbHBlcnMsIHNvIHdoaWxlIHRoZXkgYXJlIHJlbGV2YW50LCB0aGV5IG1heSBub3QgYmUgdGhlIHByaW1hcnkgZW50cnlwb2ludHMuCgpUaGUgZ3VpZGFuY2Ugc2F5cyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IG1ha2VzIHNlbnNlLCBiZWNhdXNlIEkgd2FudCB0byBsb29rIGF0IGZ1bmN0aW9ucyB3aXRoIGRpc3RpbmN0IGFkZHJlc3NlcyBhbmQgdGhhdCBhcmVuJiMzOTt0IG92ZXJseSBvcHRpbWl6ZWQgYXdheSBieSB0aGUgY29tcGlsZXIuIFNvLCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgYGd0cF9nZW5sX25ld19wZHBgIGFuZCBgZ3RwX2dlbmxfZGVsX3BkcGAgYXJlIHN0YXRpYy4gQWgsIHRoZXkgYXJlISBIb3dldmVyLCB0aGV5IGFyZSBuZXRsaW5rIGNhbGxiYWNrcywgc28gaXQgc2VlbXMgdW5saWtlbHkgdGhleSYjMzk7cmUgaW5saW5lZC4gSSBuZWVkIHRvIGNoZWNrIHdoZXJlIHRoZXkgYXJlIHVzZWQgd2l0aGluIGBkcml2ZXJzL25ldC9ndHAuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3RwX2dlbmxfbmV3X3BkcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2d0cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2d0cC5jPTIwMTI9c3RhdGljIGludCBndHBfdHVubmVsX25vdGlmeShzdHJ1Y3QgcGRwX2N0eCAqcGN0eCwgdTggY21kLCBnZnBfdCBhbGxvY2F0aW9uKTtcbmRyaXZlcnMvbmV0L2d0cC5jLTIwMTMtXG5kcml2ZXJzL25ldC9ndHAuYzoyMDE0OnN0YXRpYyBpbnQgZ3RwX2dlbmxfbmV3X3BkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuZHJpdmVycy9uZXQvZ3RwLmMtMjAxNS17XG4tLVxuZHJpdmVycy9uZXQvZ3RwLmM9MjQ0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIGd0cF9nZW5sX29wc1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTI0NDktXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbmRyaXZlcnMvbmV0L2d0cC5jOjI0NTA6XHRcdC5kb2l0ID0gZ3RwX2dlbmxfbmV3X3BkcCxcbmRyaXZlcnMvbmV0L2d0cC5jLTI0NTEtXHRcdC5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Nzg1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgY29uc2lkZXJpbmcgSSYjMzk7bSBzZWVpbmcgdGhpcyBjb2RlOgoKKipBbmFseXppbmcgQ2FsbGJhY2sgVXNhZ2UgYW5kIEVudHJ5IFBvaW50cyoqCgpBbHJpZ2h0LCBzbyB0aGUgYC5kb2l0YCBjYWxsYmFja3Mgd2l0aGluIGBndHBfZ2VubF9vcHNgIGFyZSBkZWZpbml0ZWx5ICpub3QqIGlubGluZWQuIFRoZXkgYXJlIGNsZWFybHkgY2FsbGVkIGFzIGZ1bmN0aW9ucy4gVGhlIHNhbWUgZ29lcyBmb3IgYGd0cF9nZW5sX2RlbF9wZHBgLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgbWFrZXMgZGVidWdnaW5nIGEgYml0IGVhc2llci4KCkFuZCBpdCBsb29rcyBsaWtlIGBndHBfZGVsbGlua2AgaXMgb3BlcmF0aW5nIGFzIGEgYC5kZWxsaW5rYCBjYWxsIGluIGBydG5sX2xpbmtfb3BzYC4gVGhpcyBpcyBhbGwgbWFraW5nIHNlbnNlIHNvIGZhci4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgc2NhbiBmb3IgKm90aGVyKiBlbnRyeSBwb2ludHMgdGhhdCBtaWdodCBiZSBjYWxsaW5nIGAqX3BkcF9maW5kYC4gSSBuZWVkIHRvIGVuc3VyZSBJJiMzOTt2ZSBjb3ZlcmVkIGFsbCB0aGUgcmVsZXZhbnQgY2FsbHMgdG8gdGhhdCBmdW5jdGlvbiwgdG8gYXZvaWQgbWlzc2luZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIGFyZWFzIG9mIG9wdGltaXphdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgaW4gcGxheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3RwMF9wZHBfZmluZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2d0cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2d0cC5jPTE0Mj1zdGF0aWMgdTMyIGlwdjZfaGFzaGZuKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqaXA2KVxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTE0OC0vKiBSZXNvbHZlIGEgUERQIGNvbnRleHQgc3RydWN0dXJlIGJhc2VkIG9uIHRoZSA2NGJpdCBUSUQuICovXG5kcml2ZXJzL25ldC9ndHAuYzoxNDk6c3RhdGljIHN0cnVjdCBwZHBfY3R4ICpndHAwX3BkcF9maW5kKHN0cnVjdCBndHBfZGV2ICpndHAsIHU2NCB0aWQsIHUxNiBmYW1pbHkpXG5kcml2ZXJzL25ldC9ndHAuYy0xNTAte1xuLS1cbmRyaXZlcnMvbmV0L2d0cC5jPTU4Nj1zdGF0aWMgaW50IGd0cDBfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IGd0cF9kZXYgKmd0cCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC9ndHAuYy02MTktXG5kcml2ZXJzL25ldC9ndHAuYzo2MjA6XHRwY3R4ID0gZ3RwMF9wZHBfZmluZChndHAsIGJlNjRfdG9fY3B1KGd0cDAtXHUwMDNldGlkKSxcbmRyaXZlcnMvbmV0L2d0cC5jLTYyMS1cdFx0XHQgICAgIGd0cF9wcm90b190b19mYW1pbHkoaW5uZXJfcHJvdG8pKTtcbi0tXG5kcml2ZXJzL25ldC9ndHAuYz0xODMyPXN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqZ3RwX3BkcF9hZGQoc3RydWN0IGd0cF9kZXYgKmd0cCwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTE4ODYtXHRpZiAodmVyc2lvbiA9PSBHVFBfVjApXG5kcml2ZXJzL25ldC9ndHAuYzoxODg3Olx0XHRwY3R4X3RpZCA9IGd0cDBfcGRwX2ZpbmQoZ3RwLFxuZHJpdmVycy9uZXQvZ3RwLmMtMTg4OC1cdFx0XHRcdFx0IG5sYV9nZXRfdTY0KGluZm8tXHUwMDNlYXR0cnNbR1RQQV9USURdKSxcbi0tXG5kcml2ZXJzL25ldC9ndHAuYz0yMDc5PXN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqZ3RwX2ZpbmRfcGRwX2J5X2xpbmsoc3RydWN0IG5ldCAqbmV0LFxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTIxMTItXHRcdGlmIChndHBfdmVyc2lvbiA9PSBHVFBfVjAgXHUwMDI2XHUwMDI2IG5sYVtHVFBBX1RJRF0pIHtcbmRyaXZlcnMvbmV0L2d0cC5jOjIxMTM6XHRcdFx0cmV0dXJuIGd0cDBfcGRwX2ZpbmQoZ3RwLCBubGFfZ2V0X3U2NChubGFbR1RQQV9USURdKSxcbmRyaXZlcnMvbmV0L2d0cC5jLTIxMTQtXHRcdFx0XHRcdCAgICAgZmFtaWx5KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY2NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKlVEUCBQYWNrZXQgUmVjZXB0aW9uIGFuZCBHVFAgVHVubmVsIExvb2t1cCoqCgpPa2F5LCBzbyBgZ3RwMF91ZHBfZW5jYXBfcmVjdmAgaGFzIGJlZW4gdHJpZ2dlcmVkOyBpdCYjMzk7cyBhIFVEUCBwYWNrZXQgY29taW5nIGluLCBsaWtlbHkgZW5jYXBzdWxhdGVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRvIGRvIHdpdGggaXQuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNoZWNrIGlmIHRoaXMgaXMgYSBHVFAgcGFja2V0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBHVFAgbG9va3VwIHByb2Nlc3MuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBwYWNrZXQgYmVsb25ncyB0byBhbiBleGlzdGluZyBQRFAgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBjYWxsIGBndHAxX3BkcF9maW5kYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2d0cDFfcGRwX2ZpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ndHAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ndHAuYz0xNDk9c3RhdGljIHN0cnVjdCBwZHBfY3R4ICpndHAwX3BkcF9maW5kKHN0cnVjdCBndHBfZGV2ICpndHAsIHU2NCB0aWQsIHUxNiBmYW1pbHkpXG4tLVxuZHJpdmVycy9uZXQvZ3RwLmMtMTY2LS8qIFJlc29sdmUgYSBQRFAgY29udGV4dCBzdHJ1Y3R1cmUgYmFzZWQgb24gdGhlIDMyYml0IFRFSS4gKi9cbmRyaXZlcnMvbmV0L2d0cC5jOjE2NzpzdGF0aWMgc3RydWN0IHBkcF9jdHggKmd0cDFfcGRwX2ZpbmQoc3RydWN0IGd0cF9kZXYgKmd0cCwgdTMyIHRpZCwgdTE2IGZhbWlseSlcbmRyaXZlcnMvbmV0L2d0cC5jLTE2OC17XG4tLVxuZHJpdmVycy9uZXQvZ3RwLmM9Nzk0PXN0YXRpYyBpbnQgZ3RwMXVfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IGd0cF9kZXYgKmd0cCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC9ndHAuYy04NDYtXG5kcml2ZXJzL25ldC9ndHAuYzo4NDc6XHRwY3R4ID0gZ3RwMV9wZHBfZmluZChndHAsIG50b2hsKGd0cDEtXHUwMDNldGlkKSxcbmRyaXZlcnMvbmV0L2d0cC5jLTg0OC1cdFx0XHQgICAgIGd0cF9wcm90b190b19mYW1pbHkoaW5uZXJfcHJvdG8pKTtcbi0tXG5kcml2ZXJzL25ldC9ndHAuYz0xODMyPXN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqZ3RwX3BkcF9hZGQoc3RydWN0IGd0cF9kZXYgKmd0cCwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTE4OTAtXHRlbHNlIGlmICh2ZXJzaW9uID09IEdUUF9WMSlcbmRyaXZlcnMvbmV0L2d0cC5jOjE4OTE6XHRcdHBjdHhfdGlkID0gZ3RwMV9wZHBfZmluZChndHAsXG5kcml2ZXJzL25ldC9ndHAuYy0xODkyLVx0XHRcdFx0XHQgbmxhX2dldF91MzIoaW5mby1cdTAwM2VhdHRyc1tHVFBBX0lfVEVJXSksXG4tLVxuZHJpdmVycy9uZXQvZ3RwLmM9MjA3OT1zdGF0aWMgc3RydWN0IHBkcF9jdHggKmd0cF9maW5kX3BkcF9ieV9saW5rKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5kcml2ZXJzL25ldC9ndHAuYy0yMTE1LVx0XHR9IGVsc2UgaWYgKGd0cF92ZXJzaW9uID09IEdUUF9WMSBcdTAwMjZcdTAwMjYgbmxhW0dUUEFfSV9URUldKSB7XG5kcml2ZXJzL25ldC9ndHAuYzoyMTE2Olx0XHRcdHJldHVybiBndHAxX3BkcF9maW5kKGd0cCwgbmxhX2dldF91MzIobmxhW0dUUEFfSV9URUldKSxcbmRyaXZlcnMvbmV0L2d0cC5jLTIxMTctXHRcdFx0XHRcdCAgICAgZmFtaWx5KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ1NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgR1RQIEVuY2Fwc3VsYXRpb24gUmVjZWl2ZSBGdW5jdGlvbnMqKgoKQWxyaWdodCwgSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IHRoZXNlIGBndHAwX3VkcF9lbmNhcF9yZWN2YCBhbmQgYGd0cDF1X3VkcF9lbmNhcF9yZWN2YCBmdW5jdGlvbnMuIFRoZXkgaW1tZWRpYXRlbHkgc3RyaWtlIG1lIGFzIGRlY2VudCBjYW5kaWRhdGVzIGZvciBpbnZlc3RpZ2F0aW9uLiBCdXQgaGFuZyBvbiBhIHNlY29uZC4uLiB0aGVzZSBhcmUgc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggY2hhbmdlcyB0aGluZ3MgYSBiaXQuIFN0YXRpYyBmdW5jdGlvbnMgbWVhbiB0aGV5JiMzOTtyZSBmaWxlLWxvY2FsLCBzbyBteSBuZXh0IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIGNvbXBpbGVyIGlzIGJlaW5nIGNsZXZlciBhbmQgaW5saW5pbmcgdGhlbSBvciBpZiB0aGV5IGFyZSBiZWluZyB1c2VkIG1vcmUgaW5kaXJlY3RseSwgbGlrZSBhcyBjYWxsYmFja3MuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBhcHByb2FjaCBpcyBiZWluZyB1c2VkIGhlcmUgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2d0cDBfdWRwX2VuY2FwX3JlY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ndHAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ndHAuYz01NzA9c3RhdGljIGludCBndHBfcHJvdG9fdG9fZmFtaWx5KF9fdTE2IHByb3RvKVxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTU4NS0vKiAxIG1lYW5zIHBhc3MgdXAgdG8gdGhlIHN0YWNrLCAtMSBtZWFucyBkcm9wIGFuZCAwIG1lYW5zIGRlY2Fwc3VsYXRlZC4gKi9cbmRyaXZlcnMvbmV0L2d0cC5jOjU4NjpzdGF0aWMgaW50IGd0cDBfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IGd0cF9kZXYgKmd0cCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L2d0cC5jLTU4Ny17XG4tLVxuZHJpdmVycy9uZXQvZ3RwLmM9OTA5PXN0YXRpYyBpbnQgZ3RwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTkyMi1cdFx0bmV0ZGV2X2RiZyhndHAtXHUwMDNlZGV2LCBcJiMzNDtyZWNlaXZlZCBHVFAwIHBhY2tldFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ndHAuYzo5MjM6XHRcdHJldCA9IGd0cDBfdWRwX2VuY2FwX3JlY3YoZ3RwLCBza2IpO1xuZHJpdmVycy9uZXQvZ3RwLmMtOTI0LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk4OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqR1RQIEVuY2Fwc3VsYXRpb246IEEgUXVpY2sgTWVudGFsIENoZWNrKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIEdUUCBlbmNhcHN1bGF0aW9uIHByb2Nlc3MsIGFuZCB0aGUgY2FsbCBzdGFjayBpcyBsZWFkaW5nIG1lIHRvIGBndHBfZW5jYXBfcmVjdmAuIEhtbSwgaXMgYGd0cF9lbmNhcF9yZWN2YCBhIGRpcmVjdCBmdW5jdGlvbiBjYWxsIG9yIGlzIGl0IGEgY2FsbGJhY2sgZnVuY3Rpb24gcmVnaXN0ZXJlZCBzb21ld2hlcmU/IFRoYXQmIzM5O3MgdGhlIGNvcmUgcXVlc3Rpb24gSSBuZWVkIHRvIGFuc3dlciBxdWlja2x5LiBVbmRlcnN0YW5kaW5nIHRoYXQgbWVjaGFuaXNtIHdpbGwgaW5mbHVlbmNlIG15IG5leHQgbW92ZSBpbiBkZWJ1Z2dpbmcgb3Igb3B0aW1pemluZyBpdC4gSXMgdGhpcyBhIHN5bmNocm9ub3VzIG9yIGFzeW5jaHJvbm91cyBmdW5jdGlvbj8gVGhlIGFuc3dlciBncmVhdGx5IGFmZmVjdHMgaG93IEkgc2hvdWxkIGludGVycHJldCB0aGlzLiBUaGlzIHdpbGwgaW5mbHVlbmNlIGhvdyBJIHNob3VsZCBpbnRlcnByZXQgdGhlIGZsb3cgb2YgZGF0YS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3RwX2VuY2FwX3JlY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ndHAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ndHAuYz04OTI9c3RhdGljIHZvaWQgZ3RwX2VuY2FwX2Rpc2FibGUoc3RydWN0IGd0cF9kZXYgKmd0cClcbi0tXG5kcml2ZXJzL25ldC9ndHAuYy05MDgtICovXG5kcml2ZXJzL25ldC9ndHAuYzo5MDk6c3RhdGljIGludCBndHBfZW5jYXBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC9ndHAuYy05MTAte1xuLS1cbmRyaXZlcnMvbmV0L2d0cC5jPTE0MTA9c3RhdGljIHN0cnVjdCBzb2NrICpndHBfY3JlYXRlX3NvY2soaW50IHR5cGUsIHN0cnVjdCBndHBfZGV2ICpndHAsXG4tLVxuZHJpdmVycy9uZXQvZ3RwLmMtMTQ0MC1cdHR1bmNmZy5lbmNhcF90eXBlID0gdHlwZTtcbmRyaXZlcnMvbmV0L2d0cC5jOjE0NDE6XHR0dW5jZmcuZW5jYXBfcmN2ID0gZ3RwX2VuY2FwX3JlY3Y7XG5kcml2ZXJzL25ldC9ndHAuYy0xNDQyLVx0dHVuY2ZnLmVuY2FwX2Rlc3Ryb3kgPSBOVUxMO1xuLS1cbmRyaXZlcnMvbmV0L2d0cC5jPTE2NTc9c3RhdGljIHN0cnVjdCBzb2NrICpndHBfZW5jYXBfZW5hYmxlX3NvY2tldChpbnQgZmQsIGludCB0eXBlLFxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTE2OTctXHR0dW5jZmcuZW5jYXBfdHlwZSA9IHR5cGU7XG5kcml2ZXJzL25ldC9ndHAuYzoxNjk4Olx0dHVuY2ZnLmVuY2FwX3JjdiA9IGd0cF9lbmNhcF9yZWN2O1xuZHJpdmVycy9uZXQvZ3RwLmMtMTY5OS1cdHR1bmNmZy5lbmNhcF9kZXN0cm95ID0gZ3RwX2VuY2FwX2Rlc3Ryb3k7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE3OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NjkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkNvbnNpZGVyaW5nIGBndHBfZW5jYXBfcmVjdmAgZm9yIHRoZSBUYXNrKioKCk9rYXksIHNvIEkgcmVtZW1iZXIgbm93LiBgZ3RwX2VuY2FwX3JlY3ZgIGlzIGluZGVlZCB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyBhc3NpZ25lZCBhcyB0aGUgYGVuY2FwX3JjdmAgY2FsbGJhY2sgd2l0aGluIHRoZSBgdWRwX3R1bm5lbF9zb2NrX2NmZ2Agc3RydWN0dXJlLiBUaGF0IG1ha2VzIGl0IGEgc3Ryb25nIGNvbnRlbmRlciBmb3Igd2hhdCBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHJpZ2h0IG5vdy4gSXQgc2VlbXMgbG9naWNhbC4KCk5vdywgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIHJlbGF0ZWQgUERQIGZpbmQgZnVuY3Rpb25zLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBkYXRhIGZsb3cgaXMgbG9naWNhbC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGJvdGggYGlwdjRfcGRwX2ZpbmRgIGFuZCBgaXB2Nl9wZHBfZmluZGAgdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgc3lzdGVtJiMzOTtzIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2NF9wZHBfZmluZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2d0cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2d0cC5jPTE2Nz1zdGF0aWMgc3RydWN0IHBkcF9jdHggKmd0cDFfcGRwX2ZpbmQoc3RydWN0IGd0cF9kZXYgKmd0cCwgdTMyIHRpZCwgdTE2IGZhbWlseSlcbi0tXG5kcml2ZXJzL25ldC9ndHAuYy0xODQtLyogUmVzb2x2ZSBhIFBEUCBjb250ZXh0IGJhc2VkIG9uIElQdjQgYWRkcmVzcyBvZiBNUy4gKi9cbmRyaXZlcnMvbmV0L2d0cC5jOjE4NTpzdGF0aWMgc3RydWN0IHBkcF9jdHggKmlwdjRfcGRwX2ZpbmQoc3RydWN0IGd0cF9kZXYgKmd0cCwgX19iZTMyIG1zX2FkZHIpXG5kcml2ZXJzL25ldC9ndHAuYy0xODYte1xuLS1cbmRyaXZlcnMvbmV0L2d0cC5jPTExNzU9c3RhdGljIGludCBndHBfYnVpbGRfc2tiX2lwNChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTExODgtXHRpZiAoZ3RwLVx1MDAzZXJvbGUgPT0gR1RQX1JPTEVfU0dTTilcbmRyaXZlcnMvbmV0L2d0cC5jOjExODk6XHRcdHBjdHggPSBpcHY0X3BkcF9maW5kKGd0cCwgaXBoLVx1MDAzZXNhZGRyKTtcbmRyaXZlcnMvbmV0L2d0cC5jLTExOTAtXHRlbHNlXG5kcml2ZXJzL25ldC9ndHAuYzoxMTkxOlx0XHRwY3R4ID0gaXB2NF9wZHBfZmluZChndHAsIGlwaC1cdTAwM2VkYWRkcik7XG5kcml2ZXJzL25ldC9ndHAuYy0xMTkyLVxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jPTE4MzI9c3RhdGljIHN0cnVjdCBwZHBfY3R4ICpndHBfcGRwX2FkZChzdHJ1Y3QgZ3RwX2RldiAqZ3RwLCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxuZHJpdmVycy9uZXQvZ3RwLmMtMTg2OS1cdFx0aGFzaF9tcyA9IGlwdjRfaGFzaGZuKG1zX2FkZHIpICUgZ3RwLVx1MDAzZWhhc2hfc2l6ZTtcbmRyaXZlcnMvbmV0L2d0cC5jOjE4NzA6XHRcdHBjdHggPSBpcHY0X3BkcF9maW5kKGd0cCwgbXNfYWRkcik7XG5kcml2ZXJzL25ldC9ndHAuYy0xODcxLVx0XHRicmVhaztcbi0tXG5kcml2ZXJzL25ldC9ndHAuYz0yMDc5PXN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqZ3RwX2ZpbmRfcGRwX2J5X2xpbmsoc3RydWN0IG5ldCAqbmV0LFxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTIwOTYtXG5kcml2ZXJzL25ldC9ndHAuYzoyMDk3Olx0XHRyZXR1cm4gaXB2NF9wZHBfZmluZChndHAsIGlwKTtcbmRyaXZlcnMvbmV0L2d0cC5jLTIwOTgtXHR9IGVsc2UgaWYgKG5sYVtHVFBBX01TX0FERFI2XSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDMzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBjb2RlIGZsb3csIGV4cHJlc3NlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipNeSBNZW50YWwgTWFwcGluZyBvZiBJUCB2NCBQYWNrZXQgRGF0YSBQcm90b2NvbCBIYW5kbGluZyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhpcyBJUCB2NCBwYWNrZXQgcGF0aCwgYW5kIGl0IGxvb2tzIGxpa2UgYGlwdjRfcGRwX2ZpbmRgIGlzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIGhlcmUuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoYXQgaXQmIzM5O3MgYmVpbmcgaW52b2tlZCB3aXRoaW4gYGd0cF9idWlsZF9za2JfaXA0YC4gQW5kIHdoZXJlIGRvZXMgKnRoYXQqIGdldCBjYWxsZWQgZnJvbT8gT2gsIHJpZ2h0LCBpdCYjMzk7cyB0aGUgYGd0cF94bWl0YCBmdW5jdGlvbi4gU28sIGlmIEkmIzM5O20gdW5kZXJzdGFuZGluZyB0aGlzIGNvcnJlY3RseSwgdGhlIGBpcHY0X3BkcF9maW5kYCBmdW5jdGlvbiBpcyBwcm9iYWJseSB0aGUgaGVhcnQgb2YgSVAgdjQgcGFja2V0IGRhdGEgcHJvdG9jb2wgbG9va3VwLCBhbmQgaXQmIzM5O3MgZXNzZW50aWFsIGZvciB0aGUgdHJhbnNtaXNzaW9uIHByb2Nlc3MuIFRoaXMgY29uZmlybXMgd2hhdCBJIGV4cGVjdGVkOiB0aGUgbmV0d29yayBzdGFjayB1c2VzIGEgc2VyaWVzIG9mIGxheWVycy4gTG9va3MgbGlrZSBHVFAgdHJhbnNtaXNzaW9uIHdpbGwgYnVpbGQgYW4gc2tiIHdpdGggYGd0cF9idWlsZF9za2JfaXA0YCwgYWZ0ZXIgaXQgZmluZHMgdGhlIFBEUCBjb250ZXh0IGZvciB0aGUgSVB2NCBwYWNrZXQsIHVzaW5nIGBpcHY0X3BkcF9maW5kYC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoZSBQRFAgY29udGV4dCB0byBjb25zdHJ1Y3QgYW5kIHRyYW5zbWl0IHRoZSBwYWNrZXQuIEkgc2hvdWxkIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgUERQIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2d0cF9idWlsZF9za2JfaXA0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZ3RwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZ3RwLmM9MTExOD1zdGF0aWMgaW50IGd0cF9idWlsZF9za2Jfb3V0ZXJfaXA2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ndHAuYy0xMTc0LVxuZHJpdmVycy9uZXQvZ3RwLmM6MTE3NTpzdGF0aWMgaW50IGd0cF9idWlsZF9za2JfaXA0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9ndHAuYy0xMTc2LVx0XHRcdCAgICAgc3RydWN0IGd0cF9wa3RpbmZvICpwa3RpbmZvKVxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jPTEyNzQ9c3RhdGljIG5ldGRldl90eF90IGd0cF9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTEyOTItXHRjYXNlIEVUSF9QX0lQOlxuZHJpdmVycy9uZXQvZ3RwLmM6MTI5MzpcdFx0ZXJyID0gZ3RwX2J1aWxkX3NrYl9pcDQoc2tiLCBkZXYsIFx1MDAyNnBrdGluZm8pO1xuZHJpdmVycy9uZXQvZ3RwLmMtMTI5NC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE3OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDMwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEdUUCBJbXBsZW1lbnRhdGlvbiBPdmVydmlldyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIEdUUCBpbXBsZW1lbnRhdGlvbiBoZXJlLiBSaWdodCwgYGd0cF9kZXZfeG1pdGAgaXMgY3J1Y2lhbCDigJMgdGhhdCYjMzk7cyB0aGUgZXF1aXZhbGVudCBvZiB0aGUgYG5kb19zdGFydF94bWl0YCBjYWxsYmFjaywgdGhlIG9uZSB0aGF0IGtpY2tzIG9mZiBwYWNrZXQgdHJhbnNtaXNzaW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBjYWxsaW5nIHNlcXVlbmNlLgoKVGhlcmVmb3JlLCB0aGUga2V5IGVudHJ5IHBvaW50cyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlOgoKKiAgIGBndHBfZ2VubF9uZXdfcGRwYCAtIGZvciBjcmVhdGluZyBhIG5ldyBQRFAgY29udGV4dAoqICAgYGd0cF9nZW5sX2RlbF9wZHBgIC0gdG8gcmVtb3ZlIG9uZQoqICAgYGd0cF9kZWxsaW5rYCAtIGFuZCBJIHN1c3BlY3QgdGhpcyBvbmUgaGFuZGxlcyBsaW5rIGRlbGV0aW9uLCBidXQgSSBzaG91bGQgdmVyaWZ5IHRoYXQuCiogICBgZ3RwX2VuY2FwX3JlY3ZgIC0gZm9yIHByb2Nlc3NpbmcgaW5jb21pbmcgZW5jYXBzdWxhdGVkIHBhY2tldHMKKiAgIGBndHBfZGV2X3htaXRgIC0gdGhlIGhlYXJ0IG9mIHBhY2tldCB0cmFuc21pc3Npb24KCkkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGd0cF9kZWxsaW5rYCB0cnVseSBjb3JyZXNwb25kcyB0byB0aGUgYGRlbGxpbmtgIGNhbGxiYWNrIGZ1bmN0aW9uLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8ga2VlcCB0aGVzZSBjYWxsYmFjayBhc3NvY2lhdGlvbnMgc3RyYWlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2d0cF9kZWxsaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZ3RwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZ3RwLmM9MTQ3NT1zdGF0aWMgaW50IGd0cF9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvZ3RwLmMtMTU1Ni1cbmRyaXZlcnMvbmV0L2d0cC5jOjE1NTc6c3RhdGljIHZvaWQgZ3RwX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbmRyaXZlcnMvbmV0L2d0cC5jLTE1NTgte1xuLS1cbmRyaXZlcnMvbmV0L2d0cC5jPTE2MTg9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGd0cF9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTE2MjUtXHQubmV3bGlua1x0PSBndHBfbmV3bGluayxcbmRyaXZlcnMvbmV0L2d0cC5jOjE2MjY6XHQuZGVsbGlua1x0PSBndHBfZGVsbGluayxcbmRyaXZlcnMvbmV0L2d0cC5jLTE2MjctXHQuZ2V0X3NpemVcdD0gZ3RwX2dldF9zaXplLFxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jPTI0OTc9c3RhdGljIHZvaWQgX19uZXRfZXhpdCBndHBfbmV0X2V4aXRfcnRubChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxuZHJpdmVycy9uZXQvZ3RwLmMtMjUwMy1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShndHAsIGd0cF9uZXh0LCBcdTAwMjZnbi1cdTAwM2VndHBfZGV2X2xpc3QsIGxpc3QpXG5kcml2ZXJzL25ldC9ndHAuYzoyNTA0Olx0XHRndHBfZGVsbGluayhndHAtXHUwMDNlZGV2LCBkZXZfdG9fa2lsbCk7XG5kcml2ZXJzL25ldC9ndHAuYy0yNTA1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NjQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkZvY3VzaW5nIG9uIHRoZSBHVFAgRGF0YSBQbGFuZSoqCgpBbHJpZ2h0LCBzbyBgZ3RwX2RlbGxpbmtgIGlzIHRoZSBmdW5jdGlvbiB3ZSYjMzk7cmUgdXNpbmcgYXMgdGhlIGBkZWxsaW5rYCBjYWxsYmFjaywgdGhhdCBtYWtlcyBzZW5zZS4gVGhlcmVmb3JlLCB0aGUgaW1wb3J0YW50IGZ1bmN0aW9ucyBJIG5lZWQgdG8gZHJpbGwgZG93biBvbiByaWdodCBub3cgYXJlOiBgZ3RwX2dlbmxfbmV3X3BkcGAsIGBndHBfZ2VubF9kZWxfcGRwYCwgbmF0dXJhbGx5IGBndHBfZGVsbGlua2AgKGdpdmVuIHRoZSBjb250ZXh0KSwgYW5kIHRoZW4gYWxzbyBgZ3RwX2VuY2FwX3JlY3ZgIGZvciBoYW5kbGluZyBlbmNhcHN1bGF0ZWQgcGFja2V0cyBhbmQgYGd0cF9kZXZfeG1pdGAsIGJlY2F1c2UgdGhhdCB3aWxsIGJlIHdoZXJlIHdlIHRyYW5zbWl0IHRoZSBnZW5lcmF0ZWQgcGFja2V0cy4gTm93LCBsZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBteSBtZW50YWwgbW9kZWwgaXMgY29ycmVjdDogaXMgYGd0cF9kZXZfeG1pdGAgYWN0dWFsbHkgdGhlIGNhbGxiYWNrIGZvciBgbmRvX3N0YXJ0X3htaXRgPyBHb3R0YSBtYWtlIHN1cmUgbXkgYXNzdW1wdGlvbnMgYXJlIHNvbGlkIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2d0cF9kZXZfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2d0cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2d0cC5jPTEyMjQ9c3RhdGljIGludCBndHBfYnVpbGRfc2tiX2lwNihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTEyNzMtXG5kcml2ZXJzL25ldC9ndHAuYzoxMjc0OnN0YXRpYyBuZXRkZXZfdHhfdCBndHBfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L2d0cC5jLTEyNzUte1xuLS1cbmRyaXZlcnMvbmV0L2d0cC5jPTEzNDE9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBndHBfbmV0ZGV2X29wcyA9IHtcbmRyaXZlcnMvbmV0L2d0cC5jLTEzNDItXHQubmRvX3VuaW5pdFx0XHQ9IGd0cF9kZXZfdW5pbml0LFxuZHJpdmVycy9uZXQvZ3RwLmM6MTM0MzpcdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IGd0cF9kZXZfeG1pdCxcbmRyaXZlcnMvbmV0L2d0cC5jLTEzNDQtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNDQKCQkJCQkJCW91dHB1dDogMjAyCgkJCQkJCQl0aG91Z2h0czogNzIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgR1RQIFBEUCBDb250ZXh0IExvY2tpbmcgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBhZGRpbmcgYSBtdXRleCwgYGd0cF9wZHBfbG9ja2AsIHRvIHByb3RlY3QgdGhlIFBEUCBjb250ZXh0IGhhc2ggdGFibGVzLiBJdOKAmXMgZGVmaW5pdGVseSBhYm91dCBsb2NraW5nIHRvIGhhbmRsZSBjb25jdXJyZW50IGFjY2VzcyB0byB0aGVzZSBjb250ZXh0cywgc28gZnV6emluZyBpcyB3YXJyYW50ZWQuCgpGaXJzdCwgbGV0JiMzOTtzIG5haWwgZG93biBhbnkgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIHBhdGNoIG1lbnRpb25zIGBHVFBgLCB3aGljaCBkZXBlbmRzIG9uIGBJTkVUYC4gV2hpbGUgYElORVRgIGlzIGdlbmVyYWxseSBlbmFibGVkIGJ5IGRlZmF1bHQsIEkmIzM5O2xsIG9ubHkgZXhwbGljaXRseSBsaXN0IGBHVFBgIHNpbmNlIHRoYXQmIzM5O3Mgd2hhdCYjMzk7cyByZXF1ZXN0ZWQuIE5vIG5lZWQgdG8gb3ZlcmNvbXBsaWNhdGUgdGhpbmdzOyBJJiMzOTtsbCBsaXN0IGBHVFBgIGluIHRoZSBgRW5hYmxlQ29uZmlnc2AuCgpOb3csIGxldCYjMzk7cyBzdGVwIHRocm91Z2ggdGhlIHBhdGNoIG9uZSBtb3JlIHRpbWUgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBUaGUgYG11dGV4X2xvY2soJmFtcDtndHBfcGRwX2xvY2spYCBjYWxscyBhcHBlYXIgaW4gdGhlIG5ldGxpbmsgaGFuZGxlcnM6IGBndHBfZ2VubF9uZXdfcGRwYCBhbmQgYGd0cF9nZW5sX2RlbF9wZHBgLCBhcyB3ZWxsIGFzIGBndHBfZGVsbGlua2AuIEFsc28sIHRoZXJlIGFyZSBgbG9ja2RlcF9pc19oZWxkKCZhbXA7Z3RwX3BkcF9sb2NrKWAgY2hlY2tzIGluIFJDVSBsaXN0IHRyYXZlcnNhbCBmdW5jdGlvbnM6IGBndHAwX3BkcF9maW5kYCwgYGd0cDFfcGRwX2ZpbmRgLCBgaXB2NF9wZHBfZmluZGAsIGFuZCBgaXB2Nl9wZHBfZmluZGAuIFN0cmFpZ2h0Zm9yd2FyZCBsb2NraW5nIGZpeCwgcmVhbGx5LgoKTXkgcmVhc29uaW5nIGlzIHRoaXM6IHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG11dGV4LCBgZ3RwX3BkcF9sb2NrYCwgdG8gc2FmZWd1YXJkIHRob3NlIFBEUCBjb250ZXh0IGhhc2ggdGFibGVzIHdpdGhpbiB0aGUgR1RQIGRyaXZlci4gVGhpcyBpbnZvbHZlcyBjaGFuZ2VzIHRvIG5ldGxpbmsgaGFuZGxlcnMgKGBndHBfZ2VubF9uZXdfcGRwYCwgYGd0cF9nZW5sX2RlbF9wZHBgKSwgbGluayBkZWxldGlvbiAoYGd0cF9kZWxsaW5rYCksIGFuZCBhZGp1c3RtZW50cyB0byBSQ1UgbGlzdCB0cmF2ZXJzYWxzLiBHaXZlbiB0aGlzIGlzIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbmV0d29ya2luZyBjb2RlLCBmdXp6aW5nIGlzIHJlcXVpcmVkIHRvIGVuc3VyZSBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5hc3R5IGRlYWRsb2NrcyBvciByYWNlIGNvbmRpdGlvbnMuCgpJJiMzOTt2ZSBhbHJlYWR5IHNlbGVjdGVkIGBndHBfZ2VubF9uZXdfcGRwYCwgYGd0cF9nZW5sX2RlbF9wZHBgLCBhbmQgYGd0cF9kZWxsaW5rYCBhcyBrZXkgc3ltYm9scy4KCknigJltIG5vdyB2ZXJpZnlpbmcgZW50cnkgcG9pbnRzIGludG8gdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMuIFRoZSBmdW5jdGlvbnMgYGd0cDBfcGRwX2ZpbmRgLCBgZ3RwMV9wZHBfZmluZGAsIGBpcHY0X3BkcF9maW5kYCwgYW5kIGBpcHY2X3BkcF9maW5kYCBhcmUgd2hlcmUgdGhlIGxvY2tkZXAgY2hlY2tzIGFyZSBpbXBsZW1lbnRlZC4gSSYjMzk7bSBub3cgdmVyaWZ5aW5nIHRoZXNlIGVudHJ5IHBvaW50cy4gTG9va2luZyBhdCB0aGUgY2FsbCBjaGFpbnMsIEkgc2VlIHRoYXQgYGd0cDBfcGRwX2ZpbmRgIGFuZCBgZ3RwMV9wZHBfZmluZGAgYXJlIGNhbGxlZCBmcm9tIGBndHBfZW5jYXBfcmVjdmAgd2hpY2ggaW4gdHVybiBjYWxscyBgZ3RwMF91ZHBfZW5jYXBfcmVjdmAgYW5kIGBndHAxdV91ZHBfZW5jYXBfcmVjdmAuIFNpbWlsYXJseSwgYGlwdjRfcGRwX2ZpbmRgIGFuZCBgaXB2Nl9wZHBfZmluZGAgYXJlIGNhbGxlZCBmcm9tIGBndHBfZGV2X3htaXRgIHdoaWNoIGluIHR1cm4gY2FsbHMgYGd0cF9idWlsZF9za2JfaXA0YCBhbmQgYGd0cF9idWlsZF9za2JfaXA2YC4gU28sIHNlbGVjdGluZyBgZ3RwX2VuY2FwX3JlY3ZgIGFuZCBgZ3RwX2Rldl94bWl0YCBpcyBjb3JyZWN0LgoKVGhhdCBzaG91bGQgY292ZXIgZXZlcnl0aGluZy4gTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7R1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z3RwX2dlbmxfbmV3X3BkcCYjMzQ7LAogICAgJiMzNDtndHBfZ2VubF9kZWxfcGRwJiMzNDssCiAgICAmIzM0O2d0cF9kZWxsaW5rJiMzNDssCiAgICAmIzM0O2d0cF9lbmNhcF9yZWN2JiMzNDssCiAgICAmIzM0O2d0cF9kZXZfeG1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG11dGV4IGBndHBfcGRwX2xvY2tgIHRvIHByb3RlY3QgUERQIGNvbnRleHQgaGFzaCB0YWJsZXMgaW4gdGhlIEdUUCBkcml2ZXIuIEl0IG1vZGlmaWVzIG5ldGxpbmsgaGFuZGxlcnMgKGBndHBfZ2VubF9uZXdfcGRwYCwgYGd0cF9nZW5sX2RlbF9wZHBgKSBhbmQgdGhlIGxpbmsgZGVsZXRpb24gaGFuZGxlciAoYGd0cF9kZWxsaW5rYCkgdG8gYWNxdWlyZSB0aGlzIGxvY2ssIGFuZCB1cGRhdGVzIFJDVSBsaXN0IHRyYXZlcnNhbHMgdG8gY2hlY2sgZm9yIGl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBsb2NraW5nIGRvZXMgbm90IGludHJvZHVjZSBkZWFkbG9ja3Mgb3IgcmFjZSBjb25kaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtHVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtndHBfZ2VubF9uZXdfcGRwJiMzNDssCiAgICAmIzM0O2d0cF9nZW5sX2RlbF9wZHAmIzM0OywKICAgICYjMzQ7Z3RwX2RlbGxpbmsmIzM0OywKICAgICYjMzQ7Z3RwX2VuY2FwX3JlY3YmIzM0OywKICAgICYjMzQ7Z3RwX2Rldl94bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbXV0ZXggYGd0cF9wZHBfbG9ja2AgdG8gcHJvdGVjdCBQRFAgY29udGV4dCBoYXNoIHRhYmxlcyBpbiB0aGUgR1RQIGRyaXZlci4gSXQgbW9kaWZpZXMgbmV0bGluayBoYW5kbGVycyAoYGd0cF9nZW5sX25ld19wZHBgLCBgZ3RwX2dlbmxfZGVsX3BkcGApIGFuZCB0aGUgbGluayBkZWxldGlvbiBoYW5kbGVyIChgZ3RwX2RlbGxpbmtgKSB0byBhY3F1aXJlIHRoaXMgbG9jaywgYW5kIHVwZGF0ZXMgUkNVIGxpc3QgdHJhdmVyc2FscyB0byBjaGVjayBmb3IgaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGxvY2tpbmcgZG9lcyBub3QgaW50cm9kdWNlIGRlYWRsb2NrcyBvciByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE3OjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTc6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtdXRleCBgZ3RwX3BkcF9sb2NrYCB0byBwcm90ZWN0IFBEUCBjb250ZXh0IG9wZXJhdGlvbnMgaW4gdGhlIEdUUCBkcml2ZXIgYW5kIGFkZHMgbG9ja2RlcCBhbm5vdGF0aW9ucyB0byBSQ1UgbGlzdCB0cmF2ZXJzYWxzLiBUaGlzIGlzIHB1cmVseSBhIGNvbmN1cnJlbmN5IGNvbnRyb2wgYW5kIGxvY2tpbmcgY2hhbmdlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBsb2NraW5nIChkZWFkbG9ja3MsIHJhY2UgY29uZGl0aW9ucykgb3IgdXNlLWFmdGVyLWZyZWUvb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGFscmVhZHkgY292ZXJlZCBieSBMT0NLREVQIGFuZCBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg2MzExNDBmYjJiMTA5YWIxOThkZmU4ODBlYmMyZWIyYjM2ZmEwZTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAxNzozMzoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2d0cC5jIGIvZHJpdmVycy9uZXQvZ3RwLmMKaW5kZXggOWExMmNjNTNkYTAwMi4uMmY2ZTc3Y2NlMzg1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ3RwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZ3RwLmMKQEAgLTEyLDYgJiM0MzsxMiw3IEBACiAjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICYjMzQ7OiAmIzM0OyBmbXQKIAogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VkcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdWxpc3QuaCZndDsKQEAgLTEwOCw2ICYjNDM7MTA5LDcgQEAgc3RydWN0IGd0cF9uZXQgewogfTsKIAogc3RhdGljIHUzMiBndHBfaF9pbml0dmFsOwomIzQzO3N0YXRpYyBERUZJTkVfTVVURVgoZ3RwX3BkcF9sb2NrKTsKIAogc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBndHBfZ2VubF9mYW1pbHk7CiAKQEAgLTE1MSw3ICYjNDM7MTUzLDggQEAgc3RhdGljIHN0cnVjdCBwZHBfY3R4ICpndHAwX3BkcF9maW5kKHN0cnVjdCBndHBfZGV2ICpndHAsIHU2NCB0aWQsIHUxNiBmYW1pbHkpCiAKIAloZWFkID0gJmFtcDtndHAtJmd0O3RpZF9oYXNoW2d0cDBfaGFzaGZuKHRpZCkgJSBndHAtJmd0O2hhc2hfc2l6ZV07CiAKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF90aWQpIHsKJiM0MzsJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfdGlkLAomIzQzOwkJCQkgbG9ja2RlcF9pc19oZWxkKCZhbXA7Z3RwX3BkcF9sb2NrKSkgewogCQlpZiAocGRwLSZndDthZiA9PSBmYW1pbHkgJmFtcDsmYW1wOwogCQkgICAgcGRwLSZndDtndHBfdmVyc2lvbiA9PSBHVFBfVjAgJmFtcDsmYW1wOwogCQkgICAgcGRwLSZndDt1LnYwLnRpZCA9PSB0aWQpCkBAIC0xNjgsNyAmIzQzOzE3MSw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqZ3RwMV9wZHBfZmluZChzdHJ1Y3QgZ3RwX2RldiAqZ3RwLCB1MzIgdGlkLCB1MTYgZmFtaWx5KQogCiAJaGVhZCA9ICZhbXA7Z3RwLSZndDt0aWRfaGFzaFtndHAxdV9oYXNoZm4odGlkKSAlIGd0cC0mZ3Q7aGFzaF9zaXplXTsKIAotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X3RpZCkgewomIzQzOwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF90aWQsCiYjNDM7CQkJCSBsb2NrZGVwX2lzX2hlbGQoJmFtcDtndHBfcGRwX2xvY2spKSB7CiAJCWlmIChwZHAtJmd0O2FmID09IGZhbWlseSAmYW1wOyZhbXA7CiAJCSAgICBwZHAtJmd0O2d0cF92ZXJzaW9uID09IEdUUF9WMSAmYW1wOyZhbXA7CiAJCSAgICBwZHAtJmd0O3UudjEuaV90ZWkgPT0gdGlkKQpAQCAtMTg1LDcgJiM0MzsxODksOCBAQCBzdGF0aWMgc3RydWN0IHBkcF9jdHggKmlwdjRfcGRwX2ZpbmQoc3RydWN0IGd0cF9kZXYgKmd0cCwgX19iZTMyIG1zX2FkZHIpCiAKIAloZWFkID0gJmFtcDtndHAtJmd0O2FkZHJfaGFzaFtpcHY0X2hhc2hmbihtc19hZGRyKSAlIGd0cC0mZ3Q7aGFzaF9zaXplXTsKIAotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X2FkZHIpIHsKJiM0MzsJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfYWRkciwKJiM0MzsJCQkJIGxvY2tkZXBfaXNfaGVsZCgmYW1wO2d0cF9wZHBfbG9jaykpIHsKIAkJaWYgKHBkcC0mZ3Q7YWYgPT0gQUZfSU5FVCAmYW1wOyZhbXA7CiAJCSAgICBwZHAtJmd0O21zLmFkZHIuc19hZGRyID09IG1zX2FkZHIpCiAJCQlyZXR1cm4gcGRwOwpAQCAtMjIwLDcgJiM0MzsyMjUsOCBAQCBzdGF0aWMgc3RydWN0IHBkcF9jdHggKmlwdjZfcGRwX2ZpbmQoc3RydWN0IGd0cF9kZXYgKmd0cCwKIAogCWhlYWQgPSAmYW1wO2d0cC0mZ3Q7YWRkcl9oYXNoW2lwdjZfaGFzaGZuKG1zX2FkZHIpICUgZ3RwLSZndDtoYXNoX3NpemVdOwogCi0JaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfYWRkcikgewomIzQzOwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF9hZGRyLAomIzQzOwkJCQkgbG9ja2RlcF9pc19oZWxkKCZhbXA7Z3RwX3BkcF9sb2NrKSkgewogCQlpZiAocGRwLSZndDthZiA9PSBBRl9JTkVUNiAmYW1wOyZhbXA7CiAJCSAgICBpcHY2X3BkcF9hZGRyX2VxdWFsKCZhbXA7cGRwLSZndDttcy5hZGRyNiwgbXNfYWRkcikpCiAJCQlyZXR1cm4gcGRwOwpAQCAtMTU1NSw5ICYjNDM7MTU2MSwxMSBAQCBzdGF0aWMgdm9pZCBndHBfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQogCXN0cnVjdCBwZHBfY3R4ICpwY3R4OwogCWludCBpOwogCiYjNDM7CW11dGV4X2xvY2soJmFtcDtndHBfcGRwX2xvY2spOwogCWZvciAoaSA9IDA7IGkgJmx0OyBndHAtJmd0O2hhc2hfc2l6ZTsgaSYjNDM7JiM0MzspCiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGN0eCwgbmV4dCwgJmFtcDtndHAtJmd0O3RpZF9oYXNoW2ldLCBobGlzdF90aWQpCiAJCQlwZHBfY29udGV4dF9kZWxldGUocGN0eCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2d0cF9wZHBfbG9jayk7CiAKIAlsaXN0X2RlbCgmYW1wO2d0cC0mZ3Q7bGlzdCk7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCBoZWFkKTsKQEAgLTIwNTMsNiAmIzQzOzIwNjEsNyBAQCBzdGF0aWMgaW50IGd0cF9nZW5sX25ld19wZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAomIzQzOwltdXRleF9sb2NrKCZhbXA7Z3RwX3BkcF9sb2NrKTsKIAlwY3R4ID0gZ3RwX3BkcF9hZGQoZ3RwLCBzaywgaW5mbyk7CiAJaWYgKElTX0VSUihwY3R4KSkgewogCQllcnIgPSBQVFJfRVJSKHBjdHgpOwpAQCAtMjA2MCw2ICYjNDM7MjA2OSw3IEBAIHN0YXRpYyBpbnQgZ3RwX2dlbmxfbmV3X3BkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQlndHBfdHVubmVsX25vdGlmeShwY3R4LCBHVFBfQ01EX05FV1BEUCwgR0ZQX0tFUk5FTCk7CiAJCWVyciA9IDA7CiAJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDtndHBfcGRwX2xvY2spOwogCiBvdXRfdW5sb2NrOgogCXJ0bmxfdW5sb2NrKCk7CkBAIC0yMTM0LDYgJiM0MzsyMTQ0LDggQEAgc3RhdGljIGludCBndHBfZ2VubF9kZWxfcGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJaWYgKCFpbmZvLSZndDthdHRyc1tHVFBBX1ZFUlNJT05dKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwltdXRleF9sb2NrKCZhbXA7Z3RwX3BkcF9sb2NrKTsKJiM0MzsKIAlyY3VfcmVhZF9sb2NrKCk7CiAKIAlwY3R4ID0gZ3RwX2ZpbmRfcGRwKHNvY2tfbmV0KHNrYi0mZ3Q7c2spLCBpbmZvLSZndDthdHRycyk7CkBAIC0yMTU0LDYgJiM0MzsyMTY2LDcgQEAgc3RhdGljIGludCBndHBfZ2VubF9kZWxfcGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAKIG91dF91bmxvY2s6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2d0cF9wZHBfbG9jayk7CiAJcmV0dXJuIGVycjsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQzMwoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiAzMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgR1RQIFBEUCBMb2NrIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGV5JiMzOTt2ZSBpbnRyb2R1Y2VkIGEgbmV3IG11dGV4LCBgZ3RwX3BkcF9sb2NrYCwgaW4gYGRyaXZlcnMvbmV0L2d0cC5jYCwgYW5kIHRoZXkmIzM5O3JlIHVzaW5nIGl0IHRvIHByb3RlY3QgYWNjZXNzIHRvIHRoZSBQRFAgY29udGV4dCBtYW5hZ2VtZW50IGZ1bmN0aW9uczogYGd0cF9wZHBfYWRkYCwgYGd0cF9maW5kX3BkcGAsIGFuZCBgcGRwX2NvbnRleHRfZGVsZXRlYC4gVGhpcyBsb29rcyBsaWtlIGEgc3RhbmRhcmQgY29uY3VycmVuY3kgY29udHJvbCBtZWFzdXJlIOKAkyBwcm9iYWJseSBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24sIG9yIHBlcmhhcHMgdGhleSYjMzk7cmUganVzdCBhZGRpbmcgYGxvY2tkZXBgIGFubm90YXRpb25zLiBUaGV5JiMzOTt2ZSBhbHNvIGFkZGVkIGEgYGxvY2tkZXBfaXNfaGVsZGAgY2hlY2sgd2l0aGluIHRoZSBgaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1YCBjYWxscyBpbiB0aGUgbG9va3VwIGZ1bmN0aW9ucy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgcHVyZWx5IGEgbG9ja2luZy1yZWxhdGVkIGNoYW5nZS4gSXQgZG9lc24mIzM5O3Qgc2VlbSB0byB0b3VjaCBhbnkgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYXBwZWFyIHRvIGRlYWwgd2l0aCBhbnkgbWVtb3J5IGluaXRpYWxpemF0aW9uIGlzc3Vlcy4gVGhlcmVmb3JlLCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc2VjdXJpdHktZm9jdXNlZCBkZXZlbG9wZXIsIEtNU0FOIGZ1enppbmcgc2hvdWxkbiYjMzk7dCBiZSBuZWNlc3NhcnkgaGVyZS4gVGhpcyBpcyBjbGFzc2ljIEtBU0FOIGFuZCBMT0NLREVQIHRlcnJpdG9yeS4gS0FTQU4gd2lsbCBmbGFnIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBldGMuLCBhbmQgTE9DS0RFUCB3aWxsLCBvZiBjb3Vyc2UsIGNhdGNoIGFueSBpc3N1ZXMgd2l0aCB0aGUgbG9ja2luZyBzY2hlbWUuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgbXkgcmVhc29uaW5nLiBLQVNBTiBpcyB0aGVyZSBmb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMg4oCTIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB1c2UtYWZ0ZXItZnJlZSwgZXRjLiBMT0NLREVQIGlzIHRoZSBnby10byB0b29sIGZvciwgd2VsbCwgbG9ja2luZyBidWdzLiBLTVNBTi4uLiB0aGF0JiMzOTtzIHRoZSBvbmUgd2UgdXNlIHRvIGNhdGNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBCdXQgdGhpcyBwYXRjaCBpcyBlbnRpcmVseSBhYm91dCBsb2NraW5nIGFuZCBjb25jdXJyZW5jeSBjb250cm9sLiBTbywgeWVzLCBpdCYjMzk7cyBjbGVhcjogYE5lZWRzS01TQU4gPSBmYWxzZWAuIFdlJiMzOTtyZSBnb29kIHdpdGggS0FTQU4gYW5kIExPQ0tERVAgZm9yIHRoaXMgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG11dGV4IGBndHBfcGRwX2xvY2tgIHRvIHByb3RlY3QgUERQIGNvbnRleHQgb3BlcmF0aW9ucyBpbiB0aGUgR1RQIGRyaXZlciBhbmQgYWRkcyBsb2NrZGVwIGFubm90YXRpb25zIHRvIFJDVSBsaXN0IHRyYXZlcnNhbHMuIFRoaXMgaXMgcHVyZWx5IGEgY29uY3VycmVuY3kgY29udHJvbCBhbmQgbG9ja2luZyBjaGFuZ2UuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbW9kaWZ5IG1lbW9yeSBpbml0aWFsaXphdGlvbiBsb2dpYy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByZWxhdGVkIHRvIGxvY2tpbmcgKGRlYWRsb2NrcywgcmFjZSBjb25kaXRpb25zKSBvciB1c2UtYWZ0ZXItZnJlZS9vdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbXV0ZXggYGd0cF9wZHBfbG9ja2AgdG8gcHJvdGVjdCBQRFAgY29udGV4dCBvcGVyYXRpb25zIGluIHRoZSBHVFAgZHJpdmVyIGFuZCBhZGRzIGxvY2tkZXAgYW5ub3RhdGlvbnMgdG8gUkNVIGxpc3QgdHJhdmVyc2Fscy4gVGhpcyBpcyBwdXJlbHkgYSBjb25jdXJyZW5jeSBjb250cm9sIGFuZCBsb2NraW5nIGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgbWVtb3J5IGluaXRpYWxpemF0aW9uIGxvZ2ljLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZyAoZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMpIG9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNzozMzoxMS42NDY0NDA3MzNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg4OTczNDUyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiR1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3RwX2dlbmxfbmV3X3BkcFwiLFxuICAgIFwiZ3RwX2dlbmxfZGVsX3BkcFwiLFxuICAgIFwiZ3RwX2RlbGxpbmtcIixcbiAgICBcImd0cF9lbmNhcF9yZWN2XCIsXG4gICAgXCJndHBfZGV2X3htaXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbXV0ZXggYGd0cF9wZHBfbG9ja2AgdG8gcHJvdGVjdCBQRFAgY29udGV4dCBvcGVyYXRpb25zIGluIHRoZSBHVFAgZHJpdmVyIGFuZCBhZGRzIGxvY2tkZXAgYW5ub3RhdGlvbnMgdG8gUkNVIGxpc3QgdHJhdmVyc2Fscy4gVGhpcyBpcyBwdXJlbHkgYSBjb25jdXJyZW5jeSBjb250cm9sIGFuZCBsb2NraW5nIGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgbWVtb3J5IGluaXRpYWxpemF0aW9uIGxvZ2ljLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZyAoZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMpIG9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbXV0ZXggYGd0cF9wZHBfbG9ja2AgdG8gcHJvdGVjdCBQRFAgY29udGV4dCBoYXNoIHRhYmxlcyBpbiB0aGUgR1RQIGRyaXZlci4gSXQgbW9kaWZpZXMgbmV0bGluayBoYW5kbGVycyAoYGd0cF9nZW5sX25ld19wZHBgLCBgZ3RwX2dlbmxfZGVsX3BkcGApIGFuZCB0aGUgbGluayBkZWxldGlvbiBoYW5kbGVyIChgZ3RwX2RlbGxpbmtgKSB0byBhY3F1aXJlIHRoaXMgbG9jaywgYW5kIHVwZGF0ZXMgUkNVIGxpc3QgdHJhdmVyc2FscyB0byBjaGVjayBmb3IgaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGxvY2tpbmcgZG9lcyBub3QgaW50cm9kdWNlIGRlYWRsb2NrcyBvciByYWNlIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE3OjMzOjExLjY0NjQ0NzIyM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI4MDk2MDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODYzMTE0MGZiMmIxMDlhYjE5OGRmZTg4MGViYzJlYjJiMzZmYTBlOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxNzozMzoxMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ndHAuYyBiL2RyaXZlcnMvbmV0L2d0cC5jXFxuaW5kZXggOWExMmNjNTNkYTAwMi4uMmY2ZTc3Y2NlMzg1ZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ndHAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2d0cC5jXFxuQEAgLTEyLDYgKzEyLDcgQEBcXG4gI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcXFwiOiBcXFwiIGZtdFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NrYnVmZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdWRwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VsaXN0LmhcXHUwMDNlXFxuQEAgLTEwOCw2ICsxMDksNyBAQCBzdHJ1Y3QgZ3RwX25ldCB7XFxuIH07XFxuIFxcbiBzdGF0aWMgdTMyIGd0cF9oX2luaXR2YWw7XFxuK3N0YXRpYyBERUZJTkVfTVVURVgoZ3RwX3BkcF9sb2NrKTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgZ3RwX2dlbmxfZmFtaWx5O1xcbiBcXG5AQCAtMTUxLDcgKzE1Myw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqZ3RwMF9wZHBfZmluZChzdHJ1Y3QgZ3RwX2RldiAqZ3RwLCB1NjQgdGlkLCB1MTYgZmFtaWx5KVxcbiBcXG4gXFx0aGVhZCA9IFxcdTAwMjZndHAtXFx1MDAzZXRpZF9oYXNoW2d0cDBfaGFzaGZuKHRpZCkgJSBndHAtXFx1MDAzZWhhc2hfc2l6ZV07XFxuIFxcbi1cXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF90aWQpIHtcXG4rXFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfdGlkLFxcbitcXHRcXHRcXHRcXHQgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZndHBfcGRwX2xvY2spKSB7XFxuIFxcdFxcdGlmIChwZHAtXFx1MDAzZWFmID09IGZhbWlseSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgcGRwLVxcdTAwM2VndHBfdmVyc2lvbiA9PSBHVFBfVjAgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIHBkcC1cXHUwMDNldS52MC50aWQgPT0gdGlkKVxcbkBAIC0xNjgsNyArMTcxLDggQEAgc3RhdGljIHN0cnVjdCBwZHBfY3R4ICpndHAxX3BkcF9maW5kKHN0cnVjdCBndHBfZGV2ICpndHAsIHUzMiB0aWQsIHUxNiBmYW1pbHkpXFxuIFxcbiBcXHRoZWFkID0gXFx1MDAyNmd0cC1cXHUwMDNldGlkX2hhc2hbZ3RwMXVfaGFzaGZuKHRpZCkgJSBndHAtXFx1MDAzZWhhc2hfc2l6ZV07XFxuIFxcbi1cXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF90aWQpIHtcXG4rXFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfdGlkLFxcbitcXHRcXHRcXHRcXHQgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZndHBfcGRwX2xvY2spKSB7XFxuIFxcdFxcdGlmIChwZHAtXFx1MDAzZWFmID09IGZhbWlseSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgcGRwLVxcdTAwM2VndHBfdmVyc2lvbiA9PSBHVFBfVjEgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIHBkcC1cXHUwMDNldS52MS5pX3RlaSA9PSB0aWQpXFxuQEAgLTE4NSw3ICsxODksOCBAQCBzdGF0aWMgc3RydWN0IHBkcF9jdHggKmlwdjRfcGRwX2ZpbmQoc3RydWN0IGd0cF9kZXYgKmd0cCwgX19iZTMyIG1zX2FkZHIpXFxuIFxcbiBcXHRoZWFkID0gXFx1MDAyNmd0cC1cXHUwMDNlYWRkcl9oYXNoW2lwdjRfaGFzaGZuKG1zX2FkZHIpICUgZ3RwLVxcdTAwM2VoYXNoX3NpemVdO1xcbiBcXG4tXFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfYWRkcikge1xcbitcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF9hZGRyLFxcbitcXHRcXHRcXHRcXHQgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZndHBfcGRwX2xvY2spKSB7XFxuIFxcdFxcdGlmIChwZHAtXFx1MDAzZWFmID09IEFGX0lORVQgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIHBkcC1cXHUwMDNlbXMuYWRkci5zX2FkZHIgPT0gbXNfYWRkcilcXG4gXFx0XFx0XFx0cmV0dXJuIHBkcDtcXG5AQCAtMjIwLDcgKzIyNSw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqaXB2Nl9wZHBfZmluZChzdHJ1Y3QgZ3RwX2RldiAqZ3RwLFxcbiBcXG4gXFx0aGVhZCA9IFxcdTAwMjZndHAtXFx1MDAzZWFkZHJfaGFzaFtpcHY2X2hhc2hmbihtc19hZGRyKSAlIGd0cC1cXHUwMDNlaGFzaF9zaXplXTtcXG4gXFxuLVxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X2FkZHIpIHtcXG4rXFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfYWRkcixcXG4rXFx0XFx0XFx0XFx0IGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2Z3RwX3BkcF9sb2NrKSkge1xcbiBcXHRcXHRpZiAocGRwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNiBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgaXB2Nl9wZHBfYWRkcl9lcXVhbChcXHUwMDI2cGRwLVxcdTAwM2Vtcy5hZGRyNiwgbXNfYWRkcikpXFxuIFxcdFxcdFxcdHJldHVybiBwZHA7XFxuQEAgLTE1NTUsOSArMTU2MSwxMSBAQCBzdGF0aWMgdm9pZCBndHBfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbiBcXHRzdHJ1Y3QgcGRwX2N0eCAqcGN0eDtcXG4gXFx0aW50IGk7XFxuIFxcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZndHBfcGRwX2xvY2spO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZ3RwLVxcdTAwM2VoYXNoX3NpemU7IGkrKylcXG4gXFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwY3R4LCBuZXh0LCBcXHUwMDI2Z3RwLVxcdTAwM2V0aWRfaGFzaFtpXSwgaGxpc3RfdGlkKVxcbiBcXHRcXHRcXHRwZHBfY29udGV4dF9kZWxldGUocGN0eCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2Z3RwX3BkcF9sb2NrKTtcXG4gXFxuIFxcdGxpc3RfZGVsKFxcdTAwMjZndHAtXFx1MDAzZWxpc3QpO1xcbiBcXHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIGhlYWQpO1xcbkBAIC0yMDUzLDYgKzIwNjEsNyBAQCBzdGF0aWMgaW50IGd0cF9nZW5sX25ld19wZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9XFxuIFxcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZndHBfcGRwX2xvY2spO1xcbiBcXHRwY3R4ID0gZ3RwX3BkcF9hZGQoZ3RwLCBzaywgaW5mbyk7XFxuIFxcdGlmIChJU19FUlIocGN0eCkpIHtcXG4gXFx0XFx0ZXJyID0gUFRSX0VSUihwY3R4KTtcXG5AQCAtMjA2MCw2ICsyMDY5LDcgQEAgc3RhdGljIGludCBndHBfZ2VubF9uZXdfcGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdGd0cF90dW5uZWxfbm90aWZ5KHBjdHgsIEdUUF9DTURfTkVXUERQLCBHRlBfS0VSTkVMKTtcXG4gXFx0XFx0ZXJyID0gMDtcXG4gXFx0fVxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmd0cF9wZHBfbG9jayk7XFxuIFxcbiBvdXRfdW5sb2NrOlxcbiBcXHRydG5sX3VubG9jaygpO1xcbkBAIC0yMTM0LDYgKzIxNDQsOCBAQCBzdGF0aWMgaW50IGd0cF9nZW5sX2RlbF9wZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tHVFBBX1ZFUlNJT05dKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmd0cF9wZHBfbG9jayk7XFxuK1xcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcbiBcXHRwY3R4ID0gZ3RwX2ZpbmRfcGRwKHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spLCBpbmZvLVxcdTAwM2VhdHRycyk7XFxuQEAgLTIxNTQsNiArMjE2Niw3IEBAIHN0YXRpYyBpbnQgZ3RwX2dlbmxfZGVsX3BkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXG4gb3V0X3VubG9jazpcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2Z3RwX3BkcF9sb2NrKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTc6MzM6MTIuMTc1MzE3MTM3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTEwOTQxMDY3MjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkdUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImd0cF9nZW5sX25ld19wZHBcIixcbiAgICBcImd0cF9nZW5sX2RlbF9wZHBcIixcbiAgICBcImd0cF9kZWxsaW5rXCIsXG4gICAgXCJndHBfZW5jYXBfcmVjdlwiLFxuICAgIFwiZ3RwX2Rldl94bWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtdXRleCBgZ3RwX3BkcF9sb2NrYCB0byBwcm90ZWN0IFBEUCBjb250ZXh0IGhhc2ggdGFibGVzIGluIHRoZSBHVFAgZHJpdmVyLiBJdCBtb2RpZmllcyBuZXRsaW5rIGhhbmRsZXJzIChgZ3RwX2dlbmxfbmV3X3BkcGAsIGBndHBfZ2VubF9kZWxfcGRwYCkgYW5kIHRoZSBsaW5rIGRlbGV0aW9uIGhhbmRsZXIgKGBndHBfZGVsbGlua2ApIHRvIGFjcXVpcmUgdGhpcyBsb2NrLCBhbmQgdXBkYXRlcyBSQ1UgbGlzdCB0cmF2ZXJzYWxzIHRvIGNoZWNrIGZvciBpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgbG9ja2luZyBkb2VzIG5vdCBpbnRyb2R1Y2UgZGVhZGxvY2tzIG9yIHJhY2UgY29uZGl0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODYzMTE0MGZiMmIxMDlhYjE5OGRmZTg4MGViYzJlYjJiMzZmYTBlOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDE3OjMzOjEwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ3RwLmMgYi9kcml2ZXJzL25ldC9ndHAuY1xuaW5kZXggOWExMmNjNTNkYTAwMi4uMmY2ZTc3Y2NlMzg1ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2d0cC5jXG4rKysgYi9kcml2ZXJzL25ldC9ndHAuY1xuQEAgLTEyLDYgKzEyLDcgQEBcbiAjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFwiOiBcIiBmbXRcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VkcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1bGlzdC5oXHUwMDNlXG5AQCAtMTA4LDYgKzEwOSw3IEBAIHN0cnVjdCBndHBfbmV0IHtcbiB9O1xuIFxuIHN0YXRpYyB1MzIgZ3RwX2hfaW5pdHZhbDtcbitzdGF0aWMgREVGSU5FX01VVEVYKGd0cF9wZHBfbG9jayk7XG4gXG4gc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBndHBfZ2VubF9mYW1pbHk7XG4gXG5AQCAtMTUxLDcgKzE1Myw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqZ3RwMF9wZHBfZmluZChzdHJ1Y3QgZ3RwX2RldiAqZ3RwLCB1NjQgdGlkLCB1MTYgZmFtaWx5KVxuIFxuIFx0aGVhZCA9IFx1MDAyNmd0cC1cdTAwM2V0aWRfaGFzaFtndHAwX2hhc2hmbih0aWQpICUgZ3RwLVx1MDAzZWhhc2hfc2l6ZV07XG4gXG4tXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF90aWQpIHtcbitcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X3RpZCxcbitcdFx0XHRcdCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2Z3RwX3BkcF9sb2NrKSkge1xuIFx0XHRpZiAocGRwLVx1MDAzZWFmID09IGZhbWlseSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHBkcC1cdTAwM2VndHBfdmVyc2lvbiA9PSBHVFBfVjAgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBwZHAtXHUwMDNldS52MC50aWQgPT0gdGlkKVxuQEAgLTE2OCw3ICsxNzEsOCBAQCBzdGF0aWMgc3RydWN0IHBkcF9jdHggKmd0cDFfcGRwX2ZpbmQoc3RydWN0IGd0cF9kZXYgKmd0cCwgdTMyIHRpZCwgdTE2IGZhbWlseSlcbiBcbiBcdGhlYWQgPSBcdTAwMjZndHAtXHUwMDNldGlkX2hhc2hbZ3RwMXVfaGFzaGZuKHRpZCkgJSBndHAtXHUwMDNlaGFzaF9zaXplXTtcbiBcbi1cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X3RpZCkge1xuK1x0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfdGlkLFxuK1x0XHRcdFx0IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZndHBfcGRwX2xvY2spKSB7XG4gXHRcdGlmIChwZHAtXHUwMDNlYWYgPT0gZmFtaWx5IFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgcGRwLVx1MDAzZWd0cF92ZXJzaW9uID09IEdUUF9WMSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHBkcC1cdTAwM2V1LnYxLmlfdGVpID09IHRpZClcbkBAIC0xODUsNyArMTg5LDggQEAgc3RhdGljIHN0cnVjdCBwZHBfY3R4ICppcHY0X3BkcF9maW5kKHN0cnVjdCBndHBfZGV2ICpndHAsIF9fYmUzMiBtc19hZGRyKVxuIFxuIFx0aGVhZCA9IFx1MDAyNmd0cC1cdTAwM2VhZGRyX2hhc2hbaXB2NF9oYXNoZm4obXNfYWRkcikgJSBndHAtXHUwMDNlaGFzaF9zaXplXTtcbiBcbi1cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X2FkZHIpIHtcbitcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X2FkZHIsXG4rXHRcdFx0XHQgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmd0cF9wZHBfbG9jaykpIHtcbiBcdFx0aWYgKHBkcC1cdTAwM2VhZiA9PSBBRl9JTkVUIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgcGRwLVx1MDAzZW1zLmFkZHIuc19hZGRyID09IG1zX2FkZHIpXG4gXHRcdFx0cmV0dXJuIHBkcDtcbkBAIC0yMjAsNyArMjI1LDggQEAgc3RhdGljIHN0cnVjdCBwZHBfY3R4ICppcHY2X3BkcF9maW5kKHN0cnVjdCBndHBfZGV2ICpndHAsXG4gXG4gXHRoZWFkID0gXHUwMDI2Z3RwLVx1MDAzZWFkZHJfaGFzaFtpcHY2X2hhc2hmbihtc19hZGRyKSAlIGd0cC1cdTAwM2VoYXNoX3NpemVdO1xuIFxuLVx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfYWRkcikge1xuK1x0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfYWRkcixcbitcdFx0XHRcdCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2Z3RwX3BkcF9sb2NrKSkge1xuIFx0XHRpZiAocGRwLVx1MDAzZWFmID09IEFGX0lORVQ2IFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgaXB2Nl9wZHBfYWRkcl9lcXVhbChcdTAwMjZwZHAtXHUwMDNlbXMuYWRkcjYsIG1zX2FkZHIpKVxuIFx0XHRcdHJldHVybiBwZHA7XG5AQCAtMTU1NSw5ICsxNTYxLDExIEBAIHN0YXRpYyB2b2lkIGd0cF9kZWxsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4gXHRzdHJ1Y3QgcGRwX2N0eCAqcGN0eDtcbiBcdGludCBpO1xuIFxuK1x0bXV0ZXhfbG9jayhcdTAwMjZndHBfcGRwX2xvY2spO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZ3RwLVx1MDAzZWhhc2hfc2l6ZTsgaSsrKVxuIFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBjdHgsIG5leHQsIFx1MDAyNmd0cC1cdTAwM2V0aWRfaGFzaFtpXSwgaGxpc3RfdGlkKVxuIFx0XHRcdHBkcF9jb250ZXh0X2RlbGV0ZShwY3R4KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZndHBfcGRwX2xvY2spO1xuIFxuIFx0bGlzdF9kZWwoXHUwMDI2Z3RwLVx1MDAzZWxpc3QpO1xuIFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCBoZWFkKTtcbkBAIC0yMDUzLDYgKzIwNjEsNyBAQCBzdGF0aWMgaW50IGd0cF9nZW5sX25ld19wZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuK1x0bXV0ZXhfbG9jayhcdTAwMjZndHBfcGRwX2xvY2spO1xuIFx0cGN0eCA9IGd0cF9wZHBfYWRkKGd0cCwgc2ssIGluZm8pO1xuIFx0aWYgKElTX0VSUihwY3R4KSkge1xuIFx0XHRlcnIgPSBQVFJfRVJSKHBjdHgpO1xuQEAgLTIwNjAsNiArMjA2OSw3IEBAIHN0YXRpYyBpbnQgZ3RwX2dlbmxfbmV3X3BkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRndHBfdHVubmVsX25vdGlmeShwY3R4LCBHVFBfQ01EX05FV1BEUCwgR0ZQX0tFUk5FTCk7XG4gXHRcdGVyciA9IDA7XG4gXHR9XG4rXHRtdXRleF91bmxvY2soXHUwMDI2Z3RwX3BkcF9sb2NrKTtcbiBcbiBvdXRfdW5sb2NrOlxuIFx0cnRubF91bmxvY2soKTtcbkBAIC0yMTM0LDYgKzIxNDQsOCBAQCBzdGF0aWMgaW50IGd0cF9nZW5sX2RlbF9wZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdGlmICghaW5mby1cdTAwM2VhdHRyc1tHVFBBX1ZFUlNJT05dKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdG11dGV4X2xvY2soXHUwMDI2Z3RwX3BkcF9sb2NrKTtcbitcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcbiBcdHBjdHggPSBndHBfZmluZF9wZHAoc29ja19uZXQoc2tiLVx1MDAzZXNrKSwgaW5mby1cdTAwM2VhdHRycyk7XG5AQCAtMjE1NCw2ICsyMTY2LDcgQEAgc3RhdGljIGludCBndHBfZ2VubF9kZWxfcGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gb3V0X3VubG9jazpcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmd0cF9wZHBfbG9jayk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE3OjMzOjEyLjE3NTMxODYzN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5NTk4NzcwMDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgR1RQIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC9ndHAuY2AuIEl0J3MgaW50cm9kdWNpbmcgYSBuZXcgbXV0ZXgsIGBndHBfcGRwX2xvY2tgLCBhbmQgdXNpbmcgaXQgaW4gYGd0cF9kZWxsaW5rYCwgYGd0cF9nZW5sX25ld19wZHBgLCBhbmQgYGd0cF9nZW5sX2RlbF9wZHBgLiAgU291bmRzIGxpa2UgdGhleSdyZSBiZWVmaW5nIHVwIHRoZSBsb2NraW5nIGFyb3VuZCB0aGUgUERQIChQYWNrZXQgRGF0YSBQcm90b2NvbCkgY29udGV4dCB3aXRoaW4gdGhlIEdUUCBkcml2ZXIuIFNtYXJ0IG1vdmUsIGxpa2VseSBhZGRyZXNzaW5nIHNvbWUgcmFjZSBjb25kaXRpb24gb3IgY29uY3VycmVuY3kgaXNzdWUuXG5cbkkgc2VlIHRoZXkndmUgYWxzbyBhZGRlZCBgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmd0cF9wZHBfbG9jaylgIGNoZWNrcyB3aXRoaW4gdGhvc2UgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdWAgaXRlcmF0aW9ucyBpbiBgZ3RwMF9wZHBfZmluZGAsIGBndHAxX3BkcF9maW5kYCwgYGlwdjRfcGRwX2ZpbmRgLCBhbmQgYGlwdjZfcGRwX2ZpbmRgLiBHb29kLCB0aGV5J3JlIGJlaW5nIGNhcmVmdWwgd2l0aCB0aGUgUkNVIChSZWFkLUNvcHktVXBkYXRlKSBtZWNoYW5pc20gaGVyZSwgbWFraW5nIHN1cmUgdGhlIGxvY2sgaXMgaGVsZCB3aGVuIGFwcHJvcHJpYXRlLiBJdCdzIGZ1bmN0aW9uYWwsIG1lYW5pbmcgaXQncyBjaGFuZ2luZyB0aGUgYmVoYXZpb3Igb2YgdGhlIGRyaXZlciwgYW5kIHBvdGVudGlhbGx5IGZpeGluZyBhIGJ1ZyBvciBpbXByb3ZpbmcgcGVyZm9ybWFuY2UuXG5cbkdUUCBpcyBhIG5ldHdvcmsgZHJpdmVyLCBhbmQgY29uc2lkZXJpbmcgaXRzIHJvbGUgaW4gdHVubmVsaW5nLCBpdCdzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgdXNlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIHRvIHNlZSB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtaWdodCBiZSByZWxhdGVkIHRvIEdUUC4gVGltZSB0byBmaXJlIHVwIGBncmVwcGVyYCBhbmQgc2VhcmNoIGZvciBzb21ldGhpbmcgbGlrZSBgY29uZmlnIEdUUGAgb3IgYEdUUGAgaW4gYGRyaXZlcnMvbmV0L0tjb25maWdgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIGlzIGVuYWJsZWQgZm9yIHRoaXMgcGF0Y2ggdG8gZXZlbiBiZSByZWxldmFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQzNiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE3OjMzOjMxLjc3NDA5MTIwOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDYyOTU4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgR1RQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0yNjA9Y29uZmlnIEJBUkVVRFBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMjcxLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjcyOmNvbmZpZyBHVFBcXG5kcml2ZXJzL25ldC9LY29uZmlnLTI3My1cXHR0cmlzdGF0ZSBcXFwiR1BSUyBUdW5uZWxpbmcgUHJvdG9jb2wgZGF0YXBhdGggKEdUUC1VKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTc6MzM6MzEuODI0NzI4MDI3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0Mzk0MTQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBuZXR3b3JrIGRyaXZlci4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgZHJpdmVycy9uZXQvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyNzIuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZXNlIHRoaW5ncyBpcyBkZWZpbmVkLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgcmVsZXZhbnQgYGNvbmZpZ2Agb3B0aW9ucywgdGhlaXIgcmVsYXRpb25zaGlwcyB3aXRoIG90aGVyIGNvbXBvbmVudHMsIGFuZCBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgYmUgaW1wYWN0aW5nIGl0cyBiZWhhdmlvci4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCBvciBgZGVmYXVsdGAgY2xhdXNlcyB0aGF0IGRpY3RhdGUgd2hlbiBhbmQgaG93IHRoaXMgZHJpdmVyIGdldHMgYnVpbHQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBoYW5kbGUgb24gaG93IGl0J3MgaW50ZW5kZWQgdG8gYmUgY29uZmlndXJlZCB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBGcm9tIGhlcmUsIEkgY2FuIHRoZW4gc3RhcnQgdG8gaW5mZXIgaXRzIGltcGxpY2F0aW9ucyBhbmQgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBjb21wb25lbnRzIG9mIHRoZSBrZXJuZWwgbmV0d29yayBzdGFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEzMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE3OjMzOjM0Ljg2ODY3MjY3NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjcwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjcwOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgYmFyZXVkcC5cXG4gMjcxOlxcdFxcbiAyNzI6XFx0Y29uZmlnIEdUUFxcbiAyNzM6XFx0XFx0dHJpc3RhdGUgXFxcIkdQUlMgVHVubmVsaW5nIFByb3RvY29sIGRhdGFwYXRoIChHVFAtVSlcXFwiXFxuIDI3NDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gMjc1OlxcdFxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbiAyNzY6XFx0XFx0aGVscFxcbiAyNzc6XFx0XFx0ICBUaGlzIGFsbG93cyBvbmUgdG8gY3JlYXRlIGd0cCB2aXJ0dWFsIGludGVyZmFjZXMgdGhhdCBwcm92aWRlXFxuIDI3ODpcXHRcXHQgIHRoZSBHUFJTIFR1bm5lbGluZyBQcm90b2NvbCBkYXRhcGF0aCAoR1RQLVUpLiBUaGlzIHR1bm5lbGluZyBwcm90b2NvbFxcbiAyNzk6XFx0XFx0ICBpcyB1c2VkIHRvIHByZXZlbnQgc3Vic2NyaWJlcnMgZnJvbSBhY2Nlc3NpbmcgbW9iaWxlIGNhcnJpZXIgY29yZVxcbiAyODA6XFx0XFx0ICBuZXR3b3JrIGluZnJhc3RydWN0dXJlLiBUaGlzIGRyaXZlciByZXF1aXJlcyBhIHVzZXJzcGFjZSBzb2Z0d2FyZSB0aGF0XFxuIDI4MTpcXHRcXHQgIGltcGxlbWVudHMgdGhlIHNpZ25hbGluZyBwcm90b2NvbCAoR1RQLUMpIHRvIHVwZGF0ZSBpdHMgUERQIGNvbnRleHRcXG4gMjgyOlxcdFxcdCAgYmFzZSwgc3VjaCBhcyBPcGVuR0dTTiBcXHUwMDNjaHR0cDovL2dpdC5vc21vY29tLm9yZy9vcGVuZ2dzbi8pLiBUaGlzXFxuIDI4MzpcXHRcXHQgIHR1bm5lbGluZyBwcm90b2NvbCBpcyBpbXBsZW1lbnRlZCBhY2NvcmRpbmcgdG8gdGhlIEdTTSBUUyAwOS42MCBhbmRcXG4gMjg0OlxcdFxcdCAgM0dQUCBUUyAyOS4wNjAgc3RhbmRhcmRzLlxcbiAyODU6XFx0XFxuIDI4NjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXJzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDI4NzpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGd0cC5cXG4gMjg4OlxcdFxcbiAyODk6XFx0Y29uZmlnIFBGQ1BcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTc6MzM6MzQuODY4NzYwNDA2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAzNTc3MjEyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgR1RQIENvbmZpZ3VyYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgY29uZmlnIGhlcmUgaXMgYEdUUGAsIGFuZCBpdCdzIGRlcGVuZGVudCBvbiBgSU5FVGAuIFRoYXQgbWVhbnMgSSBkZWZpbml0ZWx5IG5lZWQgdG8gbWFrZSBzdXJlIGBHVFBgIGlzIGluY2x1ZGVkIGluIGBFbmFibGVDb25maWdzYC4gVGhhdCdzIGEgbm8tYnJhaW5lci5cblxuTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUga2V5IGZ1bmN0aW9ucyBtb2RpZmllZCBieSB0aGlzIHBhdGNoIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNoYW5nZXMuIFRoZSBwYXRjaCBhZmZlY3RzIGBndHBfZGVsbGlua2AsIGBndHBfZ2VubF9uZXdfcGRwYCwgYGd0cF9nZW5sX2RlbF9wZHBgLCBgZ3RwMF9wZHBfZmluZGAsIGBndHAxX3BkcF9maW5kYCwgYGlwdjRfcGRwX2ZpbmRgLCBhbmQgYGlwdjZfcGRwX2ZpbmRgLlxuXG5gZ3RwX2dlbmxfbmV3X3BkcGAgYW5kIGBndHBfZ2VubF9kZWxfcGRwYCBpbW1lZGlhdGVseSBzdGFuZCBvdXQgYXMgaW1wb3J0YW50LiBUaGV5J3JlIG5ldGxpbmsgaGFuZGxlcnMgc3BlY2lmaWNhbGx5IGZvciBHVFAsIHNvIHRob3NlIGFyZSBkZWZpbml0ZWx5IGdvb2QgY2FuZGlkYXRlcy4gYGd0cF9kZWxsaW5rYCBpcyB0aGUgcnRubCBsaW5rIGRlbGV0ZSBoYW5kbGVyLCBzbyB0aGF0J3MgYWxzbyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGxpbmsgbGlmZWN5Y2xlLiBUaGUgYCpfcGRwX2ZpbmRgIGZ1bmN0aW9ucyBhcmUgaW50ZXJuYWwgaGVscGVycywgc28gd2hpbGUgdGhleSBhcmUgcmVsZXZhbnQsIHRoZXkgbWF5IG5vdCBiZSB0aGUgcHJpbWFyeSBlbnRyeXBvaW50cy5cblxuVGhlIGd1aWRhbmNlIHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhhdCBtYWtlcyBzZW5zZSwgYmVjYXVzZSBJIHdhbnQgdG8gbG9vayBhdCBmdW5jdGlvbnMgd2l0aCBkaXN0aW5jdCBhZGRyZXNzZXMgYW5kIHRoYXQgYXJlbid0IG92ZXJseSBvcHRpbWl6ZWQgYXdheSBieSB0aGUgY29tcGlsZXIuIFNvLCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgYGd0cF9nZW5sX25ld19wZHBgIGFuZCBgZ3RwX2dlbmxfZGVsX3BkcGAgYXJlIHN0YXRpYy4gQWgsIHRoZXkgYXJlISBIb3dldmVyLCB0aGV5IGFyZSBuZXRsaW5rIGNhbGxiYWNrcywgc28gaXQgc2VlbXMgdW5saWtlbHkgdGhleSdyZSBpbmxpbmVkLiBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgdGhleSBhcmUgdXNlZCB3aXRoaW4gYGRyaXZlcnMvbmV0L2d0cC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcxMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE3OjMzOjQxLjkwNDUzNTMzOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjUyMDU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndHBfZ2VubF9uZXdfcGRwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2d0cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2d0cC5jPTIwMTI9c3RhdGljIGludCBndHBfdHVubmVsX25vdGlmeShzdHJ1Y3QgcGRwX2N0eCAqcGN0eCwgdTggY21kLCBnZnBfdCBhbGxvY2F0aW9uKTtcXG5kcml2ZXJzL25ldC9ndHAuYy0yMDEzLVxcbmRyaXZlcnMvbmV0L2d0cC5jOjIwMTQ6c3RhdGljIGludCBndHBfZ2VubF9uZXdfcGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuZHJpdmVycy9uZXQvZ3RwLmMtMjAxNS17XFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYz0yNDQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgZ3RwX2dlbmxfb3BzW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYy0yNDQ5LVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG5kcml2ZXJzL25ldC9ndHAuYzoyNDUwOlxcdFxcdC5kb2l0ID0gZ3RwX2dlbmxfbmV3X3BkcCxcXG5kcml2ZXJzL25ldC9ndHAuYy0yNDUxLVxcdFxcdC5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTc6MzM6NDEuOTg3MDU5NzE3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwMjQ0MTczODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBjb25zaWRlcmluZyBJJ20gc2VlaW5nIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgQ2FsbGJhY2sgVXNhZ2UgYW5kIEVudHJ5IFBvaW50cyoqXG5cbkFscmlnaHQsIHNvIHRoZSBgLmRvaXRgIGNhbGxiYWNrcyB3aXRoaW4gYGd0cF9nZW5sX29wc2AgYXJlIGRlZmluaXRlbHkgKm5vdCogaW5saW5lZC4gVGhleSBhcmUgY2xlYXJseSBjYWxsZWQgYXMgZnVuY3Rpb25zLiBUaGUgc2FtZSBnb2VzIGZvciBgZ3RwX2dlbmxfZGVsX3BkcGAuIFRoYXQncyBnb29kIHRvIGtub3csIG1ha2VzIGRlYnVnZ2luZyBhIGJpdCBlYXNpZXIuXG5cbkFuZCBpdCBsb29rcyBsaWtlIGBndHBfZGVsbGlua2AgaXMgb3BlcmF0aW5nIGFzIGEgYC5kZWxsaW5rYCBjYWxsIGluIGBydG5sX2xpbmtfb3BzYC4gVGhpcyBpcyBhbGwgbWFraW5nIHNlbnNlIHNvIGZhci5cblxuTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBzY2FuIGZvciAqb3RoZXIqIGVudHJ5IHBvaW50cyB0aGF0IG1pZ2h0IGJlIGNhbGxpbmcgYCpfcGRwX2ZpbmRgLiBJIG5lZWQgdG8gZW5zdXJlIEkndmUgY292ZXJlZCBhbGwgdGhlIHJlbGV2YW50IGNhbGxzIHRvIHRoYXQgZnVuY3Rpb24sIHRvIGF2b2lkIG1pc3NpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBhcmVhcyBvZiBvcHRpbWl6YXRpb24uIExldCdzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgaW4gcGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc4NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE3OjM0OjE1LjAxMTQ5MTgyMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxNTU5ODY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImd0cDBfcGRwX2ZpbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZ3RwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZ3RwLmM9MTQyPXN0YXRpYyB1MzIgaXB2Nl9oYXNoZm4oY29uc3Qgc3RydWN0IGluNl9hZGRyICppcDYpXFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYy0xNDgtLyogUmVzb2x2ZSBhIFBEUCBjb250ZXh0IHN0cnVjdHVyZSBiYXNlZCBvbiB0aGUgNjRiaXQgVElELiAqL1xcbmRyaXZlcnMvbmV0L2d0cC5jOjE0OTpzdGF0aWMgc3RydWN0IHBkcF9jdHggKmd0cDBfcGRwX2ZpbmQoc3RydWN0IGd0cF9kZXYgKmd0cCwgdTY0IHRpZCwgdTE2IGZhbWlseSlcXG5kcml2ZXJzL25ldC9ndHAuYy0xNTAte1xcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmM9NTg2PXN0YXRpYyBpbnQgZ3RwMF91ZHBfZW5jYXBfcmVjdihzdHJ1Y3QgZ3RwX2RldiAqZ3RwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtNjE5LVxcbmRyaXZlcnMvbmV0L2d0cC5jOjYyMDpcXHRwY3R4ID0gZ3RwMF9wZHBfZmluZChndHAsIGJlNjRfdG9fY3B1KGd0cDAtXFx1MDAzZXRpZCksXFxuZHJpdmVycy9uZXQvZ3RwLmMtNjIxLVxcdFxcdFxcdCAgICAgZ3RwX3Byb3RvX3RvX2ZhbWlseShpbm5lcl9wcm90bykpO1xcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmM9MTgzMj1zdGF0aWMgc3RydWN0IHBkcF9jdHggKmd0cF9wZHBfYWRkKHN0cnVjdCBndHBfZGV2ICpndHAsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTE4ODYtXFx0aWYgKHZlcnNpb24gPT0gR1RQX1YwKVxcbmRyaXZlcnMvbmV0L2d0cC5jOjE4ODc6XFx0XFx0cGN0eF90aWQgPSBndHAwX3BkcF9maW5kKGd0cCxcXG5kcml2ZXJzL25ldC9ndHAuYy0xODg4LVxcdFxcdFxcdFxcdFxcdCBubGFfZ2V0X3U2NChpbmZvLVxcdTAwM2VhdHRyc1tHVFBBX1RJRF0pLFxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmM9MjA3OT1zdGF0aWMgc3RydWN0IHBkcF9jdHggKmd0cF9maW5kX3BkcF9ieV9saW5rKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTIxMTItXFx0XFx0aWYgKGd0cF92ZXJzaW9uID09IEdUUF9WMCBcXHUwMDI2XFx1MDAyNiBubGFbR1RQQV9USURdKSB7XFxuZHJpdmVycy9uZXQvZ3RwLmM6MjExMzpcXHRcXHRcXHRyZXR1cm4gZ3RwMF9wZHBfZmluZChndHAsIG5sYV9nZXRfdTY0KG5sYVtHVFBBX1RJRF0pLFxcbmRyaXZlcnMvbmV0L2d0cC5jLTIxMTQtXFx0XFx0XFx0XFx0XFx0ICAgICBmYW1pbHkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNzozNDoxNS40NjMwNjA2ODlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1NDQyMzYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqVURQIFBhY2tldCBSZWNlcHRpb24gYW5kIEdUUCBUdW5uZWwgTG9va3VwKipcblxuT2theSwgc28gYGd0cDBfdWRwX2VuY2FwX3JlY3ZgIGhhcyBiZWVuIHRyaWdnZXJlZDsgaXQncyBhIFVEUCBwYWNrZXQgY29taW5nIGluLCBsaWtlbHkgZW5jYXBzdWxhdGVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRvIGRvIHdpdGggaXQuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNoZWNrIGlmIHRoaXMgaXMgYSBHVFAgcGFja2V0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBHVFAgbG9va3VwIHByb2Nlc3MuIExldCdzIHNlZSBpZiB0aGlzIHBhY2tldCBiZWxvbmdzIHRvIGFuIGV4aXN0aW5nIFBEUCBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gY2FsbCBgZ3RwMV9wZHBfZmluZGAuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NjUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNzozNDoxOC43MTc0ODc1MjRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODg0NDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImd0cDFfcGRwX2ZpbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZ3RwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZ3RwLmM9MTQ5PXN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqZ3RwMF9wZHBfZmluZChzdHJ1Y3QgZ3RwX2RldiAqZ3RwLCB1NjQgdGlkLCB1MTYgZmFtaWx5KVxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtMTY2LS8qIFJlc29sdmUgYSBQRFAgY29udGV4dCBzdHJ1Y3R1cmUgYmFzZWQgb24gdGhlIDMyYml0IFRFSS4gKi9cXG5kcml2ZXJzL25ldC9ndHAuYzoxNjc6c3RhdGljIHN0cnVjdCBwZHBfY3R4ICpndHAxX3BkcF9maW5kKHN0cnVjdCBndHBfZGV2ICpndHAsIHUzMiB0aWQsIHUxNiBmYW1pbHkpXFxuZHJpdmVycy9uZXQvZ3RwLmMtMTY4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jPTc5ND1zdGF0aWMgaW50IGd0cDF1X3VkcF9lbmNhcF9yZWN2KHN0cnVjdCBndHBfZGV2ICpndHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYy04NDYtXFxuZHJpdmVycy9uZXQvZ3RwLmM6ODQ3OlxcdHBjdHggPSBndHAxX3BkcF9maW5kKGd0cCwgbnRvaGwoZ3RwMS1cXHUwMDNldGlkKSxcXG5kcml2ZXJzL25ldC9ndHAuYy04NDgtXFx0XFx0XFx0ICAgICBndHBfcHJvdG9fdG9fZmFtaWx5KGlubmVyX3Byb3RvKSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYz0xODMyPXN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqZ3RwX3BkcF9hZGQoc3RydWN0IGd0cF9kZXYgKmd0cCwgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtMTg5MC1cXHRlbHNlIGlmICh2ZXJzaW9uID09IEdUUF9WMSlcXG5kcml2ZXJzL25ldC9ndHAuYzoxODkxOlxcdFxcdHBjdHhfdGlkID0gZ3RwMV9wZHBfZmluZChndHAsXFxuZHJpdmVycy9uZXQvZ3RwLmMtMTg5Mi1cXHRcXHRcXHRcXHRcXHQgbmxhX2dldF91MzIoaW5mby1cXHUwMDNlYXR0cnNbR1RQQV9JX1RFSV0pLFxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmM9MjA3OT1zdGF0aWMgc3RydWN0IHBkcF9jdHggKmd0cF9maW5kX3BkcF9ieV9saW5rKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTIxMTUtXFx0XFx0fSBlbHNlIGlmIChndHBfdmVyc2lvbiA9PSBHVFBfVjEgXFx1MDAyNlxcdTAwMjYgbmxhW0dUUEFfSV9URUldKSB7XFxuZHJpdmVycy9uZXQvZ3RwLmM6MjExNjpcXHRcXHRcXHRyZXR1cm4gZ3RwMV9wZHBfZmluZChndHAsIG5sYV9nZXRfdTMyKG5sYVtHVFBBX0lfVEVJXSksXFxuZHJpdmVycy9uZXQvZ3RwLmMtMjExNy1cXHRcXHRcXHRcXHRcXHQgICAgIGZhbWlseSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE3OjM0OjE4Ljc2MjM3NzMyMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc3NzIwMjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMuXG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIEdUUCBFbmNhcHN1bGF0aW9uIFJlY2VpdmUgRnVuY3Rpb25zKipcblxuQWxyaWdodCwgSSdtIHRha2luZyBhIGxvb2sgYXQgdGhlc2UgYGd0cDBfdWRwX2VuY2FwX3JlY3ZgIGFuZCBgZ3RwMXVfdWRwX2VuY2FwX3JlY3ZgIGZ1bmN0aW9ucy4gVGhleSBpbW1lZGlhdGVseSBzdHJpa2UgbWUgYXMgZGVjZW50IGNhbmRpZGF0ZXMgZm9yIGludmVzdGlnYXRpb24uIEJ1dCBoYW5nIG9uIGEgc2Vjb25kLi4uIHRoZXNlIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCBjaGFuZ2VzIHRoaW5ncyBhIGJpdC4gU3RhdGljIGZ1bmN0aW9ucyBtZWFuIHRoZXkncmUgZmlsZS1sb2NhbCwgc28gbXkgbmV4dCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZSBjb21waWxlciBpcyBiZWluZyBjbGV2ZXIgYW5kIGlubGluaW5nIHRoZW0gb3IgaWYgdGhleSBhcmUgYmVpbmcgdXNlZCBtb3JlIGluZGlyZWN0bHksIGxpa2UgYXMgY2FsbGJhY2tzLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBhcHByb2FjaCBpcyBiZWluZyB1c2VkIGhlcmUgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NTcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNzozNDoyMi40NDAxMDEyNzNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDQ2OTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImd0cDBfdWRwX2VuY2FwX3JlY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZ3RwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZ3RwLmM9NTcwPXN0YXRpYyBpbnQgZ3RwX3Byb3RvX3RvX2ZhbWlseShfX3UxNiBwcm90bylcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTU4NS0vKiAxIG1lYW5zIHBhc3MgdXAgdG8gdGhlIHN0YWNrLCAtMSBtZWFucyBkcm9wIGFuZCAwIG1lYW5zIGRlY2Fwc3VsYXRlZC4gKi9cXG5kcml2ZXJzL25ldC9ndHAuYzo1ODY6c3RhdGljIGludCBndHAwX3VkcF9lbmNhcF9yZWN2KHN0cnVjdCBndHBfZGV2ICpndHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvZ3RwLmMtNTg3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jPTkwOT1zdGF0aWMgaW50IGd0cF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTkyMi1cXHRcXHRuZXRkZXZfZGJnKGd0cC1cXHUwMDNlZGV2LCBcXFwicmVjZWl2ZWQgR1RQMCBwYWNrZXRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L2d0cC5jOjkyMzpcXHRcXHRyZXQgPSBndHAwX3VkcF9lbmNhcF9yZWN2KGd0cCwgc2tiKTtcXG5kcml2ZXJzL25ldC9ndHAuYy05MjQtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE3OjM0OjIyLjQ4NjU1NjE2MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjg4ODkyNTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkdUUCBFbmNhcHN1bGF0aW9uOiBBIFF1aWNrIE1lbnRhbCBDaGVjayoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgR1RQIGVuY2Fwc3VsYXRpb24gcHJvY2VzcywgYW5kIHRoZSBjYWxsIHN0YWNrIGlzIGxlYWRpbmcgbWUgdG8gYGd0cF9lbmNhcF9yZWN2YC4gSG1tLCBpcyBgZ3RwX2VuY2FwX3JlY3ZgIGEgZGlyZWN0IGZ1bmN0aW9uIGNhbGwgb3IgaXMgaXQgYSBjYWxsYmFjayBmdW5jdGlvbiByZWdpc3RlcmVkIHNvbWV3aGVyZT8gVGhhdCdzIHRoZSBjb3JlIHF1ZXN0aW9uIEkgbmVlZCB0byBhbnN3ZXIgcXVpY2tseS4gVW5kZXJzdGFuZGluZyB0aGF0IG1lY2hhbmlzbSB3aWxsIGluZmx1ZW5jZSBteSBuZXh0IG1vdmUgaW4gZGVidWdnaW5nIG9yIG9wdGltaXppbmcgaXQuIElzIHRoaXMgYSBzeW5jaHJvbm91cyBvciBhc3luY2hyb25vdXMgZnVuY3Rpb24/IFRoZSBhbnN3ZXIgZ3JlYXRseSBhZmZlY3RzIGhvdyBJIHNob3VsZCBpbnRlcnByZXQgdGhpcy4gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgSSBzaG91bGQgaW50ZXJwcmV0IHRoZSBmbG93IG9mIGRhdGEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5ODksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNzozNDoyNS43NzU0NTI0NjRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjIyOTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImd0cF9lbmNhcF9yZWN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2d0cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2d0cC5jPTg5Mj1zdGF0aWMgdm9pZCBndHBfZW5jYXBfZGlzYWJsZShzdHJ1Y3QgZ3RwX2RldiAqZ3RwKVxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtOTA4LSAqL1xcbmRyaXZlcnMvbmV0L2d0cC5jOjkwOTpzdGF0aWMgaW50IGd0cF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC9ndHAuYy05MTAte1xcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmM9MTQxMD1zdGF0aWMgc3RydWN0IHNvY2sgKmd0cF9jcmVhdGVfc29jayhpbnQgdHlwZSwgc3RydWN0IGd0cF9kZXYgKmd0cCxcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTE0NDAtXFx0dHVuY2ZnLmVuY2FwX3R5cGUgPSB0eXBlO1xcbmRyaXZlcnMvbmV0L2d0cC5jOjE0NDE6XFx0dHVuY2ZnLmVuY2FwX3JjdiA9IGd0cF9lbmNhcF9yZWN2O1xcbmRyaXZlcnMvbmV0L2d0cC5jLTE0NDItXFx0dHVuY2ZnLmVuY2FwX2Rlc3Ryb3kgPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmM9MTY1Nz1zdGF0aWMgc3RydWN0IHNvY2sgKmd0cF9lbmNhcF9lbmFibGVfc29ja2V0KGludCBmZCwgaW50IHR5cGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYy0xNjk3LVxcdHR1bmNmZy5lbmNhcF90eXBlID0gdHlwZTtcXG5kcml2ZXJzL25ldC9ndHAuYzoxNjk4OlxcdHR1bmNmZy5lbmNhcF9yY3YgPSBndHBfZW5jYXBfcmVjdjtcXG5kcml2ZXJzL25ldC9ndHAuYy0xNjk5LVxcdHR1bmNmZy5lbmNhcF9kZXN0cm95ID0gZ3RwX2VuY2FwX2Rlc3Ryb3k7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE3OjM0OjI1LjgyMDY4MzA4M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Njc4OTI5OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkNvbnNpZGVyaW5nIGBndHBfZW5jYXBfcmVjdmAgZm9yIHRoZSBUYXNrKipcblxuT2theSwgc28gSSByZW1lbWJlciBub3cuIGBndHBfZW5jYXBfcmVjdmAgaXMgaW5kZWVkIHRoZSBmdW5jdGlvbiB0aGF0J3MgYXNzaWduZWQgYXMgdGhlIGBlbmNhcF9yY3ZgIGNhbGxiYWNrIHdpdGhpbiB0aGUgYHVkcF90dW5uZWxfc29ja19jZmdgIHN0cnVjdHVyZS4gVGhhdCBtYWtlcyBpdCBhIHN0cm9uZyBjb250ZW5kZXIgZm9yIHdoYXQgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHJpZ2h0IG5vdy4gSXQgc2VlbXMgbG9naWNhbC5cblxuTm93LCBsZXQncyBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSByZWxhdGVkIFBEUCBmaW5kIGZ1bmN0aW9ucy4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgZGF0YSBmbG93IGlzIGxvZ2ljYWwuIEknbGwgbmVlZCB0byBsb29rIGF0IGJvdGggYGlwdjRfcGRwX2ZpbmRgIGFuZCBgaXB2Nl9wZHBfZmluZGAgdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgc3lzdGVtJ3MgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTY5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTc6MzQ6MzIuNDk5NjE2NzYyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTI5NDEwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHY0X3BkcF9maW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2d0cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2d0cC5jPTE2Nz1zdGF0aWMgc3RydWN0IHBkcF9jdHggKmd0cDFfcGRwX2ZpbmQoc3RydWN0IGd0cF9kZXYgKmd0cCwgdTMyIHRpZCwgdTE2IGZhbWlseSlcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTE4NC0vKiBSZXNvbHZlIGEgUERQIGNvbnRleHQgYmFzZWQgb24gSVB2NCBhZGRyZXNzIG9mIE1TLiAqL1xcbmRyaXZlcnMvbmV0L2d0cC5jOjE4NTpzdGF0aWMgc3RydWN0IHBkcF9jdHggKmlwdjRfcGRwX2ZpbmQoc3RydWN0IGd0cF9kZXYgKmd0cCwgX19iZTMyIG1zX2FkZHIpXFxuZHJpdmVycy9uZXQvZ3RwLmMtMTg2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jPTExNzU9c3RhdGljIGludCBndHBfYnVpbGRfc2tiX2lwNChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtMTE4OC1cXHRpZiAoZ3RwLVxcdTAwM2Vyb2xlID09IEdUUF9ST0xFX1NHU04pXFxuZHJpdmVycy9uZXQvZ3RwLmM6MTE4OTpcXHRcXHRwY3R4ID0gaXB2NF9wZHBfZmluZChndHAsIGlwaC1cXHUwMDNlc2FkZHIpO1xcbmRyaXZlcnMvbmV0L2d0cC5jLTExOTAtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L2d0cC5jOjExOTE6XFx0XFx0cGN0eCA9IGlwdjRfcGRwX2ZpbmQoZ3RwLCBpcGgtXFx1MDAzZWRhZGRyKTtcXG5kcml2ZXJzL25ldC9ndHAuYy0xMTkyLVxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmM9MTgzMj1zdGF0aWMgc3RydWN0IHBkcF9jdHggKmd0cF9wZHBfYWRkKHN0cnVjdCBndHBfZGV2ICpndHAsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTE4NjktXFx0XFx0aGFzaF9tcyA9IGlwdjRfaGFzaGZuKG1zX2FkZHIpICUgZ3RwLVxcdTAwM2VoYXNoX3NpemU7XFxuZHJpdmVycy9uZXQvZ3RwLmM6MTg3MDpcXHRcXHRwY3R4ID0gaXB2NF9wZHBfZmluZChndHAsIG1zX2FkZHIpO1xcbmRyaXZlcnMvbmV0L2d0cC5jLTE4NzEtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYz0yMDc5PXN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqZ3RwX2ZpbmRfcGRwX2J5X2xpbmsoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtMjA5Ni1cXG5kcml2ZXJzL25ldC9ndHAuYzoyMDk3OlxcdFxcdHJldHVybiBpcHY0X3BkcF9maW5kKGd0cCwgaXApO1xcbmRyaXZlcnMvbmV0L2d0cC5jLTIwOTgtXFx0fSBlbHNlIGlmIChubGFbR1RQQV9NU19BRERSNl0pIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTc6MzQ6MzIuNTc4OTE5OThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2NTcwMzk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgY29kZSBmbG93LCBleHByZXNzZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipNeSBNZW50YWwgTWFwcGluZyBvZiBJUCB2NCBQYWNrZXQgRGF0YSBQcm90b2NvbCBIYW5kbGluZyoqXG5cbkFscmlnaHQsIHNvIEknbSB0cmFjaW5nIHRoaXMgSVAgdjQgcGFja2V0IHBhdGgsIGFuZCBpdCBsb29rcyBsaWtlIGBpcHY0X3BkcF9maW5kYCBpcyB0aGUgY3J1Y2lhbCBmdW5jdGlvbiBoZXJlLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGF0IGl0J3MgYmVpbmcgaW52b2tlZCB3aXRoaW4gYGd0cF9idWlsZF9za2JfaXA0YC4gQW5kIHdoZXJlIGRvZXMgKnRoYXQqIGdldCBjYWxsZWQgZnJvbT8gT2gsIHJpZ2h0LCBpdCdzIHRoZSBgZ3RwX3htaXRgIGZ1bmN0aW9uLiBTbywgaWYgSSdtIHVuZGVyc3RhbmRpbmcgdGhpcyBjb3JyZWN0bHksIHRoZSBgaXB2NF9wZHBfZmluZGAgZnVuY3Rpb24gaXMgcHJvYmFibHkgdGhlIGhlYXJ0IG9mIElQIHY0IHBhY2tldCBkYXRhIHByb3RvY29sIGxvb2t1cCwgYW5kIGl0J3MgZXNzZW50aWFsIGZvciB0aGUgdHJhbnNtaXNzaW9uIHByb2Nlc3MuIFRoaXMgY29uZmlybXMgd2hhdCBJIGV4cGVjdGVkOiB0aGUgbmV0d29yayBzdGFjayB1c2VzIGEgc2VyaWVzIG9mIGxheWVycy4gTG9va3MgbGlrZSBHVFAgdHJhbnNtaXNzaW9uIHdpbGwgYnVpbGQgYW4gc2tiIHdpdGggYGd0cF9idWlsZF9za2JfaXA0YCwgYWZ0ZXIgaXQgZmluZHMgdGhlIFBEUCBjb250ZXh0IGZvciB0aGUgSVB2NCBwYWNrZXQsIHVzaW5nIGBpcHY0X3BkcF9maW5kYC4gSSdsbCBuZWVkIHRvIGtub3cgdGhlIFBEUCBjb250ZXh0IHRvIGNvbnN0cnVjdCBhbmQgdHJhbnNtaXQgdGhlIHBhY2tldC4gSSBzaG91bGQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBQRFAgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQzMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE3OjM0OjM2Ljc0NDYyNjI1MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1MDA4ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3RwX2J1aWxkX3NrYl9pcDRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZ3RwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZ3RwLmM9MTExOD1zdGF0aWMgaW50IGd0cF9idWlsZF9za2Jfb3V0ZXJfaXA2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTExNzQtXFxuZHJpdmVycy9uZXQvZ3RwLmM6MTE3NTpzdGF0aWMgaW50IGd0cF9idWlsZF9za2JfaXA0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvZ3RwLmMtMTE3Ni1cXHRcXHRcXHQgICAgIHN0cnVjdCBndHBfcGt0aW5mbyAqcGt0aW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jPTEyNzQ9c3RhdGljIG5ldGRldl90eF90IGd0cF9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtMTI5Mi1cXHRjYXNlIEVUSF9QX0lQOlxcbmRyaXZlcnMvbmV0L2d0cC5jOjEyOTM6XFx0XFx0ZXJyID0gZ3RwX2J1aWxkX3NrYl9pcDQoc2tiLCBkZXYsIFxcdTAwMjZwa3RpbmZvKTtcXG5kcml2ZXJzL25ldC9ndHAuYy0xMjk0LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNzozNDozNi43OTExMzE3MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTA2MzE2MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEdUUCBJbXBsZW1lbnRhdGlvbiBPdmVydmlldyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBHVFAgaW1wbGVtZW50YXRpb24gaGVyZS4gUmlnaHQsIGBndHBfZGV2X3htaXRgIGlzIGNydWNpYWwg4oCTIHRoYXQncyB0aGUgZXF1aXZhbGVudCBvZiB0aGUgYG5kb19zdGFydF94bWl0YCBjYWxsYmFjaywgdGhlIG9uZSB0aGF0IGtpY2tzIG9mZiBwYWNrZXQgdHJhbnNtaXNzaW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBjYWxsaW5nIHNlcXVlbmNlLlxuXG5UaGVyZWZvcmUsIHRoZSBrZXkgZW50cnkgcG9pbnRzIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6XG5cbiogICBgZ3RwX2dlbmxfbmV3X3BkcGAgLSBmb3IgY3JlYXRpbmcgYSBuZXcgUERQIGNvbnRleHRcbiogICBgZ3RwX2dlbmxfZGVsX3BkcGAgLSB0byByZW1vdmUgb25lXG4qICAgYGd0cF9kZWxsaW5rYCAtIGFuZCBJIHN1c3BlY3QgdGhpcyBvbmUgaGFuZGxlcyBsaW5rIGRlbGV0aW9uLCBidXQgSSBzaG91bGQgdmVyaWZ5IHRoYXQuXG4qICAgYGd0cF9lbmNhcF9yZWN2YCAtIGZvciBwcm9jZXNzaW5nIGluY29taW5nIGVuY2Fwc3VsYXRlZCBwYWNrZXRzXG4qICAgYGd0cF9kZXZfeG1pdGAgLSB0aGUgaGVhcnQgb2YgcGFja2V0IHRyYW5zbWlzc2lvblxuXG5JJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGd0cF9kZWxsaW5rYCB0cnVseSBjb3JyZXNwb25kcyB0byB0aGUgYGRlbGxpbmtgIGNhbGxiYWNrIGZ1bmN0aW9uLiBJdCdzIGltcG9ydGFudCB0byBrZWVwIHRoZXNlIGNhbGxiYWNrIGFzc29jaWF0aW9ucyBzdHJhaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwMzAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTc6MzQ6NDEuNjk3NDUwMTA4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTgzNjgxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndHBfZGVsbGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ndHAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ndHAuYz0xNDc1PXN0YXRpYyBpbnQgZ3RwX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTE1NTYtXFxuZHJpdmVycy9uZXQvZ3RwLmM6MTU1NzpzdGF0aWMgdm9pZCBndHBfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbmRyaXZlcnMvbmV0L2d0cC5jLTE1NTgte1xcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmM9MTYxOD1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgZ3RwX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYy0xNjI1LVxcdC5uZXdsaW5rXFx0PSBndHBfbmV3bGluayxcXG5kcml2ZXJzL25ldC9ndHAuYzoxNjI2OlxcdC5kZWxsaW5rXFx0PSBndHBfZGVsbGluayxcXG5kcml2ZXJzL25ldC9ndHAuYy0xNjI3LVxcdC5nZXRfc2l6ZVxcdD0gZ3RwX2dldF9zaXplLFxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmM9MjQ5Nz1zdGF0aWMgdm9pZCBfX25ldF9leGl0IGd0cF9uZXRfZXhpdF9ydG5sKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTI1MDMtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGd0cCwgZ3RwX25leHQsIFxcdTAwMjZnbi1cXHUwMDNlZ3RwX2Rldl9saXN0LCBsaXN0KVxcbmRyaXZlcnMvbmV0L2d0cC5jOjI1MDQ6XFx0XFx0Z3RwX2RlbGxpbmsoZ3RwLVxcdTAwM2VkZXYsIGRldl90b19raWxsKTtcXG5kcml2ZXJzL25ldC9ndHAuYy0yNTA1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTc6MzQ6NDEuNzQzMjkyODE3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMzMxNDQxMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipGb2N1c2luZyBvbiB0aGUgR1RQIERhdGEgUGxhbmUqKlxuXG5BbHJpZ2h0LCBzbyBgZ3RwX2RlbGxpbmtgIGlzIHRoZSBmdW5jdGlvbiB3ZSdyZSB1c2luZyBhcyB0aGUgYGRlbGxpbmtgIGNhbGxiYWNrLCB0aGF0IG1ha2VzIHNlbnNlLiBUaGVyZWZvcmUsIHRoZSBpbXBvcnRhbnQgZnVuY3Rpb25zIEkgbmVlZCB0byBkcmlsbCBkb3duIG9uIHJpZ2h0IG5vdyBhcmU6IGBndHBfZ2VubF9uZXdfcGRwYCwgYGd0cF9nZW5sX2RlbF9wZHBgLCBuYXR1cmFsbHkgYGd0cF9kZWxsaW5rYCAoZ2l2ZW4gdGhlIGNvbnRleHQpLCBhbmQgdGhlbiBhbHNvIGBndHBfZW5jYXBfcmVjdmAgZm9yIGhhbmRsaW5nIGVuY2Fwc3VsYXRlZCBwYWNrZXRzIGFuZCBgZ3RwX2Rldl94bWl0YCwgYmVjYXVzZSB0aGF0IHdpbGwgYmUgd2hlcmUgd2UgdHJhbnNtaXQgdGhlIGdlbmVyYXRlZCBwYWNrZXRzLiBOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IG15IG1lbnRhbCBtb2RlbCBpcyBjb3JyZWN0OiBpcyBgZ3RwX2Rldl94bWl0YCBhY3R1YWxseSB0aGUgY2FsbGJhY2sgZm9yIGBuZG9fc3RhcnRfeG1pdGA/IEdvdHRhIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgc29saWQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3NjQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTc6MzQ6NDkuOTc2NDQwMDYzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzMyNjEwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndHBfZGV2X3htaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZ3RwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZ3RwLmM9MTIyND1zdGF0aWMgaW50IGd0cF9idWlsZF9za2JfaXA2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYy0xMjczLVxcbmRyaXZlcnMvbmV0L2d0cC5jOjEyNzQ6c3RhdGljIG5ldGRldl90eF90IGd0cF9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L2d0cC5jLTEyNzUte1xcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmM9MTM0MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGd0cF9uZXRkZXZfb3BzID0ge1xcbmRyaXZlcnMvbmV0L2d0cC5jLTEzNDItXFx0Lm5kb191bmluaXRcXHRcXHQ9IGd0cF9kZXZfdW5pbml0LFxcbmRyaXZlcnMvbmV0L2d0cC5jOjEzNDM6XFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSBndHBfZGV2X3htaXQsXFxuZHJpdmVycy9uZXQvZ3RwLmMtMTM0NC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNzozNDo1MC4wMjM3NzE4NTJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMwMTI2MjQ3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBHVFAgUERQIENvbnRleHQgTG9ja2luZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgYWRkaW5nIGEgbXV0ZXgsIGBndHBfcGRwX2xvY2tgLCB0byBwcm90ZWN0IHRoZSBQRFAgY29udGV4dCBoYXNoIHRhYmxlcy4gSXTigJlzIGRlZmluaXRlbHkgYWJvdXQgbG9ja2luZyB0byBoYW5kbGUgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlc2UgY29udGV4dHMsIHNvIGZ1enppbmcgaXMgd2FycmFudGVkLlxuXG5GaXJzdCwgbGV0J3MgbmFpbCBkb3duIGFueSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGUgcGF0Y2ggbWVudGlvbnMgYEdUUGAsIHdoaWNoIGRlcGVuZHMgb24gYElORVRgLiBXaGlsZSBgSU5FVGAgaXMgZ2VuZXJhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgSSdsbCBvbmx5IGV4cGxpY2l0bHkgbGlzdCBgR1RQYCBzaW5jZSB0aGF0J3Mgd2hhdCdzIHJlcXVlc3RlZC4gTm8gbmVlZCB0byBvdmVyY29tcGxpY2F0ZSB0aGluZ3M7IEknbGwgbGlzdCBgR1RQYCBpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgLlxuXG5Ob3csIGxldCdzIHN0ZXAgdGhyb3VnaCB0aGUgcGF0Y2ggb25lIG1vcmUgdGltZSB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gVGhlIGBtdXRleF9sb2NrKFx1MDAyNmd0cF9wZHBfbG9jaylgIGNhbGxzIGFwcGVhciBpbiB0aGUgbmV0bGluayBoYW5kbGVyczogYGd0cF9nZW5sX25ld19wZHBgIGFuZCBgZ3RwX2dlbmxfZGVsX3BkcGAsIGFzIHdlbGwgYXMgYGd0cF9kZWxsaW5rYC4gQWxzbywgdGhlcmUgYXJlIGBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2Z3RwX3BkcF9sb2NrKWAgY2hlY2tzIGluIFJDVSBsaXN0IHRyYXZlcnNhbCBmdW5jdGlvbnM6IGBndHAwX3BkcF9maW5kYCwgYGd0cDFfcGRwX2ZpbmRgLCBgaXB2NF9wZHBfZmluZGAsIGFuZCBgaXB2Nl9wZHBfZmluZGAuIFN0cmFpZ2h0Zm9yd2FyZCBsb2NraW5nIGZpeCwgcmVhbGx5LlxuXG5NeSByZWFzb25pbmcgaXMgdGhpczogdGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbXV0ZXgsIGBndHBfcGRwX2xvY2tgLCB0byBzYWZlZ3VhcmQgdGhvc2UgUERQIGNvbnRleHQgaGFzaCB0YWJsZXMgd2l0aGluIHRoZSBHVFAgZHJpdmVyLiBUaGlzIGludm9sdmVzIGNoYW5nZXMgdG8gbmV0bGluayBoYW5kbGVycyAoYGd0cF9nZW5sX25ld19wZHBgLCBgZ3RwX2dlbmxfZGVsX3BkcGApLCBsaW5rIGRlbGV0aW9uIChgZ3RwX2RlbGxpbmtgKSwgYW5kIGFkanVzdG1lbnRzIHRvIFJDVSBsaXN0IHRyYXZlcnNhbHMuIEdpdmVuIHRoaXMgaXMgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBuZXR3b3JraW5nIGNvZGUsIGZ1enppbmcgaXMgcmVxdWlyZWQgdG8gZW5zdXJlIGl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuYXN0eSBkZWFkbG9ja3Mgb3IgcmFjZSBjb25kaXRpb25zLlxuXG5JJ3ZlIGFscmVhZHkgc2VsZWN0ZWQgYGd0cF9nZW5sX25ld19wZHBgLCBgZ3RwX2dlbmxfZGVsX3BkcGAsIGFuZCBgZ3RwX2RlbGxpbmtgIGFzIGtleSBzeW1ib2xzLlxuXG5J4oCZbSBub3cgdmVyaWZ5aW5nIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzLiBUaGUgZnVuY3Rpb25zIGBndHAwX3BkcF9maW5kYCwgYGd0cDFfcGRwX2ZpbmRgLCBgaXB2NF9wZHBfZmluZGAsIGFuZCBgaXB2Nl9wZHBfZmluZGAgYXJlIHdoZXJlIHRoZSBsb2NrZGVwIGNoZWNrcyBhcmUgaW1wbGVtZW50ZWQuIEknbSBub3cgdmVyaWZ5aW5nIHRoZXNlIGVudHJ5IHBvaW50cy4gTG9va2luZyBhdCB0aGUgY2FsbCBjaGFpbnMsIEkgc2VlIHRoYXQgYGd0cDBfcGRwX2ZpbmRgIGFuZCBgZ3RwMV9wZHBfZmluZGAgYXJlIGNhbGxlZCBmcm9tIGBndHBfZW5jYXBfcmVjdmAgd2hpY2ggaW4gdHVybiBjYWxscyBgZ3RwMF91ZHBfZW5jYXBfcmVjdmAgYW5kIGBndHAxdV91ZHBfZW5jYXBfcmVjdmAuIFNpbWlsYXJseSwgYGlwdjRfcGRwX2ZpbmRgIGFuZCBgaXB2Nl9wZHBfZmluZGAgYXJlIGNhbGxlZCBmcm9tIGBndHBfZGV2X3htaXRgIHdoaWNoIGluIHR1cm4gY2FsbHMgYGd0cF9idWlsZF9za2JfaXA0YCBhbmQgYGd0cF9idWlsZF9za2JfaXA2YC4gU28sIHNlbGVjdGluZyBgZ3RwX2VuY2FwX3JlY3ZgIGFuZCBgZ3RwX2Rldl94bWl0YCBpcyBjb3JyZWN0LlxuXG5UaGF0IHNob3VsZCBjb3ZlciBldmVyeXRoaW5nLiBOb3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzNDQsIk91dHB1dFRva2VucyI6MjAyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE3OjM1OjAzLjAzNjM5OTdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTk4MTAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiR1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3RwX2dlbmxfbmV3X3BkcFwiLFxuICAgIFwiZ3RwX2dlbmxfZGVsX3BkcFwiLFxuICAgIFwiZ3RwX2RlbGxpbmtcIixcbiAgICBcImd0cF9lbmNhcF9yZWN2XCIsXG4gICAgXCJndHBfZGV2X3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG11dGV4IGBndHBfcGRwX2xvY2tgIHRvIHByb3RlY3QgUERQIGNvbnRleHQgaGFzaCB0YWJsZXMgaW4gdGhlIEdUUCBkcml2ZXIuIEl0IG1vZGlmaWVzIG5ldGxpbmsgaGFuZGxlcnMgKGBndHBfZ2VubF9uZXdfcGRwYCwgYGd0cF9nZW5sX2RlbF9wZHBgKSBhbmQgdGhlIGxpbmsgZGVsZXRpb24gaGFuZGxlciAoYGd0cF9kZWxsaW5rYCkgdG8gYWNxdWlyZSB0aGlzIGxvY2ssIGFuZCB1cGRhdGVzIFJDVSBsaXN0IHRyYXZlcnNhbHMgdG8gY2hlY2sgZm9yIGl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBsb2NraW5nIGRvZXMgbm90IGludHJvZHVjZSBkZWFkbG9ja3Mgb3IgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkdUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImd0cF9nZW5sX25ld19wZHBcIixcbiAgICBcImd0cF9nZW5sX2RlbF9wZHBcIixcbiAgICBcImd0cF9kZWxsaW5rXCIsXG4gICAgXCJndHBfZW5jYXBfcmVjdlwiLFxuICAgIFwiZ3RwX2Rldl94bWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtdXRleCBgZ3RwX3BkcF9sb2NrYCB0byBwcm90ZWN0IFBEUCBjb250ZXh0IGhhc2ggdGFibGVzIGluIHRoZSBHVFAgZHJpdmVyLiBJdCBtb2RpZmllcyBuZXRsaW5rIGhhbmRsZXJzIChgZ3RwX2dlbmxfbmV3X3BkcGAsIGBndHBfZ2VubF9kZWxfcGRwYCkgYW5kIHRoZSBsaW5rIGRlbGV0aW9uIGhhbmRsZXIgKGBndHBfZGVsbGlua2ApIHRvIGFjcXVpcmUgdGhpcyBsb2NrLCBhbmQgdXBkYXRlcyBSQ1UgbGlzdCB0cmF2ZXJzYWxzIHRvIGNoZWNrIGZvciBpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgbG9ja2luZyBkb2VzIG5vdCBpbnRyb2R1Y2UgZGVhZGxvY2tzIG9yIHJhY2UgY29uZGl0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTc6MzU6MDMuMTE2Mzg4MjY4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDI3Mzg2MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTc6MzU6MDMuMTE2ODY0NjU4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc0MjY5MDQzMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbXV0ZXggYGd0cF9wZHBfbG9ja2AgdG8gcHJvdGVjdCBQRFAgY29udGV4dCBvcGVyYXRpb25zIGluIHRoZSBHVFAgZHJpdmVyIGFuZCBhZGRzIGxvY2tkZXAgYW5ub3RhdGlvbnMgdG8gUkNVIGxpc3QgdHJhdmVyc2Fscy4gVGhpcyBpcyBwdXJlbHkgYSBjb25jdXJyZW5jeSBjb250cm9sIGFuZCBsb2NraW5nIGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgbWVtb3J5IGluaXRpYWxpemF0aW9uIGxvZ2ljLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZyAoZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMpIG9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg2MzExNDBmYjJiMTA5YWIxOThkZmU4ODBlYmMyZWIyYjM2ZmEwZThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxNzozMzoxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2d0cC5jIGIvZHJpdmVycy9uZXQvZ3RwLmNcbmluZGV4IDlhMTJjYzUzZGEwMDIuLjJmNmU3N2NjZTM4NWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ndHAuY1xuKysrIGIvZHJpdmVycy9uZXQvZ3RwLmNcbkBAIC0xMiw2ICsxMiw3IEBAXG4gI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcIjogXCIgZm10XG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91ZHAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdWxpc3QuaFx1MDAzZVxuQEAgLTEwOCw2ICsxMDksNyBAQCBzdHJ1Y3QgZ3RwX25ldCB7XG4gfTtcbiBcbiBzdGF0aWMgdTMyIGd0cF9oX2luaXR2YWw7XG4rc3RhdGljIERFRklORV9NVVRFWChndHBfcGRwX2xvY2spO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgZ3RwX2dlbmxfZmFtaWx5O1xuIFxuQEAgLTE1MSw3ICsxNTMsOCBAQCBzdGF0aWMgc3RydWN0IHBkcF9jdHggKmd0cDBfcGRwX2ZpbmQoc3RydWN0IGd0cF9kZXYgKmd0cCwgdTY0IHRpZCwgdTE2IGZhbWlseSlcbiBcbiBcdGhlYWQgPSBcdTAwMjZndHAtXHUwMDNldGlkX2hhc2hbZ3RwMF9oYXNoZm4odGlkKSAlIGd0cC1cdTAwM2VoYXNoX3NpemVdO1xuIFxuLVx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfdGlkKSB7XG4rXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF90aWQsXG4rXHRcdFx0XHQgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmd0cF9wZHBfbG9jaykpIHtcbiBcdFx0aWYgKHBkcC1cdTAwM2VhZiA9PSBmYW1pbHkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBwZHAtXHUwMDNlZ3RwX3ZlcnNpb24gPT0gR1RQX1YwIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgcGRwLVx1MDAzZXUudjAudGlkID09IHRpZClcbkBAIC0xNjgsNyArMTcxLDggQEAgc3RhdGljIHN0cnVjdCBwZHBfY3R4ICpndHAxX3BkcF9maW5kKHN0cnVjdCBndHBfZGV2ICpndHAsIHUzMiB0aWQsIHUxNiBmYW1pbHkpXG4gXG4gXHRoZWFkID0gXHUwMDI2Z3RwLVx1MDAzZXRpZF9oYXNoW2d0cDF1X2hhc2hmbih0aWQpICUgZ3RwLVx1MDAzZWhhc2hfc2l6ZV07XG4gXG4tXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF90aWQpIHtcbitcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X3RpZCxcbitcdFx0XHRcdCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2Z3RwX3BkcF9sb2NrKSkge1xuIFx0XHRpZiAocGRwLVx1MDAzZWFmID09IGZhbWlseSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHBkcC1cdTAwM2VndHBfdmVyc2lvbiA9PSBHVFBfVjEgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBwZHAtXHUwMDNldS52MS5pX3RlaSA9PSB0aWQpXG5AQCAtMTg1LDcgKzE4OSw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqaXB2NF9wZHBfZmluZChzdHJ1Y3QgZ3RwX2RldiAqZ3RwLCBfX2JlMzIgbXNfYWRkcilcbiBcbiBcdGhlYWQgPSBcdTAwMjZndHAtXHUwMDNlYWRkcl9oYXNoW2lwdjRfaGFzaGZuKG1zX2FkZHIpICUgZ3RwLVx1MDAzZWhhc2hfc2l6ZV07XG4gXG4tXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF9hZGRyKSB7XG4rXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF9hZGRyLFxuK1x0XHRcdFx0IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZndHBfcGRwX2xvY2spKSB7XG4gXHRcdGlmIChwZHAtXHUwMDNlYWYgPT0gQUZfSU5FVCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHBkcC1cdTAwM2Vtcy5hZGRyLnNfYWRkciA9PSBtc19hZGRyKVxuIFx0XHRcdHJldHVybiBwZHA7XG5AQCAtMjIwLDcgKzIyNSw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqaXB2Nl9wZHBfZmluZChzdHJ1Y3QgZ3RwX2RldiAqZ3RwLFxuIFxuIFx0aGVhZCA9IFx1MDAyNmd0cC1cdTAwM2VhZGRyX2hhc2hbaXB2Nl9oYXNoZm4obXNfYWRkcikgJSBndHAtXHUwMDNlaGFzaF9zaXplXTtcbiBcbi1cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X2FkZHIpIHtcbitcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X2FkZHIsXG4rXHRcdFx0XHQgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmd0cF9wZHBfbG9jaykpIHtcbiBcdFx0aWYgKHBkcC1cdTAwM2VhZiA9PSBBRl9JTkVUNiBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGlwdjZfcGRwX2FkZHJfZXF1YWwoXHUwMDI2cGRwLVx1MDAzZW1zLmFkZHI2LCBtc19hZGRyKSlcbiBcdFx0XHRyZXR1cm4gcGRwO1xuQEAgLTE1NTUsOSArMTU2MSwxMSBAQCBzdGF0aWMgdm9pZCBndHBfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuIFx0c3RydWN0IHBkcF9jdHggKnBjdHg7XG4gXHRpbnQgaTtcbiBcbitcdG11dGV4X2xvY2soXHUwMDI2Z3RwX3BkcF9sb2NrKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGd0cC1cdTAwM2VoYXNoX3NpemU7IGkrKylcbiBcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwY3R4LCBuZXh0LCBcdTAwMjZndHAtXHUwMDNldGlkX2hhc2hbaV0sIGhsaXN0X3RpZClcbiBcdFx0XHRwZHBfY29udGV4dF9kZWxldGUocGN0eCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2Z3RwX3BkcF9sb2NrKTtcbiBcbiBcdGxpc3RfZGVsKFx1MDAyNmd0cC1cdTAwM2VsaXN0KTtcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgaGVhZCk7XG5AQCAtMjA1Myw2ICsyMDYxLDcgQEAgc3RhdGljIGludCBndHBfZ2VubF9uZXdfcGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbitcdG11dGV4X2xvY2soXHUwMDI2Z3RwX3BkcF9sb2NrKTtcbiBcdHBjdHggPSBndHBfcGRwX2FkZChndHAsIHNrLCBpbmZvKTtcbiBcdGlmIChJU19FUlIocGN0eCkpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihwY3R4KTtcbkBAIC0yMDYwLDYgKzIwNjksNyBAQCBzdGF0aWMgaW50IGd0cF9nZW5sX25ld19wZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0Z3RwX3R1bm5lbF9ub3RpZnkocGN0eCwgR1RQX0NNRF9ORVdQRFAsIEdGUF9LRVJORUwpO1xuIFx0XHRlcnIgPSAwO1xuIFx0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmd0cF9wZHBfbG9jayk7XG4gXG4gb3V0X3VubG9jazpcbiBcdHJ0bmxfdW5sb2NrKCk7XG5AQCAtMjEzNCw2ICsyMTQ0LDggQEAgc3RhdGljIGludCBndHBfZ2VubF9kZWxfcGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbR1RQQV9WRVJTSU9OXSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHRtdXRleF9sb2NrKFx1MDAyNmd0cF9wZHBfbG9jayk7XG4rXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXG4gXHRwY3R4ID0gZ3RwX2ZpbmRfcGRwKHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIGluZm8tXHUwMDNlYXR0cnMpO1xuQEAgLTIxNTQsNiArMjE2Niw3IEBAIHN0YXRpYyBpbnQgZ3RwX2dlbmxfZGVsX3BkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFxuIG91dF91bmxvY2s6XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZndHBfcGRwX2xvY2spO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNzozNTowMy4xMTY4NjczMjhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQyNjg3MjYxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBHVFAgUERQIExvY2sgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhleSd2ZSBpbnRyb2R1Y2VkIGEgbmV3IG11dGV4LCBgZ3RwX3BkcF9sb2NrYCwgaW4gYGRyaXZlcnMvbmV0L2d0cC5jYCwgYW5kIHRoZXkncmUgdXNpbmcgaXQgdG8gcHJvdGVjdCBhY2Nlc3MgdG8gdGhlIFBEUCBjb250ZXh0IG1hbmFnZW1lbnQgZnVuY3Rpb25zOiBgZ3RwX3BkcF9hZGRgLCBgZ3RwX2ZpbmRfcGRwYCwgYW5kIGBwZHBfY29udGV4dF9kZWxldGVgLiBUaGlzIGxvb2tzIGxpa2UgYSBzdGFuZGFyZCBjb25jdXJyZW5jeSBjb250cm9sIG1lYXN1cmUg4oCTIHByb2JhYmx5IGFkZHJlc3NpbmcgYSByYWNlIGNvbmRpdGlvbiwgb3IgcGVyaGFwcyB0aGV5J3JlIGp1c3QgYWRkaW5nIGBsb2NrZGVwYCBhbm5vdGF0aW9ucy4gVGhleSd2ZSBhbHNvIGFkZGVkIGEgYGxvY2tkZXBfaXNfaGVsZGAgY2hlY2sgd2l0aGluIHRoZSBgaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1YCBjYWxscyBpbiB0aGUgbG9va3VwIGZ1bmN0aW9ucy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBwdXJlbHkgYSBsb2NraW5nLXJlbGF0ZWQgY2hhbmdlLiBJdCBkb2Vzbid0IHNlZW0gdG8gdG91Y2ggYW55IGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFwcGVhciB0byBkZWFsIHdpdGggYW55IG1lbW9yeSBpbml0aWFsaXphdGlvbiBpc3N1ZXMuIFRoZXJlZm9yZSwgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNlY3VyaXR5LWZvY3VzZWQgZGV2ZWxvcGVyLCBLTVNBTiBmdXp6aW5nIHNob3VsZG4ndCBiZSBuZWNlc3NhcnkgaGVyZS4gVGhpcyBpcyBjbGFzc2ljIEtBU0FOIGFuZCBMT0NLREVQIHRlcnJpdG9yeS4gS0FTQU4gd2lsbCBmbGFnIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBldGMuLCBhbmQgTE9DS0RFUCB3aWxsLCBvZiBjb3Vyc2UsIGNhdGNoIGFueSBpc3N1ZXMgd2l0aCB0aGUgbG9ja2luZyBzY2hlbWUuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBteSByZWFzb25pbmcuIEtBU0FOIGlzIHRoZXJlIGZvciBtZW1vcnkgc2FmZXR5IGlzc3VlcyDigJMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHVzZS1hZnRlci1mcmVlLCBldGMuIExPQ0tERVAgaXMgdGhlIGdvLXRvIHRvb2wgZm9yLCB3ZWxsLCBsb2NraW5nIGJ1Z3MuIEtNU0FOLi4uIHRoYXQncyB0aGUgb25lIHdlIHVzZSB0byBjYXRjaCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQnV0IHRoaXMgcGF0Y2ggaXMgZW50aXJlbHkgYWJvdXQgbG9ja2luZyBhbmQgY29uY3VycmVuY3kgY29udHJvbC4gU28sIHllcywgaXQncyBjbGVhcjogYE5lZWRzS01TQU4gPSBmYWxzZWAuIFdlJ3JlIGdvb2Qgd2l0aCBLQVNBTiBhbmQgTE9DS0RFUCBmb3IgdGhpcyBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MzMsIk91dHB1dFRva2VucyI6MTU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTc6MzU6MTAuNTQzNzQ1MDFaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbXV0ZXggYGd0cF9wZHBfbG9ja2AgdG8gcHJvdGVjdCBQRFAgY29udGV4dCBvcGVyYXRpb25zIGluIHRoZSBHVFAgZHJpdmVyIGFuZCBhZGRzIGxvY2tkZXAgYW5ub3RhdGlvbnMgdG8gUkNVIGxpc3QgdHJhdmVyc2Fscy4gVGhpcyBpcyBwdXJlbHkgYSBjb25jdXJyZW5jeSBjb250cm9sIGFuZCBsb2NraW5nIGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgbWVtb3J5IGluaXRpYWxpemF0aW9uIGxvZ2ljLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZyAoZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMpIG9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbXV0ZXggYGd0cF9wZHBfbG9ja2AgdG8gcHJvdGVjdCBQRFAgY29udGV4dCBvcGVyYXRpb25zIGluIHRoZSBHVFAgZHJpdmVyIGFuZCBhZGRzIGxvY2tkZXAgYW5ub3RhdGlvbnMgdG8gUkNVIGxpc3QgdHJhdmVyc2Fscy4gVGhpcyBpcyBwdXJlbHkgYSBjb25jdXJyZW5jeSBjb250cm9sIGFuZCBsb2NraW5nIGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgbWVtb3J5IGluaXRpYWxpemF0aW9uIGxvZ2ljLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZyAoZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMpIG9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdwm7x[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 17:30:58 +0000 UTC FinishedAt: 2026-08-18 17:35:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a3dee9bb902ee4357fa02e49b415d7724ee0140a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "GTP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a3dee9bb902ee4357fa02e49b415d7724ee0140a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "GTP" ], "series_id": "149c2eef-9448-459a-afda-24dd5b4ac65d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "gtp_genl_new_pdp", "gtp_genl_del_pdp", "gtp_dellink", "gtp_encap_recv", "gtp_dev_xmit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE3OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0dUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2d0cF9nZW5sX25ld19wZHAmIzM0OywKICAgICYjMzQ7Z3RwX2dlbmxfZGVsX3BkcCYjMzQ7LAogICAgJiMzNDtndHBfZGVsbGluayYjMzQ7LAogICAgJiMzNDtndHBfZW5jYXBfcmVjdiYjMzQ7LAogICAgJiMzNDtndHBfZGV2X3htaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG11dGV4IGBndHBfcGRwX2xvY2tgIHRvIHByb3RlY3QgUERQIGNvbnRleHQgb3BlcmF0aW9ucyBpbiB0aGUgR1RQIGRyaXZlciBhbmQgYWRkcyBsb2NrZGVwIGFubm90YXRpb25zIHRvIFJDVSBsaXN0IHRyYXZlcnNhbHMuIFRoaXMgaXMgcHVyZWx5IGEgY29uY3VycmVuY3kgY29udHJvbCBhbmQgbG9ja2luZyBjaGFuZ2UuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbW9kaWZ5IG1lbW9yeSBpbml0aWFsaXphdGlvbiBsb2dpYy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByZWxhdGVkIHRvIGxvY2tpbmcgKGRlYWRsb2NrcywgcmFjZSBjb25kaXRpb25zKSBvciB1c2UtYWZ0ZXItZnJlZS9vdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtdXRleCBgZ3RwX3BkcF9sb2NrYCB0byBwcm90ZWN0IFBEUCBjb250ZXh0IGhhc2ggdGFibGVzIGluIHRoZSBHVFAgZHJpdmVyLiBJdCBtb2RpZmllcyBuZXRsaW5rIGhhbmRsZXJzIChgZ3RwX2dlbmxfbmV3X3BkcGAsIGBndHBfZ2VubF9kZWxfcGRwYCkgYW5kIHRoZSBsaW5rIGRlbGV0aW9uIGhhbmRsZXIgKGBndHBfZGVsbGlua2ApIHRvIGFjcXVpcmUgdGhpcyBsb2NrLCBhbmQgdXBkYXRlcyBSQ1UgbGlzdCB0cmF2ZXJzYWxzIHRvIGNoZWNrIGZvciBpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgbG9ja2luZyBkb2VzIG5vdCBpbnRyb2R1Y2UgZGVhZGxvY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNzozMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg2MzExNDBmYjJiMTA5YWIxOThkZmU4ODBlYmMyZWIyYjM2ZmEwZThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxNzozMzoxMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ndHAuYyBiL2RyaXZlcnMvbmV0L2d0cC5jXG5pbmRleCA5YTEyY2M1M2RhMDAyLi4yZjZlNzdjY2UzODVmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZ3RwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2d0cC5jXG5AQCAtMTIsNiAmIzQzOzEyLDcgQEBcbiAjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFwmIzM0OzogXCYjMzQ7IGZtdFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VkcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1bGlzdC5oXHUwMDNlXG5AQCAtMTA4LDYgJiM0MzsxMDksNyBAQCBzdHJ1Y3QgZ3RwX25ldCB7XG4gfTtcbiBcbiBzdGF0aWMgdTMyIGd0cF9oX2luaXR2YWw7XG4mIzQzO3N0YXRpYyBERUZJTkVfTVVURVgoZ3RwX3BkcF9sb2NrKTtcbiBcbiBzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IGd0cF9nZW5sX2ZhbWlseTtcbiBcbkBAIC0xNTEsNyAmIzQzOzE1Myw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqZ3RwMF9wZHBfZmluZChzdHJ1Y3QgZ3RwX2RldiAqZ3RwLCB1NjQgdGlkLCB1MTYgZmFtaWx5KVxuIFxuIFx0aGVhZCA9IFx1MDAyNmd0cC1cdTAwM2V0aWRfaGFzaFtndHAwX2hhc2hmbih0aWQpICUgZ3RwLVx1MDAzZWhhc2hfc2l6ZV07XG4gXG4tXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF90aWQpIHtcbiYjNDM7XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF90aWQsXG4mIzQzO1x0XHRcdFx0IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZndHBfcGRwX2xvY2spKSB7XG4gXHRcdGlmIChwZHAtXHUwMDNlYWYgPT0gZmFtaWx5IFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgcGRwLVx1MDAzZWd0cF92ZXJzaW9uID09IEdUUF9WMCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHBkcC1cdTAwM2V1LnYwLnRpZCA9PSB0aWQpXG5AQCAtMTY4LDcgJiM0MzsxNzEsOCBAQCBzdGF0aWMgc3RydWN0IHBkcF9jdHggKmd0cDFfcGRwX2ZpbmQoc3RydWN0IGd0cF9kZXYgKmd0cCwgdTMyIHRpZCwgdTE2IGZhbWlseSlcbiBcbiBcdGhlYWQgPSBcdTAwMjZndHAtXHUwMDNldGlkX2hhc2hbZ3RwMXVfaGFzaGZuKHRpZCkgJSBndHAtXHUwMDNlaGFzaF9zaXplXTtcbiBcbi1cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X3RpZCkge1xuJiM0MztcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X3RpZCxcbiYjNDM7XHRcdFx0XHQgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmd0cF9wZHBfbG9jaykpIHtcbiBcdFx0aWYgKHBkcC1cdTAwM2VhZiA9PSBmYW1pbHkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBwZHAtXHUwMDNlZ3RwX3ZlcnNpb24gPT0gR1RQX1YxIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgcGRwLVx1MDAzZXUudjEuaV90ZWkgPT0gdGlkKVxuQEAgLTE4NSw3ICYjNDM7MTg5LDggQEAgc3RhdGljIHN0cnVjdCBwZHBfY3R4ICppcHY0X3BkcF9maW5kKHN0cnVjdCBndHBfZGV2ICpndHAsIF9fYmUzMiBtc19hZGRyKVxuIFxuIFx0aGVhZCA9IFx1MDAyNmd0cC1cdTAwM2VhZGRyX2hhc2hbaXB2NF9oYXNoZm4obXNfYWRkcikgJSBndHAtXHUwMDNlaGFzaF9zaXplXTtcbiBcbi1cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X2FkZHIpIHtcbiYjNDM7XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF9hZGRyLFxuJiM0MztcdFx0XHRcdCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2Z3RwX3BkcF9sb2NrKSkge1xuIFx0XHRpZiAocGRwLVx1MDAzZWFmID09IEFGX0lORVQgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBwZHAtXHUwMDNlbXMuYWRkci5zX2FkZHIgPT0gbXNfYWRkcilcbiBcdFx0XHRyZXR1cm4gcGRwO1xuQEAgLTIyMCw3ICYjNDM7MjI1LDggQEAgc3RhdGljIHN0cnVjdCBwZHBfY3R4ICppcHY2X3BkcF9maW5kKHN0cnVjdCBndHBfZGV2ICpndHAsXG4gXG4gXHRoZWFkID0gXHUwMDI2Z3RwLVx1MDAzZWFkZHJfaGFzaFtpcHY2X2hhc2hmbihtc19hZGRyKSAlIGd0cC1cdTAwM2VoYXNoX3NpemVdO1xuIFxuLVx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfYWRkcikge1xuJiM0MztcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X2FkZHIsXG4mIzQzO1x0XHRcdFx0IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZndHBfcGRwX2xvY2spKSB7XG4gXHRcdGlmIChwZHAtXHUwMDNlYWYgPT0gQUZfSU5FVDYgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBpcHY2X3BkcF9hZGRyX2VxdWFsKFx1MDAyNnBkcC1cdTAwM2Vtcy5hZGRyNiwgbXNfYWRkcikpXG4gXHRcdFx0cmV0dXJuIHBkcDtcbkBAIC0xNTU1LDkgJiM0MzsxNTYxLDExIEBAIHN0YXRpYyB2b2lkIGd0cF9kZWxsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4gXHRzdHJ1Y3QgcGRwX2N0eCAqcGN0eDtcbiBcdGludCBpO1xuIFxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2Z3RwX3BkcF9sb2NrKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGd0cC1cdTAwM2VoYXNoX3NpemU7IGkmIzQzOyYjNDM7KVxuIFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBjdHgsIG5leHQsIFx1MDAyNmd0cC1cdTAwM2V0aWRfaGFzaFtpXSwgaGxpc3RfdGlkKVxuIFx0XHRcdHBkcF9jb250ZXh0X2RlbGV0ZShwY3R4KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2Z3RwX3BkcF9sb2NrKTtcbiBcbiBcdGxpc3RfZGVsKFx1MDAyNmd0cC1cdTAwM2VsaXN0KTtcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgaGVhZCk7XG5AQCAtMjA1Myw2ICYjNDM7MjA2MSw3IEBAIHN0YXRpYyBpbnQgZ3RwX2dlbmxfbmV3X3BkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZndHBfcGRwX2xvY2spO1xuIFx0cGN0eCA9IGd0cF9wZHBfYWRkKGd0cCwgc2ssIGluZm8pO1xuIFx0aWYgKElTX0VSUihwY3R4KSkge1xuIFx0XHRlcnIgPSBQVFJfRVJSKHBjdHgpO1xuQEAgLTIwNjAsNiAmIzQzOzIwNjksNyBAQCBzdGF0aWMgaW50IGd0cF9nZW5sX25ld19wZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0Z3RwX3R1bm5lbF9ub3RpZnkocGN0eCwgR1RQX0NNRF9ORVdQRFAsIEdGUF9LRVJORUwpO1xuIFx0XHRlcnIgPSAwO1xuIFx0fVxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZndHBfcGRwX2xvY2spO1xuIFxuIG91dF91bmxvY2s6XG4gXHRydG5sX3VubG9jaygpO1xuQEAgLTIxMzQsNiAmIzQzOzIxNDQsOCBAQCBzdGF0aWMgaW50IGd0cF9nZW5sX2RlbF9wZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdGlmICghaW5mby1cdTAwM2VhdHRyc1tHVFBBX1ZFUlNJT05dKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmd0cF9wZHBfbG9jayk7XG4mIzQzO1xuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFxuIFx0cGN0eCA9IGd0cF9maW5kX3BkcChzb2NrX25ldChza2ItXHUwMDNlc2spLCBpbmZvLVx1MDAzZWF0dHJzKTtcbkBAIC0yMTU0LDYgJiM0MzsyMTY2LDcgQEAgc3RhdGljIGludCBndHBfZ2VubF9kZWxfcGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gb3V0X3VubG9jazpcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZndHBfcGRwX2xvY2spO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTc6MzM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0dUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2d0cF9nZW5sX25ld19wZHAmIzM0OywKICAgICYjMzQ7Z3RwX2dlbmxfZGVsX3BkcCYjMzQ7LAogICAgJiMzNDtndHBfZGVsbGluayYjMzQ7LAogICAgJiMzNDtndHBfZW5jYXBfcmVjdiYjMzQ7LAogICAgJiMzNDtndHBfZGV2X3htaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtdXRleCBgZ3RwX3BkcF9sb2NrYCB0byBwcm90ZWN0IFBEUCBjb250ZXh0IGhhc2ggdGFibGVzIGluIHRoZSBHVFAgZHJpdmVyLiBJdCBtb2RpZmllcyBuZXRsaW5rIGhhbmRsZXJzIChgZ3RwX2dlbmxfbmV3X3BkcGAsIGBndHBfZ2VubF9kZWxfcGRwYCkgYW5kIHRoZSBsaW5rIGRlbGV0aW9uIGhhbmRsZXIgKGBndHBfZGVsbGlua2ApIHRvIGFjcXVpcmUgdGhpcyBsb2NrLCBhbmQgdXBkYXRlcyBSQ1UgbGlzdCB0cmF2ZXJzYWxzIHRvIGNoZWNrIGZvciBpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgbG9ja2luZyBkb2VzIG5vdCBpbnRyb2R1Y2UgZGVhZGxvY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg2MzExNDBmYjJiMTA5YWIxOThkZmU4ODBlYmMyZWIyYjM2ZmEwZTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAxNzozMzoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2d0cC5jIGIvZHJpdmVycy9uZXQvZ3RwLmMKaW5kZXggOWExMmNjNTNkYTAwMi4uMmY2ZTc3Y2NlMzg1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ3RwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZ3RwLmMKQEAgLTEyLDYgJiM0MzsxMiw3IEBACiAjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICYjMzQ7OiAmIzM0OyBmbXQKIAogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VkcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdWxpc3QuaCZndDsKQEAgLTEwOCw2ICYjNDM7MTA5LDcgQEAgc3RydWN0IGd0cF9uZXQgewogfTsKIAogc3RhdGljIHUzMiBndHBfaF9pbml0dmFsOwomIzQzO3N0YXRpYyBERUZJTkVfTVVURVgoZ3RwX3BkcF9sb2NrKTsKIAogc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBndHBfZ2VubF9mYW1pbHk7CiAKQEAgLTE1MSw3ICYjNDM7MTUzLDggQEAgc3RhdGljIHN0cnVjdCBwZHBfY3R4ICpndHAwX3BkcF9maW5kKHN0cnVjdCBndHBfZGV2ICpndHAsIHU2NCB0aWQsIHUxNiBmYW1pbHkpCiAKIAloZWFkID0gJmFtcDtndHAtJmd0O3RpZF9oYXNoW2d0cDBfaGFzaGZuKHRpZCkgJSBndHAtJmd0O2hhc2hfc2l6ZV07CiAKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF90aWQpIHsKJiM0MzsJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfdGlkLAomIzQzOwkJCQkgbG9ja2RlcF9pc19oZWxkKCZhbXA7Z3RwX3BkcF9sb2NrKSkgewogCQlpZiAocGRwLSZndDthZiA9PSBmYW1pbHkgJmFtcDsmYW1wOwogCQkgICAgcGRwLSZndDtndHBfdmVyc2lvbiA9PSBHVFBfVjAgJmFtcDsmYW1wOwogCQkgICAgcGRwLSZndDt1LnYwLnRpZCA9PSB0aWQpCkBAIC0xNjgsNyAmIzQzOzE3MSw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqZ3RwMV9wZHBfZmluZChzdHJ1Y3QgZ3RwX2RldiAqZ3RwLCB1MzIgdGlkLCB1MTYgZmFtaWx5KQogCiAJaGVhZCA9ICZhbXA7Z3RwLSZndDt0aWRfaGFzaFtndHAxdV9oYXNoZm4odGlkKSAlIGd0cC0mZ3Q7aGFzaF9zaXplXTsKIAotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X3RpZCkgewomIzQzOwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF90aWQsCiYjNDM7CQkJCSBsb2NrZGVwX2lzX2hlbGQoJmFtcDtndHBfcGRwX2xvY2spKSB7CiAJCWlmIChwZHAtJmd0O2FmID09IGZhbWlseSAmYW1wOyZhbXA7CiAJCSAgICBwZHAtJmd0O2d0cF92ZXJzaW9uID09IEdUUF9WMSAmYW1wOyZhbXA7CiAJCSAgICBwZHAtJmd0O3UudjEuaV90ZWkgPT0gdGlkKQpAQCAtMTg1LDcgJiM0MzsxODksOCBAQCBzdGF0aWMgc3RydWN0IHBkcF9jdHggKmlwdjRfcGRwX2ZpbmQoc3RydWN0IGd0cF9kZXYgKmd0cCwgX19iZTMyIG1zX2FkZHIpCiAKIAloZWFkID0gJmFtcDtndHAtJmd0O2FkZHJfaGFzaFtpcHY0X2hhc2hmbihtc19hZGRyKSAlIGd0cC0mZ3Q7aGFzaF9zaXplXTsKIAotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X2FkZHIpIHsKJiM0MzsJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfYWRkciwKJiM0MzsJCQkJIGxvY2tkZXBfaXNfaGVsZCgmYW1wO2d0cF9wZHBfbG9jaykpIHsKIAkJaWYgKHBkcC0mZ3Q7YWYgPT0gQUZfSU5FVCAmYW1wOyZhbXA7CiAJCSAgICBwZHAtJmd0O21zLmFkZHIuc19hZGRyID09IG1zX2FkZHIpCiAJCQlyZXR1cm4gcGRwOwpAQCAtMjIwLDcgJiM0MzsyMjUsOCBAQCBzdGF0aWMgc3RydWN0IHBkcF9jdHggKmlwdjZfcGRwX2ZpbmQoc3RydWN0IGd0cF9kZXYgKmd0cCwKIAogCWhlYWQgPSAmYW1wO2d0cC0mZ3Q7YWRkcl9oYXNoW2lwdjZfaGFzaGZuKG1zX2FkZHIpICUgZ3RwLSZndDtoYXNoX3NpemVdOwogCi0JaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfYWRkcikgewomIzQzOwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF9hZGRyLAomIzQzOwkJCQkgbG9ja2RlcF9pc19oZWxkKCZhbXA7Z3RwX3BkcF9sb2NrKSkgewogCQlpZiAocGRwLSZndDthZiA9PSBBRl9JTkVUNiAmYW1wOyZhbXA7CiAJCSAgICBpcHY2X3BkcF9hZGRyX2VxdWFsKCZhbXA7cGRwLSZndDttcy5hZGRyNiwgbXNfYWRkcikpCiAJCQlyZXR1cm4gcGRwOwpAQCAtMTU1NSw5ICYjNDM7MTU2MSwxMSBAQCBzdGF0aWMgdm9pZCBndHBfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQogCXN0cnVjdCBwZHBfY3R4ICpwY3R4OwogCWludCBpOwogCiYjNDM7CW11dGV4X2xvY2soJmFtcDtndHBfcGRwX2xvY2spOwogCWZvciAoaSA9IDA7IGkgJmx0OyBndHAtJmd0O2hhc2hfc2l6ZTsgaSYjNDM7JiM0MzspCiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGN0eCwgbmV4dCwgJmFtcDtndHAtJmd0O3RpZF9oYXNoW2ldLCBobGlzdF90aWQpCiAJCQlwZHBfY29udGV4dF9kZWxldGUocGN0eCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2d0cF9wZHBfbG9jayk7CiAKIAlsaXN0X2RlbCgmYW1wO2d0cC0mZ3Q7bGlzdCk7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCBoZWFkKTsKQEAgLTIwNTMsNiAmIzQzOzIwNjEsNyBAQCBzdGF0aWMgaW50IGd0cF9nZW5sX25ld19wZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAomIzQzOwltdXRleF9sb2NrKCZhbXA7Z3RwX3BkcF9sb2NrKTsKIAlwY3R4ID0gZ3RwX3BkcF9hZGQoZ3RwLCBzaywgaW5mbyk7CiAJaWYgKElTX0VSUihwY3R4KSkgewogCQllcnIgPSBQVFJfRVJSKHBjdHgpOwpAQCAtMjA2MCw2ICYjNDM7MjA2OSw3IEBAIHN0YXRpYyBpbnQgZ3RwX2dlbmxfbmV3X3BkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQlndHBfdHVubmVsX25vdGlmeShwY3R4LCBHVFBfQ01EX05FV1BEUCwgR0ZQX0tFUk5FTCk7CiAJCWVyciA9IDA7CiAJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDtndHBfcGRwX2xvY2spOwogCiBvdXRfdW5sb2NrOgogCXJ0bmxfdW5sb2NrKCk7CkBAIC0yMTM0LDYgJiM0MzsyMTQ0LDggQEAgc3RhdGljIGludCBndHBfZ2VubF9kZWxfcGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJaWYgKCFpbmZvLSZndDthdHRyc1tHVFBBX1ZFUlNJT05dKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwltdXRleF9sb2NrKCZhbXA7Z3RwX3BkcF9sb2NrKTsKJiM0MzsKIAlyY3VfcmVhZF9sb2NrKCk7CiAKIAlwY3R4ID0gZ3RwX2ZpbmRfcGRwKHNvY2tfbmV0KHNrYi0mZ3Q7c2spLCBpbmZvLSZndDthdHRycyk7CkBAIC0yMTU0LDYgJiM0MzsyMTY2LDcgQEAgc3RhdGljIGludCBndHBfZ2VubF9kZWxfcGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAKIG91dF91bmxvY2s6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2d0cF9wZHBfbG9jayk7CiAJcmV0dXJuIGVycjsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDM2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgR1RQIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvbmV0L2d0cC5jYC4gSXQmIzM5O3MgaW50cm9kdWNpbmcgYSBuZXcgbXV0ZXgsIGBndHBfcGRwX2xvY2tgLCBhbmQgdXNpbmcgaXQgaW4gYGd0cF9kZWxsaW5rYCwgYGd0cF9nZW5sX25ld19wZHBgLCBhbmQgYGd0cF9nZW5sX2RlbF9wZHBgLiAgU291bmRzIGxpa2UgdGhleSYjMzk7cmUgYmVlZmluZyB1cCB0aGUgbG9ja2luZyBhcm91bmQgdGhlIFBEUCAoUGFja2V0IERhdGEgUHJvdG9jb2wpIGNvbnRleHQgd2l0aGluIHRoZSBHVFAgZHJpdmVyLiBTbWFydCBtb3ZlLCBsaWtlbHkgYWRkcmVzc2luZyBzb21lIHJhY2UgY29uZGl0aW9uIG9yIGNvbmN1cnJlbmN5IGlzc3VlLgoKSSBzZWUgdGhleSYjMzk7dmUgYWxzbyBhZGRlZCBgbG9ja2RlcF9pc19oZWxkKCZhbXA7Z3RwX3BkcF9sb2NrKWAgY2hlY2tzIHdpdGhpbiB0aG9zZSBgaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1YCBpdGVyYXRpb25zIGluIGBndHAwX3BkcF9maW5kYCwgYGd0cDFfcGRwX2ZpbmRgLCBgaXB2NF9wZHBfZmluZGAsIGFuZCBgaXB2Nl9wZHBfZmluZGAuIEdvb2QsIHRoZXkmIzM5O3JlIGJlaW5nIGNhcmVmdWwgd2l0aCB0aGUgUkNVIChSZWFkLUNvcHktVXBkYXRlKSBtZWNoYW5pc20gaGVyZSwgbWFraW5nIHN1cmUgdGhlIGxvY2sgaXMgaGVsZCB3aGVuIGFwcHJvcHJpYXRlLiBJdCYjMzk7cyBmdW5jdGlvbmFsLCBtZWFuaW5nIGl0JiMzOTtzIGNoYW5naW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgZHJpdmVyLCBhbmQgcG90ZW50aWFsbHkgZml4aW5nIGEgYnVnIG9yIGltcHJvdmluZyBwZXJmb3JtYW5jZS4KCkdUUCBpcyBhIG5ldHdvcmsgZHJpdmVyLCBhbmQgY29uc2lkZXJpbmcgaXRzIHJvbGUgaW4gdHVubmVsaW5nLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIHVzZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgdG8gc2VlIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIG1pZ2h0IGJlIHJlbGF0ZWQgdG8gR1RQLiBUaW1lIHRvIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCBzZWFyY2ggZm9yIHNvbWV0aGluZyBsaWtlIGBjb25maWcgR1RQYCBvciBgR1RQYCBpbiBgZHJpdmVycy9uZXQvS2NvbmZpZ2AuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gaXMgZW5hYmxlZCBmb3IgdGhpcyBwYXRjaCB0byBldmVuIGJlIHJlbGV2YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE3OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBHVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MjYwPWNvbmZpZyBCQVJFVURQXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNzEtXG5kcml2ZXJzL25ldC9LY29uZmlnOjI3Mjpjb25maWcgR1RQXG5kcml2ZXJzL25ldC9LY29uZmlnLTI3My1cdHRyaXN0YXRlIFwmIzM0O0dQUlMgVHVubmVsaW5nIFByb3RvY29sIGRhdGFwYXRoIChHVFAtVSlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTMwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgbmV0d29yayBkcml2ZXIuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBkcml2ZXJzL25ldC9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDI3Mi4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZXNlIHRoaW5ncyBpcyBkZWZpbmVkLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIHJlbGV2YW50IGBjb25maWdgIG9wdGlvbnMsIHRoZWlyIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBjb21wb25lbnRzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIGltcGFjdGluZyBpdHMgYmVoYXZpb3IuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGBkZXBlbmRzIG9uYCwgYHNlbGVjdGAsIG9yIGBkZWZhdWx0YCBjbGF1c2VzIHRoYXQgZGljdGF0ZSB3aGVuIGFuZCBob3cgdGhpcyBkcml2ZXIgZ2V0cyBidWlsdC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGhhbmRsZSBvbiBob3cgaXQmIzM5O3MgaW50ZW5kZWQgdG8gYmUgY29uZmlndXJlZCB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBGcm9tIGhlcmUsIEkgY2FuIHRoZW4gc3RhcnQgdG8gaW5mZXIgaXRzIGltcGxpY2F0aW9ucyBhbmQgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBjb21wb25lbnRzIG9mIHRoZSBrZXJuZWwgbmV0d29yayBzdGFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI3MDpcdFx0ICB3aWxsIGJlIGNhbGxlZCBiYXJldWRwLlxuIDI3MTpcdFxuIDI3MjpcdGNvbmZpZyBHVFBcbiAyNzM6XHRcdHRyaXN0YXRlIFwmIzM0O0dQUlMgVHVubmVsaW5nIFByb3RvY29sIGRhdGFwYXRoIChHVFAtVSlcJiMzNDtcbiAyNzQ6XHRcdGRlcGVuZHMgb24gSU5FVFxuIDI3NTpcdFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4gMjc2Olx0XHRoZWxwXG4gMjc3Olx0XHQgIFRoaXMgYWxsb3dzIG9uZSB0byBjcmVhdGUgZ3RwIHZpcnR1YWwgaW50ZXJmYWNlcyB0aGF0IHByb3ZpZGVcbiAyNzg6XHRcdCAgdGhlIEdQUlMgVHVubmVsaW5nIFByb3RvY29sIGRhdGFwYXRoIChHVFAtVSkuIFRoaXMgdHVubmVsaW5nIHByb3RvY29sXG4gMjc5Olx0XHQgIGlzIHVzZWQgdG8gcHJldmVudCBzdWJzY3JpYmVycyBmcm9tIGFjY2Vzc2luZyBtb2JpbGUgY2FycmllciBjb3JlXG4gMjgwOlx0XHQgIG5ldHdvcmsgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIGEgdXNlcnNwYWNlIHNvZnR3YXJlIHRoYXRcbiAyODE6XHRcdCAgaW1wbGVtZW50cyB0aGUgc2lnbmFsaW5nIHByb3RvY29sIChHVFAtQykgdG8gdXBkYXRlIGl0cyBQRFAgY29udGV4dFxuIDI4MjpcdFx0ICBiYXNlLCBzdWNoIGFzIE9wZW5HR1NOIFx1MDAzY2h0dHA6Ly9naXQub3Ntb2NvbS5vcmcvb3Blbmdnc24vKS4gVGhpc1xuIDI4MzpcdFx0ICB0dW5uZWxpbmcgcHJvdG9jb2wgaXMgaW1wbGVtZW50ZWQgYWNjb3JkaW5nIHRvIHRoZSBHU00gVFMgMDkuNjAgYW5kXG4gMjg0Olx0XHQgIDNHUFAgVFMgMjkuMDYwIHN0YW5kYXJkcy5cbiAyODU6XHRcbiAyODY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlcnMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAyODc6XHRcdCAgd2lsbCBiZSBjYWxsZWQgZ3RwLlxuIDI4ODpcdFxuIDI4OTpcdGNvbmZpZyBQRkNQXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTc6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcxMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgR1RQIENvbmZpZ3VyYXRpb24gUGF0Y2gqKgoKT2theSwgc28gdGhlIGNvbmZpZyBoZXJlIGlzIGBHVFBgLCBhbmQgaXQmIzM5O3MgZGVwZW5kZW50IG9uIGBJTkVUYC4gVGhhdCBtZWFucyBJIGRlZmluaXRlbHkgbmVlZCB0byBtYWtlIHN1cmUgYEdUUGAgaXMgaW5jbHVkZWQgaW4gYEVuYWJsZUNvbmZpZ3NgLiBUaGF0JiMzOTtzIGEgbm8tYnJhaW5lci4KCk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGtleSBmdW5jdGlvbnMgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjaGFuZ2VzLiBUaGUgcGF0Y2ggYWZmZWN0cyBgZ3RwX2RlbGxpbmtgLCBgZ3RwX2dlbmxfbmV3X3BkcGAsIGBndHBfZ2VubF9kZWxfcGRwYCwgYGd0cDBfcGRwX2ZpbmRgLCBgZ3RwMV9wZHBfZmluZGAsIGBpcHY0X3BkcF9maW5kYCwgYW5kIGBpcHY2X3BkcF9maW5kYC4KCmBndHBfZ2VubF9uZXdfcGRwYCBhbmQgYGd0cF9nZW5sX2RlbF9wZHBgIGltbWVkaWF0ZWx5IHN0YW5kIG91dCBhcyBpbXBvcnRhbnQuIFRoZXkmIzM5O3JlIG5ldGxpbmsgaGFuZGxlcnMgc3BlY2lmaWNhbGx5IGZvciBHVFAsIHNvIHRob3NlIGFyZSBkZWZpbml0ZWx5IGdvb2QgY2FuZGlkYXRlcy4gYGd0cF9kZWxsaW5rYCBpcyB0aGUgcnRubCBsaW5rIGRlbGV0ZSBoYW5kbGVyLCBzbyB0aGF0JiMzOTtzIGFsc28gaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBsaW5rIGxpZmVjeWNsZS4gVGhlIGAqX3BkcF9maW5kYCBmdW5jdGlvbnMgYXJlIGludGVybmFsIGhlbHBlcnMsIHNvIHdoaWxlIHRoZXkgYXJlIHJlbGV2YW50LCB0aGV5IG1heSBub3QgYmUgdGhlIHByaW1hcnkgZW50cnlwb2ludHMuCgpUaGUgZ3VpZGFuY2Ugc2F5cyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IG1ha2VzIHNlbnNlLCBiZWNhdXNlIEkgd2FudCB0byBsb29rIGF0IGZ1bmN0aW9ucyB3aXRoIGRpc3RpbmN0IGFkZHJlc3NlcyBhbmQgdGhhdCBhcmVuJiMzOTt0IG92ZXJseSBvcHRpbWl6ZWQgYXdheSBieSB0aGUgY29tcGlsZXIuIFNvLCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgYGd0cF9nZW5sX25ld19wZHBgIGFuZCBgZ3RwX2dlbmxfZGVsX3BkcGAgYXJlIHN0YXRpYy4gQWgsIHRoZXkgYXJlISBIb3dldmVyLCB0aGV5IGFyZSBuZXRsaW5rIGNhbGxiYWNrcywgc28gaXQgc2VlbXMgdW5saWtlbHkgdGhleSYjMzk7cmUgaW5saW5lZC4gSSBuZWVkIHRvIGNoZWNrIHdoZXJlIHRoZXkgYXJlIHVzZWQgd2l0aGluIGBkcml2ZXJzL25ldC9ndHAuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3RwX2dlbmxfbmV3X3BkcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2d0cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2d0cC5jPTIwMTI9c3RhdGljIGludCBndHBfdHVubmVsX25vdGlmeShzdHJ1Y3QgcGRwX2N0eCAqcGN0eCwgdTggY21kLCBnZnBfdCBhbGxvY2F0aW9uKTtcbmRyaXZlcnMvbmV0L2d0cC5jLTIwMTMtXG5kcml2ZXJzL25ldC9ndHAuYzoyMDE0OnN0YXRpYyBpbnQgZ3RwX2dlbmxfbmV3X3BkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuZHJpdmVycy9uZXQvZ3RwLmMtMjAxNS17XG4tLVxuZHJpdmVycy9uZXQvZ3RwLmM9MjQ0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIGd0cF9nZW5sX29wc1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTI0NDktXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbmRyaXZlcnMvbmV0L2d0cC5jOjI0NTA6XHRcdC5kb2l0ID0gZ3RwX2dlbmxfbmV3X3BkcCxcbmRyaXZlcnMvbmV0L2d0cC5jLTI0NTEtXHRcdC5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Nzg1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgY29uc2lkZXJpbmcgSSYjMzk7bSBzZWVpbmcgdGhpcyBjb2RlOgoKKipBbmFseXppbmcgQ2FsbGJhY2sgVXNhZ2UgYW5kIEVudHJ5IFBvaW50cyoqCgpBbHJpZ2h0LCBzbyB0aGUgYC5kb2l0YCBjYWxsYmFja3Mgd2l0aGluIGBndHBfZ2VubF9vcHNgIGFyZSBkZWZpbml0ZWx5ICpub3QqIGlubGluZWQuIFRoZXkgYXJlIGNsZWFybHkgY2FsbGVkIGFzIGZ1bmN0aW9ucy4gVGhlIHNhbWUgZ29lcyBmb3IgYGd0cF9nZW5sX2RlbF9wZHBgLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgbWFrZXMgZGVidWdnaW5nIGEgYml0IGVhc2llci4KCkFuZCBpdCBsb29rcyBsaWtlIGBndHBfZGVsbGlua2AgaXMgb3BlcmF0aW5nIGFzIGEgYC5kZWxsaW5rYCBjYWxsIGluIGBydG5sX2xpbmtfb3BzYC4gVGhpcyBpcyBhbGwgbWFraW5nIHNlbnNlIHNvIGZhci4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgc2NhbiBmb3IgKm90aGVyKiBlbnRyeSBwb2ludHMgdGhhdCBtaWdodCBiZSBjYWxsaW5nIGAqX3BkcF9maW5kYC4gSSBuZWVkIHRvIGVuc3VyZSBJJiMzOTt2ZSBjb3ZlcmVkIGFsbCB0aGUgcmVsZXZhbnQgY2FsbHMgdG8gdGhhdCBmdW5jdGlvbiwgdG8gYXZvaWQgbWlzc2luZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIGFyZWFzIG9mIG9wdGltaXphdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgaW4gcGxheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3RwMF9wZHBfZmluZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2d0cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2d0cC5jPTE0Mj1zdGF0aWMgdTMyIGlwdjZfaGFzaGZuKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqaXA2KVxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTE0OC0vKiBSZXNvbHZlIGEgUERQIGNvbnRleHQgc3RydWN0dXJlIGJhc2VkIG9uIHRoZSA2NGJpdCBUSUQuICovXG5kcml2ZXJzL25ldC9ndHAuYzoxNDk6c3RhdGljIHN0cnVjdCBwZHBfY3R4ICpndHAwX3BkcF9maW5kKHN0cnVjdCBndHBfZGV2ICpndHAsIHU2NCB0aWQsIHUxNiBmYW1pbHkpXG5kcml2ZXJzL25ldC9ndHAuYy0xNTAte1xuLS1cbmRyaXZlcnMvbmV0L2d0cC5jPTU4Nj1zdGF0aWMgaW50IGd0cDBfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IGd0cF9kZXYgKmd0cCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC9ndHAuYy02MTktXG5kcml2ZXJzL25ldC9ndHAuYzo2MjA6XHRwY3R4ID0gZ3RwMF9wZHBfZmluZChndHAsIGJlNjRfdG9fY3B1KGd0cDAtXHUwMDNldGlkKSxcbmRyaXZlcnMvbmV0L2d0cC5jLTYyMS1cdFx0XHQgICAgIGd0cF9wcm90b190b19mYW1pbHkoaW5uZXJfcHJvdG8pKTtcbi0tXG5kcml2ZXJzL25ldC9ndHAuYz0xODMyPXN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqZ3RwX3BkcF9hZGQoc3RydWN0IGd0cF9kZXYgKmd0cCwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTE4ODYtXHRpZiAodmVyc2lvbiA9PSBHVFBfVjApXG5kcml2ZXJzL25ldC9ndHAuYzoxODg3Olx0XHRwY3R4X3RpZCA9IGd0cDBfcGRwX2ZpbmQoZ3RwLFxuZHJpdmVycy9uZXQvZ3RwLmMtMTg4OC1cdFx0XHRcdFx0IG5sYV9nZXRfdTY0KGluZm8tXHUwMDNlYXR0cnNbR1RQQV9USURdKSxcbi0tXG5kcml2ZXJzL25ldC9ndHAuYz0yMDc5PXN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqZ3RwX2ZpbmRfcGRwX2J5X2xpbmsoc3RydWN0IG5ldCAqbmV0LFxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTIxMTItXHRcdGlmIChndHBfdmVyc2lvbiA9PSBHVFBfVjAgXHUwMDI2XHUwMDI2IG5sYVtHVFBBX1RJRF0pIHtcbmRyaXZlcnMvbmV0L2d0cC5jOjIxMTM6XHRcdFx0cmV0dXJuIGd0cDBfcGRwX2ZpbmQoZ3RwLCBubGFfZ2V0X3U2NChubGFbR1RQQV9USURdKSxcbmRyaXZlcnMvbmV0L2d0cC5jLTIxMTQtXHRcdFx0XHRcdCAgICAgZmFtaWx5KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY2NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKlVEUCBQYWNrZXQgUmVjZXB0aW9uIGFuZCBHVFAgVHVubmVsIExvb2t1cCoqCgpPa2F5LCBzbyBgZ3RwMF91ZHBfZW5jYXBfcmVjdmAgaGFzIGJlZW4gdHJpZ2dlcmVkOyBpdCYjMzk7cyBhIFVEUCBwYWNrZXQgY29taW5nIGluLCBsaWtlbHkgZW5jYXBzdWxhdGVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRvIGRvIHdpdGggaXQuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNoZWNrIGlmIHRoaXMgaXMgYSBHVFAgcGFja2V0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBHVFAgbG9va3VwIHByb2Nlc3MuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBwYWNrZXQgYmVsb25ncyB0byBhbiBleGlzdGluZyBQRFAgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBjYWxsIGBndHAxX3BkcF9maW5kYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2d0cDFfcGRwX2ZpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ndHAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ndHAuYz0xNDk9c3RhdGljIHN0cnVjdCBwZHBfY3R4ICpndHAwX3BkcF9maW5kKHN0cnVjdCBndHBfZGV2ICpndHAsIHU2NCB0aWQsIHUxNiBmYW1pbHkpXG4tLVxuZHJpdmVycy9uZXQvZ3RwLmMtMTY2LS8qIFJlc29sdmUgYSBQRFAgY29udGV4dCBzdHJ1Y3R1cmUgYmFzZWQgb24gdGhlIDMyYml0IFRFSS4gKi9cbmRyaXZlcnMvbmV0L2d0cC5jOjE2NzpzdGF0aWMgc3RydWN0IHBkcF9jdHggKmd0cDFfcGRwX2ZpbmQoc3RydWN0IGd0cF9kZXYgKmd0cCwgdTMyIHRpZCwgdTE2IGZhbWlseSlcbmRyaXZlcnMvbmV0L2d0cC5jLTE2OC17XG4tLVxuZHJpdmVycy9uZXQvZ3RwLmM9Nzk0PXN0YXRpYyBpbnQgZ3RwMXVfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IGd0cF9kZXYgKmd0cCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC9ndHAuYy04NDYtXG5kcml2ZXJzL25ldC9ndHAuYzo4NDc6XHRwY3R4ID0gZ3RwMV9wZHBfZmluZChndHAsIG50b2hsKGd0cDEtXHUwMDNldGlkKSxcbmRyaXZlcnMvbmV0L2d0cC5jLTg0OC1cdFx0XHQgICAgIGd0cF9wcm90b190b19mYW1pbHkoaW5uZXJfcHJvdG8pKTtcbi0tXG5kcml2ZXJzL25ldC9ndHAuYz0xODMyPXN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqZ3RwX3BkcF9hZGQoc3RydWN0IGd0cF9kZXYgKmd0cCwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTE4OTAtXHRlbHNlIGlmICh2ZXJzaW9uID09IEdUUF9WMSlcbmRyaXZlcnMvbmV0L2d0cC5jOjE4OTE6XHRcdHBjdHhfdGlkID0gZ3RwMV9wZHBfZmluZChndHAsXG5kcml2ZXJzL25ldC9ndHAuYy0xODkyLVx0XHRcdFx0XHQgbmxhX2dldF91MzIoaW5mby1cdTAwM2VhdHRyc1tHVFBBX0lfVEVJXSksXG4tLVxuZHJpdmVycy9uZXQvZ3RwLmM9MjA3OT1zdGF0aWMgc3RydWN0IHBkcF9jdHggKmd0cF9maW5kX3BkcF9ieV9saW5rKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5kcml2ZXJzL25ldC9ndHAuYy0yMTE1LVx0XHR9IGVsc2UgaWYgKGd0cF92ZXJzaW9uID09IEdUUF9WMSBcdTAwMjZcdTAwMjYgbmxhW0dUUEFfSV9URUldKSB7XG5kcml2ZXJzL25ldC9ndHAuYzoyMTE2Olx0XHRcdHJldHVybiBndHAxX3BkcF9maW5kKGd0cCwgbmxhX2dldF91MzIobmxhW0dUUEFfSV9URUldKSxcbmRyaXZlcnMvbmV0L2d0cC5jLTIxMTctXHRcdFx0XHRcdCAgICAgZmFtaWx5KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ1NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgR1RQIEVuY2Fwc3VsYXRpb24gUmVjZWl2ZSBGdW5jdGlvbnMqKgoKQWxyaWdodCwgSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IHRoZXNlIGBndHAwX3VkcF9lbmNhcF9yZWN2YCBhbmQgYGd0cDF1X3VkcF9lbmNhcF9yZWN2YCBmdW5jdGlvbnMuIFRoZXkgaW1tZWRpYXRlbHkgc3RyaWtlIG1lIGFzIGRlY2VudCBjYW5kaWRhdGVzIGZvciBpbnZlc3RpZ2F0aW9uLiBCdXQgaGFuZyBvbiBhIHNlY29uZC4uLiB0aGVzZSBhcmUgc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggY2hhbmdlcyB0aGluZ3MgYSBiaXQuIFN0YXRpYyBmdW5jdGlvbnMgbWVhbiB0aGV5JiMzOTtyZSBmaWxlLWxvY2FsLCBzbyBteSBuZXh0IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIGNvbXBpbGVyIGlzIGJlaW5nIGNsZXZlciBhbmQgaW5saW5pbmcgdGhlbSBvciBpZiB0aGV5IGFyZSBiZWluZyB1c2VkIG1vcmUgaW5kaXJlY3RseSwgbGlrZSBhcyBjYWxsYmFja3MuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBhcHByb2FjaCBpcyBiZWluZyB1c2VkIGhlcmUgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2d0cDBfdWRwX2VuY2FwX3JlY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ndHAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ndHAuYz01NzA9c3RhdGljIGludCBndHBfcHJvdG9fdG9fZmFtaWx5KF9fdTE2IHByb3RvKVxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTU4NS0vKiAxIG1lYW5zIHBhc3MgdXAgdG8gdGhlIHN0YWNrLCAtMSBtZWFucyBkcm9wIGFuZCAwIG1lYW5zIGRlY2Fwc3VsYXRlZC4gKi9cbmRyaXZlcnMvbmV0L2d0cC5jOjU4NjpzdGF0aWMgaW50IGd0cDBfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IGd0cF9kZXYgKmd0cCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L2d0cC5jLTU4Ny17XG4tLVxuZHJpdmVycy9uZXQvZ3RwLmM9OTA5PXN0YXRpYyBpbnQgZ3RwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTkyMi1cdFx0bmV0ZGV2X2RiZyhndHAtXHUwMDNlZGV2LCBcJiMzNDtyZWNlaXZlZCBHVFAwIHBhY2tldFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ndHAuYzo5MjM6XHRcdHJldCA9IGd0cDBfdWRwX2VuY2FwX3JlY3YoZ3RwLCBza2IpO1xuZHJpdmVycy9uZXQvZ3RwLmMtOTI0LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk4OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqR1RQIEVuY2Fwc3VsYXRpb246IEEgUXVpY2sgTWVudGFsIENoZWNrKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIEdUUCBlbmNhcHN1bGF0aW9uIHByb2Nlc3MsIGFuZCB0aGUgY2FsbCBzdGFjayBpcyBsZWFkaW5nIG1lIHRvIGBndHBfZW5jYXBfcmVjdmAuIEhtbSwgaXMgYGd0cF9lbmNhcF9yZWN2YCBhIGRpcmVjdCBmdW5jdGlvbiBjYWxsIG9yIGlzIGl0IGEgY2FsbGJhY2sgZnVuY3Rpb24gcmVnaXN0ZXJlZCBzb21ld2hlcmU/IFRoYXQmIzM5O3MgdGhlIGNvcmUgcXVlc3Rpb24gSSBuZWVkIHRvIGFuc3dlciBxdWlja2x5LiBVbmRlcnN0YW5kaW5nIHRoYXQgbWVjaGFuaXNtIHdpbGwgaW5mbHVlbmNlIG15IG5leHQgbW92ZSBpbiBkZWJ1Z2dpbmcgb3Igb3B0aW1pemluZyBpdC4gSXMgdGhpcyBhIHN5bmNocm9ub3VzIG9yIGFzeW5jaHJvbm91cyBmdW5jdGlvbj8gVGhlIGFuc3dlciBncmVhdGx5IGFmZmVjdHMgaG93IEkgc2hvdWxkIGludGVycHJldCB0aGlzLiBUaGlzIHdpbGwgaW5mbHVlbmNlIGhvdyBJIHNob3VsZCBpbnRlcnByZXQgdGhlIGZsb3cgb2YgZGF0YS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3RwX2VuY2FwX3JlY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ndHAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ndHAuYz04OTI9c3RhdGljIHZvaWQgZ3RwX2VuY2FwX2Rpc2FibGUoc3RydWN0IGd0cF9kZXYgKmd0cClcbi0tXG5kcml2ZXJzL25ldC9ndHAuYy05MDgtICovXG5kcml2ZXJzL25ldC9ndHAuYzo5MDk6c3RhdGljIGludCBndHBfZW5jYXBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC9ndHAuYy05MTAte1xuLS1cbmRyaXZlcnMvbmV0L2d0cC5jPTE0MTA9c3RhdGljIHN0cnVjdCBzb2NrICpndHBfY3JlYXRlX3NvY2soaW50IHR5cGUsIHN0cnVjdCBndHBfZGV2ICpndHAsXG4tLVxuZHJpdmVycy9uZXQvZ3RwLmMtMTQ0MC1cdHR1bmNmZy5lbmNhcF90eXBlID0gdHlwZTtcbmRyaXZlcnMvbmV0L2d0cC5jOjE0NDE6XHR0dW5jZmcuZW5jYXBfcmN2ID0gZ3RwX2VuY2FwX3JlY3Y7XG5kcml2ZXJzL25ldC9ndHAuYy0xNDQyLVx0dHVuY2ZnLmVuY2FwX2Rlc3Ryb3kgPSBOVUxMO1xuLS1cbmRyaXZlcnMvbmV0L2d0cC5jPTE2NTc9c3RhdGljIHN0cnVjdCBzb2NrICpndHBfZW5jYXBfZW5hYmxlX3NvY2tldChpbnQgZmQsIGludCB0eXBlLFxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTE2OTctXHR0dW5jZmcuZW5jYXBfdHlwZSA9IHR5cGU7XG5kcml2ZXJzL25ldC9ndHAuYzoxNjk4Olx0dHVuY2ZnLmVuY2FwX3JjdiA9IGd0cF9lbmNhcF9yZWN2O1xuZHJpdmVycy9uZXQvZ3RwLmMtMTY5OS1cdHR1bmNmZy5lbmNhcF9kZXN0cm95ID0gZ3RwX2VuY2FwX2Rlc3Ryb3k7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE3OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NjkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkNvbnNpZGVyaW5nIGBndHBfZW5jYXBfcmVjdmAgZm9yIHRoZSBUYXNrKioKCk9rYXksIHNvIEkgcmVtZW1iZXIgbm93LiBgZ3RwX2VuY2FwX3JlY3ZgIGlzIGluZGVlZCB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyBhc3NpZ25lZCBhcyB0aGUgYGVuY2FwX3JjdmAgY2FsbGJhY2sgd2l0aGluIHRoZSBgdWRwX3R1bm5lbF9zb2NrX2NmZ2Agc3RydWN0dXJlLiBUaGF0IG1ha2VzIGl0IGEgc3Ryb25nIGNvbnRlbmRlciBmb3Igd2hhdCBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHJpZ2h0IG5vdy4gSXQgc2VlbXMgbG9naWNhbC4KCk5vdywgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIHJlbGF0ZWQgUERQIGZpbmQgZnVuY3Rpb25zLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBkYXRhIGZsb3cgaXMgbG9naWNhbC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGJvdGggYGlwdjRfcGRwX2ZpbmRgIGFuZCBgaXB2Nl9wZHBfZmluZGAgdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgc3lzdGVtJiMzOTtzIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2NF9wZHBfZmluZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2d0cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2d0cC5jPTE2Nz1zdGF0aWMgc3RydWN0IHBkcF9jdHggKmd0cDFfcGRwX2ZpbmQoc3RydWN0IGd0cF9kZXYgKmd0cCwgdTMyIHRpZCwgdTE2IGZhbWlseSlcbi0tXG5kcml2ZXJzL25ldC9ndHAuYy0xODQtLyogUmVzb2x2ZSBhIFBEUCBjb250ZXh0IGJhc2VkIG9uIElQdjQgYWRkcmVzcyBvZiBNUy4gKi9cbmRyaXZlcnMvbmV0L2d0cC5jOjE4NTpzdGF0aWMgc3RydWN0IHBkcF9jdHggKmlwdjRfcGRwX2ZpbmQoc3RydWN0IGd0cF9kZXYgKmd0cCwgX19iZTMyIG1zX2FkZHIpXG5kcml2ZXJzL25ldC9ndHAuYy0xODYte1xuLS1cbmRyaXZlcnMvbmV0L2d0cC5jPTExNzU9c3RhdGljIGludCBndHBfYnVpbGRfc2tiX2lwNChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTExODgtXHRpZiAoZ3RwLVx1MDAzZXJvbGUgPT0gR1RQX1JPTEVfU0dTTilcbmRyaXZlcnMvbmV0L2d0cC5jOjExODk6XHRcdHBjdHggPSBpcHY0X3BkcF9maW5kKGd0cCwgaXBoLVx1MDAzZXNhZGRyKTtcbmRyaXZlcnMvbmV0L2d0cC5jLTExOTAtXHRlbHNlXG5kcml2ZXJzL25ldC9ndHAuYzoxMTkxOlx0XHRwY3R4ID0gaXB2NF9wZHBfZmluZChndHAsIGlwaC1cdTAwM2VkYWRkcik7XG5kcml2ZXJzL25ldC9ndHAuYy0xMTkyLVxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jPTE4MzI9c3RhdGljIHN0cnVjdCBwZHBfY3R4ICpndHBfcGRwX2FkZChzdHJ1Y3QgZ3RwX2RldiAqZ3RwLCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxuZHJpdmVycy9uZXQvZ3RwLmMtMTg2OS1cdFx0aGFzaF9tcyA9IGlwdjRfaGFzaGZuKG1zX2FkZHIpICUgZ3RwLVx1MDAzZWhhc2hfc2l6ZTtcbmRyaXZlcnMvbmV0L2d0cC5jOjE4NzA6XHRcdHBjdHggPSBpcHY0X3BkcF9maW5kKGd0cCwgbXNfYWRkcik7XG5kcml2ZXJzL25ldC9ndHAuYy0xODcxLVx0XHRicmVhaztcbi0tXG5kcml2ZXJzL25ldC9ndHAuYz0yMDc5PXN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqZ3RwX2ZpbmRfcGRwX2J5X2xpbmsoc3RydWN0IG5ldCAqbmV0LFxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTIwOTYtXG5kcml2ZXJzL25ldC9ndHAuYzoyMDk3Olx0XHRyZXR1cm4gaXB2NF9wZHBfZmluZChndHAsIGlwKTtcbmRyaXZlcnMvbmV0L2d0cC5jLTIwOTgtXHR9IGVsc2UgaWYgKG5sYVtHVFBBX01TX0FERFI2XSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDMzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBjb2RlIGZsb3csIGV4cHJlc3NlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipNeSBNZW50YWwgTWFwcGluZyBvZiBJUCB2NCBQYWNrZXQgRGF0YSBQcm90b2NvbCBIYW5kbGluZyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhpcyBJUCB2NCBwYWNrZXQgcGF0aCwgYW5kIGl0IGxvb2tzIGxpa2UgYGlwdjRfcGRwX2ZpbmRgIGlzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIGhlcmUuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoYXQgaXQmIzM5O3MgYmVpbmcgaW52b2tlZCB3aXRoaW4gYGd0cF9idWlsZF9za2JfaXA0YC4gQW5kIHdoZXJlIGRvZXMgKnRoYXQqIGdldCBjYWxsZWQgZnJvbT8gT2gsIHJpZ2h0LCBpdCYjMzk7cyB0aGUgYGd0cF94bWl0YCBmdW5jdGlvbi4gU28sIGlmIEkmIzM5O20gdW5kZXJzdGFuZGluZyB0aGlzIGNvcnJlY3RseSwgdGhlIGBpcHY0X3BkcF9maW5kYCBmdW5jdGlvbiBpcyBwcm9iYWJseSB0aGUgaGVhcnQgb2YgSVAgdjQgcGFja2V0IGRhdGEgcHJvdG9jb2wgbG9va3VwLCBhbmQgaXQmIzM5O3MgZXNzZW50aWFsIGZvciB0aGUgdHJhbnNtaXNzaW9uIHByb2Nlc3MuIFRoaXMgY29uZmlybXMgd2hhdCBJIGV4cGVjdGVkOiB0aGUgbmV0d29yayBzdGFjayB1c2VzIGEgc2VyaWVzIG9mIGxheWVycy4gTG9va3MgbGlrZSBHVFAgdHJhbnNtaXNzaW9uIHdpbGwgYnVpbGQgYW4gc2tiIHdpdGggYGd0cF9idWlsZF9za2JfaXA0YCwgYWZ0ZXIgaXQgZmluZHMgdGhlIFBEUCBjb250ZXh0IGZvciB0aGUgSVB2NCBwYWNrZXQsIHVzaW5nIGBpcHY0X3BkcF9maW5kYC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoZSBQRFAgY29udGV4dCB0byBjb25zdHJ1Y3QgYW5kIHRyYW5zbWl0IHRoZSBwYWNrZXQuIEkgc2hvdWxkIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgUERQIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2d0cF9idWlsZF9za2JfaXA0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZ3RwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZ3RwLmM9MTExOD1zdGF0aWMgaW50IGd0cF9idWlsZF9za2Jfb3V0ZXJfaXA2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ndHAuYy0xMTc0LVxuZHJpdmVycy9uZXQvZ3RwLmM6MTE3NTpzdGF0aWMgaW50IGd0cF9idWlsZF9za2JfaXA0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9ndHAuYy0xMTc2LVx0XHRcdCAgICAgc3RydWN0IGd0cF9wa3RpbmZvICpwa3RpbmZvKVxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jPTEyNzQ9c3RhdGljIG5ldGRldl90eF90IGd0cF9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTEyOTItXHRjYXNlIEVUSF9QX0lQOlxuZHJpdmVycy9uZXQvZ3RwLmM6MTI5MzpcdFx0ZXJyID0gZ3RwX2J1aWxkX3NrYl9pcDQoc2tiLCBkZXYsIFx1MDAyNnBrdGluZm8pO1xuZHJpdmVycy9uZXQvZ3RwLmMtMTI5NC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE3OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDMwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEdUUCBJbXBsZW1lbnRhdGlvbiBPdmVydmlldyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIEdUUCBpbXBsZW1lbnRhdGlvbiBoZXJlLiBSaWdodCwgYGd0cF9kZXZfeG1pdGAgaXMgY3J1Y2lhbCDigJMgdGhhdCYjMzk7cyB0aGUgZXF1aXZhbGVudCBvZiB0aGUgYG5kb19zdGFydF94bWl0YCBjYWxsYmFjaywgdGhlIG9uZSB0aGF0IGtpY2tzIG9mZiBwYWNrZXQgdHJhbnNtaXNzaW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBjYWxsaW5nIHNlcXVlbmNlLgoKVGhlcmVmb3JlLCB0aGUga2V5IGVudHJ5IHBvaW50cyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlOgoKKiAgIGBndHBfZ2VubF9uZXdfcGRwYCAtIGZvciBjcmVhdGluZyBhIG5ldyBQRFAgY29udGV4dAoqICAgYGd0cF9nZW5sX2RlbF9wZHBgIC0gdG8gcmVtb3ZlIG9uZQoqICAgYGd0cF9kZWxsaW5rYCAtIGFuZCBJIHN1c3BlY3QgdGhpcyBvbmUgaGFuZGxlcyBsaW5rIGRlbGV0aW9uLCBidXQgSSBzaG91bGQgdmVyaWZ5IHRoYXQuCiogICBgZ3RwX2VuY2FwX3JlY3ZgIC0gZm9yIHByb2Nlc3NpbmcgaW5jb21pbmcgZW5jYXBzdWxhdGVkIHBhY2tldHMKKiAgIGBndHBfZGV2X3htaXRgIC0gdGhlIGhlYXJ0IG9mIHBhY2tldCB0cmFuc21pc3Npb24KCkkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGd0cF9kZWxsaW5rYCB0cnVseSBjb3JyZXNwb25kcyB0byB0aGUgYGRlbGxpbmtgIGNhbGxiYWNrIGZ1bmN0aW9uLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8ga2VlcCB0aGVzZSBjYWxsYmFjayBhc3NvY2lhdGlvbnMgc3RyYWlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2d0cF9kZWxsaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZ3RwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZ3RwLmM9MTQ3NT1zdGF0aWMgaW50IGd0cF9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvZ3RwLmMtMTU1Ni1cbmRyaXZlcnMvbmV0L2d0cC5jOjE1NTc6c3RhdGljIHZvaWQgZ3RwX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbmRyaXZlcnMvbmV0L2d0cC5jLTE1NTgte1xuLS1cbmRyaXZlcnMvbmV0L2d0cC5jPTE2MTg9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGd0cF9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTE2MjUtXHQubmV3bGlua1x0PSBndHBfbmV3bGluayxcbmRyaXZlcnMvbmV0L2d0cC5jOjE2MjY6XHQuZGVsbGlua1x0PSBndHBfZGVsbGluayxcbmRyaXZlcnMvbmV0L2d0cC5jLTE2MjctXHQuZ2V0X3NpemVcdD0gZ3RwX2dldF9zaXplLFxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jPTI0OTc9c3RhdGljIHZvaWQgX19uZXRfZXhpdCBndHBfbmV0X2V4aXRfcnRubChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxuZHJpdmVycy9uZXQvZ3RwLmMtMjUwMy1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShndHAsIGd0cF9uZXh0LCBcdTAwMjZnbi1cdTAwM2VndHBfZGV2X2xpc3QsIGxpc3QpXG5kcml2ZXJzL25ldC9ndHAuYzoyNTA0Olx0XHRndHBfZGVsbGluayhndHAtXHUwMDNlZGV2LCBkZXZfdG9fa2lsbCk7XG5kcml2ZXJzL25ldC9ndHAuYy0yNTA1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NjQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkZvY3VzaW5nIG9uIHRoZSBHVFAgRGF0YSBQbGFuZSoqCgpBbHJpZ2h0LCBzbyBgZ3RwX2RlbGxpbmtgIGlzIHRoZSBmdW5jdGlvbiB3ZSYjMzk7cmUgdXNpbmcgYXMgdGhlIGBkZWxsaW5rYCBjYWxsYmFjaywgdGhhdCBtYWtlcyBzZW5zZS4gVGhlcmVmb3JlLCB0aGUgaW1wb3J0YW50IGZ1bmN0aW9ucyBJIG5lZWQgdG8gZHJpbGwgZG93biBvbiByaWdodCBub3cgYXJlOiBgZ3RwX2dlbmxfbmV3X3BkcGAsIGBndHBfZ2VubF9kZWxfcGRwYCwgbmF0dXJhbGx5IGBndHBfZGVsbGlua2AgKGdpdmVuIHRoZSBjb250ZXh0KSwgYW5kIHRoZW4gYWxzbyBgZ3RwX2VuY2FwX3JlY3ZgIGZvciBoYW5kbGluZyBlbmNhcHN1bGF0ZWQgcGFja2V0cyBhbmQgYGd0cF9kZXZfeG1pdGAsIGJlY2F1c2UgdGhhdCB3aWxsIGJlIHdoZXJlIHdlIHRyYW5zbWl0IHRoZSBnZW5lcmF0ZWQgcGFja2V0cy4gTm93LCBsZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBteSBtZW50YWwgbW9kZWwgaXMgY29ycmVjdDogaXMgYGd0cF9kZXZfeG1pdGAgYWN0dWFsbHkgdGhlIGNhbGxiYWNrIGZvciBgbmRvX3N0YXJ0X3htaXRgPyBHb3R0YSBtYWtlIHN1cmUgbXkgYXNzdW1wdGlvbnMgYXJlIHNvbGlkIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2d0cF9kZXZfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2d0cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2d0cC5jPTEyMjQ9c3RhdGljIGludCBndHBfYnVpbGRfc2tiX2lwNihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTEyNzMtXG5kcml2ZXJzL25ldC9ndHAuYzoxMjc0OnN0YXRpYyBuZXRkZXZfdHhfdCBndHBfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L2d0cC5jLTEyNzUte1xuLS1cbmRyaXZlcnMvbmV0L2d0cC5jPTEzNDE9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBndHBfbmV0ZGV2X29wcyA9IHtcbmRyaXZlcnMvbmV0L2d0cC5jLTEzNDItXHQubmRvX3VuaW5pdFx0XHQ9IGd0cF9kZXZfdW5pbml0LFxuZHJpdmVycy9uZXQvZ3RwLmM6MTM0MzpcdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IGd0cF9kZXZfeG1pdCxcbmRyaXZlcnMvbmV0L2d0cC5jLTEzNDQtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNDQKCQkJCQkJCW91dHB1dDogMjAyCgkJCQkJCQl0aG91Z2h0czogNzIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgR1RQIFBEUCBDb250ZXh0IExvY2tpbmcgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBhZGRpbmcgYSBtdXRleCwgYGd0cF9wZHBfbG9ja2AsIHRvIHByb3RlY3QgdGhlIFBEUCBjb250ZXh0IGhhc2ggdGFibGVzLiBJdOKAmXMgZGVmaW5pdGVseSBhYm91dCBsb2NraW5nIHRvIGhhbmRsZSBjb25jdXJyZW50IGFjY2VzcyB0byB0aGVzZSBjb250ZXh0cywgc28gZnV6emluZyBpcyB3YXJyYW50ZWQuCgpGaXJzdCwgbGV0JiMzOTtzIG5haWwgZG93biBhbnkgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIHBhdGNoIG1lbnRpb25zIGBHVFBgLCB3aGljaCBkZXBlbmRzIG9uIGBJTkVUYC4gV2hpbGUgYElORVRgIGlzIGdlbmVyYWxseSBlbmFibGVkIGJ5IGRlZmF1bHQsIEkmIzM5O2xsIG9ubHkgZXhwbGljaXRseSBsaXN0IGBHVFBgIHNpbmNlIHRoYXQmIzM5O3Mgd2hhdCYjMzk7cyByZXF1ZXN0ZWQuIE5vIG5lZWQgdG8gb3ZlcmNvbXBsaWNhdGUgdGhpbmdzOyBJJiMzOTtsbCBsaXN0IGBHVFBgIGluIHRoZSBgRW5hYmxlQ29uZmlnc2AuCgpOb3csIGxldCYjMzk7cyBzdGVwIHRocm91Z2ggdGhlIHBhdGNoIG9uZSBtb3JlIHRpbWUgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBUaGUgYG11dGV4X2xvY2soJmFtcDtndHBfcGRwX2xvY2spYCBjYWxscyBhcHBlYXIgaW4gdGhlIG5ldGxpbmsgaGFuZGxlcnM6IGBndHBfZ2VubF9uZXdfcGRwYCBhbmQgYGd0cF9nZW5sX2RlbF9wZHBgLCBhcyB3ZWxsIGFzIGBndHBfZGVsbGlua2AuIEFsc28sIHRoZXJlIGFyZSBgbG9ja2RlcF9pc19oZWxkKCZhbXA7Z3RwX3BkcF9sb2NrKWAgY2hlY2tzIGluIFJDVSBsaXN0IHRyYXZlcnNhbCBmdW5jdGlvbnM6IGBndHAwX3BkcF9maW5kYCwgYGd0cDFfcGRwX2ZpbmRgLCBgaXB2NF9wZHBfZmluZGAsIGFuZCBgaXB2Nl9wZHBfZmluZGAuIFN0cmFpZ2h0Zm9yd2FyZCBsb2NraW5nIGZpeCwgcmVhbGx5LgoKTXkgcmVhc29uaW5nIGlzIHRoaXM6IHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG11dGV4LCBgZ3RwX3BkcF9sb2NrYCwgdG8gc2FmZWd1YXJkIHRob3NlIFBEUCBjb250ZXh0IGhhc2ggdGFibGVzIHdpdGhpbiB0aGUgR1RQIGRyaXZlci4gVGhpcyBpbnZvbHZlcyBjaGFuZ2VzIHRvIG5ldGxpbmsgaGFuZGxlcnMgKGBndHBfZ2VubF9uZXdfcGRwYCwgYGd0cF9nZW5sX2RlbF9wZHBgKSwgbGluayBkZWxldGlvbiAoYGd0cF9kZWxsaW5rYCksIGFuZCBhZGp1c3RtZW50cyB0byBSQ1UgbGlzdCB0cmF2ZXJzYWxzLiBHaXZlbiB0aGlzIGlzIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbmV0d29ya2luZyBjb2RlLCBmdXp6aW5nIGlzIHJlcXVpcmVkIHRvIGVuc3VyZSBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5hc3R5IGRlYWRsb2NrcyBvciByYWNlIGNvbmRpdGlvbnMuCgpJJiMzOTt2ZSBhbHJlYWR5IHNlbGVjdGVkIGBndHBfZ2VubF9uZXdfcGRwYCwgYGd0cF9nZW5sX2RlbF9wZHBgLCBhbmQgYGd0cF9kZWxsaW5rYCBhcyBrZXkgc3ltYm9scy4KCknigJltIG5vdyB2ZXJpZnlpbmcgZW50cnkgcG9pbnRzIGludG8gdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMuIFRoZSBmdW5jdGlvbnMgYGd0cDBfcGRwX2ZpbmRgLCBgZ3RwMV9wZHBfZmluZGAsIGBpcHY0X3BkcF9maW5kYCwgYW5kIGBpcHY2X3BkcF9maW5kYCBhcmUgd2hlcmUgdGhlIGxvY2tkZXAgY2hlY2tzIGFyZSBpbXBsZW1lbnRlZC4gSSYjMzk7bSBub3cgdmVyaWZ5aW5nIHRoZXNlIGVudHJ5IHBvaW50cy4gTG9va2luZyBhdCB0aGUgY2FsbCBjaGFpbnMsIEkgc2VlIHRoYXQgYGd0cDBfcGRwX2ZpbmRgIGFuZCBgZ3RwMV9wZHBfZmluZGAgYXJlIGNhbGxlZCBmcm9tIGBndHBfZW5jYXBfcmVjdmAgd2hpY2ggaW4gdHVybiBjYWxscyBgZ3RwMF91ZHBfZW5jYXBfcmVjdmAgYW5kIGBndHAxdV91ZHBfZW5jYXBfcmVjdmAuIFNpbWlsYXJseSwgYGlwdjRfcGRwX2ZpbmRgIGFuZCBgaXB2Nl9wZHBfZmluZGAgYXJlIGNhbGxlZCBmcm9tIGBndHBfZGV2X3htaXRgIHdoaWNoIGluIHR1cm4gY2FsbHMgYGd0cF9idWlsZF9za2JfaXA0YCBhbmQgYGd0cF9idWlsZF9za2JfaXA2YC4gU28sIHNlbGVjdGluZyBgZ3RwX2VuY2FwX3JlY3ZgIGFuZCBgZ3RwX2Rldl94bWl0YCBpcyBjb3JyZWN0LgoKVGhhdCBzaG91bGQgY292ZXIgZXZlcnl0aGluZy4gTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7R1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z3RwX2dlbmxfbmV3X3BkcCYjMzQ7LAogICAgJiMzNDtndHBfZ2VubF9kZWxfcGRwJiMzNDssCiAgICAmIzM0O2d0cF9kZWxsaW5rJiMzNDssCiAgICAmIzM0O2d0cF9lbmNhcF9yZWN2JiMzNDssCiAgICAmIzM0O2d0cF9kZXZfeG1pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG11dGV4IGBndHBfcGRwX2xvY2tgIHRvIHByb3RlY3QgUERQIGNvbnRleHQgaGFzaCB0YWJsZXMgaW4gdGhlIEdUUCBkcml2ZXIuIEl0IG1vZGlmaWVzIG5ldGxpbmsgaGFuZGxlcnMgKGBndHBfZ2VubF9uZXdfcGRwYCwgYGd0cF9nZW5sX2RlbF9wZHBgKSBhbmQgdGhlIGxpbmsgZGVsZXRpb24gaGFuZGxlciAoYGd0cF9kZWxsaW5rYCkgdG8gYWNxdWlyZSB0aGlzIGxvY2ssIGFuZCB1cGRhdGVzIFJDVSBsaXN0IHRyYXZlcnNhbHMgdG8gY2hlY2sgZm9yIGl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBsb2NraW5nIGRvZXMgbm90IGludHJvZHVjZSBkZWFkbG9ja3Mgb3IgcmFjZSBjb25kaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtHVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtndHBfZ2VubF9uZXdfcGRwJiMzNDssCiAgICAmIzM0O2d0cF9nZW5sX2RlbF9wZHAmIzM0OywKICAgICYjMzQ7Z3RwX2RlbGxpbmsmIzM0OywKICAgICYjMzQ7Z3RwX2VuY2FwX3JlY3YmIzM0OywKICAgICYjMzQ7Z3RwX2Rldl94bWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbXV0ZXggYGd0cF9wZHBfbG9ja2AgdG8gcHJvdGVjdCBQRFAgY29udGV4dCBoYXNoIHRhYmxlcyBpbiB0aGUgR1RQIGRyaXZlci4gSXQgbW9kaWZpZXMgbmV0bGluayBoYW5kbGVycyAoYGd0cF9nZW5sX25ld19wZHBgLCBgZ3RwX2dlbmxfZGVsX3BkcGApIGFuZCB0aGUgbGluayBkZWxldGlvbiBoYW5kbGVyIChgZ3RwX2RlbGxpbmtgKSB0byBhY3F1aXJlIHRoaXMgbG9jaywgYW5kIHVwZGF0ZXMgUkNVIGxpc3QgdHJhdmVyc2FscyB0byBjaGVjayBmb3IgaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGxvY2tpbmcgZG9lcyBub3QgaW50cm9kdWNlIGRlYWRsb2NrcyBvciByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE3OjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTc6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtdXRleCBgZ3RwX3BkcF9sb2NrYCB0byBwcm90ZWN0IFBEUCBjb250ZXh0IG9wZXJhdGlvbnMgaW4gdGhlIEdUUCBkcml2ZXIgYW5kIGFkZHMgbG9ja2RlcCBhbm5vdGF0aW9ucyB0byBSQ1UgbGlzdCB0cmF2ZXJzYWxzLiBUaGlzIGlzIHB1cmVseSBhIGNvbmN1cnJlbmN5IGNvbnRyb2wgYW5kIGxvY2tpbmcgY2hhbmdlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IG1vZGlmeSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gbG9naWMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgcmVsYXRlZCB0byBsb2NraW5nIChkZWFkbG9ja3MsIHJhY2UgY29uZGl0aW9ucykgb3IgdXNlLWFmdGVyLWZyZWUvb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGFscmVhZHkgY292ZXJlZCBieSBMT0NLREVQIGFuZCBLQVNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg2MzExNDBmYjJiMTA5YWIxOThkZmU4ODBlYmMyZWIyYjM2ZmEwZTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAxNzozMzoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2d0cC5jIGIvZHJpdmVycy9uZXQvZ3RwLmMKaW5kZXggOWExMmNjNTNkYTAwMi4uMmY2ZTc3Y2NlMzg1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ3RwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZ3RwLmMKQEAgLTEyLDYgJiM0MzsxMiw3IEBACiAjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICYjMzQ7OiAmIzM0OyBmbXQKIAogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VkcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdWxpc3QuaCZndDsKQEAgLTEwOCw2ICYjNDM7MTA5LDcgQEAgc3RydWN0IGd0cF9uZXQgewogfTsKIAogc3RhdGljIHUzMiBndHBfaF9pbml0dmFsOwomIzQzO3N0YXRpYyBERUZJTkVfTVVURVgoZ3RwX3BkcF9sb2NrKTsKIAogc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBndHBfZ2VubF9mYW1pbHk7CiAKQEAgLTE1MSw3ICYjNDM7MTUzLDggQEAgc3RhdGljIHN0cnVjdCBwZHBfY3R4ICpndHAwX3BkcF9maW5kKHN0cnVjdCBndHBfZGV2ICpndHAsIHU2NCB0aWQsIHUxNiBmYW1pbHkpCiAKIAloZWFkID0gJmFtcDtndHAtJmd0O3RpZF9oYXNoW2d0cDBfaGFzaGZuKHRpZCkgJSBndHAtJmd0O2hhc2hfc2l6ZV07CiAKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF90aWQpIHsKJiM0MzsJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfdGlkLAomIzQzOwkJCQkgbG9ja2RlcF9pc19oZWxkKCZhbXA7Z3RwX3BkcF9sb2NrKSkgewogCQlpZiAocGRwLSZndDthZiA9PSBmYW1pbHkgJmFtcDsmYW1wOwogCQkgICAgcGRwLSZndDtndHBfdmVyc2lvbiA9PSBHVFBfVjAgJmFtcDsmYW1wOwogCQkgICAgcGRwLSZndDt1LnYwLnRpZCA9PSB0aWQpCkBAIC0xNjgsNyAmIzQzOzE3MSw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqZ3RwMV9wZHBfZmluZChzdHJ1Y3QgZ3RwX2RldiAqZ3RwLCB1MzIgdGlkLCB1MTYgZmFtaWx5KQogCiAJaGVhZCA9ICZhbXA7Z3RwLSZndDt0aWRfaGFzaFtndHAxdV9oYXNoZm4odGlkKSAlIGd0cC0mZ3Q7aGFzaF9zaXplXTsKIAotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X3RpZCkgewomIzQzOwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF90aWQsCiYjNDM7CQkJCSBsb2NrZGVwX2lzX2hlbGQoJmFtcDtndHBfcGRwX2xvY2spKSB7CiAJCWlmIChwZHAtJmd0O2FmID09IGZhbWlseSAmYW1wOyZhbXA7CiAJCSAgICBwZHAtJmd0O2d0cF92ZXJzaW9uID09IEdUUF9WMSAmYW1wOyZhbXA7CiAJCSAgICBwZHAtJmd0O3UudjEuaV90ZWkgPT0gdGlkKQpAQCAtMTg1LDcgJiM0MzsxODksOCBAQCBzdGF0aWMgc3RydWN0IHBkcF9jdHggKmlwdjRfcGRwX2ZpbmQoc3RydWN0IGd0cF9kZXYgKmd0cCwgX19iZTMyIG1zX2FkZHIpCiAKIAloZWFkID0gJmFtcDtndHAtJmd0O2FkZHJfaGFzaFtpcHY0X2hhc2hmbihtc19hZGRyKSAlIGd0cC0mZ3Q7aGFzaF9zaXplXTsKIAotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X2FkZHIpIHsKJiM0MzsJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfYWRkciwKJiM0MzsJCQkJIGxvY2tkZXBfaXNfaGVsZCgmYW1wO2d0cF9wZHBfbG9jaykpIHsKIAkJaWYgKHBkcC0mZ3Q7YWYgPT0gQUZfSU5FVCAmYW1wOyZhbXA7CiAJCSAgICBwZHAtJmd0O21zLmFkZHIuc19hZGRyID09IG1zX2FkZHIpCiAJCQlyZXR1cm4gcGRwOwpAQCAtMjIwLDcgJiM0MzsyMjUsOCBAQCBzdGF0aWMgc3RydWN0IHBkcF9jdHggKmlwdjZfcGRwX2ZpbmQoc3RydWN0IGd0cF9kZXYgKmd0cCwKIAogCWhlYWQgPSAmYW1wO2d0cC0mZ3Q7YWRkcl9oYXNoW2lwdjZfaGFzaGZuKG1zX2FkZHIpICUgZ3RwLSZndDtoYXNoX3NpemVdOwogCi0JaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfYWRkcikgewomIzQzOwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF9hZGRyLAomIzQzOwkJCQkgbG9ja2RlcF9pc19oZWxkKCZhbXA7Z3RwX3BkcF9sb2NrKSkgewogCQlpZiAocGRwLSZndDthZiA9PSBBRl9JTkVUNiAmYW1wOyZhbXA7CiAJCSAgICBpcHY2X3BkcF9hZGRyX2VxdWFsKCZhbXA7cGRwLSZndDttcy5hZGRyNiwgbXNfYWRkcikpCiAJCQlyZXR1cm4gcGRwOwpAQCAtMTU1NSw5ICYjNDM7MTU2MSwxMSBAQCBzdGF0aWMgdm9pZCBndHBfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQogCXN0cnVjdCBwZHBfY3R4ICpwY3R4OwogCWludCBpOwogCiYjNDM7CW11dGV4X2xvY2soJmFtcDtndHBfcGRwX2xvY2spOwogCWZvciAoaSA9IDA7IGkgJmx0OyBndHAtJmd0O2hhc2hfc2l6ZTsgaSYjNDM7JiM0MzspCiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGN0eCwgbmV4dCwgJmFtcDtndHAtJmd0O3RpZF9oYXNoW2ldLCBobGlzdF90aWQpCiAJCQlwZHBfY29udGV4dF9kZWxldGUocGN0eCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2d0cF9wZHBfbG9jayk7CiAKIAlsaXN0X2RlbCgmYW1wO2d0cC0mZ3Q7bGlzdCk7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCBoZWFkKTsKQEAgLTIwNTMsNiAmIzQzOzIwNjEsNyBAQCBzdGF0aWMgaW50IGd0cF9nZW5sX25ld19wZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAomIzQzOwltdXRleF9sb2NrKCZhbXA7Z3RwX3BkcF9sb2NrKTsKIAlwY3R4ID0gZ3RwX3BkcF9hZGQoZ3RwLCBzaywgaW5mbyk7CiAJaWYgKElTX0VSUihwY3R4KSkgewogCQllcnIgPSBQVFJfRVJSKHBjdHgpOwpAQCAtMjA2MCw2ICYjNDM7MjA2OSw3IEBAIHN0YXRpYyBpbnQgZ3RwX2dlbmxfbmV3X3BkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQlndHBfdHVubmVsX25vdGlmeShwY3R4LCBHVFBfQ01EX05FV1BEUCwgR0ZQX0tFUk5FTCk7CiAJCWVyciA9IDA7CiAJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDtndHBfcGRwX2xvY2spOwogCiBvdXRfdW5sb2NrOgogCXJ0bmxfdW5sb2NrKCk7CkBAIC0yMTM0LDYgJiM0MzsyMTQ0LDggQEAgc3RhdGljIGludCBndHBfZ2VubF9kZWxfcGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJaWYgKCFpbmZvLSZndDthdHRyc1tHVFBBX1ZFUlNJT05dKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwltdXRleF9sb2NrKCZhbXA7Z3RwX3BkcF9sb2NrKTsKJiM0MzsKIAlyY3VfcmVhZF9sb2NrKCk7CiAKIAlwY3R4ID0gZ3RwX2ZpbmRfcGRwKHNvY2tfbmV0KHNrYi0mZ3Q7c2spLCBpbmZvLSZndDthdHRycyk7CkBAIC0yMTU0LDYgJiM0MzsyMTY2LDcgQEAgc3RhdGljIGludCBndHBfZ2VubF9kZWxfcGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAKIG91dF91bmxvY2s6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2d0cF9wZHBfbG9jayk7CiAJcmV0dXJuIGVycjsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQzMwoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiAzMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgR1RQIFBEUCBMb2NrIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGV5JiMzOTt2ZSBpbnRyb2R1Y2VkIGEgbmV3IG11dGV4LCBgZ3RwX3BkcF9sb2NrYCwgaW4gYGRyaXZlcnMvbmV0L2d0cC5jYCwgYW5kIHRoZXkmIzM5O3JlIHVzaW5nIGl0IHRvIHByb3RlY3QgYWNjZXNzIHRvIHRoZSBQRFAgY29udGV4dCBtYW5hZ2VtZW50IGZ1bmN0aW9uczogYGd0cF9wZHBfYWRkYCwgYGd0cF9maW5kX3BkcGAsIGFuZCBgcGRwX2NvbnRleHRfZGVsZXRlYC4gVGhpcyBsb29rcyBsaWtlIGEgc3RhbmRhcmQgY29uY3VycmVuY3kgY29udHJvbCBtZWFzdXJlIOKAkyBwcm9iYWJseSBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24sIG9yIHBlcmhhcHMgdGhleSYjMzk7cmUganVzdCBhZGRpbmcgYGxvY2tkZXBgIGFubm90YXRpb25zLiBUaGV5JiMzOTt2ZSBhbHNvIGFkZGVkIGEgYGxvY2tkZXBfaXNfaGVsZGAgY2hlY2sgd2l0aGluIHRoZSBgaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1YCBjYWxscyBpbiB0aGUgbG9va3VwIGZ1bmN0aW9ucy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgcHVyZWx5IGEgbG9ja2luZy1yZWxhdGVkIGNoYW5nZS4gSXQgZG9lc24mIzM5O3Qgc2VlbSB0byB0b3VjaCBhbnkgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYXBwZWFyIHRvIGRlYWwgd2l0aCBhbnkgbWVtb3J5IGluaXRpYWxpemF0aW9uIGlzc3Vlcy4gVGhlcmVmb3JlLCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc2VjdXJpdHktZm9jdXNlZCBkZXZlbG9wZXIsIEtNU0FOIGZ1enppbmcgc2hvdWxkbiYjMzk7dCBiZSBuZWNlc3NhcnkgaGVyZS4gVGhpcyBpcyBjbGFzc2ljIEtBU0FOIGFuZCBMT0NLREVQIHRlcnJpdG9yeS4gS0FTQU4gd2lsbCBmbGFnIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBldGMuLCBhbmQgTE9DS0RFUCB3aWxsLCBvZiBjb3Vyc2UsIGNhdGNoIGFueSBpc3N1ZXMgd2l0aCB0aGUgbG9ja2luZyBzY2hlbWUuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgbXkgcmVhc29uaW5nLiBLQVNBTiBpcyB0aGVyZSBmb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMg4oCTIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB1c2UtYWZ0ZXItZnJlZSwgZXRjLiBMT0NLREVQIGlzIHRoZSBnby10byB0b29sIGZvciwgd2VsbCwgbG9ja2luZyBidWdzLiBLTVNBTi4uLiB0aGF0JiMzOTtzIHRoZSBvbmUgd2UgdXNlIHRvIGNhdGNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBCdXQgdGhpcyBwYXRjaCBpcyBlbnRpcmVseSBhYm91dCBsb2NraW5nIGFuZCBjb25jdXJyZW5jeSBjb250cm9sLiBTbywgeWVzLCBpdCYjMzk7cyBjbGVhcjogYE5lZWRzS01TQU4gPSBmYWxzZWAuIFdlJiMzOTtyZSBnb29kIHdpdGggS0FTQU4gYW5kIExPQ0tERVAgZm9yIHRoaXMgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG11dGV4IGBndHBfcGRwX2xvY2tgIHRvIHByb3RlY3QgUERQIGNvbnRleHQgb3BlcmF0aW9ucyBpbiB0aGUgR1RQIGRyaXZlciBhbmQgYWRkcyBsb2NrZGVwIGFubm90YXRpb25zIHRvIFJDVSBsaXN0IHRyYXZlcnNhbHMuIFRoaXMgaXMgcHVyZWx5IGEgY29uY3VycmVuY3kgY29udHJvbCBhbmQgbG9ja2luZyBjaGFuZ2UuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgbW9kaWZ5IG1lbW9yeSBpbml0aWFsaXphdGlvbiBsb2dpYy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSByZWxhdGVkIHRvIGxvY2tpbmcgKGRlYWRsb2NrcywgcmFjZSBjb25kaXRpb25zKSBvciB1c2UtYWZ0ZXItZnJlZS9vdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbXV0ZXggYGd0cF9wZHBfbG9ja2AgdG8gcHJvdGVjdCBQRFAgY29udGV4dCBvcGVyYXRpb25zIGluIHRoZSBHVFAgZHJpdmVyIGFuZCBhZGRzIGxvY2tkZXAgYW5ub3RhdGlvbnMgdG8gUkNVIGxpc3QgdHJhdmVyc2Fscy4gVGhpcyBpcyBwdXJlbHkgYSBjb25jdXJyZW5jeSBjb250cm9sIGFuZCBsb2NraW5nIGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgbWVtb3J5IGluaXRpYWxpemF0aW9uIGxvZ2ljLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZyAoZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMpIG9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNzozMzoxMS42NDY0NDA3MzNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg4OTczNDUyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiR1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3RwX2dlbmxfbmV3X3BkcFwiLFxuICAgIFwiZ3RwX2dlbmxfZGVsX3BkcFwiLFxuICAgIFwiZ3RwX2RlbGxpbmtcIixcbiAgICBcImd0cF9lbmNhcF9yZWN2XCIsXG4gICAgXCJndHBfZGV2X3htaXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbXV0ZXggYGd0cF9wZHBfbG9ja2AgdG8gcHJvdGVjdCBQRFAgY29udGV4dCBvcGVyYXRpb25zIGluIHRoZSBHVFAgZHJpdmVyIGFuZCBhZGRzIGxvY2tkZXAgYW5ub3RhdGlvbnMgdG8gUkNVIGxpc3QgdHJhdmVyc2Fscy4gVGhpcyBpcyBwdXJlbHkgYSBjb25jdXJyZW5jeSBjb250cm9sIGFuZCBsb2NraW5nIGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgbWVtb3J5IGluaXRpYWxpemF0aW9uIGxvZ2ljLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZyAoZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMpIG9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbXV0ZXggYGd0cF9wZHBfbG9ja2AgdG8gcHJvdGVjdCBQRFAgY29udGV4dCBoYXNoIHRhYmxlcyBpbiB0aGUgR1RQIGRyaXZlci4gSXQgbW9kaWZpZXMgbmV0bGluayBoYW5kbGVycyAoYGd0cF9nZW5sX25ld19wZHBgLCBgZ3RwX2dlbmxfZGVsX3BkcGApIGFuZCB0aGUgbGluayBkZWxldGlvbiBoYW5kbGVyIChgZ3RwX2RlbGxpbmtgKSB0byBhY3F1aXJlIHRoaXMgbG9jaywgYW5kIHVwZGF0ZXMgUkNVIGxpc3QgdHJhdmVyc2FscyB0byBjaGVjayBmb3IgaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGxvY2tpbmcgZG9lcyBub3QgaW50cm9kdWNlIGRlYWRsb2NrcyBvciByYWNlIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE3OjMzOjExLjY0NjQ0NzIyM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI4MDk2MDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODYzMTE0MGZiMmIxMDlhYjE5OGRmZTg4MGViYzJlYjJiMzZmYTBlOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxNzozMzoxMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ndHAuYyBiL2RyaXZlcnMvbmV0L2d0cC5jXFxuaW5kZXggOWExMmNjNTNkYTAwMi4uMmY2ZTc3Y2NlMzg1ZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ndHAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2d0cC5jXFxuQEAgLTEyLDYgKzEyLDcgQEBcXG4gI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcXFwiOiBcXFwiIGZtdFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NrYnVmZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdWRwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VsaXN0LmhcXHUwMDNlXFxuQEAgLTEwOCw2ICsxMDksNyBAQCBzdHJ1Y3QgZ3RwX25ldCB7XFxuIH07XFxuIFxcbiBzdGF0aWMgdTMyIGd0cF9oX2luaXR2YWw7XFxuK3N0YXRpYyBERUZJTkVfTVVURVgoZ3RwX3BkcF9sb2NrKTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgZ3RwX2dlbmxfZmFtaWx5O1xcbiBcXG5AQCAtMTUxLDcgKzE1Myw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqZ3RwMF9wZHBfZmluZChzdHJ1Y3QgZ3RwX2RldiAqZ3RwLCB1NjQgdGlkLCB1MTYgZmFtaWx5KVxcbiBcXG4gXFx0aGVhZCA9IFxcdTAwMjZndHAtXFx1MDAzZXRpZF9oYXNoW2d0cDBfaGFzaGZuKHRpZCkgJSBndHAtXFx1MDAzZWhhc2hfc2l6ZV07XFxuIFxcbi1cXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF90aWQpIHtcXG4rXFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfdGlkLFxcbitcXHRcXHRcXHRcXHQgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZndHBfcGRwX2xvY2spKSB7XFxuIFxcdFxcdGlmIChwZHAtXFx1MDAzZWFmID09IGZhbWlseSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgcGRwLVxcdTAwM2VndHBfdmVyc2lvbiA9PSBHVFBfVjAgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIHBkcC1cXHUwMDNldS52MC50aWQgPT0gdGlkKVxcbkBAIC0xNjgsNyArMTcxLDggQEAgc3RhdGljIHN0cnVjdCBwZHBfY3R4ICpndHAxX3BkcF9maW5kKHN0cnVjdCBndHBfZGV2ICpndHAsIHUzMiB0aWQsIHUxNiBmYW1pbHkpXFxuIFxcbiBcXHRoZWFkID0gXFx1MDAyNmd0cC1cXHUwMDNldGlkX2hhc2hbZ3RwMXVfaGFzaGZuKHRpZCkgJSBndHAtXFx1MDAzZWhhc2hfc2l6ZV07XFxuIFxcbi1cXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF90aWQpIHtcXG4rXFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfdGlkLFxcbitcXHRcXHRcXHRcXHQgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZndHBfcGRwX2xvY2spKSB7XFxuIFxcdFxcdGlmIChwZHAtXFx1MDAzZWFmID09IGZhbWlseSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgcGRwLVxcdTAwM2VndHBfdmVyc2lvbiA9PSBHVFBfVjEgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIHBkcC1cXHUwMDNldS52MS5pX3RlaSA9PSB0aWQpXFxuQEAgLTE4NSw3ICsxODksOCBAQCBzdGF0aWMgc3RydWN0IHBkcF9jdHggKmlwdjRfcGRwX2ZpbmQoc3RydWN0IGd0cF9kZXYgKmd0cCwgX19iZTMyIG1zX2FkZHIpXFxuIFxcbiBcXHRoZWFkID0gXFx1MDAyNmd0cC1cXHUwMDNlYWRkcl9oYXNoW2lwdjRfaGFzaGZuKG1zX2FkZHIpICUgZ3RwLVxcdTAwM2VoYXNoX3NpemVdO1xcbiBcXG4tXFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfYWRkcikge1xcbitcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF9hZGRyLFxcbitcXHRcXHRcXHRcXHQgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZndHBfcGRwX2xvY2spKSB7XFxuIFxcdFxcdGlmIChwZHAtXFx1MDAzZWFmID09IEFGX0lORVQgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIHBkcC1cXHUwMDNlbXMuYWRkci5zX2FkZHIgPT0gbXNfYWRkcilcXG4gXFx0XFx0XFx0cmV0dXJuIHBkcDtcXG5AQCAtMjIwLDcgKzIyNSw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqaXB2Nl9wZHBfZmluZChzdHJ1Y3QgZ3RwX2RldiAqZ3RwLFxcbiBcXG4gXFx0aGVhZCA9IFxcdTAwMjZndHAtXFx1MDAzZWFkZHJfaGFzaFtpcHY2X2hhc2hmbihtc19hZGRyKSAlIGd0cC1cXHUwMDNlaGFzaF9zaXplXTtcXG4gXFxuLVxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X2FkZHIpIHtcXG4rXFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfYWRkcixcXG4rXFx0XFx0XFx0XFx0IGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2Z3RwX3BkcF9sb2NrKSkge1xcbiBcXHRcXHRpZiAocGRwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNiBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgaXB2Nl9wZHBfYWRkcl9lcXVhbChcXHUwMDI2cGRwLVxcdTAwM2Vtcy5hZGRyNiwgbXNfYWRkcikpXFxuIFxcdFxcdFxcdHJldHVybiBwZHA7XFxuQEAgLTE1NTUsOSArMTU2MSwxMSBAQCBzdGF0aWMgdm9pZCBndHBfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbiBcXHRzdHJ1Y3QgcGRwX2N0eCAqcGN0eDtcXG4gXFx0aW50IGk7XFxuIFxcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZndHBfcGRwX2xvY2spO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZ3RwLVxcdTAwM2VoYXNoX3NpemU7IGkrKylcXG4gXFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwY3R4LCBuZXh0LCBcXHUwMDI2Z3RwLVxcdTAwM2V0aWRfaGFzaFtpXSwgaGxpc3RfdGlkKVxcbiBcXHRcXHRcXHRwZHBfY29udGV4dF9kZWxldGUocGN0eCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2Z3RwX3BkcF9sb2NrKTtcXG4gXFxuIFxcdGxpc3RfZGVsKFxcdTAwMjZndHAtXFx1MDAzZWxpc3QpO1xcbiBcXHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIGhlYWQpO1xcbkBAIC0yMDUzLDYgKzIwNjEsNyBAQCBzdGF0aWMgaW50IGd0cF9nZW5sX25ld19wZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9XFxuIFxcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZndHBfcGRwX2xvY2spO1xcbiBcXHRwY3R4ID0gZ3RwX3BkcF9hZGQoZ3RwLCBzaywgaW5mbyk7XFxuIFxcdGlmIChJU19FUlIocGN0eCkpIHtcXG4gXFx0XFx0ZXJyID0gUFRSX0VSUihwY3R4KTtcXG5AQCAtMjA2MCw2ICsyMDY5LDcgQEAgc3RhdGljIGludCBndHBfZ2VubF9uZXdfcGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdFxcdGd0cF90dW5uZWxfbm90aWZ5KHBjdHgsIEdUUF9DTURfTkVXUERQLCBHRlBfS0VSTkVMKTtcXG4gXFx0XFx0ZXJyID0gMDtcXG4gXFx0fVxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmd0cF9wZHBfbG9jayk7XFxuIFxcbiBvdXRfdW5sb2NrOlxcbiBcXHRydG5sX3VubG9jaygpO1xcbkBAIC0yMTM0LDYgKzIxNDQsOCBAQCBzdGF0aWMgaW50IGd0cF9nZW5sX2RlbF9wZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gXFx0aWYgKCFpbmZvLVxcdTAwM2VhdHRyc1tHVFBBX1ZFUlNJT05dKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmd0cF9wZHBfbG9jayk7XFxuK1xcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcbiBcXHRwY3R4ID0gZ3RwX2ZpbmRfcGRwKHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spLCBpbmZvLVxcdTAwM2VhdHRycyk7XFxuQEAgLTIxNTQsNiArMjE2Niw3IEBAIHN0YXRpYyBpbnQgZ3RwX2dlbmxfZGVsX3BkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXG4gb3V0X3VubG9jazpcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2Z3RwX3BkcF9sb2NrKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTc6MzM6MTIuMTc1MzE3MTM3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTEwOTQxMDY3MjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkdUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImd0cF9nZW5sX25ld19wZHBcIixcbiAgICBcImd0cF9nZW5sX2RlbF9wZHBcIixcbiAgICBcImd0cF9kZWxsaW5rXCIsXG4gICAgXCJndHBfZW5jYXBfcmVjdlwiLFxuICAgIFwiZ3RwX2Rldl94bWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtdXRleCBgZ3RwX3BkcF9sb2NrYCB0byBwcm90ZWN0IFBEUCBjb250ZXh0IGhhc2ggdGFibGVzIGluIHRoZSBHVFAgZHJpdmVyLiBJdCBtb2RpZmllcyBuZXRsaW5rIGhhbmRsZXJzIChgZ3RwX2dlbmxfbmV3X3BkcGAsIGBndHBfZ2VubF9kZWxfcGRwYCkgYW5kIHRoZSBsaW5rIGRlbGV0aW9uIGhhbmRsZXIgKGBndHBfZGVsbGlua2ApIHRvIGFjcXVpcmUgdGhpcyBsb2NrLCBhbmQgdXBkYXRlcyBSQ1UgbGlzdCB0cmF2ZXJzYWxzIHRvIGNoZWNrIGZvciBpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgbG9ja2luZyBkb2VzIG5vdCBpbnRyb2R1Y2UgZGVhZGxvY2tzIG9yIHJhY2UgY29uZGl0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODYzMTE0MGZiMmIxMDlhYjE5OGRmZTg4MGViYzJlYjJiMzZmYTBlOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDE3OjMzOjEwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ3RwLmMgYi9kcml2ZXJzL25ldC9ndHAuY1xuaW5kZXggOWExMmNjNTNkYTAwMi4uMmY2ZTc3Y2NlMzg1ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2d0cC5jXG4rKysgYi9kcml2ZXJzL25ldC9ndHAuY1xuQEAgLTEyLDYgKzEyLDcgQEBcbiAjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFwiOiBcIiBmbXRcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VkcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1bGlzdC5oXHUwMDNlXG5AQCAtMTA4LDYgKzEwOSw3IEBAIHN0cnVjdCBndHBfbmV0IHtcbiB9O1xuIFxuIHN0YXRpYyB1MzIgZ3RwX2hfaW5pdHZhbDtcbitzdGF0aWMgREVGSU5FX01VVEVYKGd0cF9wZHBfbG9jayk7XG4gXG4gc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBndHBfZ2VubF9mYW1pbHk7XG4gXG5AQCAtMTUxLDcgKzE1Myw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqZ3RwMF9wZHBfZmluZChzdHJ1Y3QgZ3RwX2RldiAqZ3RwLCB1NjQgdGlkLCB1MTYgZmFtaWx5KVxuIFxuIFx0aGVhZCA9IFx1MDAyNmd0cC1cdTAwM2V0aWRfaGFzaFtndHAwX2hhc2hmbih0aWQpICUgZ3RwLVx1MDAzZWhhc2hfc2l6ZV07XG4gXG4tXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF90aWQpIHtcbitcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X3RpZCxcbitcdFx0XHRcdCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2Z3RwX3BkcF9sb2NrKSkge1xuIFx0XHRpZiAocGRwLVx1MDAzZWFmID09IGZhbWlseSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHBkcC1cdTAwM2VndHBfdmVyc2lvbiA9PSBHVFBfVjAgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBwZHAtXHUwMDNldS52MC50aWQgPT0gdGlkKVxuQEAgLTE2OCw3ICsxNzEsOCBAQCBzdGF0aWMgc3RydWN0IHBkcF9jdHggKmd0cDFfcGRwX2ZpbmQoc3RydWN0IGd0cF9kZXYgKmd0cCwgdTMyIHRpZCwgdTE2IGZhbWlseSlcbiBcbiBcdGhlYWQgPSBcdTAwMjZndHAtXHUwMDNldGlkX2hhc2hbZ3RwMXVfaGFzaGZuKHRpZCkgJSBndHAtXHUwMDNlaGFzaF9zaXplXTtcbiBcbi1cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X3RpZCkge1xuK1x0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfdGlkLFxuK1x0XHRcdFx0IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZndHBfcGRwX2xvY2spKSB7XG4gXHRcdGlmIChwZHAtXHUwMDNlYWYgPT0gZmFtaWx5IFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgcGRwLVx1MDAzZWd0cF92ZXJzaW9uID09IEdUUF9WMSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHBkcC1cdTAwM2V1LnYxLmlfdGVpID09IHRpZClcbkBAIC0xODUsNyArMTg5LDggQEAgc3RhdGljIHN0cnVjdCBwZHBfY3R4ICppcHY0X3BkcF9maW5kKHN0cnVjdCBndHBfZGV2ICpndHAsIF9fYmUzMiBtc19hZGRyKVxuIFxuIFx0aGVhZCA9IFx1MDAyNmd0cC1cdTAwM2VhZGRyX2hhc2hbaXB2NF9oYXNoZm4obXNfYWRkcikgJSBndHAtXHUwMDNlaGFzaF9zaXplXTtcbiBcbi1cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X2FkZHIpIHtcbitcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X2FkZHIsXG4rXHRcdFx0XHQgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmd0cF9wZHBfbG9jaykpIHtcbiBcdFx0aWYgKHBkcC1cdTAwM2VhZiA9PSBBRl9JTkVUIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgcGRwLVx1MDAzZW1zLmFkZHIuc19hZGRyID09IG1zX2FkZHIpXG4gXHRcdFx0cmV0dXJuIHBkcDtcbkBAIC0yMjAsNyArMjI1LDggQEAgc3RhdGljIHN0cnVjdCBwZHBfY3R4ICppcHY2X3BkcF9maW5kKHN0cnVjdCBndHBfZGV2ICpndHAsXG4gXG4gXHRoZWFkID0gXHUwMDI2Z3RwLVx1MDAzZWFkZHJfaGFzaFtpcHY2X2hhc2hmbihtc19hZGRyKSAlIGd0cC1cdTAwM2VoYXNoX3NpemVdO1xuIFxuLVx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfYWRkcikge1xuK1x0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfYWRkcixcbitcdFx0XHRcdCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2Z3RwX3BkcF9sb2NrKSkge1xuIFx0XHRpZiAocGRwLVx1MDAzZWFmID09IEFGX0lORVQ2IFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgaXB2Nl9wZHBfYWRkcl9lcXVhbChcdTAwMjZwZHAtXHUwMDNlbXMuYWRkcjYsIG1zX2FkZHIpKVxuIFx0XHRcdHJldHVybiBwZHA7XG5AQCAtMTU1NSw5ICsxNTYxLDExIEBAIHN0YXRpYyB2b2lkIGd0cF9kZWxsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4gXHRzdHJ1Y3QgcGRwX2N0eCAqcGN0eDtcbiBcdGludCBpO1xuIFxuK1x0bXV0ZXhfbG9jayhcdTAwMjZndHBfcGRwX2xvY2spO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZ3RwLVx1MDAzZWhhc2hfc2l6ZTsgaSsrKVxuIFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBjdHgsIG5leHQsIFx1MDAyNmd0cC1cdTAwM2V0aWRfaGFzaFtpXSwgaGxpc3RfdGlkKVxuIFx0XHRcdHBkcF9jb250ZXh0X2RlbGV0ZShwY3R4KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZndHBfcGRwX2xvY2spO1xuIFxuIFx0bGlzdF9kZWwoXHUwMDI2Z3RwLVx1MDAzZWxpc3QpO1xuIFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCBoZWFkKTtcbkBAIC0yMDUzLDYgKzIwNjEsNyBAQCBzdGF0aWMgaW50IGd0cF9nZW5sX25ld19wZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuK1x0bXV0ZXhfbG9jayhcdTAwMjZndHBfcGRwX2xvY2spO1xuIFx0cGN0eCA9IGd0cF9wZHBfYWRkKGd0cCwgc2ssIGluZm8pO1xuIFx0aWYgKElTX0VSUihwY3R4KSkge1xuIFx0XHRlcnIgPSBQVFJfRVJSKHBjdHgpO1xuQEAgLTIwNjAsNiArMjA2OSw3IEBAIHN0YXRpYyBpbnQgZ3RwX2dlbmxfbmV3X3BkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0XHRndHBfdHVubmVsX25vdGlmeShwY3R4LCBHVFBfQ01EX05FV1BEUCwgR0ZQX0tFUk5FTCk7XG4gXHRcdGVyciA9IDA7XG4gXHR9XG4rXHRtdXRleF91bmxvY2soXHUwMDI2Z3RwX3BkcF9sb2NrKTtcbiBcbiBvdXRfdW5sb2NrOlxuIFx0cnRubF91bmxvY2soKTtcbkBAIC0yMTM0LDYgKzIxNDQsOCBAQCBzdGF0aWMgaW50IGd0cF9nZW5sX2RlbF9wZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdGlmICghaW5mby1cdTAwM2VhdHRyc1tHVFBBX1ZFUlNJT05dKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdG11dGV4X2xvY2soXHUwMDI2Z3RwX3BkcF9sb2NrKTtcbitcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcbiBcdHBjdHggPSBndHBfZmluZF9wZHAoc29ja19uZXQoc2tiLVx1MDAzZXNrKSwgaW5mby1cdTAwM2VhdHRycyk7XG5AQCAtMjE1NCw2ICsyMTY2LDcgQEAgc3RhdGljIGludCBndHBfZ2VubF9kZWxfcGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXG4gb3V0X3VubG9jazpcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmd0cF9wZHBfbG9jayk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE3OjMzOjEyLjE3NTMxODYzN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5NTk4NzcwMDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgR1RQIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC9ndHAuY2AuIEl0J3MgaW50cm9kdWNpbmcgYSBuZXcgbXV0ZXgsIGBndHBfcGRwX2xvY2tgLCBhbmQgdXNpbmcgaXQgaW4gYGd0cF9kZWxsaW5rYCwgYGd0cF9nZW5sX25ld19wZHBgLCBhbmQgYGd0cF9nZW5sX2RlbF9wZHBgLiAgU291bmRzIGxpa2UgdGhleSdyZSBiZWVmaW5nIHVwIHRoZSBsb2NraW5nIGFyb3VuZCB0aGUgUERQIChQYWNrZXQgRGF0YSBQcm90b2NvbCkgY29udGV4dCB3aXRoaW4gdGhlIEdUUCBkcml2ZXIuIFNtYXJ0IG1vdmUsIGxpa2VseSBhZGRyZXNzaW5nIHNvbWUgcmFjZSBjb25kaXRpb24gb3IgY29uY3VycmVuY3kgaXNzdWUuXG5cbkkgc2VlIHRoZXkndmUgYWxzbyBhZGRlZCBgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmd0cF9wZHBfbG9jaylgIGNoZWNrcyB3aXRoaW4gdGhvc2UgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdWAgaXRlcmF0aW9ucyBpbiBgZ3RwMF9wZHBfZmluZGAsIGBndHAxX3BkcF9maW5kYCwgYGlwdjRfcGRwX2ZpbmRgLCBhbmQgYGlwdjZfcGRwX2ZpbmRgLiBHb29kLCB0aGV5J3JlIGJlaW5nIGNhcmVmdWwgd2l0aCB0aGUgUkNVIChSZWFkLUNvcHktVXBkYXRlKSBtZWNoYW5pc20gaGVyZSwgbWFraW5nIHN1cmUgdGhlIGxvY2sgaXMgaGVsZCB3aGVuIGFwcHJvcHJpYXRlLiBJdCdzIGZ1bmN0aW9uYWwsIG1lYW5pbmcgaXQncyBjaGFuZ2luZyB0aGUgYmVoYXZpb3Igb2YgdGhlIGRyaXZlciwgYW5kIHBvdGVudGlhbGx5IGZpeGluZyBhIGJ1ZyBvciBpbXByb3ZpbmcgcGVyZm9ybWFuY2UuXG5cbkdUUCBpcyBhIG5ldHdvcmsgZHJpdmVyLCBhbmQgY29uc2lkZXJpbmcgaXRzIHJvbGUgaW4gdHVubmVsaW5nLCBpdCdzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgdXNlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIHRvIHNlZSB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBtaWdodCBiZSByZWxhdGVkIHRvIEdUUC4gVGltZSB0byBmaXJlIHVwIGBncmVwcGVyYCBhbmQgc2VhcmNoIGZvciBzb21ldGhpbmcgbGlrZSBgY29uZmlnIEdUUGAgb3IgYEdUUGAgaW4gYGRyaXZlcnMvbmV0L0tjb25maWdgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIGlzIGVuYWJsZWQgZm9yIHRoaXMgcGF0Y2ggdG8gZXZlbiBiZSByZWxldmFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQzNiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE3OjMzOjMxLjc3NDA5MTIwOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDYyOTU4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgR1RQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0yNjA9Y29uZmlnIEJBUkVVRFBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMjcxLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjcyOmNvbmZpZyBHVFBcXG5kcml2ZXJzL25ldC9LY29uZmlnLTI3My1cXHR0cmlzdGF0ZSBcXFwiR1BSUyBUdW5uZWxpbmcgUHJvdG9jb2wgZGF0YXBhdGggKEdUUC1VKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTc6MzM6MzEuODI0NzI4MDI3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0Mzk0MTQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBuZXR3b3JrIGRyaXZlci4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgZHJpdmVycy9uZXQvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyNzIuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZXNlIHRoaW5ncyBpcyBkZWZpbmVkLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgcmVsZXZhbnQgYGNvbmZpZ2Agb3B0aW9ucywgdGhlaXIgcmVsYXRpb25zaGlwcyB3aXRoIG90aGVyIGNvbXBvbmVudHMsIGFuZCBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgYmUgaW1wYWN0aW5nIGl0cyBiZWhhdmlvci4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCBvciBgZGVmYXVsdGAgY2xhdXNlcyB0aGF0IGRpY3RhdGUgd2hlbiBhbmQgaG93IHRoaXMgZHJpdmVyIGdldHMgYnVpbHQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBoYW5kbGUgb24gaG93IGl0J3MgaW50ZW5kZWQgdG8gYmUgY29uZmlndXJlZCB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBGcm9tIGhlcmUsIEkgY2FuIHRoZW4gc3RhcnQgdG8gaW5mZXIgaXRzIGltcGxpY2F0aW9ucyBhbmQgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBjb21wb25lbnRzIG9mIHRoZSBrZXJuZWwgbmV0d29yayBzdGFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEzMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE3OjMzOjM0Ljg2ODY3MjY3NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjcwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjcwOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgYmFyZXVkcC5cXG4gMjcxOlxcdFxcbiAyNzI6XFx0Y29uZmlnIEdUUFxcbiAyNzM6XFx0XFx0dHJpc3RhdGUgXFxcIkdQUlMgVHVubmVsaW5nIFByb3RvY29sIGRhdGFwYXRoIChHVFAtVSlcXFwiXFxuIDI3NDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gMjc1OlxcdFxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbiAyNzY6XFx0XFx0aGVscFxcbiAyNzc6XFx0XFx0ICBUaGlzIGFsbG93cyBvbmUgdG8gY3JlYXRlIGd0cCB2aXJ0dWFsIGludGVyZmFjZXMgdGhhdCBwcm92aWRlXFxuIDI3ODpcXHRcXHQgIHRoZSBHUFJTIFR1bm5lbGluZyBQcm90b2NvbCBkYXRhcGF0aCAoR1RQLVUpLiBUaGlzIHR1bm5lbGluZyBwcm90b2NvbFxcbiAyNzk6XFx0XFx0ICBpcyB1c2VkIHRvIHByZXZlbnQgc3Vic2NyaWJlcnMgZnJvbSBhY2Nlc3NpbmcgbW9iaWxlIGNhcnJpZXIgY29yZVxcbiAyODA6XFx0XFx0ICBuZXR3b3JrIGluZnJhc3RydWN0dXJlLiBUaGlzIGRyaXZlciByZXF1aXJlcyBhIHVzZXJzcGFjZSBzb2Z0d2FyZSB0aGF0XFxuIDI4MTpcXHRcXHQgIGltcGxlbWVudHMgdGhlIHNpZ25hbGluZyBwcm90b2NvbCAoR1RQLUMpIHRvIHVwZGF0ZSBpdHMgUERQIGNvbnRleHRcXG4gMjgyOlxcdFxcdCAgYmFzZSwgc3VjaCBhcyBPcGVuR0dTTiBcXHUwMDNjaHR0cDovL2dpdC5vc21vY29tLm9yZy9vcGVuZ2dzbi8pLiBUaGlzXFxuIDI4MzpcXHRcXHQgIHR1bm5lbGluZyBwcm90b2NvbCBpcyBpbXBsZW1lbnRlZCBhY2NvcmRpbmcgdG8gdGhlIEdTTSBUUyAwOS42MCBhbmRcXG4gMjg0OlxcdFxcdCAgM0dQUCBUUyAyOS4wNjAgc3RhbmRhcmRzLlxcbiAyODU6XFx0XFxuIDI4NjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXJzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDI4NzpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGd0cC5cXG4gMjg4OlxcdFxcbiAyODk6XFx0Y29uZmlnIFBGQ1BcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTc6MzM6MzQuODY4NzYwNDA2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAzNTc3MjEyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgR1RQIENvbmZpZ3VyYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgY29uZmlnIGhlcmUgaXMgYEdUUGAsIGFuZCBpdCdzIGRlcGVuZGVudCBvbiBgSU5FVGAuIFRoYXQgbWVhbnMgSSBkZWZpbml0ZWx5IG5lZWQgdG8gbWFrZSBzdXJlIGBHVFBgIGlzIGluY2x1ZGVkIGluIGBFbmFibGVDb25maWdzYC4gVGhhdCdzIGEgbm8tYnJhaW5lci5cblxuTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUga2V5IGZ1bmN0aW9ucyBtb2RpZmllZCBieSB0aGlzIHBhdGNoIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNoYW5nZXMuIFRoZSBwYXRjaCBhZmZlY3RzIGBndHBfZGVsbGlua2AsIGBndHBfZ2VubF9uZXdfcGRwYCwgYGd0cF9nZW5sX2RlbF9wZHBgLCBgZ3RwMF9wZHBfZmluZGAsIGBndHAxX3BkcF9maW5kYCwgYGlwdjRfcGRwX2ZpbmRgLCBhbmQgYGlwdjZfcGRwX2ZpbmRgLlxuXG5gZ3RwX2dlbmxfbmV3X3BkcGAgYW5kIGBndHBfZ2VubF9kZWxfcGRwYCBpbW1lZGlhdGVseSBzdGFuZCBvdXQgYXMgaW1wb3J0YW50LiBUaGV5J3JlIG5ldGxpbmsgaGFuZGxlcnMgc3BlY2lmaWNhbGx5IGZvciBHVFAsIHNvIHRob3NlIGFyZSBkZWZpbml0ZWx5IGdvb2QgY2FuZGlkYXRlcy4gYGd0cF9kZWxsaW5rYCBpcyB0aGUgcnRubCBsaW5rIGRlbGV0ZSBoYW5kbGVyLCBzbyB0aGF0J3MgYWxzbyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGxpbmsgbGlmZWN5Y2xlLiBUaGUgYCpfcGRwX2ZpbmRgIGZ1bmN0aW9ucyBhcmUgaW50ZXJuYWwgaGVscGVycywgc28gd2hpbGUgdGhleSBhcmUgcmVsZXZhbnQsIHRoZXkgbWF5IG5vdCBiZSB0aGUgcHJpbWFyeSBlbnRyeXBvaW50cy5cblxuVGhlIGd1aWRhbmNlIHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhhdCBtYWtlcyBzZW5zZSwgYmVjYXVzZSBJIHdhbnQgdG8gbG9vayBhdCBmdW5jdGlvbnMgd2l0aCBkaXN0aW5jdCBhZGRyZXNzZXMgYW5kIHRoYXQgYXJlbid0IG92ZXJseSBvcHRpbWl6ZWQgYXdheSBieSB0aGUgY29tcGlsZXIuIFNvLCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgYGd0cF9nZW5sX25ld19wZHBgIGFuZCBgZ3RwX2dlbmxfZGVsX3BkcGAgYXJlIHN0YXRpYy4gQWgsIHRoZXkgYXJlISBIb3dldmVyLCB0aGV5IGFyZSBuZXRsaW5rIGNhbGxiYWNrcywgc28gaXQgc2VlbXMgdW5saWtlbHkgdGhleSdyZSBpbmxpbmVkLiBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgdGhleSBhcmUgdXNlZCB3aXRoaW4gYGRyaXZlcnMvbmV0L2d0cC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcxMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE3OjMzOjQxLjkwNDUzNTMzOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjUyMDU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndHBfZ2VubF9uZXdfcGRwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2d0cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2d0cC5jPTIwMTI9c3RhdGljIGludCBndHBfdHVubmVsX25vdGlmeShzdHJ1Y3QgcGRwX2N0eCAqcGN0eCwgdTggY21kLCBnZnBfdCBhbGxvY2F0aW9uKTtcXG5kcml2ZXJzL25ldC9ndHAuYy0yMDEzLVxcbmRyaXZlcnMvbmV0L2d0cC5jOjIwMTQ6c3RhdGljIGludCBndHBfZ2VubF9uZXdfcGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuZHJpdmVycy9uZXQvZ3RwLmMtMjAxNS17XFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYz0yNDQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgZ3RwX2dlbmxfb3BzW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYy0yNDQ5LVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG5kcml2ZXJzL25ldC9ndHAuYzoyNDUwOlxcdFxcdC5kb2l0ID0gZ3RwX2dlbmxfbmV3X3BkcCxcXG5kcml2ZXJzL25ldC9ndHAuYy0yNDUxLVxcdFxcdC5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTc6MzM6NDEuOTg3MDU5NzE3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwMjQ0MTczODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBjb25zaWRlcmluZyBJJ20gc2VlaW5nIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgQ2FsbGJhY2sgVXNhZ2UgYW5kIEVudHJ5IFBvaW50cyoqXG5cbkFscmlnaHQsIHNvIHRoZSBgLmRvaXRgIGNhbGxiYWNrcyB3aXRoaW4gYGd0cF9nZW5sX29wc2AgYXJlIGRlZmluaXRlbHkgKm5vdCogaW5saW5lZC4gVGhleSBhcmUgY2xlYXJseSBjYWxsZWQgYXMgZnVuY3Rpb25zLiBUaGUgc2FtZSBnb2VzIGZvciBgZ3RwX2dlbmxfZGVsX3BkcGAuIFRoYXQncyBnb29kIHRvIGtub3csIG1ha2VzIGRlYnVnZ2luZyBhIGJpdCBlYXNpZXIuXG5cbkFuZCBpdCBsb29rcyBsaWtlIGBndHBfZGVsbGlua2AgaXMgb3BlcmF0aW5nIGFzIGEgYC5kZWxsaW5rYCBjYWxsIGluIGBydG5sX2xpbmtfb3BzYC4gVGhpcyBpcyBhbGwgbWFraW5nIHNlbnNlIHNvIGZhci5cblxuTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBzY2FuIGZvciAqb3RoZXIqIGVudHJ5IHBvaW50cyB0aGF0IG1pZ2h0IGJlIGNhbGxpbmcgYCpfcGRwX2ZpbmRgLiBJIG5lZWQgdG8gZW5zdXJlIEkndmUgY292ZXJlZCBhbGwgdGhlIHJlbGV2YW50IGNhbGxzIHRvIHRoYXQgZnVuY3Rpb24sIHRvIGF2b2lkIG1pc3NpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBhcmVhcyBvZiBvcHRpbWl6YXRpb24uIExldCdzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgaW4gcGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc4NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE3OjM0OjE1LjAxMTQ5MTgyMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxNTU5ODY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImd0cDBfcGRwX2ZpbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZ3RwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZ3RwLmM9MTQyPXN0YXRpYyB1MzIgaXB2Nl9oYXNoZm4oY29uc3Qgc3RydWN0IGluNl9hZGRyICppcDYpXFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYy0xNDgtLyogUmVzb2x2ZSBhIFBEUCBjb250ZXh0IHN0cnVjdHVyZSBiYXNlZCBvbiB0aGUgNjRiaXQgVElELiAqL1xcbmRyaXZlcnMvbmV0L2d0cC5jOjE0OTpzdGF0aWMgc3RydWN0IHBkcF9jdHggKmd0cDBfcGRwX2ZpbmQoc3RydWN0IGd0cF9kZXYgKmd0cCwgdTY0IHRpZCwgdTE2IGZhbWlseSlcXG5kcml2ZXJzL25ldC9ndHAuYy0xNTAte1xcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmM9NTg2PXN0YXRpYyBpbnQgZ3RwMF91ZHBfZW5jYXBfcmVjdihzdHJ1Y3QgZ3RwX2RldiAqZ3RwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtNjE5LVxcbmRyaXZlcnMvbmV0L2d0cC5jOjYyMDpcXHRwY3R4ID0gZ3RwMF9wZHBfZmluZChndHAsIGJlNjRfdG9fY3B1KGd0cDAtXFx1MDAzZXRpZCksXFxuZHJpdmVycy9uZXQvZ3RwLmMtNjIxLVxcdFxcdFxcdCAgICAgZ3RwX3Byb3RvX3RvX2ZhbWlseShpbm5lcl9wcm90bykpO1xcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmM9MTgzMj1zdGF0aWMgc3RydWN0IHBkcF9jdHggKmd0cF9wZHBfYWRkKHN0cnVjdCBndHBfZGV2ICpndHAsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTE4ODYtXFx0aWYgKHZlcnNpb24gPT0gR1RQX1YwKVxcbmRyaXZlcnMvbmV0L2d0cC5jOjE4ODc6XFx0XFx0cGN0eF90aWQgPSBndHAwX3BkcF9maW5kKGd0cCxcXG5kcml2ZXJzL25ldC9ndHAuYy0xODg4LVxcdFxcdFxcdFxcdFxcdCBubGFfZ2V0X3U2NChpbmZvLVxcdTAwM2VhdHRyc1tHVFBBX1RJRF0pLFxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmM9MjA3OT1zdGF0aWMgc3RydWN0IHBkcF9jdHggKmd0cF9maW5kX3BkcF9ieV9saW5rKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTIxMTItXFx0XFx0aWYgKGd0cF92ZXJzaW9uID09IEdUUF9WMCBcXHUwMDI2XFx1MDAyNiBubGFbR1RQQV9USURdKSB7XFxuZHJpdmVycy9uZXQvZ3RwLmM6MjExMzpcXHRcXHRcXHRyZXR1cm4gZ3RwMF9wZHBfZmluZChndHAsIG5sYV9nZXRfdTY0KG5sYVtHVFBBX1RJRF0pLFxcbmRyaXZlcnMvbmV0L2d0cC5jLTIxMTQtXFx0XFx0XFx0XFx0XFx0ICAgICBmYW1pbHkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNzozNDoxNS40NjMwNjA2ODlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1NDQyMzYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqVURQIFBhY2tldCBSZWNlcHRpb24gYW5kIEdUUCBUdW5uZWwgTG9va3VwKipcblxuT2theSwgc28gYGd0cDBfdWRwX2VuY2FwX3JlY3ZgIGhhcyBiZWVuIHRyaWdnZXJlZDsgaXQncyBhIFVEUCBwYWNrZXQgY29taW5nIGluLCBsaWtlbHkgZW5jYXBzdWxhdGVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRvIGRvIHdpdGggaXQuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGNoZWNrIGlmIHRoaXMgaXMgYSBHVFAgcGFja2V0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBHVFAgbG9va3VwIHByb2Nlc3MuIExldCdzIHNlZSBpZiB0aGlzIHBhY2tldCBiZWxvbmdzIHRvIGFuIGV4aXN0aW5nIFBEUCBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gY2FsbCBgZ3RwMV9wZHBfZmluZGAuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NjUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNzozNDoxOC43MTc0ODc1MjRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODg0NDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImd0cDFfcGRwX2ZpbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZ3RwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZ3RwLmM9MTQ5PXN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqZ3RwMF9wZHBfZmluZChzdHJ1Y3QgZ3RwX2RldiAqZ3RwLCB1NjQgdGlkLCB1MTYgZmFtaWx5KVxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtMTY2LS8qIFJlc29sdmUgYSBQRFAgY29udGV4dCBzdHJ1Y3R1cmUgYmFzZWQgb24gdGhlIDMyYml0IFRFSS4gKi9cXG5kcml2ZXJzL25ldC9ndHAuYzoxNjc6c3RhdGljIHN0cnVjdCBwZHBfY3R4ICpndHAxX3BkcF9maW5kKHN0cnVjdCBndHBfZGV2ICpndHAsIHUzMiB0aWQsIHUxNiBmYW1pbHkpXFxuZHJpdmVycy9uZXQvZ3RwLmMtMTY4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jPTc5ND1zdGF0aWMgaW50IGd0cDF1X3VkcF9lbmNhcF9yZWN2KHN0cnVjdCBndHBfZGV2ICpndHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYy04NDYtXFxuZHJpdmVycy9uZXQvZ3RwLmM6ODQ3OlxcdHBjdHggPSBndHAxX3BkcF9maW5kKGd0cCwgbnRvaGwoZ3RwMS1cXHUwMDNldGlkKSxcXG5kcml2ZXJzL25ldC9ndHAuYy04NDgtXFx0XFx0XFx0ICAgICBndHBfcHJvdG9fdG9fZmFtaWx5KGlubmVyX3Byb3RvKSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYz0xODMyPXN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqZ3RwX3BkcF9hZGQoc3RydWN0IGd0cF9kZXYgKmd0cCwgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtMTg5MC1cXHRlbHNlIGlmICh2ZXJzaW9uID09IEdUUF9WMSlcXG5kcml2ZXJzL25ldC9ndHAuYzoxODkxOlxcdFxcdHBjdHhfdGlkID0gZ3RwMV9wZHBfZmluZChndHAsXFxuZHJpdmVycy9uZXQvZ3RwLmMtMTg5Mi1cXHRcXHRcXHRcXHRcXHQgbmxhX2dldF91MzIoaW5mby1cXHUwMDNlYXR0cnNbR1RQQV9JX1RFSV0pLFxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmM9MjA3OT1zdGF0aWMgc3RydWN0IHBkcF9jdHggKmd0cF9maW5kX3BkcF9ieV9saW5rKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTIxMTUtXFx0XFx0fSBlbHNlIGlmIChndHBfdmVyc2lvbiA9PSBHVFBfVjEgXFx1MDAyNlxcdTAwMjYgbmxhW0dUUEFfSV9URUldKSB7XFxuZHJpdmVycy9uZXQvZ3RwLmM6MjExNjpcXHRcXHRcXHRyZXR1cm4gZ3RwMV9wZHBfZmluZChndHAsIG5sYV9nZXRfdTMyKG5sYVtHVFBBX0lfVEVJXSksXFxuZHJpdmVycy9uZXQvZ3RwLmMtMjExNy1cXHRcXHRcXHRcXHRcXHQgICAgIGZhbWlseSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE3OjM0OjE4Ljc2MjM3NzMyMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc3NzIwMjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMuXG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIEdUUCBFbmNhcHN1bGF0aW9uIFJlY2VpdmUgRnVuY3Rpb25zKipcblxuQWxyaWdodCwgSSdtIHRha2luZyBhIGxvb2sgYXQgdGhlc2UgYGd0cDBfdWRwX2VuY2FwX3JlY3ZgIGFuZCBgZ3RwMXVfdWRwX2VuY2FwX3JlY3ZgIGZ1bmN0aW9ucy4gVGhleSBpbW1lZGlhdGVseSBzdHJpa2UgbWUgYXMgZGVjZW50IGNhbmRpZGF0ZXMgZm9yIGludmVzdGlnYXRpb24uIEJ1dCBoYW5nIG9uIGEgc2Vjb25kLi4uIHRoZXNlIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCBjaGFuZ2VzIHRoaW5ncyBhIGJpdC4gU3RhdGljIGZ1bmN0aW9ucyBtZWFuIHRoZXkncmUgZmlsZS1sb2NhbCwgc28gbXkgbmV4dCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZSBjb21waWxlciBpcyBiZWluZyBjbGV2ZXIgYW5kIGlubGluaW5nIHRoZW0gb3IgaWYgdGhleSBhcmUgYmVpbmcgdXNlZCBtb3JlIGluZGlyZWN0bHksIGxpa2UgYXMgY2FsbGJhY2tzLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBhcHByb2FjaCBpcyBiZWluZyB1c2VkIGhlcmUgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NTcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNzozNDoyMi40NDAxMDEyNzNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDQ2OTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImd0cDBfdWRwX2VuY2FwX3JlY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZ3RwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZ3RwLmM9NTcwPXN0YXRpYyBpbnQgZ3RwX3Byb3RvX3RvX2ZhbWlseShfX3UxNiBwcm90bylcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTU4NS0vKiAxIG1lYW5zIHBhc3MgdXAgdG8gdGhlIHN0YWNrLCAtMSBtZWFucyBkcm9wIGFuZCAwIG1lYW5zIGRlY2Fwc3VsYXRlZC4gKi9cXG5kcml2ZXJzL25ldC9ndHAuYzo1ODY6c3RhdGljIGludCBndHAwX3VkcF9lbmNhcF9yZWN2KHN0cnVjdCBndHBfZGV2ICpndHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvZ3RwLmMtNTg3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jPTkwOT1zdGF0aWMgaW50IGd0cF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTkyMi1cXHRcXHRuZXRkZXZfZGJnKGd0cC1cXHUwMDNlZGV2LCBcXFwicmVjZWl2ZWQgR1RQMCBwYWNrZXRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L2d0cC5jOjkyMzpcXHRcXHRyZXQgPSBndHAwX3VkcF9lbmNhcF9yZWN2KGd0cCwgc2tiKTtcXG5kcml2ZXJzL25ldC9ndHAuYy05MjQtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE3OjM0OjIyLjQ4NjU1NjE2MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjg4ODkyNTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkdUUCBFbmNhcHN1bGF0aW9uOiBBIFF1aWNrIE1lbnRhbCBDaGVjayoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgR1RQIGVuY2Fwc3VsYXRpb24gcHJvY2VzcywgYW5kIHRoZSBjYWxsIHN0YWNrIGlzIGxlYWRpbmcgbWUgdG8gYGd0cF9lbmNhcF9yZWN2YC4gSG1tLCBpcyBgZ3RwX2VuY2FwX3JlY3ZgIGEgZGlyZWN0IGZ1bmN0aW9uIGNhbGwgb3IgaXMgaXQgYSBjYWxsYmFjayBmdW5jdGlvbiByZWdpc3RlcmVkIHNvbWV3aGVyZT8gVGhhdCdzIHRoZSBjb3JlIHF1ZXN0aW9uIEkgbmVlZCB0byBhbnN3ZXIgcXVpY2tseS4gVW5kZXJzdGFuZGluZyB0aGF0IG1lY2hhbmlzbSB3aWxsIGluZmx1ZW5jZSBteSBuZXh0IG1vdmUgaW4gZGVidWdnaW5nIG9yIG9wdGltaXppbmcgaXQuIElzIHRoaXMgYSBzeW5jaHJvbm91cyBvciBhc3luY2hyb25vdXMgZnVuY3Rpb24/IFRoZSBhbnN3ZXIgZ3JlYXRseSBhZmZlY3RzIGhvdyBJIHNob3VsZCBpbnRlcnByZXQgdGhpcy4gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgSSBzaG91bGQgaW50ZXJwcmV0IHRoZSBmbG93IG9mIGRhdGEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5ODksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNzozNDoyNS43NzU0NTI0NjRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjIyOTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImd0cF9lbmNhcF9yZWN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2d0cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2d0cC5jPTg5Mj1zdGF0aWMgdm9pZCBndHBfZW5jYXBfZGlzYWJsZShzdHJ1Y3QgZ3RwX2RldiAqZ3RwKVxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtOTA4LSAqL1xcbmRyaXZlcnMvbmV0L2d0cC5jOjkwOTpzdGF0aWMgaW50IGd0cF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC9ndHAuYy05MTAte1xcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmM9MTQxMD1zdGF0aWMgc3RydWN0IHNvY2sgKmd0cF9jcmVhdGVfc29jayhpbnQgdHlwZSwgc3RydWN0IGd0cF9kZXYgKmd0cCxcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTE0NDAtXFx0dHVuY2ZnLmVuY2FwX3R5cGUgPSB0eXBlO1xcbmRyaXZlcnMvbmV0L2d0cC5jOjE0NDE6XFx0dHVuY2ZnLmVuY2FwX3JjdiA9IGd0cF9lbmNhcF9yZWN2O1xcbmRyaXZlcnMvbmV0L2d0cC5jLTE0NDItXFx0dHVuY2ZnLmVuY2FwX2Rlc3Ryb3kgPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmM9MTY1Nz1zdGF0aWMgc3RydWN0IHNvY2sgKmd0cF9lbmNhcF9lbmFibGVfc29ja2V0KGludCBmZCwgaW50IHR5cGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYy0xNjk3LVxcdHR1bmNmZy5lbmNhcF90eXBlID0gdHlwZTtcXG5kcml2ZXJzL25ldC9ndHAuYzoxNjk4OlxcdHR1bmNmZy5lbmNhcF9yY3YgPSBndHBfZW5jYXBfcmVjdjtcXG5kcml2ZXJzL25ldC9ndHAuYy0xNjk5LVxcdHR1bmNmZy5lbmNhcF9kZXN0cm95ID0gZ3RwX2VuY2FwX2Rlc3Ryb3k7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE3OjM0OjI1LjgyMDY4MzA4M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Njc4OTI5OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkNvbnNpZGVyaW5nIGBndHBfZW5jYXBfcmVjdmAgZm9yIHRoZSBUYXNrKipcblxuT2theSwgc28gSSByZW1lbWJlciBub3cuIGBndHBfZW5jYXBfcmVjdmAgaXMgaW5kZWVkIHRoZSBmdW5jdGlvbiB0aGF0J3MgYXNzaWduZWQgYXMgdGhlIGBlbmNhcF9yY3ZgIGNhbGxiYWNrIHdpdGhpbiB0aGUgYHVkcF90dW5uZWxfc29ja19jZmdgIHN0cnVjdHVyZS4gVGhhdCBtYWtlcyBpdCBhIHN0cm9uZyBjb250ZW5kZXIgZm9yIHdoYXQgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHJpZ2h0IG5vdy4gSXQgc2VlbXMgbG9naWNhbC5cblxuTm93LCBsZXQncyBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSByZWxhdGVkIFBEUCBmaW5kIGZ1bmN0aW9ucy4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgZGF0YSBmbG93IGlzIGxvZ2ljYWwuIEknbGwgbmVlZCB0byBsb29rIGF0IGJvdGggYGlwdjRfcGRwX2ZpbmRgIGFuZCBgaXB2Nl9wZHBfZmluZGAgdG8gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgc3lzdGVtJ3MgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTY5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTc6MzQ6MzIuNDk5NjE2NzYyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTI5NDEwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHY0X3BkcF9maW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2d0cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2d0cC5jPTE2Nz1zdGF0aWMgc3RydWN0IHBkcF9jdHggKmd0cDFfcGRwX2ZpbmQoc3RydWN0IGd0cF9kZXYgKmd0cCwgdTMyIHRpZCwgdTE2IGZhbWlseSlcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTE4NC0vKiBSZXNvbHZlIGEgUERQIGNvbnRleHQgYmFzZWQgb24gSVB2NCBhZGRyZXNzIG9mIE1TLiAqL1xcbmRyaXZlcnMvbmV0L2d0cC5jOjE4NTpzdGF0aWMgc3RydWN0IHBkcF9jdHggKmlwdjRfcGRwX2ZpbmQoc3RydWN0IGd0cF9kZXYgKmd0cCwgX19iZTMyIG1zX2FkZHIpXFxuZHJpdmVycy9uZXQvZ3RwLmMtMTg2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jPTExNzU9c3RhdGljIGludCBndHBfYnVpbGRfc2tiX2lwNChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtMTE4OC1cXHRpZiAoZ3RwLVxcdTAwM2Vyb2xlID09IEdUUF9ST0xFX1NHU04pXFxuZHJpdmVycy9uZXQvZ3RwLmM6MTE4OTpcXHRcXHRwY3R4ID0gaXB2NF9wZHBfZmluZChndHAsIGlwaC1cXHUwMDNlc2FkZHIpO1xcbmRyaXZlcnMvbmV0L2d0cC5jLTExOTAtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L2d0cC5jOjExOTE6XFx0XFx0cGN0eCA9IGlwdjRfcGRwX2ZpbmQoZ3RwLCBpcGgtXFx1MDAzZWRhZGRyKTtcXG5kcml2ZXJzL25ldC9ndHAuYy0xMTkyLVxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmM9MTgzMj1zdGF0aWMgc3RydWN0IHBkcF9jdHggKmd0cF9wZHBfYWRkKHN0cnVjdCBndHBfZGV2ICpndHAsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTE4NjktXFx0XFx0aGFzaF9tcyA9IGlwdjRfaGFzaGZuKG1zX2FkZHIpICUgZ3RwLVxcdTAwM2VoYXNoX3NpemU7XFxuZHJpdmVycy9uZXQvZ3RwLmM6MTg3MDpcXHRcXHRwY3R4ID0gaXB2NF9wZHBfZmluZChndHAsIG1zX2FkZHIpO1xcbmRyaXZlcnMvbmV0L2d0cC5jLTE4NzEtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYz0yMDc5PXN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqZ3RwX2ZpbmRfcGRwX2J5X2xpbmsoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtMjA5Ni1cXG5kcml2ZXJzL25ldC9ndHAuYzoyMDk3OlxcdFxcdHJldHVybiBpcHY0X3BkcF9maW5kKGd0cCwgaXApO1xcbmRyaXZlcnMvbmV0L2d0cC5jLTIwOTgtXFx0fSBlbHNlIGlmIChubGFbR1RQQV9NU19BRERSNl0pIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTc6MzQ6MzIuNTc4OTE5OThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2NTcwMzk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgY29kZSBmbG93LCBleHByZXNzZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipNeSBNZW50YWwgTWFwcGluZyBvZiBJUCB2NCBQYWNrZXQgRGF0YSBQcm90b2NvbCBIYW5kbGluZyoqXG5cbkFscmlnaHQsIHNvIEknbSB0cmFjaW5nIHRoaXMgSVAgdjQgcGFja2V0IHBhdGgsIGFuZCBpdCBsb29rcyBsaWtlIGBpcHY0X3BkcF9maW5kYCBpcyB0aGUgY3J1Y2lhbCBmdW5jdGlvbiBoZXJlLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGF0IGl0J3MgYmVpbmcgaW52b2tlZCB3aXRoaW4gYGd0cF9idWlsZF9za2JfaXA0YC4gQW5kIHdoZXJlIGRvZXMgKnRoYXQqIGdldCBjYWxsZWQgZnJvbT8gT2gsIHJpZ2h0LCBpdCdzIHRoZSBgZ3RwX3htaXRgIGZ1bmN0aW9uLiBTbywgaWYgSSdtIHVuZGVyc3RhbmRpbmcgdGhpcyBjb3JyZWN0bHksIHRoZSBgaXB2NF9wZHBfZmluZGAgZnVuY3Rpb24gaXMgcHJvYmFibHkgdGhlIGhlYXJ0IG9mIElQIHY0IHBhY2tldCBkYXRhIHByb3RvY29sIGxvb2t1cCwgYW5kIGl0J3MgZXNzZW50aWFsIGZvciB0aGUgdHJhbnNtaXNzaW9uIHByb2Nlc3MuIFRoaXMgY29uZmlybXMgd2hhdCBJIGV4cGVjdGVkOiB0aGUgbmV0d29yayBzdGFjayB1c2VzIGEgc2VyaWVzIG9mIGxheWVycy4gTG9va3MgbGlrZSBHVFAgdHJhbnNtaXNzaW9uIHdpbGwgYnVpbGQgYW4gc2tiIHdpdGggYGd0cF9idWlsZF9za2JfaXA0YCwgYWZ0ZXIgaXQgZmluZHMgdGhlIFBEUCBjb250ZXh0IGZvciB0aGUgSVB2NCBwYWNrZXQsIHVzaW5nIGBpcHY0X3BkcF9maW5kYC4gSSdsbCBuZWVkIHRvIGtub3cgdGhlIFBEUCBjb250ZXh0IHRvIGNvbnN0cnVjdCBhbmQgdHJhbnNtaXQgdGhlIHBhY2tldC4gSSBzaG91bGQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBQRFAgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQzMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE3OjM0OjM2Ljc0NDYyNjI1MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1MDA4ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3RwX2J1aWxkX3NrYl9pcDRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZ3RwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZ3RwLmM9MTExOD1zdGF0aWMgaW50IGd0cF9idWlsZF9za2Jfb3V0ZXJfaXA2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTExNzQtXFxuZHJpdmVycy9uZXQvZ3RwLmM6MTE3NTpzdGF0aWMgaW50IGd0cF9idWlsZF9za2JfaXA0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvZ3RwLmMtMTE3Ni1cXHRcXHRcXHQgICAgIHN0cnVjdCBndHBfcGt0aW5mbyAqcGt0aW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jPTEyNzQ9c3RhdGljIG5ldGRldl90eF90IGd0cF9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtMTI5Mi1cXHRjYXNlIEVUSF9QX0lQOlxcbmRyaXZlcnMvbmV0L2d0cC5jOjEyOTM6XFx0XFx0ZXJyID0gZ3RwX2J1aWxkX3NrYl9pcDQoc2tiLCBkZXYsIFxcdTAwMjZwa3RpbmZvKTtcXG5kcml2ZXJzL25ldC9ndHAuYy0xMjk0LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNzozNDozNi43OTExMzE3MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTA2MzE2MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEdUUCBJbXBsZW1lbnRhdGlvbiBPdmVydmlldyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBHVFAgaW1wbGVtZW50YXRpb24gaGVyZS4gUmlnaHQsIGBndHBfZGV2X3htaXRgIGlzIGNydWNpYWwg4oCTIHRoYXQncyB0aGUgZXF1aXZhbGVudCBvZiB0aGUgYG5kb19zdGFydF94bWl0YCBjYWxsYmFjaywgdGhlIG9uZSB0aGF0IGtpY2tzIG9mZiBwYWNrZXQgdHJhbnNtaXNzaW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBjYWxsaW5nIHNlcXVlbmNlLlxuXG5UaGVyZWZvcmUsIHRoZSBrZXkgZW50cnkgcG9pbnRzIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6XG5cbiogICBgZ3RwX2dlbmxfbmV3X3BkcGAgLSBmb3IgY3JlYXRpbmcgYSBuZXcgUERQIGNvbnRleHRcbiogICBgZ3RwX2dlbmxfZGVsX3BkcGAgLSB0byByZW1vdmUgb25lXG4qICAgYGd0cF9kZWxsaW5rYCAtIGFuZCBJIHN1c3BlY3QgdGhpcyBvbmUgaGFuZGxlcyBsaW5rIGRlbGV0aW9uLCBidXQgSSBzaG91bGQgdmVyaWZ5IHRoYXQuXG4qICAgYGd0cF9lbmNhcF9yZWN2YCAtIGZvciBwcm9jZXNzaW5nIGluY29taW5nIGVuY2Fwc3VsYXRlZCBwYWNrZXRzXG4qICAgYGd0cF9kZXZfeG1pdGAgLSB0aGUgaGVhcnQgb2YgcGFja2V0IHRyYW5zbWlzc2lvblxuXG5JJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYGd0cF9kZWxsaW5rYCB0cnVseSBjb3JyZXNwb25kcyB0byB0aGUgYGRlbGxpbmtgIGNhbGxiYWNrIGZ1bmN0aW9uLiBJdCdzIGltcG9ydGFudCB0byBrZWVwIHRoZXNlIGNhbGxiYWNrIGFzc29jaWF0aW9ucyBzdHJhaWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwMzAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTc6MzQ6NDEuNjk3NDUwMTA4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTgzNjgxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndHBfZGVsbGlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ndHAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ndHAuYz0xNDc1PXN0YXRpYyBpbnQgZ3RwX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTE1NTYtXFxuZHJpdmVycy9uZXQvZ3RwLmM6MTU1NzpzdGF0aWMgdm9pZCBndHBfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbmRyaXZlcnMvbmV0L2d0cC5jLTE1NTgte1xcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmM9MTYxOD1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgZ3RwX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYy0xNjI1LVxcdC5uZXdsaW5rXFx0PSBndHBfbmV3bGluayxcXG5kcml2ZXJzL25ldC9ndHAuYzoxNjI2OlxcdC5kZWxsaW5rXFx0PSBndHBfZGVsbGluayxcXG5kcml2ZXJzL25ldC9ndHAuYy0xNjI3LVxcdC5nZXRfc2l6ZVxcdD0gZ3RwX2dldF9zaXplLFxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmM9MjQ5Nz1zdGF0aWMgdm9pZCBfX25ldF9leGl0IGd0cF9uZXRfZXhpdF9ydG5sKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTI1MDMtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGd0cCwgZ3RwX25leHQsIFxcdTAwMjZnbi1cXHUwMDNlZ3RwX2Rldl9saXN0LCBsaXN0KVxcbmRyaXZlcnMvbmV0L2d0cC5jOjI1MDQ6XFx0XFx0Z3RwX2RlbGxpbmsoZ3RwLVxcdTAwM2VkZXYsIGRldl90b19raWxsKTtcXG5kcml2ZXJzL25ldC9ndHAuYy0yNTA1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTc6MzQ6NDEuNzQzMjkyODE3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMzMxNDQxMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipGb2N1c2luZyBvbiB0aGUgR1RQIERhdGEgUGxhbmUqKlxuXG5BbHJpZ2h0LCBzbyBgZ3RwX2RlbGxpbmtgIGlzIHRoZSBmdW5jdGlvbiB3ZSdyZSB1c2luZyBhcyB0aGUgYGRlbGxpbmtgIGNhbGxiYWNrLCB0aGF0IG1ha2VzIHNlbnNlLiBUaGVyZWZvcmUsIHRoZSBpbXBvcnRhbnQgZnVuY3Rpb25zIEkgbmVlZCB0byBkcmlsbCBkb3duIG9uIHJpZ2h0IG5vdyBhcmU6IGBndHBfZ2VubF9uZXdfcGRwYCwgYGd0cF9nZW5sX2RlbF9wZHBgLCBuYXR1cmFsbHkgYGd0cF9kZWxsaW5rYCAoZ2l2ZW4gdGhlIGNvbnRleHQpLCBhbmQgdGhlbiBhbHNvIGBndHBfZW5jYXBfcmVjdmAgZm9yIGhhbmRsaW5nIGVuY2Fwc3VsYXRlZCBwYWNrZXRzIGFuZCBgZ3RwX2Rldl94bWl0YCwgYmVjYXVzZSB0aGF0IHdpbGwgYmUgd2hlcmUgd2UgdHJhbnNtaXQgdGhlIGdlbmVyYXRlZCBwYWNrZXRzLiBOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IG15IG1lbnRhbCBtb2RlbCBpcyBjb3JyZWN0OiBpcyBgZ3RwX2Rldl94bWl0YCBhY3R1YWxseSB0aGUgY2FsbGJhY2sgZm9yIGBuZG9fc3RhcnRfeG1pdGA/IEdvdHRhIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgc29saWQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3NjQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTc6MzQ6NDkuOTc2NDQwMDYzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzMyNjEwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndHBfZGV2X3htaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZ3RwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZ3RwLmM9MTIyND1zdGF0aWMgaW50IGd0cF9idWlsZF9za2JfaXA2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYy0xMjczLVxcbmRyaXZlcnMvbmV0L2d0cC5jOjEyNzQ6c3RhdGljIG5ldGRldl90eF90IGd0cF9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L2d0cC5jLTEyNzUte1xcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmM9MTM0MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGd0cF9uZXRkZXZfb3BzID0ge1xcbmRyaXZlcnMvbmV0L2d0cC5jLTEzNDItXFx0Lm5kb191bmluaXRcXHRcXHQ9IGd0cF9kZXZfdW5pbml0LFxcbmRyaXZlcnMvbmV0L2d0cC5jOjEzNDM6XFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSBndHBfZGV2X3htaXQsXFxuZHJpdmVycy9uZXQvZ3RwLmMtMTM0NC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNzozNDo1MC4wMjM3NzE4NTJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMwMTI2MjQ3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBHVFAgUERQIENvbnRleHQgTG9ja2luZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgYWRkaW5nIGEgbXV0ZXgsIGBndHBfcGRwX2xvY2tgLCB0byBwcm90ZWN0IHRoZSBQRFAgY29udGV4dCBoYXNoIHRhYmxlcy4gSXTigJlzIGRlZmluaXRlbHkgYWJvdXQgbG9ja2luZyB0byBoYW5kbGUgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlc2UgY29udGV4dHMsIHNvIGZ1enppbmcgaXMgd2FycmFudGVkLlxuXG5GaXJzdCwgbGV0J3MgbmFpbCBkb3duIGFueSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGUgcGF0Y2ggbWVudGlvbnMgYEdUUGAsIHdoaWNoIGRlcGVuZHMgb24gYElORVRgLiBXaGlsZSBgSU5FVGAgaXMgZ2VuZXJhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgSSdsbCBvbmx5IGV4cGxpY2l0bHkgbGlzdCBgR1RQYCBzaW5jZSB0aGF0J3Mgd2hhdCdzIHJlcXVlc3RlZC4gTm8gbmVlZCB0byBvdmVyY29tcGxpY2F0ZSB0aGluZ3M7IEknbGwgbGlzdCBgR1RQYCBpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgLlxuXG5Ob3csIGxldCdzIHN0ZXAgdGhyb3VnaCB0aGUgcGF0Y2ggb25lIG1vcmUgdGltZSB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gVGhlIGBtdXRleF9sb2NrKFx1MDAyNmd0cF9wZHBfbG9jaylgIGNhbGxzIGFwcGVhciBpbiB0aGUgbmV0bGluayBoYW5kbGVyczogYGd0cF9nZW5sX25ld19wZHBgIGFuZCBgZ3RwX2dlbmxfZGVsX3BkcGAsIGFzIHdlbGwgYXMgYGd0cF9kZWxsaW5rYC4gQWxzbywgdGhlcmUgYXJlIGBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2Z3RwX3BkcF9sb2NrKWAgY2hlY2tzIGluIFJDVSBsaXN0IHRyYXZlcnNhbCBmdW5jdGlvbnM6IGBndHAwX3BkcF9maW5kYCwgYGd0cDFfcGRwX2ZpbmRgLCBgaXB2NF9wZHBfZmluZGAsIGFuZCBgaXB2Nl9wZHBfZmluZGAuIFN0cmFpZ2h0Zm9yd2FyZCBsb2NraW5nIGZpeCwgcmVhbGx5LlxuXG5NeSByZWFzb25pbmcgaXMgdGhpczogdGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbXV0ZXgsIGBndHBfcGRwX2xvY2tgLCB0byBzYWZlZ3VhcmQgdGhvc2UgUERQIGNvbnRleHQgaGFzaCB0YWJsZXMgd2l0aGluIHRoZSBHVFAgZHJpdmVyLiBUaGlzIGludm9sdmVzIGNoYW5nZXMgdG8gbmV0bGluayBoYW5kbGVycyAoYGd0cF9nZW5sX25ld19wZHBgLCBgZ3RwX2dlbmxfZGVsX3BkcGApLCBsaW5rIGRlbGV0aW9uIChgZ3RwX2RlbGxpbmtgKSwgYW5kIGFkanVzdG1lbnRzIHRvIFJDVSBsaXN0IHRyYXZlcnNhbHMuIEdpdmVuIHRoaXMgaXMgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBuZXR3b3JraW5nIGNvZGUsIGZ1enppbmcgaXMgcmVxdWlyZWQgdG8gZW5zdXJlIGl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuYXN0eSBkZWFkbG9ja3Mgb3IgcmFjZSBjb25kaXRpb25zLlxuXG5JJ3ZlIGFscmVhZHkgc2VsZWN0ZWQgYGd0cF9nZW5sX25ld19wZHBgLCBgZ3RwX2dlbmxfZGVsX3BkcGAsIGFuZCBgZ3RwX2RlbGxpbmtgIGFzIGtleSBzeW1ib2xzLlxuXG5J4oCZbSBub3cgdmVyaWZ5aW5nIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzLiBUaGUgZnVuY3Rpb25zIGBndHAwX3BkcF9maW5kYCwgYGd0cDFfcGRwX2ZpbmRgLCBgaXB2NF9wZHBfZmluZGAsIGFuZCBgaXB2Nl9wZHBfZmluZGAgYXJlIHdoZXJlIHRoZSBsb2NrZGVwIGNoZWNrcyBhcmUgaW1wbGVtZW50ZWQuIEknbSBub3cgdmVyaWZ5aW5nIHRoZXNlIGVudHJ5IHBvaW50cy4gTG9va2luZyBhdCB0aGUgY2FsbCBjaGFpbnMsIEkgc2VlIHRoYXQgYGd0cDBfcGRwX2ZpbmRgIGFuZCBgZ3RwMV9wZHBfZmluZGAgYXJlIGNhbGxlZCBmcm9tIGBndHBfZW5jYXBfcmVjdmAgd2hpY2ggaW4gdHVybiBjYWxscyBgZ3RwMF91ZHBfZW5jYXBfcmVjdmAgYW5kIGBndHAxdV91ZHBfZW5jYXBfcmVjdmAuIFNpbWlsYXJseSwgYGlwdjRfcGRwX2ZpbmRgIGFuZCBgaXB2Nl9wZHBfZmluZGAgYXJlIGNhbGxlZCBmcm9tIGBndHBfZGV2X3htaXRgIHdoaWNoIGluIHR1cm4gY2FsbHMgYGd0cF9idWlsZF9za2JfaXA0YCBhbmQgYGd0cF9idWlsZF9za2JfaXA2YC4gU28sIHNlbGVjdGluZyBgZ3RwX2VuY2FwX3JlY3ZgIGFuZCBgZ3RwX2Rldl94bWl0YCBpcyBjb3JyZWN0LlxuXG5UaGF0IHNob3VsZCBjb3ZlciBldmVyeXRoaW5nLiBOb3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzNDQsIk91dHB1dFRva2VucyI6MjAyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE3OjM1OjAzLjAzNjM5OTdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTk4MTAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiR1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3RwX2dlbmxfbmV3X3BkcFwiLFxuICAgIFwiZ3RwX2dlbmxfZGVsX3BkcFwiLFxuICAgIFwiZ3RwX2RlbGxpbmtcIixcbiAgICBcImd0cF9lbmNhcF9yZWN2XCIsXG4gICAgXCJndHBfZGV2X3htaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG11dGV4IGBndHBfcGRwX2xvY2tgIHRvIHByb3RlY3QgUERQIGNvbnRleHQgaGFzaCB0YWJsZXMgaW4gdGhlIEdUUCBkcml2ZXIuIEl0IG1vZGlmaWVzIG5ldGxpbmsgaGFuZGxlcnMgKGBndHBfZ2VubF9uZXdfcGRwYCwgYGd0cF9nZW5sX2RlbF9wZHBgKSBhbmQgdGhlIGxpbmsgZGVsZXRpb24gaGFuZGxlciAoYGd0cF9kZWxsaW5rYCkgdG8gYWNxdWlyZSB0aGlzIGxvY2ssIGFuZCB1cGRhdGVzIFJDVSBsaXN0IHRyYXZlcnNhbHMgdG8gY2hlY2sgZm9yIGl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBsb2NraW5nIGRvZXMgbm90IGludHJvZHVjZSBkZWFkbG9ja3Mgb3IgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkdUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImd0cF9nZW5sX25ld19wZHBcIixcbiAgICBcImd0cF9nZW5sX2RlbF9wZHBcIixcbiAgICBcImd0cF9kZWxsaW5rXCIsXG4gICAgXCJndHBfZW5jYXBfcmVjdlwiLFxuICAgIFwiZ3RwX2Rldl94bWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtdXRleCBgZ3RwX3BkcF9sb2NrYCB0byBwcm90ZWN0IFBEUCBjb250ZXh0IGhhc2ggdGFibGVzIGluIHRoZSBHVFAgZHJpdmVyLiBJdCBtb2RpZmllcyBuZXRsaW5rIGhhbmRsZXJzIChgZ3RwX2dlbmxfbmV3X3BkcGAsIGBndHBfZ2VubF9kZWxfcGRwYCkgYW5kIHRoZSBsaW5rIGRlbGV0aW9uIGhhbmRsZXIgKGBndHBfZGVsbGlua2ApIHRvIGFjcXVpcmUgdGhpcyBsb2NrLCBhbmQgdXBkYXRlcyBSQ1UgbGlzdCB0cmF2ZXJzYWxzIHRvIGNoZWNrIGZvciBpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgbG9ja2luZyBkb2VzIG5vdCBpbnRyb2R1Y2UgZGVhZGxvY2tzIG9yIHJhY2UgY29uZGl0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTc6MzU6MDMuMTE2Mzg4MjY4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDI3Mzg2MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTc6MzU6MDMuMTE2ODY0NjU4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc0MjY5MDQzMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbXV0ZXggYGd0cF9wZHBfbG9ja2AgdG8gcHJvdGVjdCBQRFAgY29udGV4dCBvcGVyYXRpb25zIGluIHRoZSBHVFAgZHJpdmVyIGFuZCBhZGRzIGxvY2tkZXAgYW5ub3RhdGlvbnMgdG8gUkNVIGxpc3QgdHJhdmVyc2Fscy4gVGhpcyBpcyBwdXJlbHkgYSBjb25jdXJyZW5jeSBjb250cm9sIGFuZCBsb2NraW5nIGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgbWVtb3J5IGluaXRpYWxpemF0aW9uIGxvZ2ljLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZyAoZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMpIG9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg2MzExNDBmYjJiMTA5YWIxOThkZmU4ODBlYmMyZWIyYjM2ZmEwZThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxNzozMzoxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2d0cC5jIGIvZHJpdmVycy9uZXQvZ3RwLmNcbmluZGV4IDlhMTJjYzUzZGEwMDIuLjJmNmU3N2NjZTM4NWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ndHAuY1xuKysrIGIvZHJpdmVycy9uZXQvZ3RwLmNcbkBAIC0xMiw2ICsxMiw3IEBAXG4gI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcIjogXCIgZm10XG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91ZHAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdWxpc3QuaFx1MDAzZVxuQEAgLTEwOCw2ICsxMDksNyBAQCBzdHJ1Y3QgZ3RwX25ldCB7XG4gfTtcbiBcbiBzdGF0aWMgdTMyIGd0cF9oX2luaXR2YWw7XG4rc3RhdGljIERFRklORV9NVVRFWChndHBfcGRwX2xvY2spO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgZ3RwX2dlbmxfZmFtaWx5O1xuIFxuQEAgLTE1MSw3ICsxNTMsOCBAQCBzdGF0aWMgc3RydWN0IHBkcF9jdHggKmd0cDBfcGRwX2ZpbmQoc3RydWN0IGd0cF9kZXYgKmd0cCwgdTY0IHRpZCwgdTE2IGZhbWlseSlcbiBcbiBcdGhlYWQgPSBcdTAwMjZndHAtXHUwMDNldGlkX2hhc2hbZ3RwMF9oYXNoZm4odGlkKSAlIGd0cC1cdTAwM2VoYXNoX3NpemVdO1xuIFxuLVx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBkcCwgaGVhZCwgaGxpc3RfdGlkKSB7XG4rXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF90aWQsXG4rXHRcdFx0XHQgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmd0cF9wZHBfbG9jaykpIHtcbiBcdFx0aWYgKHBkcC1cdTAwM2VhZiA9PSBmYW1pbHkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBwZHAtXHUwMDNlZ3RwX3ZlcnNpb24gPT0gR1RQX1YwIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgcGRwLVx1MDAzZXUudjAudGlkID09IHRpZClcbkBAIC0xNjgsNyArMTcxLDggQEAgc3RhdGljIHN0cnVjdCBwZHBfY3R4ICpndHAxX3BkcF9maW5kKHN0cnVjdCBndHBfZGV2ICpndHAsIHUzMiB0aWQsIHUxNiBmYW1pbHkpXG4gXG4gXHRoZWFkID0gXHUwMDI2Z3RwLVx1MDAzZXRpZF9oYXNoW2d0cDF1X2hhc2hmbih0aWQpICUgZ3RwLVx1MDAzZWhhc2hfc2l6ZV07XG4gXG4tXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF90aWQpIHtcbitcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X3RpZCxcbitcdFx0XHRcdCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2Z3RwX3BkcF9sb2NrKSkge1xuIFx0XHRpZiAocGRwLVx1MDAzZWFmID09IGZhbWlseSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHBkcC1cdTAwM2VndHBfdmVyc2lvbiA9PSBHVFBfVjEgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBwZHAtXHUwMDNldS52MS5pX3RlaSA9PSB0aWQpXG5AQCAtMTg1LDcgKzE4OSw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqaXB2NF9wZHBfZmluZChzdHJ1Y3QgZ3RwX2RldiAqZ3RwLCBfX2JlMzIgbXNfYWRkcilcbiBcbiBcdGhlYWQgPSBcdTAwMjZndHAtXHUwMDNlYWRkcl9oYXNoW2lwdjRfaGFzaGZuKG1zX2FkZHIpICUgZ3RwLVx1MDAzZWhhc2hfc2l6ZV07XG4gXG4tXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF9hZGRyKSB7XG4rXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocGRwLCBoZWFkLCBobGlzdF9hZGRyLFxuK1x0XHRcdFx0IGxvY2tkZXBfaXNfaGVsZChcdTAwMjZndHBfcGRwX2xvY2spKSB7XG4gXHRcdGlmIChwZHAtXHUwMDNlYWYgPT0gQUZfSU5FVCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHBkcC1cdTAwM2Vtcy5hZGRyLnNfYWRkciA9PSBtc19hZGRyKVxuIFx0XHRcdHJldHVybiBwZHA7XG5AQCAtMjIwLDcgKzIyNSw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGRwX2N0eCAqaXB2Nl9wZHBfZmluZChzdHJ1Y3QgZ3RwX2RldiAqZ3RwLFxuIFxuIFx0aGVhZCA9IFx1MDAyNmd0cC1cdTAwM2VhZGRyX2hhc2hbaXB2Nl9oYXNoZm4obXNfYWRkcikgJSBndHAtXHUwMDNlaGFzaF9zaXplXTtcbiBcbi1cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X2FkZHIpIHtcbitcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZHAsIGhlYWQsIGhsaXN0X2FkZHIsXG4rXHRcdFx0XHQgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmd0cF9wZHBfbG9jaykpIHtcbiBcdFx0aWYgKHBkcC1cdTAwM2VhZiA9PSBBRl9JTkVUNiBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGlwdjZfcGRwX2FkZHJfZXF1YWwoXHUwMDI2cGRwLVx1MDAzZW1zLmFkZHI2LCBtc19hZGRyKSlcbiBcdFx0XHRyZXR1cm4gcGRwO1xuQEAgLTE1NTUsOSArMTU2MSwxMSBAQCBzdGF0aWMgdm9pZCBndHBfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuIFx0c3RydWN0IHBkcF9jdHggKnBjdHg7XG4gXHRpbnQgaTtcbiBcbitcdG11dGV4X2xvY2soXHUwMDI2Z3RwX3BkcF9sb2NrKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGd0cC1cdTAwM2VoYXNoX3NpemU7IGkrKylcbiBcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwY3R4LCBuZXh0LCBcdTAwMjZndHAtXHUwMDNldGlkX2hhc2hbaV0sIGhsaXN0X3RpZClcbiBcdFx0XHRwZHBfY29udGV4dF9kZWxldGUocGN0eCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2Z3RwX3BkcF9sb2NrKTtcbiBcbiBcdGxpc3RfZGVsKFx1MDAyNmd0cC1cdTAwM2VsaXN0KTtcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgaGVhZCk7XG5AQCAtMjA1Myw2ICsyMDYxLDcgQEAgc3RhdGljIGludCBndHBfZ2VubF9uZXdfcGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbitcdG11dGV4X2xvY2soXHUwMDI2Z3RwX3BkcF9sb2NrKTtcbiBcdHBjdHggPSBndHBfcGRwX2FkZChndHAsIHNrLCBpbmZvKTtcbiBcdGlmIChJU19FUlIocGN0eCkpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihwY3R4KTtcbkBAIC0yMDYwLDYgKzIwNjksNyBAQCBzdGF0aWMgaW50IGd0cF9nZW5sX25ld19wZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdFx0Z3RwX3R1bm5lbF9ub3RpZnkocGN0eCwgR1RQX0NNRF9ORVdQRFAsIEdGUF9LRVJORUwpO1xuIFx0XHRlcnIgPSAwO1xuIFx0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmd0cF9wZHBfbG9jayk7XG4gXG4gb3V0X3VubG9jazpcbiBcdHJ0bmxfdW5sb2NrKCk7XG5AQCAtMjEzNCw2ICsyMTQ0LDggQEAgc3RhdGljIGludCBndHBfZ2VubF9kZWxfcGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gXHRpZiAoIWluZm8tXHUwMDNlYXR0cnNbR1RQQV9WRVJTSU9OXSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHRtdXRleF9sb2NrKFx1MDAyNmd0cF9wZHBfbG9jayk7XG4rXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXG4gXHRwY3R4ID0gZ3RwX2ZpbmRfcGRwKHNvY2tfbmV0KHNrYi1cdTAwM2VzayksIGluZm8tXHUwMDNlYXR0cnMpO1xuQEAgLTIxNTQsNiArMjE2Niw3IEBAIHN0YXRpYyBpbnQgZ3RwX2dlbmxfZGVsX3BkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFxuIG91dF91bmxvY2s6XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZndHBfcGRwX2xvY2spO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNzozNTowMy4xMTY4NjczMjhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQyNjg3MjYxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBHVFAgUERQIExvY2sgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhleSd2ZSBpbnRyb2R1Y2VkIGEgbmV3IG11dGV4LCBgZ3RwX3BkcF9sb2NrYCwgaW4gYGRyaXZlcnMvbmV0L2d0cC5jYCwgYW5kIHRoZXkncmUgdXNpbmcgaXQgdG8gcHJvdGVjdCBhY2Nlc3MgdG8gdGhlIFBEUCBjb250ZXh0IG1hbmFnZW1lbnQgZnVuY3Rpb25zOiBgZ3RwX3BkcF9hZGRgLCBgZ3RwX2ZpbmRfcGRwYCwgYW5kIGBwZHBfY29udGV4dF9kZWxldGVgLiBUaGlzIGxvb2tzIGxpa2UgYSBzdGFuZGFyZCBjb25jdXJyZW5jeSBjb250cm9sIG1lYXN1cmUg4oCTIHByb2JhYmx5IGFkZHJlc3NpbmcgYSByYWNlIGNvbmRpdGlvbiwgb3IgcGVyaGFwcyB0aGV5J3JlIGp1c3QgYWRkaW5nIGBsb2NrZGVwYCBhbm5vdGF0aW9ucy4gVGhleSd2ZSBhbHNvIGFkZGVkIGEgYGxvY2tkZXBfaXNfaGVsZGAgY2hlY2sgd2l0aGluIHRoZSBgaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1YCBjYWxscyBpbiB0aGUgbG9va3VwIGZ1bmN0aW9ucy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBwdXJlbHkgYSBsb2NraW5nLXJlbGF0ZWQgY2hhbmdlLiBJdCBkb2Vzbid0IHNlZW0gdG8gdG91Y2ggYW55IGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFwcGVhciB0byBkZWFsIHdpdGggYW55IG1lbW9yeSBpbml0aWFsaXphdGlvbiBpc3N1ZXMuIFRoZXJlZm9yZSwgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNlY3VyaXR5LWZvY3VzZWQgZGV2ZWxvcGVyLCBLTVNBTiBmdXp6aW5nIHNob3VsZG4ndCBiZSBuZWNlc3NhcnkgaGVyZS4gVGhpcyBpcyBjbGFzc2ljIEtBU0FOIGFuZCBMT0NLREVQIHRlcnJpdG9yeS4gS0FTQU4gd2lsbCBmbGFnIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBldGMuLCBhbmQgTE9DS0RFUCB3aWxsLCBvZiBjb3Vyc2UsIGNhdGNoIGFueSBpc3N1ZXMgd2l0aCB0aGUgbG9ja2luZyBzY2hlbWUuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBteSByZWFzb25pbmcuIEtBU0FOIGlzIHRoZXJlIGZvciBtZW1vcnkgc2FmZXR5IGlzc3VlcyDigJMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHVzZS1hZnRlci1mcmVlLCBldGMuIExPQ0tERVAgaXMgdGhlIGdvLXRvIHRvb2wgZm9yLCB3ZWxsLCBsb2NraW5nIGJ1Z3MuIEtNU0FOLi4uIHRoYXQncyB0aGUgb25lIHdlIHVzZSB0byBjYXRjaCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQnV0IHRoaXMgcGF0Y2ggaXMgZW50aXJlbHkgYWJvdXQgbG9ja2luZyBhbmQgY29uY3VycmVuY3kgY29udHJvbC4gU28sIHllcywgaXQncyBjbGVhcjogYE5lZWRzS01TQU4gPSBmYWxzZWAuIFdlJ3JlIGdvb2Qgd2l0aCBLQVNBTiBhbmQgTE9DS0RFUCBmb3IgdGhpcyBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MzMsIk91dHB1dFRva2VucyI6MTU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTc6MzU6MTAuNTQzNzQ1MDFaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbXV0ZXggYGd0cF9wZHBfbG9ja2AgdG8gcHJvdGVjdCBQRFAgY29udGV4dCBvcGVyYXRpb25zIGluIHRoZSBHVFAgZHJpdmVyIGFuZCBhZGRzIGxvY2tkZXAgYW5ub3RhdGlvbnMgdG8gUkNVIGxpc3QgdHJhdmVyc2Fscy4gVGhpcyBpcyBwdXJlbHkgYSBjb25jdXJyZW5jeSBjb250cm9sIGFuZCBsb2NraW5nIGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgbWVtb3J5IGluaXRpYWxpemF0aW9uIGxvZ2ljLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZyAoZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMpIG9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbXV0ZXggYGd0cF9wZHBfbG9ja2AgdG8gcHJvdGVjdCBQRFAgY29udGV4dCBvcGVyYXRpb25zIGluIHRoZSBHVFAgZHJpdmVyIGFuZCBhZGRzIGxvY2tkZXAgYW5ub3RhdGlvbnMgdG8gUkNVIGxpc3QgdHJhdmVyc2Fscy4gVGhpcyBpcyBwdXJlbHkgYSBjb25jdXJyZW5jeSBjb250cm9sIGFuZCBsb2NraW5nIGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBtb2RpZnkgbWVtb3J5IGluaXRpYWxpemF0aW9uIGxvZ2ljLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZyAoZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMpIG9yIHVzZS1hZnRlci1mcmVlL291dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdwm7x[1] Phase: Succeeded StartedAt: 2026-08-18 17:35:21 +0000 UTC FinishedAt: 2026-08-18 17:35:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwm7x[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 17:35:21 +0000 UTC FinishedAt: 2026-08-18 17:35:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwm7x[2] Phase: Succeeded StartedAt: 2026-08-18 17:35:21 +0000 UTC FinishedAt: 2026-08-18 21:16:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-18 17:35:21 +0000 UTC FinishedAt: 2026-08-18 21:16:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-18 17:35:21 +0000 UTC FinishedAt: 2026-08-18 17:35:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-18 17:35:21 +0000 UTC FinishedAt: 2026-08-18 17:35:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdwm7x/series-workflowdwm7x-convert-artifact-1573915683/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-18 17:35:31 +0000 UTC FinishedAt: 2026-08-18 17:51:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-18 17:35:31 +0000 UTC FinishedAt: 2026-08-18 17:51:46 +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:*aaec8091-6534-47b9-9cec-5d7873451c18,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-workflowdwm7x/series-workflowdwm7x-convert-artifact-1573915683/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": "64cd1d9d-c6fe-4864-a052-931f502b7667", "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-workflowdwm7x/series-workflowdwm7x-build-action-4253712529/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-18 17:35:31 +0000 UTC FinishedAt: 2026-08-18 17:51:36 +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:*aaec8091-6534-47b9-9cec-5d7873451c18,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-workflowdwm7x/series-workflowdwm7x-convert-artifact-1573915683/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": "64cd1d9d-c6fe-4864-a052-931f502b7667", "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-workflowdwm7x/series-workflowdwm7x-build-action-4253712529/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-18 17:51:46 +0000 UTC FinishedAt: 2026-08-18 17:51:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-18 17:51:46 +0000 UTC FinishedAt: 2026-08-18 17:51:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-18 17:51:46 +0000 UTC FinishedAt: 2026-08-18 17:51:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-18 17:51:46 +0000 UTC FinishedAt: 2026-08-18 17:51:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdwm7x/series-workflowdwm7x-convert-artifact-1686463066/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-18 17:51:56 +0000 UTC FinishedAt: 2026-08-18 17:54:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-18 17:51:56 +0000 UTC FinishedAt: 2026-08-18 17:53:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*64cd1d9d-c6fe-4864-a052-931f502b7667,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-workflowdwm7x/series-workflowdwm7x-build-action-4253712529/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-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-18 17:54:03 +0000 UTC FinishedAt: 2026-08-18 17:54:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-18 17:54:03 +0000 UTC FinishedAt: 2026-08-18 17:54:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-18 17:54:03 +0000 UTC FinishedAt: 2026-08-18 18:11:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-18 17:54:03 +0000 UTC FinishedAt: 2026-08-18 18:11:24 +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:*aaec8091-6534-47b9-9cec-5d7873451c18,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-workflowdwm7x/series-workflowdwm7x-convert-artifact-1686463066/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": "80687736-ff64-4763-b9c7-499bbeaed496", "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-workflowdwm7x/series-workflowdwm7x-build-action-3654856510/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-18 17:54:03 +0000 UTC FinishedAt: 2026-08-18 18:11:14 +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:*aaec8091-6534-47b9-9cec-5d7873451c18,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-workflowdwm7x/series-workflowdwm7x-convert-artifact-1686463066/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": "80687736-ff64-4763-b9c7-499bbeaed496", "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-workflowdwm7x/series-workflowdwm7x-build-action-3654856510/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-18 18:11:24 +0000 UTC FinishedAt: 2026-08-18 18:11:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-18 18:11:24 +0000 UTC FinishedAt: 2026-08-18 18:11:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-18 18:11:24 +0000 UTC FinishedAt: 2026-08-18 18:13:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-18 18:11:24 +0000 UTC FinishedAt: 2026-08-18 18:13:15 +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:*80687736-ff64-4763-b9c7-499bbeaed496,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-workflowdwm7x/series-workflowdwm7x-build-action-3654856510/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-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-18 18:13:25 +0000 UTC FinishedAt: 2026-08-18 21:16:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-18 18:13:25 +0000 UTC FinishedAt: 2026-08-18 21:16:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"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:*64cd1d9d-c6fe-4864-a052-931f502b7667,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*80687736-ff64-4763-b9c7-499bbeaed496,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-workflowdwm7x/series-workflowdwm7x-build-action-4253712529/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-workflowdwm7x/series-workflowdwm7x-build-action-3654856510/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-18 18:13:25 +0000 UTC FinishedAt: 2026-08-18 18:13:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-18 18:13:25 +0000 UTC FinishedAt: 2026-08-18 18:13:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"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-workflowdwm7x/series-workflowdwm7x-convert-artifact-1592929551/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-18 18:13:25 +0000 UTC FinishedAt: 2026-08-18 18:13:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-18 18:13:25 +0000 UTC FinishedAt: 2026-08-18 18:13:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-18 18:13:25 +0000 UTC FinishedAt: 2026-08-18 18:13:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-18 18:13:45 +0000 UTC FinishedAt: 2026-08-18 21:16:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdwm7x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_genl_new_pdp","gtp_genl_del_pdp","gtp_dellink","gtp_encap_recv","gtp_dev_xmit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3dee9bb902ee4357fa02e49b415d7724ee0140a","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP"],"series_id":"149c2eef-9448-459a-afda-24dd5b4ac65d","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-18 18:13:45 +0000 UTC FinishedAt: 2026-08-18 21:16:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*64cd1d9d-c6fe-4864-a052-931f502b7667,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*80687736-ff64-4763-b9c7-499bbeaed496,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-workflowdwm7x/series-workflowdwm7x-build-action-4253712529/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-workflowdwm7x/series-workflowdwm7x-build-action-3654856510/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-workflowdwm7x/series-workflowdwm7x-convert-artifact-1592929551/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,}