Name: series-workflowbt282 Phase: Succeeded StartedAt: 2026-07-20 02:25:13 +0000 UTC FinishedAt: 2026-07-20 04:59:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbt282[0] Phase: Succeeded StartedAt: 2026-07-20 02:25:13 +0000 UTC FinishedAt: 2026-07-20 03:07:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbt282[0].run-triage Phase: Succeeded StartedAt: 2026-07-20 02:25:13 +0000 UTC FinishedAt: 2026-07-20 03:07:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ce6b4d3216b63f902bb8e9695ee6c10c83415f65", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FSL_ENETC", "NXP_ENETC4", "FSL_ENETC_VF", "FSL_ENETC_QOS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ce6b4d3216b63f902bb8e9695ee6c10c83415f65", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FSL_ENETC", "NXP_ENETC4", "FSL_ENETC_VF", "FSL_ENETC_QOS" ], "series_id": "b69f1c7c-d12c-4f42-9233-3bd7c0def1a7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "enetc4_pf_set_rx_mode", "enetc_pf_set_rx_mode", "enetc4_pf_set_mac_filter", "enetc4_pf_set_uc_exact_filter", "enetc4_pf_add_maft_entries", "enetc_sync_mac_filters", "enetc_set_si_uc_promisc", "enetc_set_si_mc_promisc", "enetc_set_si_uc_hash_filter", "enetc_set_si_mc_hash_filter", "enetc_set_si_vlan_promisc" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIwIDAzOjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZTTF9FTkVUQyYjMzQ7LAogICAgJiMzNDtOWFBfRU5FVEM0JiMzNDssCiAgICAmIzM0O0ZTTF9FTkVUQ19WRiYjMzQ7LAogICAgJiMzNDtGU0xfRU5FVENfUU9TJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZW5ldGM0X3BmX3NldF9yeF9tb2RlJiMzNDssCiAgICAmIzM0O2VuZXRjX3BmX3NldF9yeF9tb2RlJiMzNDssCiAgICAmIzM0O2VuZXRjNF9wZl9zZXRfbWFjX2ZpbHRlciYjMzQ7LAogICAgJiMzNDtlbmV0YzRfcGZfc2V0X3VjX2V4YWN0X2ZpbHRlciYjMzQ7LAogICAgJiMzNDtlbmV0YzRfcGZfYWRkX21hZnRfZW50cmllcyYjMzQ7LAogICAgJiMzNDtlbmV0Y19zeW5jX21hY19maWx0ZXJzJiMzNDssCiAgICAmIzM0O2VuZXRjX3NldF9zaV91Y19wcm9taXNjJiMzNDssCiAgICAmIzM0O2VuZXRjX3NldF9zaV9tY19wcm9taXNjJiMzNDssCiAgICAmIzM0O2VuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlciYjMzQ7LAogICAgJiMzNDtlbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXImIzM0OywKICAgICYjMzQ7ZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIEVORVRDIGRyaXZlciB0byB1c2UgdGhlIG5ldyBgbmRvX3NldF9yeF9tb2RlX2FzeW5jYCBuZXRfZGV2aWNlX29wcyBtZW1iZXIgaW5zdGVhZCBvZiBhIGN1c3RvbSB3b3JrcXVldWUgZm9yIHNldHRpbmcgdGhlIFJYIG1vZGUuIEl0IGFsc28gbW9kaWZpZXMgTUFDIGFuZCBWTEFOIGZpbHRlcmluZyBsb2dpYyBpbiB0aGUgUEYgZHJpdmVycyAoYGVuZXRjNF9wZi5jYCBhbmQgYGVuZXRjX3BmLmNgKSwgYW5kIGludHJvZHVjZXMgY29tbW9uIGhlbHBlciBmdW5jdGlvbnMgZm9yIHByb21pc2N1b3VzIG1vZGUgYW5kIGhhc2ggZmlsdGVycy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBkcml2ZXIgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDAzOjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmIxMzllNDcyZDkwYTc4YWVkMzBhZGEyMjYxNTc0YWRlZTJjMjk2NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDIwIDAzOjAwOjEzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Yy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjLmhcbmluZGV4IDA0YTVkZDVlYTZjNzRjLi44ODM5Y2ZiNDliY2ZlOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Yy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGMuaFxuQEAgLTEsNSAmIzQzOzEsNSBAQFxuIC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMCYjNDM7IE9SIEJTRC0zLUNsYXVzZSkgKi9cbi0vKiBDb3B5cmlnaHQgMjAxNy0yMDE5IE5YUCAqL1xuJiM0MzsvKiBDb3B5cmlnaHQgMjAxNy0yMDE5LCAyMDI1LTIwMjYgTlhQICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG5AQCAtMzI0LDggJiM0MzszMjQsNiBAQCBzdHJ1Y3QgZW5ldGNfc2kge1xuIFx0Y29uc3Qgc3RydWN0IGVuZXRjX2RydmRhdGEgKmRydmRhdGE7XG4gXHRjb25zdCBzdHJ1Y3QgZW5ldGNfc2lfb3BzICpvcHM7XG4gXG4tXHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29ya3F1ZXVlO1xuLVx0c3RydWN0IHdvcmtfc3RydWN0IHJ4X21vZGVfdGFzaztcbiBcdHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdDtcbiBcdHN0cnVjdCBlbmV0Y19tc2dfc3diZCBtc2c7IC8qIE9ubHkgdmFsaWQgZm9yIFZTSSAqL1xuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X2RlYnVnZnMuY1xuaW5kZXggMWIxNTkxZGNlNzNkNGIuLjUwMjkwMzhiZjk5ZmFhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9kZWJ1Z2ZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfZGVidWdmcy5jXG5AQCAtMjgsMTUgJiM0MzsyOCwxNCBAQCBzdGF0aWMgdm9pZCBlbmV0Y19zaG93X3NpX21hY19oYXNoX2ZpbHRlcihzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGludCBpKVxuIFxuIHN0YXRpYyBpbnQgZW5ldGNfbWFjX2ZpbHRlcl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSlcbiB7XG4tXHRzdHJ1Y3QgZW5ldGNfc2kgKnNpID0gcy1cdTAwM2Vwcml2YXRlO1xuLVx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnNpLVx1MDAzZWh3O1xuJiM0MztcdHN0cnVjdCBlbmV0Y19wZiAqcGYgPSBlbmV0Y19zaV9wcml2KHMtXHUwMDNlcHJpdmF0ZSk7XG4mIzQzO1x0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZXNpLVx1MDAzZWh3O1xuJiM0MztcdGludCBudW1fc2kgPSBwZi1cdTAwM2V0b3RhbF92ZnMgJiM0MzsgMTtcbiBcdHN0cnVjdCBtYWZ0X2VudHJ5X2RhdGEgbWFmdDtcbi1cdHN0cnVjdCBlbmV0Y19wZiAqcGY7XG4tXHRpbnQgaSwgZXJyLCBudW1fc2k7XG4tXHR1MzIgdmFsO1xuLVxuLVx0cGYgPSBlbmV0Y19zaV9wcml2KHNpKTtcbi1cdG51bV9zaSA9IHBmLVx1MDAzZWNhcHMubnVtX3ZzaSAmIzQzOyAxO1xuJiM0MztcdHN0cnVjdCBudG1wX3VzZXIgKnVzZXI7XG4mIzQzO1x0dTMyIHZhbCwgZW50cnlfaWQ7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1x0aW50IGk7XG4gXG4gXHR2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBFTkVUQzRfUFNJUE1NUik7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fc2k7IGkmIzQzOyYjNDM7KSB7XG5AQCAtNTAsMzEgJiM0Mzs0OSwzOCBAQCBzdGF0aWMgaW50IGVuZXRjX21hY19maWx0ZXJfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fc2k7IGkmIzQzOyYjNDM7KVxuIFx0XHRlbmV0Y19zaG93X3NpX21hY19oYXNoX2ZpbHRlcihzLCBpKTtcbiBcbi1cdGlmICghcGYtXHUwMDNlbnVtX21mZSlcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0dXNlciA9IFx1MDAyNnBmLVx1MDAzZXNpLVx1MDAzZW50bXBfdXNlcjtcbiYjNDM7XHRydG5sX2xvY2soKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGJpdG1hcF9lbXB0eSh1c2VyLVx1MDAzZW1hZnRfZWlkX2JpdG1hcCwgdXNlci1cdTAwM2VtYWZ0X251bV9lbnRyaWVzKSlcbiYjNDM7XHRcdGdvdG8gdW5sb2NrX3J0bmw7XG4gXG4gXHQvKiBNQUMgYWRkcmVzcyBmaWx0ZXIgdGFibGUgKi9cbiBcdHNlcV9wdXRzKHMsIFwmIzM0O01BQyBhZGRyZXNzIGZpbHRlciB0YWJsZVxcblwmIzM0Oyk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZi1cdTAwM2VudW1fbWZlOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdGZvcl9lYWNoX3NldF9iaXQoZW50cnlfaWQsIHVzZXItXHUwMDNlbWFmdF9laWRfYml0bWFwLFxuJiM0MztcdFx0XHQgdXNlci1cdTAwM2VtYWZ0X251bV9lbnRyaWVzKSB7XG4gXHRcdG1lbXNldChcdTAwMjZtYWZ0LCAwLCBzaXplb2YobWFmdCkpO1xuLVx0XHRlcnIgPSBudG1wX21hZnRfcXVlcnlfZW50cnkoXHUwMDI2c2ktXHUwMDNlbnRtcF91c2VyLCBpLCBcdTAwMjZtYWZ0KTtcbiYjNDM7XHRcdGVyciA9IG50bXBfbWFmdF9xdWVyeV9lbnRyeSh1c2VyLCBlbnRyeV9pZCwgXHUwMDI2bWFmdCk7XG4gXHRcdGlmIChlcnIpXG4tXHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdFx0Z290byB1bmxvY2tfcnRubDtcbiBcbi1cdFx0c2VxX3ByaW50ZihzLCBcJiMzNDtFbnRyeSAlZCwgTUFDOiAlcE0sIFNJIGJpdG1hcDogMHglMDR4XFxuXCYjMzQ7LCBpLFxuLVx0XHRcdCAgIG1hZnQua2V5ZS5tYWNfYWRkciwgbGUxNl90b19jcHUobWFmdC5jZmdlLnNpX2JpdG1hcCkpO1xuJiM0MztcdFx0c2VxX3ByaW50ZihzLCBcJiMzNDtFbnRyeSAlZCwgTUFDOiAlcE0sIFNJIGJpdG1hcDogMHglMDR4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBlbnRyeV9pZCwgbWFmdC5rZXllLm1hY19hZGRyLFxuJiM0MztcdFx0XHQgICBsZTE2X3RvX2NwdShtYWZ0LmNmZ2Uuc2lfYml0bWFwKSk7XG4gXHR9XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7dW5sb2NrX3J0bmw6XG4mIzQzO1x0cnRubF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gREVGSU5FX1NIT1dfQVRUUklCVVRFKGVuZXRjX21hY19maWx0ZXIpO1xuIFxuIHZvaWQgZW5ldGNfY3JlYXRlX2RlYnVnZnMoc3RydWN0IGVuZXRjX3NpICpzaSlcbiB7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHNpLVx1MDAzZW5kZXY7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpyb290O1xuIFxuLVx0cm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihuZXRkZXZfbmFtZShuZGV2KSwgTlVMTCk7XG4mIzQzO1x0cm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihwY2lfbmFtZShzaS1cdTAwM2VwZGV2KSwgTlVMTCk7XG4gXHRpZiAoSVNfRVJSKHJvb3QpKVxuIFx0XHRyZXR1cm47XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9ody5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9ody5oXG5pbmRleCBmMTg0Mzc1NTZhMGVlMi4uMDkwMjVlN2EyYTNhZWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X2h3LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfaHcuaFxuQEAgLTY5LDggJiM0Mzs2OSw2IEBAXG4gXG4gLyogUG9ydCBTdGF0aW9uIGludGVyZmFjZSBwcm9taXNjdW91cyBNQUMgbW9kZSByZWdpc3RlciAqL1xuICNkZWZpbmUgRU5FVEM0X1BTSVBNTVJcdFx0XHQweDIwMFxuLSNkZWZpbmUgIFBTSVBNTVJfU0lfTUFDX1VQKGEpXHRcdEJJVChhKSAvKiBhID0gU0kgaW5kZXggKi9cbi0jZGVmaW5lICBQU0lQTU1SX1NJX01BQ19NUChhKVx0XHRCSVQoKGEpICYjNDM7IDE2KVxuIFxuIC8qIFBvcnQgU3RhdGlvbiBpbnRlcmZhY2UgcHJvbWlzY3VvdXMgVkxBTiBtb2RlIHJlZ2lzdGVyICovXG4gI2RlZmluZSBFTkVUQzRfUFNJUFZNUlx0XHRcdDB4MjA0XG5AQCAtMTM3LDcgJiM0MzsxMzUsNiBAQFxuICNkZWZpbmUgRU5FVEM0X1BTSVZIRlIxKGEpXHRcdCgoYSkgKiAweDgwICYjNDM7IDB4MjA2NClcbiBcbiAjZGVmaW5lIEVORVRDNF9QTUNBUFJcdFx0XHQweDQwMDRcbi0jZGVmaW5lICBQTUNBUFJfSERcdFx0XHRCSVQoOClcbiAjZGVmaW5lICBQTUNBUFJfRlBcdFx0XHRHRU5NQVNLKDEwLCA5KVxuIFxuIC8qIFBvcnQgY2FwYWJpbGl0eSByZWdpc3RlciAqL1xuQEAgLTE1MCw3ICYjNDM7MTQ3LDcgQEBcbiAjZGVmaW5lICBQQ1JfTDJET1NFXHRcdFx0QklUKDQpXG4gI2RlZmluZSAgUENSX1RJTUVSX0NTXHRcdFx0QklUKDgpXG4gI2RlZmluZSAgUENSX1BTUEVFRFx0XHRcdEdFTk1BU0soMjksIDE2KVxuLSNkZWZpbmUgIFBDUl9QU1BFRURfVkFMKHNwZWVkKVx0XHQoKChzcGVlZCkgLyAxMCAtIDEpIFx1MDAzY1x1MDAzYyAxNilcbiYjNDM7I2RlZmluZSAgUENSX1BTUEVFRF9WQUwocylcdFx0RklFTERfUFJFUChQQ1JfUFNQRUVELCAoKHMpIC8gMTAgLSAxKSlcbiBcbiAvKiBQb3J0IE1BQyBhZGRyZXNzIHJlZ2lzdGVyIDAvMSAqL1xuICNkZWZpbmUgRU5FVEM0X1BNQVIwXHRcdFx0MHg0MDIwXG5AQCAtMjAwLDcgJiM0MzsxOTcsNiBAQFxuICNkZWZpbmUgIFBNX0NNRF9DRkdfQ05UX0ZSTV9FTlx0XHRCSVQoMTMpXG4gI2RlZmluZSAgUE1fQ01EX0NGR19UWFBcdFx0XHRCSVQoMTUpXG4gI2RlZmluZSAgUE1fQ01EX0NGR19TRU5EX0lETEVcdFx0QklUKDE2KVxuLSNkZWZpbmUgIFBNX0NNRF9DRkdfSERfRkNFTlx0XHRCSVQoMTgpXG4gI2RlZmluZSAgUE1fQ01EX0NGR19TRkRcdFx0XHRCSVQoMjEpXG4gI2RlZmluZSAgUE1fQ01EX0NGR19UWF9GTFVTSFx0XHRCSVQoMjIpXG4gI2RlZmluZSAgUE1fQ01EX0NGR19UWF9MT1dQX0VOXHRcdEJJVCgyMylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmNcbmluZGV4IDQzN2ExNWJiYjQ3YmE4Li5mY2ZiYWJiMjlkMjJlNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jXG5AQCAtMjMsMTggJiM0MzsyMywxMSBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfZ2V0X3BvcnRfY2FwcyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuIFx0dTMyIHZhbDtcbiBcbiBcdHZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDNF9FQ0FQUjEpO1xuLVx0cGYtXHUwMDNlY2Fwcy5udW1fdnNpID0gKHZhbCBcdTAwMjYgRUNBUFIxX05VTV9WU0kpIFx1MDAzZVx1MDAzZSAyNDtcbiBcdHBmLVx1MDAzZWNhcHMubnVtX21zaXggPSAoKHZhbCBcdTAwMjYgRUNBUFIxX05VTV9NU0lYKSBcdTAwM2VcdTAwM2UgMTIpICYjNDM7IDE7XG4gXG4gXHR2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBFTkVUQzRfRUNBUFIyKTtcbiBcdHBmLVx1MDAzZWNhcHMubnVtX3J4X2JkciA9ICh2YWwgXHUwMDI2IEVDQVBSMl9OVU1fUlhfQkRSKSBcdTAwM2VcdTAwM2UgMTY7XG4gXHRwZi1cdTAwM2VjYXBzLm51bV90eF9iZHIgPSB2YWwgXHUwMDI2IEVDQVBSMl9OVU1fVFhfQkRSO1xuLVxuLVx0dmFsID0gZW5ldGNfcG9ydF9yZChodywgRU5FVEM0X1BNQ0FQUik7XG4tXHRwZi1cdTAwM2VjYXBzLmhhbGZfZHVwbGV4ID0gKHZhbCBcdTAwMjYgUE1DQVBSX0hEKSA/IDEgOiAwO1xuLVxuLVx0dmFsID0gZW5ldGNfcG9ydF9yZChodywgRU5FVEM0X1BTSU1BRkNBUFIpO1xuLVx0cGYtXHUwMDNlY2Fwcy5tYWNfZmlsdGVyX251bSA9IHZhbCBcdTAwMjYgUFNJTUFGQ0FQUl9OVU1fTUFDX0FGVEU7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGVuZXRjNF9nZXRfcHNpX2h3X2ZlYXR1cmVzKHN0cnVjdCBlbmV0Y19zaSAqc2kpXG5AQCAtNzUsMzggJiM0Mzs2OCw2IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wZl9nZXRfc2lfcHJpbWFyeV9tYWMoc3RydWN0IGVuZXRjX2h3ICpodywgaW50IHNpLFxuIFx0cHV0X3VuYWxpZ25lZF9sZTE2KGxvd2VyLCBhZGRyICYjNDM7IDQpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBlbmV0YzRfcGZfc2V0X3NpX21hY19wcm9taXNjKHN0cnVjdCBlbmV0Y19odyAqaHcsIGludCBzaSxcbi1cdFx0XHRcdFx0IGJvb2wgdWNfcHJvbWlzYywgYm9vbCBtY19wcm9taXNjKVxuLXtcbi1cdHUzMiB2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBFTkVUQzRfUFNJUE1NUik7XG4tXG4tXHRpZiAodWNfcHJvbWlzYylcbi1cdFx0dmFsIHw9IFBTSVBNTVJfU0lfTUFDX1VQKHNpKTtcbi1cdGVsc2Vcbi1cdFx0dmFsIFx1MDAyNj0gflBTSVBNTVJfU0lfTUFDX1VQKHNpKTtcbi1cbi1cdGlmIChtY19wcm9taXNjKVxuLVx0XHR2YWwgfD0gUFNJUE1NUl9TSV9NQUNfTVAoc2kpO1xuLVx0ZWxzZVxuLVx0XHR2YWwgXHUwMDI2PSB+UFNJUE1NUl9TSV9NQUNfTVAoc2kpO1xuLVxuLVx0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSVBNTVIsIHZhbCk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX2h3ICpodywgaW50IHNpLFxuLVx0XHRcdFx0XHQgICAgdTY0IGhhc2gpXG4te1xuLVx0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSVVNSEZSMChzaSksIGxvd2VyXzMyX2JpdHMoaGFzaCkpO1xuLVx0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSVVNSEZSMShzaSksIHVwcGVyXzMyX2JpdHMoaGFzaCkpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBlbmV0YzRfcGZfc2V0X3NpX21jX2hhc2hfZmlsdGVyKHN0cnVjdCBlbmV0Y19odyAqaHcsIGludCBzaSxcbi1cdFx0XHRcdFx0ICAgIHU2NCBoYXNoKVxuLXtcbi1cdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lNTUhGUjAoc2kpLCBsb3dlcl8zMl9iaXRzKGhhc2gpKTtcbi1cdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lNTUhGUjEoc2kpLCB1cHBlcl8zMl9iaXRzKGhhc2gpKTtcbi19XG4tXG4gc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9sb29wYmFjayhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgYm9vbCBlbilcbiB7XG4gXHRzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG5AQCAtMTI0LDM0ICYjNDM7ODUsNDcgQEAgc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9sb29wYmFjayhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgYm9vbCBlbilcbiBcbiBzdGF0aWMgdm9pZCBlbmV0YzRfcGZfY2xlYXJfbWFmdF9lbnRyaWVzKHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4ge1xuLVx0aW50IGk7XG4mIzQzO1x0c3RydWN0IG50bXBfdXNlciAqdXNlciA9IFx1MDAyNnBmLVx1MDAzZXNpLVx1MDAzZW50bXBfdXNlcjtcbiYjNDM7XHR1MzIgZW50cnlfaWQ7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZi1cdTAwM2VudW1fbWZlOyBpJiM0MzsmIzQzOylcbi1cdFx0bnRtcF9tYWZ0X2RlbGV0ZV9lbnRyeShcdTAwMjZwZi1cdTAwM2VzaS1cdTAwM2VudG1wX3VzZXIsIGkpO1xuLVxuLVx0cGYtXHUwMDNlbnVtX21mZSA9IDA7XG4mIzQzO1x0Zm9yX2VhY2hfc2V0X2JpdChlbnRyeV9pZCwgdXNlci1cdTAwM2VtYWZ0X2VpZF9iaXRtYXAsXG4mIzQzO1x0XHRcdCB1c2VyLVx1MDAzZW1hZnRfbnVtX2VudHJpZXMpIHtcbiYjNDM7XHRcdGlmICghbnRtcF9tYWZ0X2RlbGV0ZV9lbnRyeSh1c2VyLCBlbnRyeV9pZCkpXG4mIzQzO1x0XHRcdG50bXBfY2xlYXJfZWlkX2JpdG1hcCh1c2VyLVx1MDAzZW1hZnRfZWlkX2JpdG1hcCwgZW50cnlfaWQpO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIGludCBlbmV0YzRfcGZfYWRkX21hZnRfZW50cmllcyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLFxuLVx0XHRcdFx0ICAgICAgc3RydWN0IGVuZXRjX21hY19hZGRyICptYWMsXG4tXHRcdFx0XHQgICAgICBpbnQgbWFjX2NudClcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMpXG4ge1xuJiM0MztcdHN0cnVjdCBudG1wX3VzZXIgKnVzZXIgPSBcdTAwMjZwZi1cdTAwM2VzaS1cdTAwM2VudG1wX3VzZXI7XG4mIzQzO1x0aW50IG1hY19jbnQgPSBuZXRkZXZfaHdfYWRkcl9saXN0X2NvdW50KHVjKTtcbiBcdHN0cnVjdCBtYWZ0X2VudHJ5X2RhdGEgbWFmdCA9IHt9O1xuJiM0MztcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4mIzQzO1x0dTMyIGF2YWlsYWJsZV9lbnRyaWVzO1xuIFx0dTE2IHNpX2JpdCA9IEJJVCgwKTtcbi1cdGludCBpLCBlcnI7XG4mIzQzO1x0dTMyIGVudHJ5X2lkO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGF2YWlsYWJsZV9lbnRyaWVzID0gdXNlci1cdTAwM2VtYWZ0X251bV9lbnRyaWVzIC1cbiYjNDM7XHRcdFx0ICAgIGJpdG1hcF93ZWlnaHQodXNlci1cdTAwM2VtYWZ0X2VpZF9iaXRtYXAsXG4mIzQzO1x0XHRcdFx0XHQgIHVzZXItXHUwMDNlbWFmdF9udW1fZW50cmllcyk7XG4mIzQzO1xuJiM0MztcdGlmIChtYWNfY250IFx1MDAzZSBhdmFpbGFibGVfZW50cmllcylcbiYjNDM7XHRcdHJldHVybiAtRU5PU1BDO1xuIFxuIFx0bWFmdC5jZmdlLnNpX2JpdG1hcCA9IGNwdV90b19sZTE2KHNpX2JpdCk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtYWNfY250OyBpJiM0MzsmIzQzOykge1xuLVx0XHRldGhlcl9hZGRyX2NvcHkobWFmdC5rZXllLm1hY19hZGRyLCBtYWNbaV0uYWRkcik7XG4tXHRcdGVyciA9IG50bXBfbWFmdF9hZGRfZW50cnkoXHUwMDI2cGYtXHUwMDNlc2ktXHUwMDNlbnRtcF91c2VyLCBpLCBcdTAwMjZtYWZ0KTtcbiYjNDM7XHRuZXRkZXZfaHdfYWRkcl9saXN0X2Zvcl9lYWNoKGhhLCB1Yykge1xuJiM0MztcdFx0ZW50cnlfaWQgPSBudG1wX2xvb2t1cF9mcmVlX2VpZCh1c2VyLVx1MDAzZW1hZnRfZWlkX2JpdG1hcCxcbiYjNDM7XHRcdFx0XHRcdFx0dXNlci1cdTAwM2VtYWZ0X251bV9lbnRyaWVzKTtcbiYjNDM7XHRcdGV0aGVyX2FkZHJfY29weShtYWZ0LmtleWUubWFjX2FkZHIsIGhhLVx1MDAzZWFkZHIpO1xuJiM0MztcdFx0ZXJyID0gbnRtcF9tYWZ0X2FkZF9lbnRyeSh1c2VyLCBlbnRyeV9pZCwgXHUwMDI2bWFmdCk7XG4gXHRcdGlmICh1bmxpa2VseShlcnIpKSB7XG4tXHRcdFx0cGYtXHUwMDNlbnVtX21mZSA9IGk7XG4mIzQzO1x0XHRcdG50bXBfY2xlYXJfZWlkX2JpdG1hcCh1c2VyLVx1MDAzZW1hZnRfZWlkX2JpdG1hcCwgZW50cnlfaWQpO1xuIFx0XHRcdGdvdG8gY2xlYXJfbWFmdF9lbnRyaWVzO1xuIFx0XHR9XG4gXHR9XG4gXG4tXHRwZi1cdTAwM2VudW1fbWZlID0gbWFjX2NudDtcbi1cbiBcdHJldHVybiAwO1xuIFxuIGNsZWFyX21hZnRfZW50cmllczpcbkBAIC0xNjAsOTcgJiM0MzsxMzQsNzAgQEAgc3RhdGljIGludCBlbmV0YzRfcGZfYWRkX21hZnRfZW50cmllcyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLFxuIFx0cmV0dXJuICBlcnI7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZW5ldGM0X3BmX3NldF91Y19leGFjdF9maWx0ZXIoc3RydWN0IGVuZXRjX3BmICpwZilcbiYjNDM7c3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF91Y19oYXNoX2ZpbHRlcihzdHJ1Y3QgZW5ldGNfcGYgKnBmLFxuJiM0MztcdFx0XHRcdFx0IHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp1YylcbiB7XG4tXHRpbnQgbWF4X251bV9tZmUgPSBwZi1cdTAwM2VjYXBzLm1hY19maWx0ZXJfbnVtO1xuLVx0c3RydWN0IGVuZXRjX21hY19maWx0ZXIgbWFjX2ZpbHRlciA9IHt9O1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwZi1cdTAwM2VzaS1cdTAwM2VuZGV2O1xuLVx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZXNpLVx1MDAzZWh3O1xuLVx0c3RydWN0IGVuZXRjX21hY19hZGRyICptYWNfdGJsO1xuJiM0MztcdHN0cnVjdCBlbmV0Y19tYWNfZmlsdGVyICptYWNfZmlsdGVyID0gXHUwMDI2cGYtXHUwMDNlbWFjX2ZpbHRlcltVQ107XG4gXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xuLVx0aW50IGkgPSAwLCBlcnI7XG4tXHRpbnQgbWFjX2NudDtcbiYjNDM7XHR1NjQgaGFzaDtcbiBcbi1cdG5ldGlmX2FkZHJfbG9ja19iaChuZGV2KTtcbiYjNDM7XHRlbmV0Y19yZXNldF9tYWNfYWRkcl9maWx0ZXIobWFjX2ZpbHRlcik7XG4mIzQzO1x0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgdWMpXG4mIzQzO1x0XHRlbmV0Y19hZGRfbWFjX2FkZHJfaHRfZmlsdGVyKG1hY19maWx0ZXIsIGhhLVx1MDAzZWFkZHIpO1xuJiM0MztcbiYjNDM7XHRiaXRtYXBfdG9fYXJyNjQoXHUwMDI2aGFzaCwgbWFjX2ZpbHRlci1cdTAwM2VtYWNfaGFzaF90YWJsZSxcbiYjNDM7XHRcdFx0RU5FVENfTUFERFJfSEFTSF9UQkxfU1opO1xuJiM0MztcdGVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcihwZi1cdTAwM2VzaSwgMCwgaGFzaCk7XG4mIzQzO31cbiBcbi1cdG1hY19jbnQgPSBuZXRkZXZfdWNfY291bnQobmRldik7XG4tXHRpZiAoIW1hY19jbnQpIHtcbi1cdFx0bmV0aWZfYWRkcl91bmxvY2tfYmgobmRldik7XG4mIzQzO3N0YXRpYyBpbnQgZW5ldGM0X3BmX3NldF91Y19leGFjdF9maWx0ZXIoc3RydWN0IGVuZXRjX3BmICpwZixcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZW5ldGNfc2kgKnNpID0gcGYtXHUwMDNlc2k7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKG5ldGRldl9od19hZGRyX2xpc3RfZW1wdHkodWMpKSB7XG4gXHRcdC8qIGNsZWFyIGJvdGggTUFDIGhhc2ggYW5kIGV4YWN0IGZpbHRlcnMgKi9cbi1cdFx0ZW5ldGM0X3BmX3NldF9zaV91Y19oYXNoX2ZpbHRlcihodywgMCwgMCk7XG4mIzQzO1x0XHRlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc2ksIDAsIDApO1xuIFx0XHRlbmV0YzRfcGZfY2xlYXJfbWFmdF9lbnRyaWVzKHBmKTtcbiBcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHRpZiAobWFjX2NudCBcdTAwM2UgbWF4X251bV9tZmUpIHtcbi1cdFx0ZXJyID0gLUVOT1NQQztcbi1cdFx0Z290byB1bmxvY2tfbmV0aWZfYWRkcjtcbi1cdH1cbi1cbi1cdG1hY190YmwgPSBremFsbG9jX29ianMoKm1hY190YmwsIG1hY19jbnQsIEdGUF9BVE9NSUMpO1xuLVx0aWYgKCFtYWNfdGJsKSB7XG4tXHRcdGVyciA9IC1FTk9NRU07XG4tXHRcdGdvdG8gdW5sb2NrX25ldGlmX2FkZHI7XG4tXHR9XG4tXG4tXHRuZXRkZXZfZm9yX2VhY2hfdWNfYWRkcihoYSwgbmRldikge1xuLVx0XHRlbmV0Y19hZGRfbWFjX2FkZHJfaHRfZmlsdGVyKFx1MDAyNm1hY19maWx0ZXIsIGhhLVx1MDAzZWFkZHIpO1xuLVx0XHRldGhlcl9hZGRyX2NvcHkobWFjX3RibFtpJiM0MzsmIzQzO10uYWRkciwgaGEtXHUwMDNlYWRkcik7XG4tXHR9XG4tXG4tXHRuZXRpZl9hZGRyX3VubG9ja19iaChuZGV2KTtcbi1cbi1cdC8qIFNldCB0ZW1wb3JhcnkgdW5pY2FzdCBoYXNoIGZpbHRlcnMgaW4gY2FzZSBvZiBSeCBsb3NzIHdoZW5cbiYjNDM7XHQvKiBTZXQgdGVtcG9yYXJ5IHVuaWNhc3QgaGFzaCBmaWx0ZXIgaW4gY2FzZSBvZiBSeCBsb3NzIHdoZW5cbiBcdCAqIHVwZGF0aW5nIE1BQyBhZGRyZXNzIGZpbHRlciB0YWJsZVxuIFx0ICovXG4tXHRlbmV0YzRfcGZfc2V0X3NpX3VjX2hhc2hfZmlsdGVyKGh3LCAwLCAqbWFjX2ZpbHRlci5tYWNfaGFzaF90YWJsZSk7XG4mIzQzO1x0ZW5ldGM0X3BmX3NldF91Y19oYXNoX2ZpbHRlcihwZiwgdWMpO1xuIFx0ZW5ldGM0X3BmX2NsZWFyX21hZnRfZW50cmllcyhwZik7XG4gXG4tXHRpZiAoIWVuZXRjNF9wZl9hZGRfbWFmdF9lbnRyaWVzKHBmLCBtYWNfdGJsLCBpKSlcbi1cdFx0ZW5ldGM0X3BmX3NldF9zaV91Y19oYXNoX2ZpbHRlcihodywgMCwgMCk7XG4tXG4tXHRrZnJlZShtYWNfdGJsKTtcbi1cbi1cdHJldHVybiAwO1xuLVxuLXVubG9ja19uZXRpZl9hZGRyOlxuLVx0bmV0aWZfYWRkcl91bmxvY2tfYmgobmRldik7XG4mIzQzO1x0ZXJyID0gZW5ldGM0X3BmX2FkZF9tYWZ0X2VudHJpZXMocGYsIHVjKTtcbiYjNDM7XHRpZiAoIWVycikge1xuJiM0MztcdFx0ZW5ldGNfcmVzZXRfbWFjX2FkZHJfZmlsdGVyKFx1MDAyNnBmLVx1MDAzZW1hY19maWx0ZXJbVUNdKTtcbiYjNDM7XHRcdGVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcihzaSwgMCwgMCk7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9tYWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3BmICpwZiwgaW50IHR5cGUpXG4mIzQzO3N0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfbWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3BmICpwZixcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpXG4ge1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwZi1cdTAwM2VzaS1cdTAwM2VuZGV2O1xuLVx0c3RydWN0IGVuZXRjX21hY19maWx0ZXIgKm1hY19maWx0ZXI7XG4tXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXHUwMDI2cGYtXHUwMDNlc2ktXHUwMDNlaHc7XG4mIzQzO1x0c3RydWN0IGVuZXRjX21hY19maWx0ZXIgKm1hY19maWx0ZXIgPSBcdTAwMjZwZi1cdTAwM2VtYWNfZmlsdGVyW01DXTtcbiBcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4mIzQzO1x0dTY0IGhhc2g7XG4gXG4tXHRuZXRpZl9hZGRyX2xvY2tfYmgobmRldik7XG4tXHRpZiAodHlwZSBcdTAwMjYgRU5FVENfTUFDX0ZJTFRFUl9UWVBFX1VDKSB7XG4tXHRcdG1hY19maWx0ZXIgPSBcdTAwMjZwZi1cdTAwM2VtYWNfZmlsdGVyW1VDXTtcbi1cdFx0ZW5ldGNfcmVzZXRfbWFjX2FkZHJfZmlsdGVyKG1hY19maWx0ZXIpO1xuLVx0XHRuZXRkZXZfZm9yX2VhY2hfdWNfYWRkcihoYSwgbmRldilcbi1cdFx0XHRlbmV0Y19hZGRfbWFjX2FkZHJfaHRfZmlsdGVyKG1hY19maWx0ZXIsIGhhLVx1MDAzZWFkZHIpO1xuLVxuLVx0XHRlbmV0YzRfcGZfc2V0X3NpX3VjX2hhc2hfZmlsdGVyKGh3LCAwLFxuLVx0XHRcdFx0XHRcdCptYWNfZmlsdGVyLVx1MDAzZW1hY19oYXNoX3RhYmxlKTtcbi1cdH1cbiYjNDM7XHRlbmV0Y19yZXNldF9tYWNfYWRkcl9maWx0ZXIobWFjX2ZpbHRlcik7XG4mIzQzO1x0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgbWMpXG4mIzQzO1x0XHRlbmV0Y19hZGRfbWFjX2FkZHJfaHRfZmlsdGVyKG1hY19maWx0ZXIsIGhhLVx1MDAzZWFkZHIpO1xuIFxuLVx0aWYgKHR5cGUgXHUwMDI2IEVORVRDX01BQ19GSUxURVJfVFlQRV9NQykge1xuLVx0XHRtYWNfZmlsdGVyID0gXHUwMDI2cGYtXHUwMDNlbWFjX2ZpbHRlcltNQ107XG4tXHRcdGVuZXRjX3Jlc2V0X21hY19hZGRyX2ZpbHRlcihtYWNfZmlsdGVyKTtcbi1cdFx0bmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIG5kZXYpXG4tXHRcdFx0ZW5ldGNfYWRkX21hY19hZGRyX2h0X2ZpbHRlcihtYWNfZmlsdGVyLCBoYS1cdTAwM2VhZGRyKTtcbi1cbi1cdFx0ZW5ldGM0X3BmX3NldF9zaV9tY19oYXNoX2ZpbHRlcihodywgMCxcbi1cdFx0XHRcdFx0XHQqbWFjX2ZpbHRlci1cdTAwM2VtYWNfaGFzaF90YWJsZSk7XG4tXHR9XG4tXHRuZXRpZl9hZGRyX3VubG9ja19iaChuZGV2KTtcbiYjNDM7XHRiaXRtYXBfdG9fYXJyNjQoXHUwMDI2aGFzaCwgbWFjX2ZpbHRlci1cdTAwM2VtYWNfaGFzaF90YWJsZSxcbiYjNDM7XHRcdFx0RU5FVENfTUFERFJfSEFTSF9UQkxfU1opO1xuJiM0MztcdGVuZXRjX3NldF9zaV9tY19oYXNoX2ZpbHRlcihwZi1cdTAwM2VzaSwgMCwgaGFzaCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfbWFjX2ZpbHRlcihzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBpbnQgdHlwZSlcbiYjNDM7c3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9tYWNfZmlsdGVyKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGludCB0eXBlLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jKVxuIHtcbiBcdC8qIEN1cnJlbnRseSwgdGhlIE1BQyBhZGRyZXNzIGZpbHRlciB0YWJsZSAoTUFGVCkgb25seSBoYXMgNCBlbnRyaWVzLFxuIFx0ICogYW5kIG11bHRpcGxlIG11bHRpY2FzdCBhZGRyZXNzZXMgZm9yIGZpbHRlcmluZyB3aWxsIGJlIGNvbmZpZ3VyZWRcbkBAIC0yNTgsMTUgJiM0MzsyMDUsMTYgQEAgc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9tYWNfZmlsdGVyKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGludCB0eXBlKVxuIFx0ICogdW5pY2FzdCBmaWx0ZXJpbmcuIElmIHRoZSBudW1iZXIgb2YgdW5pY2FzdCBhZGRyZXNzZXMgZXhjZWVkcyB0aGVcbiBcdCAqIHRhYmxlIGNhcGFjaXR5LCB0aGUgTUFDIGhhc2ggZmlsdGVyIHdpbGwgYmUgdXNlZC5cbiBcdCAqL1xuLVx0aWYgKHR5cGUgXHUwMDI2IEVORVRDX01BQ19GSUxURVJfVFlQRV9VQyBcdTAwMjZcdTAwMjYgZW5ldGM0X3BmX3NldF91Y19leGFjdF9maWx0ZXIocGYpKSB7XG4mIzQzO1x0aWYgKHR5cGUgXHUwMDI2IEVORVRDX01BQ19GSUxURVJfVFlQRV9VQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgZW5ldGM0X3BmX3NldF91Y19leGFjdF9maWx0ZXIocGYsIHVjKSkge1xuIFx0XHQvKiBGYWxsIGJhY2sgdG8gdGhlIE1BQyBoYXNoIGZpbHRlciAqL1xuLVx0XHRlbmV0YzRfcGZfc2V0X21hY19oYXNoX2ZpbHRlcihwZiwgRU5FVENfTUFDX0ZJTFRFUl9UWVBFX1VDKTtcbiYjNDM7XHRcdGVuZXRjNF9wZl9zZXRfdWNfaGFzaF9maWx0ZXIocGYsIHVjKTtcbiBcdFx0LyogQ2xlYXIgdGhlIG9sZCBNQUMgZXhhY3QgZmlsdGVyICovXG4gXHRcdGVuZXRjNF9wZl9jbGVhcl9tYWZ0X2VudHJpZXMocGYpO1xuIFx0fVxuIFxuIFx0aWYgKHR5cGUgXHUwMDI2IEVORVRDX01BQ19GSUxURVJfVFlQRV9NQylcbi1cdFx0ZW5ldGM0X3BmX3NldF9tYWNfaGFzaF9maWx0ZXIocGYsIEVORVRDX01BQ19GSUxURVJfVFlQRV9NQyk7XG4mIzQzO1x0XHRlbmV0YzRfcGZfc2V0X21jX2hhc2hfZmlsdGVyKHBmLCBtYyk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZW5ldGNfcGZfb3BzIGVuZXRjNF9wZl9vcHMgPSB7XG5AQCAtMzA2LDM0ICYjNDM7MjU0LDM1IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9kZWZhdWx0X3JpbmdzX2FsbG9jYXRpb24oc3RydWN0IGVuZXRjX3BmICpwZilcbiB7XG4gXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXHUwMDI2cGYtXHUwMDNlc2ktXHUwMDNlaHc7XG4gXHR1MzIgbnVtX3J4X2JkciwgbnVtX3R4X2JkciwgdmFsO1xuJiM0MztcdGludCBudW1fdmZzID0gcGYtXHUwMDNldG90YWxfdmZzO1xuIFx0dTMyIHZmX3R4X2JkciwgdmZfcnhfYmRyO1xuIFx0aW50IGksIHJ4X3JlbSwgdHhfcmVtO1xuIFxuLVx0aWYgKHBmLVx1MDAzZWNhcHMubnVtX3J4X2JkciBcdTAwM2MgRU5FVENfU0lfTUFYX1JJTkdfTlVNICYjNDM7IHBmLVx1MDAzZWNhcHMubnVtX3ZzaSlcbi1cdFx0bnVtX3J4X2JkciA9IHBmLVx1MDAzZWNhcHMubnVtX3J4X2JkciAtIHBmLVx1MDAzZWNhcHMubnVtX3ZzaTtcbiYjNDM7XHRpZiAocGYtXHUwMDNlY2Fwcy5udW1fcnhfYmRyIFx1MDAzYyBFTkVUQ19TSV9NQVhfUklOR19OVU0gJiM0MzsgbnVtX3ZmcylcbiYjNDM7XHRcdG51bV9yeF9iZHIgPSBwZi1cdTAwM2VjYXBzLm51bV9yeF9iZHIgLSBudW1fdmZzO1xuIFx0ZWxzZVxuIFx0XHRudW1fcnhfYmRyID0gRU5FVENfU0lfTUFYX1JJTkdfTlVNO1xuIFxuLVx0aWYgKHBmLVx1MDAzZWNhcHMubnVtX3R4X2JkciBcdTAwM2MgRU5FVENfU0lfTUFYX1JJTkdfTlVNICYjNDM7IHBmLVx1MDAzZWNhcHMubnVtX3ZzaSlcbi1cdFx0bnVtX3R4X2JkciA9IHBmLVx1MDAzZWNhcHMubnVtX3R4X2JkciAtIHBmLVx1MDAzZWNhcHMubnVtX3ZzaTtcbiYjNDM7XHRpZiAocGYtXHUwMDNlY2Fwcy5udW1fdHhfYmRyIFx1MDAzYyBFTkVUQ19TSV9NQVhfUklOR19OVU0gJiM0MzsgbnVtX3ZmcylcbiYjNDM7XHRcdG51bV90eF9iZHIgPSBwZi1cdTAwM2VjYXBzLm51bV90eF9iZHIgLSBudW1fdmZzO1xuIFx0ZWxzZVxuIFx0XHRudW1fdHhfYmRyID0gRU5FVENfU0lfTUFYX1JJTkdfTlVNO1xuIFxuIFx0dmFsID0gZW5ldGM0X3BzaWNmZ3IwX3ZhbF9jb25zdHJ1Y3QoZmFsc2UsIG51bV90eF9iZHIsIG51bV9yeF9iZHIpO1xuIFx0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSUNGR1IwKDApLCB2YWwpO1xuIFxuLVx0aWYgKCFwZi1cdTAwM2VjYXBzLm51bV92c2kpXG4mIzQzO1x0aWYgKCFudW1fdmZzKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRudW1fcnhfYmRyID0gcGYtXHUwMDNlY2Fwcy5udW1fcnhfYmRyIC0gbnVtX3J4X2Jkcjtcbi1cdHJ4X3JlbSA9IG51bV9yeF9iZHIgJSBwZi1cdTAwM2VjYXBzLm51bV92c2k7XG4tXHRudW1fcnhfYmRyID0gbnVtX3J4X2JkciAvIHBmLVx1MDAzZWNhcHMubnVtX3ZzaTtcbiYjNDM7XHRyeF9yZW0gPSBudW1fcnhfYmRyICUgbnVtX3ZmcztcbiYjNDM7XHRudW1fcnhfYmRyID0gbnVtX3J4X2JkciAvIG51bV92ZnM7XG4gXG4gXHRudW1fdHhfYmRyID0gcGYtXHUwMDNlY2Fwcy5udW1fdHhfYmRyIC0gbnVtX3R4X2Jkcjtcbi1cdHR4X3JlbSA9IG51bV90eF9iZHIgJSBwZi1cdTAwM2VjYXBzLm51bV92c2k7XG4tXHRudW1fdHhfYmRyID0gbnVtX3R4X2JkciAvIHBmLVx1MDAzZWNhcHMubnVtX3ZzaTtcbiYjNDM7XHR0eF9yZW0gPSBudW1fdHhfYmRyICUgbnVtX3ZmcztcbiYjNDM7XHRudW1fdHhfYmRyID0gbnVtX3R4X2JkciAvIG51bV92ZnM7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZi1cdTAwM2VjYXBzLm51bV92c2k7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3ZmczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0dmZfdHhfYmRyID0gKGkgXHUwMDNjIHR4X3JlbSkgPyBudW1fdHhfYmRyICYjNDM7IDEgOiBudW1fdHhfYmRyO1xuIFx0XHR2Zl9yeF9iZHIgPSAoaSBcdTAwM2MgcnhfcmVtKSA/IG51bV9yeF9iZHIgJiM0MzsgMSA6IG51bV9yeF9iZHI7XG4gXHRcdHZhbCA9IGVuZXRjNF9wc2ljZmdyMF92YWxfY29uc3RydWN0KHRydWUsIHZmX3R4X2JkciwgdmZfcnhfYmRyKTtcbkBAIC0zNDYsNTMgJiM0MzsyOTUsNzAgQEAgc3RhdGljIHZvaWQgZW5ldGM0X2FsbG9jYXRlX3NpX3JpbmdzKHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4gXHRlbmV0YzRfZGVmYXVsdF9yaW5nc19hbGxvY2F0aW9uKHBmKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9zaV92bGFuX3Byb21pc2Moc3RydWN0IGVuZXRjX2h3ICpodywgaW50IHNpLCBib29sIGVuKVxuLXtcbi1cdHUzMiB2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBFTkVUQzRfUFNJUFZNUik7XG4tXG4tXHRpZiAoZW4pXG4tXHRcdHZhbCB8PSBCSVQoc2kpO1xuLVx0ZWxzZVxuLVx0XHR2YWwgXHUwMDI2PSB+QklUKHNpKTtcbi1cbi1cdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lQVk1SLCB2YWwpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBlbmV0YzRfc2V0X2RlZmF1bHRfc2lfdmxhbl9wcm9taXNjKHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4te1xuLVx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZXNpLVx1MDAzZWh3O1xuLVx0aW50IG51bV9zaSA9IHBmLVx1MDAzZWNhcHMubnVtX3ZzaSAmIzQzOyAxO1xuLVx0aW50IGk7XG4tXG4tXHQvKiBlbmZvcmNlIFZMQU4gcHJvbWlzY3VvdXMgbW9kZSBmb3IgYWxsIFNJcyAqL1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3NpOyBpJiM0MzsmIzQzOylcbi1cdFx0ZW5ldGM0X3BmX3NldF9zaV92bGFuX3Byb21pc2MoaHcsIGksIHRydWUpO1xuLX1cbi1cbiAvKiBBbGxvY2F0ZSB0aGUgbnVtYmVyIG9mIE1TSS1YIHZlY3RvcnMgZm9yIHBlciBTSS4gKi9cbiBzdGF0aWMgdm9pZCBlbmV0YzRfc2V0X3NpX21zaXhfbnVtKHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4ge1xuJiM0MztcdGludCB2YWxpZF9udW1fc2kgPSBwZi1cdTAwM2V0b3RhbF92ZnMgJiM0MzsgMTtcbiBcdHN0cnVjdCBlbmV0Y19odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2VzaS1cdTAwM2Vodztcbi1cdGludCBpLCBudW1fbXNpeCwgdG90YWxfc2k7XG4mIzQzO1x0aW50IGksIG51bV9tc2l4LCBudW1fdnNpO1xuIFx0dTMyIHZhbDtcbiBcbi1cdHRvdGFsX3NpID0gcGYtXHUwMDNlY2Fwcy5udW1fdnNpICYjNDM7IDE7XG4mIzQzO1x0dmFsID0gZW5ldGNfcG9ydF9yZChodywgRU5FVEM0X0VDQVBSMSk7XG4mIzQzO1x0bnVtX3ZzaSA9IEZJRUxEX0dFVChFQ0FQUjFfTlVNX1ZTSSwgdmFsKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIFBTSWFDRkdSMltOVU1fTVNJWF0gaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgTVNJLVggYWxsb2NhdGVkIHRvXG4mIzQzO1x0ICogdGhlIFNJIGlzIE5VTV9NU0lYICYjNDM7IDEsIHNvIHRoZSBtaW5pbXVtIG51bWJlciBvZiBNU0ktWCBhbGxvY2F0ZWQgdG9cbiYjNDM7XHQgKiBlYWNoIFNJIGlzIDEuIFRoZSB0b3RhbCBudW1iZXIgb2YgTVNJLVggYWxsb2NhdGVkIHRvIFBTSSBhbmQgVlNJc1xuJiM0MztcdCAqIGNhbm5vdCBleGNlZWQgdGhlIHRvdGFsIG51bWJlciBvZiBNU0ktWCBvd25lZCBieSB0aGlzIEVORVRDLCB3aGljaFxuJiM0MztcdCAqIGlzIEVDQVBSMVtOVU1fTVNJWF0uIE90aGVyd2lzZSwgd2hlbiBtdWx0aXBsZSBFTkVUQyBpbnN0YW5jZXMgZXhpc3QsXG4mIzQzO1x0ICogaXQgd2lsbCBhZmZlY3Qgb3RoZXIgRU5FVENzIHdob3NlIE1TSS1YIGludGVycnVwdHMgY2Fubm90IGJlXG4mIzQzO1x0ICogZ2VuZXJhdGVkLiBUaGlzIGlzIHNpbWlsYXIgdG8gb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3M6IHRoZSBhcnJheVxuJiM0MztcdCAqIGl0c2VsZiBpcyBub3QgYWZmZWN0ZWQsIGJ1dCBhZGphY2VudCBhcnJheXMgd2lsbCBiZSBjb3JydXB0ZWQuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBwZi1cdTAwM2V0b3RhbF92ZnMgaXMgMCBpZiBDT05GSUdfUENJX0lPViBpcyBkaXNhYmxlZC4gSWYgdGhlIGhhcmR3YXJlXG4mIzQzO1x0ICogaXRzZWxmIHN1cHBvcnRzIFNSLUlPViwgdGhlbiB3aGVuIGFsbG9jYXRpbmcgdGhlIG51bWJlciBvZiBNU0lYcyB0b1xuJiM0MztcdCAqIHRoZSBTSSwgaXQgbXVzdCBiZSB0YWtlbiBpbnRvIGFjY291bnQgdGhhdCB0aGUgVlNJIGhhcyBhdCBsZWFzdCAxXG4mIzQzO1x0ICogTVNJWCwgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgTVNJWHMgb2YgYWxsIFNJcyBjYW5ub3QgZXhjZWVkXG4mIzQzO1x0ICogRUNBUFIxW05VTV9NU0lYXS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXBmLVx1MDAzZXRvdGFsX3ZmcyBcdTAwMjZcdTAwMjYgbnVtX3ZzaSkge1xuJiM0MztcdFx0LyogQmVjYXVzZSBlYWNoIFNJIGhhcyBhdCBsZWFzdCBvbmUgTVNJWCwgYW5kIGZyb20gdGhlIGhhcmR3YXJlXG4mIzQzO1x0XHQgKiBwZXJzcGVjdGl2ZSwgcGYtXHUwMDNlY2Fwcy5udW1fbXNpeCB3aWxsIGFsd2F5cyBiZSBncmVhdGVyIHRoYW5cbiYjNDM7XHRcdCAqIG51bV92c2kuIFNvIG51bV9tc2l4IGlzIGFsd2F5cyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0bnVtX21zaXggPSBwZi1cdTAwM2VjYXBzLm51bV9tc2l4IC0gbnVtX3ZzaSAtIDE7XG4mIzQzO1x0XHRpZiAobnVtX21zaXggXHUwMDNlIFBTSUNGR1IyX05VTV9NU0lYKVxuJiM0MztcdFx0XHRudW1fbXNpeCA9IFBTSUNGR1IyX05VTV9NU0lYO1xuJiM0MztcdFx0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSUNGR1IyKDApLCBudW1fbXNpeCk7XG4gXG4tXHRudW1fbXNpeCA9IHBmLVx1MDAzZWNhcHMubnVtX21zaXggLyB0b3RhbF9zaSAmIzQzO1xuLVx0XHQgICBwZi1cdTAwM2VjYXBzLm51bV9tc2l4ICUgdG90YWxfc2kgLSAxO1xuLVx0dmFsID0gbnVtX21zaXggXHUwMDI2IFBTSUNGR1IyX05VTV9NU0lYO1xuLVx0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSUNGR1IyKDApLCB2YWwpO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3ZzaTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lDRkdSMihpICYjNDM7IDEpLCAwKTtcbiBcbi1cdG51bV9tc2l4ID0gcGYtXHUwMDNlY2Fwcy5udW1fbXNpeCAvIHRvdGFsX3NpIC0gMTtcbi1cdHZhbCA9IG51bV9tc2l4IFx1MDAyNiBQU0lDRkdSMl9OVU1fTVNJWDtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmLVx1MDAzZWNhcHMubnVtX3ZzaTsgaSYjNDM7JiM0MzspXG4tXHRcdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lDRkdSMihpICYjNDM7IDEpLCB2YWwpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogTGlrZXdpc2UsIGZyb20gdGhlIGhhcmR3YXJlIHBlcnNwZWN0aXZlIHBmLVx1MDAzZWNhcHMubnVtX21zaXggaXMgYWx3YXlzXG4mIzQzO1x0ICogZ3JlYXRlciB0aGFuIHZhbGlkX251bV9zaS4gU28gbnVtX21zaXggaXMgYWx3YXlzIGdyZWF0ZXIgdGhhbiBvclxuJiM0MztcdCAqIGVxdWFsIHRvIDAuXG4mIzQzO1x0ICovXG4mIzQzO1x0bnVtX21zaXggPSBwZi1cdTAwM2VjYXBzLm51bV9tc2l4IC8gdmFsaWRfbnVtX3NpICYjNDM7XG4mIzQzO1x0XHQgICBwZi1cdTAwM2VjYXBzLm51bV9tc2l4ICUgdmFsaWRfbnVtX3NpIC0gMTtcbiYjNDM7XHRpZiAobnVtX21zaXggXHUwMDNlIFBTSUNGR1IyX05VTV9NU0lYKVxuJiM0MztcdFx0bnVtX21zaXggPSBQU0lDRkdSMl9OVU1fTVNJWDtcbiYjNDM7XHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJQ0ZHUjIoMCksIG51bV9tc2l4KTtcbiYjNDM7XG4mIzQzO1x0bnVtX21zaXggPSBwZi1cdTAwM2VjYXBzLm51bV9tc2l4IC8gdmFsaWRfbnVtX3NpIC0gMTtcbiYjNDM7XHRpZiAobnVtX21zaXggXHUwMDNlIFBTSUNGR1IyX05VTV9NU0lYKVxuJiM0MztcdFx0bnVtX21zaXggPSBQU0lDRkdSMl9OVU1fTVNJWDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGYtXHUwMDNldG90YWxfdmZzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lDRkdSMihpICYjNDM7IDEpLCBudW1fbXNpeCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGVuZXRjNF9lbmFibGVfYWxsX3NpKHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4ge1xuIFx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZXNpLVx1MDAzZWh3O1xuLVx0aW50IG51bV9zaSA9IHBmLVx1MDAzZWNhcHMubnVtX3ZzaSAmIzQzOyAxO1xuJiM0MztcdGludCBudW1fc2kgPSBwZi1cdTAwM2V0b3RhbF92ZnMgJiM0MzsgMTtcbiBcdHUzMiBzaV9iaXRtYXAgPSAwO1xuIFx0aW50IGk7XG4gXG5AQCAtNDEyLDcgJiM0MzszNzgsOSBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfY29uZmlndXJlX3BvcnRfc2koc3RydWN0IGVuZXRjX3BmICpwZilcbiBcdC8qIE91dGVyIFZMQU4gdGFnIHdpbGwgYmUgdXNlZCBmb3IgVkxBTiBmaWx0ZXJpbmcgKi9cbiBcdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lWTEFORk1SLCBQU0lWTEFORk1SX1ZTKTtcbiBcbi1cdGVuZXRjNF9zZXRfZGVmYXVsdF9zaV92bGFuX3Byb21pc2MocGYpO1xuJiM0MztcdC8qIEVuZm9yY2UgVkxBTiBwcm9taXNjdW91cyBtb2RlIGZvciBhbGwgU0lzICovXG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHBmLVx1MDAzZXRvdGFsX3ZmcyAmIzQzOyAxOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGVuZXRjX3NldF9zaV92bGFuX3Byb21pc2MocGYtXHUwMDNlc2ksIGksIHRydWUpO1xuIFxuIFx0LyogRGlzYWJsZSBTSSBNQUMgbXVsdGljYXN0IFx1MDAyNiB1bmljYXN0IHByb21pc2N1b3VzICovXG4gXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJUE1NUiwgMCk7XG5AQCAtNDUwLDE4ICYjNDM7NDE4LDYwIEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9jb25maWd1cmVfcG9ydChzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuIFx0ZW5ldGNfc2V0X2RlZmF1bHRfcnNzX2tleShwZik7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBlbmV0YzRfZ2V0X250bXBfY2FwcyhzdHJ1Y3QgZW5ldGNfc2kgKnNpKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG50bXBfdXNlciAqdXNlciA9IFx1MDAyNnNpLVx1MDAzZW50bXBfdXNlcjtcbiYjNDM7XHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXHUwMDI2c2ktXHUwMDNlaHc7XG4mIzQzO1x0dTMyIHZhbDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gZW5ldGNfcG9ydF9yZChodywgRU5FVEM0X1BTSU1BRkNBUFIpO1xuJiM0MztcdHVzZXItXHUwMDNlbWFmdF9udW1fZW50cmllcyA9IEZJRUxEX0dFVChQU0lNQUZDQVBSX05VTV9NQUNfQUZURSwgdmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbmV0YzRfbnRtcF9iaXRtYXBfaW5pdChzdHJ1Y3QgbnRtcF91c2VyICp1c2VyKVxuJiM0Mzt7XG4mIzQzO1x0dXNlci1cdTAwM2VtYWZ0X2VpZF9iaXRtYXAgPSBiaXRtYXBfemFsbG9jKHVzZXItXHUwMDNlbWFmdF9udW1fZW50cmllcyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghdXNlci1cdTAwM2VtYWZ0X2VpZF9iaXRtYXApXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGVuZXRjNF9udG1wX2JpdG1hcF9mcmVlKHN0cnVjdCBudG1wX3VzZXIgKnVzZXIpXG4mIzQzO3tcbiYjNDM7XHRiaXRtYXBfZnJlZSh1c2VyLVx1MDAzZW1hZnRfZWlkX2JpdG1hcCk7XG4mIzQzO1x0dXNlci1cdTAwM2VtYWZ0X2VpZF9iaXRtYXAgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgZW5ldGM0X2luaXRfbnRtcF91c2VyKHN0cnVjdCBlbmV0Y19zaSAqc2kpXG4ge1xuIFx0c3RydWN0IG50bXBfdXNlciAqdXNlciA9IFx1MDAyNnNpLVx1MDAzZW50bXBfdXNlcjtcbiYjNDM7XHRpbnQgZXJyO1xuIFxuIFx0LyogRm9yIEVORVRDIDQuMSwgYWxsIHRhYmxlIHZlcnNpb25zIGFyZSAwICovXG4gXHRtZW1zZXQoXHUwMDI2dXNlci1cdTAwM2V0YmwsIDAsIHNpemVvZih1c2VyLVx1MDAzZXRibCkpO1xuIFxuLVx0cmV0dXJuIGVuZXRjNF9zZXR1cF9jYmRyKHNpKTtcbiYjNDM7XHRlcnIgPSBlbmV0YzRfc2V0dXBfY2JkcihzaSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGVuZXRjNF9nZXRfbnRtcF9jYXBzKHNpKTtcbiYjNDM7XHRlcnIgPSBlbmV0YzRfbnRtcF9iaXRtYXBfaW5pdCh1c2VyKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byB0ZWFyZG93bl9jYmRyO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO3RlYXJkb3duX2NiZHI6XG4mIzQzO1x0ZW5ldGM0X3RlYXJkb3duX2NiZHIoc2kpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBlbmV0YzRfZnJlZV9udG1wX3VzZXIoc3RydWN0IGVuZXRjX3NpICpzaSlcbiB7XG4mIzQzO1x0ZW5ldGM0X250bXBfYml0bWFwX2ZyZWUoXHUwMDI2c2ktXHUwMDNlbnRtcF91c2VyKTtcbiBcdGVuZXRjNF90ZWFyZG93bl9jYmRyKHNpKTtcbiB9XG4gXG5AQCAtNDc5LDcgJiM0Mzs0ODksNyBAQCBzdGF0aWMgaW50IGVuZXRjNF9wZl9pbml0KHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4gXG4gXHRlcnIgPSBlbmV0YzRfaW5pdF9udG1wX3VzZXIocGYtXHUwMDNlc2kpO1xuIFx0aWYgKGVycikge1xuLVx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIGluaXQgQ0JEUlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIGluaXQgTlRNUCB1c2VyXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbkBAIC00OTMsMTggJiM0Mzs1MDMsMTcgQEAgc3RhdGljIHZvaWQgZW5ldGM0X3BmX2ZyZWUoc3RydWN0IGVuZXRjX3BmICpwZilcbiBcdGVuZXRjNF9mcmVlX250bXBfdXNlcihwZi1cdTAwM2VzaSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGVuZXRjNF9wc2lfZG9fc2V0X3J4X21vZGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0MztzdGF0aWMgaW50IGVuZXRjNF9wZl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiYjNDM7XHRcdFx0XHQgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpXG4ge1xuLVx0c3RydWN0IGVuZXRjX3NpICpzaSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZW5ldGNfc2ksIHJ4X21vZGVfdGFzayk7XG4tXHRzdHJ1Y3QgZW5ldGNfcGYgKnBmID0gZW5ldGNfc2lfcHJpdihzaSk7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHNpLVx1MDAzZW5kZXY7XG4tXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXHUwMDI2c2ktXHUwMDNlaHc7XG4mIzQzO1x0c3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdHN0cnVjdCBlbmV0Y19wZiAqcGYgPSBlbmV0Y19zaV9wcml2KHByaXYtXHUwMDNlc2kpO1xuJiM0MztcdHN0cnVjdCBlbmV0Y19zaSAqc2kgPSBwcml2LVx1MDAzZXNpO1xuIFx0Ym9vbCB1Y19wcm9taXNjID0gZmFsc2U7XG4gXHRib29sIG1jX3Byb21pc2MgPSBmYWxzZTtcbiBcdGludCB0eXBlID0gMDtcbiBcbi1cdHJ0bmxfbG9jaygpO1xuLVxuIFx0aWYgKG5kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9QUk9NSVNDKSB7XG4gXHRcdHVjX3Byb21pc2MgPSB0cnVlO1xuIFx0XHRtY19wcm9taXNjID0gdHJ1ZTtcbkBAIC01MTUsMjggJiM0Mzs1MjQsMjEgQEAgc3RhdGljIHZvaWQgZW5ldGM0X3BzaV9kb19zZXRfcnhfbW9kZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdHR5cGUgPSBFTkVUQ19NQUNfRklMVEVSX1RZUEVfQUxMO1xuIFx0fVxuIFxuLVx0ZW5ldGM0X3BmX3NldF9zaV9tYWNfcHJvbWlzYyhodywgMCwgdWNfcHJvbWlzYywgbWNfcHJvbWlzYyk7XG4mIzQzO1x0ZW5ldGNfc2V0X3NpX3VjX3Byb21pc2Moc2ksIDAsIHVjX3Byb21pc2MpO1xuJiM0MztcdGVuZXRjX3NldF9zaV9tY19wcm9taXNjKHNpLCAwLCBtY19wcm9taXNjKTtcbiBcbiBcdGlmICh1Y19wcm9taXNjKSB7XG4tXHRcdGVuZXRjNF9wZl9zZXRfc2lfdWNfaGFzaF9maWx0ZXIoaHcsIDAsIDApO1xuJiM0MztcdFx0ZW5ldGNfc2V0X3NpX3VjX2hhc2hfZmlsdGVyKHNpLCAwLCAwKTtcbiBcdFx0ZW5ldGM0X3BmX2NsZWFyX21hZnRfZW50cmllcyhwZik7XG4gXHR9XG4gXG4gXHRpZiAobWNfcHJvbWlzYylcbi1cdFx0ZW5ldGM0X3BmX3NldF9zaV9tY19oYXNoX2ZpbHRlcihodywgMCwgMCk7XG4mIzQzO1x0XHRlbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXIoc2ksIDAsIDApO1xuIFxuIFx0LyogU2V0IG5ldyBNQUMgZmlsdGVyICovXG4tXHRlbmV0YzRfcGZfc2V0X21hY19maWx0ZXIocGYsIHR5cGUpO1xuJiM0MztcdGVuZXRjNF9wZl9zZXRfbWFjX2ZpbHRlcihwZiwgdHlwZSwgdWMsIG1jKTtcbiBcbi1cdHJ0bmxfdW5sb2NrKCk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi17XG4tXHRzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4tXHRzdHJ1Y3QgZW5ldGNfc2kgKnNpID0gcHJpdi1cdTAwM2VzaTtcbi1cbi1cdHF1ZXVlX3dvcmsoc2ktXHUwMDNld29ya3F1ZXVlLCBcdTAwMjZzaS1cdTAwM2VyeF9tb2RlX3Rhc2spO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IGVuZXRjNF9wZl9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG5AQCAtNTQ0LDEyICYjNDM7NTQ2LDExIEBAIHN0YXRpYyBpbnQgZW5ldGM0X3BmX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiB7XG4gXHRuZXRkZXZfZmVhdHVyZXNfdCBjaGFuZ2VkID0gbmRldi1cdTAwM2VmZWF0dXJlcyBeIGZlYXR1cmVzO1xuIFx0c3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuLVx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnByaXYtXHUwMDNlc2ktXHUwMDNlaHc7XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSB7XG4gXHRcdGJvb2wgcHJvbWlzY19lbiA9ICEoZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUik7XG4gXG4tXHRcdGVuZXRjNF9wZl9zZXRfc2lfdmxhbl9wcm9taXNjKGh3LCAwLCBwcm9taXNjX2VuKTtcbiYjNDM7XHRcdGVuZXRjX3NldF9zaV92bGFuX3Byb21pc2MocHJpdi1cdTAwM2VzaSwgMCwgcHJvbWlzY19lbik7XG4gXHR9XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9MT09QQkFDSylcbkBAIC01NjYsNyAmIzQzOzU2Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZW5ldGM0X25kZXZfb3BzID0ge1xuIFx0Lm5kb19zdGFydF94bWl0XHRcdD0gZW5ldGNfeG1pdCxcbiBcdC5uZG9fZ2V0X3N0YXRzXHRcdD0gZW5ldGNfZ2V0X3N0YXRzLFxuIFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcdD0gZW5ldGNfcGZfc2V0X21hY19hZGRyLFxuLVx0Lm5kb19zZXRfcnhfbW9kZVx0PSBlbmV0YzRfcGZfc2V0X3J4X21vZGUsXG4mIzQzO1x0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1x0PSBlbmV0YzRfcGZfc2V0X3J4X21vZGUsXG4gXHQubmRvX3NldF9mZWF0dXJlc1x0PSBlbmV0YzRfcGZfc2V0X2ZlYXR1cmVzLFxuIFx0Lm5kb192bGFuX3J4X2FkZF92aWRcdD0gZW5ldGNfdmxhbl9yeF9hZGRfdmlkLFxuIFx0Lm5kb192bGFuX3J4X2tpbGxfdmlkXHQ9IGVuZXRjX3ZsYW5fcnhfZGVsX3ZpZCxcbkBAIC02MDIsMTEgJiM0Mzs2MDMsNiBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfbWFjX2NvbmZpZyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLCB1bnNpZ25lZCBpbnQgbW9kZSxcbiBcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1JYSUQ6XG4gXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9UWElEOlxuIFx0XHR2YWwgfD0gSUZNT0RFX1JHTUlJO1xuLVx0XHQvKiBXZSBuZWVkIHRvIGVuYWJsZSBhdXRvLW5lZ290aWF0aW9uIGZvciB0aGUgTUFDXG4tXHRcdCAqIGlmIGl0cyBSR01JSSBpbnRlcmZhY2Ugc3VwcG9ydCBJbi1CYW5kIHN0YXR1cy5cbi1cdFx0ICovXG4tXHRcdGlmIChwaHlsaW5rX2F1dG9uZWdfaW5iYW5kKG1vZGUpKVxuLVx0XHRcdHZhbCB8PSBQTV9JRl9NT0RFX0VOQTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJOlxuIFx0XHR2YWwgfD0gSUZNT0RFX1JNSUk7XG5AQCAtNjE2LDcgJiM0Mzs2MTIsNiBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfbWFjX2NvbmZpZyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLCB1bnNpZ25lZCBpbnQgbW9kZSxcbiBcdFx0dmFsIHw9IElGTU9ERV9TR01JSTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUjpcbi1cdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1hHTUlJOlxuIFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSTpcbiBcdFx0dmFsIHw9IElGTU9ERV9YR01JSTtcbiBcdFx0YnJlYWs7XG5AQCAtNjQyLDI2ICYjNDM7NjM3LDE5IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9zZXRfcG9ydF9zcGVlZChzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2LCBpbnQgc3BlZWQpXG4gXHR1MzIgb2xkX3NwZWVkID0gcHJpdi1cdTAwM2VzcGVlZDtcbiBcdHUzMiB2YWw7XG4gXG4mIzQzO1x0LyogSWYgdGhlIHNwZWVkIGlzIHVua25vd24sIHVzZSB0aGUgbWluaW11bSB2YWx1ZSAqL1xuJiM0MztcdGlmIChzcGVlZCA9PSBTUEVFRF9VTktOT1dOKSB7XG4mIzQzO1x0XHRzcGVlZCA9IFNQRUVEXzEwO1xuJiM0MztcdFx0ZGV2X3dhcm4ocHJpdi1cdTAwM2VkZXYsIFwmIzM0O1NwZWVkIHVua25vd24sIGRlZmF1bHQgaXMgMTBNYnBzXFxuXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHNwZWVkID09IG9sZF9zcGVlZClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0dmFsID0gZW5ldGNfcG9ydF9yZChcdTAwMjZwcml2LVx1MDAzZXNpLVx1MDAzZWh3LCBFTkVUQzRfUENSKTtcbi1cdHZhbCBcdTAwMjY9IH5QQ1JfUFNQRUVEO1xuLVxuLVx0c3dpdGNoIChzcGVlZCkge1xuLVx0Y2FzZSBTUEVFRF8xMDA6XG4tXHRjYXNlIFNQRUVEXzEwMDA6XG4tXHRjYXNlIFNQRUVEXzI1MDA6XG4tXHRjYXNlIFNQRUVEXzEwMDAwOlxuLVx0XHR2YWwgfD0gKFBDUl9QU1BFRUQgXHUwMDI2IFBDUl9QU1BFRURfVkFMKHNwZWVkKSk7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBTUEVFRF8xMDpcbi1cdGRlZmF1bHQ6XG4tXHRcdHZhbCB8PSAoUENSX1BTUEVFRCBcdTAwMjYgUENSX1BTUEVFRF9WQUwoU1BFRURfMTApKTtcbi1cdH1cbi1cbi1cdHByaXYtXHUwMDNlc3BlZWQgPSBzcGVlZDtcbiYjNDM7XHR2YWwgPSBlbmV0Y19wb3J0X3JkKFx1MDAyNnByaXYtXHUwMDNlc2ktXHUwMDNlaHcsIEVORVRDNF9QQ1IpIFx1MDAyNiAoflBDUl9QU1BFRUQpO1xuJiM0MztcdHZhbCB8PSBQQ1JfUFNQRUVEX1ZBTChzcGVlZCk7XG4gXHRlbmV0Y19wb3J0X3dyKFx1MDAyNnByaXYtXHUwMDNlc2ktXHUwMDNlaHcsIEVORVRDNF9QQ1IsIHZhbCk7XG4mIzQzO1x0cHJpdi1cdTAwM2VzcGVlZCA9IHNwZWVkO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBlbmV0YzRfc2V0X3JnbWlpX21hYyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBpbnQgc3BlZWQsIGludCBkdXBsZXgpXG5AQCAtNzE3LDIyICYjNDM7NzA1LDYgQEAgc3RhdGljIHZvaWQgZW5ldGM0X3NldF9ybWlpX21hYyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBpbnQgc3BlZWQsIGludCBkdXBsZXgpXG4gXHRlbmV0Y19wb3J0X21hY193cihzaSwgRU5FVEM0X1BNX0lGX01PREUoMCksIHZhbCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGVuZXRjNF9zZXRfaGRfZmxvd19jb250cm9sKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGJvb2wgZW5hYmxlKVxuLXtcbi1cdHN0cnVjdCBlbmV0Y19zaSAqc2kgPSBwZi1cdTAwM2VzaTtcbi1cdHUzMiBvbGRfdmFsLCB2YWw7XG4tXG4tXHRpZiAoIXBmLVx1MDAzZWNhcHMuaGFsZl9kdXBsZXgpXG4tXHRcdHJldHVybjtcbi1cbi1cdG9sZF92YWwgPSBlbmV0Y19wb3J0X21hY19yZChzaSwgRU5FVEM0X1BNX0NNRF9DRkcoMCkpO1xuLVx0dmFsID0gdTMyX3JlcGxhY2VfYml0cyhvbGRfdmFsLCBlbmFibGUgPyAxIDogMCwgUE1fQ01EX0NGR19IRF9GQ0VOKTtcbi1cdGlmICh2YWwgPT0gb2xkX3ZhbClcbi1cdFx0cmV0dXJuO1xuLVxuLVx0ZW5ldGNfcG9ydF9tYWNfd3Ioc2ksIEVORVRDNF9QTV9DTURfQ0ZHKDApLCB2YWwpO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBlbmV0YzRfc2V0X3J4X3BhdXNlKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGJvb2wgcnhfcGF1c2UpXG4ge1xuIFx0c3RydWN0IGVuZXRjX3NpICpzaSA9IHBmLVx1MDAzZXNpO1xuQEAgLTkwOCwxMyAmIzQzOzg4MCwxMSBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfcGxfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4gXHRzdHJ1Y3QgZW5ldGNfcGYgKnBmID0gcGh5bGlua190b19lbmV0Y19wZihjb25maWcpO1xuIFx0c3RydWN0IGVuZXRjX3NpICpzaSA9IHBmLVx1MDAzZXNpO1xuIFx0c3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdjtcbi1cdGJvb2wgaGRfZmMgPSBmYWxzZTtcbiBcbiBcdHByaXYgPSBuZXRkZXZfcHJpdihzaS1cdTAwM2VuZGV2KTtcbiBcdGVuZXRjNF9zZXRfcG9ydF9zcGVlZChwcml2LCBzcGVlZCk7XG4gXG4tXHRpZiAoIXBoeWxpbmtfYXV0b25lZ19pbmJhbmQobW9kZSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgcGh5X2ludGVyZmFjZV9tb2RlX2lzX3JnbWlpKGludGVyZmFjZSkpXG4mIzQzO1x0aWYgKHBoeV9pbnRlcmZhY2VfbW9kZV9pc19yZ21paShpbnRlcmZhY2UpKVxuIFx0XHRlbmV0YzRfc2V0X3JnbWlpX21hYyhwZiwgc3BlZWQsIGR1cGxleCk7XG4gXG4gXHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKVxuQEAgLTkyNiwxOCAmIzQzOzg5Niw4IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wbF9tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiBcdFx0ICovXG4gXHRcdGlmIChwcml2LVx1MDAzZWFjdGl2ZV9vZmZsb2FkcyBcdTAwMjYgRU5FVENfRl9RQlUpXG4gXHRcdFx0dHhfcGF1c2UgPSBmYWxzZTtcbi1cdH0gZWxzZSB7IC8qIERVUExFWF9IQUxGICovXG4tXHRcdGlmICh0eF9wYXVzZSB8fCByeF9wYXVzZSlcbi1cdFx0XHRoZF9mYyA9IHRydWU7XG4tXG4tXHRcdC8qIEFzIHBlciA4MDIuMyBhbm5leCAzMUIsIFBBVVNFIGZyYW1lcyBhcmUgb25seSBzdXBwb3J0ZWRcbi1cdFx0ICogd2hlbiB0aGUgbGluayBpcyBjb25maWd1cmVkIGZvciBmdWxsIGR1cGxleCBvcGVyYXRpb24uXG4tXHRcdCAqL1xuLVx0XHR0eF9wYXVzZSA9IGZhbHNlO1xuLVx0XHRyeF9wYXVzZSA9IGZhbHNlO1xuIFx0fVxuIFxuLVx0ZW5ldGM0X3NldF9oZF9mbG93X2NvbnRyb2wocGYsIGhkX2ZjKTtcbiBcdGVuZXRjNF9zZXRfdHhfcGF1c2UocGYsIHByaXYtXHUwMDNlbnVtX3J4X3JpbmdzLCB0eF9wYXVzZSk7XG4gXHRlbmV0YzRfc2V0X3J4X3BhdXNlKHBmLCByeF9wYXVzZSk7XG4gXHRlbmV0YzRfbWFjX3R4X2VuYWJsZShwZik7XG5AQCAtMTAwOSwxOSAmIzQzOzk2OSw2IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9saW5rX2RlaW5pdChzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2KVxuIFx0ZW5ldGNfbWRpb2J1c19kZXN0cm95KHBmKTtcbiB9XG4gXG4tc3RhdGljIGludCBlbmV0YzRfcHNpX3dxX3Rhc2tfaW5pdChzdHJ1Y3QgZW5ldGNfc2kgKnNpKVxuLXtcbi1cdGNoYXIgd3FfbmFtZVsyNF07XG4tXG4tXHRJTklUX1dPUksoXHUwMDI2c2ktXHUwMDNlcnhfbW9kZV90YXNrLCBlbmV0YzRfcHNpX2RvX3NldF9yeF9tb2RlKTtcbi1cdHNucHJpbnRmKHdxX25hbWUsIHNpemVvZih3cV9uYW1lKSwgXCYjMzQ7ZW5ldGMtJXNcJiMzNDssIHBjaV9uYW1lKHNpLVx1MDAzZXBkZXYpKTtcbi1cdHNpLVx1MDAzZXdvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKHdxX25hbWUpO1xuLVx0aWYgKCFzaS1cdTAwM2V3b3JrcXVldWUpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIHN0YXRpYyBpbnQgZW5ldGM0X3BmX25ldGRldl9jcmVhdGUoc3RydWN0IGVuZXRjX3NpICpzaSlcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZzaS1cdTAwM2VwZGV2LVx1MDAzZWRldjtcbkBAIC0xMDYyLDEyICYjNDM7MTAwOSw2IEBAIHN0YXRpYyBpbnQgZW5ldGM0X3BmX25ldGRldl9jcmVhdGUoc3RydWN0IGVuZXRjX3NpICpzaSlcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2xpbmtfaW5pdDtcbiBcbi1cdGVyciA9IGVuZXRjNF9wc2lfd3FfdGFza19pbml0KHNpKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBpbml0IHdvcmtxdWV1ZVxcblwmIzM0Oyk7XG4tXHRcdGdvdG8gZXJyX3dxX2luaXQ7XG4tXHR9XG4tXG4gXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgbmV0ZGV2XFxuXCYjMzQ7KTtcbkBAIC0xMDc3LDggJiM0MzsxMDE4LDYgQEAgc3RhdGljIGludCBlbmV0YzRfcGZfbmV0ZGV2X2NyZWF0ZShzdHJ1Y3QgZW5ldGNfc2kgKnNpKVxuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX3JlZ19uZXRkZXY6XG4tXHRkZXN0cm95X3dvcmtxdWV1ZShzaS1cdTAwM2V3b3JrcXVldWUpO1xuLWVycl93cV9pbml0OlxuIFx0ZW5ldGM0X2xpbmtfZGVpbml0KHByaXYpO1xuIGVycl9saW5rX2luaXQ6XG4gXHRlbmV0Y19mcmVlX21zaXgocHJpdik7XG5AQCAtMTA5Niw4ICYjNDM7MTAzNSw2IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wZl9uZXRkZXZfZGVzdHJveShzdHJ1Y3QgZW5ldGNfc2kgKnNpKVxuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBzaS1cdTAwM2VuZGV2O1xuIFxuIFx0dW5yZWdpc3Rlcl9uZXRkZXYobmRldik7XG4tXHRjYW5jZWxfd29yayhcdTAwMjZzaS1cdTAwM2VyeF9tb2RlX3Rhc2spO1xuLVx0ZGVzdHJveV93b3JrcXVldWUoc2ktXHUwMDNld29ya3F1ZXVlKTtcbiBcdGVuZXRjNF9saW5rX2RlaW5pdChwcml2KTtcbiBcdGVuZXRjX2ZyZWVfbXNpeChwcml2KTtcbiBcdGZyZWVfbmV0ZGV2KG5kZXYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfZXRodG9vbC5jXG5pbmRleCA3MWYzNzZlZjFiZTFjOS4uMDdiNzgzMmYyNDI3NmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfZXRodG9vbC5jXG5AQCAtMjksNyAmIzQzOzI5LDcgQEAgc3RhdGljIGNvbnN0IHUzMiBlbmV0Y19yeGJkcl9yZWdzW10gPSB7XG4gfTtcbiBcbiBzdGF0aWMgY29uc3QgdTMyIGVuZXRjX3BvcnRfcmVnc1tdID0ge1xuLVx0RU5FVENfUE1SLCBFTkVUQ19QU1IsIEVORVRDX1BTSVBNUiwgRU5FVENfUFNJUE1BUjAoMCksXG4mIzQzO1x0RU5FVENfUE1SLCBFTkVUQ19QU1IsIEVORVRDX1BTSVBNTVIsIEVORVRDX1BTSVBNQVIwKDApLFxuIFx0RU5FVENfUFNJUE1BUjEoMCksIEVORVRDX1BUWE1CQVIsIEVORVRDX1BDQVBSMCwgRU5FVENfUENBUFIxLFxuIFx0RU5FVENfUFNJQ0ZHUjAoMCksIEVORVRDX1BSRlNDQVBSLCBFTkVUQ19QVENNU0RVUigwKSxcbiBcdEVORVRDX1BNMF9DTURfQ0ZHLCBFTkVUQ19QTTBfTUFYRlJNLCBFTkVUQ19QTTBfSUZfTU9ERVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ody5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX2h3LmhcbmluZGV4IGJmOTliNjVkNzU5OGFiLi4xNmRhNzMyZGM1ZGU4MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ody5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfaHcuaFxuQEAgLTE4MCwxMyAmIzQzOzE4MCwxMyBAQCBlbnVtIGVuZXRjX2Jkcl90eXBlIHtUWCwgUlh9O1xuICNkZWZpbmUgRU5FVENfUE1SX1BTUEVFRF8xMDAwTVx0QklUKDkpXG4gI2RlZmluZSBFTkVUQ19QTVJfUFNQRUVEXzI1MDBNXHRCSVQoMTApXG4gI2RlZmluZSBFTkVUQ19QU1JcdFx0MHgwMDA0IC8qIFJPICovXG4tI2RlZmluZSBFTkVUQ19QU0lQTVJcdFx0MHgwMDE4XG4tI2RlZmluZSBFTkVUQ19QU0lQTVJfU0VUX1VQKG4pXHRCSVQobikgLyogbiA9IFNJIGluZGV4ICovXG4tI2RlZmluZSBFTkVUQ19QU0lQTVJfU0VUX01QKG4pXHRCSVQoKG4pICYjNDM7IDE2KVxuJiM0MzsjZGVmaW5lIEVORVRDX1BTSVBNTVJcdFx0MHgwMDE4XG4mIzQzOyNkZWZpbmUgIFBTSVBNTVJfU0lfTUFDX1VQKG4pXHRCSVQobikgLyogbiA9IFNJIGluZGV4ICovXG4mIzQzOyNkZWZpbmUgIFBTSVBNTVJfU0lfTUFDX01QKG4pXHRCSVQoKG4pICYjNDM7IDE2KVxuJiM0MztcbiAjZGVmaW5lIEVORVRDX1BTSVBWTVJcdFx0MHgwMDFjXG4tI2RlZmluZSBFTkVUQ19WTEFOX1BST01JU0NfTUFQX0FMTFx0MHg3XG4tI2RlZmluZSBFTkVUQ19QU0lQVk1SX1NFVF9WUChzaW1hcClcdCgoc2ltYXApIFx1MDAyNiAweDcpXG4tI2RlZmluZSBFTkVUQ19QU0lQVk1SX1NFVF9WVVRBKHNpbWFwKVx0KCgoc2ltYXApIFx1MDAyNiAweDcpIFx1MDAzY1x1MDAzYyAxNilcbiYjNDM7I2RlZmluZSAgUFNJUFZNUl9TSV9WTEFOX1AobilcdEJJVChuKSAvKiBuID0gU0kgaW5kZXggKi9cbiYjNDM7XG4gI2RlZmluZSBFTkVUQ19QU0lQTUFSMChuKVx0KDB4MDEwMCAmIzQzOyAobikgKiAweDgpIC8qIG4gPSBTSSBpbmRleCAqL1xuICNkZWZpbmUgRU5FVENfUFNJUE1BUjEobilcdCgweDAxMDQgJiM0MzsgKG4pICogMHg4KVxuICNkZWZpbmUgRU5FVENfUFZDTENUUlx0XHQweDAyMDhcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jXG5pbmRleCAyZDY4N2JiOGMzYTA2My4uYTUwOTkyOWY4OWYyNWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmNcbkBAIC00MiwyNiAmIzQzOzQyLDYgQEAgc3RhdGljIHZvaWQgZW5ldGNfcGZfZGVzdHJveV9wY3Moc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpXG4gXHRseW54X3Bjc19kZXN0cm95KHBjcyk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGVuZXRjX3NldF92bGFuX3Byb21pc2Moc3RydWN0IGVuZXRjX2h3ICpodywgY2hhciBzaV9tYXApXG4te1xuLVx0dTMyIHZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDX1BTSVBWTVIpO1xuLVxuLVx0dmFsIFx1MDAyNj0gfkVORVRDX1BTSVBWTVJfU0VUX1ZQKEVORVRDX1ZMQU5fUFJPTUlTQ19NQVBfQUxMKTtcbi1cdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDX1BTSVBWTVIsIEVORVRDX1BTSVBWTVJfU0VUX1ZQKHNpX21hcCkgfCB2YWwpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBlbmV0Y19lbmFibGVfc2lfdmxhbl9wcm9taXNjKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGludCBzaV9pZHgpXG4te1xuLVx0cGYtXHUwMDNldmxhbl9wcm9taXNjX3NpbWFwIHw9IEJJVChzaV9pZHgpO1xuLVx0ZW5ldGNfc2V0X3ZsYW5fcHJvbWlzYyhcdTAwMjZwZi1cdTAwM2VzaS1cdTAwM2VodywgcGYtXHUwMDNldmxhbl9wcm9taXNjX3NpbWFwKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgZW5ldGNfZGlzYWJsZV9zaV92bGFuX3Byb21pc2Moc3RydWN0IGVuZXRjX3BmICpwZiwgaW50IHNpX2lkeClcbi17XG4tXHRwZi1cdTAwM2V2bGFuX3Byb21pc2Nfc2ltYXAgXHUwMDI2PSB+QklUKHNpX2lkeCk7XG4tXHRlbmV0Y19zZXRfdmxhbl9wcm9taXNjKFx1MDAyNnBmLVx1MDAzZXNpLVx1MDAzZWh3LCBwZi1cdTAwM2V2bGFuX3Byb21pc2Nfc2ltYXApO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBlbmV0Y19zZXRfaXNvbF92bGFuKHN0cnVjdCBlbmV0Y19odyAqaHcsIGludCBzaSwgdTE2IHZsYW4sIHU4IHFvcylcbiB7XG4gXHR1MzIgdmFsID0gMDtcbkBAIC04MCwzNyAmIzQzOzYwLDYgQEAgc3RhdGljIHZvaWQgZW5ldGNfYWRkX21hY19hZGRyX2VtX2ZpbHRlcihzdHJ1Y3QgZW5ldGNfbWFjX2ZpbHRlciAqZmlsdGVyLFxuIFx0ZmlsdGVyLVx1MDAzZW1hY19hZGRyX2NudCYjNDM7JiM0Mzs7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGVuZXRjX2NsZWFyX21hY19odF9mbHQoc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkeCwgaW50IHR5cGUpXG4te1xuLVx0Ym9vbCBlcnIgPSBzaS1cdTAwM2VlcnJhdGEgXHUwMDI2IEVORVRDX0VSUl9VQ01DU1dQO1xuLVxuLVx0aWYgKHR5cGUgPT0gVUMpIHtcbi1cdFx0ZW5ldGNfcG9ydF93cihcdTAwMjZzaS1cdTAwM2VodywgRU5FVENfUFNJVU1IRlIwKHNpX2lkeCwgZXJyKSwgMCk7XG4tXHRcdGVuZXRjX3BvcnRfd3IoXHUwMDI2c2ktXHUwMDNlaHcsIEVORVRDX1BTSVVNSEZSMShzaV9pZHgpLCAwKTtcbi1cdH0gZWxzZSB7IC8qIE1DICovXG4tXHRcdGVuZXRjX3BvcnRfd3IoXHUwMDI2c2ktXHUwMDNlaHcsIEVORVRDX1BTSU1NSEZSMChzaV9pZHgsIGVyciksIDApO1xuLVx0XHRlbmV0Y19wb3J0X3dyKFx1MDAyNnNpLVx1MDAzZWh3LCBFTkVUQ19QU0lNTUhGUjEoc2lfaWR4KSwgMCk7XG4tXHR9XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGVuZXRjX3NldF9tYWNfaHRfZmx0KHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZHgsIGludCB0eXBlLFxuLVx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgaGFzaClcbi17XG4tXHRib29sIGVyciA9IHNpLVx1MDAzZWVycmF0YSBcdTAwMjYgRU5FVENfRVJSX1VDTUNTV1A7XG4tXG4tXHRpZiAodHlwZSA9PSBVQykge1xuLVx0XHRlbmV0Y19wb3J0X3dyKFx1MDAyNnNpLVx1MDAzZWh3LCBFTkVUQ19QU0lVTUhGUjAoc2lfaWR4LCBlcnIpLFxuLVx0XHRcdCAgICAgIGxvd2VyXzMyX2JpdHMoaGFzaCkpO1xuLVx0XHRlbmV0Y19wb3J0X3dyKFx1MDAyNnNpLVx1MDAzZWh3LCBFTkVUQ19QU0lVTUhGUjEoc2lfaWR4KSxcbi1cdFx0XHQgICAgICB1cHBlcl8zMl9iaXRzKGhhc2gpKTtcbi1cdH0gZWxzZSB7IC8qIE1DICovXG4tXHRcdGVuZXRjX3BvcnRfd3IoXHUwMDI2c2ktXHUwMDNlaHcsIEVORVRDX1BTSU1NSEZSMChzaV9pZHgsIGVyciksXG4tXHRcdFx0ICAgICAgbG93ZXJfMzJfYml0cyhoYXNoKSk7XG4tXHRcdGVuZXRjX3BvcnRfd3IoXHUwMDI2c2ktXHUwMDNlaHcsIEVORVRDX1BTSU1NSEZSMShzaV9pZHgpLFxuLVx0XHRcdCAgICAgIHVwcGVyXzMyX2JpdHMoaGFzaCkpO1xuLVx0fVxuLX1cbi1cbiBzdGF0aWMgdm9pZCBlbmV0Y19zeW5jX21hY19maWx0ZXJzKHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4ge1xuIFx0c3RydWN0IGVuZXRjX21hY19maWx0ZXIgKmYgPSBwZi1cdTAwM2VtYWNfZmlsdGVyO1xuQEAgLTEyMiwxMiAmIzQzOzcxLDE2IEBAIHN0YXRpYyB2b2lkIGVuZXRjX3N5bmNfbWFjX2ZpbHRlcnMoc3RydWN0IGVuZXRjX3BmICpwZilcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1BRERSX1RZUEU7IGkmIzQzOyYjNDM7LCBmJiM0MzsmIzQzOykge1xuIFx0XHRib29sIGVtID0gKGYtXHUwMDNlbWFjX2FkZHJfY250ID09IDEpIFx1MDAyNlx1MDAyNiAoaSA9PSBVQyk7XG4gXHRcdGJvb2wgY2xlYXIgPSAhZi1cdTAwM2VtYWNfYWRkcl9jbnQ7XG4mIzQzO1x0XHR1NjQgaGFzaDtcbiBcbiBcdFx0aWYgKGNsZWFyKSB7XG4tXHRcdFx0aWYgKGkgPT0gVUMpXG4mIzQzO1x0XHRcdGlmIChpID09IFVDKSB7XG4gXHRcdFx0XHRlbmV0Y19jbGVhcl9tYWNfZmx0X2VudHJ5KHNpLCBwb3MpO1xuJiM0MztcdFx0XHRcdGVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcihzaSwgMCwgMCk7XG4mIzQzO1x0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0ZW5ldGNfc2V0X3NpX21jX2hhc2hfZmlsdGVyKHNpLCAwLCAwKTtcbiYjNDM7XHRcdFx0fVxuIFxuLVx0XHRcdGVuZXRjX2NsZWFyX21hY19odF9mbHQoc2ksIDAsIGkpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG5AQCAtMTM1LDcgJiM0Mzs4OCw3IEBAIHN0YXRpYyB2b2lkIGVuZXRjX3N5bmNfbWFjX2ZpbHRlcnMoc3RydWN0IGVuZXRjX3BmICpwZilcbiBcdFx0aWYgKGVtKSB7XG4gXHRcdFx0aW50IGVycjtcbiBcbi1cdFx0XHRlbmV0Y19jbGVhcl9tYWNfaHRfZmx0KHNpLCAwLCBVQyk7XG4mIzQzO1x0XHRcdGVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcihzaSwgMCwgMCk7XG4gXG4gXHRcdFx0ZXJyID0gZW5ldGNfc2V0X21hY19mbHRfZW50cnkoc2ksIHBvcywgZi1cdTAwM2VtYWNfYWRkcixcbiBcdFx0XHRcdFx0XHQgICAgICBCSVQoMCkpO1xuQEAgLTE0NywxMSAmIzQzOzEwMCwxNSBAQCBzdGF0aWMgdm9pZCBlbmV0Y19zeW5jX21hY19maWx0ZXJzKHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4gXHRcdFx0XHQgZXJyKTtcbiBcdFx0fVxuIFxuJiM0MztcdFx0Yml0bWFwX3RvX2FycjY0KFx1MDAyNmhhc2gsIGYtXHUwMDNlbWFjX2hhc2hfdGFibGUsXG4mIzQzO1x0XHRcdFx0RU5FVENfTUFERFJfSEFTSF9UQkxfU1opO1xuIFx0XHQvKiBoYXNoIHRhYmxlIGZpbHRlciwgY2xlYXIgRU0gZmlsdGVyIGZvciBVQyBlbnRyaWVzICovXG4tXHRcdGlmIChpID09IFVDKVxuJiM0MztcdFx0aWYgKGkgPT0gVUMpIHtcbiBcdFx0XHRlbmV0Y19jbGVhcl9tYWNfZmx0X2VudHJ5KHNpLCBwb3MpO1xuLVxuLVx0XHRlbmV0Y19zZXRfbWFjX2h0X2ZsdChzaSwgMCwgaSwgKmYtXHUwMDNlbWFjX2hhc2hfdGFibGUpO1xuJiM0MztcdFx0XHRlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc2ksIDAsIGhhc2gpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0ZW5ldGNfc2V0X3NpX21jX2hhc2hfZmlsdGVyKHNpLCAwLCBoYXNoKTtcbiYjNDM7XHRcdH1cbiBcdH1cbiB9XG4gXG5AQCAtMTU5LDIxICYjNDM7MTE2LDE3IEBAIHN0YXRpYyB2b2lkIGVuZXRjX3BmX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIHtcbiBcdHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdHN0cnVjdCBlbmV0Y19wZiAqcGYgPSBlbmV0Y19zaV9wcml2KHByaXYtXHUwMDNlc2kpO1xuLVx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnByaXYtXHUwMDNlc2ktXHUwMDNlaHc7XG4gXHRib29sIHVwcm9tID0gZmFsc2UsIG1wcm9tID0gZmFsc2U7XG4gXHRzdHJ1Y3QgZW5ldGNfbWFjX2ZpbHRlciAqZmlsdGVyO1xuIFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcbi1cdHUzMiBwc2lwbXIgPSAwO1xuIFx0Ym9vbCBlbTtcbiBcbiBcdGlmIChuZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfUFJPTUlTQykge1xuIFx0XHQvKiBlbmFibGUgcHJvbWlzYyBtb2RlIGZvciBTSTAgKFBGKSAqL1xuLVx0XHRwc2lwbXIgPSBFTkVUQ19QU0lQTVJfU0VUX1VQKDApIHwgRU5FVENfUFNJUE1SX1NFVF9NUCgwKTtcbiBcdFx0dXByb20gPSB0cnVlO1xuIFx0XHRtcHJvbSA9IHRydWU7XG4gXHR9IGVsc2UgaWYgKG5kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9BTExNVUxUSSkge1xuIFx0XHQvKiBlbmFibGUgbXVsdGkgY2FzdCBwcm9taXNjIG1vZGUgZm9yIFNJMCAoUEYpICovXG4tXHRcdHBzaXBtciA9IEVORVRDX1BTSVBNUl9TRVRfTVAoMCk7XG4gXHRcdG1wcm9tID0gdHJ1ZTtcbiBcdH1cbiBcbkBAIC0yMTEsOSAmIzQzOzE2NCw4IEBAIHN0YXRpYyB2b2lkIGVuZXRjX3BmX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0XHQvKiB1cGRhdGUgUEYgZW50cmllcyAqL1xuIFx0XHRlbmV0Y19zeW5jX21hY19maWx0ZXJzKHBmKTtcbiBcbi1cdHBzaXBtciB8PSBlbmV0Y19wb3J0X3JkKGh3LCBFTkVUQ19QU0lQTVIpIFx1MDAyNlxuLVx0XHQgIH4oRU5FVENfUFNJUE1SX1NFVF9VUCgwKSB8IEVORVRDX1BTSVBNUl9TRVRfTVAoMCkpO1xuLVx0ZW5ldGNfcG9ydF93cihodywgRU5FVENfUFNJUE1SLCBwc2lwbXIpO1xuJiM0MztcdGVuZXRjX3NldF9zaV91Y19wcm9taXNjKHByaXYtXHUwMDNlc2ksIDAsIHVwcm9tKTtcbiYjNDM7XHRlbmV0Y19zZXRfc2lfbWNfcHJvbWlzYyhwcml2LVx1MDAzZXNpLCAwLCBtcHJvbSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGVuZXRjX3NldF9sb29wYmFjayhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgYm9vbCBlbilcbkBAIC00NjksMTIgJiM0Mzs0MjEsMTEgQEAgc3RhdGljIHZvaWQgZW5ldGNfY29uZmlndXJlX3BvcnQoc3RydWN0IGVuZXRjX3BmICpwZilcbiBcbiBcdC8qIHNwbGl0IHVwIFJGUyBlbnRyaWVzICovXG4gXHRlbmV0Y19wb3J0X2Fzc2lnbl9yZnNfZW50cmllcyhwZi1cdTAwM2VzaSk7XG4tXG4gXHQvKiBlbmZvcmNlIFZMQU4gcHJvbWlzYyBtb2RlIGZvciBhbGwgU0lzICovXG4tXHRwZi1cdTAwM2V2bGFuX3Byb21pc2Nfc2ltYXAgPSBFTkVUQ19WTEFOX1BST01JU0NfTUFQX0FMTDtcbi1cdGVuZXRjX3NldF92bGFuX3Byb21pc2MoaHcsIHBmLVx1MDAzZXZsYW5fcHJvbWlzY19zaW1hcCk7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHBmLVx1MDAzZXRvdGFsX3ZmcyAmIzQzOyAxOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGVuZXRjX3NldF9zaV92bGFuX3Byb21pc2MocGYtXHUwMDNlc2ksIGksIHRydWUpO1xuIFxuLVx0ZW5ldGNfcG9ydF93cihodywgRU5FVENfUFNJUE1SLCAwKTtcbiYjNDM7XHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQ19QU0lQTU1SLCAwKTtcbiBcbiBcdC8qIGVuYWJsZSBwb3J0ICovXG4gXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQ19QTVIsIEVORVRDX1BNUl9FTik7XG5AQCAtNDk0LDEyICYjNDM7NDQ1LDkgQEAgc3RhdGljIGludCBlbmV0Y19wZl9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHR9XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSB7XG4tXHRcdHN0cnVjdCBlbmV0Y19wZiAqcGYgPSBlbmV0Y19zaV9wcml2KHByaXYtXHUwMDNlc2kpO1xuJiM0MztcdFx0Ym9vbCBwcm9taXNjID0gIShmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKTtcbiBcbi1cdFx0aWYgKCEhKGZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpKVxuLVx0XHRcdGVuZXRjX2Rpc2FibGVfc2lfdmxhbl9wcm9taXNjKHBmLCAwKTtcbi1cdFx0ZWxzZVxuLVx0XHRcdGVuZXRjX2VuYWJsZV9zaV92bGFuX3Byb21pc2MocGYsIDApO1xuJiM0MztcdFx0ZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzYyhwcml2LVx1MDAzZXNpLCAwLCBwcm9taXNjKTtcbiBcdH1cbiBcbiBcdGlmIChjaGFuZ2VkIFx1MDAyNiBORVRJRl9GX0xPT1BCQUNLKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmhcbmluZGV4IDI4NWI3ZTVjNDhmZGM3Li41NmQyM2E4YTExYTA2MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuaFxuQEAgLTE3LDEyICYjNDM7MTcsOSBAQCBzdHJ1Y3QgZW5ldGNfdmZfc3RhdGUge1xuIH07XG4gXG4gc3RydWN0IGVuZXRjX3BvcnRfY2FwcyB7XG4tXHR1MzIgaGFsZl9kdXBsZXg6MTtcbi1cdGludCBudW1fdnNpO1xuIFx0aW50IG51bV9tc2l4O1xuIFx0aW50IG51bV9yeF9iZHI7XG4gXHRpbnQgbnVtX3R4X2Jkcjtcbi1cdGludCBtYWNfZmlsdGVyX251bTtcbiB9O1xuIFxuIHN0cnVjdCBlbmV0Y19wZjtcbkBAIC00Nyw3ICYjNDM7NDQsNiBAQCBzdHJ1Y3QgZW5ldGNfcGYge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IG1zZ190YXNrO1xuIFx0Y2hhciBtc2dfaW50X25hbWVbRU5FVENfSU5UX05BTUVfTUFYXTtcbiBcbi1cdGNoYXIgdmxhbl9wcm9taXNjX3NpbWFwOyAvKiBiaXRtYXAgb2YgU0lzIGluIFZMQU4gcHJvbWlzYyBtb2RlICovXG4gXHRERUNMQVJFX0JJVE1BUCh2bGFuX2h0X2ZpbHRlciwgRU5FVENfVkxBTl9IVF9TSVpFKTtcbiBcdERFQ0xBUkVfQklUTUFQKGFjdGl2ZV92bGFucywgVkxBTl9OX1ZJRCk7XG4gXG5AQCAtNjAsOCAmIzQzOzU2LDYgQEAgc3RydWN0IGVuZXRjX3BmIHtcbiBcbiBcdHN0cnVjdCBlbmV0Y19wb3J0X2NhcHMgY2FwcztcbiBcdGNvbnN0IHN0cnVjdCBlbmV0Y19wZl9vcHMgKm9wcztcbi1cbi1cdGludCBudW1fbWZlO1x0LyogbnVtYmVyIG9mIG1hYyBhZGRyZXNzIGZpbHRlciB0YWJsZSBlbnRyaWVzICovXG4gfTtcbiBcbiAjZGVmaW5lIHBoeWxpbmtfdG9fZW5ldGNfcGYoY29uZmlnKSBcXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uY1xuaW5kZXggNmU1ZDJmODY5OTE1MGIuLmQzMmExOTVhMDRjOTdlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmNcbkBAIC0xLDUgJiM0MzsxLDUgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAmIzQzOyBPUiBCU0QtMy1DbGF1c2UpXG4tLyogQ29weXJpZ2h0IDIwMjQgTlhQICovXG4mIzQzOy8qIENvcHlyaWdodCAyMDI0LTIwMjYgTlhQICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZnNsL2VuZXRjX21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX21kaW8uaFx1MDAzZVxuQEAgLTg3LDYgJiM0Mzs4NywxMTIgQEAgaW50IGVuZXRjX3NldHVwX21hY19hZGRyZXNzZXMoc3RydWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IGVuZXRjX3BmICpwZilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfc2V0dXBfbWFjX2FkZHJlc3Nlcyk7XG4gXG4mIzQzO3ZvaWQgZW5ldGNfc2V0X3NpX3VjX3Byb21pc2Moc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCBib29sIHByb21pc2MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXHUwMDI2c2ktXHUwMDNlaHc7XG4mIzQzO1x0aW50IHBzaXBtbXJfb2ZmO1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1xuJiM0MztcdGlmIChpc19lbmV0Y19yZXYxKHNpKSlcbiYjNDM7XHRcdHBzaXBtbXJfb2ZmID0gRU5FVENfUFNJUE1NUjtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRwc2lwbW1yX29mZiA9IEVORVRDNF9QU0lQTU1SO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBwc2lwbW1yX29mZik7XG4mIzQzO1xuJiM0MztcdGlmIChwcm9taXNjKVxuJiM0MztcdFx0dmFsIHw9IFBTSVBNTVJfU0lfTUFDX1VQKHNpX2lkKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR2YWwgXHUwMDI2PSB+UFNJUE1NUl9TSV9NQUNfVVAoc2lfaWQpO1xuJiM0MztcbiYjNDM7XHRlbmV0Y19wb3J0X3dyKGh3LCBwc2lwbW1yX29mZiwgdmFsKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChlbmV0Y19zZXRfc2lfdWNfcHJvbWlzYyk7XG4mIzQzO1xuJiM0Mzt2b2lkIGVuZXRjX3NldF9zaV9tY19wcm9taXNjKHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZCwgYm9vbCBwcm9taXNjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnNpLVx1MDAzZWh3O1xuJiM0MztcdGludCBwc2lwbW1yX29mZjtcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcbiYjNDM7XHRpZiAoaXNfZW5ldGNfcmV2MShzaSkpXG4mIzQzO1x0XHRwc2lwbW1yX29mZiA9IEVORVRDX1BTSVBNTVI7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cHNpcG1tcl9vZmYgPSBFTkVUQzRfUFNJUE1NUjtcbiYjNDM7XG4mIzQzO1x0dmFsID0gZW5ldGNfcG9ydF9yZChodywgcHNpcG1tcl9vZmYpO1xuJiM0MztcbiYjNDM7XHRpZiAocHJvbWlzYylcbiYjNDM7XHRcdHZhbCB8PSBQU0lQTU1SX1NJX01BQ19NUChzaV9pZCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dmFsIFx1MDAyNj0gflBTSVBNTVJfU0lfTUFDX01QKHNpX2lkKTtcbiYjNDM7XG4mIzQzO1x0ZW5ldGNfcG9ydF93cihodywgcHNpcG1tcl9vZmYsIHZhbCk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfc2V0X3NpX21jX3Byb21pc2MpO1xuJiM0MztcbiYjNDM7dm9pZCBlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCB1NjQgaGFzaClcbiYjNDM7e1xuJiM0MztcdGludCBwc2l1bWhmcjBfb2ZmLCBwc2l1bWhmcjFfb2ZmO1xuJiM0MztcdHN0cnVjdCBlbmV0Y19odyAqaHcgPSBcdTAwMjZzaS1cdTAwM2VodztcbiYjNDM7XG4mIzQzO1x0aWYgKGlzX2VuZXRjX3JldjEoc2kpKSB7XG4mIzQzO1x0XHRib29sIGVyciA9IHNpLVx1MDAzZWVycmF0YSBcdTAwMjYgRU5FVENfRVJSX1VDTUNTV1A7XG4mIzQzO1xuJiM0MztcdFx0cHNpdW1oZnIwX29mZiA9IEVORVRDX1BTSVVNSEZSMChzaV9pZCwgZXJyKTtcbiYjNDM7XHRcdHBzaXVtaGZyMV9vZmYgPSBFTkVUQ19QU0lVTUhGUjEoc2lfaWQpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRwc2l1bWhmcjBfb2ZmID0gRU5FVEM0X1BTSVVNSEZSMChzaV9pZCk7XG4mIzQzO1x0XHRwc2l1bWhmcjFfb2ZmID0gRU5FVEM0X1BTSVVNSEZSMShzaV9pZCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlbmV0Y19wb3J0X3dyKGh3LCBwc2l1bWhmcjBfb2ZmLCBsb3dlcl8zMl9iaXRzKGhhc2gpKTtcbiYjNDM7XHRlbmV0Y19wb3J0X3dyKGh3LCBwc2l1bWhmcjFfb2ZmLCB1cHBlcl8zMl9iaXRzKGhhc2gpKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIpO1xuJiM0MztcbiYjNDM7dm9pZCBlbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCB1NjQgaGFzaClcbiYjNDM7e1xuJiM0MztcdGludCBwc2ltbWhmcjBfb2ZmLCBwc2ltbWhmcjFfb2ZmO1xuJiM0MztcdHN0cnVjdCBlbmV0Y19odyAqaHcgPSBcdTAwMjZzaS1cdTAwM2VodztcbiYjNDM7XG4mIzQzO1x0aWYgKGlzX2VuZXRjX3JldjEoc2kpKSB7XG4mIzQzO1x0XHRib29sIGVyciA9IHNpLVx1MDAzZWVycmF0YSBcdTAwMjYgRU5FVENfRVJSX1VDTUNTV1A7XG4mIzQzO1xuJiM0MztcdFx0cHNpbW1oZnIwX29mZiA9IEVORVRDX1BTSU1NSEZSMChzaV9pZCwgZXJyKTtcbiYjNDM7XHRcdHBzaW1taGZyMV9vZmYgPSBFTkVUQ19QU0lNTUhGUjEoc2lfaWQpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRwc2ltbWhmcjBfb2ZmID0gRU5FVEM0X1BTSU1NSEZSMChzaV9pZCk7XG4mIzQzO1x0XHRwc2ltbWhmcjFfb2ZmID0gRU5FVEM0X1BTSU1NSEZSMShzaV9pZCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlbmV0Y19wb3J0X3dyKGh3LCBwc2ltbWhmcjBfb2ZmLCBsb3dlcl8zMl9iaXRzKGhhc2gpKTtcbiYjNDM7XHRlbmV0Y19wb3J0X3dyKGh3LCBwc2ltbWhmcjFfb2ZmLCB1cHBlcl8zMl9iaXRzKGhhc2gpKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChlbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXIpO1xuJiM0MztcbiYjNDM7dm9pZCBlbmV0Y19zZXRfc2lfdmxhbl9wcm9taXNjKHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZCwgYm9vbCBwcm9taXNjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnNpLVx1MDAzZWh3O1xuJiM0MztcdGludCBwc2lwdm1yX29mZjtcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcbiYjNDM7XHRpZiAoaXNfZW5ldGNfcmV2MShzaSkpXG4mIzQzO1x0XHRwc2lwdm1yX29mZiA9IEVORVRDX1BTSVBWTVI7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cHNpcHZtcl9vZmYgPSBFTkVUQzRfUFNJUFZNUjtcbiYjNDM7XG4mIzQzO1x0dmFsID0gZW5ldGNfcG9ydF9yZChodywgcHNpcHZtcl9vZmYpO1xuJiM0MztcbiYjNDM7XHRpZiAocHJvbWlzYylcbiYjNDM7XHRcdHZhbCB8PSBQU0lQVk1SX1NJX1ZMQU5fUChzaV9pZCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dmFsIFx1MDAyNj0gflBTSVBWTVJfU0lfVkxBTl9QKHNpX2lkKTtcbiYjNDM7XG4mIzQzO1x0ZW5ldGNfcG9ydF93cihodywgcHNpcHZtcl9vZmYsIHZhbCk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzYyk7XG4mIzQzO1xuIHZvaWQgZW5ldGNfcGZfbmV0ZGV2X3NldHVwKHN0cnVjdCBlbmV0Y19zaSAqc2ksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqbmRldl9vcHMpXG4ge1xuQEAgLTI3NSw3ICYjNDM7MzgxLDggQEAgc3RhdGljIGJvb2wgZW5ldGNfcG9ydF9oYXNfcGNzKHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4gXHRyZXR1cm4gKHBmLVx1MDAzZWlmX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJIHx8XG4gXHRcdHBmLVx1MDAzZWlmX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCB8fFxuIFx0XHRwZi1cdTAwM2VpZl9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVggfHxcbi1cdFx0cGYtXHUwMDNlaWZfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSk7XG4mIzQzO1x0XHRwZi1cdTAwM2VpZl9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJIHx8XG4mIzQzO1x0XHRwZi1cdTAwM2VpZl9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUik7XG4gfVxuIFxuIGludCBlbmV0Y19tZGlvYnVzX2NyZWF0ZShzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG5AQCAtMzE2LDI1ICYjNDM7NDIzLDQyIEBAIGludCBlbmV0Y19waHlsaW5rX2NyZWF0ZShzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXG4ge1xuIFx0c3RydWN0IGVuZXRjX3BmICpwZiA9IGVuZXRjX3NpX3ByaXYocHJpdi1cdTAwM2VzaSk7XG4gXHRzdHJ1Y3QgcGh5bGluayAqcGh5bGluaztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG1hY19jYXBzO1xuIFx0aW50IGVycjtcbiBcbiBcdHBmLVx1MDAzZXBoeWxpbmtfY29uZmlnLmRldiA9IFx1MDAyNnByaXYtXHUwMDNlbmRldi1cdTAwM2VkZXY7XG4gXHRwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZy50eXBlID0gUEhZTElOS19ORVRERVY7XG4tXHRwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzID0gTUFDX0FTWU1fUEFVU0UgfCBNQUNfU1lNX1BBVVNFIHxcbi1cdFx0TUFDXzEwIHwgTUFDXzEwMCB8IE1BQ18xMDAwIHwgTUFDXzI1MDBGRDtcbiBcbiBcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwsXG4gXHRcdCAgcGYtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuLVx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSxcbi1cdFx0ICBwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4tXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCxcbi1cdFx0ICBwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4tXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWCxcbi1cdFx0ICBwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4tXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUksXG4tXHRcdCAgcGYtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuLVx0cGh5X2ludGVyZmFjZV9zZXRfcmdtaWkocGYtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuIFxuJiM0MztcdG1hY19jYXBzID0gTUFDX0FTWU1fUEFVU0UgfCBNQUNfU1lNX1BBVVNFO1xuJiM0MztcdGlmICghZW5ldGNfaXNfcHNldWRvX21hYyhwcml2LVx1MDAzZXNpKSkge1xuJiM0MztcdFx0bWFjX2NhcHMgfD0gTUFDXzEwIHwgTUFDXzEwMCB8IE1BQ18xMDAwRkQgfCBNQUNfMjUwMEZEO1xuJiM0MztcbiYjNDM7XHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfU0dNSUksXG4mIzQzO1x0XHRcdCAgcGYtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuJiM0MztcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgsXG4mIzQzO1x0XHRcdCAgcGYtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuJiM0MztcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVgsXG4mIzQzO1x0XHRcdCAgcGYtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuJiM0MztcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJLFxuJiM0MztcdFx0XHQgIHBmLVx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWlzX2VuZXRjX3JldjEocHJpdi1cdTAwM2VzaSkpIHtcbiYjNDM7XHRcdFx0bWFjX2NhcHMgfD0gTUFDXzUwMDBGRCB8IE1BQ18xMDAwMEZEO1xuJiM0MztcdFx0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSLFxuJiM0MztcdFx0XHRcdCAgcGYtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHBoeV9pbnRlcmZhY2Vfc2V0X3JnbWlpKHBmLVx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0bWFjX2NhcHMgfD0gTUFDXzEwRkQgfCBNQUNfMTAwRkQgfCBNQUNfMTAwMEZEIHwgTUFDXzI1MDBGRCB8XG4mIzQzO1x0XHRcdCAgICBNQUNfNTAwMEZEIHwgTUFDXzEwMDAwRkQgfCBNQUNfMjAwMDBGRCB8XG4mIzQzO1x0XHRcdCAgICBNQUNfMjUwMDBGRDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBmLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgPSBtYWNfY2FwcztcbiBcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcdTAwMjZwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZywgb2ZfZndub2RlX2hhbmRsZShub2RlKSxcbiBcdFx0XHRcdCBwZi1cdTAwM2VpZl9tb2RlLCBvcHMpO1xuIFx0aWYgKElTX0VSUihwaHlsaW5rKSkge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uaFxuaW5kZXggNTdkMmUwZWJkMmIwYmIuLjgyNDNjZTBkZTU3ZjY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmhcbkBAIC0xNyw2ICYjNDM7MTcsMTEgQEAgdm9pZCBlbmV0Y19zZXRfZGVmYXVsdF9yc3Nfa2V5KHN0cnVjdCBlbmV0Y19wZiAqcGYpO1xuIGludCBlbmV0Y192bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIF9fYmUxNiBwcm90LCB1MTYgdmlkKTtcbiBpbnQgZW5ldGNfdmxhbl9yeF9kZWxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBfX2JlMTYgcHJvdCwgdTE2IHZpZCk7XG4gaW50IGVuZXRjX2luaXRfc3Jpb3ZfcmVzb3VyY2VzKHN0cnVjdCBlbmV0Y19wZiAqcGYpO1xuJiM0Mzt2b2lkIGVuZXRjX3NldF9zaV91Y19wcm9taXNjKHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZCwgYm9vbCBwcm9taXNjKTtcbiYjNDM7dm9pZCBlbmV0Y19zZXRfc2lfbWNfcHJvbWlzYyhzdHJ1Y3QgZW5ldGNfc2kgKnNpLCBpbnQgc2lfaWQsIGJvb2wgcHJvbWlzYyk7XG4mIzQzO3ZvaWQgZW5ldGNfc2V0X3NpX3VjX2hhc2hfZmlsdGVyKHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZCwgdTY0IGhhc2gpO1xuJiM0Mzt2b2lkIGVuZXRjX3NldF9zaV9tY19oYXNoX2ZpbHRlcihzdHJ1Y3QgZW5ldGNfc2kgKnNpLCBpbnQgc2lfaWQsIHU2NCBoYXNoKTtcbiYjNDM7dm9pZCBlbmV0Y19zZXRfc2lfdmxhbl9wcm9taXNjKHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZCwgYm9vbCBwcm9taXNjKTtcbiBcbiBzdGF0aWMgaW5saW5lIHUxNiBlbmV0Y19nZXRfaXBfcmV2aXNpb24oc3RydWN0IGVuZXRjX2h3ICpodylcbiB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3Fvcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3Fvcy5jXG5pbmRleCA3YjE3YmNhMjRmMjYwZi4uMmFhMGZjYWFmY2QyM2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcW9zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19xb3MuY1xuQEAgLTExMzUsNyAmIzQzOzExMzUsNiBAQCBzdGF0aWMgaW50IGVuZXRjX3BzZnBfcGFyc2VfY2xzZmxvd2VyKHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYsXG4gXHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmVudHJ5O1xuIFx0c3RydWN0IGFjdGlvbl9nYXRlX2VudHJ5ICplO1xuIFx0dTggc2ZpX292ZXJ3cml0ZSA9IDA7XG4tXHRpbnQgZW50cmllc19zaXplO1xuIFx0aW50IGksIGVycjtcbiBcbiBcdGlmIChmLVx1MDAzZWNvbW1vbi5jaGFpbl9pbmRleCBcdTAwM2U9IHByaXYtXHUwMDNlcHNmcF9jYXAubWF4X3N0cmVhbWlkKSB7XG5AQCAtMTI0Miw4ICYjNDM7MTI0MSw3IEBAIHN0YXRpYyBpbnQgZW5ldGNfcHNmcF9wYXJzZV9jbHNmbG93ZXIoc3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdixcbiBcdFx0Z290byBmcmVlX2ZpbHRlcjtcbiBcdH1cbiBcbi1cdGVudHJpZXNfc2l6ZSA9IHN0cnVjdF9zaXplKHNnaSwgZW50cmllcywgZW50cnlnLVx1MDAzZWdhdGUubnVtX2VudHJpZXMpO1xuLVx0c2dpID0ga3phbGxvYyhlbnRyaWVzX3NpemUsIEdGUF9LRVJORUwpO1xuJiM0MztcdHNnaSA9IGt6YWxsb2NfZmxleCgqc2dpLCBlbnRyaWVzLCBlbnRyeWctXHUwMDNlZ2F0ZS5udW1fZW50cmllcyk7XG4gXHRpZiAoIXNnaSkge1xuIFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIGZyZWVfZmlsdGVyO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y192Zi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3ZmLmNcbmluZGV4IDljZGIwYTRkNmJhZmI3Li43ZGNiNGEwMjQ2ZjUyOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y192Zi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfdmYuY1xuQEAgLTMxNyw3ICYjNDM7MzE3LDE0IEBAIHN0YXRpYyBpbnQgZW5ldGNfdmZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXG4gXHRlbmV0Y19nZXRfc2lfY2FwcyhzaSk7XG4gXG4tXHRuZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXEoc2l6ZW9mKCpwcml2KSwgRU5FVENfTUFYX05VTV9UWFFTKTtcbiYjNDM7XHQvKiBDdXJyZW50bHksIHRoZSBzdXBwb3J0ZWQgU29DcyBoYXZlIGEgbWF4IG9mIDYgQ1BVcyBhbmQgdGhlIFZGc1xuJiM0MztcdCAqIGhhdmUgbGVzcyB0aGFuIDYgUlgvVFggcmluZ3MuIFNvIG5vIGlzc3VlcyBmb3IgdGhlc2Ugc3VwcG9ydGVkXG4mIzQzO1x0ICogU29DcywgYnV0IGZvciBmdXR1cmUgU29DcyB3aGljaCBoYXZlIG1vcmUgQ1BVcyBvciBtb3JlIFRYL1JYXG4mIzQzO1x0ICogcmluZ3MsIGFsbCB0aGUgcmVsYXRlZCBsb2dpYyBuZWVkcyB0byBiZSBpbXByb3ZlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRuZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXFzKHNpemVvZigqcHJpdiksXG4mIzQzO1x0XHRcdFx0ICBtaW4oc2ktXHUwMDNlbnVtX3R4X3JpbmdzLCBFTkVUQ19NQVhfTlVNX1RYUVMpLFxuJiM0MztcdFx0XHRcdCAgbWluKHNpLVx1MDAzZW51bV9yeF9yaW5ncywgRU5FVENfTUFYX05VTV9UWFFTKSk7XG4gXHRpZiAoIW5kZXYpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7bmV0ZGV2IGNyZWF0aW9uIGZhaWxlZFxcblwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc2wvbnRtcC5oIGIvaW5jbHVkZS9saW51eC9mc2wvbnRtcC5oXG5pbmRleCBkM2I2YzQ3NmI5MWEyZC4uNzY0ZWYyODkyNjA4NWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzbC9udG1wLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnNsL250bXAuaFxuQEAgLTc1LDggJiM0Mzs3NSwxMCBAQCBzdHJ1Y3QgbnRtcF91c2VyIHtcbiBcdC8qIE5UTVAgdGFibGUgYml0bWFwcyBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCAqL1xuIFx0dTMyIGV0dF9iaXRtYXBfc2l6ZTtcbiBcdHUzMiBlY3RfYml0bWFwX3NpemU7XG4mIzQzO1x0dTE2IG1hZnRfbnVtX2VudHJpZXM7XG4gXHR1bnNpZ25lZCBsb25nICpldHRfZ2lkX2JpdG1hcDsgLyogb25seSB2YWxpZCBmb3Igc3dpdGNoICovXG4gXHR1bnNpZ25lZCBsb25nICplY3RfZ2lkX2JpdG1hcDsgLyogb25seSB2YWxpZCBmb3Igc3dpdGNoICovXG4mIzQzO1x0dW5zaWduZWQgbG9uZyAqbWFmdF9laWRfYml0bWFwOyAvKiBvbmx5IHZhbGlkIGZvciBFTkVUQyAqL1xuIH07XG4gXG4gc3RydWN0IG1hZnRfZW50cnlfZGF0YSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDM6MDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlNMX0VORVRDJiMzNDssCiAgICAmIzM0O05YUF9FTkVUQzQmIzM0OywKICAgICYjMzQ7RlNMX0VORVRDX1ZGJiMzNDssCiAgICAmIzM0O0ZTTF9FTkVUQ19RT1MmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbmV0YzRfcGZfc2V0X3J4X21vZGUmIzM0OywKICAgICYjMzQ7ZW5ldGNfcGZfc2V0X3J4X21vZGUmIzM0OywKICAgICYjMzQ7ZW5ldGM0X3BmX3NldF9tYWNfZmlsdGVyJiMzNDssCiAgICAmIzM0O2VuZXRjNF9wZl9zZXRfdWNfZXhhY3RfZmlsdGVyJiMzNDssCiAgICAmIzM0O2VuZXRjNF9wZl9hZGRfbWFmdF9lbnRyaWVzJiMzNDssCiAgICAmIzM0O2VuZXRjX3N5bmNfbWFjX2ZpbHRlcnMmIzM0OywKICAgICYjMzQ7ZW5ldGNfc2V0X3NpX3VjX3Byb21pc2MmIzM0OywKICAgICYjMzQ7ZW5ldGNfc2V0X3NpX21jX3Byb21pc2MmIzM0OywKICAgICYjMzQ7ZW5ldGNfc2V0X3NpX3VjX2hhc2hfZmlsdGVyJiMzNDssCiAgICAmIzM0O2VuZXRjX3NldF9zaV9tY19oYXNoX2ZpbHRlciYjMzQ7LAogICAgJiMzNDtlbmV0Y19zZXRfc2lfdmxhbl9wcm9taXNjJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgRU5FVEMgZHJpdmVyIHRvIHVzZSB0aGUgbmV3IGBuZG9fc2V0X3J4X21vZGVfYXN5bmNgIG5ldF9kZXZpY2Vfb3BzIG1lbWJlciBpbnN0ZWFkIG9mIGEgY3VzdG9tIHdvcmtxdWV1ZSBmb3Igc2V0dGluZyB0aGUgUlggbW9kZS4gSXQgYWxzbyBtb2RpZmllcyBNQUMgYW5kIFZMQU4gZmlsdGVyaW5nIGxvZ2ljIGluIHRoZSBQRiBkcml2ZXJzIChgZW5ldGM0X3BmLmNgIGFuZCBgZW5ldGNfcGYuY2ApLCBhbmQgaW50cm9kdWNlcyBjb21tb24gaGVscGVyIGZ1bmN0aW9ucyBmb3IgcHJvbWlzY3VvdXMgbW9kZSBhbmQgaGFzaCBmaWx0ZXJzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZiMTM5ZTQ3MmQ5MGE3OGFlZDMwYWRhMjI2MTU3NGFkZWUyYzI5NjYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyMCAwMzowMDoxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Yy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjLmgKaW5kZXggMDRhNWRkNWVhNmM3NGMuLjg4MzljZmI0OWJjZmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGMuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGMuaApAQCAtMSw1ICYjNDM7MSw1IEBACiAvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAmIzQzOyBPUiBCU0QtMy1DbGF1c2UpICovCi0vKiBDb3B5cmlnaHQgMjAxNy0yMDE5IE5YUCAqLwomIzQzOy8qIENvcHlyaWdodCAyMDE3LTIwMTksIDIwMjUtMjAyNiBOWFAgKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L3RpbWVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGNpLmgmZ3Q7CkBAIC0zMjQsOCAmIzQzOzMyNCw2IEBAIHN0cnVjdCBlbmV0Y19zaSB7CiAJY29uc3Qgc3RydWN0IGVuZXRjX2RydmRhdGEgKmRydmRhdGE7CiAJY29uc3Qgc3RydWN0IGVuZXRjX3NpX29wcyAqb3BzOwogCi0Jc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtxdWV1ZTsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcnhfbW9kZV90YXNrOwogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdDsKIAlzdHJ1Y3QgZW5ldGNfbXNnX3N3YmQgbXNnOyAvKiBPbmx5IHZhbGlkIGZvciBWU0kgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfZGVidWdmcy5jCmluZGV4IDFiMTU5MWRjZTczZDRiLi41MDI5MDM4YmY5OWZhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9kZWJ1Z2ZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9kZWJ1Z2ZzLmMKQEAgLTI4LDE1ICYjNDM7MjgsMTQgQEAgc3RhdGljIHZvaWQgZW5ldGNfc2hvd19zaV9tYWNfaGFzaF9maWx0ZXIoc3RydWN0IHNlcV9maWxlICpzLCBpbnQgaSkKIAogc3RhdGljIGludCBlbmV0Y19tYWNfZmlsdGVyX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBlbmV0Y19zaSAqc2kgPSBzLSZndDtwcml2YXRlOwotCXN0cnVjdCBlbmV0Y19odyAqaHcgPSAmYW1wO3NpLSZndDtodzsKJiM0MzsJc3RydWN0IGVuZXRjX3BmICpwZiA9IGVuZXRjX3NpX3ByaXYocy0mZ3Q7cHJpdmF0ZSk7CiYjNDM7CXN0cnVjdCBlbmV0Y19odyAqaHcgPSAmYW1wO3BmLSZndDtzaS0mZ3Q7aHc7CiYjNDM7CWludCBudW1fc2kgPSBwZi0mZ3Q7dG90YWxfdmZzICYjNDM7IDE7CiAJc3RydWN0IG1hZnRfZW50cnlfZGF0YSBtYWZ0OwotCXN0cnVjdCBlbmV0Y19wZiAqcGY7Ci0JaW50IGksIGVyciwgbnVtX3NpOwotCXUzMiB2YWw7Ci0KLQlwZiA9IGVuZXRjX3NpX3ByaXYoc2kpOwotCW51bV9zaSA9IHBmLSZndDtjYXBzLm51bV92c2kgJiM0MzsgMTsKJiM0MzsJc3RydWN0IG50bXBfdXNlciAqdXNlcjsKJiM0MzsJdTMyIHZhbCwgZW50cnlfaWQ7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwlpbnQgaTsKIAogCXZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDNF9QU0lQTU1SKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3NpOyBpJiM0MzsmIzQzOykgewpAQCAtNTAsMzEgJiM0Mzs0OSwzOCBAQCBzdGF0aWMgaW50IGVuZXRjX21hY19maWx0ZXJfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpCiAJZm9yIChpID0gMDsgaSAmbHQ7IG51bV9zaTsgaSYjNDM7JiM0MzspCiAJCWVuZXRjX3Nob3dfc2lfbWFjX2hhc2hfZmlsdGVyKHMsIGkpOwogCi0JaWYgKCFwZi0mZ3Q7bnVtX21mZSkKLQkJcmV0dXJuIDA7CiYjNDM7CXVzZXIgPSAmYW1wO3BmLSZndDtzaS0mZ3Q7bnRtcF91c2VyOwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsKJiM0MzsJaWYgKGJpdG1hcF9lbXB0eSh1c2VyLSZndDttYWZ0X2VpZF9iaXRtYXAsIHVzZXItJmd0O21hZnRfbnVtX2VudHJpZXMpKQomIzQzOwkJZ290byB1bmxvY2tfcnRubDsKIAogCS8qIE1BQyBhZGRyZXNzIGZpbHRlciB0YWJsZSAqLwogCXNlcV9wdXRzKHMsICYjMzQ7TUFDIGFkZHJlc3MgZmlsdGVyIHRhYmxlXG4mIzM0Oyk7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IHBmLSZndDtudW1fbWZlOyBpJiM0MzsmIzQzOykgewomIzQzOwlmb3JfZWFjaF9zZXRfYml0KGVudHJ5X2lkLCB1c2VyLSZndDttYWZ0X2VpZF9iaXRtYXAsCiYjNDM7CQkJIHVzZXItJmd0O21hZnRfbnVtX2VudHJpZXMpIHsKIAkJbWVtc2V0KCZhbXA7bWFmdCwgMCwgc2l6ZW9mKG1hZnQpKTsKLQkJZXJyID0gbnRtcF9tYWZ0X3F1ZXJ5X2VudHJ5KCZhbXA7c2ktJmd0O250bXBfdXNlciwgaSwgJmFtcDttYWZ0KTsKJiM0MzsJCWVyciA9IG50bXBfbWFmdF9xdWVyeV9lbnRyeSh1c2VyLCBlbnRyeV9pZCwgJmFtcDttYWZ0KTsKIAkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7CiYjNDM7CQkJZ290byB1bmxvY2tfcnRubDsKIAotCQlzZXFfcHJpbnRmKHMsICYjMzQ7RW50cnkgJWQsIE1BQzogJXBNLCBTSSBiaXRtYXA6IDB4JTA0eFxuJiMzNDssIGksCi0JCQkgICBtYWZ0LmtleWUubWFjX2FkZHIsIGxlMTZfdG9fY3B1KG1hZnQuY2ZnZS5zaV9iaXRtYXApKTsKJiM0MzsJCXNlcV9wcmludGYocywgJiMzNDtFbnRyeSAlZCwgTUFDOiAlcE0sIFNJIGJpdG1hcDogMHglMDR4XG4mIzM0OywKJiM0MzsJCQkgICBlbnRyeV9pZCwgbWFmdC5rZXllLm1hY19hZGRyLAomIzQzOwkJCSAgIGxlMTZfdG9fY3B1KG1hZnQuY2ZnZS5zaV9iaXRtYXApKTsKIAl9CiAKLQlyZXR1cm4gMDsKJiM0Mzt1bmxvY2tfcnRubDoKJiM0MzsJcnRubF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIERFRklORV9TSE9XX0FUVFJJQlVURShlbmV0Y19tYWNfZmlsdGVyKTsKIAogdm9pZCBlbmV0Y19jcmVhdGVfZGVidWdmcyhzdHJ1Y3QgZW5ldGNfc2kgKnNpKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gc2ktJmd0O25kZXY7CiAJc3RydWN0IGRlbnRyeSAqcm9vdDsKIAotCXJvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIobmV0ZGV2X25hbWUobmRldiksIE5VTEwpOwomIzQzOwlyb290ID0gZGVidWdmc19jcmVhdGVfZGlyKHBjaV9uYW1lKHNpLSZndDtwZGV2KSwgTlVMTCk7CiAJaWYgKElTX0VSUihyb290KSkKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X2h3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X2h3LmgKaW5kZXggZjE4NDM3NTU2YTBlZTIuLjA5MDI1ZTdhMmEzYWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X2h3LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9ody5oCkBAIC02OSw4ICYjNDM7NjksNiBAQAogCiAvKiBQb3J0IFN0YXRpb24gaW50ZXJmYWNlIHByb21pc2N1b3VzIE1BQyBtb2RlIHJlZ2lzdGVyICovCiAjZGVmaW5lIEVORVRDNF9QU0lQTU1SCQkJMHgyMDAKLSNkZWZpbmUgIFBTSVBNTVJfU0lfTUFDX1VQKGEpCQlCSVQoYSkgLyogYSA9IFNJIGluZGV4ICovCi0jZGVmaW5lICBQU0lQTU1SX1NJX01BQ19NUChhKQkJQklUKChhKSAmIzQzOyAxNikKIAogLyogUG9ydCBTdGF0aW9uIGludGVyZmFjZSBwcm9taXNjdW91cyBWTEFOIG1vZGUgcmVnaXN0ZXIgKi8KICNkZWZpbmUgRU5FVEM0X1BTSVBWTVIJCQkweDIwNApAQCAtMTM3LDcgJiM0MzsxMzUsNiBAQAogI2RlZmluZSBFTkVUQzRfUFNJVkhGUjEoYSkJCSgoYSkgKiAweDgwICYjNDM7IDB4MjA2NCkKIAogI2RlZmluZSBFTkVUQzRfUE1DQVBSCQkJMHg0MDA0Ci0jZGVmaW5lICBQTUNBUFJfSEQJCQlCSVQoOCkKICNkZWZpbmUgIFBNQ0FQUl9GUAkJCUdFTk1BU0soMTAsIDkpCiAKIC8qIFBvcnQgY2FwYWJpbGl0eSByZWdpc3RlciAqLwpAQCAtMTUwLDcgJiM0MzsxNDcsNyBAQAogI2RlZmluZSAgUENSX0wyRE9TRQkJCUJJVCg0KQogI2RlZmluZSAgUENSX1RJTUVSX0NTCQkJQklUKDgpCiAjZGVmaW5lICBQQ1JfUFNQRUVECQkJR0VOTUFTSygyOSwgMTYpCi0jZGVmaW5lICBQQ1JfUFNQRUVEX1ZBTChzcGVlZCkJCSgoKHNwZWVkKSAvIDEwIC0gMSkgJmx0OyZsdDsgMTYpCiYjNDM7I2RlZmluZSAgUENSX1BTUEVFRF9WQUwocykJCUZJRUxEX1BSRVAoUENSX1BTUEVFRCwgKChzKSAvIDEwIC0gMSkpCiAKIC8qIFBvcnQgTUFDIGFkZHJlc3MgcmVnaXN0ZXIgMC8xICovCiAjZGVmaW5lIEVORVRDNF9QTUFSMAkJCTB4NDAyMApAQCAtMjAwLDcgJiM0MzsxOTcsNiBAQAogI2RlZmluZSAgUE1fQ01EX0NGR19DTlRfRlJNX0VOCQlCSVQoMTMpCiAjZGVmaW5lICBQTV9DTURfQ0ZHX1RYUAkJCUJJVCgxNSkKICNkZWZpbmUgIFBNX0NNRF9DRkdfU0VORF9JRExFCQlCSVQoMTYpCi0jZGVmaW5lICBQTV9DTURfQ0ZHX0hEX0ZDRU4JCUJJVCgxOCkKICNkZWZpbmUgIFBNX0NNRF9DRkdfU0ZECQkJQklUKDIxKQogI2RlZmluZSAgUE1fQ01EX0NGR19UWF9GTFVTSAkJQklUKDIyKQogI2RlZmluZSAgUE1fQ01EX0NGR19UWF9MT1dQX0VOCQlCSVQoMjMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMKaW5kZXggNDM3YTE1YmJiNDdiYTguLmZjZmJhYmIyOWQyMmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jCkBAIC0yMywxOCAmIzQzOzIzLDExIEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9nZXRfcG9ydF9jYXBzKHN0cnVjdCBlbmV0Y19wZiAqcGYpCiAJdTMyIHZhbDsKIAogCXZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDNF9FQ0FQUjEpOwotCXBmLSZndDtjYXBzLm51bV92c2kgPSAodmFsICZhbXA7IEVDQVBSMV9OVU1fVlNJKSAmZ3Q7Jmd0OyAyNDsKIAlwZi0mZ3Q7Y2Fwcy5udW1fbXNpeCA9ICgodmFsICZhbXA7IEVDQVBSMV9OVU1fTVNJWCkgJmd0OyZndDsgMTIpICYjNDM7IDE7CiAKIAl2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBFTkVUQzRfRUNBUFIyKTsKIAlwZi0mZ3Q7Y2Fwcy5udW1fcnhfYmRyID0gKHZhbCAmYW1wOyBFQ0FQUjJfTlVNX1JYX0JEUikgJmd0OyZndDsgMTY7CiAJcGYtJmd0O2NhcHMubnVtX3R4X2JkciA9IHZhbCAmYW1wOyBFQ0FQUjJfTlVNX1RYX0JEUjsKLQotCXZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDNF9QTUNBUFIpOwotCXBmLSZndDtjYXBzLmhhbGZfZHVwbGV4ID0gKHZhbCAmYW1wOyBQTUNBUFJfSEQpID8gMSA6IDA7Ci0KLQl2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBFTkVUQzRfUFNJTUFGQ0FQUik7Ci0JcGYtJmd0O2NhcHMubWFjX2ZpbHRlcl9udW0gPSB2YWwgJmFtcDsgUFNJTUFGQ0FQUl9OVU1fTUFDX0FGVEU7CiB9CiAKIHN0YXRpYyB2b2lkIGVuZXRjNF9nZXRfcHNpX2h3X2ZlYXR1cmVzKHN0cnVjdCBlbmV0Y19zaSAqc2kpCkBAIC03NSwzOCAmIzQzOzY4LDYgQEAgc3RhdGljIHZvaWQgZW5ldGM0X3BmX2dldF9zaV9wcmltYXJ5X21hYyhzdHJ1Y3QgZW5ldGNfaHcgKmh3LCBpbnQgc2ksCiAJcHV0X3VuYWxpZ25lZF9sZTE2KGxvd2VyLCBhZGRyICYjNDM7IDQpOwogfQogCi1zdGF0aWMgdm9pZCBlbmV0YzRfcGZfc2V0X3NpX21hY19wcm9taXNjKHN0cnVjdCBlbmV0Y19odyAqaHcsIGludCBzaSwKLQkJCQkJIGJvb2wgdWNfcHJvbWlzYywgYm9vbCBtY19wcm9taXNjKQotewotCXUzMiB2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBFTkVUQzRfUFNJUE1NUik7Ci0KLQlpZiAodWNfcHJvbWlzYykKLQkJdmFsIHw9IFBTSVBNTVJfU0lfTUFDX1VQKHNpKTsKLQllbHNlCi0JCXZhbCAmYW1wOz0gflBTSVBNTVJfU0lfTUFDX1VQKHNpKTsKLQotCWlmIChtY19wcm9taXNjKQotCQl2YWwgfD0gUFNJUE1NUl9TSV9NQUNfTVAoc2kpOwotCWVsc2UKLQkJdmFsICZhbXA7PSB+UFNJUE1NUl9TSV9NQUNfTVAoc2kpOwotCi0JZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSVBNTVIsIHZhbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX2h3ICpodywgaW50IHNpLAotCQkJCQkgICAgdTY0IGhhc2gpCi17Ci0JZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSVVNSEZSMChzaSksIGxvd2VyXzMyX2JpdHMoaGFzaCkpOwotCWVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lVTUhGUjEoc2kpLCB1cHBlcl8zMl9iaXRzKGhhc2gpKTsKLX0KLQotc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9zaV9tY19oYXNoX2ZpbHRlcihzdHJ1Y3QgZW5ldGNfaHcgKmh3LCBpbnQgc2ksCi0JCQkJCSAgICB1NjQgaGFzaCkKLXsKLQllbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJTU1IRlIwKHNpKSwgbG93ZXJfMzJfYml0cyhoYXNoKSk7Ci0JZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSU1NSEZSMShzaSksIHVwcGVyXzMyX2JpdHMoaGFzaCkpOwotfQotCiBzdGF0aWMgdm9pZCBlbmV0YzRfcGZfc2V0X2xvb3BiYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBib29sIGVuKQogewogCXN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKQEAgLTEyNCwzNCAmIzQzOzg1LDQ3IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfbG9vcGJhY2soc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgZW4pCiAKIHN0YXRpYyB2b2lkIGVuZXRjNF9wZl9jbGVhcl9tYWZ0X2VudHJpZXMoc3RydWN0IGVuZXRjX3BmICpwZikKIHsKLQlpbnQgaTsKJiM0MzsJc3RydWN0IG50bXBfdXNlciAqdXNlciA9ICZhbXA7cGYtJmd0O3NpLSZndDtudG1wX3VzZXI7CiYjNDM7CXUzMiBlbnRyeV9pZDsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBwZi0mZ3Q7bnVtX21mZTsgaSYjNDM7JiM0MzspCi0JCW50bXBfbWFmdF9kZWxldGVfZW50cnkoJmFtcDtwZi0mZ3Q7c2ktJmd0O250bXBfdXNlciwgaSk7Ci0KLQlwZi0mZ3Q7bnVtX21mZSA9IDA7CiYjNDM7CWZvcl9lYWNoX3NldF9iaXQoZW50cnlfaWQsIHVzZXItJmd0O21hZnRfZWlkX2JpdG1hcCwKJiM0MzsJCQkgdXNlci0mZ3Q7bWFmdF9udW1fZW50cmllcykgewomIzQzOwkJaWYgKCFudG1wX21hZnRfZGVsZXRlX2VudHJ5KHVzZXIsIGVudHJ5X2lkKSkKJiM0MzsJCQludG1wX2NsZWFyX2VpZF9iaXRtYXAodXNlci0mZ3Q7bWFmdF9laWRfYml0bWFwLCBlbnRyeV9pZCk7CiYjNDM7CX0KIH0KIAogc3RhdGljIGludCBlbmV0YzRfcGZfYWRkX21hZnRfZW50cmllcyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLAotCQkJCSAgICAgIHN0cnVjdCBlbmV0Y19tYWNfYWRkciAqbWFjLAotCQkJCSAgICAgIGludCBtYWNfY250KQomIzQzOwkJCQkgICAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMpCiB7CiYjNDM7CXN0cnVjdCBudG1wX3VzZXIgKnVzZXIgPSAmYW1wO3BmLSZndDtzaS0mZ3Q7bnRtcF91c2VyOwomIzQzOwlpbnQgbWFjX2NudCA9IG5ldGRldl9od19hZGRyX2xpc3RfY291bnQodWMpOwogCXN0cnVjdCBtYWZ0X2VudHJ5X2RhdGEgbWFmdCA9IHt9OwomIzQzOwlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOwomIzQzOwl1MzIgYXZhaWxhYmxlX2VudHJpZXM7CiAJdTE2IHNpX2JpdCA9IEJJVCgwKTsKLQlpbnQgaSwgZXJyOwomIzQzOwl1MzIgZW50cnlfaWQ7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWF2YWlsYWJsZV9lbnRyaWVzID0gdXNlci0mZ3Q7bWFmdF9udW1fZW50cmllcyAtCiYjNDM7CQkJICAgIGJpdG1hcF93ZWlnaHQodXNlci0mZ3Q7bWFmdF9laWRfYml0bWFwLAomIzQzOwkJCQkJICB1c2VyLSZndDttYWZ0X251bV9lbnRyaWVzKTsKJiM0MzsKJiM0MzsJaWYgKG1hY19jbnQgJmd0OyBhdmFpbGFibGVfZW50cmllcykKJiM0MzsJCXJldHVybiAtRU5PU1BDOwogCiAJbWFmdC5jZmdlLnNpX2JpdG1hcCA9IGNwdV90b19sZTE2KHNpX2JpdCk7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IG1hY19jbnQ7IGkmIzQzOyYjNDM7KSB7Ci0JCWV0aGVyX2FkZHJfY29weShtYWZ0LmtleWUubWFjX2FkZHIsIG1hY1tpXS5hZGRyKTsKLQkJZXJyID0gbnRtcF9tYWZ0X2FkZF9lbnRyeSgmYW1wO3BmLSZndDtzaS0mZ3Q7bnRtcF91c2VyLCBpLCAmYW1wO21hZnQpOwomIzQzOwluZXRkZXZfaHdfYWRkcl9saXN0X2Zvcl9lYWNoKGhhLCB1YykgewomIzQzOwkJZW50cnlfaWQgPSBudG1wX2xvb2t1cF9mcmVlX2VpZCh1c2VyLSZndDttYWZ0X2VpZF9iaXRtYXAsCiYjNDM7CQkJCQkJdXNlci0mZ3Q7bWFmdF9udW1fZW50cmllcyk7CiYjNDM7CQlldGhlcl9hZGRyX2NvcHkobWFmdC5rZXllLm1hY19hZGRyLCBoYS0mZ3Q7YWRkcik7CiYjNDM7CQllcnIgPSBudG1wX21hZnRfYWRkX2VudHJ5KHVzZXIsIGVudHJ5X2lkLCAmYW1wO21hZnQpOwogCQlpZiAodW5saWtlbHkoZXJyKSkgewotCQkJcGYtJmd0O251bV9tZmUgPSBpOwomIzQzOwkJCW50bXBfY2xlYXJfZWlkX2JpdG1hcCh1c2VyLSZndDttYWZ0X2VpZF9iaXRtYXAsIGVudHJ5X2lkKTsKIAkJCWdvdG8gY2xlYXJfbWFmdF9lbnRyaWVzOwogCQl9CiAJfQogCi0JcGYtJmd0O251bV9tZmUgPSBtYWNfY250OwotCiAJcmV0dXJuIDA7CiAKIGNsZWFyX21hZnRfZW50cmllczoKQEAgLTE2MCw5NyAmIzQzOzEzNCw3MCBAQCBzdGF0aWMgaW50IGVuZXRjNF9wZl9hZGRfbWFmdF9lbnRyaWVzKHN0cnVjdCBlbmV0Y19wZiAqcGYsCiAJcmV0dXJuICBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgZW5ldGM0X3BmX3NldF91Y19leGFjdF9maWx0ZXIoc3RydWN0IGVuZXRjX3BmICpwZikKJiM0MztzdGF0aWMgdm9pZCBlbmV0YzRfcGZfc2V0X3VjX2hhc2hfZmlsdGVyKHN0cnVjdCBlbmV0Y19wZiAqcGYsCiYjNDM7CQkJCQkgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjKQogewotCWludCBtYXhfbnVtX21mZSA9IHBmLSZndDtjYXBzLm1hY19maWx0ZXJfbnVtOwotCXN0cnVjdCBlbmV0Y19tYWNfZmlsdGVyIG1hY19maWx0ZXIgPSB7fTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBmLSZndDtzaS0mZ3Q7bmRldjsKLQlzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gJmFtcDtwZi0mZ3Q7c2ktJmd0O2h3OwotCXN0cnVjdCBlbmV0Y19tYWNfYWRkciAqbWFjX3RibDsKJiM0MzsJc3RydWN0IGVuZXRjX21hY19maWx0ZXIgKm1hY19maWx0ZXIgPSAmYW1wO3BmLSZndDttYWNfZmlsdGVyW1VDXTsKIAlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOwotCWludCBpID0gMCwgZXJyOwotCWludCBtYWNfY250OwomIzQzOwl1NjQgaGFzaDsKIAotCW5ldGlmX2FkZHJfbG9ja19iaChuZGV2KTsKJiM0MzsJZW5ldGNfcmVzZXRfbWFjX2FkZHJfZmlsdGVyKG1hY19maWx0ZXIpOwomIzQzOwluZXRkZXZfaHdfYWRkcl9saXN0X2Zvcl9lYWNoKGhhLCB1YykKJiM0MzsJCWVuZXRjX2FkZF9tYWNfYWRkcl9odF9maWx0ZXIobWFjX2ZpbHRlciwgaGEtJmd0O2FkZHIpOwomIzQzOwomIzQzOwliaXRtYXBfdG9fYXJyNjQoJmFtcDtoYXNoLCBtYWNfZmlsdGVyLSZndDttYWNfaGFzaF90YWJsZSwKJiM0MzsJCQlFTkVUQ19NQUREUl9IQVNIX1RCTF9TWik7CiYjNDM7CWVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcihwZi0mZ3Q7c2ksIDAsIGhhc2gpOwomIzQzO30KIAotCW1hY19jbnQgPSBuZXRkZXZfdWNfY291bnQobmRldik7Ci0JaWYgKCFtYWNfY250KSB7Ci0JCW5ldGlmX2FkZHJfdW5sb2NrX2JoKG5kZXYpOwomIzQzO3N0YXRpYyBpbnQgZW5ldGM0X3BmX3NldF91Y19leGFjdF9maWx0ZXIoc3RydWN0IGVuZXRjX3BmICpwZiwKJiM0MzsJCQkJCSBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZW5ldGNfc2kgKnNpID0gcGYtJmd0O3NpOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAobmV0ZGV2X2h3X2FkZHJfbGlzdF9lbXB0eSh1YykpIHsKIAkJLyogY2xlYXIgYm90aCBNQUMgaGFzaCBhbmQgZXhhY3QgZmlsdGVycyAqLwotCQllbmV0YzRfcGZfc2V0X3NpX3VjX2hhc2hfZmlsdGVyKGh3LCAwLCAwKTsKJiM0MzsJCWVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcihzaSwgMCwgMCk7CiAJCWVuZXRjNF9wZl9jbGVhcl9tYWZ0X2VudHJpZXMocGYpOwogCiAJCXJldHVybiAwOwogCX0KIAotCWlmIChtYWNfY250ICZndDsgbWF4X251bV9tZmUpIHsKLQkJZXJyID0gLUVOT1NQQzsKLQkJZ290byB1bmxvY2tfbmV0aWZfYWRkcjsKLQl9Ci0KLQltYWNfdGJsID0ga3phbGxvY19vYmpzKCptYWNfdGJsLCBtYWNfY250LCBHRlBfQVRPTUlDKTsKLQlpZiAoIW1hY190YmwpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byB1bmxvY2tfbmV0aWZfYWRkcjsKLQl9Ci0KLQluZXRkZXZfZm9yX2VhY2hfdWNfYWRkcihoYSwgbmRldikgewotCQllbmV0Y19hZGRfbWFjX2FkZHJfaHRfZmlsdGVyKCZhbXA7bWFjX2ZpbHRlciwgaGEtJmd0O2FkZHIpOwotCQlldGhlcl9hZGRyX2NvcHkobWFjX3RibFtpJiM0MzsmIzQzO10uYWRkciwgaGEtJmd0O2FkZHIpOwotCX0KLQotCW5ldGlmX2FkZHJfdW5sb2NrX2JoKG5kZXYpOwotCi0JLyogU2V0IHRlbXBvcmFyeSB1bmljYXN0IGhhc2ggZmlsdGVycyBpbiBjYXNlIG9mIFJ4IGxvc3Mgd2hlbgomIzQzOwkvKiBTZXQgdGVtcG9yYXJ5IHVuaWNhc3QgaGFzaCBmaWx0ZXIgaW4gY2FzZSBvZiBSeCBsb3NzIHdoZW4KIAkgKiB1cGRhdGluZyBNQUMgYWRkcmVzcyBmaWx0ZXIgdGFibGUKIAkgKi8KLQllbmV0YzRfcGZfc2V0X3NpX3VjX2hhc2hfZmlsdGVyKGh3LCAwLCAqbWFjX2ZpbHRlci5tYWNfaGFzaF90YWJsZSk7CiYjNDM7CWVuZXRjNF9wZl9zZXRfdWNfaGFzaF9maWx0ZXIocGYsIHVjKTsKIAllbmV0YzRfcGZfY2xlYXJfbWFmdF9lbnRyaWVzKHBmKTsKIAotCWlmICghZW5ldGM0X3BmX2FkZF9tYWZ0X2VudHJpZXMocGYsIG1hY190YmwsIGkpKQotCQllbmV0YzRfcGZfc2V0X3NpX3VjX2hhc2hfZmlsdGVyKGh3LCAwLCAwKTsKLQotCWtmcmVlKG1hY190YmwpOwotCi0JcmV0dXJuIDA7Ci0KLXVubG9ja19uZXRpZl9hZGRyOgotCW5ldGlmX2FkZHJfdW5sb2NrX2JoKG5kZXYpOwomIzQzOwllcnIgPSBlbmV0YzRfcGZfYWRkX21hZnRfZW50cmllcyhwZiwgdWMpOwomIzQzOwlpZiAoIWVycikgewomIzQzOwkJZW5ldGNfcmVzZXRfbWFjX2FkZHJfZmlsdGVyKCZhbXA7cGYtJmd0O21hY19maWx0ZXJbVUNdKTsKJiM0MzsJCWVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcihzaSwgMCwgMCk7CiYjNDM7CX0KIAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfbWFjX2hhc2hfZmlsdGVyKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGludCB0eXBlKQomIzQzO3N0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfbWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3BmICpwZiwKJiM0MzsJCQkJCSBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwZi0mZ3Q7c2ktJmd0O25kZXY7Ci0Jc3RydWN0IGVuZXRjX21hY19maWx0ZXIgKm1hY19maWx0ZXI7Ci0Jc3RydWN0IGVuZXRjX2h3ICpodyA9ICZhbXA7cGYtJmd0O3NpLSZndDtodzsKJiM0MzsJc3RydWN0IGVuZXRjX21hY19maWx0ZXIgKm1hY19maWx0ZXIgPSAmYW1wO3BmLSZndDttYWNfZmlsdGVyW01DXTsKIAlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOwomIzQzOwl1NjQgaGFzaDsKIAotCW5ldGlmX2FkZHJfbG9ja19iaChuZGV2KTsKLQlpZiAodHlwZSAmYW1wOyBFTkVUQ19NQUNfRklMVEVSX1RZUEVfVUMpIHsKLQkJbWFjX2ZpbHRlciA9ICZhbXA7cGYtJmd0O21hY19maWx0ZXJbVUNdOwotCQllbmV0Y19yZXNldF9tYWNfYWRkcl9maWx0ZXIobWFjX2ZpbHRlcik7Ci0JCW5ldGRldl9mb3JfZWFjaF91Y19hZGRyKGhhLCBuZGV2KQotCQkJZW5ldGNfYWRkX21hY19hZGRyX2h0X2ZpbHRlcihtYWNfZmlsdGVyLCBoYS0mZ3Q7YWRkcik7Ci0KLQkJZW5ldGM0X3BmX3NldF9zaV91Y19oYXNoX2ZpbHRlcihodywgMCwKLQkJCQkJCSptYWNfZmlsdGVyLSZndDttYWNfaGFzaF90YWJsZSk7Ci0JfQomIzQzOwllbmV0Y19yZXNldF9tYWNfYWRkcl9maWx0ZXIobWFjX2ZpbHRlcik7CiYjNDM7CW5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIG1jKQomIzQzOwkJZW5ldGNfYWRkX21hY19hZGRyX2h0X2ZpbHRlcihtYWNfZmlsdGVyLCBoYS0mZ3Q7YWRkcik7CiAKLQlpZiAodHlwZSAmYW1wOyBFTkVUQ19NQUNfRklMVEVSX1RZUEVfTUMpIHsKLQkJbWFjX2ZpbHRlciA9ICZhbXA7cGYtJmd0O21hY19maWx0ZXJbTUNdOwotCQllbmV0Y19yZXNldF9tYWNfYWRkcl9maWx0ZXIobWFjX2ZpbHRlcik7Ci0JCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBuZGV2KQotCQkJZW5ldGNfYWRkX21hY19hZGRyX2h0X2ZpbHRlcihtYWNfZmlsdGVyLCBoYS0mZ3Q7YWRkcik7Ci0KLQkJZW5ldGM0X3BmX3NldF9zaV9tY19oYXNoX2ZpbHRlcihodywgMCwKLQkJCQkJCSptYWNfZmlsdGVyLSZndDttYWNfaGFzaF90YWJsZSk7Ci0JfQotCW5ldGlmX2FkZHJfdW5sb2NrX2JoKG5kZXYpOwomIzQzOwliaXRtYXBfdG9fYXJyNjQoJmFtcDtoYXNoLCBtYWNfZmlsdGVyLSZndDttYWNfaGFzaF90YWJsZSwKJiM0MzsJCQlFTkVUQ19NQUREUl9IQVNIX1RCTF9TWik7CiYjNDM7CWVuZXRjX3NldF9zaV9tY19oYXNoX2ZpbHRlcihwZi0mZ3Q7c2ksIDAsIGhhc2gpOwogfQogCi1zdGF0aWMgdm9pZCBlbmV0YzRfcGZfc2V0X21hY19maWx0ZXIoc3RydWN0IGVuZXRjX3BmICpwZiwgaW50IHR5cGUpCiYjNDM7c3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9tYWNfZmlsdGVyKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGludCB0eXBlLAomIzQzOwkJCQkgICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp1YywKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpCiB7CiAJLyogQ3VycmVudGx5LCB0aGUgTUFDIGFkZHJlc3MgZmlsdGVyIHRhYmxlIChNQUZUKSBvbmx5IGhhcyA0IGVudHJpZXMsCiAJICogYW5kIG11bHRpcGxlIG11bHRpY2FzdCBhZGRyZXNzZXMgZm9yIGZpbHRlcmluZyB3aWxsIGJlIGNvbmZpZ3VyZWQKQEAgLTI1OCwxNSAmIzQzOzIwNSwxNiBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfcGZfc2V0X21hY19maWx0ZXIoc3RydWN0IGVuZXRjX3BmICpwZiwgaW50IHR5cGUpCiAJICogdW5pY2FzdCBmaWx0ZXJpbmcuIElmIHRoZSBudW1iZXIgb2YgdW5pY2FzdCBhZGRyZXNzZXMgZXhjZWVkcyB0aGUKIAkgKiB0YWJsZSBjYXBhY2l0eSwgdGhlIE1BQyBoYXNoIGZpbHRlciB3aWxsIGJlIHVzZWQuCiAJICovCi0JaWYgKHR5cGUgJmFtcDsgRU5FVENfTUFDX0ZJTFRFUl9UWVBFX1VDICZhbXA7JmFtcDsgZW5ldGM0X3BmX3NldF91Y19leGFjdF9maWx0ZXIocGYpKSB7CiYjNDM7CWlmICh0eXBlICZhbXA7IEVORVRDX01BQ19GSUxURVJfVFlQRV9VQyAmYW1wOyZhbXA7CiYjNDM7CSAgICBlbmV0YzRfcGZfc2V0X3VjX2V4YWN0X2ZpbHRlcihwZiwgdWMpKSB7CiAJCS8qIEZhbGwgYmFjayB0byB0aGUgTUFDIGhhc2ggZmlsdGVyICovCi0JCWVuZXRjNF9wZl9zZXRfbWFjX2hhc2hfZmlsdGVyKHBmLCBFTkVUQ19NQUNfRklMVEVSX1RZUEVfVUMpOwomIzQzOwkJZW5ldGM0X3BmX3NldF91Y19oYXNoX2ZpbHRlcihwZiwgdWMpOwogCQkvKiBDbGVhciB0aGUgb2xkIE1BQyBleGFjdCBmaWx0ZXIgKi8KIAkJZW5ldGM0X3BmX2NsZWFyX21hZnRfZW50cmllcyhwZik7CiAJfQogCiAJaWYgKHR5cGUgJmFtcDsgRU5FVENfTUFDX0ZJTFRFUl9UWVBFX01DKQotCQllbmV0YzRfcGZfc2V0X21hY19oYXNoX2ZpbHRlcihwZiwgRU5FVENfTUFDX0ZJTFRFUl9UWVBFX01DKTsKJiM0MzsJCWVuZXRjNF9wZl9zZXRfbWNfaGFzaF9maWx0ZXIocGYsIG1jKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBlbmV0Y19wZl9vcHMgZW5ldGM0X3BmX29wcyA9IHsKQEAgLTMwNiwzNCAmIzQzOzI1NCwzNSBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfZGVmYXVsdF9yaW5nc19hbGxvY2F0aW9uKHN0cnVjdCBlbmV0Y19wZiAqcGYpCiB7CiAJc3RydWN0IGVuZXRjX2h3ICpodyA9ICZhbXA7cGYtJmd0O3NpLSZndDtodzsKIAl1MzIgbnVtX3J4X2JkciwgbnVtX3R4X2JkciwgdmFsOwomIzQzOwlpbnQgbnVtX3ZmcyA9IHBmLSZndDt0b3RhbF92ZnM7CiAJdTMyIHZmX3R4X2JkciwgdmZfcnhfYmRyOwogCWludCBpLCByeF9yZW0sIHR4X3JlbTsKIAotCWlmIChwZi0mZ3Q7Y2Fwcy5udW1fcnhfYmRyICZsdDsgRU5FVENfU0lfTUFYX1JJTkdfTlVNICYjNDM7IHBmLSZndDtjYXBzLm51bV92c2kpCi0JCW51bV9yeF9iZHIgPSBwZi0mZ3Q7Y2Fwcy5udW1fcnhfYmRyIC0gcGYtJmd0O2NhcHMubnVtX3ZzaTsKJiM0MzsJaWYgKHBmLSZndDtjYXBzLm51bV9yeF9iZHIgJmx0OyBFTkVUQ19TSV9NQVhfUklOR19OVU0gJiM0MzsgbnVtX3ZmcykKJiM0MzsJCW51bV9yeF9iZHIgPSBwZi0mZ3Q7Y2Fwcy5udW1fcnhfYmRyIC0gbnVtX3ZmczsKIAllbHNlCiAJCW51bV9yeF9iZHIgPSBFTkVUQ19TSV9NQVhfUklOR19OVU07CiAKLQlpZiAocGYtJmd0O2NhcHMubnVtX3R4X2JkciAmbHQ7IEVORVRDX1NJX01BWF9SSU5HX05VTSAmIzQzOyBwZi0mZ3Q7Y2Fwcy5udW1fdnNpKQotCQludW1fdHhfYmRyID0gcGYtJmd0O2NhcHMubnVtX3R4X2JkciAtIHBmLSZndDtjYXBzLm51bV92c2k7CiYjNDM7CWlmIChwZi0mZ3Q7Y2Fwcy5udW1fdHhfYmRyICZsdDsgRU5FVENfU0lfTUFYX1JJTkdfTlVNICYjNDM7IG51bV92ZnMpCiYjNDM7CQludW1fdHhfYmRyID0gcGYtJmd0O2NhcHMubnVtX3R4X2JkciAtIG51bV92ZnM7CiAJZWxzZQogCQludW1fdHhfYmRyID0gRU5FVENfU0lfTUFYX1JJTkdfTlVNOwogCiAJdmFsID0gZW5ldGM0X3BzaWNmZ3IwX3ZhbF9jb25zdHJ1Y3QoZmFsc2UsIG51bV90eF9iZHIsIG51bV9yeF9iZHIpOwogCWVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lDRkdSMCgwKSwgdmFsKTsKIAotCWlmICghcGYtJmd0O2NhcHMubnVtX3ZzaSkKJiM0MzsJaWYgKCFudW1fdmZzKQogCQlyZXR1cm47CiAKIAludW1fcnhfYmRyID0gcGYtJmd0O2NhcHMubnVtX3J4X2JkciAtIG51bV9yeF9iZHI7Ci0JcnhfcmVtID0gbnVtX3J4X2JkciAlIHBmLSZndDtjYXBzLm51bV92c2k7Ci0JbnVtX3J4X2JkciA9IG51bV9yeF9iZHIgLyBwZi0mZ3Q7Y2Fwcy5udW1fdnNpOwomIzQzOwlyeF9yZW0gPSBudW1fcnhfYmRyICUgbnVtX3ZmczsKJiM0MzsJbnVtX3J4X2JkciA9IG51bV9yeF9iZHIgLyBudW1fdmZzOwogCiAJbnVtX3R4X2JkciA9IHBmLSZndDtjYXBzLm51bV90eF9iZHIgLSBudW1fdHhfYmRyOwotCXR4X3JlbSA9IG51bV90eF9iZHIgJSBwZi0mZ3Q7Y2Fwcy5udW1fdnNpOwotCW51bV90eF9iZHIgPSBudW1fdHhfYmRyIC8gcGYtJmd0O2NhcHMubnVtX3ZzaTsKJiM0MzsJdHhfcmVtID0gbnVtX3R4X2JkciAlIG51bV92ZnM7CiYjNDM7CW51bV90eF9iZHIgPSBudW1fdHhfYmRyIC8gbnVtX3ZmczsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBwZi0mZ3Q7Y2Fwcy5udW1fdnNpOyBpJiM0MzsmIzQzOykgewomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3ZmczsgaSYjNDM7JiM0MzspIHsKIAkJdmZfdHhfYmRyID0gKGkgJmx0OyB0eF9yZW0pID8gbnVtX3R4X2JkciAmIzQzOyAxIDogbnVtX3R4X2JkcjsKIAkJdmZfcnhfYmRyID0gKGkgJmx0OyByeF9yZW0pID8gbnVtX3J4X2JkciAmIzQzOyAxIDogbnVtX3J4X2JkcjsKIAkJdmFsID0gZW5ldGM0X3BzaWNmZ3IwX3ZhbF9jb25zdHJ1Y3QodHJ1ZSwgdmZfdHhfYmRyLCB2Zl9yeF9iZHIpOwpAQCAtMzQ2LDUzICYjNDM7Mjk1LDcwIEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9hbGxvY2F0ZV9zaV9yaW5ncyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKQogCWVuZXRjNF9kZWZhdWx0X3JpbmdzX2FsbG9jYXRpb24ocGYpOwogfQogCi1zdGF0aWMgdm9pZCBlbmV0YzRfcGZfc2V0X3NpX3ZsYW5fcHJvbWlzYyhzdHJ1Y3QgZW5ldGNfaHcgKmh3LCBpbnQgc2ksIGJvb2wgZW4pCi17Ci0JdTMyIHZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDNF9QU0lQVk1SKTsKLQotCWlmIChlbikKLQkJdmFsIHw9IEJJVChzaSk7Ci0JZWxzZQotCQl2YWwgJmFtcDs9IH5CSVQoc2kpOwotCi0JZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSVBWTVIsIHZhbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVuZXRjNF9zZXRfZGVmYXVsdF9zaV92bGFuX3Byb21pc2Moc3RydWN0IGVuZXRjX3BmICpwZikKLXsKLQlzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gJmFtcDtwZi0mZ3Q7c2ktJmd0O2h3OwotCWludCBudW1fc2kgPSBwZi0mZ3Q7Y2Fwcy5udW1fdnNpICYjNDM7IDE7Ci0JaW50IGk7Ci0KLQkvKiBlbmZvcmNlIFZMQU4gcHJvbWlzY3VvdXMgbW9kZSBmb3IgYWxsIFNJcyAqLwotCWZvciAoaSA9IDA7IGkgJmx0OyBudW1fc2k7IGkmIzQzOyYjNDM7KQotCQllbmV0YzRfcGZfc2V0X3NpX3ZsYW5fcHJvbWlzYyhodywgaSwgdHJ1ZSk7Ci19Ci0KIC8qIEFsbG9jYXRlIHRoZSBudW1iZXIgb2YgTVNJLVggdmVjdG9ycyBmb3IgcGVyIFNJLiAqLwogc3RhdGljIHZvaWQgZW5ldGM0X3NldF9zaV9tc2l4X251bShzdHJ1Y3QgZW5ldGNfcGYgKnBmKQogewomIzQzOwlpbnQgdmFsaWRfbnVtX3NpID0gcGYtJmd0O3RvdGFsX3ZmcyAmIzQzOyAxOwogCXN0cnVjdCBlbmV0Y19odyAqaHcgPSAmYW1wO3BmLSZndDtzaS0mZ3Q7aHc7Ci0JaW50IGksIG51bV9tc2l4LCB0b3RhbF9zaTsKJiM0MzsJaW50IGksIG51bV9tc2l4LCBudW1fdnNpOwogCXUzMiB2YWw7CiAKLQl0b3RhbF9zaSA9IHBmLSZndDtjYXBzLm51bV92c2kgJiM0MzsgMTsKJiM0MzsJdmFsID0gZW5ldGNfcG9ydF9yZChodywgRU5FVEM0X0VDQVBSMSk7CiYjNDM7CW51bV92c2kgPSBGSUVMRF9HRVQoRUNBUFIxX05VTV9WU0ksIHZhbCk7CiYjNDM7CiYjNDM7CS8qIFRoZSBQU0lhQ0ZHUjJbTlVNX01TSVhdIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIE1TSS1YIGFsbG9jYXRlZCB0bwomIzQzOwkgKiB0aGUgU0kgaXMgTlVNX01TSVggJiM0MzsgMSwgc28gdGhlIG1pbmltdW0gbnVtYmVyIG9mIE1TSS1YIGFsbG9jYXRlZCB0bwomIzQzOwkgKiBlYWNoIFNJIGlzIDEuIFRoZSB0b3RhbCBudW1iZXIgb2YgTVNJLVggYWxsb2NhdGVkIHRvIFBTSSBhbmQgVlNJcwomIzQzOwkgKiBjYW5ub3QgZXhjZWVkIHRoZSB0b3RhbCBudW1iZXIgb2YgTVNJLVggb3duZWQgYnkgdGhpcyBFTkVUQywgd2hpY2gKJiM0MzsJICogaXMgRUNBUFIxW05VTV9NU0lYXS4gT3RoZXJ3aXNlLCB3aGVuIG11bHRpcGxlIEVORVRDIGluc3RhbmNlcyBleGlzdCwKJiM0MzsJICogaXQgd2lsbCBhZmZlY3Qgb3RoZXIgRU5FVENzIHdob3NlIE1TSS1YIGludGVycnVwdHMgY2Fubm90IGJlCiYjNDM7CSAqIGdlbmVyYXRlZC4gVGhpcyBpcyBzaW1pbGFyIHRvIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzOiB0aGUgYXJyYXkKJiM0MzsJICogaXRzZWxmIGlzIG5vdCBhZmZlY3RlZCwgYnV0IGFkamFjZW50IGFycmF5cyB3aWxsIGJlIGNvcnJ1cHRlZC4KJiM0MzsJICoKJiM0MzsJICogcGYtJmd0O3RvdGFsX3ZmcyBpcyAwIGlmIENPTkZJR19QQ0lfSU9WIGlzIGRpc2FibGVkLiBJZiB0aGUgaGFyZHdhcmUKJiM0MzsJICogaXRzZWxmIHN1cHBvcnRzIFNSLUlPViwgdGhlbiB3aGVuIGFsbG9jYXRpbmcgdGhlIG51bWJlciBvZiBNU0lYcyB0bwomIzQzOwkgKiB0aGUgU0ksIGl0IG11c3QgYmUgdGFrZW4gaW50byBhY2NvdW50IHRoYXQgdGhlIFZTSSBoYXMgYXQgbGVhc3QgMQomIzQzOwkgKiBNU0lYLCBhbmQgdGhlIHRvdGFsIG51bWJlciBvZiBNU0lYcyBvZiBhbGwgU0lzIGNhbm5vdCBleGNlZWQKJiM0MzsJICogRUNBUFIxW05VTV9NU0lYXS4KJiM0MzsJICovCiYjNDM7CWlmICghcGYtJmd0O3RvdGFsX3ZmcyAmYW1wOyZhbXA7IG51bV92c2kpIHsKJiM0MzsJCS8qIEJlY2F1c2UgZWFjaCBTSSBoYXMgYXQgbGVhc3Qgb25lIE1TSVgsIGFuZCBmcm9tIHRoZSBoYXJkd2FyZQomIzQzOwkJICogcGVyc3BlY3RpdmUsIHBmLSZndDtjYXBzLm51bV9tc2l4IHdpbGwgYWx3YXlzIGJlIGdyZWF0ZXIgdGhhbgomIzQzOwkJICogbnVtX3ZzaS4gU28gbnVtX21zaXggaXMgYWx3YXlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwLgomIzQzOwkJICovCiYjNDM7CQludW1fbXNpeCA9IHBmLSZndDtjYXBzLm51bV9tc2l4IC0gbnVtX3ZzaSAtIDE7CiYjNDM7CQlpZiAobnVtX21zaXggJmd0OyBQU0lDRkdSMl9OVU1fTVNJWCkKJiM0MzsJCQludW1fbXNpeCA9IFBTSUNGR1IyX05VTV9NU0lYOwomIzQzOwkJZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSUNGR1IyKDApLCBudW1fbXNpeCk7CiAKLQludW1fbXNpeCA9IHBmLSZndDtjYXBzLm51bV9tc2l4IC8gdG90YWxfc2kgJiM0MzsKLQkJICAgcGYtJmd0O2NhcHMubnVtX21zaXggJSB0b3RhbF9zaSAtIDE7Ci0JdmFsID0gbnVtX21zaXggJmFtcDsgUFNJQ0ZHUjJfTlVNX01TSVg7Ci0JZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSUNGR1IyKDApLCB2YWwpOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG51bV92c2k7IGkmIzQzOyYjNDM7KQomIzQzOwkJCWVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lDRkdSMihpICYjNDM7IDEpLCAwKTsKIAotCW51bV9tc2l4ID0gcGYtJmd0O2NhcHMubnVtX21zaXggLyB0b3RhbF9zaSAtIDE7Ci0JdmFsID0gbnVtX21zaXggJmFtcDsgUFNJQ0ZHUjJfTlVNX01TSVg7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IHBmLSZndDtjYXBzLm51bV92c2k7IGkmIzQzOyYjNDM7KQotCQllbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJQ0ZHUjIoaSAmIzQzOyAxKSwgdmFsKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBMaWtld2lzZSwgZnJvbSB0aGUgaGFyZHdhcmUgcGVyc3BlY3RpdmUgcGYtJmd0O2NhcHMubnVtX21zaXggaXMgYWx3YXlzCiYjNDM7CSAqIGdyZWF0ZXIgdGhhbiB2YWxpZF9udW1fc2kuIFNvIG51bV9tc2l4IGlzIGFsd2F5cyBncmVhdGVyIHRoYW4gb3IKJiM0MzsJICogZXF1YWwgdG8gMC4KJiM0MzsJICovCiYjNDM7CW51bV9tc2l4ID0gcGYtJmd0O2NhcHMubnVtX21zaXggLyB2YWxpZF9udW1fc2kgJiM0MzsKJiM0MzsJCSAgIHBmLSZndDtjYXBzLm51bV9tc2l4ICUgdmFsaWRfbnVtX3NpIC0gMTsKJiM0MzsJaWYgKG51bV9tc2l4ICZndDsgUFNJQ0ZHUjJfTlVNX01TSVgpCiYjNDM7CQludW1fbXNpeCA9IFBTSUNGR1IyX05VTV9NU0lYOwomIzQzOwllbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJQ0ZHUjIoMCksIG51bV9tc2l4KTsKJiM0MzsKJiM0MzsJbnVtX21zaXggPSBwZi0mZ3Q7Y2Fwcy5udW1fbXNpeCAvIHZhbGlkX251bV9zaSAtIDE7CiYjNDM7CWlmIChudW1fbXNpeCAmZ3Q7IFBTSUNGR1IyX05VTV9NU0lYKQomIzQzOwkJbnVtX21zaXggPSBQU0lDRkdSMl9OVU1fTVNJWDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHBmLSZndDt0b3RhbF92ZnM7IGkmIzQzOyYjNDM7KQomIzQzOwkJZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSUNGR1IyKGkgJiM0MzsgMSksIG51bV9tc2l4KTsKIH0KIAogc3RhdGljIHZvaWQgZW5ldGM0X2VuYWJsZV9hbGxfc2koc3RydWN0IGVuZXRjX3BmICpwZikKIHsKIAlzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gJmFtcDtwZi0mZ3Q7c2ktJmd0O2h3OwotCWludCBudW1fc2kgPSBwZi0mZ3Q7Y2Fwcy5udW1fdnNpICYjNDM7IDE7CiYjNDM7CWludCBudW1fc2kgPSBwZi0mZ3Q7dG90YWxfdmZzICYjNDM7IDE7CiAJdTMyIHNpX2JpdG1hcCA9IDA7CiAJaW50IGk7CiAKQEAgLTQxMiw3ICYjNDM7Mzc4LDkgQEAgc3RhdGljIHZvaWQgZW5ldGM0X2NvbmZpZ3VyZV9wb3J0X3NpKHN0cnVjdCBlbmV0Y19wZiAqcGYpCiAJLyogT3V0ZXIgVkxBTiB0YWcgd2lsbCBiZSB1c2VkIGZvciBWTEFOIGZpbHRlcmluZyAqLwogCWVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lWTEFORk1SLCBQU0lWTEFORk1SX1ZTKTsKIAotCWVuZXRjNF9zZXRfZGVmYXVsdF9zaV92bGFuX3Byb21pc2MocGYpOwomIzQzOwkvKiBFbmZvcmNlIFZMQU4gcHJvbWlzY3VvdXMgbW9kZSBmb3IgYWxsIFNJcyAqLwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHBmLSZndDt0b3RhbF92ZnMgJiM0MzsgMTsgaSYjNDM7JiM0MzspCiYjNDM7CQllbmV0Y19zZXRfc2lfdmxhbl9wcm9taXNjKHBmLSZndDtzaSwgaSwgdHJ1ZSk7CiAKIAkvKiBEaXNhYmxlIFNJIE1BQyBtdWx0aWNhc3QgJmFtcDsgdW5pY2FzdCBwcm9taXNjdW91cyAqLwogCWVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lQTU1SLCAwKTsKQEAgLTQ1MCwxOCAmIzQzOzQxOCw2MCBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfY29uZmlndXJlX3BvcnQoc3RydWN0IGVuZXRjX3BmICpwZikKIAllbmV0Y19zZXRfZGVmYXVsdF9yc3Nfa2V5KHBmKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGVuZXRjNF9nZXRfbnRtcF9jYXBzKHN0cnVjdCBlbmV0Y19zaSAqc2kpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbnRtcF91c2VyICp1c2VyID0gJmFtcDtzaS0mZ3Q7bnRtcF91c2VyOwomIzQzOwlzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gJmFtcDtzaS0mZ3Q7aHc7CiYjNDM7CXUzMiB2YWw7CiYjNDM7CiYjNDM7CXZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDNF9QU0lNQUZDQVBSKTsKJiM0MzsJdXNlci0mZ3Q7bWFmdF9udW1fZW50cmllcyA9IEZJRUxEX0dFVChQU0lNQUZDQVBSX05VTV9NQUNfQUZURSwgdmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBlbmV0YzRfbnRtcF9iaXRtYXBfaW5pdChzdHJ1Y3QgbnRtcF91c2VyICp1c2VyKQomIzQzO3sKJiM0MzsJdXNlci0mZ3Q7bWFmdF9laWRfYml0bWFwID0gYml0bWFwX3phbGxvYyh1c2VyLSZndDttYWZ0X251bV9lbnRyaWVzLAomIzQzOwkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghdXNlci0mZ3Q7bWFmdF9laWRfYml0bWFwKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlbmV0YzRfbnRtcF9iaXRtYXBfZnJlZShzdHJ1Y3QgbnRtcF91c2VyICp1c2VyKQomIzQzO3sKJiM0MzsJYml0bWFwX2ZyZWUodXNlci0mZ3Q7bWFmdF9laWRfYml0bWFwKTsKJiM0MzsJdXNlci0mZ3Q7bWFmdF9laWRfYml0bWFwID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGVuZXRjNF9pbml0X250bXBfdXNlcihzdHJ1Y3QgZW5ldGNfc2kgKnNpKQogewogCXN0cnVjdCBudG1wX3VzZXIgKnVzZXIgPSAmYW1wO3NpLSZndDtudG1wX3VzZXI7CiYjNDM7CWludCBlcnI7CiAKIAkvKiBGb3IgRU5FVEMgNC4xLCBhbGwgdGFibGUgdmVyc2lvbnMgYXJlIDAgKi8KIAltZW1zZXQoJmFtcDt1c2VyLSZndDt0YmwsIDAsIHNpemVvZih1c2VyLSZndDt0YmwpKTsKIAotCXJldHVybiBlbmV0YzRfc2V0dXBfY2JkcihzaSk7CiYjNDM7CWVyciA9IGVuZXRjNF9zZXR1cF9jYmRyKHNpKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWVuZXRjNF9nZXRfbnRtcF9jYXBzKHNpKTsKJiM0MzsJZXJyID0gZW5ldGM0X250bXBfYml0bWFwX2luaXQodXNlcik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIHRlYXJkb3duX2NiZHI7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO3RlYXJkb3duX2NiZHI6CiYjNDM7CWVuZXRjNF90ZWFyZG93bl9jYmRyKHNpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgZW5ldGM0X2ZyZWVfbnRtcF91c2VyKHN0cnVjdCBlbmV0Y19zaSAqc2kpCiB7CiYjNDM7CWVuZXRjNF9udG1wX2JpdG1hcF9mcmVlKCZhbXA7c2ktJmd0O250bXBfdXNlcik7CiAJZW5ldGM0X3RlYXJkb3duX2NiZHIoc2kpOwogfQogCkBAIC00NzksNyAmIzQzOzQ4OSw3IEBAIHN0YXRpYyBpbnQgZW5ldGM0X3BmX2luaXQoc3RydWN0IGVuZXRjX3BmICpwZikKIAogCWVyciA9IGVuZXRjNF9pbml0X250bXBfdXNlcihwZi0mZ3Q7c2kpOwogCWlmIChlcnIpIHsKLQkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIGluaXQgQ0JEUlxuJiMzNDspOwomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIGluaXQgTlRNUCB1c2VyXG4mIzM0Oyk7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC00OTMsMTggJiM0Mzs1MDMsMTcgQEAgc3RhdGljIHZvaWQgZW5ldGM0X3BmX2ZyZWUoc3RydWN0IGVuZXRjX3BmICpwZikKIAllbmV0YzRfZnJlZV9udG1wX3VzZXIocGYtJmd0O3NpKTsKIH0KIAotc3RhdGljIHZvaWQgZW5ldGM0X3BzaV9kb19zZXRfcnhfbW9kZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7c3RhdGljIGludCBlbmV0YzRfcGZfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiYjNDM7CQkJCSBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMsCiYjNDM7CQkJCSBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpCiB7Ci0Jc3RydWN0IGVuZXRjX3NpICpzaSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZW5ldGNfc2ksIHJ4X21vZGVfdGFzayk7Ci0Jc3RydWN0IGVuZXRjX3BmICpwZiA9IGVuZXRjX3NpX3ByaXYoc2kpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gc2ktJmd0O25kZXY7Ci0Jc3RydWN0IGVuZXRjX2h3ICpodyA9ICZhbXA7c2ktJmd0O2h3OwomIzQzOwlzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CXN0cnVjdCBlbmV0Y19wZiAqcGYgPSBlbmV0Y19zaV9wcml2KHByaXYtJmd0O3NpKTsKJiM0MzsJc3RydWN0IGVuZXRjX3NpICpzaSA9IHByaXYtJmd0O3NpOwogCWJvb2wgdWNfcHJvbWlzYyA9IGZhbHNlOwogCWJvb2wgbWNfcHJvbWlzYyA9IGZhbHNlOwogCWludCB0eXBlID0gMDsKIAotCXJ0bmxfbG9jaygpOwotCiAJaWYgKG5kZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9QUk9NSVNDKSB7CiAJCXVjX3Byb21pc2MgPSB0cnVlOwogCQltY19wcm9taXNjID0gdHJ1ZTsKQEAgLTUxNSwyOCAmIzQzOzUyNCwyMSBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfcHNpX2RvX3NldF9yeF9tb2RlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJdHlwZSA9IEVORVRDX01BQ19GSUxURVJfVFlQRV9BTEw7CiAJfQogCi0JZW5ldGM0X3BmX3NldF9zaV9tYWNfcHJvbWlzYyhodywgMCwgdWNfcHJvbWlzYywgbWNfcHJvbWlzYyk7CiYjNDM7CWVuZXRjX3NldF9zaV91Y19wcm9taXNjKHNpLCAwLCB1Y19wcm9taXNjKTsKJiM0MzsJZW5ldGNfc2V0X3NpX21jX3Byb21pc2Moc2ksIDAsIG1jX3Byb21pc2MpOwogCiAJaWYgKHVjX3Byb21pc2MpIHsKLQkJZW5ldGM0X3BmX3NldF9zaV91Y19oYXNoX2ZpbHRlcihodywgMCwgMCk7CiYjNDM7CQllbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc2ksIDAsIDApOwogCQllbmV0YzRfcGZfY2xlYXJfbWFmdF9lbnRyaWVzKHBmKTsKIAl9CiAKIAlpZiAobWNfcHJvbWlzYykKLQkJZW5ldGM0X3BmX3NldF9zaV9tY19oYXNoX2ZpbHRlcihodywgMCwgMCk7CiYjNDM7CQllbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXIoc2ksIDAsIDApOwogCiAJLyogU2V0IG5ldyBNQUMgZmlsdGVyICovCi0JZW5ldGM0X3BmX3NldF9tYWNfZmlsdGVyKHBmLCB0eXBlKTsKJiM0MzsJZW5ldGM0X3BmX3NldF9tYWNfZmlsdGVyKHBmLCB0eXBlLCB1YywgbWMpOwogCi0JcnRubF91bmxvY2soKTsKLX0KLQotc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQotewotCXN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKLQlzdHJ1Y3QgZW5ldGNfc2kgKnNpID0gcHJpdi0mZ3Q7c2k7Ci0KLQlxdWV1ZV93b3JrKHNpLSZndDt3b3JrcXVldWUsICZhbXA7c2ktJmd0O3J4X21vZGVfdGFzayk7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGVuZXRjNF9wZl9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCkBAIC01NDQsMTIgJiM0Mzs1NDYsMTEgQEAgc3RhdGljIGludCBlbmV0YzRfcGZfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAogewogCW5ldGRldl9mZWF0dXJlc190IGNoYW5nZWQgPSBuZGV2LSZndDtmZWF0dXJlcyBeIGZlYXR1cmVzOwogCXN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKLQlzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gJmFtcDtwcml2LSZndDtzaS0mZ3Q7aHc7CiAKIAlpZiAoY2hhbmdlZCAmYW1wOyBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpIHsKIAkJYm9vbCBwcm9taXNjX2VuID0gIShmZWF0dXJlcyAmYW1wOyBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpOwogCi0JCWVuZXRjNF9wZl9zZXRfc2lfdmxhbl9wcm9taXNjKGh3LCAwLCBwcm9taXNjX2VuKTsKJiM0MzsJCWVuZXRjX3NldF9zaV92bGFuX3Byb21pc2MocHJpdi0mZ3Q7c2ksIDAsIHByb21pc2NfZW4pOwogCX0KIAogCWlmIChjaGFuZ2VkICZhbXA7IE5FVElGX0ZfTE9PUEJBQ0spCkBAIC01NjYsNyAmIzQzOzU2Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZW5ldGM0X25kZXZfb3BzID0gewogCS5uZG9fc3RhcnRfeG1pdAkJPSBlbmV0Y194bWl0LAogCS5uZG9fZ2V0X3N0YXRzCQk9IGVuZXRjX2dldF9zdGF0cywKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGVuZXRjX3BmX3NldF9tYWNfYWRkciwKLQkubmRvX3NldF9yeF9tb2RlCT0gZW5ldGM0X3BmX3NldF9yeF9tb2RlLAomIzQzOwkubmRvX3NldF9yeF9tb2RlX2FzeW5jCT0gZW5ldGM0X3BmX3NldF9yeF9tb2RlLAogCS5uZG9fc2V0X2ZlYXR1cmVzCT0gZW5ldGM0X3BmX3NldF9mZWF0dXJlcywKIAkubmRvX3ZsYW5fcnhfYWRkX3ZpZAk9IGVuZXRjX3ZsYW5fcnhfYWRkX3ZpZCwKIAkubmRvX3ZsYW5fcnhfa2lsbF92aWQJPSBlbmV0Y192bGFuX3J4X2RlbF92aWQsCkBAIC02MDIsMTEgJiM0Mzs2MDMsNiBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfbWFjX2NvbmZpZyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLCB1bnNpZ25lZCBpbnQgbW9kZSwKIAljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9SWElEOgogCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1RYSUQ6CiAJCXZhbCB8PSBJRk1PREVfUkdNSUk7Ci0JCS8qIFdlIG5lZWQgdG8gZW5hYmxlIGF1dG8tbmVnb3RpYXRpb24gZm9yIHRoZSBNQUMKLQkJICogaWYgaXRzIFJHTUlJIGludGVyZmFjZSBzdXBwb3J0IEluLUJhbmQgc3RhdHVzLgotCQkgKi8KLQkJaWYgKHBoeWxpbmtfYXV0b25lZ19pbmJhbmQobW9kZSkpCi0JCQl2YWwgfD0gUE1fSUZfTU9ERV9FTkE7CiAJCWJyZWFrOwogCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUk6CiAJCXZhbCB8PSBJRk1PREVfUk1JSTsKQEAgLTYxNiw3ICYjNDM7NjEyLDYgQEAgc3RhdGljIHZvaWQgZW5ldGM0X21hY19jb25maWcoc3RydWN0IGVuZXRjX3BmICpwZiwgdW5zaWduZWQgaW50IG1vZGUsCiAJCXZhbCB8PSBJRk1PREVfU0dNSUk7CiAJCWJyZWFrOwogCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSOgotCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1hHTUlJOgogCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk6CiAJCXZhbCB8PSBJRk1PREVfWEdNSUk7CiAJCWJyZWFrOwpAQCAtNjQyLDI2ICYjNDM7NjM3LDE5IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9zZXRfcG9ydF9zcGVlZChzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2LCBpbnQgc3BlZWQpCiAJdTMyIG9sZF9zcGVlZCA9IHByaXYtJmd0O3NwZWVkOwogCXUzMiB2YWw7CiAKJiM0MzsJLyogSWYgdGhlIHNwZWVkIGlzIHVua25vd24sIHVzZSB0aGUgbWluaW11bSB2YWx1ZSAqLwomIzQzOwlpZiAoc3BlZWQgPT0gU1BFRURfVU5LTk9XTikgewomIzQzOwkJc3BlZWQgPSBTUEVFRF8xMDsKJiM0MzsJCWRldl93YXJuKHByaXYtJmd0O2RldiwgJiMzNDtTcGVlZCB1bmtub3duLCBkZWZhdWx0IGlzIDEwTWJwc1xuJiMzNDspOwomIzQzOwl9CiYjNDM7CiAJaWYgKHNwZWVkID09IG9sZF9zcGVlZCkKIAkJcmV0dXJuOwogCi0JdmFsID0gZW5ldGNfcG9ydF9yZCgmYW1wO3ByaXYtJmd0O3NpLSZndDtodywgRU5FVEM0X1BDUik7Ci0JdmFsICZhbXA7PSB+UENSX1BTUEVFRDsKLQotCXN3aXRjaCAoc3BlZWQpIHsKLQljYXNlIFNQRUVEXzEwMDoKLQljYXNlIFNQRUVEXzEwMDA6Ci0JY2FzZSBTUEVFRF8yNTAwOgotCWNhc2UgU1BFRURfMTAwMDA6Ci0JCXZhbCB8PSAoUENSX1BTUEVFRCAmYW1wOyBQQ1JfUFNQRUVEX1ZBTChzcGVlZCkpOwotCQlicmVhazsKLQljYXNlIFNQRUVEXzEwOgotCWRlZmF1bHQ6Ci0JCXZhbCB8PSAoUENSX1BTUEVFRCAmYW1wOyBQQ1JfUFNQRUVEX1ZBTChTUEVFRF8xMCkpOwotCX0KLQotCXByaXYtJmd0O3NwZWVkID0gc3BlZWQ7CiYjNDM7CXZhbCA9IGVuZXRjX3BvcnRfcmQoJmFtcDtwcml2LSZndDtzaS0mZ3Q7aHcsIEVORVRDNF9QQ1IpICZhbXA7ICh+UENSX1BTUEVFRCk7CiYjNDM7CXZhbCB8PSBQQ1JfUFNQRUVEX1ZBTChzcGVlZCk7CiAJZW5ldGNfcG9ydF93cigmYW1wO3ByaXYtJmd0O3NpLSZndDtodywgRU5FVEM0X1BDUiwgdmFsKTsKJiM0MzsJcHJpdi0mZ3Q7c3BlZWQgPSBzcGVlZDsKIH0KIAogc3RhdGljIHZvaWQgZW5ldGM0X3NldF9yZ21paV9tYWMoc3RydWN0IGVuZXRjX3BmICpwZiwgaW50IHNwZWVkLCBpbnQgZHVwbGV4KQpAQCAtNzE3LDIyICYjNDM7NzA1LDYgQEAgc3RhdGljIHZvaWQgZW5ldGM0X3NldF9ybWlpX21hYyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBpbnQgc3BlZWQsIGludCBkdXBsZXgpCiAJZW5ldGNfcG9ydF9tYWNfd3Ioc2ksIEVORVRDNF9QTV9JRl9NT0RFKDApLCB2YWwpOwogfQogCi1zdGF0aWMgdm9pZCBlbmV0YzRfc2V0X2hkX2Zsb3dfY29udHJvbChzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBib29sIGVuYWJsZSkKLXsKLQlzdHJ1Y3QgZW5ldGNfc2kgKnNpID0gcGYtJmd0O3NpOwotCXUzMiBvbGRfdmFsLCB2YWw7Ci0KLQlpZiAoIXBmLSZndDtjYXBzLmhhbGZfZHVwbGV4KQotCQlyZXR1cm47Ci0KLQlvbGRfdmFsID0gZW5ldGNfcG9ydF9tYWNfcmQoc2ksIEVORVRDNF9QTV9DTURfQ0ZHKDApKTsKLQl2YWwgPSB1MzJfcmVwbGFjZV9iaXRzKG9sZF92YWwsIGVuYWJsZSA/IDEgOiAwLCBQTV9DTURfQ0ZHX0hEX0ZDRU4pOwotCWlmICh2YWwgPT0gb2xkX3ZhbCkKLQkJcmV0dXJuOwotCi0JZW5ldGNfcG9ydF9tYWNfd3Ioc2ksIEVORVRDNF9QTV9DTURfQ0ZHKDApLCB2YWwpOwotfQotCiBzdGF0aWMgdm9pZCBlbmV0YzRfc2V0X3J4X3BhdXNlKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGJvb2wgcnhfcGF1c2UpCiB7CiAJc3RydWN0IGVuZXRjX3NpICpzaSA9IHBmLSZndDtzaTsKQEAgLTkwOCwxMyAmIzQzOzg4MCwxMSBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfcGxfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsCiAJc3RydWN0IGVuZXRjX3BmICpwZiA9IHBoeWxpbmtfdG9fZW5ldGNfcGYoY29uZmlnKTsKIAlzdHJ1Y3QgZW5ldGNfc2kgKnNpID0gcGYtJmd0O3NpOwogCXN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXY7Ci0JYm9vbCBoZF9mYyA9IGZhbHNlOwogCiAJcHJpdiA9IG5ldGRldl9wcml2KHNpLSZndDtuZGV2KTsKIAllbmV0YzRfc2V0X3BvcnRfc3BlZWQocHJpdiwgc3BlZWQpOwogCi0JaWYgKCFwaHlsaW5rX2F1dG9uZWdfaW5iYW5kKG1vZGUpICZhbXA7JmFtcDsKLQkgICAgcGh5X2ludGVyZmFjZV9tb2RlX2lzX3JnbWlpKGludGVyZmFjZSkpCiYjNDM7CWlmIChwaHlfaW50ZXJmYWNlX21vZGVfaXNfcmdtaWkoaW50ZXJmYWNlKSkKIAkJZW5ldGM0X3NldF9yZ21paV9tYWMocGYsIHNwZWVkLCBkdXBsZXgpOwogCiAJaWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSkKQEAgLTkyNiwxOCAmIzQzOzg5Niw4IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wbF9tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywKIAkJICovCiAJCWlmIChwcml2LSZndDthY3RpdmVfb2ZmbG9hZHMgJmFtcDsgRU5FVENfRl9RQlUpCiAJCQl0eF9wYXVzZSA9IGZhbHNlOwotCX0gZWxzZSB7IC8qIERVUExFWF9IQUxGICovCi0JCWlmICh0eF9wYXVzZSB8fCByeF9wYXVzZSkKLQkJCWhkX2ZjID0gdHJ1ZTsKLQotCQkvKiBBcyBwZXIgODAyLjMgYW5uZXggMzFCLCBQQVVTRSBmcmFtZXMgYXJlIG9ubHkgc3VwcG9ydGVkCi0JCSAqIHdoZW4gdGhlIGxpbmsgaXMgY29uZmlndXJlZCBmb3IgZnVsbCBkdXBsZXggb3BlcmF0aW9uLgotCQkgKi8KLQkJdHhfcGF1c2UgPSBmYWxzZTsKLQkJcnhfcGF1c2UgPSBmYWxzZTsKIAl9CiAKLQllbmV0YzRfc2V0X2hkX2Zsb3dfY29udHJvbChwZiwgaGRfZmMpOwogCWVuZXRjNF9zZXRfdHhfcGF1c2UocGYsIHByaXYtJmd0O251bV9yeF9yaW5ncywgdHhfcGF1c2UpOwogCWVuZXRjNF9zZXRfcnhfcGF1c2UocGYsIHJ4X3BhdXNlKTsKIAllbmV0YzRfbWFjX3R4X2VuYWJsZShwZik7CkBAIC0xMDA5LDE5ICYjNDM7OTY5LDYgQEAgc3RhdGljIHZvaWQgZW5ldGM0X2xpbmtfZGVpbml0KHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYpCiAJZW5ldGNfbWRpb2J1c19kZXN0cm95KHBmKTsKIH0KIAotc3RhdGljIGludCBlbmV0YzRfcHNpX3dxX3Rhc2tfaW5pdChzdHJ1Y3QgZW5ldGNfc2kgKnNpKQotewotCWNoYXIgd3FfbmFtZVsyNF07Ci0KLQlJTklUX1dPUksoJmFtcDtzaS0mZ3Q7cnhfbW9kZV90YXNrLCBlbmV0YzRfcHNpX2RvX3NldF9yeF9tb2RlKTsKLQlzbnByaW50Zih3cV9uYW1lLCBzaXplb2Yod3FfbmFtZSksICYjMzQ7ZW5ldGMtJXMmIzM0OywgcGNpX25hbWUoc2ktJmd0O3BkZXYpKTsKLQlzaS0mZ3Q7d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUod3FfbmFtZSk7Ci0JaWYgKCFzaS0mZ3Q7d29ya3F1ZXVlKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGVuZXRjNF9wZl9uZXRkZXZfY3JlYXRlKHN0cnVjdCBlbmV0Y19zaSAqc2kpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtzaS0mZ3Q7cGRldi0mZ3Q7ZGV2OwpAQCAtMTA2MiwxMiAmIzQzOzEwMDksNiBAQCBzdGF0aWMgaW50IGVuZXRjNF9wZl9uZXRkZXZfY3JlYXRlKHN0cnVjdCBlbmV0Y19zaSAqc2kpCiAJaWYgKGVycikKIAkJZ290byBlcnJfbGlua19pbml0OwogCi0JZXJyID0gZW5ldGM0X3BzaV93cV90YXNrX2luaXQoc2kpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIGluaXQgd29ya3F1ZXVlXG4mIzM0Oyk7Ci0JCWdvdG8gZXJyX3dxX2luaXQ7Ci0JfQotCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIG5ldGRldlxuJiMzNDspOwpAQCAtMTA3Nyw4ICYjNDM7MTAxOCw2IEBAIHN0YXRpYyBpbnQgZW5ldGM0X3BmX25ldGRldl9jcmVhdGUoc3RydWN0IGVuZXRjX3NpICpzaSkKIAlyZXR1cm4gMDsKIAogZXJyX3JlZ19uZXRkZXY6Ci0JZGVzdHJveV93b3JrcXVldWUoc2ktJmd0O3dvcmtxdWV1ZSk7Ci1lcnJfd3FfaW5pdDoKIAllbmV0YzRfbGlua19kZWluaXQocHJpdik7CiBlcnJfbGlua19pbml0OgogCWVuZXRjX2ZyZWVfbXNpeChwcml2KTsKQEAgLTEwOTYsOCAmIzQzOzEwMzUsNiBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfcGZfbmV0ZGV2X2Rlc3Ryb3koc3RydWN0IGVuZXRjX3NpICpzaSkKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHNpLSZndDtuZGV2OwogCiAJdW5yZWdpc3Rlcl9uZXRkZXYobmRldik7Ci0JY2FuY2VsX3dvcmsoJmFtcDtzaS0mZ3Q7cnhfbW9kZV90YXNrKTsKLQlkZXN0cm95X3dvcmtxdWV1ZShzaS0mZ3Q7d29ya3F1ZXVlKTsKIAllbmV0YzRfbGlua19kZWluaXQocHJpdik7CiAJZW5ldGNfZnJlZV9tc2l4KHByaXYpOwogCWZyZWVfbmV0ZGV2KG5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ldGh0b29sLmMKaW5kZXggNzFmMzc2ZWYxYmUxYzkuLjA3Yjc4MzJmMjQyNzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ldGh0b29sLmMKQEAgLTI5LDcgJiM0MzsyOSw3IEBAIHN0YXRpYyBjb25zdCB1MzIgZW5ldGNfcnhiZHJfcmVnc1tdID0gewogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBlbmV0Y19wb3J0X3JlZ3NbXSA9IHsKLQlFTkVUQ19QTVIsIEVORVRDX1BTUiwgRU5FVENfUFNJUE1SLCBFTkVUQ19QU0lQTUFSMCgwKSwKJiM0MzsJRU5FVENfUE1SLCBFTkVUQ19QU1IsIEVORVRDX1BTSVBNTVIsIEVORVRDX1BTSVBNQVIwKDApLAogCUVORVRDX1BTSVBNQVIxKDApLCBFTkVUQ19QVFhNQkFSLCBFTkVUQ19QQ0FQUjAsIEVORVRDX1BDQVBSMSwKIAlFTkVUQ19QU0lDRkdSMCgwKSwgRU5FVENfUFJGU0NBUFIsIEVORVRDX1BUQ01TRFVSKDApLAogCUVORVRDX1BNMF9DTURfQ0ZHLCBFTkVUQ19QTTBfTUFYRlJNLCBFTkVUQ19QTTBfSUZfTU9ERQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX2h3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfaHcuaAppbmRleCBiZjk5YjY1ZDc1OThhYi4uMTZkYTczMmRjNWRlODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ody5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ody5oCkBAIC0xODAsMTMgJiM0MzsxODAsMTMgQEAgZW51bSBlbmV0Y19iZHJfdHlwZSB7VFgsIFJYfTsKICNkZWZpbmUgRU5FVENfUE1SX1BTUEVFRF8xMDAwTQlCSVQoOSkKICNkZWZpbmUgRU5FVENfUE1SX1BTUEVFRF8yNTAwTQlCSVQoMTApCiAjZGVmaW5lIEVORVRDX1BTUgkJMHgwMDA0IC8qIFJPICovCi0jZGVmaW5lIEVORVRDX1BTSVBNUgkJMHgwMDE4Ci0jZGVmaW5lIEVORVRDX1BTSVBNUl9TRVRfVVAobikJQklUKG4pIC8qIG4gPSBTSSBpbmRleCAqLwotI2RlZmluZSBFTkVUQ19QU0lQTVJfU0VUX01QKG4pCUJJVCgobikgJiM0MzsgMTYpCiYjNDM7I2RlZmluZSBFTkVUQ19QU0lQTU1SCQkweDAwMTgKJiM0MzsjZGVmaW5lICBQU0lQTU1SX1NJX01BQ19VUChuKQlCSVQobikgLyogbiA9IFNJIGluZGV4ICovCiYjNDM7I2RlZmluZSAgUFNJUE1NUl9TSV9NQUNfTVAobikJQklUKChuKSAmIzQzOyAxNikKJiM0MzsKICNkZWZpbmUgRU5FVENfUFNJUFZNUgkJMHgwMDFjCi0jZGVmaW5lIEVORVRDX1ZMQU5fUFJPTUlTQ19NQVBfQUxMCTB4NwotI2RlZmluZSBFTkVUQ19QU0lQVk1SX1NFVF9WUChzaW1hcCkJKChzaW1hcCkgJmFtcDsgMHg3KQotI2RlZmluZSBFTkVUQ19QU0lQVk1SX1NFVF9WVVRBKHNpbWFwKQkoKChzaW1hcCkgJmFtcDsgMHg3KSAmbHQ7Jmx0OyAxNikKJiM0MzsjZGVmaW5lICBQU0lQVk1SX1NJX1ZMQU5fUChuKQlCSVQobikgLyogbiA9IFNJIGluZGV4ICovCiYjNDM7CiAjZGVmaW5lIEVORVRDX1BTSVBNQVIwKG4pCSgweDAxMDAgJiM0MzsgKG4pICogMHg4KSAvKiBuID0gU0kgaW5kZXggKi8KICNkZWZpbmUgRU5FVENfUFNJUE1BUjEobikJKDB4MDEwNCAmIzQzOyAobikgKiAweDgpCiAjZGVmaW5lIEVORVRDX1BWQ0xDVFIJCTB4MDIwOApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuYwppbmRleCAyZDY4N2JiOGMzYTA2My4uYTUwOTkyOWY4OWYyNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jCkBAIC00MiwyNiAmIzQzOzQyLDYgQEAgc3RhdGljIHZvaWQgZW5ldGNfcGZfZGVzdHJveV9wY3Moc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpCiAJbHlueF9wY3NfZGVzdHJveShwY3MpOwogfQogCi1zdGF0aWMgdm9pZCBlbmV0Y19zZXRfdmxhbl9wcm9taXNjKHN0cnVjdCBlbmV0Y19odyAqaHcsIGNoYXIgc2lfbWFwKQotewotCXUzMiB2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBFTkVUQ19QU0lQVk1SKTsKLQotCXZhbCAmYW1wOz0gfkVORVRDX1BTSVBWTVJfU0VUX1ZQKEVORVRDX1ZMQU5fUFJPTUlTQ19NQVBfQUxMKTsKLQllbmV0Y19wb3J0X3dyKGh3LCBFTkVUQ19QU0lQVk1SLCBFTkVUQ19QU0lQVk1SX1NFVF9WUChzaV9tYXApIHwgdmFsKTsKLX0KLQotc3RhdGljIHZvaWQgZW5ldGNfZW5hYmxlX3NpX3ZsYW5fcHJvbWlzYyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBpbnQgc2lfaWR4KQotewotCXBmLSZndDt2bGFuX3Byb21pc2Nfc2ltYXAgfD0gQklUKHNpX2lkeCk7Ci0JZW5ldGNfc2V0X3ZsYW5fcHJvbWlzYygmYW1wO3BmLSZndDtzaS0mZ3Q7aHcsIHBmLSZndDt2bGFuX3Byb21pc2Nfc2ltYXApOwotfQotCi1zdGF0aWMgdm9pZCBlbmV0Y19kaXNhYmxlX3NpX3ZsYW5fcHJvbWlzYyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBpbnQgc2lfaWR4KQotewotCXBmLSZndDt2bGFuX3Byb21pc2Nfc2ltYXAgJmFtcDs9IH5CSVQoc2lfaWR4KTsKLQllbmV0Y19zZXRfdmxhbl9wcm9taXNjKCZhbXA7cGYtJmd0O3NpLSZndDtodywgcGYtJmd0O3ZsYW5fcHJvbWlzY19zaW1hcCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGVuZXRjX3NldF9pc29sX3ZsYW4oc3RydWN0IGVuZXRjX2h3ICpodywgaW50IHNpLCB1MTYgdmxhbiwgdTggcW9zKQogewogCXUzMiB2YWwgPSAwOwpAQCAtODAsMzcgJiM0Mzs2MCw2IEBAIHN0YXRpYyB2b2lkIGVuZXRjX2FkZF9tYWNfYWRkcl9lbV9maWx0ZXIoc3RydWN0IGVuZXRjX21hY19maWx0ZXIgKmZpbHRlciwKIAlmaWx0ZXItJmd0O21hY19hZGRyX2NudCYjNDM7JiM0Mzs7CiB9CiAKLXN0YXRpYyB2b2lkIGVuZXRjX2NsZWFyX21hY19odF9mbHQoc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkeCwgaW50IHR5cGUpCi17Ci0JYm9vbCBlcnIgPSBzaS0mZ3Q7ZXJyYXRhICZhbXA7IEVORVRDX0VSUl9VQ01DU1dQOwotCi0JaWYgKHR5cGUgPT0gVUMpIHsKLQkJZW5ldGNfcG9ydF93cigmYW1wO3NpLSZndDtodywgRU5FVENfUFNJVU1IRlIwKHNpX2lkeCwgZXJyKSwgMCk7Ci0JCWVuZXRjX3BvcnRfd3IoJmFtcDtzaS0mZ3Q7aHcsIEVORVRDX1BTSVVNSEZSMShzaV9pZHgpLCAwKTsKLQl9IGVsc2UgeyAvKiBNQyAqLwotCQllbmV0Y19wb3J0X3dyKCZhbXA7c2ktJmd0O2h3LCBFTkVUQ19QU0lNTUhGUjAoc2lfaWR4LCBlcnIpLCAwKTsKLQkJZW5ldGNfcG9ydF93cigmYW1wO3NpLSZndDtodywgRU5FVENfUFNJTU1IRlIxKHNpX2lkeCksIDApOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZW5ldGNfc2V0X21hY19odF9mbHQoc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkeCwgaW50IHR5cGUsCi0JCQkJIHVuc2lnbmVkIGxvbmcgaGFzaCkKLXsKLQlib29sIGVyciA9IHNpLSZndDtlcnJhdGEgJmFtcDsgRU5FVENfRVJSX1VDTUNTV1A7Ci0KLQlpZiAodHlwZSA9PSBVQykgewotCQllbmV0Y19wb3J0X3dyKCZhbXA7c2ktJmd0O2h3LCBFTkVUQ19QU0lVTUhGUjAoc2lfaWR4LCBlcnIpLAotCQkJICAgICAgbG93ZXJfMzJfYml0cyhoYXNoKSk7Ci0JCWVuZXRjX3BvcnRfd3IoJmFtcDtzaS0mZ3Q7aHcsIEVORVRDX1BTSVVNSEZSMShzaV9pZHgpLAotCQkJICAgICAgdXBwZXJfMzJfYml0cyhoYXNoKSk7Ci0JfSBlbHNlIHsgLyogTUMgKi8KLQkJZW5ldGNfcG9ydF93cigmYW1wO3NpLSZndDtodywgRU5FVENfUFNJTU1IRlIwKHNpX2lkeCwgZXJyKSwKLQkJCSAgICAgIGxvd2VyXzMyX2JpdHMoaGFzaCkpOwotCQllbmV0Y19wb3J0X3dyKCZhbXA7c2ktJmd0O2h3LCBFTkVUQ19QU0lNTUhGUjEoc2lfaWR4KSwKLQkJCSAgICAgIHVwcGVyXzMyX2JpdHMoaGFzaCkpOwotCX0KLX0KLQogc3RhdGljIHZvaWQgZW5ldGNfc3luY19tYWNfZmlsdGVycyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKQogewogCXN0cnVjdCBlbmV0Y19tYWNfZmlsdGVyICpmID0gcGYtJmd0O21hY19maWx0ZXI7CkBAIC0xMjIsMTIgJiM0Mzs3MSwxNiBAQCBzdGF0aWMgdm9pZCBlbmV0Y19zeW5jX21hY19maWx0ZXJzKHN0cnVjdCBlbmV0Y19wZiAqcGYpCiAJZm9yIChpID0gMDsgaSAmbHQ7IE1BRERSX1RZUEU7IGkmIzQzOyYjNDM7LCBmJiM0MzsmIzQzOykgewogCQlib29sIGVtID0gKGYtJmd0O21hY19hZGRyX2NudCA9PSAxKSAmYW1wOyZhbXA7IChpID09IFVDKTsKIAkJYm9vbCBjbGVhciA9ICFmLSZndDttYWNfYWRkcl9jbnQ7CiYjNDM7CQl1NjQgaGFzaDsKIAogCQlpZiAoY2xlYXIpIHsKLQkJCWlmIChpID09IFVDKQomIzQzOwkJCWlmIChpID09IFVDKSB7CiAJCQkJZW5ldGNfY2xlYXJfbWFjX2ZsdF9lbnRyeShzaSwgcG9zKTsKJiM0MzsJCQkJZW5ldGNfc2V0X3NpX3VjX2hhc2hfZmlsdGVyKHNpLCAwLCAwKTsKJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQllbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXIoc2ksIDAsIDApOwomIzQzOwkJCX0KIAotCQkJZW5ldGNfY2xlYXJfbWFjX2h0X2ZsdChzaSwgMCwgaSk7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0xMzUsNyAmIzQzOzg4LDcgQEAgc3RhdGljIHZvaWQgZW5ldGNfc3luY19tYWNfZmlsdGVycyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKQogCQlpZiAoZW0pIHsKIAkJCWludCBlcnI7CiAKLQkJCWVuZXRjX2NsZWFyX21hY19odF9mbHQoc2ksIDAsIFVDKTsKJiM0MzsJCQllbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc2ksIDAsIDApOwogCiAJCQllcnIgPSBlbmV0Y19zZXRfbWFjX2ZsdF9lbnRyeShzaSwgcG9zLCBmLSZndDttYWNfYWRkciwKIAkJCQkJCSAgICAgIEJJVCgwKSk7CkBAIC0xNDcsMTEgJiM0MzsxMDAsMTUgQEAgc3RhdGljIHZvaWQgZW5ldGNfc3luY19tYWNfZmlsdGVycyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKQogCQkJCSBlcnIpOwogCQl9CiAKJiM0MzsJCWJpdG1hcF90b19hcnI2NCgmYW1wO2hhc2gsIGYtJmd0O21hY19oYXNoX3RhYmxlLAomIzQzOwkJCQlFTkVUQ19NQUREUl9IQVNIX1RCTF9TWik7CiAJCS8qIGhhc2ggdGFibGUgZmlsdGVyLCBjbGVhciBFTSBmaWx0ZXIgZm9yIFVDIGVudHJpZXMgKi8KLQkJaWYgKGkgPT0gVUMpCiYjNDM7CQlpZiAoaSA9PSBVQykgewogCQkJZW5ldGNfY2xlYXJfbWFjX2ZsdF9lbnRyeShzaSwgcG9zKTsKLQotCQllbmV0Y19zZXRfbWFjX2h0X2ZsdChzaSwgMCwgaSwgKmYtJmd0O21hY19oYXNoX3RhYmxlKTsKJiM0MzsJCQllbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc2ksIDAsIGhhc2gpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQllbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXIoc2ksIDAsIGhhc2gpOwomIzQzOwkJfQogCX0KIH0KIApAQCAtMTU5LDIxICYjNDM7MTE2LDE3IEBAIHN0YXRpYyB2b2lkIGVuZXRjX3BmX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAlzdHJ1Y3QgZW5ldGNfcGYgKnBmID0gZW5ldGNfc2lfcHJpdihwcml2LSZndDtzaSk7Ci0Jc3RydWN0IGVuZXRjX2h3ICpodyA9ICZhbXA7cHJpdi0mZ3Q7c2ktJmd0O2h3OwogCWJvb2wgdXByb20gPSBmYWxzZSwgbXByb20gPSBmYWxzZTsKIAlzdHJ1Y3QgZW5ldGNfbWFjX2ZpbHRlciAqZmlsdGVyOwogCXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7Ci0JdTMyIHBzaXBtciA9IDA7CiAJYm9vbCBlbTsKIAogCWlmIChuZGV2LSZndDtmbGFncyAmYW1wOyBJRkZfUFJPTUlTQykgewogCQkvKiBlbmFibGUgcHJvbWlzYyBtb2RlIGZvciBTSTAgKFBGKSAqLwotCQlwc2lwbXIgPSBFTkVUQ19QU0lQTVJfU0VUX1VQKDApIHwgRU5FVENfUFNJUE1SX1NFVF9NUCgwKTsKIAkJdXByb20gPSB0cnVlOwogCQltcHJvbSA9IHRydWU7CiAJfSBlbHNlIGlmIChuZGV2LSZndDtmbGFncyAmYW1wOyBJRkZfQUxMTVVMVEkpIHsKIAkJLyogZW5hYmxlIG11bHRpIGNhc3QgcHJvbWlzYyBtb2RlIGZvciBTSTAgKFBGKSAqLwotCQlwc2lwbXIgPSBFTkVUQ19QU0lQTVJfU0VUX01QKDApOwogCQltcHJvbSA9IHRydWU7CiAJfQogCkBAIC0yMTEsOSAmIzQzOzE2NCw4IEBAIHN0YXRpYyB2b2lkIGVuZXRjX3BmX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCQkvKiB1cGRhdGUgUEYgZW50cmllcyAqLwogCQllbmV0Y19zeW5jX21hY19maWx0ZXJzKHBmKTsKIAotCXBzaXBtciB8PSBlbmV0Y19wb3J0X3JkKGh3LCBFTkVUQ19QU0lQTVIpICZhbXA7Ci0JCSAgfihFTkVUQ19QU0lQTVJfU0VUX1VQKDApIHwgRU5FVENfUFNJUE1SX1NFVF9NUCgwKSk7Ci0JZW5ldGNfcG9ydF93cihodywgRU5FVENfUFNJUE1SLCBwc2lwbXIpOwomIzQzOwllbmV0Y19zZXRfc2lfdWNfcHJvbWlzYyhwcml2LSZndDtzaSwgMCwgdXByb20pOwomIzQzOwllbmV0Y19zZXRfc2lfbWNfcHJvbWlzYyhwcml2LSZndDtzaSwgMCwgbXByb20pOwogfQogCiBzdGF0aWMgdm9pZCBlbmV0Y19zZXRfbG9vcGJhY2soc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgZW4pCkBAIC00NjksMTIgJiM0Mzs0MjEsMTEgQEAgc3RhdGljIHZvaWQgZW5ldGNfY29uZmlndXJlX3BvcnQoc3RydWN0IGVuZXRjX3BmICpwZikKIAogCS8qIHNwbGl0IHVwIFJGUyBlbnRyaWVzICovCiAJZW5ldGNfcG9ydF9hc3NpZ25fcmZzX2VudHJpZXMocGYtJmd0O3NpKTsKLQogCS8qIGVuZm9yY2UgVkxBTiBwcm9taXNjIG1vZGUgZm9yIGFsbCBTSXMgKi8KLQlwZi0mZ3Q7dmxhbl9wcm9taXNjX3NpbWFwID0gRU5FVENfVkxBTl9QUk9NSVNDX01BUF9BTEw7Ci0JZW5ldGNfc2V0X3ZsYW5fcHJvbWlzYyhodywgcGYtJmd0O3ZsYW5fcHJvbWlzY19zaW1hcCk7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgcGYtJmd0O3RvdGFsX3ZmcyAmIzQzOyAxOyBpJiM0MzsmIzQzOykKJiM0MzsJCWVuZXRjX3NldF9zaV92bGFuX3Byb21pc2MocGYtJmd0O3NpLCBpLCB0cnVlKTsKIAotCWVuZXRjX3BvcnRfd3IoaHcsIEVORVRDX1BTSVBNUiwgMCk7CiYjNDM7CWVuZXRjX3BvcnRfd3IoaHcsIEVORVRDX1BTSVBNTVIsIDApOwogCiAJLyogZW5hYmxlIHBvcnQgKi8KIAllbmV0Y19wb3J0X3dyKGh3LCBFTkVUQ19QTVIsIEVORVRDX1BNUl9FTik7CkBAIC00OTQsMTIgJiM0Mzs0NDUsOSBAQCBzdGF0aWMgaW50IGVuZXRjX3BmX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAl9CiAKIAlpZiAoY2hhbmdlZCAmYW1wOyBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpIHsKLQkJc3RydWN0IGVuZXRjX3BmICpwZiA9IGVuZXRjX3NpX3ByaXYocHJpdi0mZ3Q7c2kpOwomIzQzOwkJYm9vbCBwcm9taXNjID0gIShmZWF0dXJlcyAmYW1wOyBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpOwogCi0JCWlmICghIShmZWF0dXJlcyAmYW1wOyBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpKQotCQkJZW5ldGNfZGlzYWJsZV9zaV92bGFuX3Byb21pc2MocGYsIDApOwotCQllbHNlCi0JCQllbmV0Y19lbmFibGVfc2lfdmxhbl9wcm9taXNjKHBmLCAwKTsKJiM0MzsJCWVuZXRjX3NldF9zaV92bGFuX3Byb21pc2MocHJpdi0mZ3Q7c2ksIDAsIHByb21pc2MpOwogCX0KIAogCWlmIChjaGFuZ2VkICZhbXA7IE5FVElGX0ZfTE9PUEJBQ0spCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5oCmluZGV4IDI4NWI3ZTVjNDhmZGM3Li41NmQyM2E4YTExYTA2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmgKQEAgLTE3LDEyICYjNDM7MTcsOSBAQCBzdHJ1Y3QgZW5ldGNfdmZfc3RhdGUgewogfTsKIAogc3RydWN0IGVuZXRjX3BvcnRfY2FwcyB7Ci0JdTMyIGhhbGZfZHVwbGV4OjE7Ci0JaW50IG51bV92c2k7CiAJaW50IG51bV9tc2l4OwogCWludCBudW1fcnhfYmRyOwogCWludCBudW1fdHhfYmRyOwotCWludCBtYWNfZmlsdGVyX251bTsKIH07CiAKIHN0cnVjdCBlbmV0Y19wZjsKQEAgLTQ3LDcgJiM0Mzs0NCw2IEBAIHN0cnVjdCBlbmV0Y19wZiB7CiAJc3RydWN0IHdvcmtfc3RydWN0IG1zZ190YXNrOwogCWNoYXIgbXNnX2ludF9uYW1lW0VORVRDX0lOVF9OQU1FX01BWF07CiAKLQljaGFyIHZsYW5fcHJvbWlzY19zaW1hcDsgLyogYml0bWFwIG9mIFNJcyBpbiBWTEFOIHByb21pc2MgbW9kZSAqLwogCURFQ0xBUkVfQklUTUFQKHZsYW5faHRfZmlsdGVyLCBFTkVUQ19WTEFOX0hUX1NJWkUpOwogCURFQ0xBUkVfQklUTUFQKGFjdGl2ZV92bGFucywgVkxBTl9OX1ZJRCk7CiAKQEAgLTYwLDggJiM0Mzs1Niw2IEBAIHN0cnVjdCBlbmV0Y19wZiB7CiAKIAlzdHJ1Y3QgZW5ldGNfcG9ydF9jYXBzIGNhcHM7CiAJY29uc3Qgc3RydWN0IGVuZXRjX3BmX29wcyAqb3BzOwotCi0JaW50IG51bV9tZmU7CS8qIG51bWJlciBvZiBtYWMgYWRkcmVzcyBmaWx0ZXIgdGFibGUgZW50cmllcyAqLwogfTsKIAogI2RlZmluZSBwaHlsaW5rX3RvX2VuZXRjX3BmKGNvbmZpZykgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jCmluZGV4IDZlNWQyZjg2OTkxNTBiLi5kMzJhMTk1YTA0Yzk3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYwpAQCAtMSw1ICYjNDM7MSw1IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAmIzQzOyBPUiBCU0QtMy1DbGF1c2UpCi0vKiBDb3B5cmlnaHQgMjAyNCBOWFAgKi8KJiM0MzsvKiBDb3B5cmlnaHQgMjAyNC0yMDI2IE5YUCAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgvZnNsL2VuZXRjX21kaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9vZl9tZGlvLmgmZ3Q7CkBAIC04Nyw2ICYjNDM7ODcsMTEyIEBAIGludCBlbmV0Y19zZXR1cF9tYWNfYWRkcmVzc2VzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBlbmV0Y19wZiAqcGYpCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChlbmV0Y19zZXR1cF9tYWNfYWRkcmVzc2VzKTsKIAomIzQzO3ZvaWQgZW5ldGNfc2V0X3NpX3VjX3Byb21pc2Moc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCBib29sIHByb21pc2MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gJmFtcDtzaS0mZ3Q7aHc7CiYjNDM7CWludCBwc2lwbW1yX29mZjsKJiM0MzsJdTMyIHZhbDsKJiM0MzsKJiM0MzsJaWYgKGlzX2VuZXRjX3JldjEoc2kpKQomIzQzOwkJcHNpcG1tcl9vZmYgPSBFTkVUQ19QU0lQTU1SOwomIzQzOwllbHNlCiYjNDM7CQlwc2lwbW1yX29mZiA9IEVORVRDNF9QU0lQTU1SOwomIzQzOwomIzQzOwl2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBwc2lwbW1yX29mZik7CiYjNDM7CiYjNDM7CWlmIChwcm9taXNjKQomIzQzOwkJdmFsIHw9IFBTSVBNTVJfU0lfTUFDX1VQKHNpX2lkKTsKJiM0MzsJZWxzZQomIzQzOwkJdmFsICZhbXA7PSB+UFNJUE1NUl9TSV9NQUNfVVAoc2lfaWQpOwomIzQzOwomIzQzOwllbmV0Y19wb3J0X3dyKGh3LCBwc2lwbW1yX29mZiwgdmFsKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfc2V0X3NpX3VjX3Byb21pc2MpOwomIzQzOwomIzQzO3ZvaWQgZW5ldGNfc2V0X3NpX21jX3Byb21pc2Moc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCBib29sIHByb21pc2MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gJmFtcDtzaS0mZ3Q7aHc7CiYjNDM7CWludCBwc2lwbW1yX29mZjsKJiM0MzsJdTMyIHZhbDsKJiM0MzsKJiM0MzsJaWYgKGlzX2VuZXRjX3JldjEoc2kpKQomIzQzOwkJcHNpcG1tcl9vZmYgPSBFTkVUQ19QU0lQTU1SOwomIzQzOwllbHNlCiYjNDM7CQlwc2lwbW1yX29mZiA9IEVORVRDNF9QU0lQTU1SOwomIzQzOwomIzQzOwl2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBwc2lwbW1yX29mZik7CiYjNDM7CiYjNDM7CWlmIChwcm9taXNjKQomIzQzOwkJdmFsIHw9IFBTSVBNTVJfU0lfTUFDX01QKHNpX2lkKTsKJiM0MzsJZWxzZQomIzQzOwkJdmFsICZhbXA7PSB+UFNJUE1NUl9TSV9NQUNfTVAoc2lfaWQpOwomIzQzOwomIzQzOwllbmV0Y19wb3J0X3dyKGh3LCBwc2lwbW1yX29mZiwgdmFsKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfc2V0X3NpX21jX3Byb21pc2MpOwomIzQzOwomIzQzO3ZvaWQgZW5ldGNfc2V0X3NpX3VjX2hhc2hfZmlsdGVyKHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZCwgdTY0IGhhc2gpCiYjNDM7ewomIzQzOwlpbnQgcHNpdW1oZnIwX29mZiwgcHNpdW1oZnIxX29mZjsKJiM0MzsJc3RydWN0IGVuZXRjX2h3ICpodyA9ICZhbXA7c2ktJmd0O2h3OwomIzQzOwomIzQzOwlpZiAoaXNfZW5ldGNfcmV2MShzaSkpIHsKJiM0MzsJCWJvb2wgZXJyID0gc2ktJmd0O2VycmF0YSAmYW1wOyBFTkVUQ19FUlJfVUNNQ1NXUDsKJiM0MzsKJiM0MzsJCXBzaXVtaGZyMF9vZmYgPSBFTkVUQ19QU0lVTUhGUjAoc2lfaWQsIGVycik7CiYjNDM7CQlwc2l1bWhmcjFfb2ZmID0gRU5FVENfUFNJVU1IRlIxKHNpX2lkKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXBzaXVtaGZyMF9vZmYgPSBFTkVUQzRfUFNJVU1IRlIwKHNpX2lkKTsKJiM0MzsJCXBzaXVtaGZyMV9vZmYgPSBFTkVUQzRfUFNJVU1IRlIxKHNpX2lkKTsKJiM0MzsJfQomIzQzOwomIzQzOwllbmV0Y19wb3J0X3dyKGh3LCBwc2l1bWhmcjBfb2ZmLCBsb3dlcl8zMl9iaXRzKGhhc2gpKTsKJiM0MzsJZW5ldGNfcG9ydF93cihodywgcHNpdW1oZnIxX29mZiwgdXBwZXJfMzJfYml0cyhoYXNoKSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcik7CiYjNDM7CiYjNDM7dm9pZCBlbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCB1NjQgaGFzaCkKJiM0Mzt7CiYjNDM7CWludCBwc2ltbWhmcjBfb2ZmLCBwc2ltbWhmcjFfb2ZmOwomIzQzOwlzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gJmFtcDtzaS0mZ3Q7aHc7CiYjNDM7CiYjNDM7CWlmIChpc19lbmV0Y19yZXYxKHNpKSkgewomIzQzOwkJYm9vbCBlcnIgPSBzaS0mZ3Q7ZXJyYXRhICZhbXA7IEVORVRDX0VSUl9VQ01DU1dQOwomIzQzOwomIzQzOwkJcHNpbW1oZnIwX29mZiA9IEVORVRDX1BTSU1NSEZSMChzaV9pZCwgZXJyKTsKJiM0MzsJCXBzaW1taGZyMV9vZmYgPSBFTkVUQ19QU0lNTUhGUjEoc2lfaWQpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcHNpbW1oZnIwX29mZiA9IEVORVRDNF9QU0lNTUhGUjAoc2lfaWQpOwomIzQzOwkJcHNpbW1oZnIxX29mZiA9IEVORVRDNF9QU0lNTUhGUjEoc2lfaWQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVuZXRjX3BvcnRfd3IoaHcsIHBzaW1taGZyMF9vZmYsIGxvd2VyXzMyX2JpdHMoaGFzaCkpOwomIzQzOwllbmV0Y19wb3J0X3dyKGh3LCBwc2ltbWhmcjFfb2ZmLCB1cHBlcl8zMl9iaXRzKGhhc2gpKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfc2V0X3NpX21jX2hhc2hfZmlsdGVyKTsKJiM0MzsKJiM0Mzt2b2lkIGVuZXRjX3NldF9zaV92bGFuX3Byb21pc2Moc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCBib29sIHByb21pc2MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gJmFtcDtzaS0mZ3Q7aHc7CiYjNDM7CWludCBwc2lwdm1yX29mZjsKJiM0MzsJdTMyIHZhbDsKJiM0MzsKJiM0MzsJaWYgKGlzX2VuZXRjX3JldjEoc2kpKQomIzQzOwkJcHNpcHZtcl9vZmYgPSBFTkVUQ19QU0lQVk1SOwomIzQzOwllbHNlCiYjNDM7CQlwc2lwdm1yX29mZiA9IEVORVRDNF9QU0lQVk1SOwomIzQzOwomIzQzOwl2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBwc2lwdm1yX29mZik7CiYjNDM7CiYjNDM7CWlmIChwcm9taXNjKQomIzQzOwkJdmFsIHw9IFBTSVBWTVJfU0lfVkxBTl9QKHNpX2lkKTsKJiM0MzsJZWxzZQomIzQzOwkJdmFsICZhbXA7PSB+UFNJUFZNUl9TSV9WTEFOX1Aoc2lfaWQpOwomIzQzOwomIzQzOwllbmV0Y19wb3J0X3dyKGh3LCBwc2lwdm1yX29mZiwgdmFsKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzYyk7CiYjNDM7CiB2b2lkIGVuZXRjX3BmX25ldGRldl9zZXR1cChzdHJ1Y3QgZW5ldGNfc2kgKnNpLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAkJCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqbmRldl9vcHMpCiB7CkBAIC0yNzUsNyAmIzQzOzM4MSw4IEBAIHN0YXRpYyBib29sIGVuZXRjX3BvcnRfaGFzX3BjcyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKQogCXJldHVybiAocGYtJmd0O2lmX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJIHx8CiAJCXBmLSZndDtpZl9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggfHwKIAkJcGYtJmd0O2lmX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWCB8fAotCQlwZi0mZ3Q7aWZfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSk7CiYjNDM7CQlwZi0mZ3Q7aWZfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSB8fAomIzQzOwkJcGYtJmd0O2lmX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSKTsKIH0KIAogaW50IGVuZXRjX21kaW9idXNfY3JlYXRlKHN0cnVjdCBlbmV0Y19wZiAqcGYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKQEAgLTMxNiwyNSAmIzQzOzQyMyw0MiBAQCBpbnQgZW5ldGNfcGh5bGlua19jcmVhdGUoc3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICpub2RlLAogewogCXN0cnVjdCBlbmV0Y19wZiAqcGYgPSBlbmV0Y19zaV9wcml2KHByaXYtJmd0O3NpKTsKIAlzdHJ1Y3QgcGh5bGluayAqcGh5bGluazsKJiM0MzsJdW5zaWduZWQgbG9uZyBtYWNfY2FwczsKIAlpbnQgZXJyOwogCiAJcGYtJmd0O3BoeWxpbmtfY29uZmlnLmRldiA9ICZhbXA7cHJpdi0mZ3Q7bmRldi0mZ3Q7ZGV2OwogCXBmLSZndDtwaHlsaW5rX2NvbmZpZy50eXBlID0gUEhZTElOS19ORVRERVY7Ci0JcGYtJmd0O3BoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgPSBNQUNfQVNZTV9QQVVTRSB8IE1BQ19TWU1fUEFVU0UgfAotCQlNQUNfMTAgfCBNQUNfMTAwIHwgTUFDXzEwMDAgfCBNQUNfMjUwMEZEOwogCiAJX19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCwKIAkJICBwZi0mZ3Q7cGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpOwotCV9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfU0dNSUksCi0JCSAgcGYtJmd0O3BoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTsKLQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCwKLQkJICBwZi0mZ3Q7cGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpOwotCV9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMjUwMEJBU0VYLAotCQkgIHBmLSZndDtwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7Ci0JX19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJLAotCQkgIHBmLSZndDtwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7Ci0JcGh5X2ludGVyZmFjZV9zZXRfcmdtaWkocGYtJmd0O3BoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTsKIAomIzQzOwltYWNfY2FwcyA9IE1BQ19BU1lNX1BBVVNFIHwgTUFDX1NZTV9QQVVTRTsKJiM0MzsJaWYgKCFlbmV0Y19pc19wc2V1ZG9fbWFjKHByaXYtJmd0O3NpKSkgewomIzQzOwkJbWFjX2NhcHMgfD0gTUFDXzEwIHwgTUFDXzEwMCB8IE1BQ18xMDAwRkQgfCBNQUNfMjUwMEZEOwomIzQzOwomIzQzOwkJX19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSwKJiM0MzsJCQkgIHBmLSZndDtwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7CiYjNDM7CQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCwKJiM0MzsJCQkgIHBmLSZndDtwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7CiYjNDM7CQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWCwKJiM0MzsJCQkgIHBmLSZndDtwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7CiYjNDM7CQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUksCiYjNDM7CQkJICBwZi0mZ3Q7cGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpOwomIzQzOwomIzQzOwkJaWYgKCFpc19lbmV0Y19yZXYxKHByaXYtJmd0O3NpKSkgewomIzQzOwkJCW1hY19jYXBzIHw9IE1BQ181MDAwRkQgfCBNQUNfMTAwMDBGRDsKJiM0MzsJCQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSLAomIzQzOwkJCQkgIHBmLSZndDtwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlwaHlfaW50ZXJmYWNlX3NldF9yZ21paShwZi0mZ3Q7cGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJbWFjX2NhcHMgfD0gTUFDXzEwRkQgfCBNQUNfMTAwRkQgfCBNQUNfMTAwMEZEIHwgTUFDXzI1MDBGRCB8CiYjNDM7CQkJICAgIE1BQ181MDAwRkQgfCBNQUNfMTAwMDBGRCB8IE1BQ18yMDAwMEZEIHwKJiM0MzsJCQkgICAgTUFDXzI1MDAwRkQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGYtJmd0O3BoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgPSBtYWNfY2FwczsKIAlwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoJmFtcDtwZi0mZ3Q7cGh5bGlua19jb25maWcsIG9mX2Z3bm9kZV9oYW5kbGUobm9kZSksCiAJCQkJIHBmLSZndDtpZl9tb2RlLCBvcHMpOwogCWlmIChJU19FUlIocGh5bGluaykpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uaAppbmRleCA1N2QyZTBlYmQyYjBiYi4uODI0M2NlMGRlNTdmNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmgKQEAgLTE3LDYgJiM0MzsxNywxMSBAQCB2b2lkIGVuZXRjX3NldF9kZWZhdWx0X3Jzc19rZXkoc3RydWN0IGVuZXRjX3BmICpwZik7CiBpbnQgZW5ldGNfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBfX2JlMTYgcHJvdCwgdTE2IHZpZCk7CiBpbnQgZW5ldGNfdmxhbl9yeF9kZWxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBfX2JlMTYgcHJvdCwgdTE2IHZpZCk7CiBpbnQgZW5ldGNfaW5pdF9zcmlvdl9yZXNvdXJjZXMoc3RydWN0IGVuZXRjX3BmICpwZik7CiYjNDM7dm9pZCBlbmV0Y19zZXRfc2lfdWNfcHJvbWlzYyhzdHJ1Y3QgZW5ldGNfc2kgKnNpLCBpbnQgc2lfaWQsIGJvb2wgcHJvbWlzYyk7CiYjNDM7dm9pZCBlbmV0Y19zZXRfc2lfbWNfcHJvbWlzYyhzdHJ1Y3QgZW5ldGNfc2kgKnNpLCBpbnQgc2lfaWQsIGJvb2wgcHJvbWlzYyk7CiYjNDM7dm9pZCBlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCB1NjQgaGFzaCk7CiYjNDM7dm9pZCBlbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCB1NjQgaGFzaCk7CiYjNDM7dm9pZCBlbmV0Y19zZXRfc2lfdmxhbl9wcm9taXNjKHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZCwgYm9vbCBwcm9taXNjKTsKIAogc3RhdGljIGlubGluZSB1MTYgZW5ldGNfZ2V0X2lwX3JldmlzaW9uKHN0cnVjdCBlbmV0Y19odyAqaHcpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcW9zLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcW9zLmMKaW5kZXggN2IxN2JjYTI0ZjI2MGYuLjJhYTBmY2FhZmNkMjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcW9zLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3Fvcy5jCkBAIC0xMTM1LDcgJiM0MzsxMTM1LDYgQEAgc3RhdGljIGludCBlbmV0Y19wc2ZwX3BhcnNlX2Nsc2Zsb3dlcihzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2LAogCXN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnk7CiAJc3RydWN0IGFjdGlvbl9nYXRlX2VudHJ5ICplOwogCXU4IHNmaV9vdmVyd3JpdGUgPSAwOwotCWludCBlbnRyaWVzX3NpemU7CiAJaW50IGksIGVycjsKIAogCWlmIChmLSZndDtjb21tb24uY2hhaW5faW5kZXggJmd0Oz0gcHJpdi0mZ3Q7cHNmcF9jYXAubWF4X3N0cmVhbWlkKSB7CkBAIC0xMjQyLDggJiM0MzsxMjQxLDcgQEAgc3RhdGljIGludCBlbmV0Y19wc2ZwX3BhcnNlX2Nsc2Zsb3dlcihzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2LAogCQlnb3RvIGZyZWVfZmlsdGVyOwogCX0KIAotCWVudHJpZXNfc2l6ZSA9IHN0cnVjdF9zaXplKHNnaSwgZW50cmllcywgZW50cnlnLSZndDtnYXRlLm51bV9lbnRyaWVzKTsKLQlzZ2kgPSBremFsbG9jKGVudHJpZXNfc2l6ZSwgR0ZQX0tFUk5FTCk7CiYjNDM7CXNnaSA9IGt6YWxsb2NfZmxleCgqc2dpLCBlbnRyaWVzLCBlbnRyeWctJmd0O2dhdGUubnVtX2VudHJpZXMpOwogCWlmICghc2dpKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZnJlZV9maWx0ZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfdmYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y192Zi5jCmluZGV4IDljZGIwYTRkNmJhZmI3Li43ZGNiNGEwMjQ2ZjUyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3ZmLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3ZmLmMKQEAgLTMxNyw3ICYjNDM7MzE3LDE0IEBAIHN0YXRpYyBpbnQgZW5ldGNfdmZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAKIAllbmV0Y19nZXRfc2lfY2FwcyhzaSk7CiAKLQluZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXEoc2l6ZW9mKCpwcml2KSwgRU5FVENfTUFYX05VTV9UWFFTKTsKJiM0MzsJLyogQ3VycmVudGx5LCB0aGUgc3VwcG9ydGVkIFNvQ3MgaGF2ZSBhIG1heCBvZiA2IENQVXMgYW5kIHRoZSBWRnMKJiM0MzsJICogaGF2ZSBsZXNzIHRoYW4gNiBSWC9UWCByaW5ncy4gU28gbm8gaXNzdWVzIGZvciB0aGVzZSBzdXBwb3J0ZWQKJiM0MzsJICogU29DcywgYnV0IGZvciBmdXR1cmUgU29DcyB3aGljaCBoYXZlIG1vcmUgQ1BVcyBvciBtb3JlIFRYL1JYCiYjNDM7CSAqIHJpbmdzLCBhbGwgdGhlIHJlbGF0ZWQgbG9naWMgbmVlZHMgdG8gYmUgaW1wcm92ZWQuCiYjNDM7CSAqLwomIzQzOwluZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXFzKHNpemVvZigqcHJpdiksCiYjNDM7CQkJCSAgbWluKHNpLSZndDtudW1fdHhfcmluZ3MsIEVORVRDX01BWF9OVU1fVFhRUyksCiYjNDM7CQkJCSAgbWluKHNpLSZndDtudW1fcnhfcmluZ3MsIEVORVRDX01BWF9OVU1fVFhRUykpOwogCWlmICghbmRldikgewogCQllcnIgPSAtRU5PTUVNOwogCQlkZXZfZXJyKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O25ldGRldiBjcmVhdGlvbiBmYWlsZWRcbiYjMzQ7KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNsL250bXAuaCBiL2luY2x1ZGUvbGludXgvZnNsL250bXAuaAppbmRleCBkM2I2YzQ3NmI5MWEyZC4uNzY0ZWYyODkyNjA4NWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnNsL250bXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZzbC9udG1wLmgKQEAgLTc1LDggJiM0Mzs3NSwxMCBAQCBzdHJ1Y3QgbnRtcF91c2VyIHsKIAkvKiBOVE1QIHRhYmxlIGJpdG1hcHMgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQgKi8KIAl1MzIgZXR0X2JpdG1hcF9zaXplOwogCXUzMiBlY3RfYml0bWFwX3NpemU7CiYjNDM7CXUxNiBtYWZ0X251bV9lbnRyaWVzOwogCXVuc2lnbmVkIGxvbmcgKmV0dF9naWRfYml0bWFwOyAvKiBvbmx5IHZhbGlkIGZvciBzd2l0Y2ggKi8KIAl1bnNpZ25lZCBsb25nICplY3RfZ2lkX2JpdG1hcDsgLyogb25seSB2YWxpZCBmb3Igc3dpdGNoICovCiYjNDM7CXVuc2lnbmVkIGxvbmcgKm1hZnRfZWlkX2JpdG1hcDsgLyogb25seSB2YWxpZCBmb3IgRU5FVEMgKi8KIH07CiAKIHN0cnVjdCBtYWZ0X2VudHJ5X2RhdGEgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzA5MAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDYyOTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDAzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0ZTTF9FTkVUQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnPTM4Nz1DT05GSUdfRlNMX0RQQUEyX0VUSD1tXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnOjM4ODpDT05GSUdfRlNMX0VORVRDPW1cbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWctMzg5LUNPTkZJR19OWFBfRU5FVEM0PW1cbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWc6MzkwOkNPTkZJR19GU0xfRU5FVENfVkY9bVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZzozOTE6Q09ORklHX0ZTTF9FTkVUQ19RT1M9eVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0zOTItQ09ORklHX05YUF9ORVRDX0JMS19DVFJMPW1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9LY29uZmlnPTI9Y29uZmlnIE5FVF9EU0FfTkVUQ19TV0lUQ0hcbi0tXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9LY29uZmlnLTctXHRzZWxlY3QgTkVUX0RTQV9UQUdfTkVUQ1xuZHJpdmVycy9uZXQvZHNhL25ldGMvS2NvbmZpZzo4Olx0c2VsZWN0IEZTTF9FTkVUQ19NRElPXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9LY29uZmlnLTktXHRzZWxlY3QgTlhQX05UTVBcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L0tjb25maWc9MzI9Y29uZmlnIE5FVF9EU0FfTVNDQ19GRUxJWFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvS2NvbmZpZy00My1cdHNlbGVjdCBORVRfRFNBX1RBR19PQ0VMT1RcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvS2NvbmZpZzo0NDpcdHNlbGVjdCBGU0xfRU5FVENfTURJT1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9LY29uZmlnLTQ1LVx0c2VsZWN0IFBDU19MWU5YXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZzoyOmNvbmZpZyBGU0xfRU5FVENfQ09SRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctMy1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWc9Mjc9Y29uZmlnIE5YUF9OVE1QXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctMjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZzozMDpjb25maWcgRlNMX0VORVRDXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy0zMS1cdHRyaXN0YXRlIFwmIzM0O0VORVRDIFBGIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTMzLVx0ZGVwZW5kcyBvbiBQQ0lfTVNJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZzozNDpcdHNlbGVjdCBGU0xfRU5FVENfQ09SRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWc6MzU6XHRzZWxlY3QgRlNMX0VORVRDX0lFUkJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjM2Olx0c2VsZWN0IEZTTF9FTkVUQ19NRElPXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy0zNy1cdHNlbGVjdCBOWFBfRU5FVENfUEZfQ09NTU9OXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWc9NDg9Y29uZmlnIE5YUF9FTkVUQzRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy01MS1cdGRlcGVuZHMgb24gUENJX01TSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWc6NTI6XHRzZWxlY3QgRlNMX0VORVRDX0NPUkVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjUzOlx0c2VsZWN0IEZTTF9FTkVUQ19NRElPXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy01NC1cdHNlbGVjdCBOWFBfRU5FVENfUEZfQ09NTU9OXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctNjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZzo2Njpjb25maWcgRlNMX0VORVRDX1ZGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy02Ny1cdHRyaXN0YXRlIFwmIzM0O0VORVRDIFZGIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTY5LVx0ZGVwZW5kcyBvbiBQQ0lfTVNJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZzo3MDpcdHNlbGVjdCBGU0xfRU5FVENfQ09SRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWc6NzE6XHRzZWxlY3QgRlNMX0VORVRDX01ESU9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTcyLVx0c2VsZWN0IFBIWUxJTktcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy04MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjgxOmNvbmZpZyBGU0xfRU5FVENfSUVSQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctODItXHR0cmlzdGF0ZSBcJiMzNDtFTkVUQyBJRVJCIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTg4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWc6ODk6Y29uZmlnIEZTTF9FTkVUQ19NRElPXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy05MC1cdHRyaXN0YXRlIFwmIzM0O0VORVRDIE1ESU8gZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctOTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZzo5ODpjb25maWcgRlNMX0VORVRDX1BUUF9DTE9DS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctOTktXHR0cmlzdGF0ZSBcJiMzNDtFTkVUQyBQVFAgY2xvY2sgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZzoxMDA6XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX1FPUklRIFx1MDAyNlx1MDAyNiAoRlNMX0VORVRDIHx8IEZTTF9FTkVUQ19WRilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTEwMS1cdGRlZmF1bHQgeVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTEwOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjExMDpjb25maWcgRlNMX0VORVRDX1FPU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctMTExLVx0Ym9vbCBcJiMzNDtFTkVUQyBoYXJkd2FyZSBUaW1lLXNlbnNpdGl2ZSBOZXR3b3JrIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjExMjpcdGRlcGVuZHMgb24gKEZTTF9FTkVUQyB8fCBGU0xfRU5FVENfVkYpIFx1MDAyNlx1MDAyNiAoTkVUX1NDSF9UQVBSSU8gfHwgTkVUX1NDSF9DQlMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy0xMTMtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlLTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvTWFrZWZpbGU6MzpvYmotJChDT05GSUdfRlNMX0VORVRDX0NPUkUpICYjNDM7PSBmc2wtZW5ldGMtY29yZS5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvTWFrZWZpbGUtNC1mc2wtZW5ldGMtY29yZS15IDo9IGVuZXRjLm8gZW5ldGNfY2Jkci5vIGVuZXRjX2V0aHRvb2wub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9NYWtlZmlsZT0xMT1ueHAtbmV0Yy1saWIteSA6PSBudG1wLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9NYWtlZmlsZS0xMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfRlNMX0VORVRDKSAmIzQzOz0gZnNsLWVuZXRjLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9NYWtlZmlsZS0xNC1mc2wtZW5ldGMteSA6PSBlbmV0Y19wZi5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvTWFrZWZpbGU6MTU6ZnNsLWVuZXRjLSQoQ09ORklHX0ZTTF9FTkVUQ19RT1MpICYjNDM7PSBlbmV0Y19xb3Mub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlLTE2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9NYWtlZmlsZT0xOT1ueHAtZW5ldGM0LSQoQ09ORklHX0RFQlVHX0ZTKSAmIzQzOz0gZW5ldGM0X2RlYnVnZnMub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlLTIwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlOjIxOm9iai0kKENPTkZJR19GU0xfRU5FVENfVkYpICYjNDM7PSBmc2wtZW5ldGMtdmYub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlLTIyLWZzbC1lbmV0Yy12Zi15IDo9IGVuZXRjX3ZmLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9NYWtlZmlsZS0yMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfRlNMX0VORVRDX0lFUkIpICYjNDM7PSBmc2wtZW5ldGMtaWVyYi5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvTWFrZWZpbGUtMjUtZnNsLWVuZXRjLWllcmIteSA6PSBlbmV0Y19pZXJiLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9NYWtlZmlsZS0yNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfRlNMX0VORVRDX01ESU8pICYjNDM7PSBmc2wtZW5ldGMtbWRpby5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvTWFrZWZpbGUtMjgtZnNsLWVuZXRjLW1kaW8teSA6PSBlbmV0Y19wY2lfbWRpby5vIGVuZXRjX21kaW8ub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlLTI5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlOjMwOm9iai0kKENPTkZJR19GU0xfRU5FVENfUFRQX0NMT0NLKSAmIzQzOz0gZnNsLWVuZXRjLXB0cC5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvTWFrZWZpbGUtMzEtZnNsLWVuZXRjLXB0cC15IDo9IGVuZXRjX3B0cC5vXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjLmg9NTk1PXN0YXRpYyBpbmxpbmUgYm9vbCBlbmV0Y19wdHBfY2xvY2tfaXNfZW5hYmxlZChzdHJ1Y3QgZW5ldGNfc2kgKnNpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Yy5oLTU5Ny1cdGlmIChpc19lbmV0Y19yZXYxKHNpKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Yy5oOjU5ODpcdFx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0ZTTF9FTkVUQ19QVFBfQ0xPQ0spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjLmgtNTk5LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Yy5oLTYwMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Yy5oOjYwMzojaWZkZWYgQ09ORklHX0ZTTF9FTkVUQ19RT1NcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Yy5oLTYwNC1pbnQgZW5ldGNfcW9zX3F1ZXJ5X2NhcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHZvaWQgKnR5cGVfZGF0YSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX2llcmIuaC02LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX2llcmIuaDo3OiNpZiBJU19FTkFCTEVEKENPTkZJR19GU0xfRU5FVENfSUVSQilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19pZXJiLmgtOC1cbi0tXG5kcml2ZXJzL3B0cC9LY29uZmlnPTU4PWNvbmZpZyBQVFBfMTU4OF9DTE9DS19RT1JJUVxuZHJpdmVycy9wdHAvS2NvbmZpZy01OS1cdHRyaXN0YXRlIFwmIzM0O0ZyZWVzY2FsZSBRb3JJUSAxNTg4IHRpbWVyIGFzIFBUUCBjbG9ja1wmIzM0O1xuZHJpdmVycy9wdHAvS2NvbmZpZzo2MDpcdGRlcGVuZHMgb24gR0lBTkZBUiB8fCBGU0xfRFBBQV9FVEggfHwgRlNMX0RQQUEyX0VUSCB8fCBGU0xfRU5FVEMgfHwgRlNMX0VORVRDX1ZGIHx8IENPTVBJTEVfVEVTVFxuZHJpdmVycy9wdHAvS2NvbmZpZy02MS1cdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcbmRyaXZlcnMvcHRwL0tjb25maWc6NjI6XHRkZWZhdWx0IHkgaWYgR0lBTkZBUiB8fCBGU0xfRFBBQV9FVEggfHwgRlNMX0RQQUEyX0VUSCB8fCBGU0xfRU5FVEMgfHwgRlNMX0VORVRDX1ZGXG5kcml2ZXJzL3B0cC9LY29uZmlnLTYzLVx0aGVscFxuLS1cbmluY2x1ZGUvbGludXgvZnNsL2VuZXRjX21kaW8uaC0zLVxuaW5jbHVkZS9saW51eC9mc2wvZW5ldGNfbWRpby5oOjQ6I2lmbmRlZiBfRlNMX0VORVRDX01ESU9fSF9cbmluY2x1ZGUvbGludXgvZnNsL2VuZXRjX21kaW8uaDo1OiNkZWZpbmUgX0ZTTF9FTkVUQ19NRElPX0hfXG5pbmNsdWRlL2xpbnV4L2ZzbC9lbmV0Y19tZGlvLmgtNi1cbi0tXG5pbmNsdWRlL2xpbnV4L2ZzbC9lbmV0Y19tZGlvLmg9MzM9c3RydWN0IGVuZXRjX21kaW9fcHJpdiB7XG4tLVxuaW5jbHVkZS9saW51eC9mc2wvZW5ldGNfbWRpby5oLTM3LVxuaW5jbHVkZS9saW51eC9mc2wvZW5ldGNfbWRpby5oOjM4OiNpZiBJU19SRUFDSEFCTEUoQ09ORklHX0ZTTF9FTkVUQ19NRElPKVxuaW5jbHVkZS9saW51eC9mc2wvZW5ldGNfbWRpby5oLTM5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDAzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5MDk0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRU5FVEMgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvYCBkaXJlY3RvcnkuIFJpZ2h0LCBhbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3Mgc2VlbSB0byBiZSBgRlNMX0VORVRDYCwgYE5YUF9FTkVUQzRgLCBgRlNMX0VORVRDX1ZGYCwgYW5kIGBGU0xfRU5FVENfUU9TYC4gSG1tLCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpZiB0aGVzZSBhcmUgYWxyZWFkeSBlbmFibGVkIGluIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uIExldCBtZSBjaGVjayBgYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZ2AuLi4gQWgsIHllcy4gYENPTkZJR19GU0xfRU5FVEM9bWAsIGBDT05GSUdfTlhQX0VORVRDND1tYCwgYENPTkZJR19GU0xfRU5FVENfVkY9bWAsIGFuZCBgQ09ORklHX0ZTTF9FTkVUQ19RT1M9eWAuIFNvIHRoZXkmIzM5O3JlIGFscmVhZHkgaW4gdGhlIGRlZmNvbmZpZy4gR29vZCwganVzdCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxpc3QgdGhlbSB3aXRob3V0IHRoZSBgQ09ORklHX2AgcHJlZml4IGluIHRoZSBkb2N1bWVudGF0aW9uIG9yIHdoZXJldmVyIHRoaXMgaXMgZ29pbmcuCgpOb3csIGxldCYjMzk7cyBkaWcgaW50byB0aGUgYWN0dWFsIGNvZGUgY2hhbmdlLiBUaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIHNlZW1zIHRvIGJlIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jYC4gT2theSwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIGhhcHBlbmluZy4gVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBlbmV0YzRfcHNpX2RvX3NldF9yeF9tb2RlYCBmdW5jdGlvbiwgd2hpY2ggd2FzIHBhcnQgb2YgYSB3b3JrcXVldWUsIGFuZCBpdCBzZWVtcyBsaWtlIGl0JiMzOTtzIHJlcGxhY2luZyBgLm5kb19zZXRfcnhfbW9kZWAgd2l0aCBgLm5kb19zZXRfcnhfbW9kZV9hc3luY2AgaW4gdGhlIGBuZXRfZGV2aWNlX29wc2Agc3RydWN0dXJlLiBIYW5nIG9uLi4uIGAubmRvX3NldF9yeF9tb2RlX2FzeW5jYD8gSXMgdGhhdCBhIG5ldyBtZW1iZXIgb2YgdGhlIGBuZXRfZGV2aWNlX29wc2Agc3RydWN0PyBUaGF0JiMzOTtzIG5vdCBzb21ldGhpbmcgSSYjMzk7bSBpbW1lZGlhdGVseSBmYW1pbGlhciB3aXRoLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhhdC4gVGltZSB0byBjaGVjayBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAgdG8gc2VlIHdoYXQgdGhlIGRlYWwgaXMgd2l0aCB0aGlzIG5ldyBjYWxsYmFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZG9fc2V0X3J4X21vZGVfYXN5bmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0PTI4OD1uZG9fc2V0X3J4X21vZGU6XG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTI5MC1cdENvbnRleHQ6IEJIcyBkaXNhYmxlZFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0OjI5MTpcdE5vdGVzOiBEZXByZWNhdGVkIGluIGZhdm9yIG9mIG5kb19zZXRfcnhfbW9kZV9hc3luYyB3aGljaCBydW5zXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3QtMjkyLVx0aW4gcHJvY2VzcyBjb250ZXh0LlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTI5My1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdDoyOTQ6bmRvX3NldF9yeF9tb2RlX2FzeW5jOlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTI5NS1cdFN5bmNocm9uaXphdGlvbjogcnRubF9sb2NrKCkgc2VtYXBob3JlLiBJbiBhZGRpdGlvbiwgbmV0ZGV2IGluc3RhbmNlXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM9MjE1Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwb2liX25ldGRldl9vcHNfcGYgPSB7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMtMjE2NS1cdC5uZG9fdHhfdGltZW91dFx0XHQgPSBpcG9pYl90aW1lb3V0LFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM6MjE2NjpcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcdCA9IGlwb2liX3NldF9yeF9tb2RlX2FzeW5jLFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMtMjE2Ny1cdC5uZG9fZ2V0X2lmbGlua1x0XHQgPSBpcG9pYl9nZXRfaWZsaW5rLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jPTIxODA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcG9pYl9uZXRkZXZfb3BzX3ZmID0ge1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jLTIxODgtXHQubmRvX3R4X3RpbWVvdXRcdFx0ID0gaXBvaWJfdGltZW91dCxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jOjIxODk6XHQubmRvX3NldF9yeF9tb2RlX2FzeW5jXHQgPSBpcG9pYl9zZXRfcnhfbW9kZV9hc3luYyxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jLTIxOTAtXHQubmRvX2dldF9pZmxpbmtcdFx0ID0gaXBvaWJfZ2V0X2lmbGluayxcbi0tXG5kcml2ZXJzL25ldC9kdW1teS5jPTg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZHVtbXlfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9kdW1teS5jLTkyLVx0Lm5kb192YWxpZGF0ZV9hZGRyXHQ9IGV0aF92YWxpZGF0ZV9hZGRyLFxuZHJpdmVycy9uZXQvZHVtbXkuYzo5MzpcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcdD0gc2V0X211bHRpY2FzdF9saXN0LFxuZHJpdmVycy9uZXQvZHVtbXkuYy05NC1cdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IGV0aF9tYWNfYWRkcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYz0xNjA1ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJueHRfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNjA1OC1cdC5uZG9fZ2V0X3N0YXRzNjRcdD0gYm54dF9nZXRfc3RhdHM2NCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jOjE2MDU5Olx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1x0PSBibnh0X3NldF9yeF9tb2RlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTYwNjAtXHQubmRvX2V0aF9pb2N0bFx0XHQ9IGJueHRfaW9jdGwsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jPTU2ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVuZXRjNF9uZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMtNTY5LVx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcdD0gZW5ldGNfcGZfc2V0X21hY19hZGRyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jOjU3MDpcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcdD0gZW5ldGM0X3BmX3NldF9yeF9tb2RlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jLTU3MS1cdC5uZG9fc2V0X2ZlYXR1cmVzXHQ9IGVuZXRjNF9wZl9zZXRfZmVhdHVyZXMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYz01MTM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWF2Zl9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMtNTEzNy1cdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IGlhdmZfeG1pdF9mcmFtZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmM6NTEzODpcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcdD0gaWF2Zl9zZXRfcnhfbW9kZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMtNTEzOS1cdC5uZG9fdmFsaWRhdGVfYWRkclx0PSBldGhfdmFsaWRhdGVfYWRkcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jPTUzMjI9Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1seDVlX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01MzI4LVx0Lm5kb19nZXRfc3RhdHM2NCAgICAgICAgID0gbWx4NWVfZ2V0X3N0YXRzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYzo1MzI5Olx0Lm5kb19zZXRfcnhfbW9kZV9hc3luYyAgID0gbWx4NWVfc2V0X3J4X21vZGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jLTUzMzAtXHQubmRvX3NldF9tYWNfYWRkcmVzcyAgICAgPSBtbHg1ZV9zZXRfbWFjLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2LmM9NTU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZmJuaWNfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jLTU2Ni1cdC5uZG9fY2hhbmdlX210dVx0XHQ9IGZibmljX2NoYW5nZV9tdHUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jOjU2NzpcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcdD0gZmJuaWNfc2V0X3J4X21vZGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jLTU2OC1cdC5uZG9fZ2V0X3N0YXRzNjRcdD0gZmJuaWNfZ2V0X3N0YXRzNjQsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTYyNz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5zaW1fbmV0ZGV2X29wcyA9IHtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy02MjgtXHQubmRvX3N0YXJ0X3htaXRcdFx0PSBuc2ltX3N0YXJ0X3htaXQsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6NjI5Olx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1x0PSBuc2ltX3NldF9yeF9tb2RlLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTYzMC1cdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IGV0aF9tYWNfYWRkcixcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9NjUyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbnNpbV92Zl9uZXRkZXZfb3BzID0ge1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTY1My1cdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IG5zaW1fc3RhcnRfeG1pdCxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzo2NTQ6XHQubmRvX3NldF9yeF9tb2RlX2FzeW5jXHQ9IG5zaW1fc2V0X3J4X21vZGUsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtNjU1LVx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcdD0gZXRoX21hY19hZGRyLFxuLS1cbmRyaXZlcnMvbmV0L25ldGtpdC5jPTMzMT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5ldGtpdF9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGtpdC5jLTMzNS1cdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IG5ldGtpdF94bWl0LFxuZHJpdmVycy9uZXQvbmV0a2l0LmM6MzM2Olx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1x0PSBuZXRraXRfc2V0X211bHRpY2FzdCxcbmRyaXZlcnMvbmV0L25ldGtpdC5jLTMzNy1cdC5uZG9fc2V0X3J4X2hlYWRyb29tXHQ9IG5ldGtpdF9zZXRfaGVhZHJvb20sXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0xMDYyPXN0cnVjdCBuZXRkZXZfbmV0X25vdGlmaWVyIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTExMjItICpcdENhbm5vdCBzbGVlcCwgY2FsbGVkIHdpdGggbmV0aWZfYWRkcl9sb2NrX2JoIGhlbGQuXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjExMjM6ICpcdERlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgbmRvX3NldF9yeF9tb2RlX2FzeW5jLlxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xMTI0LSAqXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjExMjU6ICogaW50ICgqbmRvX3NldF9yeF9tb2RlX2FzeW5jKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xMTI2LSAqXHRcdFx0XHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMsXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0xNDQ2PXN0cnVjdCBuZXRfZGV2aWNlX29wcyB7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xNDYxLVx0dm9pZFx0XHRcdCgqbmRvX3NldF9yeF9tb2RlKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MTQ2MjpcdGludFx0XHRcdCgqbmRvX3NldF9yeF9tb2RlX2FzeW5jKShcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTQ2My1cdFx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9kZXYuYz0xMTMyNj1pbnQgcmVnaXN0ZXJfbmV0ZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvZGV2LmMtMTEzODItXHQgICAgZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3NldF9yeF9tb2RlIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvZGV2LmM6MTEzODM6XHQgICAgIWRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zZXRfcnhfbW9kZV9hc3luYylcbm5ldC9jb3JlL2Rldi5jOjExMzg0Olx0XHRuZXRkZXZfV0FSTihkZXYsIFwmIzM0O29wcy1sb2NrZWQgZHJpdmVycyBzaG91bGQgdXNlIG5kb19zZXRfcnhfbW9kZV9hc3luY1xcblwmIzM0Oyk7XG5uZXQvY29yZS9kZXYuYy0xMTM4NS1cbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTEyNzc9dm9pZCBuZXRpZl9yeF9tb2RlX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTI5NC1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTI5NTpcdGlmIChvcHMtXHUwMDNlbmRvX3NldF9yeF9tb2RlX2FzeW5jKSB7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEyOTYtXHRcdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTMxNS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTMxNjpcdGlmIChvcHMtXHUwMDNlbmRvX3NldF9yeF9tb2RlX2FzeW5jKSB7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEzMTc6XHRcdGVyciA9IG9wcy1cdTAwM2VuZG9fc2V0X3J4X21vZGVfYXN5bmMoZGV2LCBcdTAwMjZ1Y19zbmFwLCBcdTAwMjZtY19zbmFwKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTMxOC1cbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTEzNjI9dm9pZCBfX2Rldl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTM3My1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTM3NDpcdGlmIChvcHMtXHUwMDNlbmRvX3NldF9yeF9tb2RlX2FzeW5jIHx8IG9wcy1cdTAwM2VuZG9fY2hhbmdlX3J4X2ZsYWdzIHx8XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzNzUtXHQgICAgbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSkge1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9MTM5MD12b2lkIGRldl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTQwMC0gKlxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxNDAxOiAqIERyaXZlcnMgaW1wbGVtZW50aW5nIG5kb19zZXRfcnhfbW9kZV9hc3luYygpIGhhdmUgdGhlaXIgcnggbW9kZSBjYWxsYmFja1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xNDAyLSAqIGV4ZWN1dGVkIGZyb20gYSB3b3JrcXVldWUuIFRoaXMgYWxsb3dzIHRoZSBjYWxsYmFjayB0byBzbGVlcCwgYnV0IG1lYW5zXG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM9NTQxPXN0YXRpYyBpbnQgZGV2X2lmc2lvYyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB2b2lkIF9fdXNlciAqZGF0YSxcbi0tXG5uZXQvY29yZS9kZXZfaW9jdGwuYy01ODgtXHRjYXNlIFNJT0NBRERNVUxUSTpcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjU4OTpcdFx0aWYgKCghb3BzLVx1MDAzZW5kb19zZXRfcnhfbW9kZSBcdTAwMjZcdTAwMjYgIW9wcy1cdTAwM2VuZG9fc2V0X3J4X21vZGVfYXN5bmMpIHx8XG5uZXQvY29yZS9kZXZfaW9jdGwuYy01OTAtXHRcdCAgICBpZnItXHUwMDNlaWZyX2h3YWRkci5zYV9mYW1pbHkgIT0gQUZfVU5TUEVDKVxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTYwMC1cdGNhc2UgU0lPQ0RFTE1VTFRJOlxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NjAxOlx0XHRpZiAoKCFvcHMtXHUwMDNlbmRvX3NldF9yeF9tb2RlIFx1MDAyNlx1MDAyNiAhb3BzLVx1MDAzZW5kb19zZXRfcnhfbW9kZV9hc3luYykgfHxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTYwMi1cdFx0ICAgIGlmci1cdTAwM2VpZnJfaHdhZGRyLnNhX2ZhbWlseSAhPSBBRl9VTlNQRUMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMwNjIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIEVORVRDIERyaXZlcjogQSBGb2N1c2VkIEFwcHJvYWNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBtYWtpbmcgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgRU5FVEMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyBpdCBoYW5kbGVzIFJYIG1vZGUuIFRoZSBrZXkgdGhpbmcgaXMgdGhhdCBpdCYjMzk7cyByZXBsYWNpbmcgdGhlIHdvcmtxdWV1ZSB3aXRoIGBuZG9fc2V0X3J4X21vZGVfYXN5bmNgLCB3aGljaCBydW5zIGluIHByb2Nlc3MgY29udGV4dC4gVGhpcyBzZWVtcyBsaWtlIGEgZGVjZW50IGNoYW5nZSwgcmVkdWNpbmcgc29tZSBvdmVyaGVhZCwgYnV0IGl0IGRlZmluaXRlbHkgbmVlZHMgc29tZSBhdHRlbnRpb24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuCgpNeSBtYWluIGNvbmNlcm4gaXMgdGhlIHJlbW92YWwgb2YgdGhlIHdvcmtxdWV1ZSBhbmQgdGhlIHN1YnNlcXVlbnQgbW9kaWZpY2F0aW9ucyB0byB0aGUgTUFDIGZpbHRlcmluZyBsb2dpYy4gVGhpcyBwYXRjaCB0b3VjaGVzIGBlbmV0YzRfcGYuY2AgYW5kIGBlbmV0Y19wZi5jYCBwcmV0dHkgZXh0ZW5zaXZlbHksIHNvIHRob3NlIGFyZSBteSBwcmltYXJ5IGFyZWFzIG9mIGZvY3VzLiBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgbW9kaWZpZWQgdG8gZGV0ZXJtaW5lIHRoZSBhdHRhY2sgc3VyZmFjZS4KCk5vdywgbGV0JiMzOTtzIHNlZSwgYWZ0ZXIgc29tZSBkaWdnaW5nLCBoZXJlIGFyZSB0aGUgZnVuY3Rpb25zIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhhdCBhcmUgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaCB0aGF0IGFyZSBub3QgaW4gdGhlIGhvdCBwYXRoOiBgZW5ldGM0X3BmX3NldF9yeF9tb2RlYCwgYGVuZXRjX3BmX3NldF9yeF9tb2RlYCwgYGVuZXRjNF9wZl9zZXRfbWFjX2ZpbHRlcmAsIGBlbmV0YzRfcGZfc2V0X3VjX2V4YWN0X2ZpbHRlcmAsIGBlbmV0YzRfcGZfYWRkX21hZnRfZW50cmllc2AsIGBlbmV0Y19zeW5jX21hY19maWx0ZXJzYCwgYGVuZXRjX3NldF9zaV91Y19wcm9taXNjYCwgYGVuZXRjX3NldF9zaV9tY19wcm9taXNjYCwgYGVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcmAsIGBlbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXJgLCBgZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzY2AsIGFuZCBgZW5ldGNfcHNmcF9wYXJzZV9jbHNmbG93ZXJgLgoKSSBkaWQgYSBxdWljayBjaGVjayBvbiBhIGNvdXBsZSBvZiB0aG9zZSB0byBzZWUgaWYgYW55IGltbWVkaWF0ZWx5IHN0b29kIG91dC4gYGVuZXRjX3BzZnBfcGFyc2VfY2xzZmxvd2VyYCBoYXMgYSBzbWFsbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZmluZS4gSG93ZXZlciwgYGVuZXRjX3ZmX3Byb2JlYCBoYXMgYSBjaGFuZ2Ugd2hlcmUgdGhlIG1heGltdW0gbnVtYmVyIG9mIHF1ZXVlcyBpcyBjaGFuZ2VkLCBzbyB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCBmb3IgbWlzY29uZmlndXJhdGlvbiwgYnV0IHRoYXQmIzM5O3MgYSBzbWFsbGVyIGNoYW5nZS4KCkdpdmVuIHRoaXMsIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBtYWluIGZpbGVzLCBlc3BlY2lhbGx5IHRoZSBsaXN0ZWQgc3ltYm9scy4gVGhlIGNvbmZpZyBvcHRpb25zIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIHRvIHRlc3QgdGhpcyBjaGFuZ2UgYXJlOiBgRlNMX0VORVRDYCwgYE5YUF9FTkVUQzRgLCBgRlNMX0VORVRDX1ZGYCwgYW5kIGBGU0xfRU5FVENfUU9TYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBjb3JyZWN0IGNvbmZpZ3MsIGFjY29yZGluZyB0byB0aGUgS2NvbmZpZyBmaWxlcy4KCk9rYXksIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3MgYWdhaW4uLi4geWVwLCB0aG9zZSBhcmUgaXQuIE5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGNvbmZpZ3MgdGhhdCBtaWdodCBiZSByZWxldmFudCBoZXJlLiBMZXQmIzM5O3Mgc2VlLi4uIGBOWFBfTlRNUGA/IE5vLCB3YWl0Li4uIEluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZ2AsIGl0JiMzOTtzIHRoZXJlLi4uCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDAzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05YUF9OVE1QJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9uZXRjL0tjb25maWc9Mj1jb25maWcgTkVUX0RTQV9ORVRDX1NXSVRDSFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9uZXRjL0tjb25maWctOC1cdHNlbGVjdCBGU0xfRU5FVENfTURJT1xuZHJpdmVycy9uZXQvZHNhL25ldGMvS2NvbmZpZzo5Olx0c2VsZWN0IE5YUF9OVE1QXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9LY29uZmlnLTEwLVx0c2VsZWN0IE5YUF9ORVRDX0xJQlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnPTI9Y29uZmlnIEZTTF9FTkVUQ19DT1JFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy0zLVx0dHJpc3RhdGVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjQ6XHRzZWxlY3QgTlhQX05FVENfTElCIGlmIE5YUF9OVE1QXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy01LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnPTIwPWNvbmZpZyBOWFBfTkVUQ19MSUJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy0yNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjI3OmNvbmZpZyBOWFBfTlRNUFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctMjgtXHRib29sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWc9NDg9Y29uZmlnIE5YUF9FTkVUQzRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy01NC1cdHNlbGVjdCBOWFBfRU5FVENfUEZfQ09NTU9OXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZzo1NTpcdHNlbGVjdCBOWFBfTlRNUFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctNTYtXHRzZWxlY3QgUEhZTElOS1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDAzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1NjY0CgkJCQkJCQlvdXRwdXQ6IDMyMwoJCQkJCQkJdGhvdWdodHM6IDQxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBFTkVUQyBEcml2ZXIgQ2hhbmdlcyoqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBOWFBfRU5FVEM0YCBkZXBlbmRzIG9uIGBOWFBfTlRNUGAuIEdvb2QgdG8ga25vdy4gTGV0IG1lIHF1aWNrbHkgYXNzZXNzIGlmIGBGU0xfRU5FVENgIGlzIHN1ZmZpY2llbnQgb24gaXRzIG93bi4gSXQgc2VlbXMgSSBuZWVkIHRvIGVuYWJsZSBhIGZldyBjb25maWd1cmF0aW9uczogYEZTTF9FTkVUQ2AsIGBOWFBfRU5FVEM0YCwgYEZTTF9FTkVUQ19WRmAsIGFuZCBgRlNMX0VORVRDX1FPU2AuIEFscmlnaHQsIEkmIzM5O3ZlIGdvdCB0aGF0LgoKTm93LCBsZXQmIzM5O3MgcHJlcGFyZSB0aGUgb3V0cHV0IGZvciB0aGlzIHBhdGNoLiBJJiMzOTtsbCBmbGFnIGl0IGFzIGBXb3J0aEZ1enppbmc6IHRydWVgLCB0aGF0JiMzOTtzIGEgZ2l2ZW4uIFRoZSBjb3JlIG9mIHRoaXMgd29yayBsaWVzIGluIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgUlggbW9kZSwgTUFDIGZpbHRlcnMsIGFuZCBWTEFOIGZpbHRlcmluZy4gVGhlcmVmb3JlLCB0aGUgaW1wb3J0YW50IHN5bWJvbHMgdG8gZm9jdXMgb24gZHVyaW5nIGZ1enppbmcgYXJlOiBgZW5ldGM0X3BmX3NldF9yeF9tb2RlYCwgYGVuZXRjX3BmX3NldF9yeF9tb2RlYCwgYGVuZXRjNF9wZl9zZXRfbWFjX2ZpbHRlcmAsIGBlbmV0YzRfcGZfc2V0X3VjX2V4YWN0X2ZpbHRlcmAsIGBlbmV0YzRfcGZfYWRkX21hZnRfZW50cmllc2AsIGBlbmV0Y19zeW5jX21hY19maWx0ZXJzYCwgYGVuZXRjX3NldF9zaV91Y19wcm9taXNjYCwgYGVuZXRjX3NldF9zaV9tY19wcm9taXNjYCwgYGVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcmAsIGBlbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXJgIGFuZCBgZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzY2AuIFRoZXNlIHJlcHJlc2VudCB0aGUgcHJpbWFyeSBhcmVhcyBvZiBmdW5jdGlvbmFsIGNoYW5nZS4KCkZvciBlbmFibGluZyB0aGUgY29uZmlndXJhdGlvbnMsIEkmIzM5O2xsIG5lZWQgdG8gc3BlY2lmeSB0aGVzZSBjbGVhcmx5OiBgRlNMX0VORVRDYCwgYE5YUF9FTkVUQzRgLCBgRlNMX0VORVRDX1ZGYCwgYW5kIGBGU0xfRU5FVENfUU9TYC4KCkluIHRlcm1zIG9mIHJlYXNvbmluZywgdGhlIHBhdGNoIGlzIHJlZmFjdG9yaW5nIHRoZSBFTkVUQyBkcml2ZXIgdG8gdXNlIGBuZG9fc2V0X3J4X21vZGVfYXN5bmNgIGluc3RlYWQgb2YgYSB3b3JrcXVldWUuIFRoaXMgaXMgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgaW4gaG93IGl0IHNldHMgdGhlIFJYIG1vZGUuIFRoZXJlJiMzOTtzIGFsc28gbW9kaWZpY2F0aW9uIG9mIE1BQyBhbmQgVkxBTiBmaWx0ZXJpbmcsIHBsdXMgdGhlIGludHJvZHVjdGlvbiBvZiBjb21tb24gaGVscGVyIGZ1bmN0aW9ucyBmb3IgcHJvbWlzY3VvdXMgbW9kZSBhbmQgaGFzaCBmaWx0ZXJzLiBTaW5jZSB0aGVzZSBhcmUgYWxsIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgZHJpdmVyIGNvZGUsIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDAzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGU0xfRU5FVEMmIzM0OywKICAgICYjMzQ7TlhQX0VORVRDNCYjMzQ7LAogICAgJiMzNDtGU0xfRU5FVENfVkYmIzM0OywKICAgICYjMzQ7RlNMX0VORVRDX1FPUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VuZXRjNF9wZl9zZXRfcnhfbW9kZSYjMzQ7LAogICAgJiMzNDtlbmV0Y19wZl9zZXRfcnhfbW9kZSYjMzQ7LAogICAgJiMzNDtlbmV0YzRfcGZfc2V0X21hY19maWx0ZXImIzM0OywKICAgICYjMzQ7ZW5ldGM0X3BmX3NldF91Y19leGFjdF9maWx0ZXImIzM0OywKICAgICYjMzQ7ZW5ldGM0X3BmX2FkZF9tYWZ0X2VudHJpZXMmIzM0OywKICAgICYjMzQ7ZW5ldGNfc3luY19tYWNfZmlsdGVycyYjMzQ7LAogICAgJiMzNDtlbmV0Y19zZXRfc2lfdWNfcHJvbWlzYyYjMzQ7LAogICAgJiMzNDtlbmV0Y19zZXRfc2lfbWNfcHJvbWlzYyYjMzQ7LAogICAgJiMzNDtlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXImIzM0OywKICAgICYjMzQ7ZW5ldGNfc2V0X3NpX21jX2hhc2hfZmlsdGVyJiMzNDssCiAgICAmIzM0O2VuZXRjX3NldF9zaV92bGFuX3Byb21pc2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBFTkVUQyBkcml2ZXIgdG8gdXNlIHRoZSBuZXcgYG5kb19zZXRfcnhfbW9kZV9hc3luY2AgbmV0X2RldmljZV9vcHMgbWVtYmVyIGluc3RlYWQgb2YgYSBjdXN0b20gd29ya3F1ZXVlIGZvciBzZXR0aW5nIHRoZSBSWCBtb2RlLiBJdCBhbHNvIG1vZGlmaWVzIE1BQyBhbmQgVkxBTiBmaWx0ZXJpbmcgbG9naWMgaW4gdGhlIFBGIGRyaXZlcnMgKGBlbmV0YzRfcGYuY2AgYW5kIGBlbmV0Y19wZi5jYCksIGFuZCBpbnRyb2R1Y2VzIGNvbW1vbiBoZWxwZXIgZnVuY3Rpb25zIGZvciBwcm9taXNjdW91cyBtb2RlIGFuZCBoYXNoIGZpbHRlcnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlNMX0VORVRDJiMzNDssCiAgICAmIzM0O05YUF9FTkVUQzQmIzM0OywKICAgICYjMzQ7RlNMX0VORVRDX1ZGJiMzNDssCiAgICAmIzM0O0ZTTF9FTkVUQ19RT1MmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbmV0YzRfcGZfc2V0X3J4X21vZGUmIzM0OywKICAgICYjMzQ7ZW5ldGNfcGZfc2V0X3J4X21vZGUmIzM0OywKICAgICYjMzQ7ZW5ldGM0X3BmX3NldF9tYWNfZmlsdGVyJiMzNDssCiAgICAmIzM0O2VuZXRjNF9wZl9zZXRfdWNfZXhhY3RfZmlsdGVyJiMzNDssCiAgICAmIzM0O2VuZXRjNF9wZl9hZGRfbWFmdF9lbnRyaWVzJiMzNDssCiAgICAmIzM0O2VuZXRjX3N5bmNfbWFjX2ZpbHRlcnMmIzM0OywKICAgICYjMzQ7ZW5ldGNfc2V0X3NpX3VjX3Byb21pc2MmIzM0OywKICAgICYjMzQ7ZW5ldGNfc2V0X3NpX21jX3Byb21pc2MmIzM0OywKICAgICYjMzQ7ZW5ldGNfc2V0X3NpX3VjX2hhc2hfZmlsdGVyJiMzNDssCiAgICAmIzM0O2VuZXRjX3NldF9zaV9tY19oYXNoX2ZpbHRlciYjMzQ7LAogICAgJiMzNDtlbmV0Y19zZXRfc2lfdmxhbl9wcm9taXNjJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgRU5FVEMgZHJpdmVyIHRvIHVzZSB0aGUgbmV3IGBuZG9fc2V0X3J4X21vZGVfYXN5bmNgIG5ldF9kZXZpY2Vfb3BzIG1lbWJlciBpbnN0ZWFkIG9mIGEgY3VzdG9tIHdvcmtxdWV1ZSBmb3Igc2V0dGluZyB0aGUgUlggbW9kZS4gSXQgYWxzbyBtb2RpZmllcyBNQUMgYW5kIFZMQU4gZmlsdGVyaW5nIGxvZ2ljIGluIHRoZSBQRiBkcml2ZXJzIChgZW5ldGM0X3BmLmNgIGFuZCBgZW5ldGNfcGYuY2ApLCBhbmQgaW50cm9kdWNlcyBjb21tb24gaGVscGVyIGZ1bmN0aW9ucyBmb3IgcHJvbWlzY3VvdXMgbW9kZSBhbmQgaGFzaCBmaWx0ZXJzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwMzowMDoxNS4zMDk4MzQ3OTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTAxNjczMjI4MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlNMX0VORVRDXCIsXG4gICAgXCJOWFBfRU5FVEM0XCIsXG4gICAgXCJGU0xfRU5FVENfVkZcIixcbiAgICBcIkZTTF9FTkVUQ19RT1NcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlbmV0YzRfcGZfc2V0X3J4X21vZGVcIixcbiAgICBcImVuZXRjX3BmX3NldF9yeF9tb2RlXCIsXG4gICAgXCJlbmV0YzRfcGZfc2V0X21hY19maWx0ZXJcIixcbiAgICBcImVuZXRjNF9wZl9zZXRfdWNfZXhhY3RfZmlsdGVyXCIsXG4gICAgXCJlbmV0YzRfcGZfYWRkX21hZnRfZW50cmllc1wiLFxuICAgIFwiZW5ldGNfc3luY19tYWNfZmlsdGVyc1wiLFxuICAgIFwiZW5ldGNfc2V0X3NpX3VjX3Byb21pc2NcIixcbiAgICBcImVuZXRjX3NldF9zaV9tY19wcm9taXNjXCIsXG4gICAgXCJlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXJcIixcbiAgICBcImVuZXRjX3NldF9zaV9tY19oYXNoX2ZpbHRlclwiLFxuICAgIFwiZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgRU5FVEMgZHJpdmVyIHRvIHVzZSB0aGUgbmV3IGBuZG9fc2V0X3J4X21vZGVfYXN5bmNgIG5ldF9kZXZpY2Vfb3BzIG1lbWJlciBpbnN0ZWFkIG9mIGEgY3VzdG9tIHdvcmtxdWV1ZSBmb3Igc2V0dGluZyB0aGUgUlggbW9kZS4gSXQgYWxzbyBtb2RpZmllcyBNQUMgYW5kIFZMQU4gZmlsdGVyaW5nIGxvZ2ljIGluIHRoZSBQRiBkcml2ZXJzIChgZW5ldGM0X3BmLmNgIGFuZCBgZW5ldGNfcGYuY2ApLCBhbmQgaW50cm9kdWNlcyBjb21tb24gaGVscGVyIGZ1bmN0aW9ucyBmb3IgcHJvbWlzY3VvdXMgbW9kZSBhbmQgaGFzaCBmaWx0ZXJzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDAzOjAwOjE1LjMwOTg0MDYwOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgxNTk5NTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNmIxMzllNDcyZDkwYTc4YWVkMzBhZGEyMjYxNTc0YWRlZTJjMjk2NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyMCAwMzowMDoxMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Yy5oXFxuaW5kZXggMDRhNWRkNWVhNmM3NGMuLjg4MzljZmI0OWJjZmU4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Yy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjLmhcXG5AQCAtMSw1ICsxLDUgQEBcXG4gLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wKyBPUiBCU0QtMy1DbGF1c2UpICovXFxuLS8qIENvcHlyaWdodCAyMDE3LTIwMTkgTlhQICovXFxuKy8qIENvcHlyaWdodCAyMDE3LTIwMTksIDIwMjUtMjAyNiBOWFAgKi9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90aW1lci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLmhcXHUwMDNlXFxuQEAgLTMyNCw4ICszMjQsNiBAQCBzdHJ1Y3QgZW5ldGNfc2kge1xcbiBcXHRjb25zdCBzdHJ1Y3QgZW5ldGNfZHJ2ZGF0YSAqZHJ2ZGF0YTtcXG4gXFx0Y29uc3Qgc3RydWN0IGVuZXRjX3NpX29wcyAqb3BzO1xcbiBcXG4tXFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtxdWV1ZTtcXG4tXFx0c3RydWN0IHdvcmtfc3RydWN0IHJ4X21vZGVfdGFzaztcXG4gXFx0c3RydWN0IGRlbnRyeSAqZGVidWdmc19yb290O1xcbiBcXHRzdHJ1Y3QgZW5ldGNfbXNnX3N3YmQgbXNnOyAvKiBPbmx5IHZhbGlkIGZvciBWU0kgKi9cXG4gfTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X2RlYnVnZnMuY1xcbmluZGV4IDFiMTU5MWRjZTczZDRiLi41MDI5MDM4YmY5OWZhYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X2RlYnVnZnMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfZGVidWdmcy5jXFxuQEAgLTI4LDE1ICsyOCwxNCBAQCBzdGF0aWMgdm9pZCBlbmV0Y19zaG93X3NpX21hY19oYXNoX2ZpbHRlcihzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGludCBpKVxcbiBcXG4gc3RhdGljIGludCBlbmV0Y19tYWNfZmlsdGVyX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKVxcbiB7XFxuLVxcdHN0cnVjdCBlbmV0Y19zaSAqc2kgPSBzLVxcdTAwM2Vwcml2YXRlO1xcbi1cXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXFx1MDAyNnNpLVxcdTAwM2VodztcXG4rXFx0c3RydWN0IGVuZXRjX3BmICpwZiA9IGVuZXRjX3NpX3ByaXYocy1cXHUwMDNlcHJpdmF0ZSk7XFxuK1xcdHN0cnVjdCBlbmV0Y19odyAqaHcgPSBcXHUwMDI2cGYtXFx1MDAzZXNpLVxcdTAwM2VodztcXG4rXFx0aW50IG51bV9zaSA9IHBmLVxcdTAwM2V0b3RhbF92ZnMgKyAxO1xcbiBcXHRzdHJ1Y3QgbWFmdF9lbnRyeV9kYXRhIG1hZnQ7XFxuLVxcdHN0cnVjdCBlbmV0Y19wZiAqcGY7XFxuLVxcdGludCBpLCBlcnIsIG51bV9zaTtcXG4tXFx0dTMyIHZhbDtcXG4tXFxuLVxcdHBmID0gZW5ldGNfc2lfcHJpdihzaSk7XFxuLVxcdG51bV9zaSA9IHBmLVxcdTAwM2VjYXBzLm51bV92c2kgKyAxO1xcbitcXHRzdHJ1Y3QgbnRtcF91c2VyICp1c2VyO1xcbitcXHR1MzIgdmFsLCBlbnRyeV9pZDtcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcdGludCBpO1xcbiBcXG4gXFx0dmFsID0gZW5ldGNfcG9ydF9yZChodywgRU5FVEM0X1BTSVBNTVIpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX3NpOyBpKyspIHtcXG5AQCAtNTAsMzEgKzQ5LDM4IEBAIHN0YXRpYyBpbnQgZW5ldGNfbWFjX2ZpbHRlcl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSlcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9zaTsgaSsrKVxcbiBcXHRcXHRlbmV0Y19zaG93X3NpX21hY19oYXNoX2ZpbHRlcihzLCBpKTtcXG4gXFxuLVxcdGlmICghcGYtXFx1MDAzZW51bV9tZmUpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHR1c2VyID0gXFx1MDAyNnBmLVxcdTAwM2VzaS1cXHUwMDNlbnRtcF91c2VyO1xcbitcXHRydG5sX2xvY2soKTtcXG4rXFxuK1xcdGlmIChiaXRtYXBfZW1wdHkodXNlci1cXHUwMDNlbWFmdF9laWRfYml0bWFwLCB1c2VyLVxcdTAwM2VtYWZ0X251bV9lbnRyaWVzKSlcXG4rXFx0XFx0Z290byB1bmxvY2tfcnRubDtcXG4gXFxuIFxcdC8qIE1BQyBhZGRyZXNzIGZpbHRlciB0YWJsZSAqL1xcbiBcXHRzZXFfcHV0cyhzLCBcXFwiTUFDIGFkZHJlc3MgZmlsdGVyIHRhYmxlXFxcXG5cXFwiKTtcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBmLVxcdTAwM2VudW1fbWZlOyBpKyspIHtcXG4rXFx0Zm9yX2VhY2hfc2V0X2JpdChlbnRyeV9pZCwgdXNlci1cXHUwMDNlbWFmdF9laWRfYml0bWFwLFxcbitcXHRcXHRcXHQgdXNlci1cXHUwMDNlbWFmdF9udW1fZW50cmllcykge1xcbiBcXHRcXHRtZW1zZXQoXFx1MDAyNm1hZnQsIDAsIHNpemVvZihtYWZ0KSk7XFxuLVxcdFxcdGVyciA9IG50bXBfbWFmdF9xdWVyeV9lbnRyeShcXHUwMDI2c2ktXFx1MDAzZW50bXBfdXNlciwgaSwgXFx1MDAyNm1hZnQpO1xcbitcXHRcXHRlcnIgPSBudG1wX21hZnRfcXVlcnlfZW50cnkodXNlciwgZW50cnlfaWQsIFxcdTAwMjZtYWZ0KTtcXG4gXFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0XFx0Z290byB1bmxvY2tfcnRubDtcXG4gXFxuLVxcdFxcdHNlcV9wcmludGYocywgXFxcIkVudHJ5ICVkLCBNQUM6ICVwTSwgU0kgYml0bWFwOiAweCUwNHhcXFxcblxcXCIsIGksXFxuLVxcdFxcdFxcdCAgIG1hZnQua2V5ZS5tYWNfYWRkciwgbGUxNl90b19jcHUobWFmdC5jZmdlLnNpX2JpdG1hcCkpO1xcbitcXHRcXHRzZXFfcHJpbnRmKHMsIFxcXCJFbnRyeSAlZCwgTUFDOiAlcE0sIFNJIGJpdG1hcDogMHglMDR4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBlbnRyeV9pZCwgbWFmdC5rZXllLm1hY19hZGRyLFxcbitcXHRcXHRcXHQgICBsZTE2X3RvX2NwdShtYWZ0LmNmZ2Uuc2lfYml0bWFwKSk7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiAwO1xcbit1bmxvY2tfcnRubDpcXG4rXFx0cnRubF91bmxvY2soKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gREVGSU5FX1NIT1dfQVRUUklCVVRFKGVuZXRjX21hY19maWx0ZXIpO1xcbiBcXG4gdm9pZCBlbmV0Y19jcmVhdGVfZGVidWdmcyhzdHJ1Y3QgZW5ldGNfc2kgKnNpKVxcbiB7XFxuLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gc2ktXFx1MDAzZW5kZXY7XFxuIFxcdHN0cnVjdCBkZW50cnkgKnJvb3Q7XFxuIFxcbi1cXHRyb290ID0gZGVidWdmc19jcmVhdGVfZGlyKG5ldGRldl9uYW1lKG5kZXYpLCBOVUxMKTtcXG4rXFx0cm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihwY2lfbmFtZShzaS1cXHUwMDNlcGRldiksIE5VTEwpO1xcbiBcXHRpZiAoSVNfRVJSKHJvb3QpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X2h3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X2h3LmhcXG5pbmRleCBmMTg0Mzc1NTZhMGVlMi4uMDkwMjVlN2EyYTNhZWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9ody5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9ody5oXFxuQEAgLTY5LDggKzY5LDYgQEBcXG4gXFxuIC8qIFBvcnQgU3RhdGlvbiBpbnRlcmZhY2UgcHJvbWlzY3VvdXMgTUFDIG1vZGUgcmVnaXN0ZXIgKi9cXG4gI2RlZmluZSBFTkVUQzRfUFNJUE1NUlxcdFxcdFxcdDB4MjAwXFxuLSNkZWZpbmUgIFBTSVBNTVJfU0lfTUFDX1VQKGEpXFx0XFx0QklUKGEpIC8qIGEgPSBTSSBpbmRleCAqL1xcbi0jZGVmaW5lICBQU0lQTU1SX1NJX01BQ19NUChhKVxcdFxcdEJJVCgoYSkgKyAxNilcXG4gXFxuIC8qIFBvcnQgU3RhdGlvbiBpbnRlcmZhY2UgcHJvbWlzY3VvdXMgVkxBTiBtb2RlIHJlZ2lzdGVyICovXFxuICNkZWZpbmUgRU5FVEM0X1BTSVBWTVJcXHRcXHRcXHQweDIwNFxcbkBAIC0xMzcsNyArMTM1LDYgQEBcXG4gI2RlZmluZSBFTkVUQzRfUFNJVkhGUjEoYSlcXHRcXHQoKGEpICogMHg4MCArIDB4MjA2NClcXG4gXFxuICNkZWZpbmUgRU5FVEM0X1BNQ0FQUlxcdFxcdFxcdDB4NDAwNFxcbi0jZGVmaW5lICBQTUNBUFJfSERcXHRcXHRcXHRCSVQoOClcXG4gI2RlZmluZSAgUE1DQVBSX0ZQXFx0XFx0XFx0R0VOTUFTSygxMCwgOSlcXG4gXFxuIC8qIFBvcnQgY2FwYWJpbGl0eSByZWdpc3RlciAqL1xcbkBAIC0xNTAsNyArMTQ3LDcgQEBcXG4gI2RlZmluZSAgUENSX0wyRE9TRVxcdFxcdFxcdEJJVCg0KVxcbiAjZGVmaW5lICBQQ1JfVElNRVJfQ1NcXHRcXHRcXHRCSVQoOClcXG4gI2RlZmluZSAgUENSX1BTUEVFRFxcdFxcdFxcdEdFTk1BU0soMjksIDE2KVxcbi0jZGVmaW5lICBQQ1JfUFNQRUVEX1ZBTChzcGVlZClcXHRcXHQoKChzcGVlZCkgLyAxMCAtIDEpIFxcdTAwM2NcXHUwMDNjIDE2KVxcbisjZGVmaW5lICBQQ1JfUFNQRUVEX1ZBTChzKVxcdFxcdEZJRUxEX1BSRVAoUENSX1BTUEVFRCwgKChzKSAvIDEwIC0gMSkpXFxuIFxcbiAvKiBQb3J0IE1BQyBhZGRyZXNzIHJlZ2lzdGVyIDAvMSAqL1xcbiAjZGVmaW5lIEVORVRDNF9QTUFSMFxcdFxcdFxcdDB4NDAyMFxcbkBAIC0yMDAsNyArMTk3LDYgQEBcXG4gI2RlZmluZSAgUE1fQ01EX0NGR19DTlRfRlJNX0VOXFx0XFx0QklUKDEzKVxcbiAjZGVmaW5lICBQTV9DTURfQ0ZHX1RYUFxcdFxcdFxcdEJJVCgxNSlcXG4gI2RlZmluZSAgUE1fQ01EX0NGR19TRU5EX0lETEVcXHRcXHRCSVQoMTYpXFxuLSNkZWZpbmUgIFBNX0NNRF9DRkdfSERfRkNFTlxcdFxcdEJJVCgxOClcXG4gI2RlZmluZSAgUE1fQ01EX0NGR19TRkRcXHRcXHRcXHRCSVQoMjEpXFxuICNkZWZpbmUgIFBNX0NNRF9DRkdfVFhfRkxVU0hcXHRcXHRCSVQoMjIpXFxuICNkZWZpbmUgIFBNX0NNRF9DRkdfVFhfTE9XUF9FTlxcdFxcdEJJVCgyMylcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jXFxuaW5kZXggNDM3YTE1YmJiNDdiYTguLmZjZmJhYmIyOWQyMmU0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuY1xcbkBAIC0yMywxOCArMjMsMTEgQEAgc3RhdGljIHZvaWQgZW5ldGM0X2dldF9wb3J0X2NhcHMoc3RydWN0IGVuZXRjX3BmICpwZilcXG4gXFx0dTMyIHZhbDtcXG4gXFxuIFxcdHZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDNF9FQ0FQUjEpO1xcbi1cXHRwZi1cXHUwMDNlY2Fwcy5udW1fdnNpID0gKHZhbCBcXHUwMDI2IEVDQVBSMV9OVU1fVlNJKSBcXHUwMDNlXFx1MDAzZSAyNDtcXG4gXFx0cGYtXFx1MDAzZWNhcHMubnVtX21zaXggPSAoKHZhbCBcXHUwMDI2IEVDQVBSMV9OVU1fTVNJWCkgXFx1MDAzZVxcdTAwM2UgMTIpICsgMTtcXG4gXFxuIFxcdHZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDNF9FQ0FQUjIpO1xcbiBcXHRwZi1cXHUwMDNlY2Fwcy5udW1fcnhfYmRyID0gKHZhbCBcXHUwMDI2IEVDQVBSMl9OVU1fUlhfQkRSKSBcXHUwMDNlXFx1MDAzZSAxNjtcXG4gXFx0cGYtXFx1MDAzZWNhcHMubnVtX3R4X2JkciA9IHZhbCBcXHUwMDI2IEVDQVBSMl9OVU1fVFhfQkRSO1xcbi1cXG4tXFx0dmFsID0gZW5ldGNfcG9ydF9yZChodywgRU5FVEM0X1BNQ0FQUik7XFxuLVxcdHBmLVxcdTAwM2VjYXBzLmhhbGZfZHVwbGV4ID0gKHZhbCBcXHUwMDI2IFBNQ0FQUl9IRCkgPyAxIDogMDtcXG4tXFxuLVxcdHZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDNF9QU0lNQUZDQVBSKTtcXG4tXFx0cGYtXFx1MDAzZWNhcHMubWFjX2ZpbHRlcl9udW0gPSB2YWwgXFx1MDAyNiBQU0lNQUZDQVBSX05VTV9NQUNfQUZURTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgZW5ldGM0X2dldF9wc2lfaHdfZmVhdHVyZXMoc3RydWN0IGVuZXRjX3NpICpzaSlcXG5AQCAtNzUsMzggKzY4LDYgQEAgc3RhdGljIHZvaWQgZW5ldGM0X3BmX2dldF9zaV9wcmltYXJ5X21hYyhzdHJ1Y3QgZW5ldGNfaHcgKmh3LCBpbnQgc2ksXFxuIFxcdHB1dF91bmFsaWduZWRfbGUxNihsb3dlciwgYWRkciArIDQpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBlbmV0YzRfcGZfc2V0X3NpX21hY19wcm9taXNjKHN0cnVjdCBlbmV0Y19odyAqaHcsIGludCBzaSxcXG4tXFx0XFx0XFx0XFx0XFx0IGJvb2wgdWNfcHJvbWlzYywgYm9vbCBtY19wcm9taXNjKVxcbi17XFxuLVxcdHUzMiB2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBFTkVUQzRfUFNJUE1NUik7XFxuLVxcbi1cXHRpZiAodWNfcHJvbWlzYylcXG4tXFx0XFx0dmFsIHw9IFBTSVBNTVJfU0lfTUFDX1VQKHNpKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHR2YWwgXFx1MDAyNj0gflBTSVBNTVJfU0lfTUFDX1VQKHNpKTtcXG4tXFxuLVxcdGlmIChtY19wcm9taXNjKVxcbi1cXHRcXHR2YWwgfD0gUFNJUE1NUl9TSV9NQUNfTVAoc2kpO1xcbi1cXHRlbHNlXFxuLVxcdFxcdHZhbCBcXHUwMDI2PSB+UFNJUE1NUl9TSV9NQUNfTVAoc2kpO1xcbi1cXG4tXFx0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSVBNTVIsIHZhbCk7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX2h3ICpodywgaW50IHNpLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgdTY0IGhhc2gpXFxuLXtcXG4tXFx0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSVVNSEZSMChzaSksIGxvd2VyXzMyX2JpdHMoaGFzaCkpO1xcbi1cXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJVU1IRlIxKHNpKSwgdXBwZXJfMzJfYml0cyhoYXNoKSk7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfc2lfbWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX2h3ICpodywgaW50IHNpLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgdTY0IGhhc2gpXFxuLXtcXG4tXFx0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSU1NSEZSMChzaSksIGxvd2VyXzMyX2JpdHMoaGFzaCkpO1xcbi1cXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJTU1IRlIxKHNpKSwgdXBwZXJfMzJfYml0cyhoYXNoKSk7XFxuLX1cXG4tXFxuIHN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfbG9vcGJhY2soc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgZW4pXFxuIHtcXG4gXFx0c3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbkBAIC0xMjQsMzQgKzg1LDQ3IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfbG9vcGJhY2soc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgZW4pXFxuIFxcbiBzdGF0aWMgdm9pZCBlbmV0YzRfcGZfY2xlYXJfbWFmdF9lbnRyaWVzKHN0cnVjdCBlbmV0Y19wZiAqcGYpXFxuIHtcXG4tXFx0aW50IGk7XFxuK1xcdHN0cnVjdCBudG1wX3VzZXIgKnVzZXIgPSBcXHUwMDI2cGYtXFx1MDAzZXNpLVxcdTAwM2VudG1wX3VzZXI7XFxuK1xcdHUzMiBlbnRyeV9pZDtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwZi1cXHUwMDNlbnVtX21mZTsgaSsrKVxcbi1cXHRcXHRudG1wX21hZnRfZGVsZXRlX2VudHJ5KFxcdTAwMjZwZi1cXHUwMDNlc2ktXFx1MDAzZW50bXBfdXNlciwgaSk7XFxuLVxcbi1cXHRwZi1cXHUwMDNlbnVtX21mZSA9IDA7XFxuK1xcdGZvcl9lYWNoX3NldF9iaXQoZW50cnlfaWQsIHVzZXItXFx1MDAzZW1hZnRfZWlkX2JpdG1hcCxcXG4rXFx0XFx0XFx0IHVzZXItXFx1MDAzZW1hZnRfbnVtX2VudHJpZXMpIHtcXG4rXFx0XFx0aWYgKCFudG1wX21hZnRfZGVsZXRlX2VudHJ5KHVzZXIsIGVudHJ5X2lkKSlcXG4rXFx0XFx0XFx0bnRtcF9jbGVhcl9laWRfYml0bWFwKHVzZXItXFx1MDAzZW1hZnRfZWlkX2JpdG1hcCwgZW50cnlfaWQpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZW5ldGM0X3BmX2FkZF9tYWZ0X2VudHJpZXMoc3RydWN0IGVuZXRjX3BmICpwZixcXG4tXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGVuZXRjX21hY19hZGRyICptYWMsXFxuLVxcdFxcdFxcdFxcdCAgICAgIGludCBtYWNfY250KVxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMpXFxuIHtcXG4rXFx0c3RydWN0IG50bXBfdXNlciAqdXNlciA9IFxcdTAwMjZwZi1cXHUwMDNlc2ktXFx1MDAzZW50bXBfdXNlcjtcXG4rXFx0aW50IG1hY19jbnQgPSBuZXRkZXZfaHdfYWRkcl9saXN0X2NvdW50KHVjKTtcXG4gXFx0c3RydWN0IG1hZnRfZW50cnlfZGF0YSBtYWZ0ID0ge307XFxuK1xcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XFxuK1xcdHUzMiBhdmFpbGFibGVfZW50cmllcztcXG4gXFx0dTE2IHNpX2JpdCA9IEJJVCgwKTtcXG4tXFx0aW50IGksIGVycjtcXG4rXFx0dTMyIGVudHJ5X2lkO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0YXZhaWxhYmxlX2VudHJpZXMgPSB1c2VyLVxcdTAwM2VtYWZ0X251bV9lbnRyaWVzIC1cXG4rXFx0XFx0XFx0ICAgIGJpdG1hcF93ZWlnaHQodXNlci1cXHUwMDNlbWFmdF9laWRfYml0bWFwLFxcbitcXHRcXHRcXHRcXHRcXHQgIHVzZXItXFx1MDAzZW1hZnRfbnVtX2VudHJpZXMpO1xcbitcXG4rXFx0aWYgKG1hY19jbnQgXFx1MDAzZSBhdmFpbGFibGVfZW50cmllcylcXG4rXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuIFxcbiBcXHRtYWZ0LmNmZ2Uuc2lfYml0bWFwID0gY3B1X3RvX2xlMTYoc2lfYml0KTtcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG1hY19jbnQ7IGkrKykge1xcbi1cXHRcXHRldGhlcl9hZGRyX2NvcHkobWFmdC5rZXllLm1hY19hZGRyLCBtYWNbaV0uYWRkcik7XFxuLVxcdFxcdGVyciA9IG50bXBfbWFmdF9hZGRfZW50cnkoXFx1MDAyNnBmLVxcdTAwM2VzaS1cXHUwMDNlbnRtcF91c2VyLCBpLCBcXHUwMDI2bWFmdCk7XFxuK1xcdG5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIHVjKSB7XFxuK1xcdFxcdGVudHJ5X2lkID0gbnRtcF9sb29rdXBfZnJlZV9laWQodXNlci1cXHUwMDNlbWFmdF9laWRfYml0bWFwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHR1c2VyLVxcdTAwM2VtYWZ0X251bV9lbnRyaWVzKTtcXG4rXFx0XFx0ZXRoZXJfYWRkcl9jb3B5KG1hZnQua2V5ZS5tYWNfYWRkciwgaGEtXFx1MDAzZWFkZHIpO1xcbitcXHRcXHRlcnIgPSBudG1wX21hZnRfYWRkX2VudHJ5KHVzZXIsIGVudHJ5X2lkLCBcXHUwMDI2bWFmdCk7XFxuIFxcdFxcdGlmICh1bmxpa2VseShlcnIpKSB7XFxuLVxcdFxcdFxcdHBmLVxcdTAwM2VudW1fbWZlID0gaTtcXG4rXFx0XFx0XFx0bnRtcF9jbGVhcl9laWRfYml0bWFwKHVzZXItXFx1MDAzZW1hZnRfZWlkX2JpdG1hcCwgZW50cnlfaWQpO1xcbiBcXHRcXHRcXHRnb3RvIGNsZWFyX21hZnRfZW50cmllcztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRwZi1cXHUwMDNlbnVtX21mZSA9IG1hY19jbnQ7XFxuLVxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIGNsZWFyX21hZnRfZW50cmllczpcXG5AQCAtMTYwLDk3ICsxMzQsNzAgQEAgc3RhdGljIGludCBlbmV0YzRfcGZfYWRkX21hZnRfZW50cmllcyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLFxcbiBcXHRyZXR1cm4gIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBlbmV0YzRfcGZfc2V0X3VjX2V4YWN0X2ZpbHRlcihzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxcbitzdGF0aWMgdm9pZCBlbmV0YzRfcGZfc2V0X3VjX2hhc2hfZmlsdGVyKHN0cnVjdCBlbmV0Y19wZiAqcGYsXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMpXFxuIHtcXG4tXFx0aW50IG1heF9udW1fbWZlID0gcGYtXFx1MDAzZWNhcHMubWFjX2ZpbHRlcl9udW07XFxuLVxcdHN0cnVjdCBlbmV0Y19tYWNfZmlsdGVyIG1hY19maWx0ZXIgPSB7fTtcXG4tXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwZi1cXHUwMDNlc2ktXFx1MDAzZW5kZXY7XFxuLVxcdHN0cnVjdCBlbmV0Y19odyAqaHcgPSBcXHUwMDI2cGYtXFx1MDAzZXNpLVxcdTAwM2VodztcXG4tXFx0c3RydWN0IGVuZXRjX21hY19hZGRyICptYWNfdGJsO1xcbitcXHRzdHJ1Y3QgZW5ldGNfbWFjX2ZpbHRlciAqbWFjX2ZpbHRlciA9IFxcdTAwMjZwZi1cXHUwMDNlbWFjX2ZpbHRlcltVQ107XFxuIFxcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XFxuLVxcdGludCBpID0gMCwgZXJyO1xcbi1cXHRpbnQgbWFjX2NudDtcXG4rXFx0dTY0IGhhc2g7XFxuIFxcbi1cXHRuZXRpZl9hZGRyX2xvY2tfYmgobmRldik7XFxuK1xcdGVuZXRjX3Jlc2V0X21hY19hZGRyX2ZpbHRlcihtYWNfZmlsdGVyKTtcXG4rXFx0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgdWMpXFxuK1xcdFxcdGVuZXRjX2FkZF9tYWNfYWRkcl9odF9maWx0ZXIobWFjX2ZpbHRlciwgaGEtXFx1MDAzZWFkZHIpO1xcbitcXG4rXFx0Yml0bWFwX3RvX2FycjY0KFxcdTAwMjZoYXNoLCBtYWNfZmlsdGVyLVxcdTAwM2VtYWNfaGFzaF90YWJsZSxcXG4rXFx0XFx0XFx0RU5FVENfTUFERFJfSEFTSF9UQkxfU1opO1xcbitcXHRlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIocGYtXFx1MDAzZXNpLCAwLCBoYXNoKTtcXG4rfVxcbiBcXG4tXFx0bWFjX2NudCA9IG5ldGRldl91Y19jb3VudChuZGV2KTtcXG4tXFx0aWYgKCFtYWNfY250KSB7XFxuLVxcdFxcdG5ldGlmX2FkZHJfdW5sb2NrX2JoKG5kZXYpO1xcbitzdGF0aWMgaW50IGVuZXRjNF9wZl9zZXRfdWNfZXhhY3RfZmlsdGVyKHN0cnVjdCBlbmV0Y19wZiAqcGYsXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMpXFxuK3tcXG4rXFx0c3RydWN0IGVuZXRjX3NpICpzaSA9IHBmLVxcdTAwM2VzaTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmIChuZXRkZXZfaHdfYWRkcl9saXN0X2VtcHR5KHVjKSkge1xcbiBcXHRcXHQvKiBjbGVhciBib3RoIE1BQyBoYXNoIGFuZCBleGFjdCBmaWx0ZXJzICovXFxuLVxcdFxcdGVuZXRjNF9wZl9zZXRfc2lfdWNfaGFzaF9maWx0ZXIoaHcsIDAsIDApO1xcbitcXHRcXHRlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc2ksIDAsIDApO1xcbiBcXHRcXHRlbmV0YzRfcGZfY2xlYXJfbWFmdF9lbnRyaWVzKHBmKTtcXG4gXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAobWFjX2NudCBcXHUwMDNlIG1heF9udW1fbWZlKSB7XFxuLVxcdFxcdGVyciA9IC1FTk9TUEM7XFxuLVxcdFxcdGdvdG8gdW5sb2NrX25ldGlmX2FkZHI7XFxuLVxcdH1cXG4tXFxuLVxcdG1hY190YmwgPSBremFsbG9jX29ianMoKm1hY190YmwsIG1hY19jbnQsIEdGUF9BVE9NSUMpO1xcbi1cXHRpZiAoIW1hY190YmwpIHtcXG4tXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4tXFx0XFx0Z290byB1bmxvY2tfbmV0aWZfYWRkcjtcXG4tXFx0fVxcbi1cXG4tXFx0bmV0ZGV2X2Zvcl9lYWNoX3VjX2FkZHIoaGEsIG5kZXYpIHtcXG4tXFx0XFx0ZW5ldGNfYWRkX21hY19hZGRyX2h0X2ZpbHRlcihcXHUwMDI2bWFjX2ZpbHRlciwgaGEtXFx1MDAzZWFkZHIpO1xcbi1cXHRcXHRldGhlcl9hZGRyX2NvcHkobWFjX3RibFtpKytdLmFkZHIsIGhhLVxcdTAwM2VhZGRyKTtcXG4tXFx0fVxcbi1cXG4tXFx0bmV0aWZfYWRkcl91bmxvY2tfYmgobmRldik7XFxuLVxcbi1cXHQvKiBTZXQgdGVtcG9yYXJ5IHVuaWNhc3QgaGFzaCBmaWx0ZXJzIGluIGNhc2Ugb2YgUnggbG9zcyB3aGVuXFxuK1xcdC8qIFNldCB0ZW1wb3JhcnkgdW5pY2FzdCBoYXNoIGZpbHRlciBpbiBjYXNlIG9mIFJ4IGxvc3Mgd2hlblxcbiBcXHQgKiB1cGRhdGluZyBNQUMgYWRkcmVzcyBmaWx0ZXIgdGFibGVcXG4gXFx0ICovXFxuLVxcdGVuZXRjNF9wZl9zZXRfc2lfdWNfaGFzaF9maWx0ZXIoaHcsIDAsICptYWNfZmlsdGVyLm1hY19oYXNoX3RhYmxlKTtcXG4rXFx0ZW5ldGM0X3BmX3NldF91Y19oYXNoX2ZpbHRlcihwZiwgdWMpO1xcbiBcXHRlbmV0YzRfcGZfY2xlYXJfbWFmdF9lbnRyaWVzKHBmKTtcXG4gXFxuLVxcdGlmICghZW5ldGM0X3BmX2FkZF9tYWZ0X2VudHJpZXMocGYsIG1hY190YmwsIGkpKVxcbi1cXHRcXHRlbmV0YzRfcGZfc2V0X3NpX3VjX2hhc2hfZmlsdGVyKGh3LCAwLCAwKTtcXG4tXFxuLVxcdGtmcmVlKG1hY190YmwpO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLVxcbi11bmxvY2tfbmV0aWZfYWRkcjpcXG4tXFx0bmV0aWZfYWRkcl91bmxvY2tfYmgobmRldik7XFxuK1xcdGVyciA9IGVuZXRjNF9wZl9hZGRfbWFmdF9lbnRyaWVzKHBmLCB1Yyk7XFxuK1xcdGlmICghZXJyKSB7XFxuK1xcdFxcdGVuZXRjX3Jlc2V0X21hY19hZGRyX2ZpbHRlcihcXHUwMDI2cGYtXFx1MDAzZW1hY19maWx0ZXJbVUNdKTtcXG4rXFx0XFx0ZW5ldGNfc2V0X3NpX3VjX2hhc2hfZmlsdGVyKHNpLCAwLCAwKTtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9tYWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3BmICpwZiwgaW50IHR5cGUpXFxuK3N0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfbWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3BmICpwZixcXG4rXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICptYylcXG4ge1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBmLVxcdTAwM2VzaS1cXHUwMDNlbmRldjtcXG4tXFx0c3RydWN0IGVuZXRjX21hY19maWx0ZXIgKm1hY19maWx0ZXI7XFxuLVxcdHN0cnVjdCBlbmV0Y19odyAqaHcgPSBcXHUwMDI2cGYtXFx1MDAzZXNpLVxcdTAwM2VodztcXG4rXFx0c3RydWN0IGVuZXRjX21hY19maWx0ZXIgKm1hY19maWx0ZXIgPSBcXHUwMDI2cGYtXFx1MDAzZW1hY19maWx0ZXJbTUNdO1xcbiBcXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xcbitcXHR1NjQgaGFzaDtcXG4gXFxuLVxcdG5ldGlmX2FkZHJfbG9ja19iaChuZGV2KTtcXG4tXFx0aWYgKHR5cGUgXFx1MDAyNiBFTkVUQ19NQUNfRklMVEVSX1RZUEVfVUMpIHtcXG4tXFx0XFx0bWFjX2ZpbHRlciA9IFxcdTAwMjZwZi1cXHUwMDNlbWFjX2ZpbHRlcltVQ107XFxuLVxcdFxcdGVuZXRjX3Jlc2V0X21hY19hZGRyX2ZpbHRlcihtYWNfZmlsdGVyKTtcXG4tXFx0XFx0bmV0ZGV2X2Zvcl9lYWNoX3VjX2FkZHIoaGEsIG5kZXYpXFxuLVxcdFxcdFxcdGVuZXRjX2FkZF9tYWNfYWRkcl9odF9maWx0ZXIobWFjX2ZpbHRlciwgaGEtXFx1MDAzZWFkZHIpO1xcbi1cXG4tXFx0XFx0ZW5ldGM0X3BmX3NldF9zaV91Y19oYXNoX2ZpbHRlcihodywgMCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0Km1hY19maWx0ZXItXFx1MDAzZW1hY19oYXNoX3RhYmxlKTtcXG4tXFx0fVxcbitcXHRlbmV0Y19yZXNldF9tYWNfYWRkcl9maWx0ZXIobWFjX2ZpbHRlcik7XFxuK1xcdG5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIG1jKVxcbitcXHRcXHRlbmV0Y19hZGRfbWFjX2FkZHJfaHRfZmlsdGVyKG1hY19maWx0ZXIsIGhhLVxcdTAwM2VhZGRyKTtcXG4gXFxuLVxcdGlmICh0eXBlIFxcdTAwMjYgRU5FVENfTUFDX0ZJTFRFUl9UWVBFX01DKSB7XFxuLVxcdFxcdG1hY19maWx0ZXIgPSBcXHUwMDI2cGYtXFx1MDAzZW1hY19maWx0ZXJbTUNdO1xcbi1cXHRcXHRlbmV0Y19yZXNldF9tYWNfYWRkcl9maWx0ZXIobWFjX2ZpbHRlcik7XFxuLVxcdFxcdG5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBuZGV2KVxcbi1cXHRcXHRcXHRlbmV0Y19hZGRfbWFjX2FkZHJfaHRfZmlsdGVyKG1hY19maWx0ZXIsIGhhLVxcdTAwM2VhZGRyKTtcXG4tXFxuLVxcdFxcdGVuZXRjNF9wZl9zZXRfc2lfbWNfaGFzaF9maWx0ZXIoaHcsIDAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCptYWNfZmlsdGVyLVxcdTAwM2VtYWNfaGFzaF90YWJsZSk7XFxuLVxcdH1cXG4tXFx0bmV0aWZfYWRkcl91bmxvY2tfYmgobmRldik7XFxuK1xcdGJpdG1hcF90b19hcnI2NChcXHUwMDI2aGFzaCwgbWFjX2ZpbHRlci1cXHUwMDNlbWFjX2hhc2hfdGFibGUsXFxuK1xcdFxcdFxcdEVORVRDX01BRERSX0hBU0hfVEJMX1NaKTtcXG4rXFx0ZW5ldGNfc2V0X3NpX21jX2hhc2hfZmlsdGVyKHBmLVxcdTAwM2VzaSwgMCwgaGFzaCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfbWFjX2ZpbHRlcihzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBpbnQgdHlwZSlcXG4rc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9tYWNfZmlsdGVyKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGludCB0eXBlLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp1YyxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpXFxuIHtcXG4gXFx0LyogQ3VycmVudGx5LCB0aGUgTUFDIGFkZHJlc3MgZmlsdGVyIHRhYmxlIChNQUZUKSBvbmx5IGhhcyA0IGVudHJpZXMsXFxuIFxcdCAqIGFuZCBtdWx0aXBsZSBtdWx0aWNhc3QgYWRkcmVzc2VzIGZvciBmaWx0ZXJpbmcgd2lsbCBiZSBjb25maWd1cmVkXFxuQEAgLTI1OCwxNSArMjA1LDE2IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfbWFjX2ZpbHRlcihzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBpbnQgdHlwZSlcXG4gXFx0ICogdW5pY2FzdCBmaWx0ZXJpbmcuIElmIHRoZSBudW1iZXIgb2YgdW5pY2FzdCBhZGRyZXNzZXMgZXhjZWVkcyB0aGVcXG4gXFx0ICogdGFibGUgY2FwYWNpdHksIHRoZSBNQUMgaGFzaCBmaWx0ZXIgd2lsbCBiZSB1c2VkLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHR5cGUgXFx1MDAyNiBFTkVUQ19NQUNfRklMVEVSX1RZUEVfVUMgXFx1MDAyNlxcdTAwMjYgZW5ldGM0X3BmX3NldF91Y19leGFjdF9maWx0ZXIocGYpKSB7XFxuK1xcdGlmICh0eXBlIFxcdTAwMjYgRU5FVENfTUFDX0ZJTFRFUl9UWVBFX1VDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBlbmV0YzRfcGZfc2V0X3VjX2V4YWN0X2ZpbHRlcihwZiwgdWMpKSB7XFxuIFxcdFxcdC8qIEZhbGwgYmFjayB0byB0aGUgTUFDIGhhc2ggZmlsdGVyICovXFxuLVxcdFxcdGVuZXRjNF9wZl9zZXRfbWFjX2hhc2hfZmlsdGVyKHBmLCBFTkVUQ19NQUNfRklMVEVSX1RZUEVfVUMpO1xcbitcXHRcXHRlbmV0YzRfcGZfc2V0X3VjX2hhc2hfZmlsdGVyKHBmLCB1Yyk7XFxuIFxcdFxcdC8qIENsZWFyIHRoZSBvbGQgTUFDIGV4YWN0IGZpbHRlciAqL1xcbiBcXHRcXHRlbmV0YzRfcGZfY2xlYXJfbWFmdF9lbnRyaWVzKHBmKTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHR5cGUgXFx1MDAyNiBFTkVUQ19NQUNfRklMVEVSX1RZUEVfTUMpXFxuLVxcdFxcdGVuZXRjNF9wZl9zZXRfbWFjX2hhc2hfZmlsdGVyKHBmLCBFTkVUQ19NQUNfRklMVEVSX1RZUEVfTUMpO1xcbitcXHRcXHRlbmV0YzRfcGZfc2V0X21jX2hhc2hfZmlsdGVyKHBmLCBtYyk7XFxuIH1cXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZW5ldGNfcGZfb3BzIGVuZXRjNF9wZl9vcHMgPSB7XFxuQEAgLTMwNiwzNCArMjU0LDM1IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9kZWZhdWx0X3JpbmdzX2FsbG9jYXRpb24oc3RydWN0IGVuZXRjX3BmICpwZilcXG4ge1xcbiBcXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXFx1MDAyNnBmLVxcdTAwM2VzaS1cXHUwMDNlaHc7XFxuIFxcdHUzMiBudW1fcnhfYmRyLCBudW1fdHhfYmRyLCB2YWw7XFxuK1xcdGludCBudW1fdmZzID0gcGYtXFx1MDAzZXRvdGFsX3ZmcztcXG4gXFx0dTMyIHZmX3R4X2JkciwgdmZfcnhfYmRyO1xcbiBcXHRpbnQgaSwgcnhfcmVtLCB0eF9yZW07XFxuIFxcbi1cXHRpZiAocGYtXFx1MDAzZWNhcHMubnVtX3J4X2JkciBcXHUwMDNjIEVORVRDX1NJX01BWF9SSU5HX05VTSArIHBmLVxcdTAwM2VjYXBzLm51bV92c2kpXFxuLVxcdFxcdG51bV9yeF9iZHIgPSBwZi1cXHUwMDNlY2Fwcy5udW1fcnhfYmRyIC0gcGYtXFx1MDAzZWNhcHMubnVtX3ZzaTtcXG4rXFx0aWYgKHBmLVxcdTAwM2VjYXBzLm51bV9yeF9iZHIgXFx1MDAzYyBFTkVUQ19TSV9NQVhfUklOR19OVU0gKyBudW1fdmZzKVxcbitcXHRcXHRudW1fcnhfYmRyID0gcGYtXFx1MDAzZWNhcHMubnVtX3J4X2JkciAtIG51bV92ZnM7XFxuIFxcdGVsc2VcXG4gXFx0XFx0bnVtX3J4X2JkciA9IEVORVRDX1NJX01BWF9SSU5HX05VTTtcXG4gXFxuLVxcdGlmIChwZi1cXHUwMDNlY2Fwcy5udW1fdHhfYmRyIFxcdTAwM2MgRU5FVENfU0lfTUFYX1JJTkdfTlVNICsgcGYtXFx1MDAzZWNhcHMubnVtX3ZzaSlcXG4tXFx0XFx0bnVtX3R4X2JkciA9IHBmLVxcdTAwM2VjYXBzLm51bV90eF9iZHIgLSBwZi1cXHUwMDNlY2Fwcy5udW1fdnNpO1xcbitcXHRpZiAocGYtXFx1MDAzZWNhcHMubnVtX3R4X2JkciBcXHUwMDNjIEVORVRDX1NJX01BWF9SSU5HX05VTSArIG51bV92ZnMpXFxuK1xcdFxcdG51bV90eF9iZHIgPSBwZi1cXHUwMDNlY2Fwcy5udW1fdHhfYmRyIC0gbnVtX3ZmcztcXG4gXFx0ZWxzZVxcbiBcXHRcXHRudW1fdHhfYmRyID0gRU5FVENfU0lfTUFYX1JJTkdfTlVNO1xcbiBcXG4gXFx0dmFsID0gZW5ldGM0X3BzaWNmZ3IwX3ZhbF9jb25zdHJ1Y3QoZmFsc2UsIG51bV90eF9iZHIsIG51bV9yeF9iZHIpO1xcbiBcXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJQ0ZHUjAoMCksIHZhbCk7XFxuIFxcbi1cXHRpZiAoIXBmLVxcdTAwM2VjYXBzLm51bV92c2kpXFxuK1xcdGlmICghbnVtX3ZmcylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0bnVtX3J4X2JkciA9IHBmLVxcdTAwM2VjYXBzLm51bV9yeF9iZHIgLSBudW1fcnhfYmRyO1xcbi1cXHRyeF9yZW0gPSBudW1fcnhfYmRyICUgcGYtXFx1MDAzZWNhcHMubnVtX3ZzaTtcXG4tXFx0bnVtX3J4X2JkciA9IG51bV9yeF9iZHIgLyBwZi1cXHUwMDNlY2Fwcy5udW1fdnNpO1xcbitcXHRyeF9yZW0gPSBudW1fcnhfYmRyICUgbnVtX3ZmcztcXG4rXFx0bnVtX3J4X2JkciA9IG51bV9yeF9iZHIgLyBudW1fdmZzO1xcbiBcXG4gXFx0bnVtX3R4X2JkciA9IHBmLVxcdTAwM2VjYXBzLm51bV90eF9iZHIgLSBudW1fdHhfYmRyO1xcbi1cXHR0eF9yZW0gPSBudW1fdHhfYmRyICUgcGYtXFx1MDAzZWNhcHMubnVtX3ZzaTtcXG4tXFx0bnVtX3R4X2JkciA9IG51bV90eF9iZHIgLyBwZi1cXHUwMDNlY2Fwcy5udW1fdnNpO1xcbitcXHR0eF9yZW0gPSBudW1fdHhfYmRyICUgbnVtX3ZmcztcXG4rXFx0bnVtX3R4X2JkciA9IG51bV90eF9iZHIgLyBudW1fdmZzO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBmLVxcdTAwM2VjYXBzLm51bV92c2k7IGkrKykge1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX3ZmczsgaSsrKSB7XFxuIFxcdFxcdHZmX3R4X2JkciA9IChpIFxcdTAwM2MgdHhfcmVtKSA/IG51bV90eF9iZHIgKyAxIDogbnVtX3R4X2JkcjtcXG4gXFx0XFx0dmZfcnhfYmRyID0gKGkgXFx1MDAzYyByeF9yZW0pID8gbnVtX3J4X2JkciArIDEgOiBudW1fcnhfYmRyO1xcbiBcXHRcXHR2YWwgPSBlbmV0YzRfcHNpY2ZncjBfdmFsX2NvbnN0cnVjdCh0cnVlLCB2Zl90eF9iZHIsIHZmX3J4X2Jkcik7XFxuQEAgLTM0Niw1MyArMjk1LDcwIEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9hbGxvY2F0ZV9zaV9yaW5ncyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxcbiBcXHRlbmV0YzRfZGVmYXVsdF9yaW5nc19hbGxvY2F0aW9uKHBmKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9zaV92bGFuX3Byb21pc2Moc3RydWN0IGVuZXRjX2h3ICpodywgaW50IHNpLCBib29sIGVuKVxcbi17XFxuLVxcdHUzMiB2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBFTkVUQzRfUFNJUFZNUik7XFxuLVxcbi1cXHRpZiAoZW4pXFxuLVxcdFxcdHZhbCB8PSBCSVQoc2kpO1xcbi1cXHRlbHNlXFxuLVxcdFxcdHZhbCBcXHUwMDI2PSB+QklUKHNpKTtcXG4tXFxuLVxcdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lQVk1SLCB2YWwpO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBlbmV0YzRfc2V0X2RlZmF1bHRfc2lfdmxhbl9wcm9taXNjKHN0cnVjdCBlbmV0Y19wZiAqcGYpXFxuLXtcXG4tXFx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFxcdTAwMjZwZi1cXHUwMDNlc2ktXFx1MDAzZWh3O1xcbi1cXHRpbnQgbnVtX3NpID0gcGYtXFx1MDAzZWNhcHMubnVtX3ZzaSArIDE7XFxuLVxcdGludCBpO1xcbi1cXG4tXFx0LyogZW5mb3JjZSBWTEFOIHByb21pc2N1b3VzIG1vZGUgZm9yIGFsbCBTSXMgKi9cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9zaTsgaSsrKVxcbi1cXHRcXHRlbmV0YzRfcGZfc2V0X3NpX3ZsYW5fcHJvbWlzYyhodywgaSwgdHJ1ZSk7XFxuLX1cXG4tXFxuIC8qIEFsbG9jYXRlIHRoZSBudW1iZXIgb2YgTVNJLVggdmVjdG9ycyBmb3IgcGVyIFNJLiAqL1xcbiBzdGF0aWMgdm9pZCBlbmV0YzRfc2V0X3NpX21zaXhfbnVtKHN0cnVjdCBlbmV0Y19wZiAqcGYpXFxuIHtcXG4rXFx0aW50IHZhbGlkX251bV9zaSA9IHBmLVxcdTAwM2V0b3RhbF92ZnMgKyAxO1xcbiBcXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXFx1MDAyNnBmLVxcdTAwM2VzaS1cXHUwMDNlaHc7XFxuLVxcdGludCBpLCBudW1fbXNpeCwgdG90YWxfc2k7XFxuK1xcdGludCBpLCBudW1fbXNpeCwgbnVtX3ZzaTtcXG4gXFx0dTMyIHZhbDtcXG4gXFxuLVxcdHRvdGFsX3NpID0gcGYtXFx1MDAzZWNhcHMubnVtX3ZzaSArIDE7XFxuK1xcdHZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDNF9FQ0FQUjEpO1xcbitcXHRudW1fdnNpID0gRklFTERfR0VUKEVDQVBSMV9OVU1fVlNJLCB2YWwpO1xcbitcXG4rXFx0LyogVGhlIFBTSWFDRkdSMltOVU1fTVNJWF0gaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgTVNJLVggYWxsb2NhdGVkIHRvXFxuK1xcdCAqIHRoZSBTSSBpcyBOVU1fTVNJWCArIDEsIHNvIHRoZSBtaW5pbXVtIG51bWJlciBvZiBNU0ktWCBhbGxvY2F0ZWQgdG9cXG4rXFx0ICogZWFjaCBTSSBpcyAxLiBUaGUgdG90YWwgbnVtYmVyIG9mIE1TSS1YIGFsbG9jYXRlZCB0byBQU0kgYW5kIFZTSXNcXG4rXFx0ICogY2Fubm90IGV4Y2VlZCB0aGUgdG90YWwgbnVtYmVyIG9mIE1TSS1YIG93bmVkIGJ5IHRoaXMgRU5FVEMsIHdoaWNoXFxuK1xcdCAqIGlzIEVDQVBSMVtOVU1fTVNJWF0uIE90aGVyd2lzZSwgd2hlbiBtdWx0aXBsZSBFTkVUQyBpbnN0YW5jZXMgZXhpc3QsXFxuK1xcdCAqIGl0IHdpbGwgYWZmZWN0IG90aGVyIEVORVRDcyB3aG9zZSBNU0ktWCBpbnRlcnJ1cHRzIGNhbm5vdCBiZVxcbitcXHQgKiBnZW5lcmF0ZWQuIFRoaXMgaXMgc2ltaWxhciB0byBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2VzczogdGhlIGFycmF5XFxuK1xcdCAqIGl0c2VsZiBpcyBub3QgYWZmZWN0ZWQsIGJ1dCBhZGphY2VudCBhcnJheXMgd2lsbCBiZSBjb3JydXB0ZWQuXFxuK1xcdCAqXFxuK1xcdCAqIHBmLVxcdTAwM2V0b3RhbF92ZnMgaXMgMCBpZiBDT05GSUdfUENJX0lPViBpcyBkaXNhYmxlZC4gSWYgdGhlIGhhcmR3YXJlXFxuK1xcdCAqIGl0c2VsZiBzdXBwb3J0cyBTUi1JT1YsIHRoZW4gd2hlbiBhbGxvY2F0aW5nIHRoZSBudW1iZXIgb2YgTVNJWHMgdG9cXG4rXFx0ICogdGhlIFNJLCBpdCBtdXN0IGJlIHRha2VuIGludG8gYWNjb3VudCB0aGF0IHRoZSBWU0kgaGFzIGF0IGxlYXN0IDFcXG4rXFx0ICogTVNJWCwgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgTVNJWHMgb2YgYWxsIFNJcyBjYW5ub3QgZXhjZWVkXFxuK1xcdCAqIEVDQVBSMVtOVU1fTVNJWF0uXFxuK1xcdCAqL1xcbitcXHRpZiAoIXBmLVxcdTAwM2V0b3RhbF92ZnMgXFx1MDAyNlxcdTAwMjYgbnVtX3ZzaSkge1xcbitcXHRcXHQvKiBCZWNhdXNlIGVhY2ggU0kgaGFzIGF0IGxlYXN0IG9uZSBNU0lYLCBhbmQgZnJvbSB0aGUgaGFyZHdhcmVcXG4rXFx0XFx0ICogcGVyc3BlY3RpdmUsIHBmLVxcdTAwM2VjYXBzLm51bV9tc2l4IHdpbGwgYWx3YXlzIGJlIGdyZWF0ZXIgdGhhblxcbitcXHRcXHQgKiBudW1fdnNpLiBTbyBudW1fbXNpeCBpcyBhbHdheXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRudW1fbXNpeCA9IHBmLVxcdTAwM2VjYXBzLm51bV9tc2l4IC0gbnVtX3ZzaSAtIDE7XFxuK1xcdFxcdGlmIChudW1fbXNpeCBcXHUwMDNlIFBTSUNGR1IyX05VTV9NU0lYKVxcbitcXHRcXHRcXHRudW1fbXNpeCA9IFBTSUNGR1IyX05VTV9NU0lYO1xcbitcXHRcXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJQ0ZHUjIoMCksIG51bV9tc2l4KTtcXG4gXFxuLVxcdG51bV9tc2l4ID0gcGYtXFx1MDAzZWNhcHMubnVtX21zaXggLyB0b3RhbF9zaSArXFxuLVxcdFxcdCAgIHBmLVxcdTAwM2VjYXBzLm51bV9tc2l4ICUgdG90YWxfc2kgLSAxO1xcbi1cXHR2YWwgPSBudW1fbXNpeCBcXHUwMDI2IFBTSUNGR1IyX05VTV9NU0lYO1xcbi1cXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJQ0ZHUjIoMCksIHZhbCk7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fdnNpOyBpKyspXFxuK1xcdFxcdFxcdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lDRkdSMihpICsgMSksIDApO1xcbiBcXG4tXFx0bnVtX21zaXggPSBwZi1cXHUwMDNlY2Fwcy5udW1fbXNpeCAvIHRvdGFsX3NpIC0gMTtcXG4tXFx0dmFsID0gbnVtX21zaXggXFx1MDAyNiBQU0lDRkdSMl9OVU1fTVNJWDtcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBmLVxcdTAwM2VjYXBzLm51bV92c2k7IGkrKylcXG4tXFx0XFx0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSUNGR1IyKGkgKyAxKSwgdmFsKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHQvKiBMaWtld2lzZSwgZnJvbSB0aGUgaGFyZHdhcmUgcGVyc3BlY3RpdmUgcGYtXFx1MDAzZWNhcHMubnVtX21zaXggaXMgYWx3YXlzXFxuK1xcdCAqIGdyZWF0ZXIgdGhhbiB2YWxpZF9udW1fc2kuIFNvIG51bV9tc2l4IGlzIGFsd2F5cyBncmVhdGVyIHRoYW4gb3JcXG4rXFx0ICogZXF1YWwgdG8gMC5cXG4rXFx0ICovXFxuK1xcdG51bV9tc2l4ID0gcGYtXFx1MDAzZWNhcHMubnVtX21zaXggLyB2YWxpZF9udW1fc2kgK1xcbitcXHRcXHQgICBwZi1cXHUwMDNlY2Fwcy5udW1fbXNpeCAlIHZhbGlkX251bV9zaSAtIDE7XFxuK1xcdGlmIChudW1fbXNpeCBcXHUwMDNlIFBTSUNGR1IyX05VTV9NU0lYKVxcbitcXHRcXHRudW1fbXNpeCA9IFBTSUNGR1IyX05VTV9NU0lYO1xcbitcXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJQ0ZHUjIoMCksIG51bV9tc2l4KTtcXG4rXFxuK1xcdG51bV9tc2l4ID0gcGYtXFx1MDAzZWNhcHMubnVtX21zaXggLyB2YWxpZF9udW1fc2kgLSAxO1xcbitcXHRpZiAobnVtX21zaXggXFx1MDAzZSBQU0lDRkdSMl9OVU1fTVNJWClcXG4rXFx0XFx0bnVtX21zaXggPSBQU0lDRkdSMl9OVU1fTVNJWDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwZi1cXHUwMDNldG90YWxfdmZzOyBpKyspXFxuK1xcdFxcdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lDRkdSMihpICsgMSksIG51bV9tc2l4KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgZW5ldGM0X2VuYWJsZV9hbGxfc2koc3RydWN0IGVuZXRjX3BmICpwZilcXG4ge1xcbiBcXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXFx1MDAyNnBmLVxcdTAwM2VzaS1cXHUwMDNlaHc7XFxuLVxcdGludCBudW1fc2kgPSBwZi1cXHUwMDNlY2Fwcy5udW1fdnNpICsgMTtcXG4rXFx0aW50IG51bV9zaSA9IHBmLVxcdTAwM2V0b3RhbF92ZnMgKyAxO1xcbiBcXHR1MzIgc2lfYml0bWFwID0gMDtcXG4gXFx0aW50IGk7XFxuIFxcbkBAIC00MTIsNyArMzc4LDkgQEAgc3RhdGljIHZvaWQgZW5ldGM0X2NvbmZpZ3VyZV9wb3J0X3NpKHN0cnVjdCBlbmV0Y19wZiAqcGYpXFxuIFxcdC8qIE91dGVyIFZMQU4gdGFnIHdpbGwgYmUgdXNlZCBmb3IgVkxBTiBmaWx0ZXJpbmcgKi9cXG4gXFx0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSVZMQU5GTVIsIFBTSVZMQU5GTVJfVlMpO1xcbiBcXG4tXFx0ZW5ldGM0X3NldF9kZWZhdWx0X3NpX3ZsYW5fcHJvbWlzYyhwZik7XFxuK1xcdC8qIEVuZm9yY2UgVkxBTiBwcm9taXNjdW91cyBtb2RlIGZvciBhbGwgU0lzICovXFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgcGYtXFx1MDAzZXRvdGFsX3ZmcyArIDE7IGkrKylcXG4rXFx0XFx0ZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzYyhwZi1cXHUwMDNlc2ksIGksIHRydWUpO1xcbiBcXG4gXFx0LyogRGlzYWJsZSBTSSBNQUMgbXVsdGljYXN0IFxcdTAwMjYgdW5pY2FzdCBwcm9taXNjdW91cyAqL1xcbiBcXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJUE1NUiwgMCk7XFxuQEAgLTQ1MCwxOCArNDE4LDYwIEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9jb25maWd1cmVfcG9ydChzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxcbiBcXHRlbmV0Y19zZXRfZGVmYXVsdF9yc3Nfa2V5KHBmKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgZW5ldGM0X2dldF9udG1wX2NhcHMoc3RydWN0IGVuZXRjX3NpICpzaSlcXG4re1xcbitcXHRzdHJ1Y3QgbnRtcF91c2VyICp1c2VyID0gXFx1MDAyNnNpLVxcdTAwM2VudG1wX3VzZXI7XFxuK1xcdHN0cnVjdCBlbmV0Y19odyAqaHcgPSBcXHUwMDI2c2ktXFx1MDAzZWh3O1xcbitcXHR1MzIgdmFsO1xcbitcXG4rXFx0dmFsID0gZW5ldGNfcG9ydF9yZChodywgRU5FVEM0X1BTSU1BRkNBUFIpO1xcbitcXHR1c2VyLVxcdTAwM2VtYWZ0X251bV9lbnRyaWVzID0gRklFTERfR0VUKFBTSU1BRkNBUFJfTlVNX01BQ19BRlRFLCB2YWwpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGVuZXRjNF9udG1wX2JpdG1hcF9pbml0KHN0cnVjdCBudG1wX3VzZXIgKnVzZXIpXFxuK3tcXG4rXFx0dXNlci1cXHUwMDNlbWFmdF9laWRfYml0bWFwID0gYml0bWFwX3phbGxvYyh1c2VyLVxcdTAwM2VtYWZ0X251bV9lbnRyaWVzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCF1c2VyLVxcdTAwM2VtYWZ0X2VpZF9iaXRtYXApXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVuZXRjNF9udG1wX2JpdG1hcF9mcmVlKHN0cnVjdCBudG1wX3VzZXIgKnVzZXIpXFxuK3tcXG4rXFx0Yml0bWFwX2ZyZWUodXNlci1cXHUwMDNlbWFmdF9laWRfYml0bWFwKTtcXG4rXFx0dXNlci1cXHUwMDNlbWFmdF9laWRfYml0bWFwID0gTlVMTDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBlbmV0YzRfaW5pdF9udG1wX3VzZXIoc3RydWN0IGVuZXRjX3NpICpzaSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbnRtcF91c2VyICp1c2VyID0gXFx1MDAyNnNpLVxcdTAwM2VudG1wX3VzZXI7XFxuK1xcdGludCBlcnI7XFxuIFxcbiBcXHQvKiBGb3IgRU5FVEMgNC4xLCBhbGwgdGFibGUgdmVyc2lvbnMgYXJlIDAgKi9cXG4gXFx0bWVtc2V0KFxcdTAwMjZ1c2VyLVxcdTAwM2V0YmwsIDAsIHNpemVvZih1c2VyLVxcdTAwM2V0YmwpKTtcXG4gXFxuLVxcdHJldHVybiBlbmV0YzRfc2V0dXBfY2JkcihzaSk7XFxuK1xcdGVyciA9IGVuZXRjNF9zZXR1cF9jYmRyKHNpKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGVuZXRjNF9nZXRfbnRtcF9jYXBzKHNpKTtcXG4rXFx0ZXJyID0gZW5ldGM0X250bXBfYml0bWFwX2luaXQodXNlcik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gdGVhcmRvd25fY2JkcjtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rdGVhcmRvd25fY2JkcjpcXG4rXFx0ZW5ldGM0X3RlYXJkb3duX2NiZHIoc2kpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgZW5ldGM0X2ZyZWVfbnRtcF91c2VyKHN0cnVjdCBlbmV0Y19zaSAqc2kpXFxuIHtcXG4rXFx0ZW5ldGM0X250bXBfYml0bWFwX2ZyZWUoXFx1MDAyNnNpLVxcdTAwM2VudG1wX3VzZXIpO1xcbiBcXHRlbmV0YzRfdGVhcmRvd25fY2JkcihzaSk7XFxuIH1cXG4gXFxuQEAgLTQ3OSw3ICs0ODksNyBAQCBzdGF0aWMgaW50IGVuZXRjNF9wZl9pbml0KHN0cnVjdCBlbmV0Y19wZiAqcGYpXFxuIFxcbiBcXHRlcnIgPSBlbmV0YzRfaW5pdF9udG1wX3VzZXIocGYtXFx1MDAzZXNpKTtcXG4gXFx0aWYgKGVycikge1xcbi1cXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBpbml0IENCRFJcXFxcblxcXCIpO1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBpbml0IE5UTVAgdXNlclxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4gXFxuQEAgLTQ5MywxOCArNTAzLDE3IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wZl9mcmVlKHN0cnVjdCBlbmV0Y19wZiAqcGYpXFxuIFxcdGVuZXRjNF9mcmVlX250bXBfdXNlcihwZi1cXHUwMDNlc2kpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBlbmV0YzRfcHNpX2RvX3NldF9yeF9tb2RlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4rc3RhdGljIGludCBlbmV0YzRfcGZfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpXFxuIHtcXG4tXFx0c3RydWN0IGVuZXRjX3NpICpzaSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZW5ldGNfc2ksIHJ4X21vZGVfdGFzayk7XFxuLVxcdHN0cnVjdCBlbmV0Y19wZiAqcGYgPSBlbmV0Y19zaV9wcml2KHNpKTtcXG4tXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBzaS1cXHUwMDNlbmRldjtcXG4tXFx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFxcdTAwMjZzaS1cXHUwMDNlaHc7XFxuK1xcdHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0c3RydWN0IGVuZXRjX3BmICpwZiA9IGVuZXRjX3NpX3ByaXYocHJpdi1cXHUwMDNlc2kpO1xcbitcXHRzdHJ1Y3QgZW5ldGNfc2kgKnNpID0gcHJpdi1cXHUwMDNlc2k7XFxuIFxcdGJvb2wgdWNfcHJvbWlzYyA9IGZhbHNlO1xcbiBcXHRib29sIG1jX3Byb21pc2MgPSBmYWxzZTtcXG4gXFx0aW50IHR5cGUgPSAwO1xcbiBcXG4tXFx0cnRubF9sb2NrKCk7XFxuLVxcbiBcXHRpZiAobmRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfUFJPTUlTQykge1xcbiBcXHRcXHR1Y19wcm9taXNjID0gdHJ1ZTtcXG4gXFx0XFx0bWNfcHJvbWlzYyA9IHRydWU7XFxuQEAgLTUxNSwyOCArNTI0LDIxIEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wc2lfZG9fc2V0X3J4X21vZGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRcXHR0eXBlID0gRU5FVENfTUFDX0ZJTFRFUl9UWVBFX0FMTDtcXG4gXFx0fVxcbiBcXG4tXFx0ZW5ldGM0X3BmX3NldF9zaV9tYWNfcHJvbWlzYyhodywgMCwgdWNfcHJvbWlzYywgbWNfcHJvbWlzYyk7XFxuK1xcdGVuZXRjX3NldF9zaV91Y19wcm9taXNjKHNpLCAwLCB1Y19wcm9taXNjKTtcXG4rXFx0ZW5ldGNfc2V0X3NpX21jX3Byb21pc2Moc2ksIDAsIG1jX3Byb21pc2MpO1xcbiBcXG4gXFx0aWYgKHVjX3Byb21pc2MpIHtcXG4tXFx0XFx0ZW5ldGM0X3BmX3NldF9zaV91Y19oYXNoX2ZpbHRlcihodywgMCwgMCk7XFxuK1xcdFxcdGVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcihzaSwgMCwgMCk7XFxuIFxcdFxcdGVuZXRjNF9wZl9jbGVhcl9tYWZ0X2VudHJpZXMocGYpO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAobWNfcHJvbWlzYylcXG4tXFx0XFx0ZW5ldGM0X3BmX3NldF9zaV9tY19oYXNoX2ZpbHRlcihodywgMCwgMCk7XFxuK1xcdFxcdGVuZXRjX3NldF9zaV9tY19oYXNoX2ZpbHRlcihzaSwgMCwgMCk7XFxuIFxcbiBcXHQvKiBTZXQgbmV3IE1BQyBmaWx0ZXIgKi9cXG4tXFx0ZW5ldGM0X3BmX3NldF9tYWNfZmlsdGVyKHBmLCB0eXBlKTtcXG4rXFx0ZW5ldGM0X3BmX3NldF9tYWNfZmlsdGVyKHBmLCB0eXBlLCB1YywgbWMpO1xcbiBcXG4tXFx0cnRubF91bmxvY2soKTtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi17XFxuLVxcdHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4tXFx0c3RydWN0IGVuZXRjX3NpICpzaSA9IHByaXYtXFx1MDAzZXNpO1xcbi1cXG4tXFx0cXVldWVfd29yayhzaS1cXHUwMDNld29ya3F1ZXVlLCBcXHUwMDI2c2ktXFx1MDAzZXJ4X21vZGVfdGFzayk7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGVuZXRjNF9wZl9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuQEAgLTU0NCwxMiArNTQ2LDExIEBAIHN0YXRpYyBpbnQgZW5ldGM0X3BmX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4ge1xcbiBcXHRuZXRkZXZfZmVhdHVyZXNfdCBjaGFuZ2VkID0gbmRldi1cXHUwMDNlZmVhdHVyZXMgXiBmZWF0dXJlcztcXG4gXFx0c3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbi1cXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXFx1MDAyNnByaXYtXFx1MDAzZXNpLVxcdTAwM2VodztcXG4gXFxuIFxcdGlmIChjaGFuZ2VkIFxcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSB7XFxuIFxcdFxcdGJvb2wgcHJvbWlzY19lbiA9ICEoZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpO1xcbiBcXG4tXFx0XFx0ZW5ldGM0X3BmX3NldF9zaV92bGFuX3Byb21pc2MoaHcsIDAsIHByb21pc2NfZW4pO1xcbitcXHRcXHRlbmV0Y19zZXRfc2lfdmxhbl9wcm9taXNjKHByaXYtXFx1MDAzZXNpLCAwLCBwcm9taXNjX2VuKTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGNoYW5nZWQgXFx1MDAyNiBORVRJRl9GX0xPT1BCQUNLKVxcbkBAIC01NjYsNyArNTY3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlbmV0YzRfbmRldl9vcHMgPSB7XFxuIFxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gZW5ldGNfeG1pdCxcXG4gXFx0Lm5kb19nZXRfc3RhdHNcXHRcXHQ9IGVuZXRjX2dldF9zdGF0cyxcXG4gXFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcXHQ9IGVuZXRjX3BmX3NldF9tYWNfYWRkcixcXG4tXFx0Lm5kb19zZXRfcnhfbW9kZVxcdD0gZW5ldGM0X3BmX3NldF9yeF9tb2RlLFxcbitcXHQubmRvX3NldF9yeF9tb2RlX2FzeW5jXFx0PSBlbmV0YzRfcGZfc2V0X3J4X21vZGUsXFxuIFxcdC5uZG9fc2V0X2ZlYXR1cmVzXFx0PSBlbmV0YzRfcGZfc2V0X2ZlYXR1cmVzLFxcbiBcXHQubmRvX3ZsYW5fcnhfYWRkX3ZpZFxcdD0gZW5ldGNfdmxhbl9yeF9hZGRfdmlkLFxcbiBcXHQubmRvX3ZsYW5fcnhfa2lsbF92aWRcXHQ9IGVuZXRjX3ZsYW5fcnhfZGVsX3ZpZCxcXG5AQCAtNjAyLDExICs2MDMsNiBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfbWFjX2NvbmZpZyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLCB1bnNpZ25lZCBpbnQgbW9kZSxcXG4gXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfUlhJRDpcXG4gXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfVFhJRDpcXG4gXFx0XFx0dmFsIHw9IElGTU9ERV9SR01JSTtcXG4tXFx0XFx0LyogV2UgbmVlZCB0byBlbmFibGUgYXV0by1uZWdvdGlhdGlvbiBmb3IgdGhlIE1BQ1xcbi1cXHRcXHQgKiBpZiBpdHMgUkdNSUkgaW50ZXJmYWNlIHN1cHBvcnQgSW4tQmFuZCBzdGF0dXMuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAocGh5bGlua19hdXRvbmVnX2luYmFuZChtb2RlKSlcXG4tXFx0XFx0XFx0dmFsIHw9IFBNX0lGX01PREVfRU5BO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUk1JSTpcXG4gXFx0XFx0dmFsIHw9IElGTU9ERV9STUlJO1xcbkBAIC02MTYsNyArNjEyLDYgQEAgc3RhdGljIHZvaWQgZW5ldGM0X21hY19jb25maWcoc3RydWN0IGVuZXRjX3BmICpwZiwgdW5zaWduZWQgaW50IG1vZGUsXFxuIFxcdFxcdHZhbCB8PSBJRk1PREVfU0dNSUk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUjpcXG4tXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfWEdNSUk6XFxuIFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk6XFxuIFxcdFxcdHZhbCB8PSBJRk1PREVfWEdNSUk7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC02NDIsMjYgKzYzNywxOSBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfc2V0X3BvcnRfc3BlZWQoc3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdiwgaW50IHNwZWVkKVxcbiBcXHR1MzIgb2xkX3NwZWVkID0gcHJpdi1cXHUwMDNlc3BlZWQ7XFxuIFxcdHUzMiB2YWw7XFxuIFxcbitcXHQvKiBJZiB0aGUgc3BlZWQgaXMgdW5rbm93biwgdXNlIHRoZSBtaW5pbXVtIHZhbHVlICovXFxuK1xcdGlmIChzcGVlZCA9PSBTUEVFRF9VTktOT1dOKSB7XFxuK1xcdFxcdHNwZWVkID0gU1BFRURfMTA7XFxuK1xcdFxcdGRldl93YXJuKHByaXYtXFx1MDAzZWRldiwgXFxcIlNwZWVkIHVua25vd24sIGRlZmF1bHQgaXMgMTBNYnBzXFxcXG5cXFwiKTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHNwZWVkID09IG9sZF9zcGVlZClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0dmFsID0gZW5ldGNfcG9ydF9yZChcXHUwMDI2cHJpdi1cXHUwMDNlc2ktXFx1MDAzZWh3LCBFTkVUQzRfUENSKTtcXG4tXFx0dmFsIFxcdTAwMjY9IH5QQ1JfUFNQRUVEO1xcbi1cXG4tXFx0c3dpdGNoIChzcGVlZCkge1xcbi1cXHRjYXNlIFNQRUVEXzEwMDpcXG4tXFx0Y2FzZSBTUEVFRF8xMDAwOlxcbi1cXHRjYXNlIFNQRUVEXzI1MDA6XFxuLVxcdGNhc2UgU1BFRURfMTAwMDA6XFxuLVxcdFxcdHZhbCB8PSAoUENSX1BTUEVFRCBcXHUwMDI2IFBDUl9QU1BFRURfVkFMKHNwZWVkKSk7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIFNQRUVEXzEwOlxcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHR2YWwgfD0gKFBDUl9QU1BFRUQgXFx1MDAyNiBQQ1JfUFNQRUVEX1ZBTChTUEVFRF8xMCkpO1xcbi1cXHR9XFxuLVxcbi1cXHRwcml2LVxcdTAwM2VzcGVlZCA9IHNwZWVkO1xcbitcXHR2YWwgPSBlbmV0Y19wb3J0X3JkKFxcdTAwMjZwcml2LVxcdTAwM2VzaS1cXHUwMDNlaHcsIEVORVRDNF9QQ1IpIFxcdTAwMjYgKH5QQ1JfUFNQRUVEKTtcXG4rXFx0dmFsIHw9IFBDUl9QU1BFRURfVkFMKHNwZWVkKTtcXG4gXFx0ZW5ldGNfcG9ydF93cihcXHUwMDI2cHJpdi1cXHUwMDNlc2ktXFx1MDAzZWh3LCBFTkVUQzRfUENSLCB2YWwpO1xcbitcXHRwcml2LVxcdTAwM2VzcGVlZCA9IHNwZWVkO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBlbmV0YzRfc2V0X3JnbWlpX21hYyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBpbnQgc3BlZWQsIGludCBkdXBsZXgpXFxuQEAgLTcxNywyMiArNzA1LDYgQEAgc3RhdGljIHZvaWQgZW5ldGM0X3NldF9ybWlpX21hYyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBpbnQgc3BlZWQsIGludCBkdXBsZXgpXFxuIFxcdGVuZXRjX3BvcnRfbWFjX3dyKHNpLCBFTkVUQzRfUE1fSUZfTU9ERSgwKSwgdmFsKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgZW5ldGM0X3NldF9oZF9mbG93X2NvbnRyb2woc3RydWN0IGVuZXRjX3BmICpwZiwgYm9vbCBlbmFibGUpXFxuLXtcXG4tXFx0c3RydWN0IGVuZXRjX3NpICpzaSA9IHBmLVxcdTAwM2VzaTtcXG4tXFx0dTMyIG9sZF92YWwsIHZhbDtcXG4tXFxuLVxcdGlmICghcGYtXFx1MDAzZWNhcHMuaGFsZl9kdXBsZXgpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdG9sZF92YWwgPSBlbmV0Y19wb3J0X21hY19yZChzaSwgRU5FVEM0X1BNX0NNRF9DRkcoMCkpO1xcbi1cXHR2YWwgPSB1MzJfcmVwbGFjZV9iaXRzKG9sZF92YWwsIGVuYWJsZSA/IDEgOiAwLCBQTV9DTURfQ0ZHX0hEX0ZDRU4pO1xcbi1cXHRpZiAodmFsID09IG9sZF92YWwpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdGVuZXRjX3BvcnRfbWFjX3dyKHNpLCBFTkVUQzRfUE1fQ01EX0NGRygwKSwgdmFsKTtcXG4tfVxcbi1cXG4gc3RhdGljIHZvaWQgZW5ldGM0X3NldF9yeF9wYXVzZShzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBib29sIHJ4X3BhdXNlKVxcbiB7XFxuIFxcdHN0cnVjdCBlbmV0Y19zaSAqc2kgPSBwZi1cXHUwMDNlc2k7XFxuQEAgLTkwOCwxMyArODgwLDExIEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wbF9tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG4gXFx0c3RydWN0IGVuZXRjX3BmICpwZiA9IHBoeWxpbmtfdG9fZW5ldGNfcGYoY29uZmlnKTtcXG4gXFx0c3RydWN0IGVuZXRjX3NpICpzaSA9IHBmLVxcdTAwM2VzaTtcXG4gXFx0c3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdjtcXG4tXFx0Ym9vbCBoZF9mYyA9IGZhbHNlO1xcbiBcXG4gXFx0cHJpdiA9IG5ldGRldl9wcml2KHNpLVxcdTAwM2VuZGV2KTtcXG4gXFx0ZW5ldGM0X3NldF9wb3J0X3NwZWVkKHByaXYsIHNwZWVkKTtcXG4gXFxuLVxcdGlmICghcGh5bGlua19hdXRvbmVnX2luYmFuZChtb2RlKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgcGh5X2ludGVyZmFjZV9tb2RlX2lzX3JnbWlpKGludGVyZmFjZSkpXFxuK1xcdGlmIChwaHlfaW50ZXJmYWNlX21vZGVfaXNfcmdtaWkoaW50ZXJmYWNlKSlcXG4gXFx0XFx0ZW5ldGM0X3NldF9yZ21paV9tYWMocGYsIHNwZWVkLCBkdXBsZXgpO1xcbiBcXG4gXFx0aWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcXG5AQCAtOTI2LDE4ICs4OTYsOCBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfcGxfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAocHJpdi1cXHUwMDNlYWN0aXZlX29mZmxvYWRzIFxcdTAwMjYgRU5FVENfRl9RQlUpXFxuIFxcdFxcdFxcdHR4X3BhdXNlID0gZmFsc2U7XFxuLVxcdH0gZWxzZSB7IC8qIERVUExFWF9IQUxGICovXFxuLVxcdFxcdGlmICh0eF9wYXVzZSB8fCByeF9wYXVzZSlcXG4tXFx0XFx0XFx0aGRfZmMgPSB0cnVlO1xcbi1cXG4tXFx0XFx0LyogQXMgcGVyIDgwMi4zIGFubmV4IDMxQiwgUEFVU0UgZnJhbWVzIGFyZSBvbmx5IHN1cHBvcnRlZFxcbi1cXHRcXHQgKiB3aGVuIHRoZSBsaW5rIGlzIGNvbmZpZ3VyZWQgZm9yIGZ1bGwgZHVwbGV4IG9wZXJhdGlvbi5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdHR4X3BhdXNlID0gZmFsc2U7XFxuLVxcdFxcdHJ4X3BhdXNlID0gZmFsc2U7XFxuIFxcdH1cXG4gXFxuLVxcdGVuZXRjNF9zZXRfaGRfZmxvd19jb250cm9sKHBmLCBoZF9mYyk7XFxuIFxcdGVuZXRjNF9zZXRfdHhfcGF1c2UocGYsIHByaXYtXFx1MDAzZW51bV9yeF9yaW5ncywgdHhfcGF1c2UpO1xcbiBcXHRlbmV0YzRfc2V0X3J4X3BhdXNlKHBmLCByeF9wYXVzZSk7XFxuIFxcdGVuZXRjNF9tYWNfdHhfZW5hYmxlKHBmKTtcXG5AQCAtMTAwOSwxOSArOTY5LDYgQEAgc3RhdGljIHZvaWQgZW5ldGM0X2xpbmtfZGVpbml0KHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYpXFxuIFxcdGVuZXRjX21kaW9idXNfZGVzdHJveShwZik7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgZW5ldGM0X3BzaV93cV90YXNrX2luaXQoc3RydWN0IGVuZXRjX3NpICpzaSlcXG4te1xcbi1cXHRjaGFyIHdxX25hbWVbMjRdO1xcbi1cXG4tXFx0SU5JVF9XT1JLKFxcdTAwMjZzaS1cXHUwMDNlcnhfbW9kZV90YXNrLCBlbmV0YzRfcHNpX2RvX3NldF9yeF9tb2RlKTtcXG4tXFx0c25wcmludGYod3FfbmFtZSwgc2l6ZW9mKHdxX25hbWUpLCBcXFwiZW5ldGMtJXNcXFwiLCBwY2lfbmFtZShzaS1cXHUwMDNlcGRldikpO1xcbi1cXHRzaS1cXHUwMDNld29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUod3FfbmFtZSk7XFxuLVxcdGlmICghc2ktXFx1MDAzZXdvcmtxdWV1ZSlcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBlbmV0YzRfcGZfbmV0ZGV2X2NyZWF0ZShzdHJ1Y3QgZW5ldGNfc2kgKnNpKVxcbiB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZzaS1cXHUwMDNlcGRldi1cXHUwMDNlZGV2O1xcbkBAIC0xMDYyLDEyICsxMDA5LDYgQEAgc3RhdGljIGludCBlbmV0YzRfcGZfbmV0ZGV2X2NyZWF0ZShzdHJ1Y3QgZW5ldGNfc2kgKnNpKVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGVycl9saW5rX2luaXQ7XFxuIFxcbi1cXHRlcnIgPSBlbmV0YzRfcHNpX3dxX3Rhc2tfaW5pdChzaSk7XFxuLVxcdGlmIChlcnIpIHtcXG4tXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgdG8gaW5pdCB3b3JrcXVldWVcXFxcblxcXCIpO1xcbi1cXHRcXHRnb3RvIGVycl93cV9pbml0O1xcbi1cXHR9XFxuLVxcbiBcXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIgbmV0ZGV2XFxcXG5cXFwiKTtcXG5AQCAtMTA3Nyw4ICsxMDE4LDYgQEAgc3RhdGljIGludCBlbmV0YzRfcGZfbmV0ZGV2X2NyZWF0ZShzdHJ1Y3QgZW5ldGNfc2kgKnNpKVxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIGVycl9yZWdfbmV0ZGV2Olxcbi1cXHRkZXN0cm95X3dvcmtxdWV1ZShzaS1cXHUwMDNld29ya3F1ZXVlKTtcXG4tZXJyX3dxX2luaXQ6XFxuIFxcdGVuZXRjNF9saW5rX2RlaW5pdChwcml2KTtcXG4gZXJyX2xpbmtfaW5pdDpcXG4gXFx0ZW5ldGNfZnJlZV9tc2l4KHByaXYpO1xcbkBAIC0xMDk2LDggKzEwMzUsNiBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfcGZfbmV0ZGV2X2Rlc3Ryb3koc3RydWN0IGVuZXRjX3NpICpzaSlcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBzaS1cXHUwMDNlbmRldjtcXG4gXFxuIFxcdHVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xcbi1cXHRjYW5jZWxfd29yayhcXHUwMDI2c2ktXFx1MDAzZXJ4X21vZGVfdGFzayk7XFxuLVxcdGRlc3Ryb3lfd29ya3F1ZXVlKHNpLVxcdTAwM2V3b3JrcXVldWUpO1xcbiBcXHRlbmV0YzRfbGlua19kZWluaXQocHJpdik7XFxuIFxcdGVuZXRjX2ZyZWVfbXNpeChwcml2KTtcXG4gXFx0ZnJlZV9uZXRkZXYobmRldik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfZXRodG9vbC5jXFxuaW5kZXggNzFmMzc2ZWYxYmUxYzkuLjA3Yjc4MzJmMjQyNzZhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ldGh0b29sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfZXRodG9vbC5jXFxuQEAgLTI5LDcgKzI5LDcgQEAgc3RhdGljIGNvbnN0IHUzMiBlbmV0Y19yeGJkcl9yZWdzW10gPSB7XFxuIH07XFxuIFxcbiBzdGF0aWMgY29uc3QgdTMyIGVuZXRjX3BvcnRfcmVnc1tdID0ge1xcbi1cXHRFTkVUQ19QTVIsIEVORVRDX1BTUiwgRU5FVENfUFNJUE1SLCBFTkVUQ19QU0lQTUFSMCgwKSxcXG4rXFx0RU5FVENfUE1SLCBFTkVUQ19QU1IsIEVORVRDX1BTSVBNTVIsIEVORVRDX1BTSVBNQVIwKDApLFxcbiBcXHRFTkVUQ19QU0lQTUFSMSgwKSwgRU5FVENfUFRYTUJBUiwgRU5FVENfUENBUFIwLCBFTkVUQ19QQ0FQUjEsXFxuIFxcdEVORVRDX1BTSUNGR1IwKDApLCBFTkVUQ19QUkZTQ0FQUiwgRU5FVENfUFRDTVNEVVIoMCksXFxuIFxcdEVORVRDX1BNMF9DTURfQ0ZHLCBFTkVUQ19QTTBfTUFYRlJNLCBFTkVUQ19QTTBfSUZfTU9ERVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfaHcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ody5oXFxuaW5kZXggYmY5OWI2NWQ3NTk4YWIuLjE2ZGE3MzJkYzVkZTgyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ody5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX2h3LmhcXG5AQCAtMTgwLDEzICsxODAsMTMgQEAgZW51bSBlbmV0Y19iZHJfdHlwZSB7VFgsIFJYfTtcXG4gI2RlZmluZSBFTkVUQ19QTVJfUFNQRUVEXzEwMDBNXFx0QklUKDkpXFxuICNkZWZpbmUgRU5FVENfUE1SX1BTUEVFRF8yNTAwTVxcdEJJVCgxMClcXG4gI2RlZmluZSBFTkVUQ19QU1JcXHRcXHQweDAwMDQgLyogUk8gKi9cXG4tI2RlZmluZSBFTkVUQ19QU0lQTVJcXHRcXHQweDAwMThcXG4tI2RlZmluZSBFTkVUQ19QU0lQTVJfU0VUX1VQKG4pXFx0QklUKG4pIC8qIG4gPSBTSSBpbmRleCAqL1xcbi0jZGVmaW5lIEVORVRDX1BTSVBNUl9TRVRfTVAobilcXHRCSVQoKG4pICsgMTYpXFxuKyNkZWZpbmUgRU5FVENfUFNJUE1NUlxcdFxcdDB4MDAxOFxcbisjZGVmaW5lICBQU0lQTU1SX1NJX01BQ19VUChuKVxcdEJJVChuKSAvKiBuID0gU0kgaW5kZXggKi9cXG4rI2RlZmluZSAgUFNJUE1NUl9TSV9NQUNfTVAobilcXHRCSVQoKG4pICsgMTYpXFxuK1xcbiAjZGVmaW5lIEVORVRDX1BTSVBWTVJcXHRcXHQweDAwMWNcXG4tI2RlZmluZSBFTkVUQ19WTEFOX1BST01JU0NfTUFQX0FMTFxcdDB4N1xcbi0jZGVmaW5lIEVORVRDX1BTSVBWTVJfU0VUX1ZQKHNpbWFwKVxcdCgoc2ltYXApIFxcdTAwMjYgMHg3KVxcbi0jZGVmaW5lIEVORVRDX1BTSVBWTVJfU0VUX1ZVVEEoc2ltYXApXFx0KCgoc2ltYXApIFxcdTAwMjYgMHg3KSBcXHUwMDNjXFx1MDAzYyAxNilcXG4rI2RlZmluZSAgUFNJUFZNUl9TSV9WTEFOX1AobilcXHRCSVQobikgLyogbiA9IFNJIGluZGV4ICovXFxuK1xcbiAjZGVmaW5lIEVORVRDX1BTSVBNQVIwKG4pXFx0KDB4MDEwMCArIChuKSAqIDB4OCkgLyogbiA9IFNJIGluZGV4ICovXFxuICNkZWZpbmUgRU5FVENfUFNJUE1BUjEobilcXHQoMHgwMTA0ICsgKG4pICogMHg4KVxcbiAjZGVmaW5lIEVORVRDX1BWQ0xDVFJcXHRcXHQweDAyMDhcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuY1xcbmluZGV4IDJkNjg3YmI4YzNhMDYzLi5hNTA5OTI5Zjg5ZjI1ZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jXFxuQEAgLTQyLDI2ICs0Miw2IEBAIHN0YXRpYyB2b2lkIGVuZXRjX3BmX2Rlc3Ryb3lfcGNzKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKVxcbiBcXHRseW54X3Bjc19kZXN0cm95KHBjcyk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGVuZXRjX3NldF92bGFuX3Byb21pc2Moc3RydWN0IGVuZXRjX2h3ICpodywgY2hhciBzaV9tYXApXFxuLXtcXG4tXFx0dTMyIHZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDX1BTSVBWTVIpO1xcbi1cXG4tXFx0dmFsIFxcdTAwMjY9IH5FTkVUQ19QU0lQVk1SX1NFVF9WUChFTkVUQ19WTEFOX1BST01JU0NfTUFQX0FMTCk7XFxuLVxcdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDX1BTSVBWTVIsIEVORVRDX1BTSVBWTVJfU0VUX1ZQKHNpX21hcCkgfCB2YWwpO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBlbmV0Y19lbmFibGVfc2lfdmxhbl9wcm9taXNjKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGludCBzaV9pZHgpXFxuLXtcXG4tXFx0cGYtXFx1MDAzZXZsYW5fcHJvbWlzY19zaW1hcCB8PSBCSVQoc2lfaWR4KTtcXG4tXFx0ZW5ldGNfc2V0X3ZsYW5fcHJvbWlzYyhcXHUwMDI2cGYtXFx1MDAzZXNpLVxcdTAwM2VodywgcGYtXFx1MDAzZXZsYW5fcHJvbWlzY19zaW1hcCk7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIGVuZXRjX2Rpc2FibGVfc2lfdmxhbl9wcm9taXNjKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGludCBzaV9pZHgpXFxuLXtcXG4tXFx0cGYtXFx1MDAzZXZsYW5fcHJvbWlzY19zaW1hcCBcXHUwMDI2PSB+QklUKHNpX2lkeCk7XFxuLVxcdGVuZXRjX3NldF92bGFuX3Byb21pc2MoXFx1MDAyNnBmLVxcdTAwM2VzaS1cXHUwMDNlaHcsIHBmLVxcdTAwM2V2bGFuX3Byb21pc2Nfc2ltYXApO1xcbi19XFxuLVxcbiBzdGF0aWMgdm9pZCBlbmV0Y19zZXRfaXNvbF92bGFuKHN0cnVjdCBlbmV0Y19odyAqaHcsIGludCBzaSwgdTE2IHZsYW4sIHU4IHFvcylcXG4ge1xcbiBcXHR1MzIgdmFsID0gMDtcXG5AQCAtODAsMzcgKzYwLDYgQEAgc3RhdGljIHZvaWQgZW5ldGNfYWRkX21hY19hZGRyX2VtX2ZpbHRlcihzdHJ1Y3QgZW5ldGNfbWFjX2ZpbHRlciAqZmlsdGVyLFxcbiBcXHRmaWx0ZXItXFx1MDAzZW1hY19hZGRyX2NudCsrO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBlbmV0Y19jbGVhcl9tYWNfaHRfZmx0KHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZHgsIGludCB0eXBlKVxcbi17XFxuLVxcdGJvb2wgZXJyID0gc2ktXFx1MDAzZWVycmF0YSBcXHUwMDI2IEVORVRDX0VSUl9VQ01DU1dQO1xcbi1cXG4tXFx0aWYgKHR5cGUgPT0gVUMpIHtcXG4tXFx0XFx0ZW5ldGNfcG9ydF93cihcXHUwMDI2c2ktXFx1MDAzZWh3LCBFTkVUQ19QU0lVTUhGUjAoc2lfaWR4LCBlcnIpLCAwKTtcXG4tXFx0XFx0ZW5ldGNfcG9ydF93cihcXHUwMDI2c2ktXFx1MDAzZWh3LCBFTkVUQ19QU0lVTUhGUjEoc2lfaWR4KSwgMCk7XFxuLVxcdH0gZWxzZSB7IC8qIE1DICovXFxuLVxcdFxcdGVuZXRjX3BvcnRfd3IoXFx1MDAyNnNpLVxcdTAwM2VodywgRU5FVENfUFNJTU1IRlIwKHNpX2lkeCwgZXJyKSwgMCk7XFxuLVxcdFxcdGVuZXRjX3BvcnRfd3IoXFx1MDAyNnNpLVxcdTAwM2VodywgRU5FVENfUFNJTU1IRlIxKHNpX2lkeCksIDApO1xcbi1cXHR9XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIGVuZXRjX3NldF9tYWNfaHRfZmx0KHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZHgsIGludCB0eXBlLFxcbi1cXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBoYXNoKVxcbi17XFxuLVxcdGJvb2wgZXJyID0gc2ktXFx1MDAzZWVycmF0YSBcXHUwMDI2IEVORVRDX0VSUl9VQ01DU1dQO1xcbi1cXG4tXFx0aWYgKHR5cGUgPT0gVUMpIHtcXG4tXFx0XFx0ZW5ldGNfcG9ydF93cihcXHUwMDI2c2ktXFx1MDAzZWh3LCBFTkVUQ19QU0lVTUhGUjAoc2lfaWR4LCBlcnIpLFxcbi1cXHRcXHRcXHQgICAgICBsb3dlcl8zMl9iaXRzKGhhc2gpKTtcXG4tXFx0XFx0ZW5ldGNfcG9ydF93cihcXHUwMDI2c2ktXFx1MDAzZWh3LCBFTkVUQ19QU0lVTUhGUjEoc2lfaWR4KSxcXG4tXFx0XFx0XFx0ICAgICAgdXBwZXJfMzJfYml0cyhoYXNoKSk7XFxuLVxcdH0gZWxzZSB7IC8qIE1DICovXFxuLVxcdFxcdGVuZXRjX3BvcnRfd3IoXFx1MDAyNnNpLVxcdTAwM2VodywgRU5FVENfUFNJTU1IRlIwKHNpX2lkeCwgZXJyKSxcXG4tXFx0XFx0XFx0ICAgICAgbG93ZXJfMzJfYml0cyhoYXNoKSk7XFxuLVxcdFxcdGVuZXRjX3BvcnRfd3IoXFx1MDAyNnNpLVxcdTAwM2VodywgRU5FVENfUFNJTU1IRlIxKHNpX2lkeCksXFxuLVxcdFxcdFxcdCAgICAgIHVwcGVyXzMyX2JpdHMoaGFzaCkpO1xcbi1cXHR9XFxuLX1cXG4tXFxuIHN0YXRpYyB2b2lkIGVuZXRjX3N5bmNfbWFjX2ZpbHRlcnMoc3RydWN0IGVuZXRjX3BmICpwZilcXG4ge1xcbiBcXHRzdHJ1Y3QgZW5ldGNfbWFjX2ZpbHRlciAqZiA9IHBmLVxcdTAwM2VtYWNfZmlsdGVyO1xcbkBAIC0xMjIsMTIgKzcxLDE2IEBAIHN0YXRpYyB2b2lkIGVuZXRjX3N5bmNfbWFjX2ZpbHRlcnMoc3RydWN0IGVuZXRjX3BmICpwZilcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1BRERSX1RZUEU7IGkrKywgZisrKSB7XFxuIFxcdFxcdGJvb2wgZW0gPSAoZi1cXHUwMDNlbWFjX2FkZHJfY250ID09IDEpIFxcdTAwMjZcXHUwMDI2IChpID09IFVDKTtcXG4gXFx0XFx0Ym9vbCBjbGVhciA9ICFmLVxcdTAwM2VtYWNfYWRkcl9jbnQ7XFxuK1xcdFxcdHU2NCBoYXNoO1xcbiBcXG4gXFx0XFx0aWYgKGNsZWFyKSB7XFxuLVxcdFxcdFxcdGlmIChpID09IFVDKVxcbitcXHRcXHRcXHRpZiAoaSA9PSBVQykge1xcbiBcXHRcXHRcXHRcXHRlbmV0Y19jbGVhcl9tYWNfZmx0X2VudHJ5KHNpLCBwb3MpO1xcbitcXHRcXHRcXHRcXHRlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc2ksIDAsIDApO1xcbitcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHRlbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXIoc2ksIDAsIDApO1xcbitcXHRcXHRcXHR9XFxuIFxcbi1cXHRcXHRcXHRlbmV0Y19jbGVhcl9tYWNfaHRfZmx0KHNpLCAwLCBpKTtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTEzNSw3ICs4OCw3IEBAIHN0YXRpYyB2b2lkIGVuZXRjX3N5bmNfbWFjX2ZpbHRlcnMoc3RydWN0IGVuZXRjX3BmICpwZilcXG4gXFx0XFx0aWYgKGVtKSB7XFxuIFxcdFxcdFxcdGludCBlcnI7XFxuIFxcbi1cXHRcXHRcXHRlbmV0Y19jbGVhcl9tYWNfaHRfZmx0KHNpLCAwLCBVQyk7XFxuK1xcdFxcdFxcdGVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcihzaSwgMCwgMCk7XFxuIFxcbiBcXHRcXHRcXHRlcnIgPSBlbmV0Y19zZXRfbWFjX2ZsdF9lbnRyeShzaSwgcG9zLCBmLVxcdTAwM2VtYWNfYWRkcixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgQklUKDApKTtcXG5AQCAtMTQ3LDExICsxMDAsMTUgQEAgc3RhdGljIHZvaWQgZW5ldGNfc3luY19tYWNfZmlsdGVycyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxcbiBcXHRcXHRcXHRcXHQgZXJyKTtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0Yml0bWFwX3RvX2FycjY0KFxcdTAwMjZoYXNoLCBmLVxcdTAwM2VtYWNfaGFzaF90YWJsZSxcXG4rXFx0XFx0XFx0XFx0RU5FVENfTUFERFJfSEFTSF9UQkxfU1opO1xcbiBcXHRcXHQvKiBoYXNoIHRhYmxlIGZpbHRlciwgY2xlYXIgRU0gZmlsdGVyIGZvciBVQyBlbnRyaWVzICovXFxuLVxcdFxcdGlmIChpID09IFVDKVxcbitcXHRcXHRpZiAoaSA9PSBVQykge1xcbiBcXHRcXHRcXHRlbmV0Y19jbGVhcl9tYWNfZmx0X2VudHJ5KHNpLCBwb3MpO1xcbi1cXG4tXFx0XFx0ZW5ldGNfc2V0X21hY19odF9mbHQoc2ksIDAsIGksICpmLVxcdTAwM2VtYWNfaGFzaF90YWJsZSk7XFxuK1xcdFxcdFxcdGVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcihzaSwgMCwgaGFzaCk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGVuZXRjX3NldF9zaV9tY19oYXNoX2ZpbHRlcihzaSwgMCwgaGFzaCk7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0xNTksMjEgKzExNiwxNyBAQCBzdGF0aWMgdm9pZCBlbmV0Y19wZl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcdHN0cnVjdCBlbmV0Y19wZiAqcGYgPSBlbmV0Y19zaV9wcml2KHByaXYtXFx1MDAzZXNpKTtcXG4tXFx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFxcdTAwMjZwcml2LVxcdTAwM2VzaS1cXHUwMDNlaHc7XFxuIFxcdGJvb2wgdXByb20gPSBmYWxzZSwgbXByb20gPSBmYWxzZTtcXG4gXFx0c3RydWN0IGVuZXRjX21hY19maWx0ZXIgKmZpbHRlcjtcXG4gXFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcXG4tXFx0dTMyIHBzaXBtciA9IDA7XFxuIFxcdGJvb2wgZW07XFxuIFxcbiBcXHRpZiAobmRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfUFJPTUlTQykge1xcbiBcXHRcXHQvKiBlbmFibGUgcHJvbWlzYyBtb2RlIGZvciBTSTAgKFBGKSAqL1xcbi1cXHRcXHRwc2lwbXIgPSBFTkVUQ19QU0lQTVJfU0VUX1VQKDApIHwgRU5FVENfUFNJUE1SX1NFVF9NUCgwKTtcXG4gXFx0XFx0dXByb20gPSB0cnVlO1xcbiBcXHRcXHRtcHJvbSA9IHRydWU7XFxuIFxcdH0gZWxzZSBpZiAobmRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfQUxMTVVMVEkpIHtcXG4gXFx0XFx0LyogZW5hYmxlIG11bHRpIGNhc3QgcHJvbWlzYyBtb2RlIGZvciBTSTAgKFBGKSAqL1xcbi1cXHRcXHRwc2lwbXIgPSBFTkVUQ19QU0lQTVJfU0VUX01QKDApO1xcbiBcXHRcXHRtcHJvbSA9IHRydWU7XFxuIFxcdH1cXG4gXFxuQEAgLTIxMSw5ICsxNjQsOCBAQCBzdGF0aWMgdm9pZCBlbmV0Y19wZl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0XFx0LyogdXBkYXRlIFBGIGVudHJpZXMgKi9cXG4gXFx0XFx0ZW5ldGNfc3luY19tYWNfZmlsdGVycyhwZik7XFxuIFxcbi1cXHRwc2lwbXIgfD0gZW5ldGNfcG9ydF9yZChodywgRU5FVENfUFNJUE1SKSBcXHUwMDI2XFxuLVxcdFxcdCAgfihFTkVUQ19QU0lQTVJfU0VUX1VQKDApIHwgRU5FVENfUFNJUE1SX1NFVF9NUCgwKSk7XFxuLVxcdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDX1BTSVBNUiwgcHNpcG1yKTtcXG4rXFx0ZW5ldGNfc2V0X3NpX3VjX3Byb21pc2MocHJpdi1cXHUwMDNlc2ksIDAsIHVwcm9tKTtcXG4rXFx0ZW5ldGNfc2V0X3NpX21jX3Byb21pc2MocHJpdi1cXHUwMDNlc2ksIDAsIG1wcm9tKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgZW5ldGNfc2V0X2xvb3BiYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBib29sIGVuKVxcbkBAIC00NjksMTIgKzQyMSwxMSBAQCBzdGF0aWMgdm9pZCBlbmV0Y19jb25maWd1cmVfcG9ydChzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxcbiBcXG4gXFx0Lyogc3BsaXQgdXAgUkZTIGVudHJpZXMgKi9cXG4gXFx0ZW5ldGNfcG9ydF9hc3NpZ25fcmZzX2VudHJpZXMocGYtXFx1MDAzZXNpKTtcXG4tXFxuIFxcdC8qIGVuZm9yY2UgVkxBTiBwcm9taXNjIG1vZGUgZm9yIGFsbCBTSXMgKi9cXG4tXFx0cGYtXFx1MDAzZXZsYW5fcHJvbWlzY19zaW1hcCA9IEVORVRDX1ZMQU5fUFJPTUlTQ19NQVBfQUxMO1xcbi1cXHRlbmV0Y19zZXRfdmxhbl9wcm9taXNjKGh3LCBwZi1cXHUwMDNldmxhbl9wcm9taXNjX3NpbWFwKTtcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBwZi1cXHUwMDNldG90YWxfdmZzICsgMTsgaSsrKVxcbitcXHRcXHRlbmV0Y19zZXRfc2lfdmxhbl9wcm9taXNjKHBmLVxcdTAwM2VzaSwgaSwgdHJ1ZSk7XFxuIFxcbi1cXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQ19QU0lQTVIsIDApO1xcbitcXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQ19QU0lQTU1SLCAwKTtcXG4gXFxuIFxcdC8qIGVuYWJsZSBwb3J0ICovXFxuIFxcdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDX1BNUiwgRU5FVENfUE1SX0VOKTtcXG5AQCAtNDk0LDEyICs0NDUsOSBAQCBzdGF0aWMgaW50IGVuZXRjX3BmX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGNoYW5nZWQgXFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpIHtcXG4tXFx0XFx0c3RydWN0IGVuZXRjX3BmICpwZiA9IGVuZXRjX3NpX3ByaXYocHJpdi1cXHUwMDNlc2kpO1xcbitcXHRcXHRib29sIHByb21pc2MgPSAhKGZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKTtcXG4gXFxuLVxcdFxcdGlmICghIShmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikpXFxuLVxcdFxcdFxcdGVuZXRjX2Rpc2FibGVfc2lfdmxhbl9wcm9taXNjKHBmLCAwKTtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRlbmV0Y19lbmFibGVfc2lfdmxhbl9wcm9taXNjKHBmLCAwKTtcXG4rXFx0XFx0ZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzYyhwcml2LVxcdTAwM2VzaSwgMCwgcHJvbWlzYyk7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChjaGFuZ2VkIFxcdTAwMjYgTkVUSUZfRl9MT09QQkFDSylcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuaFxcbmluZGV4IDI4NWI3ZTVjNDhmZGM3Li41NmQyM2E4YTExYTA2MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5oXFxuQEAgLTE3LDEyICsxNyw5IEBAIHN0cnVjdCBlbmV0Y192Zl9zdGF0ZSB7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgZW5ldGNfcG9ydF9jYXBzIHtcXG4tXFx0dTMyIGhhbGZfZHVwbGV4OjE7XFxuLVxcdGludCBudW1fdnNpO1xcbiBcXHRpbnQgbnVtX21zaXg7XFxuIFxcdGludCBudW1fcnhfYmRyO1xcbiBcXHRpbnQgbnVtX3R4X2JkcjtcXG4tXFx0aW50IG1hY19maWx0ZXJfbnVtO1xcbiB9O1xcbiBcXG4gc3RydWN0IGVuZXRjX3BmO1xcbkBAIC00Nyw3ICs0NCw2IEBAIHN0cnVjdCBlbmV0Y19wZiB7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCBtc2dfdGFzaztcXG4gXFx0Y2hhciBtc2dfaW50X25hbWVbRU5FVENfSU5UX05BTUVfTUFYXTtcXG4gXFxuLVxcdGNoYXIgdmxhbl9wcm9taXNjX3NpbWFwOyAvKiBiaXRtYXAgb2YgU0lzIGluIFZMQU4gcHJvbWlzYyBtb2RlICovXFxuIFxcdERFQ0xBUkVfQklUTUFQKHZsYW5faHRfZmlsdGVyLCBFTkVUQ19WTEFOX0hUX1NJWkUpO1xcbiBcXHRERUNMQVJFX0JJVE1BUChhY3RpdmVfdmxhbnMsIFZMQU5fTl9WSUQpO1xcbiBcXG5AQCAtNjAsOCArNTYsNiBAQCBzdHJ1Y3QgZW5ldGNfcGYge1xcbiBcXG4gXFx0c3RydWN0IGVuZXRjX3BvcnRfY2FwcyBjYXBzO1xcbiBcXHRjb25zdCBzdHJ1Y3QgZW5ldGNfcGZfb3BzICpvcHM7XFxuLVxcbi1cXHRpbnQgbnVtX21mZTtcXHQvKiBudW1iZXIgb2YgbWFjIGFkZHJlc3MgZmlsdGVyIHRhYmxlIGVudHJpZXMgKi9cXG4gfTtcXG4gXFxuICNkZWZpbmUgcGh5bGlua190b19lbmV0Y19wZihjb25maWcpIFxcXFxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jXFxuaW5kZXggNmU1ZDJmODY5OTE1MGIuLmQzMmExOTVhMDRjOTdlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uY1xcbkBAIC0xLDUgKzEsNSBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjArIE9SIEJTRC0zLUNsYXVzZSlcXG4tLyogQ29weXJpZ2h0IDIwMjQgTlhQICovXFxuKy8qIENvcHlyaWdodCAyMDI0LTIwMjYgTlhQICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZnNsL2VuZXRjX21kaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX21kaW8uaFxcdTAwM2VcXG5AQCAtODcsNiArODcsMTEyIEBAIGludCBlbmV0Y19zZXR1cF9tYWNfYWRkcmVzc2VzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBlbmV0Y19wZiAqcGYpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfc2V0dXBfbWFjX2FkZHJlc3Nlcyk7XFxuIFxcbit2b2lkIGVuZXRjX3NldF9zaV91Y19wcm9taXNjKHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZCwgYm9vbCBwcm9taXNjKVxcbit7XFxuK1xcdHN0cnVjdCBlbmV0Y19odyAqaHcgPSBcXHUwMDI2c2ktXFx1MDAzZWh3O1xcbitcXHRpbnQgcHNpcG1tcl9vZmY7XFxuK1xcdHUzMiB2YWw7XFxuK1xcbitcXHRpZiAoaXNfZW5ldGNfcmV2MShzaSkpXFxuK1xcdFxcdHBzaXBtbXJfb2ZmID0gRU5FVENfUFNJUE1NUjtcXG4rXFx0ZWxzZVxcbitcXHRcXHRwc2lwbW1yX29mZiA9IEVORVRDNF9QU0lQTU1SO1xcbitcXG4rXFx0dmFsID0gZW5ldGNfcG9ydF9yZChodywgcHNpcG1tcl9vZmYpO1xcbitcXG4rXFx0aWYgKHByb21pc2MpXFxuK1xcdFxcdHZhbCB8PSBQU0lQTU1SX1NJX01BQ19VUChzaV9pZCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dmFsIFxcdTAwMjY9IH5QU0lQTU1SX1NJX01BQ19VUChzaV9pZCk7XFxuK1xcbitcXHRlbmV0Y19wb3J0X3dyKGh3LCBwc2lwbW1yX29mZiwgdmFsKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChlbmV0Y19zZXRfc2lfdWNfcHJvbWlzYyk7XFxuK1xcbit2b2lkIGVuZXRjX3NldF9zaV9tY19wcm9taXNjKHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZCwgYm9vbCBwcm9taXNjKVxcbit7XFxuK1xcdHN0cnVjdCBlbmV0Y19odyAqaHcgPSBcXHUwMDI2c2ktXFx1MDAzZWh3O1xcbitcXHRpbnQgcHNpcG1tcl9vZmY7XFxuK1xcdHUzMiB2YWw7XFxuK1xcbitcXHRpZiAoaXNfZW5ldGNfcmV2MShzaSkpXFxuK1xcdFxcdHBzaXBtbXJfb2ZmID0gRU5FVENfUFNJUE1NUjtcXG4rXFx0ZWxzZVxcbitcXHRcXHRwc2lwbW1yX29mZiA9IEVORVRDNF9QU0lQTU1SO1xcbitcXG4rXFx0dmFsID0gZW5ldGNfcG9ydF9yZChodywgcHNpcG1tcl9vZmYpO1xcbitcXG4rXFx0aWYgKHByb21pc2MpXFxuK1xcdFxcdHZhbCB8PSBQU0lQTU1SX1NJX01BQ19NUChzaV9pZCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dmFsIFxcdTAwMjY9IH5QU0lQTU1SX1NJX01BQ19NUChzaV9pZCk7XFxuK1xcbitcXHRlbmV0Y19wb3J0X3dyKGh3LCBwc2lwbW1yX29mZiwgdmFsKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChlbmV0Y19zZXRfc2lfbWNfcHJvbWlzYyk7XFxuK1xcbit2b2lkIGVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcihzdHJ1Y3QgZW5ldGNfc2kgKnNpLCBpbnQgc2lfaWQsIHU2NCBoYXNoKVxcbit7XFxuK1xcdGludCBwc2l1bWhmcjBfb2ZmLCBwc2l1bWhmcjFfb2ZmO1xcbitcXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXFx1MDAyNnNpLVxcdTAwM2VodztcXG4rXFxuK1xcdGlmIChpc19lbmV0Y19yZXYxKHNpKSkge1xcbitcXHRcXHRib29sIGVyciA9IHNpLVxcdTAwM2VlcnJhdGEgXFx1MDAyNiBFTkVUQ19FUlJfVUNNQ1NXUDtcXG4rXFxuK1xcdFxcdHBzaXVtaGZyMF9vZmYgPSBFTkVUQ19QU0lVTUhGUjAoc2lfaWQsIGVycik7XFxuK1xcdFxcdHBzaXVtaGZyMV9vZmYgPSBFTkVUQ19QU0lVTUhGUjEoc2lfaWQpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwc2l1bWhmcjBfb2ZmID0gRU5FVEM0X1BTSVVNSEZSMChzaV9pZCk7XFxuK1xcdFxcdHBzaXVtaGZyMV9vZmYgPSBFTkVUQzRfUFNJVU1IRlIxKHNpX2lkKTtcXG4rXFx0fVxcbitcXG4rXFx0ZW5ldGNfcG9ydF93cihodywgcHNpdW1oZnIwX29mZiwgbG93ZXJfMzJfYml0cyhoYXNoKSk7XFxuK1xcdGVuZXRjX3BvcnRfd3IoaHcsIHBzaXVtaGZyMV9vZmYsIHVwcGVyXzMyX2JpdHMoaGFzaCkpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcik7XFxuK1xcbit2b2lkIGVuZXRjX3NldF9zaV9tY19oYXNoX2ZpbHRlcihzdHJ1Y3QgZW5ldGNfc2kgKnNpLCBpbnQgc2lfaWQsIHU2NCBoYXNoKVxcbit7XFxuK1xcdGludCBwc2ltbWhmcjBfb2ZmLCBwc2ltbWhmcjFfb2ZmO1xcbitcXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXFx1MDAyNnNpLVxcdTAwM2VodztcXG4rXFxuK1xcdGlmIChpc19lbmV0Y19yZXYxKHNpKSkge1xcbitcXHRcXHRib29sIGVyciA9IHNpLVxcdTAwM2VlcnJhdGEgXFx1MDAyNiBFTkVUQ19FUlJfVUNNQ1NXUDtcXG4rXFxuK1xcdFxcdHBzaW1taGZyMF9vZmYgPSBFTkVUQ19QU0lNTUhGUjAoc2lfaWQsIGVycik7XFxuK1xcdFxcdHBzaW1taGZyMV9vZmYgPSBFTkVUQ19QU0lNTUhGUjEoc2lfaWQpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwc2ltbWhmcjBfb2ZmID0gRU5FVEM0X1BTSU1NSEZSMChzaV9pZCk7XFxuK1xcdFxcdHBzaW1taGZyMV9vZmYgPSBFTkVUQzRfUFNJTU1IRlIxKHNpX2lkKTtcXG4rXFx0fVxcbitcXG4rXFx0ZW5ldGNfcG9ydF93cihodywgcHNpbW1oZnIwX29mZiwgbG93ZXJfMzJfYml0cyhoYXNoKSk7XFxuK1xcdGVuZXRjX3BvcnRfd3IoaHcsIHBzaW1taGZyMV9vZmYsIHVwcGVyXzMyX2JpdHMoaGFzaCkpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGVuZXRjX3NldF9zaV9tY19oYXNoX2ZpbHRlcik7XFxuK1xcbit2b2lkIGVuZXRjX3NldF9zaV92bGFuX3Byb21pc2Moc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCBib29sIHByb21pc2MpXFxuK3tcXG4rXFx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFxcdTAwMjZzaS1cXHUwMDNlaHc7XFxuK1xcdGludCBwc2lwdm1yX29mZjtcXG4rXFx0dTMyIHZhbDtcXG4rXFxuK1xcdGlmIChpc19lbmV0Y19yZXYxKHNpKSlcXG4rXFx0XFx0cHNpcHZtcl9vZmYgPSBFTkVUQ19QU0lQVk1SO1xcbitcXHRlbHNlXFxuK1xcdFxcdHBzaXB2bXJfb2ZmID0gRU5FVEM0X1BTSVBWTVI7XFxuK1xcbitcXHR2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBwc2lwdm1yX29mZik7XFxuK1xcbitcXHRpZiAocHJvbWlzYylcXG4rXFx0XFx0dmFsIHw9IFBTSVBWTVJfU0lfVkxBTl9QKHNpX2lkKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHR2YWwgXFx1MDAyNj0gflBTSVBWTVJfU0lfVkxBTl9QKHNpX2lkKTtcXG4rXFxuK1xcdGVuZXRjX3BvcnRfd3IoaHcsIHBzaXB2bXJfb2ZmLCB2YWwpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGVuZXRjX3NldF9zaV92bGFuX3Byb21pc2MpO1xcbitcXG4gdm9pZCBlbmV0Y19wZl9uZXRkZXZfc2V0dXAoc3RydWN0IGVuZXRjX3NpICpzaSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuIFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqbmRldl9vcHMpXFxuIHtcXG5AQCAtMjc1LDcgKzM4MSw4IEBAIHN0YXRpYyBib29sIGVuZXRjX3BvcnRfaGFzX3BjcyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxcbiBcXHRyZXR1cm4gKHBmLVxcdTAwM2VpZl9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSB8fFxcbiBcXHRcXHRwZi1cXHUwMDNlaWZfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYIHx8XFxuIFxcdFxcdHBmLVxcdTAwM2VpZl9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVggfHxcXG4tXFx0XFx0cGYtXFx1MDAzZWlmX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUkpO1xcbitcXHRcXHRwZi1cXHUwMDNlaWZfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSB8fFxcbitcXHRcXHRwZi1cXHUwMDNlaWZfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIpO1xcbiB9XFxuIFxcbiBpbnQgZW5ldGNfbWRpb2J1c19jcmVhdGUoc3RydWN0IGVuZXRjX3BmICpwZiwgc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxcbkBAIC0zMTYsMjUgKzQyMyw0MiBAQCBpbnQgZW5ldGNfcGh5bGlua19jcmVhdGUoc3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxcbiB7XFxuIFxcdHN0cnVjdCBlbmV0Y19wZiAqcGYgPSBlbmV0Y19zaV9wcml2KHByaXYtXFx1MDAzZXNpKTtcXG4gXFx0c3RydWN0IHBoeWxpbmsgKnBoeWxpbms7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbWFjX2NhcHM7XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRwZi1cXHUwMDNlcGh5bGlua19jb25maWcuZGV2ID0gXFx1MDAyNnByaXYtXFx1MDAzZW5kZXYtXFx1MDAzZWRldjtcXG4gXFx0cGYtXFx1MDAzZXBoeWxpbmtfY29uZmlnLnR5cGUgPSBQSFlMSU5LX05FVERFVjtcXG4tXFx0cGYtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgPSBNQUNfQVNZTV9QQVVTRSB8IE1BQ19TWU1fUEFVU0UgfFxcbi1cXHRcXHRNQUNfMTAgfCBNQUNfMTAwIHwgTUFDXzEwMDAgfCBNQUNfMjUwMEZEO1xcbiBcXG4gXFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCxcXG4gXFx0XFx0ICBwZi1cXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbi1cXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJLFxcbi1cXHRcXHQgIHBmLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuLVxcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYLFxcbi1cXHRcXHQgIHBmLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuLVxcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMjUwMEJBU0VYLFxcbi1cXHRcXHQgIHBmLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuLVxcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSxcXG4tXFx0XFx0ICBwZi1cXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbi1cXHRwaHlfaW50ZXJmYWNlX3NldF9yZ21paShwZi1cXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbiBcXG4rXFx0bWFjX2NhcHMgPSBNQUNfQVNZTV9QQVVTRSB8IE1BQ19TWU1fUEFVU0U7XFxuK1xcdGlmICghZW5ldGNfaXNfcHNldWRvX21hYyhwcml2LVxcdTAwM2VzaSkpIHtcXG4rXFx0XFx0bWFjX2NhcHMgfD0gTUFDXzEwIHwgTUFDXzEwMCB8IE1BQ18xMDAwRkQgfCBNQUNfMjUwMEZEO1xcbitcXG4rXFx0XFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSxcXG4rXFx0XFx0XFx0ICBwZi1cXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbitcXHRcXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCxcXG4rXFx0XFx0XFx0ICBwZi1cXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbitcXHRcXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWCxcXG4rXFx0XFx0XFx0ICBwZi1cXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbitcXHRcXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUksXFxuK1xcdFxcdFxcdCAgcGYtXFx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcXG4rXFxuK1xcdFxcdGlmICghaXNfZW5ldGNfcmV2MShwcml2LVxcdTAwM2VzaSkpIHtcXG4rXFx0XFx0XFx0bWFjX2NhcHMgfD0gTUFDXzUwMDBGRCB8IE1BQ18xMDAwMEZEO1xcbitcXHRcXHRcXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSLFxcbitcXHRcXHRcXHRcXHQgIHBmLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHBoeV9pbnRlcmZhY2Vfc2V0X3JnbWlpKHBmLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdG1hY19jYXBzIHw9IE1BQ18xMEZEIHwgTUFDXzEwMEZEIHwgTUFDXzEwMDBGRCB8IE1BQ18yNTAwRkQgfFxcbitcXHRcXHRcXHQgICAgTUFDXzUwMDBGRCB8IE1BQ18xMDAwMEZEIHwgTUFDXzIwMDAwRkQgfFxcbitcXHRcXHRcXHQgICAgTUFDXzI1MDAwRkQ7XFxuK1xcdH1cXG4rXFxuK1xcdHBmLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzID0gbWFjX2NhcHM7XFxuIFxcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcXHUwMDI2cGYtXFx1MDAzZXBoeWxpbmtfY29uZmlnLCBvZl9md25vZGVfaGFuZGxlKG5vZGUpLFxcbiBcXHRcXHRcXHRcXHQgcGYtXFx1MDAzZWlmX21vZGUsIG9wcyk7XFxuIFxcdGlmIChJU19FUlIocGh5bGluaykpIHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5oXFxuaW5kZXggNTdkMmUwZWJkMmIwYmIuLjgyNDNjZTBkZTU3ZjY0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uaFxcbkBAIC0xNyw2ICsxNywxMSBAQCB2b2lkIGVuZXRjX3NldF9kZWZhdWx0X3Jzc19rZXkoc3RydWN0IGVuZXRjX3BmICpwZik7XFxuIGludCBlbmV0Y192bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIF9fYmUxNiBwcm90LCB1MTYgdmlkKTtcXG4gaW50IGVuZXRjX3ZsYW5fcnhfZGVsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgX19iZTE2IHByb3QsIHUxNiB2aWQpO1xcbiBpbnQgZW5ldGNfaW5pdF9zcmlvdl9yZXNvdXJjZXMoc3RydWN0IGVuZXRjX3BmICpwZik7XFxuK3ZvaWQgZW5ldGNfc2V0X3NpX3VjX3Byb21pc2Moc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCBib29sIHByb21pc2MpO1xcbit2b2lkIGVuZXRjX3NldF9zaV9tY19wcm9taXNjKHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZCwgYm9vbCBwcm9taXNjKTtcXG4rdm9pZCBlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCB1NjQgaGFzaCk7XFxuK3ZvaWQgZW5ldGNfc2V0X3NpX21jX2hhc2hfZmlsdGVyKHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZCwgdTY0IGhhc2gpO1xcbit2b2lkIGVuZXRjX3NldF9zaV92bGFuX3Byb21pc2Moc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCBib29sIHByb21pc2MpO1xcbiBcXG4gc3RhdGljIGlubGluZSB1MTYgZW5ldGNfZ2V0X2lwX3JldmlzaW9uKHN0cnVjdCBlbmV0Y19odyAqaHcpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3Fvcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3Fvcy5jXFxuaW5kZXggN2IxN2JjYTI0ZjI2MGYuLjJhYTBmY2FhZmNkMjNjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19xb3MuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19xb3MuY1xcbkBAIC0xMTM1LDcgKzExMzUsNiBAQCBzdGF0aWMgaW50IGVuZXRjX3BzZnBfcGFyc2VfY2xzZmxvd2VyKHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYsXFxuIFxcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnk7XFxuIFxcdHN0cnVjdCBhY3Rpb25fZ2F0ZV9lbnRyeSAqZTtcXG4gXFx0dTggc2ZpX292ZXJ3cml0ZSA9IDA7XFxuLVxcdGludCBlbnRyaWVzX3NpemU7XFxuIFxcdGludCBpLCBlcnI7XFxuIFxcbiBcXHRpZiAoZi1cXHUwMDNlY29tbW9uLmNoYWluX2luZGV4IFxcdTAwM2U9IHByaXYtXFx1MDAzZXBzZnBfY2FwLm1heF9zdHJlYW1pZCkge1xcbkBAIC0xMjQyLDggKzEyNDEsNyBAQCBzdGF0aWMgaW50IGVuZXRjX3BzZnBfcGFyc2VfY2xzZmxvd2VyKHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYsXFxuIFxcdFxcdGdvdG8gZnJlZV9maWx0ZXI7XFxuIFxcdH1cXG4gXFxuLVxcdGVudHJpZXNfc2l6ZSA9IHN0cnVjdF9zaXplKHNnaSwgZW50cmllcywgZW50cnlnLVxcdTAwM2VnYXRlLm51bV9lbnRyaWVzKTtcXG4tXFx0c2dpID0ga3phbGxvYyhlbnRyaWVzX3NpemUsIEdGUF9LRVJORUwpO1xcbitcXHRzZ2kgPSBremFsbG9jX2ZsZXgoKnNnaSwgZW50cmllcywgZW50cnlnLVxcdTAwM2VnYXRlLm51bV9lbnRyaWVzKTtcXG4gXFx0aWYgKCFzZ2kpIHtcXG4gXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byBmcmVlX2ZpbHRlcjtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3ZmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfdmYuY1xcbmluZGV4IDljZGIwYTRkNmJhZmI3Li43ZGNiNGEwMjQ2ZjUyOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfdmYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y192Zi5jXFxuQEAgLTMxNyw3ICszMTcsMTQgQEAgc3RhdGljIGludCBlbmV0Y192Zl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFxuIFxcdGVuZXRjX2dldF9zaV9jYXBzKHNpKTtcXG4gXFxuLVxcdG5kZXYgPSBhbGxvY19ldGhlcmRldl9tcShzaXplb2YoKnByaXYpLCBFTkVUQ19NQVhfTlVNX1RYUVMpO1xcbitcXHQvKiBDdXJyZW50bHksIHRoZSBzdXBwb3J0ZWQgU29DcyBoYXZlIGEgbWF4IG9mIDYgQ1BVcyBhbmQgdGhlIFZGc1xcbitcXHQgKiBoYXZlIGxlc3MgdGhhbiA2IFJYL1RYIHJpbmdzLiBTbyBubyBpc3N1ZXMgZm9yIHRoZXNlIHN1cHBvcnRlZFxcbitcXHQgKiBTb0NzLCBidXQgZm9yIGZ1dHVyZSBTb0NzIHdoaWNoIGhhdmUgbW9yZSBDUFVzIG9yIG1vcmUgVFgvUlhcXG4rXFx0ICogcmluZ3MsIGFsbCB0aGUgcmVsYXRlZCBsb2dpYyBuZWVkcyB0byBiZSBpbXByb3ZlZC5cXG4rXFx0ICovXFxuK1xcdG5kZXYgPSBhbGxvY19ldGhlcmRldl9tcXMoc2l6ZW9mKCpwcml2KSxcXG4rXFx0XFx0XFx0XFx0ICBtaW4oc2ktXFx1MDAzZW51bV90eF9yaW5ncywgRU5FVENfTUFYX05VTV9UWFFTKSxcXG4rXFx0XFx0XFx0XFx0ICBtaW4oc2ktXFx1MDAzZW51bV9yeF9yaW5ncywgRU5FVENfTUFYX05VTV9UWFFTKSk7XFxuIFxcdGlmICghbmRldikge1xcbiBcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiBcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJuZXRkZXYgY3JlYXRpb24gZmFpbGVkXFxcXG5cXFwiKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc2wvbnRtcC5oIGIvaW5jbHVkZS9saW51eC9mc2wvbnRtcC5oXFxuaW5kZXggZDNiNmM0NzZiOTFhMmQuLjc2NGVmMjg5MjYwODVlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZnNsL250bXAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZnNsL250bXAuaFxcbkBAIC03NSw4ICs3NSwxMCBAQCBzdHJ1Y3QgbnRtcF91c2VyIHtcXG4gXFx0LyogTlRNUCB0YWJsZSBiaXRtYXBzIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50ICovXFxuIFxcdHUzMiBldHRfYml0bWFwX3NpemU7XFxuIFxcdHUzMiBlY3RfYml0bWFwX3NpemU7XFxuK1xcdHUxNiBtYWZ0X251bV9lbnRyaWVzO1xcbiBcXHR1bnNpZ25lZCBsb25nICpldHRfZ2lkX2JpdG1hcDsgLyogb25seSB2YWxpZCBmb3Igc3dpdGNoICovXFxuIFxcdHVuc2lnbmVkIGxvbmcgKmVjdF9naWRfYml0bWFwOyAvKiBvbmx5IHZhbGlkIGZvciBzd2l0Y2ggKi9cXG4rXFx0dW5zaWduZWQgbG9uZyAqbWFmdF9laWRfYml0bWFwOyAvKiBvbmx5IHZhbGlkIGZvciBFTkVUQyAqL1xcbiB9O1xcbiBcXG4gc3RydWN0IG1hZnRfZW50cnlfZGF0YSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDAzOjAwOjE2LjE5Mjg3NDQ0MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5Mjg0Mjc1MDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZTTF9FTkVUQ1wiLFxuICAgIFwiTlhQX0VORVRDNFwiLFxuICAgIFwiRlNMX0VORVRDX1ZGXCIsXG4gICAgXCJGU0xfRU5FVENfUU9TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZW5ldGM0X3BmX3NldF9yeF9tb2RlXCIsXG4gICAgXCJlbmV0Y19wZl9zZXRfcnhfbW9kZVwiLFxuICAgIFwiZW5ldGM0X3BmX3NldF9tYWNfZmlsdGVyXCIsXG4gICAgXCJlbmV0YzRfcGZfc2V0X3VjX2V4YWN0X2ZpbHRlclwiLFxuICAgIFwiZW5ldGM0X3BmX2FkZF9tYWZ0X2VudHJpZXNcIixcbiAgICBcImVuZXRjX3N5bmNfbWFjX2ZpbHRlcnNcIixcbiAgICBcImVuZXRjX3NldF9zaV91Y19wcm9taXNjXCIsXG4gICAgXCJlbmV0Y19zZXRfc2lfbWNfcHJvbWlzY1wiLFxuICAgIFwiZW5ldGNfc2V0X3NpX3VjX2hhc2hfZmlsdGVyXCIsXG4gICAgXCJlbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXJcIixcbiAgICBcImVuZXRjX3NldF9zaV92bGFuX3Byb21pc2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIEVORVRDIGRyaXZlciB0byB1c2UgdGhlIG5ldyBgbmRvX3NldF9yeF9tb2RlX2FzeW5jYCBuZXRfZGV2aWNlX29wcyBtZW1iZXIgaW5zdGVhZCBvZiBhIGN1c3RvbSB3b3JrcXVldWUgZm9yIHNldHRpbmcgdGhlIFJYIG1vZGUuIEl0IGFsc28gbW9kaWZpZXMgTUFDIGFuZCBWTEFOIGZpbHRlcmluZyBsb2dpYyBpbiB0aGUgUEYgZHJpdmVycyAoYGVuZXRjNF9wZi5jYCBhbmQgYGVuZXRjX3BmLmNgKSwgYW5kIGludHJvZHVjZXMgY29tbW9uIGhlbHBlciBmdW5jdGlvbnMgZm9yIHByb21pc2N1b3VzIG1vZGUgYW5kIGhhc2ggZmlsdGVycy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBkcml2ZXIgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZiMTM5ZTQ3MmQ5MGE3OGFlZDMwYWRhMjI2MTU3NGFkZWUyYzI5NjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAwMzowMDoxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Yy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjLmhcbmluZGV4IDA0YTVkZDVlYTZjNzRjLi44ODM5Y2ZiNDliY2ZlOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Yy5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGMuaFxuQEAgLTEsNSArMSw1IEBAXG4gLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wKyBPUiBCU0QtMy1DbGF1c2UpICovXG4tLyogQ29weXJpZ2h0IDIwMTctMjAxOSBOWFAgKi9cbisvKiBDb3B5cmlnaHQgMjAxNy0yMDE5LCAyMDI1LTIwMjYgTlhQICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG5AQCAtMzI0LDggKzMyNCw2IEBAIHN0cnVjdCBlbmV0Y19zaSB7XG4gXHRjb25zdCBzdHJ1Y3QgZW5ldGNfZHJ2ZGF0YSAqZHJ2ZGF0YTtcbiBcdGNvbnN0IHN0cnVjdCBlbmV0Y19zaV9vcHMgKm9wcztcbiBcbi1cdHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcXVldWU7XG4tXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcnhfbW9kZV90YXNrO1xuIFx0c3RydWN0IGRlbnRyeSAqZGVidWdmc19yb290O1xuIFx0c3RydWN0IGVuZXRjX21zZ19zd2JkIG1zZzsgLyogT25seSB2YWxpZCBmb3IgVlNJICovXG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfZGVidWdmcy5jXG5pbmRleCAxYjE1OTFkY2U3M2Q0Yi4uNTAyOTAzOGJmOTlmYWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X2RlYnVnZnMuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9kZWJ1Z2ZzLmNcbkBAIC0yOCwxNSArMjgsMTQgQEAgc3RhdGljIHZvaWQgZW5ldGNfc2hvd19zaV9tYWNfaGFzaF9maWx0ZXIoc3RydWN0IHNlcV9maWxlICpzLCBpbnQgaSlcbiBcbiBzdGF0aWMgaW50IGVuZXRjX21hY19maWx0ZXJfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpXG4ge1xuLVx0c3RydWN0IGVuZXRjX3NpICpzaSA9IHMtXHUwMDNlcHJpdmF0ZTtcbi1cdHN0cnVjdCBlbmV0Y19odyAqaHcgPSBcdTAwMjZzaS1cdTAwM2VodztcbitcdHN0cnVjdCBlbmV0Y19wZiAqcGYgPSBlbmV0Y19zaV9wcml2KHMtXHUwMDNlcHJpdmF0ZSk7XG4rXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXHUwMDI2cGYtXHUwMDNlc2ktXHUwMDNlaHc7XG4rXHRpbnQgbnVtX3NpID0gcGYtXHUwMDNldG90YWxfdmZzICsgMTtcbiBcdHN0cnVjdCBtYWZ0X2VudHJ5X2RhdGEgbWFmdDtcbi1cdHN0cnVjdCBlbmV0Y19wZiAqcGY7XG4tXHRpbnQgaSwgZXJyLCBudW1fc2k7XG4tXHR1MzIgdmFsO1xuLVxuLVx0cGYgPSBlbmV0Y19zaV9wcml2KHNpKTtcbi1cdG51bV9zaSA9IHBmLVx1MDAzZWNhcHMubnVtX3ZzaSArIDE7XG4rXHRzdHJ1Y3QgbnRtcF91c2VyICp1c2VyO1xuK1x0dTMyIHZhbCwgZW50cnlfaWQ7XG4rXHRpbnQgZXJyID0gMDtcbitcdGludCBpO1xuIFxuIFx0dmFsID0gZW5ldGNfcG9ydF9yZChodywgRU5FVEM0X1BTSVBNTVIpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3NpOyBpKyspIHtcbkBAIC01MCwzMSArNDksMzggQEAgc3RhdGljIGludCBlbmV0Y19tYWNfZmlsdGVyX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3NpOyBpKyspXG4gXHRcdGVuZXRjX3Nob3dfc2lfbWFjX2hhc2hfZmlsdGVyKHMsIGkpO1xuIFxuLVx0aWYgKCFwZi1cdTAwM2VudW1fbWZlKVxuLVx0XHRyZXR1cm4gMDtcbitcdHVzZXIgPSBcdTAwMjZwZi1cdTAwM2VzaS1cdTAwM2VudG1wX3VzZXI7XG4rXHRydG5sX2xvY2soKTtcbitcbitcdGlmIChiaXRtYXBfZW1wdHkodXNlci1cdTAwM2VtYWZ0X2VpZF9iaXRtYXAsIHVzZXItXHUwMDNlbWFmdF9udW1fZW50cmllcykpXG4rXHRcdGdvdG8gdW5sb2NrX3J0bmw7XG4gXG4gXHQvKiBNQUMgYWRkcmVzcyBmaWx0ZXIgdGFibGUgKi9cbiBcdHNlcV9wdXRzKHMsIFwiTUFDIGFkZHJlc3MgZmlsdGVyIHRhYmxlXFxuXCIpO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGYtXHUwMDNlbnVtX21mZTsgaSsrKSB7XG4rXHRmb3JfZWFjaF9zZXRfYml0KGVudHJ5X2lkLCB1c2VyLVx1MDAzZW1hZnRfZWlkX2JpdG1hcCxcbitcdFx0XHQgdXNlci1cdTAwM2VtYWZ0X251bV9lbnRyaWVzKSB7XG4gXHRcdG1lbXNldChcdTAwMjZtYWZ0LCAwLCBzaXplb2YobWFmdCkpO1xuLVx0XHRlcnIgPSBudG1wX21hZnRfcXVlcnlfZW50cnkoXHUwMDI2c2ktXHUwMDNlbnRtcF91c2VyLCBpLCBcdTAwMjZtYWZ0KTtcbitcdFx0ZXJyID0gbnRtcF9tYWZ0X3F1ZXJ5X2VudHJ5KHVzZXIsIGVudHJ5X2lkLCBcdTAwMjZtYWZ0KTtcbiBcdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRcdGdvdG8gdW5sb2NrX3J0bmw7XG4gXG4tXHRcdHNlcV9wcmludGYocywgXCJFbnRyeSAlZCwgTUFDOiAlcE0sIFNJIGJpdG1hcDogMHglMDR4XFxuXCIsIGksXG4tXHRcdFx0ICAgbWFmdC5rZXllLm1hY19hZGRyLCBsZTE2X3RvX2NwdShtYWZ0LmNmZ2Uuc2lfYml0bWFwKSk7XG4rXHRcdHNlcV9wcmludGYocywgXCJFbnRyeSAlZCwgTUFDOiAlcE0sIFNJIGJpdG1hcDogMHglMDR4XFxuXCIsXG4rXHRcdFx0ICAgZW50cnlfaWQsIG1hZnQua2V5ZS5tYWNfYWRkcixcbitcdFx0XHQgICBsZTE2X3RvX2NwdShtYWZ0LmNmZ2Uuc2lfYml0bWFwKSk7XG4gXHR9XG4gXG4tXHRyZXR1cm4gMDtcbit1bmxvY2tfcnRubDpcbitcdHJ0bmxfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBERUZJTkVfU0hPV19BVFRSSUJVVEUoZW5ldGNfbWFjX2ZpbHRlcik7XG4gXG4gdm9pZCBlbmV0Y19jcmVhdGVfZGVidWdmcyhzdHJ1Y3QgZW5ldGNfc2kgKnNpKVxuIHtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gc2ktXHUwMDNlbmRldjtcbiBcdHN0cnVjdCBkZW50cnkgKnJvb3Q7XG4gXG4tXHRyb290ID0gZGVidWdmc19jcmVhdGVfZGlyKG5ldGRldl9uYW1lKG5kZXYpLCBOVUxMKTtcbitcdHJvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIocGNpX25hbWUoc2ktXHUwMDNlcGRldiksIE5VTEwpO1xuIFx0aWYgKElTX0VSUihyb290KSlcbiBcdFx0cmV0dXJuO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfaHcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfaHcuaFxuaW5kZXggZjE4NDM3NTU2YTBlZTIuLjA5MDI1ZTdhMmEzYWVkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9ody5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X2h3LmhcbkBAIC02OSw4ICs2OSw2IEBAXG4gXG4gLyogUG9ydCBTdGF0aW9uIGludGVyZmFjZSBwcm9taXNjdW91cyBNQUMgbW9kZSByZWdpc3RlciAqL1xuICNkZWZpbmUgRU5FVEM0X1BTSVBNTVJcdFx0XHQweDIwMFxuLSNkZWZpbmUgIFBTSVBNTVJfU0lfTUFDX1VQKGEpXHRcdEJJVChhKSAvKiBhID0gU0kgaW5kZXggKi9cbi0jZGVmaW5lICBQU0lQTU1SX1NJX01BQ19NUChhKVx0XHRCSVQoKGEpICsgMTYpXG4gXG4gLyogUG9ydCBTdGF0aW9uIGludGVyZmFjZSBwcm9taXNjdW91cyBWTEFOIG1vZGUgcmVnaXN0ZXIgKi9cbiAjZGVmaW5lIEVORVRDNF9QU0lQVk1SXHRcdFx0MHgyMDRcbkBAIC0xMzcsNyArMTM1LDYgQEBcbiAjZGVmaW5lIEVORVRDNF9QU0lWSEZSMShhKVx0XHQoKGEpICogMHg4MCArIDB4MjA2NClcbiBcbiAjZGVmaW5lIEVORVRDNF9QTUNBUFJcdFx0XHQweDQwMDRcbi0jZGVmaW5lICBQTUNBUFJfSERcdFx0XHRCSVQoOClcbiAjZGVmaW5lICBQTUNBUFJfRlBcdFx0XHRHRU5NQVNLKDEwLCA5KVxuIFxuIC8qIFBvcnQgY2FwYWJpbGl0eSByZWdpc3RlciAqL1xuQEAgLTE1MCw3ICsxNDcsNyBAQFxuICNkZWZpbmUgIFBDUl9MMkRPU0VcdFx0XHRCSVQoNClcbiAjZGVmaW5lICBQQ1JfVElNRVJfQ1NcdFx0XHRCSVQoOClcbiAjZGVmaW5lICBQQ1JfUFNQRUVEXHRcdFx0R0VOTUFTSygyOSwgMTYpXG4tI2RlZmluZSAgUENSX1BTUEVFRF9WQUwoc3BlZWQpXHRcdCgoKHNwZWVkKSAvIDEwIC0gMSkgXHUwMDNjXHUwMDNjIDE2KVxuKyNkZWZpbmUgIFBDUl9QU1BFRURfVkFMKHMpXHRcdEZJRUxEX1BSRVAoUENSX1BTUEVFRCwgKChzKSAvIDEwIC0gMSkpXG4gXG4gLyogUG9ydCBNQUMgYWRkcmVzcyByZWdpc3RlciAwLzEgKi9cbiAjZGVmaW5lIEVORVRDNF9QTUFSMFx0XHRcdDB4NDAyMFxuQEAgLTIwMCw3ICsxOTcsNiBAQFxuICNkZWZpbmUgIFBNX0NNRF9DRkdfQ05UX0ZSTV9FTlx0XHRCSVQoMTMpXG4gI2RlZmluZSAgUE1fQ01EX0NGR19UWFBcdFx0XHRCSVQoMTUpXG4gI2RlZmluZSAgUE1fQ01EX0NGR19TRU5EX0lETEVcdFx0QklUKDE2KVxuLSNkZWZpbmUgIFBNX0NNRF9DRkdfSERfRkNFTlx0XHRCSVQoMTgpXG4gI2RlZmluZSAgUE1fQ01EX0NGR19TRkRcdFx0XHRCSVQoMjEpXG4gI2RlZmluZSAgUE1fQ01EX0NGR19UWF9GTFVTSFx0XHRCSVQoMjIpXG4gI2RlZmluZSAgUE1fQ01EX0NGR19UWF9MT1dQX0VOXHRcdEJJVCgyMylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmNcbmluZGV4IDQzN2ExNWJiYjQ3YmE4Li5mY2ZiYWJiMjlkMjJlNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jXG5AQCAtMjMsMTggKzIzLDExIEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9nZXRfcG9ydF9jYXBzKHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4gXHR1MzIgdmFsO1xuIFxuIFx0dmFsID0gZW5ldGNfcG9ydF9yZChodywgRU5FVEM0X0VDQVBSMSk7XG4tXHRwZi1cdTAwM2VjYXBzLm51bV92c2kgPSAodmFsIFx1MDAyNiBFQ0FQUjFfTlVNX1ZTSSkgXHUwMDNlXHUwMDNlIDI0O1xuIFx0cGYtXHUwMDNlY2Fwcy5udW1fbXNpeCA9ICgodmFsIFx1MDAyNiBFQ0FQUjFfTlVNX01TSVgpIFx1MDAzZVx1MDAzZSAxMikgKyAxO1xuIFxuIFx0dmFsID0gZW5ldGNfcG9ydF9yZChodywgRU5FVEM0X0VDQVBSMik7XG4gXHRwZi1cdTAwM2VjYXBzLm51bV9yeF9iZHIgPSAodmFsIFx1MDAyNiBFQ0FQUjJfTlVNX1JYX0JEUikgXHUwMDNlXHUwMDNlIDE2O1xuIFx0cGYtXHUwMDNlY2Fwcy5udW1fdHhfYmRyID0gdmFsIFx1MDAyNiBFQ0FQUjJfTlVNX1RYX0JEUjtcbi1cbi1cdHZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDNF9QTUNBUFIpO1xuLVx0cGYtXHUwMDNlY2Fwcy5oYWxmX2R1cGxleCA9ICh2YWwgXHUwMDI2IFBNQ0FQUl9IRCkgPyAxIDogMDtcbi1cbi1cdHZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDNF9QU0lNQUZDQVBSKTtcbi1cdHBmLVx1MDAzZWNhcHMubWFjX2ZpbHRlcl9udW0gPSB2YWwgXHUwMDI2IFBTSU1BRkNBUFJfTlVNX01BQ19BRlRFO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBlbmV0YzRfZ2V0X3BzaV9od19mZWF0dXJlcyhzdHJ1Y3QgZW5ldGNfc2kgKnNpKVxuQEAgLTc1LDM4ICs2OCw2IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wZl9nZXRfc2lfcHJpbWFyeV9tYWMoc3RydWN0IGVuZXRjX2h3ICpodywgaW50IHNpLFxuIFx0cHV0X3VuYWxpZ25lZF9sZTE2KGxvd2VyLCBhZGRyICsgNCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfc2lfbWFjX3Byb21pc2Moc3RydWN0IGVuZXRjX2h3ICpodywgaW50IHNpLFxuLVx0XHRcdFx0XHQgYm9vbCB1Y19wcm9taXNjLCBib29sIG1jX3Byb21pc2MpXG4te1xuLVx0dTMyIHZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDNF9QU0lQTU1SKTtcbi1cbi1cdGlmICh1Y19wcm9taXNjKVxuLVx0XHR2YWwgfD0gUFNJUE1NUl9TSV9NQUNfVVAoc2kpO1xuLVx0ZWxzZVxuLVx0XHR2YWwgXHUwMDI2PSB+UFNJUE1NUl9TSV9NQUNfVVAoc2kpO1xuLVxuLVx0aWYgKG1jX3Byb21pc2MpXG4tXHRcdHZhbCB8PSBQU0lQTU1SX1NJX01BQ19NUChzaSk7XG4tXHRlbHNlXG4tXHRcdHZhbCBcdTAwMjY9IH5QU0lQTU1SX1NJX01BQ19NUChzaSk7XG4tXG4tXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJUE1NUiwgdmFsKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9zaV91Y19oYXNoX2ZpbHRlcihzdHJ1Y3QgZW5ldGNfaHcgKmh3LCBpbnQgc2ksXG4tXHRcdFx0XHRcdCAgICB1NjQgaGFzaClcbi17XG4tXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJVU1IRlIwKHNpKSwgbG93ZXJfMzJfYml0cyhoYXNoKSk7XG4tXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJVU1IRlIxKHNpKSwgdXBwZXJfMzJfYml0cyhoYXNoKSk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfc2lfbWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX2h3ICpodywgaW50IHNpLFxuLVx0XHRcdFx0XHQgICAgdTY0IGhhc2gpXG4te1xuLVx0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSU1NSEZSMChzaSksIGxvd2VyXzMyX2JpdHMoaGFzaCkpO1xuLVx0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSU1NSEZSMShzaSksIHVwcGVyXzMyX2JpdHMoaGFzaCkpO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBlbmV0YzRfcGZfc2V0X2xvb3BiYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBib29sIGVuKVxuIHtcbiBcdHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbkBAIC0xMjQsMzQgKzg1LDQ3IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfbG9vcGJhY2soc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgZW4pXG4gXG4gc3RhdGljIHZvaWQgZW5ldGM0X3BmX2NsZWFyX21hZnRfZW50cmllcyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuIHtcbi1cdGludCBpO1xuK1x0c3RydWN0IG50bXBfdXNlciAqdXNlciA9IFx1MDAyNnBmLVx1MDAzZXNpLVx1MDAzZW50bXBfdXNlcjtcbitcdHUzMiBlbnRyeV9pZDtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmLVx1MDAzZW51bV9tZmU7IGkrKylcbi1cdFx0bnRtcF9tYWZ0X2RlbGV0ZV9lbnRyeShcdTAwMjZwZi1cdTAwM2VzaS1cdTAwM2VudG1wX3VzZXIsIGkpO1xuLVxuLVx0cGYtXHUwMDNlbnVtX21mZSA9IDA7XG4rXHRmb3JfZWFjaF9zZXRfYml0KGVudHJ5X2lkLCB1c2VyLVx1MDAzZW1hZnRfZWlkX2JpdG1hcCxcbitcdFx0XHQgdXNlci1cdTAwM2VtYWZ0X251bV9lbnRyaWVzKSB7XG4rXHRcdGlmICghbnRtcF9tYWZ0X2RlbGV0ZV9lbnRyeSh1c2VyLCBlbnRyeV9pZCkpXG4rXHRcdFx0bnRtcF9jbGVhcl9laWRfYml0bWFwKHVzZXItXHUwMDNlbWFmdF9laWRfYml0bWFwLCBlbnRyeV9pZCk7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyBpbnQgZW5ldGM0X3BmX2FkZF9tYWZ0X2VudHJpZXMoc3RydWN0IGVuZXRjX3BmICpwZixcbi1cdFx0XHRcdCAgICAgIHN0cnVjdCBlbmV0Y19tYWNfYWRkciAqbWFjLFxuLVx0XHRcdFx0ICAgICAgaW50IG1hY19jbnQpXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMpXG4ge1xuK1x0c3RydWN0IG50bXBfdXNlciAqdXNlciA9IFx1MDAyNnBmLVx1MDAzZXNpLVx1MDAzZW50bXBfdXNlcjtcbitcdGludCBtYWNfY250ID0gbmV0ZGV2X2h3X2FkZHJfbGlzdF9jb3VudCh1Yyk7XG4gXHRzdHJ1Y3QgbWFmdF9lbnRyeV9kYXRhIG1hZnQgPSB7fTtcbitcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4rXHR1MzIgYXZhaWxhYmxlX2VudHJpZXM7XG4gXHR1MTYgc2lfYml0ID0gQklUKDApO1xuLVx0aW50IGksIGVycjtcbitcdHUzMiBlbnRyeV9pZDtcbitcdGludCBlcnI7XG4rXG4rXHRhdmFpbGFibGVfZW50cmllcyA9IHVzZXItXHUwMDNlbWFmdF9udW1fZW50cmllcyAtXG4rXHRcdFx0ICAgIGJpdG1hcF93ZWlnaHQodXNlci1cdTAwM2VtYWZ0X2VpZF9iaXRtYXAsXG4rXHRcdFx0XHRcdCAgdXNlci1cdTAwM2VtYWZ0X251bV9lbnRyaWVzKTtcbitcbitcdGlmIChtYWNfY250IFx1MDAzZSBhdmFpbGFibGVfZW50cmllcylcbitcdFx0cmV0dXJuIC1FTk9TUEM7XG4gXG4gXHRtYWZ0LmNmZ2Uuc2lfYml0bWFwID0gY3B1X3RvX2xlMTYoc2lfYml0KTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1hY19jbnQ7IGkrKykge1xuLVx0XHRldGhlcl9hZGRyX2NvcHkobWFmdC5rZXllLm1hY19hZGRyLCBtYWNbaV0uYWRkcik7XG4tXHRcdGVyciA9IG50bXBfbWFmdF9hZGRfZW50cnkoXHUwMDI2cGYtXHUwMDNlc2ktXHUwMDNlbnRtcF91c2VyLCBpLCBcdTAwMjZtYWZ0KTtcbitcdG5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIHVjKSB7XG4rXHRcdGVudHJ5X2lkID0gbnRtcF9sb29rdXBfZnJlZV9laWQodXNlci1cdTAwM2VtYWZ0X2VpZF9iaXRtYXAsXG4rXHRcdFx0XHRcdFx0dXNlci1cdTAwM2VtYWZ0X251bV9lbnRyaWVzKTtcbitcdFx0ZXRoZXJfYWRkcl9jb3B5KG1hZnQua2V5ZS5tYWNfYWRkciwgaGEtXHUwMDNlYWRkcik7XG4rXHRcdGVyciA9IG50bXBfbWFmdF9hZGRfZW50cnkodXNlciwgZW50cnlfaWQsIFx1MDAyNm1hZnQpO1xuIFx0XHRpZiAodW5saWtlbHkoZXJyKSkge1xuLVx0XHRcdHBmLVx1MDAzZW51bV9tZmUgPSBpO1xuK1x0XHRcdG50bXBfY2xlYXJfZWlkX2JpdG1hcCh1c2VyLVx1MDAzZW1hZnRfZWlkX2JpdG1hcCwgZW50cnlfaWQpO1xuIFx0XHRcdGdvdG8gY2xlYXJfbWFmdF9lbnRyaWVzO1xuIFx0XHR9XG4gXHR9XG4gXG4tXHRwZi1cdTAwM2VudW1fbWZlID0gbWFjX2NudDtcbi1cbiBcdHJldHVybiAwO1xuIFxuIGNsZWFyX21hZnRfZW50cmllczpcbkBAIC0xNjAsOTcgKzEzNCw3MCBAQCBzdGF0aWMgaW50IGVuZXRjNF9wZl9hZGRfbWFmdF9lbnRyaWVzKHN0cnVjdCBlbmV0Y19wZiAqcGYsXG4gXHRyZXR1cm4gIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCBlbmV0YzRfcGZfc2V0X3VjX2V4YWN0X2ZpbHRlcihzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuK3N0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfdWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3BmICpwZixcbitcdFx0XHRcdFx0IHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp1YylcbiB7XG4tXHRpbnQgbWF4X251bV9tZmUgPSBwZi1cdTAwM2VjYXBzLm1hY19maWx0ZXJfbnVtO1xuLVx0c3RydWN0IGVuZXRjX21hY19maWx0ZXIgbWFjX2ZpbHRlciA9IHt9O1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwZi1cdTAwM2VzaS1cdTAwM2VuZGV2O1xuLVx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZXNpLVx1MDAzZWh3O1xuLVx0c3RydWN0IGVuZXRjX21hY19hZGRyICptYWNfdGJsO1xuK1x0c3RydWN0IGVuZXRjX21hY19maWx0ZXIgKm1hY19maWx0ZXIgPSBcdTAwMjZwZi1cdTAwM2VtYWNfZmlsdGVyW1VDXTtcbiBcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4tXHRpbnQgaSA9IDAsIGVycjtcbi1cdGludCBtYWNfY250O1xuK1x0dTY0IGhhc2g7XG4gXG4tXHRuZXRpZl9hZGRyX2xvY2tfYmgobmRldik7XG4rXHRlbmV0Y19yZXNldF9tYWNfYWRkcl9maWx0ZXIobWFjX2ZpbHRlcik7XG4rXHRuZXRkZXZfaHdfYWRkcl9saXN0X2Zvcl9lYWNoKGhhLCB1YylcbitcdFx0ZW5ldGNfYWRkX21hY19hZGRyX2h0X2ZpbHRlcihtYWNfZmlsdGVyLCBoYS1cdTAwM2VhZGRyKTtcbitcbitcdGJpdG1hcF90b19hcnI2NChcdTAwMjZoYXNoLCBtYWNfZmlsdGVyLVx1MDAzZW1hY19oYXNoX3RhYmxlLFxuK1x0XHRcdEVORVRDX01BRERSX0hBU0hfVEJMX1NaKTtcbitcdGVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcihwZi1cdTAwM2VzaSwgMCwgaGFzaCk7XG4rfVxuIFxuLVx0bWFjX2NudCA9IG5ldGRldl91Y19jb3VudChuZGV2KTtcbi1cdGlmICghbWFjX2NudCkge1xuLVx0XHRuZXRpZl9hZGRyX3VubG9ja19iaChuZGV2KTtcbitzdGF0aWMgaW50IGVuZXRjNF9wZl9zZXRfdWNfZXhhY3RfZmlsdGVyKHN0cnVjdCBlbmV0Y19wZiAqcGYsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMpXG4re1xuK1x0c3RydWN0IGVuZXRjX3NpICpzaSA9IHBmLVx1MDAzZXNpO1xuK1x0aW50IGVycjtcbitcbitcdGlmIChuZXRkZXZfaHdfYWRkcl9saXN0X2VtcHR5KHVjKSkge1xuIFx0XHQvKiBjbGVhciBib3RoIE1BQyBoYXNoIGFuZCBleGFjdCBmaWx0ZXJzICovXG4tXHRcdGVuZXRjNF9wZl9zZXRfc2lfdWNfaGFzaF9maWx0ZXIoaHcsIDAsIDApO1xuK1x0XHRlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc2ksIDAsIDApO1xuIFx0XHRlbmV0YzRfcGZfY2xlYXJfbWFmdF9lbnRyaWVzKHBmKTtcbiBcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHRpZiAobWFjX2NudCBcdTAwM2UgbWF4X251bV9tZmUpIHtcbi1cdFx0ZXJyID0gLUVOT1NQQztcbi1cdFx0Z290byB1bmxvY2tfbmV0aWZfYWRkcjtcbi1cdH1cbi1cbi1cdG1hY190YmwgPSBremFsbG9jX29ianMoKm1hY190YmwsIG1hY19jbnQsIEdGUF9BVE9NSUMpO1xuLVx0aWYgKCFtYWNfdGJsKSB7XG4tXHRcdGVyciA9IC1FTk9NRU07XG4tXHRcdGdvdG8gdW5sb2NrX25ldGlmX2FkZHI7XG4tXHR9XG4tXG4tXHRuZXRkZXZfZm9yX2VhY2hfdWNfYWRkcihoYSwgbmRldikge1xuLVx0XHRlbmV0Y19hZGRfbWFjX2FkZHJfaHRfZmlsdGVyKFx1MDAyNm1hY19maWx0ZXIsIGhhLVx1MDAzZWFkZHIpO1xuLVx0XHRldGhlcl9hZGRyX2NvcHkobWFjX3RibFtpKytdLmFkZHIsIGhhLVx1MDAzZWFkZHIpO1xuLVx0fVxuLVxuLVx0bmV0aWZfYWRkcl91bmxvY2tfYmgobmRldik7XG4tXG4tXHQvKiBTZXQgdGVtcG9yYXJ5IHVuaWNhc3QgaGFzaCBmaWx0ZXJzIGluIGNhc2Ugb2YgUnggbG9zcyB3aGVuXG4rXHQvKiBTZXQgdGVtcG9yYXJ5IHVuaWNhc3QgaGFzaCBmaWx0ZXIgaW4gY2FzZSBvZiBSeCBsb3NzIHdoZW5cbiBcdCAqIHVwZGF0aW5nIE1BQyBhZGRyZXNzIGZpbHRlciB0YWJsZVxuIFx0ICovXG4tXHRlbmV0YzRfcGZfc2V0X3NpX3VjX2hhc2hfZmlsdGVyKGh3LCAwLCAqbWFjX2ZpbHRlci5tYWNfaGFzaF90YWJsZSk7XG4rXHRlbmV0YzRfcGZfc2V0X3VjX2hhc2hfZmlsdGVyKHBmLCB1Yyk7XG4gXHRlbmV0YzRfcGZfY2xlYXJfbWFmdF9lbnRyaWVzKHBmKTtcbiBcbi1cdGlmICghZW5ldGM0X3BmX2FkZF9tYWZ0X2VudHJpZXMocGYsIG1hY190YmwsIGkpKVxuLVx0XHRlbmV0YzRfcGZfc2V0X3NpX3VjX2hhc2hfZmlsdGVyKGh3LCAwLCAwKTtcbi1cbi1cdGtmcmVlKG1hY190YmwpO1xuLVxuLVx0cmV0dXJuIDA7XG4tXG4tdW5sb2NrX25ldGlmX2FkZHI6XG4tXHRuZXRpZl9hZGRyX3VubG9ja19iaChuZGV2KTtcbitcdGVyciA9IGVuZXRjNF9wZl9hZGRfbWFmdF9lbnRyaWVzKHBmLCB1Yyk7XG4rXHRpZiAoIWVycikge1xuK1x0XHRlbmV0Y19yZXNldF9tYWNfYWRkcl9maWx0ZXIoXHUwMDI2cGYtXHUwMDNlbWFjX2ZpbHRlcltVQ10pO1xuK1x0XHRlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc2ksIDAsIDApO1xuK1x0fVxuIFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9tYWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3BmICpwZiwgaW50IHR5cGUpXG4rc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9tY19oYXNoX2ZpbHRlcihzdHJ1Y3QgZW5ldGNfcGYgKnBmLFxuK1x0XHRcdFx0XHQgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jKVxuIHtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGYtXHUwMDNlc2ktXHUwMDNlbmRldjtcbi1cdHN0cnVjdCBlbmV0Y19tYWNfZmlsdGVyICptYWNfZmlsdGVyO1xuLVx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZXNpLVx1MDAzZWh3O1xuK1x0c3RydWN0IGVuZXRjX21hY19maWx0ZXIgKm1hY19maWx0ZXIgPSBcdTAwMjZwZi1cdTAwM2VtYWNfZmlsdGVyW01DXTtcbiBcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4rXHR1NjQgaGFzaDtcbiBcbi1cdG5ldGlmX2FkZHJfbG9ja19iaChuZGV2KTtcbi1cdGlmICh0eXBlIFx1MDAyNiBFTkVUQ19NQUNfRklMVEVSX1RZUEVfVUMpIHtcbi1cdFx0bWFjX2ZpbHRlciA9IFx1MDAyNnBmLVx1MDAzZW1hY19maWx0ZXJbVUNdO1xuLVx0XHRlbmV0Y19yZXNldF9tYWNfYWRkcl9maWx0ZXIobWFjX2ZpbHRlcik7XG4tXHRcdG5ldGRldl9mb3JfZWFjaF91Y19hZGRyKGhhLCBuZGV2KVxuLVx0XHRcdGVuZXRjX2FkZF9tYWNfYWRkcl9odF9maWx0ZXIobWFjX2ZpbHRlciwgaGEtXHUwMDNlYWRkcik7XG4tXG4tXHRcdGVuZXRjNF9wZl9zZXRfc2lfdWNfaGFzaF9maWx0ZXIoaHcsIDAsXG4tXHRcdFx0XHRcdFx0Km1hY19maWx0ZXItXHUwMDNlbWFjX2hhc2hfdGFibGUpO1xuLVx0fVxuK1x0ZW5ldGNfcmVzZXRfbWFjX2FkZHJfZmlsdGVyKG1hY19maWx0ZXIpO1xuK1x0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgbWMpXG4rXHRcdGVuZXRjX2FkZF9tYWNfYWRkcl9odF9maWx0ZXIobWFjX2ZpbHRlciwgaGEtXHUwMDNlYWRkcik7XG4gXG4tXHRpZiAodHlwZSBcdTAwMjYgRU5FVENfTUFDX0ZJTFRFUl9UWVBFX01DKSB7XG4tXHRcdG1hY19maWx0ZXIgPSBcdTAwMjZwZi1cdTAwM2VtYWNfZmlsdGVyW01DXTtcbi1cdFx0ZW5ldGNfcmVzZXRfbWFjX2FkZHJfZmlsdGVyKG1hY19maWx0ZXIpO1xuLVx0XHRuZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihoYSwgbmRldilcbi1cdFx0XHRlbmV0Y19hZGRfbWFjX2FkZHJfaHRfZmlsdGVyKG1hY19maWx0ZXIsIGhhLVx1MDAzZWFkZHIpO1xuLVxuLVx0XHRlbmV0YzRfcGZfc2V0X3NpX21jX2hhc2hfZmlsdGVyKGh3LCAwLFxuLVx0XHRcdFx0XHRcdCptYWNfZmlsdGVyLVx1MDAzZW1hY19oYXNoX3RhYmxlKTtcbi1cdH1cbi1cdG5ldGlmX2FkZHJfdW5sb2NrX2JoKG5kZXYpO1xuK1x0Yml0bWFwX3RvX2FycjY0KFx1MDAyNmhhc2gsIG1hY19maWx0ZXItXHUwMDNlbWFjX2hhc2hfdGFibGUsXG4rXHRcdFx0RU5FVENfTUFERFJfSEFTSF9UQkxfU1opO1xuK1x0ZW5ldGNfc2V0X3NpX21jX2hhc2hfZmlsdGVyKHBmLVx1MDAzZXNpLCAwLCBoYXNoKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9tYWNfZmlsdGVyKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGludCB0eXBlKVxuK3N0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfbWFjX2ZpbHRlcihzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBpbnQgdHlwZSxcbitcdFx0XHRcdCAgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpXG4ge1xuIFx0LyogQ3VycmVudGx5LCB0aGUgTUFDIGFkZHJlc3MgZmlsdGVyIHRhYmxlIChNQUZUKSBvbmx5IGhhcyA0IGVudHJpZXMsXG4gXHQgKiBhbmQgbXVsdGlwbGUgbXVsdGljYXN0IGFkZHJlc3NlcyBmb3IgZmlsdGVyaW5nIHdpbGwgYmUgY29uZmlndXJlZFxuQEAgLTI1OCwxNSArMjA1LDE2IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfbWFjX2ZpbHRlcihzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBpbnQgdHlwZSlcbiBcdCAqIHVuaWNhc3QgZmlsdGVyaW5nLiBJZiB0aGUgbnVtYmVyIG9mIHVuaWNhc3QgYWRkcmVzc2VzIGV4Y2VlZHMgdGhlXG4gXHQgKiB0YWJsZSBjYXBhY2l0eSwgdGhlIE1BQyBoYXNoIGZpbHRlciB3aWxsIGJlIHVzZWQuXG4gXHQgKi9cbi1cdGlmICh0eXBlIFx1MDAyNiBFTkVUQ19NQUNfRklMVEVSX1RZUEVfVUMgXHUwMDI2XHUwMDI2IGVuZXRjNF9wZl9zZXRfdWNfZXhhY3RfZmlsdGVyKHBmKSkge1xuK1x0aWYgKHR5cGUgXHUwMDI2IEVORVRDX01BQ19GSUxURVJfVFlQRV9VQyBcdTAwMjZcdTAwMjZcbitcdCAgICBlbmV0YzRfcGZfc2V0X3VjX2V4YWN0X2ZpbHRlcihwZiwgdWMpKSB7XG4gXHRcdC8qIEZhbGwgYmFjayB0byB0aGUgTUFDIGhhc2ggZmlsdGVyICovXG4tXHRcdGVuZXRjNF9wZl9zZXRfbWFjX2hhc2hfZmlsdGVyKHBmLCBFTkVUQ19NQUNfRklMVEVSX1RZUEVfVUMpO1xuK1x0XHRlbmV0YzRfcGZfc2V0X3VjX2hhc2hfZmlsdGVyKHBmLCB1Yyk7XG4gXHRcdC8qIENsZWFyIHRoZSBvbGQgTUFDIGV4YWN0IGZpbHRlciAqL1xuIFx0XHRlbmV0YzRfcGZfY2xlYXJfbWFmdF9lbnRyaWVzKHBmKTtcbiBcdH1cbiBcbiBcdGlmICh0eXBlIFx1MDAyNiBFTkVUQ19NQUNfRklMVEVSX1RZUEVfTUMpXG4tXHRcdGVuZXRjNF9wZl9zZXRfbWFjX2hhc2hfZmlsdGVyKHBmLCBFTkVUQ19NQUNfRklMVEVSX1RZUEVfTUMpO1xuK1x0XHRlbmV0YzRfcGZfc2V0X21jX2hhc2hfZmlsdGVyKHBmLCBtYyk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZW5ldGNfcGZfb3BzIGVuZXRjNF9wZl9vcHMgPSB7XG5AQCAtMzA2LDM0ICsyNTQsMzUgQEAgc3RhdGljIHZvaWQgZW5ldGM0X2RlZmF1bHRfcmluZ3NfYWxsb2NhdGlvbihzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuIHtcbiBcdHN0cnVjdCBlbmV0Y19odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2VzaS1cdTAwM2VodztcbiBcdHUzMiBudW1fcnhfYmRyLCBudW1fdHhfYmRyLCB2YWw7XG4rXHRpbnQgbnVtX3ZmcyA9IHBmLVx1MDAzZXRvdGFsX3ZmcztcbiBcdHUzMiB2Zl90eF9iZHIsIHZmX3J4X2JkcjtcbiBcdGludCBpLCByeF9yZW0sIHR4X3JlbTtcbiBcbi1cdGlmIChwZi1cdTAwM2VjYXBzLm51bV9yeF9iZHIgXHUwMDNjIEVORVRDX1NJX01BWF9SSU5HX05VTSArIHBmLVx1MDAzZWNhcHMubnVtX3ZzaSlcbi1cdFx0bnVtX3J4X2JkciA9IHBmLVx1MDAzZWNhcHMubnVtX3J4X2JkciAtIHBmLVx1MDAzZWNhcHMubnVtX3ZzaTtcbitcdGlmIChwZi1cdTAwM2VjYXBzLm51bV9yeF9iZHIgXHUwMDNjIEVORVRDX1NJX01BWF9SSU5HX05VTSArIG51bV92ZnMpXG4rXHRcdG51bV9yeF9iZHIgPSBwZi1cdTAwM2VjYXBzLm51bV9yeF9iZHIgLSBudW1fdmZzO1xuIFx0ZWxzZVxuIFx0XHRudW1fcnhfYmRyID0gRU5FVENfU0lfTUFYX1JJTkdfTlVNO1xuIFxuLVx0aWYgKHBmLVx1MDAzZWNhcHMubnVtX3R4X2JkciBcdTAwM2MgRU5FVENfU0lfTUFYX1JJTkdfTlVNICsgcGYtXHUwMDNlY2Fwcy5udW1fdnNpKVxuLVx0XHRudW1fdHhfYmRyID0gcGYtXHUwMDNlY2Fwcy5udW1fdHhfYmRyIC0gcGYtXHUwMDNlY2Fwcy5udW1fdnNpO1xuK1x0aWYgKHBmLVx1MDAzZWNhcHMubnVtX3R4X2JkciBcdTAwM2MgRU5FVENfU0lfTUFYX1JJTkdfTlVNICsgbnVtX3ZmcylcbitcdFx0bnVtX3R4X2JkciA9IHBmLVx1MDAzZWNhcHMubnVtX3R4X2JkciAtIG51bV92ZnM7XG4gXHRlbHNlXG4gXHRcdG51bV90eF9iZHIgPSBFTkVUQ19TSV9NQVhfUklOR19OVU07XG4gXG4gXHR2YWwgPSBlbmV0YzRfcHNpY2ZncjBfdmFsX2NvbnN0cnVjdChmYWxzZSwgbnVtX3R4X2JkciwgbnVtX3J4X2Jkcik7XG4gXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJQ0ZHUjAoMCksIHZhbCk7XG4gXG4tXHRpZiAoIXBmLVx1MDAzZWNhcHMubnVtX3ZzaSlcbitcdGlmICghbnVtX3ZmcylcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bnVtX3J4X2JkciA9IHBmLVx1MDAzZWNhcHMubnVtX3J4X2JkciAtIG51bV9yeF9iZHI7XG4tXHRyeF9yZW0gPSBudW1fcnhfYmRyICUgcGYtXHUwMDNlY2Fwcy5udW1fdnNpO1xuLVx0bnVtX3J4X2JkciA9IG51bV9yeF9iZHIgLyBwZi1cdTAwM2VjYXBzLm51bV92c2k7XG4rXHRyeF9yZW0gPSBudW1fcnhfYmRyICUgbnVtX3ZmcztcbitcdG51bV9yeF9iZHIgPSBudW1fcnhfYmRyIC8gbnVtX3ZmcztcbiBcbiBcdG51bV90eF9iZHIgPSBwZi1cdTAwM2VjYXBzLm51bV90eF9iZHIgLSBudW1fdHhfYmRyO1xuLVx0dHhfcmVtID0gbnVtX3R4X2JkciAlIHBmLVx1MDAzZWNhcHMubnVtX3ZzaTtcbi1cdG51bV90eF9iZHIgPSBudW1fdHhfYmRyIC8gcGYtXHUwMDNlY2Fwcy5udW1fdnNpO1xuK1x0dHhfcmVtID0gbnVtX3R4X2JkciAlIG51bV92ZnM7XG4rXHRudW1fdHhfYmRyID0gbnVtX3R4X2JkciAvIG51bV92ZnM7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZi1cdTAwM2VjYXBzLm51bV92c2k7IGkrKykge1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3ZmczsgaSsrKSB7XG4gXHRcdHZmX3R4X2JkciA9IChpIFx1MDAzYyB0eF9yZW0pID8gbnVtX3R4X2JkciArIDEgOiBudW1fdHhfYmRyO1xuIFx0XHR2Zl9yeF9iZHIgPSAoaSBcdTAwM2MgcnhfcmVtKSA/IG51bV9yeF9iZHIgKyAxIDogbnVtX3J4X2JkcjtcbiBcdFx0dmFsID0gZW5ldGM0X3BzaWNmZ3IwX3ZhbF9jb25zdHJ1Y3QodHJ1ZSwgdmZfdHhfYmRyLCB2Zl9yeF9iZHIpO1xuQEAgLTM0Niw1MyArMjk1LDcwIEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9hbGxvY2F0ZV9zaV9yaW5ncyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuIFx0ZW5ldGM0X2RlZmF1bHRfcmluZ3NfYWxsb2NhdGlvbihwZik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfc2lfdmxhbl9wcm9taXNjKHN0cnVjdCBlbmV0Y19odyAqaHcsIGludCBzaSwgYm9vbCBlbilcbi17XG4tXHR1MzIgdmFsID0gZW5ldGNfcG9ydF9yZChodywgRU5FVEM0X1BTSVBWTVIpO1xuLVxuLVx0aWYgKGVuKVxuLVx0XHR2YWwgfD0gQklUKHNpKTtcbi1cdGVsc2Vcbi1cdFx0dmFsIFx1MDAyNj0gfkJJVChzaSk7XG4tXG4tXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJUFZNUiwgdmFsKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgZW5ldGM0X3NldF9kZWZhdWx0X3NpX3ZsYW5fcHJvbWlzYyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuLXtcbi1cdHN0cnVjdCBlbmV0Y19odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2VzaS1cdTAwM2Vodztcbi1cdGludCBudW1fc2kgPSBwZi1cdTAwM2VjYXBzLm51bV92c2kgKyAxO1xuLVx0aW50IGk7XG4tXG4tXHQvKiBlbmZvcmNlIFZMQU4gcHJvbWlzY3VvdXMgbW9kZSBmb3IgYWxsIFNJcyAqL1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3NpOyBpKyspXG4tXHRcdGVuZXRjNF9wZl9zZXRfc2lfdmxhbl9wcm9taXNjKGh3LCBpLCB0cnVlKTtcbi19XG4tXG4gLyogQWxsb2NhdGUgdGhlIG51bWJlciBvZiBNU0ktWCB2ZWN0b3JzIGZvciBwZXIgU0kuICovXG4gc3RhdGljIHZvaWQgZW5ldGM0X3NldF9zaV9tc2l4X251bShzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuIHtcbitcdGludCB2YWxpZF9udW1fc2kgPSBwZi1cdTAwM2V0b3RhbF92ZnMgKyAxO1xuIFx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZXNpLVx1MDAzZWh3O1xuLVx0aW50IGksIG51bV9tc2l4LCB0b3RhbF9zaTtcbitcdGludCBpLCBudW1fbXNpeCwgbnVtX3ZzaTtcbiBcdHUzMiB2YWw7XG4gXG4tXHR0b3RhbF9zaSA9IHBmLVx1MDAzZWNhcHMubnVtX3ZzaSArIDE7XG4rXHR2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBFTkVUQzRfRUNBUFIxKTtcbitcdG51bV92c2kgPSBGSUVMRF9HRVQoRUNBUFIxX05VTV9WU0ksIHZhbCk7XG4rXG4rXHQvKiBUaGUgUFNJYUNGR1IyW05VTV9NU0lYXSBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBNU0ktWCBhbGxvY2F0ZWQgdG9cbitcdCAqIHRoZSBTSSBpcyBOVU1fTVNJWCArIDEsIHNvIHRoZSBtaW5pbXVtIG51bWJlciBvZiBNU0ktWCBhbGxvY2F0ZWQgdG9cbitcdCAqIGVhY2ggU0kgaXMgMS4gVGhlIHRvdGFsIG51bWJlciBvZiBNU0ktWCBhbGxvY2F0ZWQgdG8gUFNJIGFuZCBWU0lzXG4rXHQgKiBjYW5ub3QgZXhjZWVkIHRoZSB0b3RhbCBudW1iZXIgb2YgTVNJLVggb3duZWQgYnkgdGhpcyBFTkVUQywgd2hpY2hcbitcdCAqIGlzIEVDQVBSMVtOVU1fTVNJWF0uIE90aGVyd2lzZSwgd2hlbiBtdWx0aXBsZSBFTkVUQyBpbnN0YW5jZXMgZXhpc3QsXG4rXHQgKiBpdCB3aWxsIGFmZmVjdCBvdGhlciBFTkVUQ3Mgd2hvc2UgTVNJLVggaW50ZXJydXB0cyBjYW5ub3QgYmVcbitcdCAqIGdlbmVyYXRlZC4gVGhpcyBpcyBzaW1pbGFyIHRvIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzOiB0aGUgYXJyYXlcbitcdCAqIGl0c2VsZiBpcyBub3QgYWZmZWN0ZWQsIGJ1dCBhZGphY2VudCBhcnJheXMgd2lsbCBiZSBjb3JydXB0ZWQuXG4rXHQgKlxuK1x0ICogcGYtXHUwMDNldG90YWxfdmZzIGlzIDAgaWYgQ09ORklHX1BDSV9JT1YgaXMgZGlzYWJsZWQuIElmIHRoZSBoYXJkd2FyZVxuK1x0ICogaXRzZWxmIHN1cHBvcnRzIFNSLUlPViwgdGhlbiB3aGVuIGFsbG9jYXRpbmcgdGhlIG51bWJlciBvZiBNU0lYcyB0b1xuK1x0ICogdGhlIFNJLCBpdCBtdXN0IGJlIHRha2VuIGludG8gYWNjb3VudCB0aGF0IHRoZSBWU0kgaGFzIGF0IGxlYXN0IDFcbitcdCAqIE1TSVgsIGFuZCB0aGUgdG90YWwgbnVtYmVyIG9mIE1TSVhzIG9mIGFsbCBTSXMgY2Fubm90IGV4Y2VlZFxuK1x0ICogRUNBUFIxW05VTV9NU0lYXS5cbitcdCAqL1xuK1x0aWYgKCFwZi1cdTAwM2V0b3RhbF92ZnMgXHUwMDI2XHUwMDI2IG51bV92c2kpIHtcbitcdFx0LyogQmVjYXVzZSBlYWNoIFNJIGhhcyBhdCBsZWFzdCBvbmUgTVNJWCwgYW5kIGZyb20gdGhlIGhhcmR3YXJlXG4rXHRcdCAqIHBlcnNwZWN0aXZlLCBwZi1cdTAwM2VjYXBzLm51bV9tc2l4IHdpbGwgYWx3YXlzIGJlIGdyZWF0ZXIgdGhhblxuK1x0XHQgKiBudW1fdnNpLiBTbyBudW1fbXNpeCBpcyBhbHdheXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAuXG4rXHRcdCAqL1xuK1x0XHRudW1fbXNpeCA9IHBmLVx1MDAzZWNhcHMubnVtX21zaXggLSBudW1fdnNpIC0gMTtcbitcdFx0aWYgKG51bV9tc2l4IFx1MDAzZSBQU0lDRkdSMl9OVU1fTVNJWClcbitcdFx0XHRudW1fbXNpeCA9IFBTSUNGR1IyX05VTV9NU0lYO1xuK1x0XHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJQ0ZHUjIoMCksIG51bV9tc2l4KTtcbiBcbi1cdG51bV9tc2l4ID0gcGYtXHUwMDNlY2Fwcy5udW1fbXNpeCAvIHRvdGFsX3NpICtcbi1cdFx0ICAgcGYtXHUwMDNlY2Fwcy5udW1fbXNpeCAlIHRvdGFsX3NpIC0gMTtcbi1cdHZhbCA9IG51bV9tc2l4IFx1MDAyNiBQU0lDRkdSMl9OVU1fTVNJWDtcbi1cdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lDRkdSMigwKSwgdmFsKTtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3ZzaTsgaSsrKVxuK1x0XHRcdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lDRkdSMihpICsgMSksIDApO1xuIFxuLVx0bnVtX21zaXggPSBwZi1cdTAwM2VjYXBzLm51bV9tc2l4IC8gdG90YWxfc2kgLSAxO1xuLVx0dmFsID0gbnVtX21zaXggXHUwMDI2IFBTSUNGR1IyX05VTV9NU0lYO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGYtXHUwMDNlY2Fwcy5udW1fdnNpOyBpKyspXG4tXHRcdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lDRkdSMihpICsgMSksIHZhbCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qIExpa2V3aXNlLCBmcm9tIHRoZSBoYXJkd2FyZSBwZXJzcGVjdGl2ZSBwZi1cdTAwM2VjYXBzLm51bV9tc2l4IGlzIGFsd2F5c1xuK1x0ICogZ3JlYXRlciB0aGFuIHZhbGlkX251bV9zaS4gU28gbnVtX21zaXggaXMgYWx3YXlzIGdyZWF0ZXIgdGhhbiBvclxuK1x0ICogZXF1YWwgdG8gMC5cbitcdCAqL1xuK1x0bnVtX21zaXggPSBwZi1cdTAwM2VjYXBzLm51bV9tc2l4IC8gdmFsaWRfbnVtX3NpICtcbitcdFx0ICAgcGYtXHUwMDNlY2Fwcy5udW1fbXNpeCAlIHZhbGlkX251bV9zaSAtIDE7XG4rXHRpZiAobnVtX21zaXggXHUwMDNlIFBTSUNGR1IyX05VTV9NU0lYKVxuK1x0XHRudW1fbXNpeCA9IFBTSUNGR1IyX05VTV9NU0lYO1xuK1x0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSUNGR1IyKDApLCBudW1fbXNpeCk7XG4rXG4rXHRudW1fbXNpeCA9IHBmLVx1MDAzZWNhcHMubnVtX21zaXggLyB2YWxpZF9udW1fc2kgLSAxO1xuK1x0aWYgKG51bV9tc2l4IFx1MDAzZSBQU0lDRkdSMl9OVU1fTVNJWClcbitcdFx0bnVtX21zaXggPSBQU0lDRkdSMl9OVU1fTVNJWDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmLVx1MDAzZXRvdGFsX3ZmczsgaSsrKVxuK1x0XHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJQ0ZHUjIoaSArIDEpLCBudW1fbXNpeCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGVuZXRjNF9lbmFibGVfYWxsX3NpKHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4ge1xuIFx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZXNpLVx1MDAzZWh3O1xuLVx0aW50IG51bV9zaSA9IHBmLVx1MDAzZWNhcHMubnVtX3ZzaSArIDE7XG4rXHRpbnQgbnVtX3NpID0gcGYtXHUwMDNldG90YWxfdmZzICsgMTtcbiBcdHUzMiBzaV9iaXRtYXAgPSAwO1xuIFx0aW50IGk7XG4gXG5AQCAtNDEyLDcgKzM3OCw5IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9jb25maWd1cmVfcG9ydF9zaShzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuIFx0LyogT3V0ZXIgVkxBTiB0YWcgd2lsbCBiZSB1c2VkIGZvciBWTEFOIGZpbHRlcmluZyAqL1xuIFx0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSVZMQU5GTVIsIFBTSVZMQU5GTVJfVlMpO1xuIFxuLVx0ZW5ldGM0X3NldF9kZWZhdWx0X3NpX3ZsYW5fcHJvbWlzYyhwZik7XG4rXHQvKiBFbmZvcmNlIFZMQU4gcHJvbWlzY3VvdXMgbW9kZSBmb3IgYWxsIFNJcyAqL1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHBmLVx1MDAzZXRvdGFsX3ZmcyArIDE7IGkrKylcbitcdFx0ZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzYyhwZi1cdTAwM2VzaSwgaSwgdHJ1ZSk7XG4gXG4gXHQvKiBEaXNhYmxlIFNJIE1BQyBtdWx0aWNhc3QgXHUwMDI2IHVuaWNhc3QgcHJvbWlzY3VvdXMgKi9cbiBcdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lQTU1SLCAwKTtcbkBAIC00NTAsMTggKzQxOCw2MCBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfY29uZmlndXJlX3BvcnQoc3RydWN0IGVuZXRjX3BmICpwZilcbiBcdGVuZXRjX3NldF9kZWZhdWx0X3Jzc19rZXkocGYpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBlbmV0YzRfZ2V0X250bXBfY2FwcyhzdHJ1Y3QgZW5ldGNfc2kgKnNpKVxuK3tcbitcdHN0cnVjdCBudG1wX3VzZXIgKnVzZXIgPSBcdTAwMjZzaS1cdTAwM2VudG1wX3VzZXI7XG4rXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXHUwMDI2c2ktXHUwMDNlaHc7XG4rXHR1MzIgdmFsO1xuK1xuK1x0dmFsID0gZW5ldGNfcG9ydF9yZChodywgRU5FVEM0X1BTSU1BRkNBUFIpO1xuK1x0dXNlci1cdTAwM2VtYWZ0X251bV9lbnRyaWVzID0gRklFTERfR0VUKFBTSU1BRkNBUFJfTlVNX01BQ19BRlRFLCB2YWwpO1xuK31cbitcbitzdGF0aWMgaW50IGVuZXRjNF9udG1wX2JpdG1hcF9pbml0KHN0cnVjdCBudG1wX3VzZXIgKnVzZXIpXG4re1xuK1x0dXNlci1cdTAwM2VtYWZ0X2VpZF9iaXRtYXAgPSBiaXRtYXBfemFsbG9jKHVzZXItXHUwMDNlbWFmdF9udW1fZW50cmllcyxcbitcdFx0XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXVzZXItXHUwMDNlbWFmdF9laWRfYml0bWFwKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBlbmV0YzRfbnRtcF9iaXRtYXBfZnJlZShzdHJ1Y3QgbnRtcF91c2VyICp1c2VyKVxuK3tcbitcdGJpdG1hcF9mcmVlKHVzZXItXHUwMDNlbWFmdF9laWRfYml0bWFwKTtcbitcdHVzZXItXHUwMDNlbWFmdF9laWRfYml0bWFwID0gTlVMTDtcbit9XG4rXG4gc3RhdGljIGludCBlbmV0YzRfaW5pdF9udG1wX3VzZXIoc3RydWN0IGVuZXRjX3NpICpzaSlcbiB7XG4gXHRzdHJ1Y3QgbnRtcF91c2VyICp1c2VyID0gXHUwMDI2c2ktXHUwMDNlbnRtcF91c2VyO1xuK1x0aW50IGVycjtcbiBcbiBcdC8qIEZvciBFTkVUQyA0LjEsIGFsbCB0YWJsZSB2ZXJzaW9ucyBhcmUgMCAqL1xuIFx0bWVtc2V0KFx1MDAyNnVzZXItXHUwMDNldGJsLCAwLCBzaXplb2YodXNlci1cdTAwM2V0YmwpKTtcbiBcbi1cdHJldHVybiBlbmV0YzRfc2V0dXBfY2JkcihzaSk7XG4rXHRlcnIgPSBlbmV0YzRfc2V0dXBfY2JkcihzaSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0ZW5ldGM0X2dldF9udG1wX2NhcHMoc2kpO1xuK1x0ZXJyID0gZW5ldGM0X250bXBfYml0bWFwX2luaXQodXNlcik7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIHRlYXJkb3duX2NiZHI7XG4rXG4rXHRyZXR1cm4gMDtcbitcbit0ZWFyZG93bl9jYmRyOlxuK1x0ZW5ldGM0X3RlYXJkb3duX2NiZHIoc2kpO1xuK1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZW5ldGM0X2ZyZWVfbnRtcF91c2VyKHN0cnVjdCBlbmV0Y19zaSAqc2kpXG4ge1xuK1x0ZW5ldGM0X250bXBfYml0bWFwX2ZyZWUoXHUwMDI2c2ktXHUwMDNlbnRtcF91c2VyKTtcbiBcdGVuZXRjNF90ZWFyZG93bl9jYmRyKHNpKTtcbiB9XG4gXG5AQCAtNDc5LDcgKzQ4OSw3IEBAIHN0YXRpYyBpbnQgZW5ldGM0X3BmX2luaXQoc3RydWN0IGVuZXRjX3BmICpwZilcbiBcbiBcdGVyciA9IGVuZXRjNF9pbml0X250bXBfdXNlcihwZi1cdTAwM2VzaSk7XG4gXHRpZiAoZXJyKSB7XG4tXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byBpbml0IENCRFJcXG5cIik7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byBpbml0IE5UTVAgdXNlclxcblwiKTtcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbkBAIC00OTMsMTggKzUwMywxNyBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfcGZfZnJlZShzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuIFx0ZW5ldGM0X2ZyZWVfbnRtcF91c2VyKHBmLVx1MDAzZXNpKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgZW5ldGM0X3BzaV9kb19zZXRfcnhfbW9kZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4rc3RhdGljIGludCBlbmV0YzRfcGZfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4rXHRcdFx0XHQgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjLFxuK1x0XHRcdFx0IHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICptYylcbiB7XG4tXHRzdHJ1Y3QgZW5ldGNfc2kgKnNpID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBlbmV0Y19zaSwgcnhfbW9kZV90YXNrKTtcbi1cdHN0cnVjdCBlbmV0Y19wZiAqcGYgPSBlbmV0Y19zaV9wcml2KHNpKTtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gc2ktXHUwMDNlbmRldjtcbi1cdHN0cnVjdCBlbmV0Y19odyAqaHcgPSBcdTAwMjZzaS1cdTAwM2VodztcbitcdHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdHN0cnVjdCBlbmV0Y19wZiAqcGYgPSBlbmV0Y19zaV9wcml2KHByaXYtXHUwMDNlc2kpO1xuK1x0c3RydWN0IGVuZXRjX3NpICpzaSA9IHByaXYtXHUwMDNlc2k7XG4gXHRib29sIHVjX3Byb21pc2MgPSBmYWxzZTtcbiBcdGJvb2wgbWNfcHJvbWlzYyA9IGZhbHNlO1xuIFx0aW50IHR5cGUgPSAwO1xuIFxuLVx0cnRubF9sb2NrKCk7XG4tXG4gXHRpZiAobmRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1BST01JU0MpIHtcbiBcdFx0dWNfcHJvbWlzYyA9IHRydWU7XG4gXHRcdG1jX3Byb21pc2MgPSB0cnVlO1xuQEAgLTUxNSwyOCArNTI0LDIxIEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wc2lfZG9fc2V0X3J4X21vZGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHR0eXBlID0gRU5FVENfTUFDX0ZJTFRFUl9UWVBFX0FMTDtcbiBcdH1cbiBcbi1cdGVuZXRjNF9wZl9zZXRfc2lfbWFjX3Byb21pc2MoaHcsIDAsIHVjX3Byb21pc2MsIG1jX3Byb21pc2MpO1xuK1x0ZW5ldGNfc2V0X3NpX3VjX3Byb21pc2Moc2ksIDAsIHVjX3Byb21pc2MpO1xuK1x0ZW5ldGNfc2V0X3NpX21jX3Byb21pc2Moc2ksIDAsIG1jX3Byb21pc2MpO1xuIFxuIFx0aWYgKHVjX3Byb21pc2MpIHtcbi1cdFx0ZW5ldGM0X3BmX3NldF9zaV91Y19oYXNoX2ZpbHRlcihodywgMCwgMCk7XG4rXHRcdGVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcihzaSwgMCwgMCk7XG4gXHRcdGVuZXRjNF9wZl9jbGVhcl9tYWZ0X2VudHJpZXMocGYpO1xuIFx0fVxuIFxuIFx0aWYgKG1jX3Byb21pc2MpXG4tXHRcdGVuZXRjNF9wZl9zZXRfc2lfbWNfaGFzaF9maWx0ZXIoaHcsIDAsIDApO1xuK1x0XHRlbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXIoc2ksIDAsIDApO1xuIFxuIFx0LyogU2V0IG5ldyBNQUMgZmlsdGVyICovXG4tXHRlbmV0YzRfcGZfc2V0X21hY19maWx0ZXIocGYsIHR5cGUpO1xuK1x0ZW5ldGM0X3BmX3NldF9tYWNfZmlsdGVyKHBmLCB0eXBlLCB1YywgbWMpO1xuIFxuLVx0cnRubF91bmxvY2soKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLXtcbi1cdHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbi1cdHN0cnVjdCBlbmV0Y19zaSAqc2kgPSBwcml2LVx1MDAzZXNpO1xuLVxuLVx0cXVldWVfd29yayhzaS1cdTAwM2V3b3JrcXVldWUsIFx1MDAyNnNpLVx1MDAzZXJ4X21vZGVfdGFzayk7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBlbmV0YzRfcGZfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuQEAgLTU0NCwxMiArNTQ2LDExIEBAIHN0YXRpYyBpbnQgZW5ldGM0X3BmX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiB7XG4gXHRuZXRkZXZfZmVhdHVyZXNfdCBjaGFuZ2VkID0gbmRldi1cdTAwM2VmZWF0dXJlcyBeIGZlYXR1cmVzO1xuIFx0c3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuLVx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnByaXYtXHUwMDNlc2ktXHUwMDNlaHc7XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSB7XG4gXHRcdGJvb2wgcHJvbWlzY19lbiA9ICEoZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUik7XG4gXG4tXHRcdGVuZXRjNF9wZl9zZXRfc2lfdmxhbl9wcm9taXNjKGh3LCAwLCBwcm9taXNjX2VuKTtcbitcdFx0ZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzYyhwcml2LVx1MDAzZXNpLCAwLCBwcm9taXNjX2VuKTtcbiBcdH1cbiBcbiBcdGlmIChjaGFuZ2VkIFx1MDAyNiBORVRJRl9GX0xPT1BCQUNLKVxuQEAgLTU2Niw3ICs1NjcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVuZXRjNF9uZGV2X29wcyA9IHtcbiBcdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IGVuZXRjX3htaXQsXG4gXHQubmRvX2dldF9zdGF0c1x0XHQ9IGVuZXRjX2dldF9zdGF0cyxcbiBcdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IGVuZXRjX3BmX3NldF9tYWNfYWRkcixcbi1cdC5uZG9fc2V0X3J4X21vZGVcdD0gZW5ldGM0X3BmX3NldF9yeF9tb2RlLFxuK1x0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1x0PSBlbmV0YzRfcGZfc2V0X3J4X21vZGUsXG4gXHQubmRvX3NldF9mZWF0dXJlc1x0PSBlbmV0YzRfcGZfc2V0X2ZlYXR1cmVzLFxuIFx0Lm5kb192bGFuX3J4X2FkZF92aWRcdD0gZW5ldGNfdmxhbl9yeF9hZGRfdmlkLFxuIFx0Lm5kb192bGFuX3J4X2tpbGxfdmlkXHQ9IGVuZXRjX3ZsYW5fcnhfZGVsX3ZpZCxcbkBAIC02MDIsMTEgKzYwMyw2IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9tYWNfY29uZmlnKHN0cnVjdCBlbmV0Y19wZiAqcGYsIHVuc2lnbmVkIGludCBtb2RlLFxuIFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfUlhJRDpcbiBcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1RYSUQ6XG4gXHRcdHZhbCB8PSBJRk1PREVfUkdNSUk7XG4tXHRcdC8qIFdlIG5lZWQgdG8gZW5hYmxlIGF1dG8tbmVnb3RpYXRpb24gZm9yIHRoZSBNQUNcbi1cdFx0ICogaWYgaXRzIFJHTUlJIGludGVyZmFjZSBzdXBwb3J0IEluLUJhbmQgc3RhdHVzLlxuLVx0XHQgKi9cbi1cdFx0aWYgKHBoeWxpbmtfYXV0b25lZ19pbmJhbmQobW9kZSkpXG4tXHRcdFx0dmFsIHw9IFBNX0lGX01PREVfRU5BO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUk6XG4gXHRcdHZhbCB8PSBJRk1PREVfUk1JSTtcbkBAIC02MTYsNyArNjEyLDYgQEAgc3RhdGljIHZvaWQgZW5ldGM0X21hY19jb25maWcoc3RydWN0IGVuZXRjX3BmICpwZiwgdW5zaWduZWQgaW50IG1vZGUsXG4gXHRcdHZhbCB8PSBJRk1PREVfU0dNSUk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVI6XG4tXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9YR01JSTpcbiBcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk6XG4gXHRcdHZhbCB8PSBJRk1PREVfWEdNSUk7XG4gXHRcdGJyZWFrO1xuQEAgLTY0MiwyNiArNjM3LDE5IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9zZXRfcG9ydF9zcGVlZChzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2LCBpbnQgc3BlZWQpXG4gXHR1MzIgb2xkX3NwZWVkID0gcHJpdi1cdTAwM2VzcGVlZDtcbiBcdHUzMiB2YWw7XG4gXG4rXHQvKiBJZiB0aGUgc3BlZWQgaXMgdW5rbm93biwgdXNlIHRoZSBtaW5pbXVtIHZhbHVlICovXG4rXHRpZiAoc3BlZWQgPT0gU1BFRURfVU5LTk9XTikge1xuK1x0XHRzcGVlZCA9IFNQRUVEXzEwO1xuK1x0XHRkZXZfd2Fybihwcml2LVx1MDAzZWRldiwgXCJTcGVlZCB1bmtub3duLCBkZWZhdWx0IGlzIDEwTWJwc1xcblwiKTtcbitcdH1cbitcbiBcdGlmIChzcGVlZCA9PSBvbGRfc3BlZWQpXG4gXHRcdHJldHVybjtcbiBcbi1cdHZhbCA9IGVuZXRjX3BvcnRfcmQoXHUwMDI2cHJpdi1cdTAwM2VzaS1cdTAwM2VodywgRU5FVEM0X1BDUik7XG4tXHR2YWwgXHUwMDI2PSB+UENSX1BTUEVFRDtcbi1cbi1cdHN3aXRjaCAoc3BlZWQpIHtcbi1cdGNhc2UgU1BFRURfMTAwOlxuLVx0Y2FzZSBTUEVFRF8xMDAwOlxuLVx0Y2FzZSBTUEVFRF8yNTAwOlxuLVx0Y2FzZSBTUEVFRF8xMDAwMDpcbi1cdFx0dmFsIHw9IChQQ1JfUFNQRUVEIFx1MDAyNiBQQ1JfUFNQRUVEX1ZBTChzcGVlZCkpO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgU1BFRURfMTA6XG4tXHRkZWZhdWx0OlxuLVx0XHR2YWwgfD0gKFBDUl9QU1BFRUQgXHUwMDI2IFBDUl9QU1BFRURfVkFMKFNQRUVEXzEwKSk7XG4tXHR9XG4tXG4tXHRwcml2LVx1MDAzZXNwZWVkID0gc3BlZWQ7XG4rXHR2YWwgPSBlbmV0Y19wb3J0X3JkKFx1MDAyNnByaXYtXHUwMDNlc2ktXHUwMDNlaHcsIEVORVRDNF9QQ1IpIFx1MDAyNiAoflBDUl9QU1BFRUQpO1xuK1x0dmFsIHw9IFBDUl9QU1BFRURfVkFMKHNwZWVkKTtcbiBcdGVuZXRjX3BvcnRfd3IoXHUwMDI2cHJpdi1cdTAwM2VzaS1cdTAwM2VodywgRU5FVEM0X1BDUiwgdmFsKTtcbitcdHByaXYtXHUwMDNlc3BlZWQgPSBzcGVlZDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZW5ldGM0X3NldF9yZ21paV9tYWMoc3RydWN0IGVuZXRjX3BmICpwZiwgaW50IHNwZWVkLCBpbnQgZHVwbGV4KVxuQEAgLTcxNywyMiArNzA1LDYgQEAgc3RhdGljIHZvaWQgZW5ldGM0X3NldF9ybWlpX21hYyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBpbnQgc3BlZWQsIGludCBkdXBsZXgpXG4gXHRlbmV0Y19wb3J0X21hY193cihzaSwgRU5FVEM0X1BNX0lGX01PREUoMCksIHZhbCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGVuZXRjNF9zZXRfaGRfZmxvd19jb250cm9sKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGJvb2wgZW5hYmxlKVxuLXtcbi1cdHN0cnVjdCBlbmV0Y19zaSAqc2kgPSBwZi1cdTAwM2VzaTtcbi1cdHUzMiBvbGRfdmFsLCB2YWw7XG4tXG4tXHRpZiAoIXBmLVx1MDAzZWNhcHMuaGFsZl9kdXBsZXgpXG4tXHRcdHJldHVybjtcbi1cbi1cdG9sZF92YWwgPSBlbmV0Y19wb3J0X21hY19yZChzaSwgRU5FVEM0X1BNX0NNRF9DRkcoMCkpO1xuLVx0dmFsID0gdTMyX3JlcGxhY2VfYml0cyhvbGRfdmFsLCBlbmFibGUgPyAxIDogMCwgUE1fQ01EX0NGR19IRF9GQ0VOKTtcbi1cdGlmICh2YWwgPT0gb2xkX3ZhbClcbi1cdFx0cmV0dXJuO1xuLVxuLVx0ZW5ldGNfcG9ydF9tYWNfd3Ioc2ksIEVORVRDNF9QTV9DTURfQ0ZHKDApLCB2YWwpO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBlbmV0YzRfc2V0X3J4X3BhdXNlKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGJvb2wgcnhfcGF1c2UpXG4ge1xuIFx0c3RydWN0IGVuZXRjX3NpICpzaSA9IHBmLVx1MDAzZXNpO1xuQEAgLTkwOCwxMyArODgwLDExIEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wbF9tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiBcdHN0cnVjdCBlbmV0Y19wZiAqcGYgPSBwaHlsaW5rX3RvX2VuZXRjX3BmKGNvbmZpZyk7XG4gXHRzdHJ1Y3QgZW5ldGNfc2kgKnNpID0gcGYtXHUwMDNlc2k7XG4gXHRzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2O1xuLVx0Ym9vbCBoZF9mYyA9IGZhbHNlO1xuIFxuIFx0cHJpdiA9IG5ldGRldl9wcml2KHNpLVx1MDAzZW5kZXYpO1xuIFx0ZW5ldGM0X3NldF9wb3J0X3NwZWVkKHByaXYsIHNwZWVkKTtcbiBcbi1cdGlmICghcGh5bGlua19hdXRvbmVnX2luYmFuZChtb2RlKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBwaHlfaW50ZXJmYWNlX21vZGVfaXNfcmdtaWkoaW50ZXJmYWNlKSlcbitcdGlmIChwaHlfaW50ZXJmYWNlX21vZGVfaXNfcmdtaWkoaW50ZXJmYWNlKSlcbiBcdFx0ZW5ldGM0X3NldF9yZ21paV9tYWMocGYsIHNwZWVkLCBkdXBsZXgpO1xuIFxuIFx0aWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcbkBAIC05MjYsMTggKzg5Niw4IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wbF9tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiBcdFx0ICovXG4gXHRcdGlmIChwcml2LVx1MDAzZWFjdGl2ZV9vZmZsb2FkcyBcdTAwMjYgRU5FVENfRl9RQlUpXG4gXHRcdFx0dHhfcGF1c2UgPSBmYWxzZTtcbi1cdH0gZWxzZSB7IC8qIERVUExFWF9IQUxGICovXG4tXHRcdGlmICh0eF9wYXVzZSB8fCByeF9wYXVzZSlcbi1cdFx0XHRoZF9mYyA9IHRydWU7XG4tXG4tXHRcdC8qIEFzIHBlciA4MDIuMyBhbm5leCAzMUIsIFBBVVNFIGZyYW1lcyBhcmUgb25seSBzdXBwb3J0ZWRcbi1cdFx0ICogd2hlbiB0aGUgbGluayBpcyBjb25maWd1cmVkIGZvciBmdWxsIGR1cGxleCBvcGVyYXRpb24uXG4tXHRcdCAqL1xuLVx0XHR0eF9wYXVzZSA9IGZhbHNlO1xuLVx0XHRyeF9wYXVzZSA9IGZhbHNlO1xuIFx0fVxuIFxuLVx0ZW5ldGM0X3NldF9oZF9mbG93X2NvbnRyb2wocGYsIGhkX2ZjKTtcbiBcdGVuZXRjNF9zZXRfdHhfcGF1c2UocGYsIHByaXYtXHUwMDNlbnVtX3J4X3JpbmdzLCB0eF9wYXVzZSk7XG4gXHRlbmV0YzRfc2V0X3J4X3BhdXNlKHBmLCByeF9wYXVzZSk7XG4gXHRlbmV0YzRfbWFjX3R4X2VuYWJsZShwZik7XG5AQCAtMTAwOSwxOSArOTY5LDYgQEAgc3RhdGljIHZvaWQgZW5ldGM0X2xpbmtfZGVpbml0KHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYpXG4gXHRlbmV0Y19tZGlvYnVzX2Rlc3Ryb3kocGYpO1xuIH1cbiBcbi1zdGF0aWMgaW50IGVuZXRjNF9wc2lfd3FfdGFza19pbml0KHN0cnVjdCBlbmV0Y19zaSAqc2kpXG4te1xuLVx0Y2hhciB3cV9uYW1lWzI0XTtcbi1cbi1cdElOSVRfV09SSyhcdTAwMjZzaS1cdTAwM2VyeF9tb2RlX3Rhc2ssIGVuZXRjNF9wc2lfZG9fc2V0X3J4X21vZGUpO1xuLVx0c25wcmludGYod3FfbmFtZSwgc2l6ZW9mKHdxX25hbWUpLCBcImVuZXRjLSVzXCIsIHBjaV9uYW1lKHNpLVx1MDAzZXBkZXYpKTtcbi1cdHNpLVx1MDAzZXdvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKHdxX25hbWUpO1xuLVx0aWYgKCFzaS1cdTAwM2V3b3JrcXVldWUpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIHN0YXRpYyBpbnQgZW5ldGM0X3BmX25ldGRldl9jcmVhdGUoc3RydWN0IGVuZXRjX3NpICpzaSlcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZzaS1cdTAwM2VwZGV2LVx1MDAzZWRldjtcbkBAIC0xMDYyLDEyICsxMDA5LDYgQEAgc3RhdGljIGludCBlbmV0YzRfcGZfbmV0ZGV2X2NyZWF0ZShzdHJ1Y3QgZW5ldGNfc2kgKnNpKVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfbGlua19pbml0O1xuIFxuLVx0ZXJyID0gZW5ldGM0X3BzaV93cV90YXNrX2luaXQoc2kpO1xuLVx0aWYgKGVycikge1xuLVx0XHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgdG8gaW5pdCB3b3JrcXVldWVcXG5cIik7XG4tXHRcdGdvdG8gZXJyX3dxX2luaXQ7XG4tXHR9XG4tXG4gXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byByZWdpc3RlciBuZXRkZXZcXG5cIik7XG5AQCAtMTA3Nyw4ICsxMDE4LDYgQEAgc3RhdGljIGludCBlbmV0YzRfcGZfbmV0ZGV2X2NyZWF0ZShzdHJ1Y3QgZW5ldGNfc2kgKnNpKVxuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX3JlZ19uZXRkZXY6XG4tXHRkZXN0cm95X3dvcmtxdWV1ZShzaS1cdTAwM2V3b3JrcXVldWUpO1xuLWVycl93cV9pbml0OlxuIFx0ZW5ldGM0X2xpbmtfZGVpbml0KHByaXYpO1xuIGVycl9saW5rX2luaXQ6XG4gXHRlbmV0Y19mcmVlX21zaXgocHJpdik7XG5AQCAtMTA5Niw4ICsxMDM1LDYgQEAgc3RhdGljIHZvaWQgZW5ldGM0X3BmX25ldGRldl9kZXN0cm95KHN0cnVjdCBlbmV0Y19zaSAqc2kpXG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHNpLVx1MDAzZW5kZXY7XG4gXG4gXHR1bnJlZ2lzdGVyX25ldGRldihuZGV2KTtcbi1cdGNhbmNlbF93b3JrKFx1MDAyNnNpLVx1MDAzZXJ4X21vZGVfdGFzayk7XG4tXHRkZXN0cm95X3dvcmtxdWV1ZShzaS1cdTAwM2V3b3JrcXVldWUpO1xuIFx0ZW5ldGM0X2xpbmtfZGVpbml0KHByaXYpO1xuIFx0ZW5ldGNfZnJlZV9tc2l4KHByaXYpO1xuIFx0ZnJlZV9uZXRkZXYobmRldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ldGh0b29sLmNcbmluZGV4IDcxZjM3NmVmMWJlMWM5Li4wN2I3ODMyZjI0Mjc2YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ldGh0b29sLmNcbkBAIC0yOSw3ICsyOSw3IEBAIHN0YXRpYyBjb25zdCB1MzIgZW5ldGNfcnhiZHJfcmVnc1tdID0ge1xuIH07XG4gXG4gc3RhdGljIGNvbnN0IHUzMiBlbmV0Y19wb3J0X3JlZ3NbXSA9IHtcbi1cdEVORVRDX1BNUiwgRU5FVENfUFNSLCBFTkVUQ19QU0lQTVIsIEVORVRDX1BTSVBNQVIwKDApLFxuK1x0RU5FVENfUE1SLCBFTkVUQ19QU1IsIEVORVRDX1BTSVBNTVIsIEVORVRDX1BTSVBNQVIwKDApLFxuIFx0RU5FVENfUFNJUE1BUjEoMCksIEVORVRDX1BUWE1CQVIsIEVORVRDX1BDQVBSMCwgRU5FVENfUENBUFIxLFxuIFx0RU5FVENfUFNJQ0ZHUjAoMCksIEVORVRDX1BSRlNDQVBSLCBFTkVUQ19QVENNU0RVUigwKSxcbiBcdEVORVRDX1BNMF9DTURfQ0ZHLCBFTkVUQ19QTTBfTUFYRlJNLCBFTkVUQ19QTTBfSUZfTU9ERVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ody5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX2h3LmhcbmluZGV4IGJmOTliNjVkNzU5OGFiLi4xNmRhNzMyZGM1ZGU4MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ody5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfaHcuaFxuQEAgLTE4MCwxMyArMTgwLDEzIEBAIGVudW0gZW5ldGNfYmRyX3R5cGUge1RYLCBSWH07XG4gI2RlZmluZSBFTkVUQ19QTVJfUFNQRUVEXzEwMDBNXHRCSVQoOSlcbiAjZGVmaW5lIEVORVRDX1BNUl9QU1BFRURfMjUwME1cdEJJVCgxMClcbiAjZGVmaW5lIEVORVRDX1BTUlx0XHQweDAwMDQgLyogUk8gKi9cbi0jZGVmaW5lIEVORVRDX1BTSVBNUlx0XHQweDAwMThcbi0jZGVmaW5lIEVORVRDX1BTSVBNUl9TRVRfVVAobilcdEJJVChuKSAvKiBuID0gU0kgaW5kZXggKi9cbi0jZGVmaW5lIEVORVRDX1BTSVBNUl9TRVRfTVAobilcdEJJVCgobikgKyAxNilcbisjZGVmaW5lIEVORVRDX1BTSVBNTVJcdFx0MHgwMDE4XG4rI2RlZmluZSAgUFNJUE1NUl9TSV9NQUNfVVAobilcdEJJVChuKSAvKiBuID0gU0kgaW5kZXggKi9cbisjZGVmaW5lICBQU0lQTU1SX1NJX01BQ19NUChuKVx0QklUKChuKSArIDE2KVxuK1xuICNkZWZpbmUgRU5FVENfUFNJUFZNUlx0XHQweDAwMWNcbi0jZGVmaW5lIEVORVRDX1ZMQU5fUFJPTUlTQ19NQVBfQUxMXHQweDdcbi0jZGVmaW5lIEVORVRDX1BTSVBWTVJfU0VUX1ZQKHNpbWFwKVx0KChzaW1hcCkgXHUwMDI2IDB4Nylcbi0jZGVmaW5lIEVORVRDX1BTSVBWTVJfU0VUX1ZVVEEoc2ltYXApXHQoKChzaW1hcCkgXHUwMDI2IDB4NykgXHUwMDNjXHUwMDNjIDE2KVxuKyNkZWZpbmUgIFBTSVBWTVJfU0lfVkxBTl9QKG4pXHRCSVQobikgLyogbiA9IFNJIGluZGV4ICovXG4rXG4gI2RlZmluZSBFTkVUQ19QU0lQTUFSMChuKVx0KDB4MDEwMCArIChuKSAqIDB4OCkgLyogbiA9IFNJIGluZGV4ICovXG4gI2RlZmluZSBFTkVUQ19QU0lQTUFSMShuKVx0KDB4MDEwNCArIChuKSAqIDB4OClcbiAjZGVmaW5lIEVORVRDX1BWQ0xDVFJcdFx0MHgwMjA4XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuY1xuaW5kZXggMmQ2ODdiYjhjM2EwNjMuLmE1MDk5MjlmODlmMjVmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jXG5AQCAtNDIsMjYgKzQyLDYgQEAgc3RhdGljIHZvaWQgZW5ldGNfcGZfZGVzdHJveV9wY3Moc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpXG4gXHRseW54X3Bjc19kZXN0cm95KHBjcyk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGVuZXRjX3NldF92bGFuX3Byb21pc2Moc3RydWN0IGVuZXRjX2h3ICpodywgY2hhciBzaV9tYXApXG4te1xuLVx0dTMyIHZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDX1BTSVBWTVIpO1xuLVxuLVx0dmFsIFx1MDAyNj0gfkVORVRDX1BTSVBWTVJfU0VUX1ZQKEVORVRDX1ZMQU5fUFJPTUlTQ19NQVBfQUxMKTtcbi1cdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDX1BTSVBWTVIsIEVORVRDX1BTSVBWTVJfU0VUX1ZQKHNpX21hcCkgfCB2YWwpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBlbmV0Y19lbmFibGVfc2lfdmxhbl9wcm9taXNjKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGludCBzaV9pZHgpXG4te1xuLVx0cGYtXHUwMDNldmxhbl9wcm9taXNjX3NpbWFwIHw9IEJJVChzaV9pZHgpO1xuLVx0ZW5ldGNfc2V0X3ZsYW5fcHJvbWlzYyhcdTAwMjZwZi1cdTAwM2VzaS1cdTAwM2VodywgcGYtXHUwMDNldmxhbl9wcm9taXNjX3NpbWFwKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgZW5ldGNfZGlzYWJsZV9zaV92bGFuX3Byb21pc2Moc3RydWN0IGVuZXRjX3BmICpwZiwgaW50IHNpX2lkeClcbi17XG4tXHRwZi1cdTAwM2V2bGFuX3Byb21pc2Nfc2ltYXAgXHUwMDI2PSB+QklUKHNpX2lkeCk7XG4tXHRlbmV0Y19zZXRfdmxhbl9wcm9taXNjKFx1MDAyNnBmLVx1MDAzZXNpLVx1MDAzZWh3LCBwZi1cdTAwM2V2bGFuX3Byb21pc2Nfc2ltYXApO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBlbmV0Y19zZXRfaXNvbF92bGFuKHN0cnVjdCBlbmV0Y19odyAqaHcsIGludCBzaSwgdTE2IHZsYW4sIHU4IHFvcylcbiB7XG4gXHR1MzIgdmFsID0gMDtcbkBAIC04MCwzNyArNjAsNiBAQCBzdGF0aWMgdm9pZCBlbmV0Y19hZGRfbWFjX2FkZHJfZW1fZmlsdGVyKHN0cnVjdCBlbmV0Y19tYWNfZmlsdGVyICpmaWx0ZXIsXG4gXHRmaWx0ZXItXHUwMDNlbWFjX2FkZHJfY250Kys7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGVuZXRjX2NsZWFyX21hY19odF9mbHQoc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkeCwgaW50IHR5cGUpXG4te1xuLVx0Ym9vbCBlcnIgPSBzaS1cdTAwM2VlcnJhdGEgXHUwMDI2IEVORVRDX0VSUl9VQ01DU1dQO1xuLVxuLVx0aWYgKHR5cGUgPT0gVUMpIHtcbi1cdFx0ZW5ldGNfcG9ydF93cihcdTAwMjZzaS1cdTAwM2VodywgRU5FVENfUFNJVU1IRlIwKHNpX2lkeCwgZXJyKSwgMCk7XG4tXHRcdGVuZXRjX3BvcnRfd3IoXHUwMDI2c2ktXHUwMDNlaHcsIEVORVRDX1BTSVVNSEZSMShzaV9pZHgpLCAwKTtcbi1cdH0gZWxzZSB7IC8qIE1DICovXG4tXHRcdGVuZXRjX3BvcnRfd3IoXHUwMDI2c2ktXHUwMDNlaHcsIEVORVRDX1BTSU1NSEZSMChzaV9pZHgsIGVyciksIDApO1xuLVx0XHRlbmV0Y19wb3J0X3dyKFx1MDAyNnNpLVx1MDAzZWh3LCBFTkVUQ19QU0lNTUhGUjEoc2lfaWR4KSwgMCk7XG4tXHR9XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGVuZXRjX3NldF9tYWNfaHRfZmx0KHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZHgsIGludCB0eXBlLFxuLVx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgaGFzaClcbi17XG4tXHRib29sIGVyciA9IHNpLVx1MDAzZWVycmF0YSBcdTAwMjYgRU5FVENfRVJSX1VDTUNTV1A7XG4tXG4tXHRpZiAodHlwZSA9PSBVQykge1xuLVx0XHRlbmV0Y19wb3J0X3dyKFx1MDAyNnNpLVx1MDAzZWh3LCBFTkVUQ19QU0lVTUhGUjAoc2lfaWR4LCBlcnIpLFxuLVx0XHRcdCAgICAgIGxvd2VyXzMyX2JpdHMoaGFzaCkpO1xuLVx0XHRlbmV0Y19wb3J0X3dyKFx1MDAyNnNpLVx1MDAzZWh3LCBFTkVUQ19QU0lVTUhGUjEoc2lfaWR4KSxcbi1cdFx0XHQgICAgICB1cHBlcl8zMl9iaXRzKGhhc2gpKTtcbi1cdH0gZWxzZSB7IC8qIE1DICovXG4tXHRcdGVuZXRjX3BvcnRfd3IoXHUwMDI2c2ktXHUwMDNlaHcsIEVORVRDX1BTSU1NSEZSMChzaV9pZHgsIGVyciksXG4tXHRcdFx0ICAgICAgbG93ZXJfMzJfYml0cyhoYXNoKSk7XG4tXHRcdGVuZXRjX3BvcnRfd3IoXHUwMDI2c2ktXHUwMDNlaHcsIEVORVRDX1BTSU1NSEZSMShzaV9pZHgpLFxuLVx0XHRcdCAgICAgIHVwcGVyXzMyX2JpdHMoaGFzaCkpO1xuLVx0fVxuLX1cbi1cbiBzdGF0aWMgdm9pZCBlbmV0Y19zeW5jX21hY19maWx0ZXJzKHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4ge1xuIFx0c3RydWN0IGVuZXRjX21hY19maWx0ZXIgKmYgPSBwZi1cdTAwM2VtYWNfZmlsdGVyO1xuQEAgLTEyMiwxMiArNzEsMTYgQEAgc3RhdGljIHZvaWQgZW5ldGNfc3luY19tYWNfZmlsdGVycyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFERFJfVFlQRTsgaSsrLCBmKyspIHtcbiBcdFx0Ym9vbCBlbSA9IChmLVx1MDAzZW1hY19hZGRyX2NudCA9PSAxKSBcdTAwMjZcdTAwMjYgKGkgPT0gVUMpO1xuIFx0XHRib29sIGNsZWFyID0gIWYtXHUwMDNlbWFjX2FkZHJfY250O1xuK1x0XHR1NjQgaGFzaDtcbiBcbiBcdFx0aWYgKGNsZWFyKSB7XG4tXHRcdFx0aWYgKGkgPT0gVUMpXG4rXHRcdFx0aWYgKGkgPT0gVUMpIHtcbiBcdFx0XHRcdGVuZXRjX2NsZWFyX21hY19mbHRfZW50cnkoc2ksIHBvcyk7XG4rXHRcdFx0XHRlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc2ksIDAsIDApO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRlbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXIoc2ksIDAsIDApO1xuK1x0XHRcdH1cbiBcbi1cdFx0XHRlbmV0Y19jbGVhcl9tYWNfaHRfZmx0KHNpLCAwLCBpKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuQEAgLTEzNSw3ICs4OCw3IEBAIHN0YXRpYyB2b2lkIGVuZXRjX3N5bmNfbWFjX2ZpbHRlcnMoc3RydWN0IGVuZXRjX3BmICpwZilcbiBcdFx0aWYgKGVtKSB7XG4gXHRcdFx0aW50IGVycjtcbiBcbi1cdFx0XHRlbmV0Y19jbGVhcl9tYWNfaHRfZmx0KHNpLCAwLCBVQyk7XG4rXHRcdFx0ZW5ldGNfc2V0X3NpX3VjX2hhc2hfZmlsdGVyKHNpLCAwLCAwKTtcbiBcbiBcdFx0XHRlcnIgPSBlbmV0Y19zZXRfbWFjX2ZsdF9lbnRyeShzaSwgcG9zLCBmLVx1MDAzZW1hY19hZGRyLFxuIFx0XHRcdFx0XHRcdCAgICAgIEJJVCgwKSk7XG5AQCAtMTQ3LDExICsxMDAsMTUgQEAgc3RhdGljIHZvaWQgZW5ldGNfc3luY19tYWNfZmlsdGVycyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuIFx0XHRcdFx0IGVycik7XG4gXHRcdH1cbiBcbitcdFx0Yml0bWFwX3RvX2FycjY0KFx1MDAyNmhhc2gsIGYtXHUwMDNlbWFjX2hhc2hfdGFibGUsXG4rXHRcdFx0XHRFTkVUQ19NQUREUl9IQVNIX1RCTF9TWik7XG4gXHRcdC8qIGhhc2ggdGFibGUgZmlsdGVyLCBjbGVhciBFTSBmaWx0ZXIgZm9yIFVDIGVudHJpZXMgKi9cbi1cdFx0aWYgKGkgPT0gVUMpXG4rXHRcdGlmIChpID09IFVDKSB7XG4gXHRcdFx0ZW5ldGNfY2xlYXJfbWFjX2ZsdF9lbnRyeShzaSwgcG9zKTtcbi1cbi1cdFx0ZW5ldGNfc2V0X21hY19odF9mbHQoc2ksIDAsIGksICpmLVx1MDAzZW1hY19oYXNoX3RhYmxlKTtcbitcdFx0XHRlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc2ksIDAsIGhhc2gpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGVuZXRjX3NldF9zaV9tY19oYXNoX2ZpbHRlcihzaSwgMCwgaGFzaCk7XG4rXHRcdH1cbiBcdH1cbiB9XG4gXG5AQCAtMTU5LDIxICsxMTYsMTcgQEAgc3RhdGljIHZvaWQgZW5ldGNfcGZfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuIFx0c3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFx0c3RydWN0IGVuZXRjX3BmICpwZiA9IGVuZXRjX3NpX3ByaXYocHJpdi1cdTAwM2VzaSk7XG4tXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXHUwMDI2cHJpdi1cdTAwM2VzaS1cdTAwM2VodztcbiBcdGJvb2wgdXByb20gPSBmYWxzZSwgbXByb20gPSBmYWxzZTtcbiBcdHN0cnVjdCBlbmV0Y19tYWNfZmlsdGVyICpmaWx0ZXI7XG4gXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xuLVx0dTMyIHBzaXBtciA9IDA7XG4gXHRib29sIGVtO1xuIFxuIFx0aWYgKG5kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9QUk9NSVNDKSB7XG4gXHRcdC8qIGVuYWJsZSBwcm9taXNjIG1vZGUgZm9yIFNJMCAoUEYpICovXG4tXHRcdHBzaXBtciA9IEVORVRDX1BTSVBNUl9TRVRfVVAoMCkgfCBFTkVUQ19QU0lQTVJfU0VUX01QKDApO1xuIFx0XHR1cHJvbSA9IHRydWU7XG4gXHRcdG1wcm9tID0gdHJ1ZTtcbiBcdH0gZWxzZSBpZiAobmRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX0FMTE1VTFRJKSB7XG4gXHRcdC8qIGVuYWJsZSBtdWx0aSBjYXN0IHByb21pc2MgbW9kZSBmb3IgU0kwIChQRikgKi9cbi1cdFx0cHNpcG1yID0gRU5FVENfUFNJUE1SX1NFVF9NUCgwKTtcbiBcdFx0bXByb20gPSB0cnVlO1xuIFx0fVxuIFxuQEAgLTIxMSw5ICsxNjQsOCBAQCBzdGF0aWMgdm9pZCBlbmV0Y19wZl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdFx0LyogdXBkYXRlIFBGIGVudHJpZXMgKi9cbiBcdFx0ZW5ldGNfc3luY19tYWNfZmlsdGVycyhwZik7XG4gXG4tXHRwc2lwbXIgfD0gZW5ldGNfcG9ydF9yZChodywgRU5FVENfUFNJUE1SKSBcdTAwMjZcbi1cdFx0ICB+KEVORVRDX1BTSVBNUl9TRVRfVVAoMCkgfCBFTkVUQ19QU0lQTVJfU0VUX01QKDApKTtcbi1cdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDX1BTSVBNUiwgcHNpcG1yKTtcbitcdGVuZXRjX3NldF9zaV91Y19wcm9taXNjKHByaXYtXHUwMDNlc2ksIDAsIHVwcm9tKTtcbitcdGVuZXRjX3NldF9zaV9tY19wcm9taXNjKHByaXYtXHUwMDNlc2ksIDAsIG1wcm9tKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZW5ldGNfc2V0X2xvb3BiYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBib29sIGVuKVxuQEAgLTQ2OSwxMiArNDIxLDExIEBAIHN0YXRpYyB2b2lkIGVuZXRjX2NvbmZpZ3VyZV9wb3J0KHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4gXG4gXHQvKiBzcGxpdCB1cCBSRlMgZW50cmllcyAqL1xuIFx0ZW5ldGNfcG9ydF9hc3NpZ25fcmZzX2VudHJpZXMocGYtXHUwMDNlc2kpO1xuLVxuIFx0LyogZW5mb3JjZSBWTEFOIHByb21pc2MgbW9kZSBmb3IgYWxsIFNJcyAqL1xuLVx0cGYtXHUwMDNldmxhbl9wcm9taXNjX3NpbWFwID0gRU5FVENfVkxBTl9QUk9NSVNDX01BUF9BTEw7XG4tXHRlbmV0Y19zZXRfdmxhbl9wcm9taXNjKGh3LCBwZi1cdTAwM2V2bGFuX3Byb21pc2Nfc2ltYXApO1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHBmLVx1MDAzZXRvdGFsX3ZmcyArIDE7IGkrKylcbitcdFx0ZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzYyhwZi1cdTAwM2VzaSwgaSwgdHJ1ZSk7XG4gXG4tXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQ19QU0lQTVIsIDApO1xuK1x0ZW5ldGNfcG9ydF93cihodywgRU5FVENfUFNJUE1NUiwgMCk7XG4gXG4gXHQvKiBlbmFibGUgcG9ydCAqL1xuIFx0ZW5ldGNfcG9ydF93cihodywgRU5FVENfUE1SLCBFTkVUQ19QTVJfRU4pO1xuQEAgLTQ5NCwxMiArNDQ1LDkgQEAgc3RhdGljIGludCBlbmV0Y19wZl9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHR9XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSB7XG4tXHRcdHN0cnVjdCBlbmV0Y19wZiAqcGYgPSBlbmV0Y19zaV9wcml2KHByaXYtXHUwMDNlc2kpO1xuK1x0XHRib29sIHByb21pc2MgPSAhKGZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpO1xuIFxuLVx0XHRpZiAoISEoZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikpXG4tXHRcdFx0ZW5ldGNfZGlzYWJsZV9zaV92bGFuX3Byb21pc2MocGYsIDApO1xuLVx0XHRlbHNlXG4tXHRcdFx0ZW5ldGNfZW5hYmxlX3NpX3ZsYW5fcHJvbWlzYyhwZiwgMCk7XG4rXHRcdGVuZXRjX3NldF9zaV92bGFuX3Byb21pc2MocHJpdi1cdTAwM2VzaSwgMCwgcHJvbWlzYyk7XG4gXHR9XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9MT09QQkFDSylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5oXG5pbmRleCAyODViN2U1YzQ4ZmRjNy4uNTZkMjNhOGExMWEwNjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmhcbkBAIC0xNywxMiArMTcsOSBAQCBzdHJ1Y3QgZW5ldGNfdmZfc3RhdGUge1xuIH07XG4gXG4gc3RydWN0IGVuZXRjX3BvcnRfY2FwcyB7XG4tXHR1MzIgaGFsZl9kdXBsZXg6MTtcbi1cdGludCBudW1fdnNpO1xuIFx0aW50IG51bV9tc2l4O1xuIFx0aW50IG51bV9yeF9iZHI7XG4gXHRpbnQgbnVtX3R4X2Jkcjtcbi1cdGludCBtYWNfZmlsdGVyX251bTtcbiB9O1xuIFxuIHN0cnVjdCBlbmV0Y19wZjtcbkBAIC00Nyw3ICs0NCw2IEBAIHN0cnVjdCBlbmV0Y19wZiB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgbXNnX3Rhc2s7XG4gXHRjaGFyIG1zZ19pbnRfbmFtZVtFTkVUQ19JTlRfTkFNRV9NQVhdO1xuIFxuLVx0Y2hhciB2bGFuX3Byb21pc2Nfc2ltYXA7IC8qIGJpdG1hcCBvZiBTSXMgaW4gVkxBTiBwcm9taXNjIG1vZGUgKi9cbiBcdERFQ0xBUkVfQklUTUFQKHZsYW5faHRfZmlsdGVyLCBFTkVUQ19WTEFOX0hUX1NJWkUpO1xuIFx0REVDTEFSRV9CSVRNQVAoYWN0aXZlX3ZsYW5zLCBWTEFOX05fVklEKTtcbiBcbkBAIC02MCw4ICs1Niw2IEBAIHN0cnVjdCBlbmV0Y19wZiB7XG4gXG4gXHRzdHJ1Y3QgZW5ldGNfcG9ydF9jYXBzIGNhcHM7XG4gXHRjb25zdCBzdHJ1Y3QgZW5ldGNfcGZfb3BzICpvcHM7XG4tXG4tXHRpbnQgbnVtX21mZTtcdC8qIG51bWJlciBvZiBtYWMgYWRkcmVzcyBmaWx0ZXIgdGFibGUgZW50cmllcyAqL1xuIH07XG4gXG4gI2RlZmluZSBwaHlsaW5rX3RvX2VuZXRjX3BmKGNvbmZpZykgXFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmNcbmluZGV4IDZlNWQyZjg2OTkxNTBiLi5kMzJhMTk1YTA0Yzk3ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jXG5AQCAtMSw1ICsxLDUgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjArIE9SIEJTRC0zLUNsYXVzZSlcbi0vKiBDb3B5cmlnaHQgMjAyNCBOWFAgKi9cbisvKiBDb3B5cmlnaHQgMjAyNC0yMDI2IE5YUCAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzbC9lbmV0Y19tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9tZGlvLmhcdTAwM2VcbkBAIC04Nyw2ICs4NywxMTIgQEAgaW50IGVuZXRjX3NldHVwX21hY19hZGRyZXNzZXMoc3RydWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IGVuZXRjX3BmICpwZilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfc2V0dXBfbWFjX2FkZHJlc3Nlcyk7XG4gXG4rdm9pZCBlbmV0Y19zZXRfc2lfdWNfcHJvbWlzYyhzdHJ1Y3QgZW5ldGNfc2kgKnNpLCBpbnQgc2lfaWQsIGJvb2wgcHJvbWlzYylcbit7XG4rXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXHUwMDI2c2ktXHUwMDNlaHc7XG4rXHRpbnQgcHNpcG1tcl9vZmY7XG4rXHR1MzIgdmFsO1xuK1xuK1x0aWYgKGlzX2VuZXRjX3JldjEoc2kpKVxuK1x0XHRwc2lwbW1yX29mZiA9IEVORVRDX1BTSVBNTVI7XG4rXHRlbHNlXG4rXHRcdHBzaXBtbXJfb2ZmID0gRU5FVEM0X1BTSVBNTVI7XG4rXG4rXHR2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBwc2lwbW1yX29mZik7XG4rXG4rXHRpZiAocHJvbWlzYylcbitcdFx0dmFsIHw9IFBTSVBNTVJfU0lfTUFDX1VQKHNpX2lkKTtcbitcdGVsc2VcbitcdFx0dmFsIFx1MDAyNj0gflBTSVBNTVJfU0lfTUFDX1VQKHNpX2lkKTtcbitcbitcdGVuZXRjX3BvcnRfd3IoaHcsIHBzaXBtbXJfb2ZmLCB2YWwpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChlbmV0Y19zZXRfc2lfdWNfcHJvbWlzYyk7XG4rXG4rdm9pZCBlbmV0Y19zZXRfc2lfbWNfcHJvbWlzYyhzdHJ1Y3QgZW5ldGNfc2kgKnNpLCBpbnQgc2lfaWQsIGJvb2wgcHJvbWlzYylcbit7XG4rXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXHUwMDI2c2ktXHUwMDNlaHc7XG4rXHRpbnQgcHNpcG1tcl9vZmY7XG4rXHR1MzIgdmFsO1xuK1xuK1x0aWYgKGlzX2VuZXRjX3JldjEoc2kpKVxuK1x0XHRwc2lwbW1yX29mZiA9IEVORVRDX1BTSVBNTVI7XG4rXHRlbHNlXG4rXHRcdHBzaXBtbXJfb2ZmID0gRU5FVEM0X1BTSVBNTVI7XG4rXG4rXHR2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBwc2lwbW1yX29mZik7XG4rXG4rXHRpZiAocHJvbWlzYylcbitcdFx0dmFsIHw9IFBTSVBNTVJfU0lfTUFDX01QKHNpX2lkKTtcbitcdGVsc2VcbitcdFx0dmFsIFx1MDAyNj0gflBTSVBNTVJfU0lfTUFDX01QKHNpX2lkKTtcbitcbitcdGVuZXRjX3BvcnRfd3IoaHcsIHBzaXBtbXJfb2ZmLCB2YWwpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChlbmV0Y19zZXRfc2lfbWNfcHJvbWlzYyk7XG4rXG4rdm9pZCBlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCB1NjQgaGFzaClcbit7XG4rXHRpbnQgcHNpdW1oZnIwX29mZiwgcHNpdW1oZnIxX29mZjtcbitcdHN0cnVjdCBlbmV0Y19odyAqaHcgPSBcdTAwMjZzaS1cdTAwM2VodztcbitcbitcdGlmIChpc19lbmV0Y19yZXYxKHNpKSkge1xuK1x0XHRib29sIGVyciA9IHNpLVx1MDAzZWVycmF0YSBcdTAwMjYgRU5FVENfRVJSX1VDTUNTV1A7XG4rXG4rXHRcdHBzaXVtaGZyMF9vZmYgPSBFTkVUQ19QU0lVTUhGUjAoc2lfaWQsIGVycik7XG4rXHRcdHBzaXVtaGZyMV9vZmYgPSBFTkVUQ19QU0lVTUhGUjEoc2lfaWQpO1xuK1x0fSBlbHNlIHtcbitcdFx0cHNpdW1oZnIwX29mZiA9IEVORVRDNF9QU0lVTUhGUjAoc2lfaWQpO1xuK1x0XHRwc2l1bWhmcjFfb2ZmID0gRU5FVEM0X1BTSVVNSEZSMShzaV9pZCk7XG4rXHR9XG4rXG4rXHRlbmV0Y19wb3J0X3dyKGh3LCBwc2l1bWhmcjBfb2ZmLCBsb3dlcl8zMl9iaXRzKGhhc2gpKTtcbitcdGVuZXRjX3BvcnRfd3IoaHcsIHBzaXVtaGZyMV9vZmYsIHVwcGVyXzMyX2JpdHMoaGFzaCkpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIpO1xuK1xuK3ZvaWQgZW5ldGNfc2V0X3NpX21jX2hhc2hfZmlsdGVyKHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZCwgdTY0IGhhc2gpXG4re1xuK1x0aW50IHBzaW1taGZyMF9vZmYsIHBzaW1taGZyMV9vZmY7XG4rXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXHUwMDI2c2ktXHUwMDNlaHc7XG4rXG4rXHRpZiAoaXNfZW5ldGNfcmV2MShzaSkpIHtcbitcdFx0Ym9vbCBlcnIgPSBzaS1cdTAwM2VlcnJhdGEgXHUwMDI2IEVORVRDX0VSUl9VQ01DU1dQO1xuK1xuK1x0XHRwc2ltbWhmcjBfb2ZmID0gRU5FVENfUFNJTU1IRlIwKHNpX2lkLCBlcnIpO1xuK1x0XHRwc2ltbWhmcjFfb2ZmID0gRU5FVENfUFNJTU1IRlIxKHNpX2lkKTtcbitcdH0gZWxzZSB7XG4rXHRcdHBzaW1taGZyMF9vZmYgPSBFTkVUQzRfUFNJTU1IRlIwKHNpX2lkKTtcbitcdFx0cHNpbW1oZnIxX29mZiA9IEVORVRDNF9QU0lNTUhGUjEoc2lfaWQpO1xuK1x0fVxuK1xuK1x0ZW5ldGNfcG9ydF93cihodywgcHNpbW1oZnIwX29mZiwgbG93ZXJfMzJfYml0cyhoYXNoKSk7XG4rXHRlbmV0Y19wb3J0X3dyKGh3LCBwc2ltbWhmcjFfb2ZmLCB1cHBlcl8zMl9iaXRzKGhhc2gpKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfc2V0X3NpX21jX2hhc2hfZmlsdGVyKTtcbitcbit2b2lkIGVuZXRjX3NldF9zaV92bGFuX3Byb21pc2Moc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCBib29sIHByb21pc2MpXG4re1xuK1x0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnNpLVx1MDAzZWh3O1xuK1x0aW50IHBzaXB2bXJfb2ZmO1xuK1x0dTMyIHZhbDtcbitcbitcdGlmIChpc19lbmV0Y19yZXYxKHNpKSlcbitcdFx0cHNpcHZtcl9vZmYgPSBFTkVUQ19QU0lQVk1SO1xuK1x0ZWxzZVxuK1x0XHRwc2lwdm1yX29mZiA9IEVORVRDNF9QU0lQVk1SO1xuK1xuK1x0dmFsID0gZW5ldGNfcG9ydF9yZChodywgcHNpcHZtcl9vZmYpO1xuK1xuK1x0aWYgKHByb21pc2MpXG4rXHRcdHZhbCB8PSBQU0lQVk1SX1NJX1ZMQU5fUChzaV9pZCk7XG4rXHRlbHNlXG4rXHRcdHZhbCBcdTAwMjY9IH5QU0lQVk1SX1NJX1ZMQU5fUChzaV9pZCk7XG4rXG4rXHRlbmV0Y19wb3J0X3dyKGh3LCBwc2lwdm1yX29mZiwgdmFsKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzYyk7XG4rXG4gdm9pZCBlbmV0Y19wZl9uZXRkZXZfc2V0dXAoc3RydWN0IGVuZXRjX3NpICpzaSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRcdFx0ICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpuZGV2X29wcylcbiB7XG5AQCAtMjc1LDcgKzM4MSw4IEBAIHN0YXRpYyBib29sIGVuZXRjX3BvcnRfaGFzX3BjcyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuIFx0cmV0dXJuIChwZi1cdTAwM2VpZl9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSB8fFxuIFx0XHRwZi1cdTAwM2VpZl9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggfHxcbiBcdFx0cGYtXHUwMDNlaWZfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMjUwMEJBU0VYIHx8XG4tXHRcdHBmLVx1MDAzZWlmX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUkpO1xuK1x0XHRwZi1cdTAwM2VpZl9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJIHx8XG4rXHRcdHBmLVx1MDAzZWlmX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSKTtcbiB9XG4gXG4gaW50IGVuZXRjX21kaW9idXNfY3JlYXRlKHN0cnVjdCBlbmV0Y19wZiAqcGYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcbkBAIC0zMTYsMjUgKzQyMyw0MiBAQCBpbnQgZW5ldGNfcGh5bGlua19jcmVhdGUoc3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxuIHtcbiBcdHN0cnVjdCBlbmV0Y19wZiAqcGYgPSBlbmV0Y19zaV9wcml2KHByaXYtXHUwMDNlc2kpO1xuIFx0c3RydWN0IHBoeWxpbmsgKnBoeWxpbms7XG4rXHR1bnNpZ25lZCBsb25nIG1hY19jYXBzO1xuIFx0aW50IGVycjtcbiBcbiBcdHBmLVx1MDAzZXBoeWxpbmtfY29uZmlnLmRldiA9IFx1MDAyNnByaXYtXHUwMDNlbmRldi1cdTAwM2VkZXY7XG4gXHRwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZy50eXBlID0gUEhZTElOS19ORVRERVY7XG4tXHRwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzID0gTUFDX0FTWU1fUEFVU0UgfCBNQUNfU1lNX1BBVVNFIHxcbi1cdFx0TUFDXzEwIHwgTUFDXzEwMCB8IE1BQ18xMDAwIHwgTUFDXzI1MDBGRDtcbiBcbiBcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwsXG4gXHRcdCAgcGYtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuLVx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSxcbi1cdFx0ICBwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4tXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCxcbi1cdFx0ICBwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4tXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWCxcbi1cdFx0ICBwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4tXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUksXG4tXHRcdCAgcGYtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuLVx0cGh5X2ludGVyZmFjZV9zZXRfcmdtaWkocGYtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuIFxuK1x0bWFjX2NhcHMgPSBNQUNfQVNZTV9QQVVTRSB8IE1BQ19TWU1fUEFVU0U7XG4rXHRpZiAoIWVuZXRjX2lzX3BzZXVkb19tYWMocHJpdi1cdTAwM2VzaSkpIHtcbitcdFx0bWFjX2NhcHMgfD0gTUFDXzEwIHwgTUFDXzEwMCB8IE1BQ18xMDAwRkQgfCBNQUNfMjUwMEZEO1xuK1xuK1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJLFxuK1x0XHRcdCAgcGYtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuK1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCxcbitcdFx0XHQgIHBmLVx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbitcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVgsXG4rXHRcdFx0ICBwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4rXHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSxcbitcdFx0XHQgIHBmLVx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbitcbitcdFx0aWYgKCFpc19lbmV0Y19yZXYxKHByaXYtXHUwMDNlc2kpKSB7XG4rXHRcdFx0bWFjX2NhcHMgfD0gTUFDXzUwMDBGRCB8IE1BQ18xMDAwMEZEO1xuK1x0XHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIsXG4rXHRcdFx0XHQgIHBmLVx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbitcdFx0fVxuK1xuK1x0XHRwaHlfaW50ZXJmYWNlX3NldF9yZ21paShwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRtYWNfY2FwcyB8PSBNQUNfMTBGRCB8IE1BQ18xMDBGRCB8IE1BQ18xMDAwRkQgfCBNQUNfMjUwMEZEIHxcbitcdFx0XHQgICAgTUFDXzUwMDBGRCB8IE1BQ18xMDAwMEZEIHwgTUFDXzIwMDAwRkQgfFxuK1x0XHRcdCAgICBNQUNfMjUwMDBGRDtcbitcdH1cbitcbitcdHBmLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgPSBtYWNfY2FwcztcbiBcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcdTAwMjZwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZywgb2ZfZndub2RlX2hhbmRsZShub2RlKSxcbiBcdFx0XHRcdCBwZi1cdTAwM2VpZl9tb2RlLCBvcHMpO1xuIFx0aWYgKElTX0VSUihwaHlsaW5rKSkge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uaFxuaW5kZXggNTdkMmUwZWJkMmIwYmIuLjgyNDNjZTBkZTU3ZjY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmhcbkBAIC0xNyw2ICsxNywxMSBAQCB2b2lkIGVuZXRjX3NldF9kZWZhdWx0X3Jzc19rZXkoc3RydWN0IGVuZXRjX3BmICpwZik7XG4gaW50IGVuZXRjX3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgX19iZTE2IHByb3QsIHUxNiB2aWQpO1xuIGludCBlbmV0Y192bGFuX3J4X2RlbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIF9fYmUxNiBwcm90LCB1MTYgdmlkKTtcbiBpbnQgZW5ldGNfaW5pdF9zcmlvdl9yZXNvdXJjZXMoc3RydWN0IGVuZXRjX3BmICpwZik7XG4rdm9pZCBlbmV0Y19zZXRfc2lfdWNfcHJvbWlzYyhzdHJ1Y3QgZW5ldGNfc2kgKnNpLCBpbnQgc2lfaWQsIGJvb2wgcHJvbWlzYyk7XG4rdm9pZCBlbmV0Y19zZXRfc2lfbWNfcHJvbWlzYyhzdHJ1Y3QgZW5ldGNfc2kgKnNpLCBpbnQgc2lfaWQsIGJvb2wgcHJvbWlzYyk7XG4rdm9pZCBlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCB1NjQgaGFzaCk7XG4rdm9pZCBlbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCB1NjQgaGFzaCk7XG4rdm9pZCBlbmV0Y19zZXRfc2lfdmxhbl9wcm9taXNjKHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZCwgYm9vbCBwcm9taXNjKTtcbiBcbiBzdGF0aWMgaW5saW5lIHUxNiBlbmV0Y19nZXRfaXBfcmV2aXNpb24oc3RydWN0IGVuZXRjX2h3ICpodylcbiB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3Fvcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3Fvcy5jXG5pbmRleCA3YjE3YmNhMjRmMjYwZi4uMmFhMGZjYWFmY2QyM2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcW9zLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19xb3MuY1xuQEAgLTExMzUsNyArMTEzNSw2IEBAIHN0YXRpYyBpbnQgZW5ldGNfcHNmcF9wYXJzZV9jbHNmbG93ZXIoc3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdixcbiBcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnk7XG4gXHRzdHJ1Y3QgYWN0aW9uX2dhdGVfZW50cnkgKmU7XG4gXHR1OCBzZmlfb3ZlcndyaXRlID0gMDtcbi1cdGludCBlbnRyaWVzX3NpemU7XG4gXHRpbnQgaSwgZXJyO1xuIFxuIFx0aWYgKGYtXHUwMDNlY29tbW9uLmNoYWluX2luZGV4IFx1MDAzZT0gcHJpdi1cdTAwM2Vwc2ZwX2NhcC5tYXhfc3RyZWFtaWQpIHtcbkBAIC0xMjQyLDggKzEyNDEsNyBAQCBzdGF0aWMgaW50IGVuZXRjX3BzZnBfcGFyc2VfY2xzZmxvd2VyKHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYsXG4gXHRcdGdvdG8gZnJlZV9maWx0ZXI7XG4gXHR9XG4gXG4tXHRlbnRyaWVzX3NpemUgPSBzdHJ1Y3Rfc2l6ZShzZ2ksIGVudHJpZXMsIGVudHJ5Zy1cdTAwM2VnYXRlLm51bV9lbnRyaWVzKTtcbi1cdHNnaSA9IGt6YWxsb2MoZW50cmllc19zaXplLCBHRlBfS0VSTkVMKTtcbitcdHNnaSA9IGt6YWxsb2NfZmxleCgqc2dpLCBlbnRyaWVzLCBlbnRyeWctXHUwMDNlZ2F0ZS5udW1fZW50cmllcyk7XG4gXHRpZiAoIXNnaSkge1xuIFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIGZyZWVfZmlsdGVyO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y192Zi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3ZmLmNcbmluZGV4IDljZGIwYTRkNmJhZmI3Li43ZGNiNGEwMjQ2ZjUyOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y192Zi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfdmYuY1xuQEAgLTMxNyw3ICszMTcsMTQgQEAgc3RhdGljIGludCBlbmV0Y192Zl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcbiBcdGVuZXRjX2dldF9zaV9jYXBzKHNpKTtcbiBcbi1cdG5kZXYgPSBhbGxvY19ldGhlcmRldl9tcShzaXplb2YoKnByaXYpLCBFTkVUQ19NQVhfTlVNX1RYUVMpO1xuK1x0LyogQ3VycmVudGx5LCB0aGUgc3VwcG9ydGVkIFNvQ3MgaGF2ZSBhIG1heCBvZiA2IENQVXMgYW5kIHRoZSBWRnNcbitcdCAqIGhhdmUgbGVzcyB0aGFuIDYgUlgvVFggcmluZ3MuIFNvIG5vIGlzc3VlcyBmb3IgdGhlc2Ugc3VwcG9ydGVkXG4rXHQgKiBTb0NzLCBidXQgZm9yIGZ1dHVyZSBTb0NzIHdoaWNoIGhhdmUgbW9yZSBDUFVzIG9yIG1vcmUgVFgvUlhcbitcdCAqIHJpbmdzLCBhbGwgdGhlIHJlbGF0ZWQgbG9naWMgbmVlZHMgdG8gYmUgaW1wcm92ZWQuXG4rXHQgKi9cbitcdG5kZXYgPSBhbGxvY19ldGhlcmRldl9tcXMoc2l6ZW9mKCpwcml2KSxcbitcdFx0XHRcdCAgbWluKHNpLVx1MDAzZW51bV90eF9yaW5ncywgRU5FVENfTUFYX05VTV9UWFFTKSxcbitcdFx0XHRcdCAgbWluKHNpLVx1MDAzZW51bV9yeF9yaW5ncywgRU5FVENfTUFYX05VTV9UWFFTKSk7XG4gXHRpZiAoIW5kZXYpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCJuZXRkZXYgY3JlYXRpb24gZmFpbGVkXFxuXCIpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNsL250bXAuaCBiL2luY2x1ZGUvbGludXgvZnNsL250bXAuaFxuaW5kZXggZDNiNmM0NzZiOTFhMmQuLjc2NGVmMjg5MjYwODVlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mc2wvbnRtcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzbC9udG1wLmhcbkBAIC03NSw4ICs3NSwxMCBAQCBzdHJ1Y3QgbnRtcF91c2VyIHtcbiBcdC8qIE5UTVAgdGFibGUgYml0bWFwcyBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCAqL1xuIFx0dTMyIGV0dF9iaXRtYXBfc2l6ZTtcbiBcdHUzMiBlY3RfYml0bWFwX3NpemU7XG4rXHR1MTYgbWFmdF9udW1fZW50cmllcztcbiBcdHVuc2lnbmVkIGxvbmcgKmV0dF9naWRfYml0bWFwOyAvKiBvbmx5IHZhbGlkIGZvciBzd2l0Y2ggKi9cbiBcdHVuc2lnbmVkIGxvbmcgKmVjdF9naWRfYml0bWFwOyAvKiBvbmx5IHZhbGlkIGZvciBzd2l0Y2ggKi9cbitcdHVuc2lnbmVkIGxvbmcgKm1hZnRfZWlkX2JpdG1hcDsgLyogb25seSB2YWxpZCBmb3IgRU5FVEMgKi9cbiB9O1xuIFxuIHN0cnVjdCBtYWZ0X2VudHJ5X2RhdGEge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDM6MDA6MTYuMTkyODc4MDYxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzMTcyNTIzNjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MjMwOTAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjkxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDAzOjA2OjA5LjM2NTQwMzM2NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE2MjcyNDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkZTTF9FTkVUQ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnPTM4Nz1DT05GSUdfRlNMX0RQQUEyX0VUSD1tXFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZzozODg6Q09ORklHX0ZTTF9FTkVUQz1tXFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0zODktQ09ORklHX05YUF9FTkVUQzQ9bVxcbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWc6MzkwOkNPTkZJR19GU0xfRU5FVENfVkY9bVxcbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWc6MzkxOkNPTkZJR19GU0xfRU5FVENfUU9TPXlcXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnLTM5Mi1DT05GSUdfTlhQX05FVENfQkxLX0NUUkw9bVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL25ldGMvS2NvbmZpZz0yPWNvbmZpZyBORVRfRFNBX05FVENfU1dJVENIXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9LY29uZmlnLTctXFx0c2VsZWN0IE5FVF9EU0FfVEFHX05FVENcXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9LY29uZmlnOjg6XFx0c2VsZWN0IEZTTF9FTkVUQ19NRElPXFxuZHJpdmVycy9uZXQvZHNhL25ldGMvS2NvbmZpZy05LVxcdHNlbGVjdCBOWFBfTlRNUFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9LY29uZmlnPTMyPWNvbmZpZyBORVRfRFNBX01TQ0NfRkVMSVhcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvS2NvbmZpZy00My1cXHRzZWxlY3QgTkVUX0RTQV9UQUdfT0NFTE9UXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9LY29uZmlnOjQ0OlxcdHNlbGVjdCBGU0xfRU5FVENfTURJT1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvS2NvbmZpZy00NS1cXHRzZWxlY3QgUENTX0xZTlhcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjI6Y29uZmlnIEZTTF9FTkVUQ19DT1JFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctMy1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWc9Mjc9Y29uZmlnIE5YUF9OVE1QXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy0yOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZzozMDpjb25maWcgRlNMX0VORVRDXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctMzEtXFx0dHJpc3RhdGUgXFxcIkVORVRDIFBGIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTMzLVxcdGRlcGVuZHMgb24gUENJX01TSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjM0OlxcdHNlbGVjdCBGU0xfRU5FVENfQ09SRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjM1OlxcdHNlbGVjdCBGU0xfRU5FVENfSUVSQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjM2OlxcdHNlbGVjdCBGU0xfRU5FVENfTURJT1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTM3LVxcdHNlbGVjdCBOWFBfRU5FVENfUEZfQ09NTU9OXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZz00OD1jb25maWcgTlhQX0VORVRDNFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctNTEtXFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWc6NTI6XFx0c2VsZWN0IEZTTF9FTkVUQ19DT1JFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWc6NTM6XFx0c2VsZWN0IEZTTF9FTkVUQ19NRElPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctNTQtXFx0c2VsZWN0IE5YUF9FTkVUQ19QRl9DT01NT05cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTY1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjY2OmNvbmZpZyBGU0xfRU5FVENfVkZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy02Ny1cXHR0cmlzdGF0ZSBcXFwiRU5FVEMgVkYgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctNjktXFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWc6NzA6XFx0c2VsZWN0IEZTTF9FTkVUQ19DT1JFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWc6NzE6XFx0c2VsZWN0IEZTTF9FTkVUQ19NRElPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctNzItXFx0c2VsZWN0IFBIWUxJTktcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTgwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjgxOmNvbmZpZyBGU0xfRU5FVENfSUVSQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTgyLVxcdHRyaXN0YXRlIFxcXCJFTkVUQyBJRVJCIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTg4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjg5OmNvbmZpZyBGU0xfRU5FVENfTURJT1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTkwLVxcdHRyaXN0YXRlIFxcXCJFTkVUQyBNRElPIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTk3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjk4OmNvbmZpZyBGU0xfRU5FVENfUFRQX0NMT0NLXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctOTktXFx0dHJpc3RhdGUgXFxcIkVORVRDIFBUUCBjbG9jayBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWc6MTAwOlxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfUU9SSVEgXFx1MDAyNlxcdTAwMjYgKEZTTF9FTkVUQyB8fCBGU0xfRU5FVENfVkYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctMTAxLVxcdGRlZmF1bHQgeVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctMTA5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjExMDpjb25maWcgRlNMX0VORVRDX1FPU1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTExMS1cXHRib29sIFxcXCJFTkVUQyBoYXJkd2FyZSBUaW1lLXNlbnNpdGl2ZSBOZXR3b3JrIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWc6MTEyOlxcdGRlcGVuZHMgb24gKEZTTF9FTkVUQyB8fCBGU0xfRU5FVENfVkYpIFxcdTAwMjZcXHUwMDI2IChORVRfU0NIX1RBUFJJTyB8fCBORVRfU0NIX0NCUylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy0xMTMtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlLTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX0ZTTF9FTkVUQ19DT1JFKSArPSBmc2wtZW5ldGMtY29yZS5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlLTQtZnNsLWVuZXRjLWNvcmUteSA6PSBlbmV0Yy5vIGVuZXRjX2NiZHIubyBlbmV0Y19ldGh0b29sLm9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9NYWtlZmlsZT0xMT1ueHAtbmV0Yy1saWIteSA6PSBudG1wLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvTWFrZWZpbGUtMTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19GU0xfRU5FVEMpICs9IGZzbC1lbmV0Yy5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlLTE0LWZzbC1lbmV0Yy15IDo9IGVuZXRjX3BmLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvTWFrZWZpbGU6MTU6ZnNsLWVuZXRjLSQoQ09ORklHX0ZTTF9FTkVUQ19RT1MpICs9IGVuZXRjX3Fvcy5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlLTE2LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlPTE5PW54cC1lbmV0YzQtJChDT05GSUdfREVCVUdfRlMpICs9IGVuZXRjNF9kZWJ1Z2ZzLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvTWFrZWZpbGUtMjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlOjIxOm9iai0kKENPTkZJR19GU0xfRU5FVENfVkYpICs9IGZzbC1lbmV0Yy12Zi5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlLTIyLWZzbC1lbmV0Yy12Zi15IDo9IGVuZXRjX3ZmLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvTWFrZWZpbGUtMjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19GU0xfRU5FVENfSUVSQikgKz0gZnNsLWVuZXRjLWllcmIub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9NYWtlZmlsZS0yNS1mc2wtZW5ldGMtaWVyYi15IDo9IGVuZXRjX2llcmIub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9NYWtlZmlsZS0yNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0ZTTF9FTkVUQ19NRElPKSArPSBmc2wtZW5ldGMtbWRpby5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlLTI4LWZzbC1lbmV0Yy1tZGlvLXkgOj0gZW5ldGNfcGNpX21kaW8ubyBlbmV0Y19tZGlvLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvTWFrZWZpbGUtMjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlOjMwOm9iai0kKENPTkZJR19GU0xfRU5FVENfUFRQX0NMT0NLKSArPSBmc2wtZW5ldGMtcHRwLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvTWFrZWZpbGUtMzEtZnNsLWVuZXRjLXB0cC15IDo9IGVuZXRjX3B0cC5vXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGMuaD01OTU9c3RhdGljIGlubGluZSBib29sIGVuZXRjX3B0cF9jbG9ja19pc19lbmFibGVkKHN0cnVjdCBlbmV0Y19zaSAqc2kpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGMuaC01OTctXFx0aWYgKGlzX2VuZXRjX3JldjEoc2kpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Yy5oOjU5ODpcXHRcXHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfRlNMX0VORVRDX1BUUF9DTE9DSyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjLmgtNTk5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjLmgtNjAyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Yy5oOjYwMzojaWZkZWYgQ09ORklHX0ZTTF9FTkVUQ19RT1NcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGMuaC02MDQtaW50IGVuZXRjX3Fvc19xdWVyeV9jYXBzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB2b2lkICp0eXBlX2RhdGEpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX2llcmIuaC02LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19pZXJiLmg6NzojaWYgSVNfRU5BQkxFRChDT05GSUdfRlNMX0VORVRDX0lFUkIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX2llcmIuaC04LVxcbi0tXFxuZHJpdmVycy9wdHAvS2NvbmZpZz01OD1jb25maWcgUFRQXzE1ODhfQ0xPQ0tfUU9SSVFcXG5kcml2ZXJzL3B0cC9LY29uZmlnLTU5LVxcdHRyaXN0YXRlIFxcXCJGcmVlc2NhbGUgUW9ySVEgMTU4OCB0aW1lciBhcyBQVFAgY2xvY2tcXFwiXFxuZHJpdmVycy9wdHAvS2NvbmZpZzo2MDpcXHRkZXBlbmRzIG9uIEdJQU5GQVIgfHwgRlNMX0RQQUFfRVRIIHx8IEZTTF9EUEFBMl9FVEggfHwgRlNMX0VORVRDIHx8IEZTTF9FTkVUQ19WRiB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL3B0cC9LY29uZmlnLTYxLVxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcXG5kcml2ZXJzL3B0cC9LY29uZmlnOjYyOlxcdGRlZmF1bHQgeSBpZiBHSUFORkFSIHx8IEZTTF9EUEFBX0VUSCB8fCBGU0xfRFBBQTJfRVRIIHx8IEZTTF9FTkVUQyB8fCBGU0xfRU5FVENfVkZcXG5kcml2ZXJzL3B0cC9LY29uZmlnLTYzLVxcdGhlbHBcXG4tLVxcbmluY2x1ZGUvbGludXgvZnNsL2VuZXRjX21kaW8uaC0zLVxcbmluY2x1ZGUvbGludXgvZnNsL2VuZXRjX21kaW8uaDo0OiNpZm5kZWYgX0ZTTF9FTkVUQ19NRElPX0hfXFxuaW5jbHVkZS9saW51eC9mc2wvZW5ldGNfbWRpby5oOjU6I2RlZmluZSBfRlNMX0VORVRDX01ESU9fSF9cXG5pbmNsdWRlL2xpbnV4L2ZzbC9lbmV0Y19tZGlvLmgtNi1cXG4tLVxcbmluY2x1ZGUvbGludXgvZnNsL2VuZXRjX21kaW8uaD0zMz1zdHJ1Y3QgZW5ldGNfbWRpb19wcml2IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZnNsL2VuZXRjX21kaW8uaC0zNy1cXG5pbmNsdWRlL2xpbnV4L2ZzbC9lbmV0Y19tZGlvLmg6Mzg6I2lmIElTX1JFQUNIQUJMRShDT05GSUdfRlNMX0VORVRDX01ESU8pXFxuaW5jbHVkZS9saW51eC9mc2wvZW5ldGNfbWRpby5oLTM5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwMzowNjoxMS40ODE2ODA1ODFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzczNjIyMjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRU5FVEMgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9gIGRpcmVjdG9yeS4gUmlnaHQsIGFuZCB0aGUgcmVsZXZhbnQgY29uZmlncyBzZWVtIHRvIGJlIGBGU0xfRU5FVENgLCBgTlhQX0VORVRDNGAsIGBGU0xfRU5FVENfVkZgLCBhbmQgYEZTTF9FTkVUQ19RT1NgLiBIbW0sIEkgc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXNlIGFyZSBhbHJlYWR5IGVuYWJsZWQgaW4gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbi4gTGV0IG1lIGNoZWNrIGBhcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnYC4uLiBBaCwgeWVzLiBgQ09ORklHX0ZTTF9FTkVUQz1tYCwgYENPTkZJR19OWFBfRU5FVEM0PW1gLCBgQ09ORklHX0ZTTF9FTkVUQ19WRj1tYCwgYW5kIGBDT05GSUdfRlNMX0VORVRDX1FPUz15YC4gU28gdGhleSdyZSBhbHJlYWR5IGluIHRoZSBkZWZjb25maWcuIEdvb2QsIGp1c3QgbmVlZCB0byByZW1lbWJlciB0byBsaXN0IHRoZW0gd2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvciB3aGVyZXZlciB0aGlzIGlzIGdvaW5nLlxuXG5Ob3csIGxldCdzIGRpZyBpbnRvIHRoZSBhY3R1YWwgY29kZSBjaGFuZ2UuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gc2VlbXMgdG8gYmUgd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmNgLiBPa2F5LCBoZXJlJ3Mgd2hhdCdzIGhhcHBlbmluZy4gVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBlbmV0YzRfcHNpX2RvX3NldF9yeF9tb2RlYCBmdW5jdGlvbiwgd2hpY2ggd2FzIHBhcnQgb2YgYSB3b3JrcXVldWUsIGFuZCBpdCBzZWVtcyBsaWtlIGl0J3MgcmVwbGFjaW5nIGAubmRvX3NldF9yeF9tb2RlYCB3aXRoIGAubmRvX3NldF9yeF9tb2RlX2FzeW5jYCBpbiB0aGUgYG5ldF9kZXZpY2Vfb3BzYCBzdHJ1Y3R1cmUuIEhhbmcgb24uLi4gYC5uZG9fc2V0X3J4X21vZGVfYXN5bmNgPyBJcyB0aGF0IGEgbmV3IG1lbWJlciBvZiB0aGUgYG5ldF9kZXZpY2Vfb3BzYCBzdHJ1Y3Q/IFRoYXQncyBub3Qgc29tZXRoaW5nIEknbSBpbW1lZGlhdGVseSBmYW1pbGlhciB3aXRoLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhhdC4gVGltZSB0byBjaGVjayBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAgdG8gc2VlIHdoYXQgdGhlIGRlYWwgaXMgd2l0aCB0aGlzIG5ldyBjYWxsYmFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkwOTQsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDM6MDY6MTkuMjU1MzA0NzQ1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzYzODcxMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmRvX3NldF9yeF9tb2RlX2FzeW5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdD0yODg9bmRvX3NldF9yeF9tb2RlOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTI5MC1cXHRDb250ZXh0OiBCSHMgZGlzYWJsZWRcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3Q6MjkxOlxcdE5vdGVzOiBEZXByZWNhdGVkIGluIGZhdm9yIG9mIG5kb19zZXRfcnhfbW9kZV9hc3luYyB3aGljaCBydW5zXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTI5Mi1cXHRpbiBwcm9jZXNzIGNvbnRleHQuXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTI5My1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3Q6Mjk0Om5kb19zZXRfcnhfbW9kZV9hc3luYzpcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3QtMjk1LVxcdFN5bmNocm9uaXphdGlvbjogcnRubF9sb2NrKCkgc2VtYXBob3JlLiBJbiBhZGRpdGlvbiwgbmV0ZGV2IGluc3RhbmNlXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYz0yMTU3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBvaWJfbmV0ZGV2X29wc19wZiA9IHtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jLTIxNjUtXFx0Lm5kb190eF90aW1lb3V0XFx0XFx0ID0gaXBvaWJfdGltZW91dCxcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYzoyMTY2OlxcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcXHQgPSBpcG9pYl9zZXRfcnhfbW9kZV9hc3luYyxcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYy0yMTY3LVxcdC5uZG9fZ2V0X2lmbGlua1xcdFxcdCA9IGlwb2liX2dldF9pZmxpbmssXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYz0yMTgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBvaWJfbmV0ZGV2X29wc192ZiA9IHtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jLTIxODgtXFx0Lm5kb190eF90aW1lb3V0XFx0XFx0ID0gaXBvaWJfdGltZW91dCxcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYzoyMTg5OlxcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcXHQgPSBpcG9pYl9zZXRfcnhfbW9kZV9hc3luYyxcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYy0yMTkwLVxcdC5uZG9fZ2V0X2lmbGlua1xcdFxcdCA9IGlwb2liX2dldF9pZmxpbmssXFxuLS1cXG5kcml2ZXJzL25ldC9kdW1teS5jPTg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZHVtbXlfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2R1bW15LmMtOTItXFx0Lm5kb192YWxpZGF0ZV9hZGRyXFx0PSBldGhfdmFsaWRhdGVfYWRkcixcXG5kcml2ZXJzL25ldC9kdW1teS5jOjkzOlxcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcXHQ9IHNldF9tdWx0aWNhc3RfbGlzdCxcXG5kcml2ZXJzL25ldC9kdW1teS5jLTk0LVxcdC5uZG9fc2V0X21hY19hZGRyZXNzXFx0PSBldGhfbWFjX2FkZHIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYz0xNjA1ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJueHRfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE2MDU4LVxcdC5uZG9fZ2V0X3N0YXRzNjRcXHQ9IGJueHRfZ2V0X3N0YXRzNjQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM6MTYwNTk6XFx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1xcdD0gYm54dF9zZXRfcnhfbW9kZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNjA2MC1cXHQubmRvX2V0aF9pb2N0bFxcdFxcdD0gYm54dF9pb2N0bCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuYz01NjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlbmV0YzRfbmRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMtNTY5LVxcdC5uZG9fc2V0X21hY19hZGRyZXNzXFx0PSBlbmV0Y19wZl9zZXRfbWFjX2FkZHIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jOjU3MDpcXHQubmRvX3NldF9yeF9tb2RlX2FzeW5jXFx0PSBlbmV0YzRfcGZfc2V0X3J4X21vZGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jLTU3MS1cXHQubmRvX3NldF9mZWF0dXJlc1xcdD0gZW5ldGM0X3BmX3NldF9mZWF0dXJlcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmM9NTEzND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlhdmZfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMtNTEzNy1cXHQubmRvX3N0YXJ0X3htaXRcXHRcXHQ9IGlhdmZfeG1pdF9mcmFtZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jOjUxMzg6XFx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1xcdD0gaWF2Zl9zZXRfcnhfbW9kZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jLTUxMzktXFx0Lm5kb192YWxpZGF0ZV9hZGRyXFx0PSBldGhfdmFsaWRhdGVfYWRkcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmM9NTMyMj1jb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWx4NWVfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMtNTMyOC1cXHQubmRvX2dldF9zdGF0czY0ICAgICAgICAgPSBtbHg1ZV9nZXRfc3RhdHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYzo1MzI5OlxcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmMgICA9IG1seDVlX3NldF9yeF9tb2RlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMtNTMzMC1cXHQubmRvX3NldF9tYWNfYWRkcmVzcyAgICAgPSBtbHg1ZV9zZXRfbWFjLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19uZXRkZXYuYz01NTk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBmYm5pY19uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19uZXRkZXYuYy01NjYtXFx0Lm5kb19jaGFuZ2VfbXR1XFx0XFx0PSBmYm5pY19jaGFuZ2VfbXR1LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2LmM6NTY3OlxcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcXHQ9IGZibmljX3NldF9yeF9tb2RlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2LmMtNTY4LVxcdC5uZG9fZ2V0X3N0YXRzNjRcXHQ9IGZibmljX2dldF9zdGF0czY0LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTYyNz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5zaW1fbmV0ZGV2X29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtNjI4LVxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gbnNpbV9zdGFydF94bWl0LFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzo2Mjk6XFx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1xcdD0gbnNpbV9zZXRfcnhfbW9kZSxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtNjMwLVxcdC5uZG9fc2V0X21hY19hZGRyZXNzXFx0PSBldGhfbWFjX2FkZHIsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9NjUyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbnNpbV92Zl9uZXRkZXZfb3BzID0ge1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy02NTMtXFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSBuc2ltX3N0YXJ0X3htaXQsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jOjY1NDpcXHQubmRvX3NldF9yeF9tb2RlX2FzeW5jXFx0PSBuc2ltX3NldF9yeF9tb2RlLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy02NTUtXFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcXHQ9IGV0aF9tYWNfYWRkcixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGtpdC5jPTMzMT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5ldGtpdF9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0a2l0LmMtMzM1LVxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gbmV0a2l0X3htaXQsXFxuZHJpdmVycy9uZXQvbmV0a2l0LmM6MzM2OlxcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcXHQ9IG5ldGtpdF9zZXRfbXVsdGljYXN0LFxcbmRyaXZlcnMvbmV0L25ldGtpdC5jLTMzNy1cXHQubmRvX3NldF9yeF9oZWFkcm9vbVxcdD0gbmV0a2l0X3NldF9oZWFkcm9vbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MTA2Mj1zdHJ1Y3QgbmV0ZGV2X25ldF9ub3RpZmllciB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTExMjItICpcXHRDYW5ub3Qgc2xlZXAsIGNhbGxlZCB3aXRoIG5ldGlmX2FkZHJfbG9ja19iaCBoZWxkLlxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MTEyMzogKlxcdERlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgbmRvX3NldF9yeF9tb2RlX2FzeW5jLlxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTEyNC0gKlxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MTEyNTogKiBpbnQgKCpuZG9fc2V0X3J4X21vZGVfYXN5bmMpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xMTI2LSAqXFx0XFx0XFx0XFx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjLFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0xNDQ2PXN0cnVjdCBuZXRfZGV2aWNlX29wcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE0NjEtXFx0dm9pZFxcdFxcdFxcdCgqbmRvX3NldF9yeF9tb2RlKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjE0NjI6XFx0aW50XFx0XFx0XFx0KCpuZG9fc2V0X3J4X21vZGVfYXN5bmMpKFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTQ2My1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTEzMjY9aW50IHJlZ2lzdGVyX25ldGRldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTEzODItXFx0ICAgIGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3NldF9yeF9tb2RlIFxcdTAwMjZcXHUwMDI2XFxubmV0L2NvcmUvZGV2LmM6MTEzODM6XFx0ICAgICFkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zZXRfcnhfbW9kZV9hc3luYylcXG5uZXQvY29yZS9kZXYuYzoxMTM4NDpcXHRcXHRuZXRkZXZfV0FSTihkZXYsIFxcXCJvcHMtbG9ja2VkIGRyaXZlcnMgc2hvdWxkIHVzZSBuZG9fc2V0X3J4X21vZGVfYXN5bmNcXFxcblxcXCIpO1xcbm5ldC9jb3JlL2Rldi5jLTExMzg1LVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMjc3PXZvaWQgbmV0aWZfcnhfbW9kZV9ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTI5NC1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEyOTU6XFx0aWYgKG9wcy1cXHUwMDNlbmRvX3NldF9yeF9tb2RlX2FzeW5jKSB7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMjk2LVxcdFxcdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzE1LVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTMxNjpcXHRpZiAob3BzLVxcdTAwM2VuZG9fc2V0X3J4X21vZGVfYXN5bmMpIHtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEzMTc6XFx0XFx0ZXJyID0gb3BzLVxcdTAwM2VuZG9fc2V0X3J4X21vZGVfYXN5bmMoZGV2LCBcXHUwMDI2dWNfc25hcCwgXFx1MDAyNm1jX3NuYXApO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTMxOC1cXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9MTM2Mj12b2lkIF9fZGV2X3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzNzMtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMzc0OlxcdGlmIChvcHMtXFx1MDAzZW5kb19zZXRfcnhfbW9kZV9hc3luYyB8fCBvcHMtXFx1MDAzZW5kb19jaGFuZ2VfcnhfZmxhZ3MgfHxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzNzUtXFx0ICAgIG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpIHtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9MTM5MD12b2lkIGRldl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xNDAwLSAqXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxNDAxOiAqIERyaXZlcnMgaW1wbGVtZW50aW5nIG5kb19zZXRfcnhfbW9kZV9hc3luYygpIGhhdmUgdGhlaXIgcnggbW9kZSBjYWxsYmFja1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTQwMi0gKiBleGVjdXRlZCBmcm9tIGEgd29ya3F1ZXVlLiBUaGlzIGFsbG93cyB0aGUgY2FsbGJhY2sgdG8gc2xlZXAsIGJ1dCBtZWFuc1xcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmM9NTQxPXN0YXRpYyBpbnQgZGV2X2lmc2lvYyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB2b2lkIF9fdXNlciAqZGF0YSxcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTU4OC1cXHRjYXNlIFNJT0NBRERNVUxUSTpcXG5uZXQvY29yZS9kZXZfaW9jdGwuYzo1ODk6XFx0XFx0aWYgKCghb3BzLVxcdTAwM2VuZG9fc2V0X3J4X21vZGUgXFx1MDAyNlxcdTAwMjYgIW9wcy1cXHUwMDNlbmRvX3NldF9yeF9tb2RlX2FzeW5jKSB8fFxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTU5MC1cXHRcXHQgICAgaWZyLVxcdTAwM2VpZnJfaHdhZGRyLnNhX2ZhbWlseSAhPSBBRl9VTlNQRUMpXFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYy02MDAtXFx0Y2FzZSBTSU9DREVMTVVMVEk6XFxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NjAxOlxcdFxcdGlmICgoIW9wcy1cXHUwMDNlbmRvX3NldF9yeF9tb2RlIFxcdTAwMjZcXHUwMDI2ICFvcHMtXFx1MDAzZW5kb19zZXRfcnhfbW9kZV9hc3luYykgfHxcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy02MDItXFx0XFx0ICAgIGlmci1cXHUwMDNlaWZyX2h3YWRkci5zYV9mYW1pbHkgIT0gQUZfVU5TUEVDKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwMzowNjoyMS4xOTE2OTk3MDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzg2NDE1NjI1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBFTkVUQyBEcml2ZXI6IEEgRm9jdXNlZCBBcHByb2FjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgbWFraW5nIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIEVORVRDIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgaXQgaGFuZGxlcyBSWCBtb2RlLiBUaGUga2V5IHRoaW5nIGlzIHRoYXQgaXQncyByZXBsYWNpbmcgdGhlIHdvcmtxdWV1ZSB3aXRoIGBuZG9fc2V0X3J4X21vZGVfYXN5bmNgLCB3aGljaCBydW5zIGluIHByb2Nlc3MgY29udGV4dC4gVGhpcyBzZWVtcyBsaWtlIGEgZGVjZW50IGNoYW5nZSwgcmVkdWNpbmcgc29tZSBvdmVyaGVhZCwgYnV0IGl0IGRlZmluaXRlbHkgbmVlZHMgc29tZSBhdHRlbnRpb24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuXG5cbk15IG1haW4gY29uY2VybiBpcyB0aGUgcmVtb3ZhbCBvZiB0aGUgd29ya3F1ZXVlIGFuZCB0aGUgc3Vic2VxdWVudCBtb2RpZmljYXRpb25zIHRvIHRoZSBNQUMgZmlsdGVyaW5nIGxvZ2ljLiBUaGlzIHBhdGNoIHRvdWNoZXMgYGVuZXRjNF9wZi5jYCBhbmQgYGVuZXRjX3BmLmNgIHByZXR0eSBleHRlbnNpdmVseSwgc28gdGhvc2UgYXJlIG15IHByaW1hcnkgYXJlYXMgb2YgZm9jdXMuIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBtb2RpZmllZCB0byBkZXRlcm1pbmUgdGhlIGF0dGFjayBzdXJmYWNlLlxuXG5Ob3csIGxldCdzIHNlZSwgYWZ0ZXIgc29tZSBkaWdnaW5nLCBoZXJlIGFyZSB0aGUgZnVuY3Rpb25zIEkndmUgaWRlbnRpZmllZCB0aGF0IGFyZSBtb2RpZmllZCBieSB0aGlzIHBhdGNoIHRoYXQgYXJlIG5vdCBpbiB0aGUgaG90IHBhdGg6IGBlbmV0YzRfcGZfc2V0X3J4X21vZGVgLCBgZW5ldGNfcGZfc2V0X3J4X21vZGVgLCBgZW5ldGM0X3BmX3NldF9tYWNfZmlsdGVyYCwgYGVuZXRjNF9wZl9zZXRfdWNfZXhhY3RfZmlsdGVyYCwgYGVuZXRjNF9wZl9hZGRfbWFmdF9lbnRyaWVzYCwgYGVuZXRjX3N5bmNfbWFjX2ZpbHRlcnNgLCBgZW5ldGNfc2V0X3NpX3VjX3Byb21pc2NgLCBgZW5ldGNfc2V0X3NpX21jX3Byb21pc2NgLCBgZW5ldGNfc2V0X3NpX3VjX2hhc2hfZmlsdGVyYCwgYGVuZXRjX3NldF9zaV9tY19oYXNoX2ZpbHRlcmAsIGBlbmV0Y19zZXRfc2lfdmxhbl9wcm9taXNjYCwgYW5kIGBlbmV0Y19wc2ZwX3BhcnNlX2Nsc2Zsb3dlcmAuXG5cbkkgZGlkIGEgcXVpY2sgY2hlY2sgb24gYSBjb3VwbGUgb2YgdGhvc2UgdG8gc2VlIGlmIGFueSBpbW1lZGlhdGVseSBzdG9vZCBvdXQuIGBlbmV0Y19wc2ZwX3BhcnNlX2Nsc2Zsb3dlcmAgaGFzIGEgc21hbGwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZpbmUuIEhvd2V2ZXIsIGBlbmV0Y192Zl9wcm9iZWAgaGFzIGEgY2hhbmdlIHdoZXJlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBxdWV1ZXMgaXMgY2hhbmdlZCwgc28gdGhlcmUncyBhIHBvdGVudGlhbCBmb3IgbWlzY29uZmlndXJhdGlvbiwgYnV0IHRoYXQncyBhIHNtYWxsZXIgY2hhbmdlLlxuXG5HaXZlbiB0aGlzLCBJIHNob3VsZCBmb2N1cyBvbiB0aGUgbWFpbiBmaWxlcywgZXNwZWNpYWxseSB0aGUgbGlzdGVkIHN5bWJvbHMuIFRoZSBjb25maWcgb3B0aW9ucyBJJ2xsIG5lZWQgdG8gZW5hYmxlIHRvIHRlc3QgdGhpcyBjaGFuZ2UgYXJlOiBgRlNMX0VORVRDYCwgYE5YUF9FTkVUQzRgLCBgRlNMX0VORVRDX1ZGYCwgYW5kIGBGU0xfRU5FVENfUU9TYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBjb3JyZWN0IGNvbmZpZ3MsIGFjY29yZGluZyB0byB0aGUgS2NvbmZpZyBmaWxlcy5cblxuT2theSwgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBjb25maWdzIGFnYWluLi4uIHllcCwgdGhvc2UgYXJlIGl0LiBOb3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY29uZmlncyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGhlcmUuIExldCdzIHNlZS4uLiBgTlhQX05UTVBgPyBObywgd2FpdC4uLiBJbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWdgLCBpdCdzIHRoZXJlLi4uXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMDYyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwMzowNjozNS4wNTU4NTgzNDdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyMDE1MzMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJOWFBfTlRNUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbmV0Yy9LY29uZmlnPTI9Y29uZmlnIE5FVF9EU0FfTkVUQ19TV0lUQ0hcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL0tjb25maWctOC1cXHRzZWxlY3QgRlNMX0VORVRDX01ESU9cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9LY29uZmlnOjk6XFx0c2VsZWN0IE5YUF9OVE1QXFxuZHJpdmVycy9uZXQvZHNhL25ldGMvS2NvbmZpZy0xMC1cXHRzZWxlY3QgTlhQX05FVENfTElCXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZz0yPWNvbmZpZyBGU0xfRU5FVENfQ09SRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTMtXFx0dHJpc3RhdGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZzo0OlxcdHNlbGVjdCBOWFBfTkVUQ19MSUIgaWYgTlhQX05UTVBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy01LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnPTIwPWNvbmZpZyBOWFBfTkVUQ19MSUJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTI2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjI3OmNvbmZpZyBOWFBfTlRNUFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTI4LVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnPTQ4PWNvbmZpZyBOWFBfRU5FVEM0XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy01NC1cXHRzZWxlY3QgTlhQX0VORVRDX1BGX0NPTU1PTlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjU1OlxcdHNlbGVjdCBOWFBfTlRNUFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTU2LVxcdHNlbGVjdCBQSFlMSU5LXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDAzOjA2OjM2Ljc3NjAxOTc4OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2MjMyMDgzMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgRU5FVEMgRHJpdmVyIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBOWFBfRU5FVEM0YCBkZXBlbmRzIG9uIGBOWFBfTlRNUGAuIEdvb2QgdG8ga25vdy4gTGV0IG1lIHF1aWNrbHkgYXNzZXNzIGlmIGBGU0xfRU5FVENgIGlzIHN1ZmZpY2llbnQgb24gaXRzIG93bi4gSXQgc2VlbXMgSSBuZWVkIHRvIGVuYWJsZSBhIGZldyBjb25maWd1cmF0aW9uczogYEZTTF9FTkVUQ2AsIGBOWFBfRU5FVEM0YCwgYEZTTF9FTkVUQ19WRmAsIGFuZCBgRlNMX0VORVRDX1FPU2AuIEFscmlnaHQsIEkndmUgZ290IHRoYXQuXG5cbk5vdywgbGV0J3MgcHJlcGFyZSB0aGUgb3V0cHV0IGZvciB0aGlzIHBhdGNoLiBJJ2xsIGZsYWcgaXQgYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAsIHRoYXQncyBhIGdpdmVuLiBUaGUgY29yZSBvZiB0aGlzIHdvcmsgbGllcyBpbiBob3cgdGhlIGRyaXZlciBoYW5kbGVzIFJYIG1vZGUsIE1BQyBmaWx0ZXJzLCBhbmQgVkxBTiBmaWx0ZXJpbmcuIFRoZXJlZm9yZSwgdGhlIGltcG9ydGFudCBzeW1ib2xzIHRvIGZvY3VzIG9uIGR1cmluZyBmdXp6aW5nIGFyZTogYGVuZXRjNF9wZl9zZXRfcnhfbW9kZWAsIGBlbmV0Y19wZl9zZXRfcnhfbW9kZWAsIGBlbmV0YzRfcGZfc2V0X21hY19maWx0ZXJgLCBgZW5ldGM0X3BmX3NldF91Y19leGFjdF9maWx0ZXJgLCBgZW5ldGM0X3BmX2FkZF9tYWZ0X2VudHJpZXNgLCBgZW5ldGNfc3luY19tYWNfZmlsdGVyc2AsIGBlbmV0Y19zZXRfc2lfdWNfcHJvbWlzY2AsIGBlbmV0Y19zZXRfc2lfbWNfcHJvbWlzY2AsIGBlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXJgLCBgZW5ldGNfc2V0X3NpX21jX2hhc2hfZmlsdGVyYCBhbmQgYGVuZXRjX3NldF9zaV92bGFuX3Byb21pc2NgLiBUaGVzZSByZXByZXNlbnQgdGhlIHByaW1hcnkgYXJlYXMgb2YgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cbkZvciBlbmFibGluZyB0aGUgY29uZmlndXJhdGlvbnMsIEknbGwgbmVlZCB0byBzcGVjaWZ5IHRoZXNlIGNsZWFybHk6IGBGU0xfRU5FVENgLCBgTlhQX0VORVRDNGAsIGBGU0xfRU5FVENfVkZgLCBhbmQgYEZTTF9FTkVUQ19RT1NgLlxuXG5JbiB0ZXJtcyBvZiByZWFzb25pbmcsIHRoZSBwYXRjaCBpcyByZWZhY3RvcmluZyB0aGUgRU5FVEMgZHJpdmVyIHRvIHVzZSBgbmRvX3NldF9yeF9tb2RlX2FzeW5jYCBpbnN0ZWFkIG9mIGEgd29ya3F1ZXVlLiBUaGlzIGlzIGEgZnVuZGFtZW50YWwgY2hhbmdlIGluIGhvdyBpdCBzZXRzIHRoZSBSWCBtb2RlLiBUaGVyZSdzIGFsc28gbW9kaWZpY2F0aW9uIG9mIE1BQyBhbmQgVkxBTiBmaWx0ZXJpbmcsIHBsdXMgdGhlIGludHJvZHVjdGlvbiBvZiBjb21tb24gaGVscGVyIGZ1bmN0aW9ucyBmb3IgcHJvbWlzY3VvdXMgbW9kZSBhbmQgaGFzaCBmaWx0ZXJzLiBTaW5jZSB0aGVzZSBhcmUgYWxsIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgZHJpdmVyIGNvZGUsIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NjY0LCJPdXRwdXRUb2tlbnMiOjMyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwMzowNjo0NS4zOTkyMzAyNDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzkxNTI1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlNMX0VORVRDXCIsXG4gICAgXCJOWFBfRU5FVEM0XCIsXG4gICAgXCJGU0xfRU5FVENfVkZcIixcbiAgICBcIkZTTF9FTkVUQ19RT1NcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlbmV0YzRfcGZfc2V0X3J4X21vZGVcIixcbiAgICBcImVuZXRjX3BmX3NldF9yeF9tb2RlXCIsXG4gICAgXCJlbmV0YzRfcGZfc2V0X21hY19maWx0ZXJcIixcbiAgICBcImVuZXRjNF9wZl9zZXRfdWNfZXhhY3RfZmlsdGVyXCIsXG4gICAgXCJlbmV0YzRfcGZfYWRkX21hZnRfZW50cmllc1wiLFxuICAgIFwiZW5ldGNfc3luY19tYWNfZmlsdGVyc1wiLFxuICAgIFwiZW5ldGNfc2V0X3NpX3VjX3Byb21pc2NcIixcbiAgICBcImVuZXRjX3NldF9zaV9tY19wcm9taXNjXCIsXG4gICAgXCJlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXJcIixcbiAgICBcImVuZXRjX3NldF9zaV9tY19oYXNoX2ZpbHRlclwiLFxuICAgIFwiZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgRU5FVEMgZHJpdmVyIHRvIHVzZSB0aGUgbmV3IGBuZG9fc2V0X3J4X21vZGVfYXN5bmNgIG5ldF9kZXZpY2Vfb3BzIG1lbWJlciBpbnN0ZWFkIG9mIGEgY3VzdG9tIHdvcmtxdWV1ZSBmb3Igc2V0dGluZyB0aGUgUlggbW9kZS4gSXQgYWxzbyBtb2RpZmllcyBNQUMgYW5kIFZMQU4gZmlsdGVyaW5nIGxvZ2ljIGluIHRoZSBQRiBkcml2ZXJzIChgZW5ldGM0X3BmLmNgIGFuZCBgZW5ldGNfcGYuY2ApLCBhbmQgaW50cm9kdWNlcyBjb21tb24gaGVscGVyIGZ1bmN0aW9ucyBmb3IgcHJvbWlzY3VvdXMgbW9kZSBhbmQgaGFzaCBmaWx0ZXJzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlNMX0VORVRDXCIsXG4gICAgXCJOWFBfRU5FVEM0XCIsXG4gICAgXCJGU0xfRU5FVENfVkZcIixcbiAgICBcIkZTTF9FTkVUQ19RT1NcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlbmV0YzRfcGZfc2V0X3J4X21vZGVcIixcbiAgICBcImVuZXRjX3BmX3NldF9yeF9tb2RlXCIsXG4gICAgXCJlbmV0YzRfcGZfc2V0X21hY19maWx0ZXJcIixcbiAgICBcImVuZXRjNF9wZl9zZXRfdWNfZXhhY3RfZmlsdGVyXCIsXG4gICAgXCJlbmV0YzRfcGZfYWRkX21hZnRfZW50cmllc1wiLFxuICAgIFwiZW5ldGNfc3luY19tYWNfZmlsdGVyc1wiLFxuICAgIFwiZW5ldGNfc2V0X3NpX3VjX3Byb21pc2NcIixcbiAgICBcImVuZXRjX3NldF9zaV9tY19wcm9taXNjXCIsXG4gICAgXCJlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXJcIixcbiAgICBcImVuZXRjX3NldF9zaV9tY19oYXNoX2ZpbHRlclwiLFxuICAgIFwiZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgRU5FVEMgZHJpdmVyIHRvIHVzZSB0aGUgbmV3IGBuZG9fc2V0X3J4X21vZGVfYXN5bmNgIG5ldF9kZXZpY2Vfb3BzIG1lbWJlciBpbnN0ZWFkIG9mIGEgY3VzdG9tIHdvcmtxdWV1ZSBmb3Igc2V0dGluZyB0aGUgUlggbW9kZS4gSXQgYWxzbyBtb2RpZmllcyBNQUMgYW5kIFZMQU4gZmlsdGVyaW5nIGxvZ2ljIGluIHRoZSBQRiBkcml2ZXJzIChgZW5ldGM0X3BmLmNgIGFuZCBgZW5ldGNfcGYuY2ApLCBhbmQgaW50cm9kdWNlcyBjb21tb24gaGVscGVyIGZ1bmN0aW9ucyBmb3IgcHJvbWlzY3VvdXMgbW9kZSBhbmQgaGFzaCBmaWx0ZXJzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowbt282[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-20 02:25:13 +0000 UTC FinishedAt: 2026-07-20 03:06:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ce6b4d3216b63f902bb8e9695ee6c10c83415f65", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FSL_ENETC", "NXP_ENETC4", "FSL_ENETC_VF", "FSL_ENETC_QOS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ce6b4d3216b63f902bb8e9695ee6c10c83415f65", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FSL_ENETC", "NXP_ENETC4", "FSL_ENETC_VF", "FSL_ENETC_QOS" ], "series_id": "b69f1c7c-d12c-4f42-9233-3bd7c0def1a7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "enetc4_pf_set_rx_mode", "enetc_pf_set_rx_mode", "enetc4_pf_set_mac_filter", "enetc4_pf_set_uc_exact_filter", "enetc4_pf_add_maft_entries", "enetc_sync_mac_filters", "enetc_set_si_uc_promisc", "enetc_set_si_mc_promisc", "enetc_set_si_uc_hash_filter", "enetc_set_si_mc_hash_filter", "enetc_set_si_vlan_promisc" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIwIDAzOjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZTTF9FTkVUQyYjMzQ7LAogICAgJiMzNDtOWFBfRU5FVEM0JiMzNDssCiAgICAmIzM0O0ZTTF9FTkVUQ19WRiYjMzQ7LAogICAgJiMzNDtGU0xfRU5FVENfUU9TJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZW5ldGM0X3BmX3NldF9yeF9tb2RlJiMzNDssCiAgICAmIzM0O2VuZXRjX3BmX3NldF9yeF9tb2RlJiMzNDssCiAgICAmIzM0O2VuZXRjNF9wZl9zZXRfbWFjX2ZpbHRlciYjMzQ7LAogICAgJiMzNDtlbmV0YzRfcGZfc2V0X3VjX2V4YWN0X2ZpbHRlciYjMzQ7LAogICAgJiMzNDtlbmV0YzRfcGZfYWRkX21hZnRfZW50cmllcyYjMzQ7LAogICAgJiMzNDtlbmV0Y19zeW5jX21hY19maWx0ZXJzJiMzNDssCiAgICAmIzM0O2VuZXRjX3NldF9zaV91Y19wcm9taXNjJiMzNDssCiAgICAmIzM0O2VuZXRjX3NldF9zaV9tY19wcm9taXNjJiMzNDssCiAgICAmIzM0O2VuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlciYjMzQ7LAogICAgJiMzNDtlbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXImIzM0OywKICAgICYjMzQ7ZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIEVORVRDIGRyaXZlciB0byB1c2UgdGhlIG5ldyBgbmRvX3NldF9yeF9tb2RlX2FzeW5jYCBuZXRfZGV2aWNlX29wcyBtZW1iZXIgaW5zdGVhZCBvZiBhIGN1c3RvbSB3b3JrcXVldWUgZm9yIHNldHRpbmcgdGhlIFJYIG1vZGUuIEl0IGFsc28gbW9kaWZpZXMgTUFDIGFuZCBWTEFOIGZpbHRlcmluZyBsb2dpYyBpbiB0aGUgUEYgZHJpdmVycyAoYGVuZXRjNF9wZi5jYCBhbmQgYGVuZXRjX3BmLmNgKSwgYW5kIGludHJvZHVjZXMgY29tbW9uIGhlbHBlciBmdW5jdGlvbnMgZm9yIHByb21pc2N1b3VzIG1vZGUgYW5kIGhhc2ggZmlsdGVycy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBkcml2ZXIgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDAzOjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmIxMzllNDcyZDkwYTc4YWVkMzBhZGEyMjYxNTc0YWRlZTJjMjk2NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDIwIDAzOjAwOjEzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Yy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjLmhcbmluZGV4IDA0YTVkZDVlYTZjNzRjLi44ODM5Y2ZiNDliY2ZlOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Yy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGMuaFxuQEAgLTEsNSAmIzQzOzEsNSBAQFxuIC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMCYjNDM7IE9SIEJTRC0zLUNsYXVzZSkgKi9cbi0vKiBDb3B5cmlnaHQgMjAxNy0yMDE5IE5YUCAqL1xuJiM0MzsvKiBDb3B5cmlnaHQgMjAxNy0yMDE5LCAyMDI1LTIwMjYgTlhQICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG5AQCAtMzI0LDggJiM0MzszMjQsNiBAQCBzdHJ1Y3QgZW5ldGNfc2kge1xuIFx0Y29uc3Qgc3RydWN0IGVuZXRjX2RydmRhdGEgKmRydmRhdGE7XG4gXHRjb25zdCBzdHJ1Y3QgZW5ldGNfc2lfb3BzICpvcHM7XG4gXG4tXHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29ya3F1ZXVlO1xuLVx0c3RydWN0IHdvcmtfc3RydWN0IHJ4X21vZGVfdGFzaztcbiBcdHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdDtcbiBcdHN0cnVjdCBlbmV0Y19tc2dfc3diZCBtc2c7IC8qIE9ubHkgdmFsaWQgZm9yIFZTSSAqL1xuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X2RlYnVnZnMuY1xuaW5kZXggMWIxNTkxZGNlNzNkNGIuLjUwMjkwMzhiZjk5ZmFhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9kZWJ1Z2ZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfZGVidWdmcy5jXG5AQCAtMjgsMTUgJiM0MzsyOCwxNCBAQCBzdGF0aWMgdm9pZCBlbmV0Y19zaG93X3NpX21hY19oYXNoX2ZpbHRlcihzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGludCBpKVxuIFxuIHN0YXRpYyBpbnQgZW5ldGNfbWFjX2ZpbHRlcl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSlcbiB7XG4tXHRzdHJ1Y3QgZW5ldGNfc2kgKnNpID0gcy1cdTAwM2Vwcml2YXRlO1xuLVx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnNpLVx1MDAzZWh3O1xuJiM0MztcdHN0cnVjdCBlbmV0Y19wZiAqcGYgPSBlbmV0Y19zaV9wcml2KHMtXHUwMDNlcHJpdmF0ZSk7XG4mIzQzO1x0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZXNpLVx1MDAzZWh3O1xuJiM0MztcdGludCBudW1fc2kgPSBwZi1cdTAwM2V0b3RhbF92ZnMgJiM0MzsgMTtcbiBcdHN0cnVjdCBtYWZ0X2VudHJ5X2RhdGEgbWFmdDtcbi1cdHN0cnVjdCBlbmV0Y19wZiAqcGY7XG4tXHRpbnQgaSwgZXJyLCBudW1fc2k7XG4tXHR1MzIgdmFsO1xuLVxuLVx0cGYgPSBlbmV0Y19zaV9wcml2KHNpKTtcbi1cdG51bV9zaSA9IHBmLVx1MDAzZWNhcHMubnVtX3ZzaSAmIzQzOyAxO1xuJiM0MztcdHN0cnVjdCBudG1wX3VzZXIgKnVzZXI7XG4mIzQzO1x0dTMyIHZhbCwgZW50cnlfaWQ7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1x0aW50IGk7XG4gXG4gXHR2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBFTkVUQzRfUFNJUE1NUik7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fc2k7IGkmIzQzOyYjNDM7KSB7XG5AQCAtNTAsMzEgJiM0Mzs0OSwzOCBAQCBzdGF0aWMgaW50IGVuZXRjX21hY19maWx0ZXJfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fc2k7IGkmIzQzOyYjNDM7KVxuIFx0XHRlbmV0Y19zaG93X3NpX21hY19oYXNoX2ZpbHRlcihzLCBpKTtcbiBcbi1cdGlmICghcGYtXHUwMDNlbnVtX21mZSlcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0dXNlciA9IFx1MDAyNnBmLVx1MDAzZXNpLVx1MDAzZW50bXBfdXNlcjtcbiYjNDM7XHRydG5sX2xvY2soKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGJpdG1hcF9lbXB0eSh1c2VyLVx1MDAzZW1hZnRfZWlkX2JpdG1hcCwgdXNlci1cdTAwM2VtYWZ0X251bV9lbnRyaWVzKSlcbiYjNDM7XHRcdGdvdG8gdW5sb2NrX3J0bmw7XG4gXG4gXHQvKiBNQUMgYWRkcmVzcyBmaWx0ZXIgdGFibGUgKi9cbiBcdHNlcV9wdXRzKHMsIFwmIzM0O01BQyBhZGRyZXNzIGZpbHRlciB0YWJsZVxcblwmIzM0Oyk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZi1cdTAwM2VudW1fbWZlOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdGZvcl9lYWNoX3NldF9iaXQoZW50cnlfaWQsIHVzZXItXHUwMDNlbWFmdF9laWRfYml0bWFwLFxuJiM0MztcdFx0XHQgdXNlci1cdTAwM2VtYWZ0X251bV9lbnRyaWVzKSB7XG4gXHRcdG1lbXNldChcdTAwMjZtYWZ0LCAwLCBzaXplb2YobWFmdCkpO1xuLVx0XHRlcnIgPSBudG1wX21hZnRfcXVlcnlfZW50cnkoXHUwMDI2c2ktXHUwMDNlbnRtcF91c2VyLCBpLCBcdTAwMjZtYWZ0KTtcbiYjNDM7XHRcdGVyciA9IG50bXBfbWFmdF9xdWVyeV9lbnRyeSh1c2VyLCBlbnRyeV9pZCwgXHUwMDI2bWFmdCk7XG4gXHRcdGlmIChlcnIpXG4tXHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdFx0Z290byB1bmxvY2tfcnRubDtcbiBcbi1cdFx0c2VxX3ByaW50ZihzLCBcJiMzNDtFbnRyeSAlZCwgTUFDOiAlcE0sIFNJIGJpdG1hcDogMHglMDR4XFxuXCYjMzQ7LCBpLFxuLVx0XHRcdCAgIG1hZnQua2V5ZS5tYWNfYWRkciwgbGUxNl90b19jcHUobWFmdC5jZmdlLnNpX2JpdG1hcCkpO1xuJiM0MztcdFx0c2VxX3ByaW50ZihzLCBcJiMzNDtFbnRyeSAlZCwgTUFDOiAlcE0sIFNJIGJpdG1hcDogMHglMDR4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBlbnRyeV9pZCwgbWFmdC5rZXllLm1hY19hZGRyLFxuJiM0MztcdFx0XHQgICBsZTE2X3RvX2NwdShtYWZ0LmNmZ2Uuc2lfYml0bWFwKSk7XG4gXHR9XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7dW5sb2NrX3J0bmw6XG4mIzQzO1x0cnRubF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gREVGSU5FX1NIT1dfQVRUUklCVVRFKGVuZXRjX21hY19maWx0ZXIpO1xuIFxuIHZvaWQgZW5ldGNfY3JlYXRlX2RlYnVnZnMoc3RydWN0IGVuZXRjX3NpICpzaSlcbiB7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHNpLVx1MDAzZW5kZXY7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpyb290O1xuIFxuLVx0cm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihuZXRkZXZfbmFtZShuZGV2KSwgTlVMTCk7XG4mIzQzO1x0cm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihwY2lfbmFtZShzaS1cdTAwM2VwZGV2KSwgTlVMTCk7XG4gXHRpZiAoSVNfRVJSKHJvb3QpKVxuIFx0XHRyZXR1cm47XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9ody5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9ody5oXG5pbmRleCBmMTg0Mzc1NTZhMGVlMi4uMDkwMjVlN2EyYTNhZWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X2h3LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfaHcuaFxuQEAgLTY5LDggJiM0Mzs2OSw2IEBAXG4gXG4gLyogUG9ydCBTdGF0aW9uIGludGVyZmFjZSBwcm9taXNjdW91cyBNQUMgbW9kZSByZWdpc3RlciAqL1xuICNkZWZpbmUgRU5FVEM0X1BTSVBNTVJcdFx0XHQweDIwMFxuLSNkZWZpbmUgIFBTSVBNTVJfU0lfTUFDX1VQKGEpXHRcdEJJVChhKSAvKiBhID0gU0kgaW5kZXggKi9cbi0jZGVmaW5lICBQU0lQTU1SX1NJX01BQ19NUChhKVx0XHRCSVQoKGEpICYjNDM7IDE2KVxuIFxuIC8qIFBvcnQgU3RhdGlvbiBpbnRlcmZhY2UgcHJvbWlzY3VvdXMgVkxBTiBtb2RlIHJlZ2lzdGVyICovXG4gI2RlZmluZSBFTkVUQzRfUFNJUFZNUlx0XHRcdDB4MjA0XG5AQCAtMTM3LDcgJiM0MzsxMzUsNiBAQFxuICNkZWZpbmUgRU5FVEM0X1BTSVZIRlIxKGEpXHRcdCgoYSkgKiAweDgwICYjNDM7IDB4MjA2NClcbiBcbiAjZGVmaW5lIEVORVRDNF9QTUNBUFJcdFx0XHQweDQwMDRcbi0jZGVmaW5lICBQTUNBUFJfSERcdFx0XHRCSVQoOClcbiAjZGVmaW5lICBQTUNBUFJfRlBcdFx0XHRHRU5NQVNLKDEwLCA5KVxuIFxuIC8qIFBvcnQgY2FwYWJpbGl0eSByZWdpc3RlciAqL1xuQEAgLTE1MCw3ICYjNDM7MTQ3LDcgQEBcbiAjZGVmaW5lICBQQ1JfTDJET1NFXHRcdFx0QklUKDQpXG4gI2RlZmluZSAgUENSX1RJTUVSX0NTXHRcdFx0QklUKDgpXG4gI2RlZmluZSAgUENSX1BTUEVFRFx0XHRcdEdFTk1BU0soMjksIDE2KVxuLSNkZWZpbmUgIFBDUl9QU1BFRURfVkFMKHNwZWVkKVx0XHQoKChzcGVlZCkgLyAxMCAtIDEpIFx1MDAzY1x1MDAzYyAxNilcbiYjNDM7I2RlZmluZSAgUENSX1BTUEVFRF9WQUwocylcdFx0RklFTERfUFJFUChQQ1JfUFNQRUVELCAoKHMpIC8gMTAgLSAxKSlcbiBcbiAvKiBQb3J0IE1BQyBhZGRyZXNzIHJlZ2lzdGVyIDAvMSAqL1xuICNkZWZpbmUgRU5FVEM0X1BNQVIwXHRcdFx0MHg0MDIwXG5AQCAtMjAwLDcgJiM0MzsxOTcsNiBAQFxuICNkZWZpbmUgIFBNX0NNRF9DRkdfQ05UX0ZSTV9FTlx0XHRCSVQoMTMpXG4gI2RlZmluZSAgUE1fQ01EX0NGR19UWFBcdFx0XHRCSVQoMTUpXG4gI2RlZmluZSAgUE1fQ01EX0NGR19TRU5EX0lETEVcdFx0QklUKDE2KVxuLSNkZWZpbmUgIFBNX0NNRF9DRkdfSERfRkNFTlx0XHRCSVQoMTgpXG4gI2RlZmluZSAgUE1fQ01EX0NGR19TRkRcdFx0XHRCSVQoMjEpXG4gI2RlZmluZSAgUE1fQ01EX0NGR19UWF9GTFVTSFx0XHRCSVQoMjIpXG4gI2RlZmluZSAgUE1fQ01EX0NGR19UWF9MT1dQX0VOXHRcdEJJVCgyMylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmNcbmluZGV4IDQzN2ExNWJiYjQ3YmE4Li5mY2ZiYWJiMjlkMjJlNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jXG5AQCAtMjMsMTggJiM0MzsyMywxMSBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfZ2V0X3BvcnRfY2FwcyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuIFx0dTMyIHZhbDtcbiBcbiBcdHZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDNF9FQ0FQUjEpO1xuLVx0cGYtXHUwMDNlY2Fwcy5udW1fdnNpID0gKHZhbCBcdTAwMjYgRUNBUFIxX05VTV9WU0kpIFx1MDAzZVx1MDAzZSAyNDtcbiBcdHBmLVx1MDAzZWNhcHMubnVtX21zaXggPSAoKHZhbCBcdTAwMjYgRUNBUFIxX05VTV9NU0lYKSBcdTAwM2VcdTAwM2UgMTIpICYjNDM7IDE7XG4gXG4gXHR2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBFTkVUQzRfRUNBUFIyKTtcbiBcdHBmLVx1MDAzZWNhcHMubnVtX3J4X2JkciA9ICh2YWwgXHUwMDI2IEVDQVBSMl9OVU1fUlhfQkRSKSBcdTAwM2VcdTAwM2UgMTY7XG4gXHRwZi1cdTAwM2VjYXBzLm51bV90eF9iZHIgPSB2YWwgXHUwMDI2IEVDQVBSMl9OVU1fVFhfQkRSO1xuLVxuLVx0dmFsID0gZW5ldGNfcG9ydF9yZChodywgRU5FVEM0X1BNQ0FQUik7XG4tXHRwZi1cdTAwM2VjYXBzLmhhbGZfZHVwbGV4ID0gKHZhbCBcdTAwMjYgUE1DQVBSX0hEKSA/IDEgOiAwO1xuLVxuLVx0dmFsID0gZW5ldGNfcG9ydF9yZChodywgRU5FVEM0X1BTSU1BRkNBUFIpO1xuLVx0cGYtXHUwMDNlY2Fwcy5tYWNfZmlsdGVyX251bSA9IHZhbCBcdTAwMjYgUFNJTUFGQ0FQUl9OVU1fTUFDX0FGVEU7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGVuZXRjNF9nZXRfcHNpX2h3X2ZlYXR1cmVzKHN0cnVjdCBlbmV0Y19zaSAqc2kpXG5AQCAtNzUsMzggJiM0Mzs2OCw2IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wZl9nZXRfc2lfcHJpbWFyeV9tYWMoc3RydWN0IGVuZXRjX2h3ICpodywgaW50IHNpLFxuIFx0cHV0X3VuYWxpZ25lZF9sZTE2KGxvd2VyLCBhZGRyICYjNDM7IDQpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBlbmV0YzRfcGZfc2V0X3NpX21hY19wcm9taXNjKHN0cnVjdCBlbmV0Y19odyAqaHcsIGludCBzaSxcbi1cdFx0XHRcdFx0IGJvb2wgdWNfcHJvbWlzYywgYm9vbCBtY19wcm9taXNjKVxuLXtcbi1cdHUzMiB2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBFTkVUQzRfUFNJUE1NUik7XG4tXG4tXHRpZiAodWNfcHJvbWlzYylcbi1cdFx0dmFsIHw9IFBTSVBNTVJfU0lfTUFDX1VQKHNpKTtcbi1cdGVsc2Vcbi1cdFx0dmFsIFx1MDAyNj0gflBTSVBNTVJfU0lfTUFDX1VQKHNpKTtcbi1cbi1cdGlmIChtY19wcm9taXNjKVxuLVx0XHR2YWwgfD0gUFNJUE1NUl9TSV9NQUNfTVAoc2kpO1xuLVx0ZWxzZVxuLVx0XHR2YWwgXHUwMDI2PSB+UFNJUE1NUl9TSV9NQUNfTVAoc2kpO1xuLVxuLVx0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSVBNTVIsIHZhbCk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX2h3ICpodywgaW50IHNpLFxuLVx0XHRcdFx0XHQgICAgdTY0IGhhc2gpXG4te1xuLVx0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSVVNSEZSMChzaSksIGxvd2VyXzMyX2JpdHMoaGFzaCkpO1xuLVx0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSVVNSEZSMShzaSksIHVwcGVyXzMyX2JpdHMoaGFzaCkpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBlbmV0YzRfcGZfc2V0X3NpX21jX2hhc2hfZmlsdGVyKHN0cnVjdCBlbmV0Y19odyAqaHcsIGludCBzaSxcbi1cdFx0XHRcdFx0ICAgIHU2NCBoYXNoKVxuLXtcbi1cdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lNTUhGUjAoc2kpLCBsb3dlcl8zMl9iaXRzKGhhc2gpKTtcbi1cdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lNTUhGUjEoc2kpLCB1cHBlcl8zMl9iaXRzKGhhc2gpKTtcbi19XG4tXG4gc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9sb29wYmFjayhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgYm9vbCBlbilcbiB7XG4gXHRzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG5AQCAtMTI0LDM0ICYjNDM7ODUsNDcgQEAgc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9sb29wYmFjayhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgYm9vbCBlbilcbiBcbiBzdGF0aWMgdm9pZCBlbmV0YzRfcGZfY2xlYXJfbWFmdF9lbnRyaWVzKHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4ge1xuLVx0aW50IGk7XG4mIzQzO1x0c3RydWN0IG50bXBfdXNlciAqdXNlciA9IFx1MDAyNnBmLVx1MDAzZXNpLVx1MDAzZW50bXBfdXNlcjtcbiYjNDM7XHR1MzIgZW50cnlfaWQ7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZi1cdTAwM2VudW1fbWZlOyBpJiM0MzsmIzQzOylcbi1cdFx0bnRtcF9tYWZ0X2RlbGV0ZV9lbnRyeShcdTAwMjZwZi1cdTAwM2VzaS1cdTAwM2VudG1wX3VzZXIsIGkpO1xuLVxuLVx0cGYtXHUwMDNlbnVtX21mZSA9IDA7XG4mIzQzO1x0Zm9yX2VhY2hfc2V0X2JpdChlbnRyeV9pZCwgdXNlci1cdTAwM2VtYWZ0X2VpZF9iaXRtYXAsXG4mIzQzO1x0XHRcdCB1c2VyLVx1MDAzZW1hZnRfbnVtX2VudHJpZXMpIHtcbiYjNDM7XHRcdGlmICghbnRtcF9tYWZ0X2RlbGV0ZV9lbnRyeSh1c2VyLCBlbnRyeV9pZCkpXG4mIzQzO1x0XHRcdG50bXBfY2xlYXJfZWlkX2JpdG1hcCh1c2VyLVx1MDAzZW1hZnRfZWlkX2JpdG1hcCwgZW50cnlfaWQpO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIGludCBlbmV0YzRfcGZfYWRkX21hZnRfZW50cmllcyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLFxuLVx0XHRcdFx0ICAgICAgc3RydWN0IGVuZXRjX21hY19hZGRyICptYWMsXG4tXHRcdFx0XHQgICAgICBpbnQgbWFjX2NudClcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMpXG4ge1xuJiM0MztcdHN0cnVjdCBudG1wX3VzZXIgKnVzZXIgPSBcdTAwMjZwZi1cdTAwM2VzaS1cdTAwM2VudG1wX3VzZXI7XG4mIzQzO1x0aW50IG1hY19jbnQgPSBuZXRkZXZfaHdfYWRkcl9saXN0X2NvdW50KHVjKTtcbiBcdHN0cnVjdCBtYWZ0X2VudHJ5X2RhdGEgbWFmdCA9IHt9O1xuJiM0MztcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4mIzQzO1x0dTMyIGF2YWlsYWJsZV9lbnRyaWVzO1xuIFx0dTE2IHNpX2JpdCA9IEJJVCgwKTtcbi1cdGludCBpLCBlcnI7XG4mIzQzO1x0dTMyIGVudHJ5X2lkO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGF2YWlsYWJsZV9lbnRyaWVzID0gdXNlci1cdTAwM2VtYWZ0X251bV9lbnRyaWVzIC1cbiYjNDM7XHRcdFx0ICAgIGJpdG1hcF93ZWlnaHQodXNlci1cdTAwM2VtYWZ0X2VpZF9iaXRtYXAsXG4mIzQzO1x0XHRcdFx0XHQgIHVzZXItXHUwMDNlbWFmdF9udW1fZW50cmllcyk7XG4mIzQzO1xuJiM0MztcdGlmIChtYWNfY250IFx1MDAzZSBhdmFpbGFibGVfZW50cmllcylcbiYjNDM7XHRcdHJldHVybiAtRU5PU1BDO1xuIFxuIFx0bWFmdC5jZmdlLnNpX2JpdG1hcCA9IGNwdV90b19sZTE2KHNpX2JpdCk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtYWNfY250OyBpJiM0MzsmIzQzOykge1xuLVx0XHRldGhlcl9hZGRyX2NvcHkobWFmdC5rZXllLm1hY19hZGRyLCBtYWNbaV0uYWRkcik7XG4tXHRcdGVyciA9IG50bXBfbWFmdF9hZGRfZW50cnkoXHUwMDI2cGYtXHUwMDNlc2ktXHUwMDNlbnRtcF91c2VyLCBpLCBcdTAwMjZtYWZ0KTtcbiYjNDM7XHRuZXRkZXZfaHdfYWRkcl9saXN0X2Zvcl9lYWNoKGhhLCB1Yykge1xuJiM0MztcdFx0ZW50cnlfaWQgPSBudG1wX2xvb2t1cF9mcmVlX2VpZCh1c2VyLVx1MDAzZW1hZnRfZWlkX2JpdG1hcCxcbiYjNDM7XHRcdFx0XHRcdFx0dXNlci1cdTAwM2VtYWZ0X251bV9lbnRyaWVzKTtcbiYjNDM7XHRcdGV0aGVyX2FkZHJfY29weShtYWZ0LmtleWUubWFjX2FkZHIsIGhhLVx1MDAzZWFkZHIpO1xuJiM0MztcdFx0ZXJyID0gbnRtcF9tYWZ0X2FkZF9lbnRyeSh1c2VyLCBlbnRyeV9pZCwgXHUwMDI2bWFmdCk7XG4gXHRcdGlmICh1bmxpa2VseShlcnIpKSB7XG4tXHRcdFx0cGYtXHUwMDNlbnVtX21mZSA9IGk7XG4mIzQzO1x0XHRcdG50bXBfY2xlYXJfZWlkX2JpdG1hcCh1c2VyLVx1MDAzZW1hZnRfZWlkX2JpdG1hcCwgZW50cnlfaWQpO1xuIFx0XHRcdGdvdG8gY2xlYXJfbWFmdF9lbnRyaWVzO1xuIFx0XHR9XG4gXHR9XG4gXG4tXHRwZi1cdTAwM2VudW1fbWZlID0gbWFjX2NudDtcbi1cbiBcdHJldHVybiAwO1xuIFxuIGNsZWFyX21hZnRfZW50cmllczpcbkBAIC0xNjAsOTcgJiM0MzsxMzQsNzAgQEAgc3RhdGljIGludCBlbmV0YzRfcGZfYWRkX21hZnRfZW50cmllcyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLFxuIFx0cmV0dXJuICBlcnI7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZW5ldGM0X3BmX3NldF91Y19leGFjdF9maWx0ZXIoc3RydWN0IGVuZXRjX3BmICpwZilcbiYjNDM7c3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF91Y19oYXNoX2ZpbHRlcihzdHJ1Y3QgZW5ldGNfcGYgKnBmLFxuJiM0MztcdFx0XHRcdFx0IHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp1YylcbiB7XG4tXHRpbnQgbWF4X251bV9tZmUgPSBwZi1cdTAwM2VjYXBzLm1hY19maWx0ZXJfbnVtO1xuLVx0c3RydWN0IGVuZXRjX21hY19maWx0ZXIgbWFjX2ZpbHRlciA9IHt9O1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwZi1cdTAwM2VzaS1cdTAwM2VuZGV2O1xuLVx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZXNpLVx1MDAzZWh3O1xuLVx0c3RydWN0IGVuZXRjX21hY19hZGRyICptYWNfdGJsO1xuJiM0MztcdHN0cnVjdCBlbmV0Y19tYWNfZmlsdGVyICptYWNfZmlsdGVyID0gXHUwMDI2cGYtXHUwMDNlbWFjX2ZpbHRlcltVQ107XG4gXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xuLVx0aW50IGkgPSAwLCBlcnI7XG4tXHRpbnQgbWFjX2NudDtcbiYjNDM7XHR1NjQgaGFzaDtcbiBcbi1cdG5ldGlmX2FkZHJfbG9ja19iaChuZGV2KTtcbiYjNDM7XHRlbmV0Y19yZXNldF9tYWNfYWRkcl9maWx0ZXIobWFjX2ZpbHRlcik7XG4mIzQzO1x0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgdWMpXG4mIzQzO1x0XHRlbmV0Y19hZGRfbWFjX2FkZHJfaHRfZmlsdGVyKG1hY19maWx0ZXIsIGhhLVx1MDAzZWFkZHIpO1xuJiM0MztcbiYjNDM7XHRiaXRtYXBfdG9fYXJyNjQoXHUwMDI2aGFzaCwgbWFjX2ZpbHRlci1cdTAwM2VtYWNfaGFzaF90YWJsZSxcbiYjNDM7XHRcdFx0RU5FVENfTUFERFJfSEFTSF9UQkxfU1opO1xuJiM0MztcdGVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcihwZi1cdTAwM2VzaSwgMCwgaGFzaCk7XG4mIzQzO31cbiBcbi1cdG1hY19jbnQgPSBuZXRkZXZfdWNfY291bnQobmRldik7XG4tXHRpZiAoIW1hY19jbnQpIHtcbi1cdFx0bmV0aWZfYWRkcl91bmxvY2tfYmgobmRldik7XG4mIzQzO3N0YXRpYyBpbnQgZW5ldGM0X3BmX3NldF91Y19leGFjdF9maWx0ZXIoc3RydWN0IGVuZXRjX3BmICpwZixcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZW5ldGNfc2kgKnNpID0gcGYtXHUwMDNlc2k7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKG5ldGRldl9od19hZGRyX2xpc3RfZW1wdHkodWMpKSB7XG4gXHRcdC8qIGNsZWFyIGJvdGggTUFDIGhhc2ggYW5kIGV4YWN0IGZpbHRlcnMgKi9cbi1cdFx0ZW5ldGM0X3BmX3NldF9zaV91Y19oYXNoX2ZpbHRlcihodywgMCwgMCk7XG4mIzQzO1x0XHRlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc2ksIDAsIDApO1xuIFx0XHRlbmV0YzRfcGZfY2xlYXJfbWFmdF9lbnRyaWVzKHBmKTtcbiBcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHRpZiAobWFjX2NudCBcdTAwM2UgbWF4X251bV9tZmUpIHtcbi1cdFx0ZXJyID0gLUVOT1NQQztcbi1cdFx0Z290byB1bmxvY2tfbmV0aWZfYWRkcjtcbi1cdH1cbi1cbi1cdG1hY190YmwgPSBremFsbG9jX29ianMoKm1hY190YmwsIG1hY19jbnQsIEdGUF9BVE9NSUMpO1xuLVx0aWYgKCFtYWNfdGJsKSB7XG4tXHRcdGVyciA9IC1FTk9NRU07XG4tXHRcdGdvdG8gdW5sb2NrX25ldGlmX2FkZHI7XG4tXHR9XG4tXG4tXHRuZXRkZXZfZm9yX2VhY2hfdWNfYWRkcihoYSwgbmRldikge1xuLVx0XHRlbmV0Y19hZGRfbWFjX2FkZHJfaHRfZmlsdGVyKFx1MDAyNm1hY19maWx0ZXIsIGhhLVx1MDAzZWFkZHIpO1xuLVx0XHRldGhlcl9hZGRyX2NvcHkobWFjX3RibFtpJiM0MzsmIzQzO10uYWRkciwgaGEtXHUwMDNlYWRkcik7XG4tXHR9XG4tXG4tXHRuZXRpZl9hZGRyX3VubG9ja19iaChuZGV2KTtcbi1cbi1cdC8qIFNldCB0ZW1wb3JhcnkgdW5pY2FzdCBoYXNoIGZpbHRlcnMgaW4gY2FzZSBvZiBSeCBsb3NzIHdoZW5cbiYjNDM7XHQvKiBTZXQgdGVtcG9yYXJ5IHVuaWNhc3QgaGFzaCBmaWx0ZXIgaW4gY2FzZSBvZiBSeCBsb3NzIHdoZW5cbiBcdCAqIHVwZGF0aW5nIE1BQyBhZGRyZXNzIGZpbHRlciB0YWJsZVxuIFx0ICovXG4tXHRlbmV0YzRfcGZfc2V0X3NpX3VjX2hhc2hfZmlsdGVyKGh3LCAwLCAqbWFjX2ZpbHRlci5tYWNfaGFzaF90YWJsZSk7XG4mIzQzO1x0ZW5ldGM0X3BmX3NldF91Y19oYXNoX2ZpbHRlcihwZiwgdWMpO1xuIFx0ZW5ldGM0X3BmX2NsZWFyX21hZnRfZW50cmllcyhwZik7XG4gXG4tXHRpZiAoIWVuZXRjNF9wZl9hZGRfbWFmdF9lbnRyaWVzKHBmLCBtYWNfdGJsLCBpKSlcbi1cdFx0ZW5ldGM0X3BmX3NldF9zaV91Y19oYXNoX2ZpbHRlcihodywgMCwgMCk7XG4tXG4tXHRrZnJlZShtYWNfdGJsKTtcbi1cbi1cdHJldHVybiAwO1xuLVxuLXVubG9ja19uZXRpZl9hZGRyOlxuLVx0bmV0aWZfYWRkcl91bmxvY2tfYmgobmRldik7XG4mIzQzO1x0ZXJyID0gZW5ldGM0X3BmX2FkZF9tYWZ0X2VudHJpZXMocGYsIHVjKTtcbiYjNDM7XHRpZiAoIWVycikge1xuJiM0MztcdFx0ZW5ldGNfcmVzZXRfbWFjX2FkZHJfZmlsdGVyKFx1MDAyNnBmLVx1MDAzZW1hY19maWx0ZXJbVUNdKTtcbiYjNDM7XHRcdGVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcihzaSwgMCwgMCk7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9tYWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3BmICpwZiwgaW50IHR5cGUpXG4mIzQzO3N0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfbWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3BmICpwZixcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpXG4ge1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwZi1cdTAwM2VzaS1cdTAwM2VuZGV2O1xuLVx0c3RydWN0IGVuZXRjX21hY19maWx0ZXIgKm1hY19maWx0ZXI7XG4tXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXHUwMDI2cGYtXHUwMDNlc2ktXHUwMDNlaHc7XG4mIzQzO1x0c3RydWN0IGVuZXRjX21hY19maWx0ZXIgKm1hY19maWx0ZXIgPSBcdTAwMjZwZi1cdTAwM2VtYWNfZmlsdGVyW01DXTtcbiBcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4mIzQzO1x0dTY0IGhhc2g7XG4gXG4tXHRuZXRpZl9hZGRyX2xvY2tfYmgobmRldik7XG4tXHRpZiAodHlwZSBcdTAwMjYgRU5FVENfTUFDX0ZJTFRFUl9UWVBFX1VDKSB7XG4tXHRcdG1hY19maWx0ZXIgPSBcdTAwMjZwZi1cdTAwM2VtYWNfZmlsdGVyW1VDXTtcbi1cdFx0ZW5ldGNfcmVzZXRfbWFjX2FkZHJfZmlsdGVyKG1hY19maWx0ZXIpO1xuLVx0XHRuZXRkZXZfZm9yX2VhY2hfdWNfYWRkcihoYSwgbmRldilcbi1cdFx0XHRlbmV0Y19hZGRfbWFjX2FkZHJfaHRfZmlsdGVyKG1hY19maWx0ZXIsIGhhLVx1MDAzZWFkZHIpO1xuLVxuLVx0XHRlbmV0YzRfcGZfc2V0X3NpX3VjX2hhc2hfZmlsdGVyKGh3LCAwLFxuLVx0XHRcdFx0XHRcdCptYWNfZmlsdGVyLVx1MDAzZW1hY19oYXNoX3RhYmxlKTtcbi1cdH1cbiYjNDM7XHRlbmV0Y19yZXNldF9tYWNfYWRkcl9maWx0ZXIobWFjX2ZpbHRlcik7XG4mIzQzO1x0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgbWMpXG4mIzQzO1x0XHRlbmV0Y19hZGRfbWFjX2FkZHJfaHRfZmlsdGVyKG1hY19maWx0ZXIsIGhhLVx1MDAzZWFkZHIpO1xuIFxuLVx0aWYgKHR5cGUgXHUwMDI2IEVORVRDX01BQ19GSUxURVJfVFlQRV9NQykge1xuLVx0XHRtYWNfZmlsdGVyID0gXHUwMDI2cGYtXHUwMDNlbWFjX2ZpbHRlcltNQ107XG4tXHRcdGVuZXRjX3Jlc2V0X21hY19hZGRyX2ZpbHRlcihtYWNfZmlsdGVyKTtcbi1cdFx0bmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIG5kZXYpXG4tXHRcdFx0ZW5ldGNfYWRkX21hY19hZGRyX2h0X2ZpbHRlcihtYWNfZmlsdGVyLCBoYS1cdTAwM2VhZGRyKTtcbi1cbi1cdFx0ZW5ldGM0X3BmX3NldF9zaV9tY19oYXNoX2ZpbHRlcihodywgMCxcbi1cdFx0XHRcdFx0XHQqbWFjX2ZpbHRlci1cdTAwM2VtYWNfaGFzaF90YWJsZSk7XG4tXHR9XG4tXHRuZXRpZl9hZGRyX3VubG9ja19iaChuZGV2KTtcbiYjNDM7XHRiaXRtYXBfdG9fYXJyNjQoXHUwMDI2aGFzaCwgbWFjX2ZpbHRlci1cdTAwM2VtYWNfaGFzaF90YWJsZSxcbiYjNDM7XHRcdFx0RU5FVENfTUFERFJfSEFTSF9UQkxfU1opO1xuJiM0MztcdGVuZXRjX3NldF9zaV9tY19oYXNoX2ZpbHRlcihwZi1cdTAwM2VzaSwgMCwgaGFzaCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfbWFjX2ZpbHRlcihzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBpbnQgdHlwZSlcbiYjNDM7c3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9tYWNfZmlsdGVyKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGludCB0eXBlLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jKVxuIHtcbiBcdC8qIEN1cnJlbnRseSwgdGhlIE1BQyBhZGRyZXNzIGZpbHRlciB0YWJsZSAoTUFGVCkgb25seSBoYXMgNCBlbnRyaWVzLFxuIFx0ICogYW5kIG11bHRpcGxlIG11bHRpY2FzdCBhZGRyZXNzZXMgZm9yIGZpbHRlcmluZyB3aWxsIGJlIGNvbmZpZ3VyZWRcbkBAIC0yNTgsMTUgJiM0MzsyMDUsMTYgQEAgc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9tYWNfZmlsdGVyKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGludCB0eXBlKVxuIFx0ICogdW5pY2FzdCBmaWx0ZXJpbmcuIElmIHRoZSBudW1iZXIgb2YgdW5pY2FzdCBhZGRyZXNzZXMgZXhjZWVkcyB0aGVcbiBcdCAqIHRhYmxlIGNhcGFjaXR5LCB0aGUgTUFDIGhhc2ggZmlsdGVyIHdpbGwgYmUgdXNlZC5cbiBcdCAqL1xuLVx0aWYgKHR5cGUgXHUwMDI2IEVORVRDX01BQ19GSUxURVJfVFlQRV9VQyBcdTAwMjZcdTAwMjYgZW5ldGM0X3BmX3NldF91Y19leGFjdF9maWx0ZXIocGYpKSB7XG4mIzQzO1x0aWYgKHR5cGUgXHUwMDI2IEVORVRDX01BQ19GSUxURVJfVFlQRV9VQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgZW5ldGM0X3BmX3NldF91Y19leGFjdF9maWx0ZXIocGYsIHVjKSkge1xuIFx0XHQvKiBGYWxsIGJhY2sgdG8gdGhlIE1BQyBoYXNoIGZpbHRlciAqL1xuLVx0XHRlbmV0YzRfcGZfc2V0X21hY19oYXNoX2ZpbHRlcihwZiwgRU5FVENfTUFDX0ZJTFRFUl9UWVBFX1VDKTtcbiYjNDM7XHRcdGVuZXRjNF9wZl9zZXRfdWNfaGFzaF9maWx0ZXIocGYsIHVjKTtcbiBcdFx0LyogQ2xlYXIgdGhlIG9sZCBNQUMgZXhhY3QgZmlsdGVyICovXG4gXHRcdGVuZXRjNF9wZl9jbGVhcl9tYWZ0X2VudHJpZXMocGYpO1xuIFx0fVxuIFxuIFx0aWYgKHR5cGUgXHUwMDI2IEVORVRDX01BQ19GSUxURVJfVFlQRV9NQylcbi1cdFx0ZW5ldGM0X3BmX3NldF9tYWNfaGFzaF9maWx0ZXIocGYsIEVORVRDX01BQ19GSUxURVJfVFlQRV9NQyk7XG4mIzQzO1x0XHRlbmV0YzRfcGZfc2V0X21jX2hhc2hfZmlsdGVyKHBmLCBtYyk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZW5ldGNfcGZfb3BzIGVuZXRjNF9wZl9vcHMgPSB7XG5AQCAtMzA2LDM0ICYjNDM7MjU0LDM1IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9kZWZhdWx0X3JpbmdzX2FsbG9jYXRpb24oc3RydWN0IGVuZXRjX3BmICpwZilcbiB7XG4gXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXHUwMDI2cGYtXHUwMDNlc2ktXHUwMDNlaHc7XG4gXHR1MzIgbnVtX3J4X2JkciwgbnVtX3R4X2JkciwgdmFsO1xuJiM0MztcdGludCBudW1fdmZzID0gcGYtXHUwMDNldG90YWxfdmZzO1xuIFx0dTMyIHZmX3R4X2JkciwgdmZfcnhfYmRyO1xuIFx0aW50IGksIHJ4X3JlbSwgdHhfcmVtO1xuIFxuLVx0aWYgKHBmLVx1MDAzZWNhcHMubnVtX3J4X2JkciBcdTAwM2MgRU5FVENfU0lfTUFYX1JJTkdfTlVNICYjNDM7IHBmLVx1MDAzZWNhcHMubnVtX3ZzaSlcbi1cdFx0bnVtX3J4X2JkciA9IHBmLVx1MDAzZWNhcHMubnVtX3J4X2JkciAtIHBmLVx1MDAzZWNhcHMubnVtX3ZzaTtcbiYjNDM7XHRpZiAocGYtXHUwMDNlY2Fwcy5udW1fcnhfYmRyIFx1MDAzYyBFTkVUQ19TSV9NQVhfUklOR19OVU0gJiM0MzsgbnVtX3ZmcylcbiYjNDM7XHRcdG51bV9yeF9iZHIgPSBwZi1cdTAwM2VjYXBzLm51bV9yeF9iZHIgLSBudW1fdmZzO1xuIFx0ZWxzZVxuIFx0XHRudW1fcnhfYmRyID0gRU5FVENfU0lfTUFYX1JJTkdfTlVNO1xuIFxuLVx0aWYgKHBmLVx1MDAzZWNhcHMubnVtX3R4X2JkciBcdTAwM2MgRU5FVENfU0lfTUFYX1JJTkdfTlVNICYjNDM7IHBmLVx1MDAzZWNhcHMubnVtX3ZzaSlcbi1cdFx0bnVtX3R4X2JkciA9IHBmLVx1MDAzZWNhcHMubnVtX3R4X2JkciAtIHBmLVx1MDAzZWNhcHMubnVtX3ZzaTtcbiYjNDM7XHRpZiAocGYtXHUwMDNlY2Fwcy5udW1fdHhfYmRyIFx1MDAzYyBFTkVUQ19TSV9NQVhfUklOR19OVU0gJiM0MzsgbnVtX3ZmcylcbiYjNDM7XHRcdG51bV90eF9iZHIgPSBwZi1cdTAwM2VjYXBzLm51bV90eF9iZHIgLSBudW1fdmZzO1xuIFx0ZWxzZVxuIFx0XHRudW1fdHhfYmRyID0gRU5FVENfU0lfTUFYX1JJTkdfTlVNO1xuIFxuIFx0dmFsID0gZW5ldGM0X3BzaWNmZ3IwX3ZhbF9jb25zdHJ1Y3QoZmFsc2UsIG51bV90eF9iZHIsIG51bV9yeF9iZHIpO1xuIFx0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSUNGR1IwKDApLCB2YWwpO1xuIFxuLVx0aWYgKCFwZi1cdTAwM2VjYXBzLm51bV92c2kpXG4mIzQzO1x0aWYgKCFudW1fdmZzKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRudW1fcnhfYmRyID0gcGYtXHUwMDNlY2Fwcy5udW1fcnhfYmRyIC0gbnVtX3J4X2Jkcjtcbi1cdHJ4X3JlbSA9IG51bV9yeF9iZHIgJSBwZi1cdTAwM2VjYXBzLm51bV92c2k7XG4tXHRudW1fcnhfYmRyID0gbnVtX3J4X2JkciAvIHBmLVx1MDAzZWNhcHMubnVtX3ZzaTtcbiYjNDM7XHRyeF9yZW0gPSBudW1fcnhfYmRyICUgbnVtX3ZmcztcbiYjNDM7XHRudW1fcnhfYmRyID0gbnVtX3J4X2JkciAvIG51bV92ZnM7XG4gXG4gXHRudW1fdHhfYmRyID0gcGYtXHUwMDNlY2Fwcy5udW1fdHhfYmRyIC0gbnVtX3R4X2Jkcjtcbi1cdHR4X3JlbSA9IG51bV90eF9iZHIgJSBwZi1cdTAwM2VjYXBzLm51bV92c2k7XG4tXHRudW1fdHhfYmRyID0gbnVtX3R4X2JkciAvIHBmLVx1MDAzZWNhcHMubnVtX3ZzaTtcbiYjNDM7XHR0eF9yZW0gPSBudW1fdHhfYmRyICUgbnVtX3ZmcztcbiYjNDM7XHRudW1fdHhfYmRyID0gbnVtX3R4X2JkciAvIG51bV92ZnM7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZi1cdTAwM2VjYXBzLm51bV92c2k7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3ZmczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0dmZfdHhfYmRyID0gKGkgXHUwMDNjIHR4X3JlbSkgPyBudW1fdHhfYmRyICYjNDM7IDEgOiBudW1fdHhfYmRyO1xuIFx0XHR2Zl9yeF9iZHIgPSAoaSBcdTAwM2MgcnhfcmVtKSA/IG51bV9yeF9iZHIgJiM0MzsgMSA6IG51bV9yeF9iZHI7XG4gXHRcdHZhbCA9IGVuZXRjNF9wc2ljZmdyMF92YWxfY29uc3RydWN0KHRydWUsIHZmX3R4X2JkciwgdmZfcnhfYmRyKTtcbkBAIC0zNDYsNTMgJiM0MzsyOTUsNzAgQEAgc3RhdGljIHZvaWQgZW5ldGM0X2FsbG9jYXRlX3NpX3JpbmdzKHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4gXHRlbmV0YzRfZGVmYXVsdF9yaW5nc19hbGxvY2F0aW9uKHBmKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9zaV92bGFuX3Byb21pc2Moc3RydWN0IGVuZXRjX2h3ICpodywgaW50IHNpLCBib29sIGVuKVxuLXtcbi1cdHUzMiB2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBFTkVUQzRfUFNJUFZNUik7XG4tXG4tXHRpZiAoZW4pXG4tXHRcdHZhbCB8PSBCSVQoc2kpO1xuLVx0ZWxzZVxuLVx0XHR2YWwgXHUwMDI2PSB+QklUKHNpKTtcbi1cbi1cdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lQVk1SLCB2YWwpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBlbmV0YzRfc2V0X2RlZmF1bHRfc2lfdmxhbl9wcm9taXNjKHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4te1xuLVx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZXNpLVx1MDAzZWh3O1xuLVx0aW50IG51bV9zaSA9IHBmLVx1MDAzZWNhcHMubnVtX3ZzaSAmIzQzOyAxO1xuLVx0aW50IGk7XG4tXG4tXHQvKiBlbmZvcmNlIFZMQU4gcHJvbWlzY3VvdXMgbW9kZSBmb3IgYWxsIFNJcyAqL1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3NpOyBpJiM0MzsmIzQzOylcbi1cdFx0ZW5ldGM0X3BmX3NldF9zaV92bGFuX3Byb21pc2MoaHcsIGksIHRydWUpO1xuLX1cbi1cbiAvKiBBbGxvY2F0ZSB0aGUgbnVtYmVyIG9mIE1TSS1YIHZlY3RvcnMgZm9yIHBlciBTSS4gKi9cbiBzdGF0aWMgdm9pZCBlbmV0YzRfc2V0X3NpX21zaXhfbnVtKHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4ge1xuJiM0MztcdGludCB2YWxpZF9udW1fc2kgPSBwZi1cdTAwM2V0b3RhbF92ZnMgJiM0MzsgMTtcbiBcdHN0cnVjdCBlbmV0Y19odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2VzaS1cdTAwM2Vodztcbi1cdGludCBpLCBudW1fbXNpeCwgdG90YWxfc2k7XG4mIzQzO1x0aW50IGksIG51bV9tc2l4LCBudW1fdnNpO1xuIFx0dTMyIHZhbDtcbiBcbi1cdHRvdGFsX3NpID0gcGYtXHUwMDNlY2Fwcy5udW1fdnNpICYjNDM7IDE7XG4mIzQzO1x0dmFsID0gZW5ldGNfcG9ydF9yZChodywgRU5FVEM0X0VDQVBSMSk7XG4mIzQzO1x0bnVtX3ZzaSA9IEZJRUxEX0dFVChFQ0FQUjFfTlVNX1ZTSSwgdmFsKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIFBTSWFDRkdSMltOVU1fTVNJWF0gaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgTVNJLVggYWxsb2NhdGVkIHRvXG4mIzQzO1x0ICogdGhlIFNJIGlzIE5VTV9NU0lYICYjNDM7IDEsIHNvIHRoZSBtaW5pbXVtIG51bWJlciBvZiBNU0ktWCBhbGxvY2F0ZWQgdG9cbiYjNDM7XHQgKiBlYWNoIFNJIGlzIDEuIFRoZSB0b3RhbCBudW1iZXIgb2YgTVNJLVggYWxsb2NhdGVkIHRvIFBTSSBhbmQgVlNJc1xuJiM0MztcdCAqIGNhbm5vdCBleGNlZWQgdGhlIHRvdGFsIG51bWJlciBvZiBNU0ktWCBvd25lZCBieSB0aGlzIEVORVRDLCB3aGljaFxuJiM0MztcdCAqIGlzIEVDQVBSMVtOVU1fTVNJWF0uIE90aGVyd2lzZSwgd2hlbiBtdWx0aXBsZSBFTkVUQyBpbnN0YW5jZXMgZXhpc3QsXG4mIzQzO1x0ICogaXQgd2lsbCBhZmZlY3Qgb3RoZXIgRU5FVENzIHdob3NlIE1TSS1YIGludGVycnVwdHMgY2Fubm90IGJlXG4mIzQzO1x0ICogZ2VuZXJhdGVkLiBUaGlzIGlzIHNpbWlsYXIgdG8gb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3M6IHRoZSBhcnJheVxuJiM0MztcdCAqIGl0c2VsZiBpcyBub3QgYWZmZWN0ZWQsIGJ1dCBhZGphY2VudCBhcnJheXMgd2lsbCBiZSBjb3JydXB0ZWQuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBwZi1cdTAwM2V0b3RhbF92ZnMgaXMgMCBpZiBDT05GSUdfUENJX0lPViBpcyBkaXNhYmxlZC4gSWYgdGhlIGhhcmR3YXJlXG4mIzQzO1x0ICogaXRzZWxmIHN1cHBvcnRzIFNSLUlPViwgdGhlbiB3aGVuIGFsbG9jYXRpbmcgdGhlIG51bWJlciBvZiBNU0lYcyB0b1xuJiM0MztcdCAqIHRoZSBTSSwgaXQgbXVzdCBiZSB0YWtlbiBpbnRvIGFjY291bnQgdGhhdCB0aGUgVlNJIGhhcyBhdCBsZWFzdCAxXG4mIzQzO1x0ICogTVNJWCwgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgTVNJWHMgb2YgYWxsIFNJcyBjYW5ub3QgZXhjZWVkXG4mIzQzO1x0ICogRUNBUFIxW05VTV9NU0lYXS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXBmLVx1MDAzZXRvdGFsX3ZmcyBcdTAwMjZcdTAwMjYgbnVtX3ZzaSkge1xuJiM0MztcdFx0LyogQmVjYXVzZSBlYWNoIFNJIGhhcyBhdCBsZWFzdCBvbmUgTVNJWCwgYW5kIGZyb20gdGhlIGhhcmR3YXJlXG4mIzQzO1x0XHQgKiBwZXJzcGVjdGl2ZSwgcGYtXHUwMDNlY2Fwcy5udW1fbXNpeCB3aWxsIGFsd2F5cyBiZSBncmVhdGVyIHRoYW5cbiYjNDM7XHRcdCAqIG51bV92c2kuIFNvIG51bV9tc2l4IGlzIGFsd2F5cyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0bnVtX21zaXggPSBwZi1cdTAwM2VjYXBzLm51bV9tc2l4IC0gbnVtX3ZzaSAtIDE7XG4mIzQzO1x0XHRpZiAobnVtX21zaXggXHUwMDNlIFBTSUNGR1IyX05VTV9NU0lYKVxuJiM0MztcdFx0XHRudW1fbXNpeCA9IFBTSUNGR1IyX05VTV9NU0lYO1xuJiM0MztcdFx0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSUNGR1IyKDApLCBudW1fbXNpeCk7XG4gXG4tXHRudW1fbXNpeCA9IHBmLVx1MDAzZWNhcHMubnVtX21zaXggLyB0b3RhbF9zaSAmIzQzO1xuLVx0XHQgICBwZi1cdTAwM2VjYXBzLm51bV9tc2l4ICUgdG90YWxfc2kgLSAxO1xuLVx0dmFsID0gbnVtX21zaXggXHUwMDI2IFBTSUNGR1IyX05VTV9NU0lYO1xuLVx0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSUNGR1IyKDApLCB2YWwpO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3ZzaTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lDRkdSMihpICYjNDM7IDEpLCAwKTtcbiBcbi1cdG51bV9tc2l4ID0gcGYtXHUwMDNlY2Fwcy5udW1fbXNpeCAvIHRvdGFsX3NpIC0gMTtcbi1cdHZhbCA9IG51bV9tc2l4IFx1MDAyNiBQU0lDRkdSMl9OVU1fTVNJWDtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmLVx1MDAzZWNhcHMubnVtX3ZzaTsgaSYjNDM7JiM0MzspXG4tXHRcdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lDRkdSMihpICYjNDM7IDEpLCB2YWwpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogTGlrZXdpc2UsIGZyb20gdGhlIGhhcmR3YXJlIHBlcnNwZWN0aXZlIHBmLVx1MDAzZWNhcHMubnVtX21zaXggaXMgYWx3YXlzXG4mIzQzO1x0ICogZ3JlYXRlciB0aGFuIHZhbGlkX251bV9zaS4gU28gbnVtX21zaXggaXMgYWx3YXlzIGdyZWF0ZXIgdGhhbiBvclxuJiM0MztcdCAqIGVxdWFsIHRvIDAuXG4mIzQzO1x0ICovXG4mIzQzO1x0bnVtX21zaXggPSBwZi1cdTAwM2VjYXBzLm51bV9tc2l4IC8gdmFsaWRfbnVtX3NpICYjNDM7XG4mIzQzO1x0XHQgICBwZi1cdTAwM2VjYXBzLm51bV9tc2l4ICUgdmFsaWRfbnVtX3NpIC0gMTtcbiYjNDM7XHRpZiAobnVtX21zaXggXHUwMDNlIFBTSUNGR1IyX05VTV9NU0lYKVxuJiM0MztcdFx0bnVtX21zaXggPSBQU0lDRkdSMl9OVU1fTVNJWDtcbiYjNDM7XHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJQ0ZHUjIoMCksIG51bV9tc2l4KTtcbiYjNDM7XG4mIzQzO1x0bnVtX21zaXggPSBwZi1cdTAwM2VjYXBzLm51bV9tc2l4IC8gdmFsaWRfbnVtX3NpIC0gMTtcbiYjNDM7XHRpZiAobnVtX21zaXggXHUwMDNlIFBTSUNGR1IyX05VTV9NU0lYKVxuJiM0MztcdFx0bnVtX21zaXggPSBQU0lDRkdSMl9OVU1fTVNJWDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGYtXHUwMDNldG90YWxfdmZzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lDRkdSMihpICYjNDM7IDEpLCBudW1fbXNpeCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGVuZXRjNF9lbmFibGVfYWxsX3NpKHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4ge1xuIFx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZXNpLVx1MDAzZWh3O1xuLVx0aW50IG51bV9zaSA9IHBmLVx1MDAzZWNhcHMubnVtX3ZzaSAmIzQzOyAxO1xuJiM0MztcdGludCBudW1fc2kgPSBwZi1cdTAwM2V0b3RhbF92ZnMgJiM0MzsgMTtcbiBcdHUzMiBzaV9iaXRtYXAgPSAwO1xuIFx0aW50IGk7XG4gXG5AQCAtNDEyLDcgJiM0MzszNzgsOSBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfY29uZmlndXJlX3BvcnRfc2koc3RydWN0IGVuZXRjX3BmICpwZilcbiBcdC8qIE91dGVyIFZMQU4gdGFnIHdpbGwgYmUgdXNlZCBmb3IgVkxBTiBmaWx0ZXJpbmcgKi9cbiBcdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lWTEFORk1SLCBQU0lWTEFORk1SX1ZTKTtcbiBcbi1cdGVuZXRjNF9zZXRfZGVmYXVsdF9zaV92bGFuX3Byb21pc2MocGYpO1xuJiM0MztcdC8qIEVuZm9yY2UgVkxBTiBwcm9taXNjdW91cyBtb2RlIGZvciBhbGwgU0lzICovXG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHBmLVx1MDAzZXRvdGFsX3ZmcyAmIzQzOyAxOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGVuZXRjX3NldF9zaV92bGFuX3Byb21pc2MocGYtXHUwMDNlc2ksIGksIHRydWUpO1xuIFxuIFx0LyogRGlzYWJsZSBTSSBNQUMgbXVsdGljYXN0IFx1MDAyNiB1bmljYXN0IHByb21pc2N1b3VzICovXG4gXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJUE1NUiwgMCk7XG5AQCAtNDUwLDE4ICYjNDM7NDE4LDYwIEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9jb25maWd1cmVfcG9ydChzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuIFx0ZW5ldGNfc2V0X2RlZmF1bHRfcnNzX2tleShwZik7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBlbmV0YzRfZ2V0X250bXBfY2FwcyhzdHJ1Y3QgZW5ldGNfc2kgKnNpKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG50bXBfdXNlciAqdXNlciA9IFx1MDAyNnNpLVx1MDAzZW50bXBfdXNlcjtcbiYjNDM7XHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXHUwMDI2c2ktXHUwMDNlaHc7XG4mIzQzO1x0dTMyIHZhbDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gZW5ldGNfcG9ydF9yZChodywgRU5FVEM0X1BTSU1BRkNBUFIpO1xuJiM0MztcdHVzZXItXHUwMDNlbWFmdF9udW1fZW50cmllcyA9IEZJRUxEX0dFVChQU0lNQUZDQVBSX05VTV9NQUNfQUZURSwgdmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbmV0YzRfbnRtcF9iaXRtYXBfaW5pdChzdHJ1Y3QgbnRtcF91c2VyICp1c2VyKVxuJiM0Mzt7XG4mIzQzO1x0dXNlci1cdTAwM2VtYWZ0X2VpZF9iaXRtYXAgPSBiaXRtYXBfemFsbG9jKHVzZXItXHUwMDNlbWFmdF9udW1fZW50cmllcyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghdXNlci1cdTAwM2VtYWZ0X2VpZF9iaXRtYXApXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGVuZXRjNF9udG1wX2JpdG1hcF9mcmVlKHN0cnVjdCBudG1wX3VzZXIgKnVzZXIpXG4mIzQzO3tcbiYjNDM7XHRiaXRtYXBfZnJlZSh1c2VyLVx1MDAzZW1hZnRfZWlkX2JpdG1hcCk7XG4mIzQzO1x0dXNlci1cdTAwM2VtYWZ0X2VpZF9iaXRtYXAgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgZW5ldGM0X2luaXRfbnRtcF91c2VyKHN0cnVjdCBlbmV0Y19zaSAqc2kpXG4ge1xuIFx0c3RydWN0IG50bXBfdXNlciAqdXNlciA9IFx1MDAyNnNpLVx1MDAzZW50bXBfdXNlcjtcbiYjNDM7XHRpbnQgZXJyO1xuIFxuIFx0LyogRm9yIEVORVRDIDQuMSwgYWxsIHRhYmxlIHZlcnNpb25zIGFyZSAwICovXG4gXHRtZW1zZXQoXHUwMDI2dXNlci1cdTAwM2V0YmwsIDAsIHNpemVvZih1c2VyLVx1MDAzZXRibCkpO1xuIFxuLVx0cmV0dXJuIGVuZXRjNF9zZXR1cF9jYmRyKHNpKTtcbiYjNDM7XHRlcnIgPSBlbmV0YzRfc2V0dXBfY2JkcihzaSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGVuZXRjNF9nZXRfbnRtcF9jYXBzKHNpKTtcbiYjNDM7XHRlcnIgPSBlbmV0YzRfbnRtcF9iaXRtYXBfaW5pdCh1c2VyKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byB0ZWFyZG93bl9jYmRyO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO3RlYXJkb3duX2NiZHI6XG4mIzQzO1x0ZW5ldGM0X3RlYXJkb3duX2NiZHIoc2kpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBlbmV0YzRfZnJlZV9udG1wX3VzZXIoc3RydWN0IGVuZXRjX3NpICpzaSlcbiB7XG4mIzQzO1x0ZW5ldGM0X250bXBfYml0bWFwX2ZyZWUoXHUwMDI2c2ktXHUwMDNlbnRtcF91c2VyKTtcbiBcdGVuZXRjNF90ZWFyZG93bl9jYmRyKHNpKTtcbiB9XG4gXG5AQCAtNDc5LDcgJiM0Mzs0ODksNyBAQCBzdGF0aWMgaW50IGVuZXRjNF9wZl9pbml0KHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4gXG4gXHRlcnIgPSBlbmV0YzRfaW5pdF9udG1wX3VzZXIocGYtXHUwMDNlc2kpO1xuIFx0aWYgKGVycikge1xuLVx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIGluaXQgQ0JEUlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIGluaXQgTlRNUCB1c2VyXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbkBAIC00OTMsMTggJiM0Mzs1MDMsMTcgQEAgc3RhdGljIHZvaWQgZW5ldGM0X3BmX2ZyZWUoc3RydWN0IGVuZXRjX3BmICpwZilcbiBcdGVuZXRjNF9mcmVlX250bXBfdXNlcihwZi1cdTAwM2VzaSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGVuZXRjNF9wc2lfZG9fc2V0X3J4X21vZGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0MztzdGF0aWMgaW50IGVuZXRjNF9wZl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiYjNDM7XHRcdFx0XHQgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpXG4ge1xuLVx0c3RydWN0IGVuZXRjX3NpICpzaSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZW5ldGNfc2ksIHJ4X21vZGVfdGFzayk7XG4tXHRzdHJ1Y3QgZW5ldGNfcGYgKnBmID0gZW5ldGNfc2lfcHJpdihzaSk7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHNpLVx1MDAzZW5kZXY7XG4tXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXHUwMDI2c2ktXHUwMDNlaHc7XG4mIzQzO1x0c3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdHN0cnVjdCBlbmV0Y19wZiAqcGYgPSBlbmV0Y19zaV9wcml2KHByaXYtXHUwMDNlc2kpO1xuJiM0MztcdHN0cnVjdCBlbmV0Y19zaSAqc2kgPSBwcml2LVx1MDAzZXNpO1xuIFx0Ym9vbCB1Y19wcm9taXNjID0gZmFsc2U7XG4gXHRib29sIG1jX3Byb21pc2MgPSBmYWxzZTtcbiBcdGludCB0eXBlID0gMDtcbiBcbi1cdHJ0bmxfbG9jaygpO1xuLVxuIFx0aWYgKG5kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9QUk9NSVNDKSB7XG4gXHRcdHVjX3Byb21pc2MgPSB0cnVlO1xuIFx0XHRtY19wcm9taXNjID0gdHJ1ZTtcbkBAIC01MTUsMjggJiM0Mzs1MjQsMjEgQEAgc3RhdGljIHZvaWQgZW5ldGM0X3BzaV9kb19zZXRfcnhfbW9kZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdHR5cGUgPSBFTkVUQ19NQUNfRklMVEVSX1RZUEVfQUxMO1xuIFx0fVxuIFxuLVx0ZW5ldGM0X3BmX3NldF9zaV9tYWNfcHJvbWlzYyhodywgMCwgdWNfcHJvbWlzYywgbWNfcHJvbWlzYyk7XG4mIzQzO1x0ZW5ldGNfc2V0X3NpX3VjX3Byb21pc2Moc2ksIDAsIHVjX3Byb21pc2MpO1xuJiM0MztcdGVuZXRjX3NldF9zaV9tY19wcm9taXNjKHNpLCAwLCBtY19wcm9taXNjKTtcbiBcbiBcdGlmICh1Y19wcm9taXNjKSB7XG4tXHRcdGVuZXRjNF9wZl9zZXRfc2lfdWNfaGFzaF9maWx0ZXIoaHcsIDAsIDApO1xuJiM0MztcdFx0ZW5ldGNfc2V0X3NpX3VjX2hhc2hfZmlsdGVyKHNpLCAwLCAwKTtcbiBcdFx0ZW5ldGM0X3BmX2NsZWFyX21hZnRfZW50cmllcyhwZik7XG4gXHR9XG4gXG4gXHRpZiAobWNfcHJvbWlzYylcbi1cdFx0ZW5ldGM0X3BmX3NldF9zaV9tY19oYXNoX2ZpbHRlcihodywgMCwgMCk7XG4mIzQzO1x0XHRlbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXIoc2ksIDAsIDApO1xuIFxuIFx0LyogU2V0IG5ldyBNQUMgZmlsdGVyICovXG4tXHRlbmV0YzRfcGZfc2V0X21hY19maWx0ZXIocGYsIHR5cGUpO1xuJiM0MztcdGVuZXRjNF9wZl9zZXRfbWFjX2ZpbHRlcihwZiwgdHlwZSwgdWMsIG1jKTtcbiBcbi1cdHJ0bmxfdW5sb2NrKCk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi17XG4tXHRzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4tXHRzdHJ1Y3QgZW5ldGNfc2kgKnNpID0gcHJpdi1cdTAwM2VzaTtcbi1cbi1cdHF1ZXVlX3dvcmsoc2ktXHUwMDNld29ya3F1ZXVlLCBcdTAwMjZzaS1cdTAwM2VyeF9tb2RlX3Rhc2spO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IGVuZXRjNF9wZl9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG5AQCAtNTQ0LDEyICYjNDM7NTQ2LDExIEBAIHN0YXRpYyBpbnQgZW5ldGM0X3BmX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiB7XG4gXHRuZXRkZXZfZmVhdHVyZXNfdCBjaGFuZ2VkID0gbmRldi1cdTAwM2VmZWF0dXJlcyBeIGZlYXR1cmVzO1xuIFx0c3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuLVx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnByaXYtXHUwMDNlc2ktXHUwMDNlaHc7XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSB7XG4gXHRcdGJvb2wgcHJvbWlzY19lbiA9ICEoZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUik7XG4gXG4tXHRcdGVuZXRjNF9wZl9zZXRfc2lfdmxhbl9wcm9taXNjKGh3LCAwLCBwcm9taXNjX2VuKTtcbiYjNDM7XHRcdGVuZXRjX3NldF9zaV92bGFuX3Byb21pc2MocHJpdi1cdTAwM2VzaSwgMCwgcHJvbWlzY19lbik7XG4gXHR9XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9MT09QQkFDSylcbkBAIC01NjYsNyAmIzQzOzU2Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZW5ldGM0X25kZXZfb3BzID0ge1xuIFx0Lm5kb19zdGFydF94bWl0XHRcdD0gZW5ldGNfeG1pdCxcbiBcdC5uZG9fZ2V0X3N0YXRzXHRcdD0gZW5ldGNfZ2V0X3N0YXRzLFxuIFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcdD0gZW5ldGNfcGZfc2V0X21hY19hZGRyLFxuLVx0Lm5kb19zZXRfcnhfbW9kZVx0PSBlbmV0YzRfcGZfc2V0X3J4X21vZGUsXG4mIzQzO1x0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1x0PSBlbmV0YzRfcGZfc2V0X3J4X21vZGUsXG4gXHQubmRvX3NldF9mZWF0dXJlc1x0PSBlbmV0YzRfcGZfc2V0X2ZlYXR1cmVzLFxuIFx0Lm5kb192bGFuX3J4X2FkZF92aWRcdD0gZW5ldGNfdmxhbl9yeF9hZGRfdmlkLFxuIFx0Lm5kb192bGFuX3J4X2tpbGxfdmlkXHQ9IGVuZXRjX3ZsYW5fcnhfZGVsX3ZpZCxcbkBAIC02MDIsMTEgJiM0Mzs2MDMsNiBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfbWFjX2NvbmZpZyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLCB1bnNpZ25lZCBpbnQgbW9kZSxcbiBcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1JYSUQ6XG4gXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9UWElEOlxuIFx0XHR2YWwgfD0gSUZNT0RFX1JHTUlJO1xuLVx0XHQvKiBXZSBuZWVkIHRvIGVuYWJsZSBhdXRvLW5lZ290aWF0aW9uIGZvciB0aGUgTUFDXG4tXHRcdCAqIGlmIGl0cyBSR01JSSBpbnRlcmZhY2Ugc3VwcG9ydCBJbi1CYW5kIHN0YXR1cy5cbi1cdFx0ICovXG4tXHRcdGlmIChwaHlsaW5rX2F1dG9uZWdfaW5iYW5kKG1vZGUpKVxuLVx0XHRcdHZhbCB8PSBQTV9JRl9NT0RFX0VOQTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJOlxuIFx0XHR2YWwgfD0gSUZNT0RFX1JNSUk7XG5AQCAtNjE2LDcgJiM0Mzs2MTIsNiBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfbWFjX2NvbmZpZyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLCB1bnNpZ25lZCBpbnQgbW9kZSxcbiBcdFx0dmFsIHw9IElGTU9ERV9TR01JSTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUjpcbi1cdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1hHTUlJOlxuIFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSTpcbiBcdFx0dmFsIHw9IElGTU9ERV9YR01JSTtcbiBcdFx0YnJlYWs7XG5AQCAtNjQyLDI2ICYjNDM7NjM3LDE5IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9zZXRfcG9ydF9zcGVlZChzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2LCBpbnQgc3BlZWQpXG4gXHR1MzIgb2xkX3NwZWVkID0gcHJpdi1cdTAwM2VzcGVlZDtcbiBcdHUzMiB2YWw7XG4gXG4mIzQzO1x0LyogSWYgdGhlIHNwZWVkIGlzIHVua25vd24sIHVzZSB0aGUgbWluaW11bSB2YWx1ZSAqL1xuJiM0MztcdGlmIChzcGVlZCA9PSBTUEVFRF9VTktOT1dOKSB7XG4mIzQzO1x0XHRzcGVlZCA9IFNQRUVEXzEwO1xuJiM0MztcdFx0ZGV2X3dhcm4ocHJpdi1cdTAwM2VkZXYsIFwmIzM0O1NwZWVkIHVua25vd24sIGRlZmF1bHQgaXMgMTBNYnBzXFxuXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHNwZWVkID09IG9sZF9zcGVlZClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0dmFsID0gZW5ldGNfcG9ydF9yZChcdTAwMjZwcml2LVx1MDAzZXNpLVx1MDAzZWh3LCBFTkVUQzRfUENSKTtcbi1cdHZhbCBcdTAwMjY9IH5QQ1JfUFNQRUVEO1xuLVxuLVx0c3dpdGNoIChzcGVlZCkge1xuLVx0Y2FzZSBTUEVFRF8xMDA6XG4tXHRjYXNlIFNQRUVEXzEwMDA6XG4tXHRjYXNlIFNQRUVEXzI1MDA6XG4tXHRjYXNlIFNQRUVEXzEwMDAwOlxuLVx0XHR2YWwgfD0gKFBDUl9QU1BFRUQgXHUwMDI2IFBDUl9QU1BFRURfVkFMKHNwZWVkKSk7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBTUEVFRF8xMDpcbi1cdGRlZmF1bHQ6XG4tXHRcdHZhbCB8PSAoUENSX1BTUEVFRCBcdTAwMjYgUENSX1BTUEVFRF9WQUwoU1BFRURfMTApKTtcbi1cdH1cbi1cbi1cdHByaXYtXHUwMDNlc3BlZWQgPSBzcGVlZDtcbiYjNDM7XHR2YWwgPSBlbmV0Y19wb3J0X3JkKFx1MDAyNnByaXYtXHUwMDNlc2ktXHUwMDNlaHcsIEVORVRDNF9QQ1IpIFx1MDAyNiAoflBDUl9QU1BFRUQpO1xuJiM0MztcdHZhbCB8PSBQQ1JfUFNQRUVEX1ZBTChzcGVlZCk7XG4gXHRlbmV0Y19wb3J0X3dyKFx1MDAyNnByaXYtXHUwMDNlc2ktXHUwMDNlaHcsIEVORVRDNF9QQ1IsIHZhbCk7XG4mIzQzO1x0cHJpdi1cdTAwM2VzcGVlZCA9IHNwZWVkO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBlbmV0YzRfc2V0X3JnbWlpX21hYyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBpbnQgc3BlZWQsIGludCBkdXBsZXgpXG5AQCAtNzE3LDIyICYjNDM7NzA1LDYgQEAgc3RhdGljIHZvaWQgZW5ldGM0X3NldF9ybWlpX21hYyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBpbnQgc3BlZWQsIGludCBkdXBsZXgpXG4gXHRlbmV0Y19wb3J0X21hY193cihzaSwgRU5FVEM0X1BNX0lGX01PREUoMCksIHZhbCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGVuZXRjNF9zZXRfaGRfZmxvd19jb250cm9sKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGJvb2wgZW5hYmxlKVxuLXtcbi1cdHN0cnVjdCBlbmV0Y19zaSAqc2kgPSBwZi1cdTAwM2VzaTtcbi1cdHUzMiBvbGRfdmFsLCB2YWw7XG4tXG4tXHRpZiAoIXBmLVx1MDAzZWNhcHMuaGFsZl9kdXBsZXgpXG4tXHRcdHJldHVybjtcbi1cbi1cdG9sZF92YWwgPSBlbmV0Y19wb3J0X21hY19yZChzaSwgRU5FVEM0X1BNX0NNRF9DRkcoMCkpO1xuLVx0dmFsID0gdTMyX3JlcGxhY2VfYml0cyhvbGRfdmFsLCBlbmFibGUgPyAxIDogMCwgUE1fQ01EX0NGR19IRF9GQ0VOKTtcbi1cdGlmICh2YWwgPT0gb2xkX3ZhbClcbi1cdFx0cmV0dXJuO1xuLVxuLVx0ZW5ldGNfcG9ydF9tYWNfd3Ioc2ksIEVORVRDNF9QTV9DTURfQ0ZHKDApLCB2YWwpO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBlbmV0YzRfc2V0X3J4X3BhdXNlKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGJvb2wgcnhfcGF1c2UpXG4ge1xuIFx0c3RydWN0IGVuZXRjX3NpICpzaSA9IHBmLVx1MDAzZXNpO1xuQEAgLTkwOCwxMyAmIzQzOzg4MCwxMSBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfcGxfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4gXHRzdHJ1Y3QgZW5ldGNfcGYgKnBmID0gcGh5bGlua190b19lbmV0Y19wZihjb25maWcpO1xuIFx0c3RydWN0IGVuZXRjX3NpICpzaSA9IHBmLVx1MDAzZXNpO1xuIFx0c3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdjtcbi1cdGJvb2wgaGRfZmMgPSBmYWxzZTtcbiBcbiBcdHByaXYgPSBuZXRkZXZfcHJpdihzaS1cdTAwM2VuZGV2KTtcbiBcdGVuZXRjNF9zZXRfcG9ydF9zcGVlZChwcml2LCBzcGVlZCk7XG4gXG4tXHRpZiAoIXBoeWxpbmtfYXV0b25lZ19pbmJhbmQobW9kZSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgcGh5X2ludGVyZmFjZV9tb2RlX2lzX3JnbWlpKGludGVyZmFjZSkpXG4mIzQzO1x0aWYgKHBoeV9pbnRlcmZhY2VfbW9kZV9pc19yZ21paShpbnRlcmZhY2UpKVxuIFx0XHRlbmV0YzRfc2V0X3JnbWlpX21hYyhwZiwgc3BlZWQsIGR1cGxleCk7XG4gXG4gXHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKVxuQEAgLTkyNiwxOCAmIzQzOzg5Niw4IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wbF9tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiBcdFx0ICovXG4gXHRcdGlmIChwcml2LVx1MDAzZWFjdGl2ZV9vZmZsb2FkcyBcdTAwMjYgRU5FVENfRl9RQlUpXG4gXHRcdFx0dHhfcGF1c2UgPSBmYWxzZTtcbi1cdH0gZWxzZSB7IC8qIERVUExFWF9IQUxGICovXG4tXHRcdGlmICh0eF9wYXVzZSB8fCByeF9wYXVzZSlcbi1cdFx0XHRoZF9mYyA9IHRydWU7XG4tXG4tXHRcdC8qIEFzIHBlciA4MDIuMyBhbm5leCAzMUIsIFBBVVNFIGZyYW1lcyBhcmUgb25seSBzdXBwb3J0ZWRcbi1cdFx0ICogd2hlbiB0aGUgbGluayBpcyBjb25maWd1cmVkIGZvciBmdWxsIGR1cGxleCBvcGVyYXRpb24uXG4tXHRcdCAqL1xuLVx0XHR0eF9wYXVzZSA9IGZhbHNlO1xuLVx0XHRyeF9wYXVzZSA9IGZhbHNlO1xuIFx0fVxuIFxuLVx0ZW5ldGM0X3NldF9oZF9mbG93X2NvbnRyb2wocGYsIGhkX2ZjKTtcbiBcdGVuZXRjNF9zZXRfdHhfcGF1c2UocGYsIHByaXYtXHUwMDNlbnVtX3J4X3JpbmdzLCB0eF9wYXVzZSk7XG4gXHRlbmV0YzRfc2V0X3J4X3BhdXNlKHBmLCByeF9wYXVzZSk7XG4gXHRlbmV0YzRfbWFjX3R4X2VuYWJsZShwZik7XG5AQCAtMTAwOSwxOSAmIzQzOzk2OSw2IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9saW5rX2RlaW5pdChzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2KVxuIFx0ZW5ldGNfbWRpb2J1c19kZXN0cm95KHBmKTtcbiB9XG4gXG4tc3RhdGljIGludCBlbmV0YzRfcHNpX3dxX3Rhc2tfaW5pdChzdHJ1Y3QgZW5ldGNfc2kgKnNpKVxuLXtcbi1cdGNoYXIgd3FfbmFtZVsyNF07XG4tXG4tXHRJTklUX1dPUksoXHUwMDI2c2ktXHUwMDNlcnhfbW9kZV90YXNrLCBlbmV0YzRfcHNpX2RvX3NldF9yeF9tb2RlKTtcbi1cdHNucHJpbnRmKHdxX25hbWUsIHNpemVvZih3cV9uYW1lKSwgXCYjMzQ7ZW5ldGMtJXNcJiMzNDssIHBjaV9uYW1lKHNpLVx1MDAzZXBkZXYpKTtcbi1cdHNpLVx1MDAzZXdvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKHdxX25hbWUpO1xuLVx0aWYgKCFzaS1cdTAwM2V3b3JrcXVldWUpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIHN0YXRpYyBpbnQgZW5ldGM0X3BmX25ldGRldl9jcmVhdGUoc3RydWN0IGVuZXRjX3NpICpzaSlcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZzaS1cdTAwM2VwZGV2LVx1MDAzZWRldjtcbkBAIC0xMDYyLDEyICYjNDM7MTAwOSw2IEBAIHN0YXRpYyBpbnQgZW5ldGM0X3BmX25ldGRldl9jcmVhdGUoc3RydWN0IGVuZXRjX3NpICpzaSlcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2xpbmtfaW5pdDtcbiBcbi1cdGVyciA9IGVuZXRjNF9wc2lfd3FfdGFza19pbml0KHNpKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBpbml0IHdvcmtxdWV1ZVxcblwmIzM0Oyk7XG4tXHRcdGdvdG8gZXJyX3dxX2luaXQ7XG4tXHR9XG4tXG4gXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgbmV0ZGV2XFxuXCYjMzQ7KTtcbkBAIC0xMDc3LDggJiM0MzsxMDE4LDYgQEAgc3RhdGljIGludCBlbmV0YzRfcGZfbmV0ZGV2X2NyZWF0ZShzdHJ1Y3QgZW5ldGNfc2kgKnNpKVxuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX3JlZ19uZXRkZXY6XG4tXHRkZXN0cm95X3dvcmtxdWV1ZShzaS1cdTAwM2V3b3JrcXVldWUpO1xuLWVycl93cV9pbml0OlxuIFx0ZW5ldGM0X2xpbmtfZGVpbml0KHByaXYpO1xuIGVycl9saW5rX2luaXQ6XG4gXHRlbmV0Y19mcmVlX21zaXgocHJpdik7XG5AQCAtMTA5Niw4ICYjNDM7MTAzNSw2IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wZl9uZXRkZXZfZGVzdHJveShzdHJ1Y3QgZW5ldGNfc2kgKnNpKVxuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBzaS1cdTAwM2VuZGV2O1xuIFxuIFx0dW5yZWdpc3Rlcl9uZXRkZXYobmRldik7XG4tXHRjYW5jZWxfd29yayhcdTAwMjZzaS1cdTAwM2VyeF9tb2RlX3Rhc2spO1xuLVx0ZGVzdHJveV93b3JrcXVldWUoc2ktXHUwMDNld29ya3F1ZXVlKTtcbiBcdGVuZXRjNF9saW5rX2RlaW5pdChwcml2KTtcbiBcdGVuZXRjX2ZyZWVfbXNpeChwcml2KTtcbiBcdGZyZWVfbmV0ZGV2KG5kZXYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfZXRodG9vbC5jXG5pbmRleCA3MWYzNzZlZjFiZTFjOS4uMDdiNzgzMmYyNDI3NmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfZXRodG9vbC5jXG5AQCAtMjksNyAmIzQzOzI5LDcgQEAgc3RhdGljIGNvbnN0IHUzMiBlbmV0Y19yeGJkcl9yZWdzW10gPSB7XG4gfTtcbiBcbiBzdGF0aWMgY29uc3QgdTMyIGVuZXRjX3BvcnRfcmVnc1tdID0ge1xuLVx0RU5FVENfUE1SLCBFTkVUQ19QU1IsIEVORVRDX1BTSVBNUiwgRU5FVENfUFNJUE1BUjAoMCksXG4mIzQzO1x0RU5FVENfUE1SLCBFTkVUQ19QU1IsIEVORVRDX1BTSVBNTVIsIEVORVRDX1BTSVBNQVIwKDApLFxuIFx0RU5FVENfUFNJUE1BUjEoMCksIEVORVRDX1BUWE1CQVIsIEVORVRDX1BDQVBSMCwgRU5FVENfUENBUFIxLFxuIFx0RU5FVENfUFNJQ0ZHUjAoMCksIEVORVRDX1BSRlNDQVBSLCBFTkVUQ19QVENNU0RVUigwKSxcbiBcdEVORVRDX1BNMF9DTURfQ0ZHLCBFTkVUQ19QTTBfTUFYRlJNLCBFTkVUQ19QTTBfSUZfTU9ERVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ody5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX2h3LmhcbmluZGV4IGJmOTliNjVkNzU5OGFiLi4xNmRhNzMyZGM1ZGU4MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ody5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfaHcuaFxuQEAgLTE4MCwxMyAmIzQzOzE4MCwxMyBAQCBlbnVtIGVuZXRjX2Jkcl90eXBlIHtUWCwgUlh9O1xuICNkZWZpbmUgRU5FVENfUE1SX1BTUEVFRF8xMDAwTVx0QklUKDkpXG4gI2RlZmluZSBFTkVUQ19QTVJfUFNQRUVEXzI1MDBNXHRCSVQoMTApXG4gI2RlZmluZSBFTkVUQ19QU1JcdFx0MHgwMDA0IC8qIFJPICovXG4tI2RlZmluZSBFTkVUQ19QU0lQTVJcdFx0MHgwMDE4XG4tI2RlZmluZSBFTkVUQ19QU0lQTVJfU0VUX1VQKG4pXHRCSVQobikgLyogbiA9IFNJIGluZGV4ICovXG4tI2RlZmluZSBFTkVUQ19QU0lQTVJfU0VUX01QKG4pXHRCSVQoKG4pICYjNDM7IDE2KVxuJiM0MzsjZGVmaW5lIEVORVRDX1BTSVBNTVJcdFx0MHgwMDE4XG4mIzQzOyNkZWZpbmUgIFBTSVBNTVJfU0lfTUFDX1VQKG4pXHRCSVQobikgLyogbiA9IFNJIGluZGV4ICovXG4mIzQzOyNkZWZpbmUgIFBTSVBNTVJfU0lfTUFDX01QKG4pXHRCSVQoKG4pICYjNDM7IDE2KVxuJiM0MztcbiAjZGVmaW5lIEVORVRDX1BTSVBWTVJcdFx0MHgwMDFjXG4tI2RlZmluZSBFTkVUQ19WTEFOX1BST01JU0NfTUFQX0FMTFx0MHg3XG4tI2RlZmluZSBFTkVUQ19QU0lQVk1SX1NFVF9WUChzaW1hcClcdCgoc2ltYXApIFx1MDAyNiAweDcpXG4tI2RlZmluZSBFTkVUQ19QU0lQVk1SX1NFVF9WVVRBKHNpbWFwKVx0KCgoc2ltYXApIFx1MDAyNiAweDcpIFx1MDAzY1x1MDAzYyAxNilcbiYjNDM7I2RlZmluZSAgUFNJUFZNUl9TSV9WTEFOX1AobilcdEJJVChuKSAvKiBuID0gU0kgaW5kZXggKi9cbiYjNDM7XG4gI2RlZmluZSBFTkVUQ19QU0lQTUFSMChuKVx0KDB4MDEwMCAmIzQzOyAobikgKiAweDgpIC8qIG4gPSBTSSBpbmRleCAqL1xuICNkZWZpbmUgRU5FVENfUFNJUE1BUjEobilcdCgweDAxMDQgJiM0MzsgKG4pICogMHg4KVxuICNkZWZpbmUgRU5FVENfUFZDTENUUlx0XHQweDAyMDhcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jXG5pbmRleCAyZDY4N2JiOGMzYTA2My4uYTUwOTkyOWY4OWYyNWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmNcbkBAIC00MiwyNiAmIzQzOzQyLDYgQEAgc3RhdGljIHZvaWQgZW5ldGNfcGZfZGVzdHJveV9wY3Moc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpXG4gXHRseW54X3Bjc19kZXN0cm95KHBjcyk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGVuZXRjX3NldF92bGFuX3Byb21pc2Moc3RydWN0IGVuZXRjX2h3ICpodywgY2hhciBzaV9tYXApXG4te1xuLVx0dTMyIHZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDX1BTSVBWTVIpO1xuLVxuLVx0dmFsIFx1MDAyNj0gfkVORVRDX1BTSVBWTVJfU0VUX1ZQKEVORVRDX1ZMQU5fUFJPTUlTQ19NQVBfQUxMKTtcbi1cdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDX1BTSVBWTVIsIEVORVRDX1BTSVBWTVJfU0VUX1ZQKHNpX21hcCkgfCB2YWwpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBlbmV0Y19lbmFibGVfc2lfdmxhbl9wcm9taXNjKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGludCBzaV9pZHgpXG4te1xuLVx0cGYtXHUwMDNldmxhbl9wcm9taXNjX3NpbWFwIHw9IEJJVChzaV9pZHgpO1xuLVx0ZW5ldGNfc2V0X3ZsYW5fcHJvbWlzYyhcdTAwMjZwZi1cdTAwM2VzaS1cdTAwM2VodywgcGYtXHUwMDNldmxhbl9wcm9taXNjX3NpbWFwKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgZW5ldGNfZGlzYWJsZV9zaV92bGFuX3Byb21pc2Moc3RydWN0IGVuZXRjX3BmICpwZiwgaW50IHNpX2lkeClcbi17XG4tXHRwZi1cdTAwM2V2bGFuX3Byb21pc2Nfc2ltYXAgXHUwMDI2PSB+QklUKHNpX2lkeCk7XG4tXHRlbmV0Y19zZXRfdmxhbl9wcm9taXNjKFx1MDAyNnBmLVx1MDAzZXNpLVx1MDAzZWh3LCBwZi1cdTAwM2V2bGFuX3Byb21pc2Nfc2ltYXApO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBlbmV0Y19zZXRfaXNvbF92bGFuKHN0cnVjdCBlbmV0Y19odyAqaHcsIGludCBzaSwgdTE2IHZsYW4sIHU4IHFvcylcbiB7XG4gXHR1MzIgdmFsID0gMDtcbkBAIC04MCwzNyAmIzQzOzYwLDYgQEAgc3RhdGljIHZvaWQgZW5ldGNfYWRkX21hY19hZGRyX2VtX2ZpbHRlcihzdHJ1Y3QgZW5ldGNfbWFjX2ZpbHRlciAqZmlsdGVyLFxuIFx0ZmlsdGVyLVx1MDAzZW1hY19hZGRyX2NudCYjNDM7JiM0Mzs7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGVuZXRjX2NsZWFyX21hY19odF9mbHQoc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkeCwgaW50IHR5cGUpXG4te1xuLVx0Ym9vbCBlcnIgPSBzaS1cdTAwM2VlcnJhdGEgXHUwMDI2IEVORVRDX0VSUl9VQ01DU1dQO1xuLVxuLVx0aWYgKHR5cGUgPT0gVUMpIHtcbi1cdFx0ZW5ldGNfcG9ydF93cihcdTAwMjZzaS1cdTAwM2VodywgRU5FVENfUFNJVU1IRlIwKHNpX2lkeCwgZXJyKSwgMCk7XG4tXHRcdGVuZXRjX3BvcnRfd3IoXHUwMDI2c2ktXHUwMDNlaHcsIEVORVRDX1BTSVVNSEZSMShzaV9pZHgpLCAwKTtcbi1cdH0gZWxzZSB7IC8qIE1DICovXG4tXHRcdGVuZXRjX3BvcnRfd3IoXHUwMDI2c2ktXHUwMDNlaHcsIEVORVRDX1BTSU1NSEZSMChzaV9pZHgsIGVyciksIDApO1xuLVx0XHRlbmV0Y19wb3J0X3dyKFx1MDAyNnNpLVx1MDAzZWh3LCBFTkVUQ19QU0lNTUhGUjEoc2lfaWR4KSwgMCk7XG4tXHR9XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGVuZXRjX3NldF9tYWNfaHRfZmx0KHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZHgsIGludCB0eXBlLFxuLVx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgaGFzaClcbi17XG4tXHRib29sIGVyciA9IHNpLVx1MDAzZWVycmF0YSBcdTAwMjYgRU5FVENfRVJSX1VDTUNTV1A7XG4tXG4tXHRpZiAodHlwZSA9PSBVQykge1xuLVx0XHRlbmV0Y19wb3J0X3dyKFx1MDAyNnNpLVx1MDAzZWh3LCBFTkVUQ19QU0lVTUhGUjAoc2lfaWR4LCBlcnIpLFxuLVx0XHRcdCAgICAgIGxvd2VyXzMyX2JpdHMoaGFzaCkpO1xuLVx0XHRlbmV0Y19wb3J0X3dyKFx1MDAyNnNpLVx1MDAzZWh3LCBFTkVUQ19QU0lVTUhGUjEoc2lfaWR4KSxcbi1cdFx0XHQgICAgICB1cHBlcl8zMl9iaXRzKGhhc2gpKTtcbi1cdH0gZWxzZSB7IC8qIE1DICovXG4tXHRcdGVuZXRjX3BvcnRfd3IoXHUwMDI2c2ktXHUwMDNlaHcsIEVORVRDX1BTSU1NSEZSMChzaV9pZHgsIGVyciksXG4tXHRcdFx0ICAgICAgbG93ZXJfMzJfYml0cyhoYXNoKSk7XG4tXHRcdGVuZXRjX3BvcnRfd3IoXHUwMDI2c2ktXHUwMDNlaHcsIEVORVRDX1BTSU1NSEZSMShzaV9pZHgpLFxuLVx0XHRcdCAgICAgIHVwcGVyXzMyX2JpdHMoaGFzaCkpO1xuLVx0fVxuLX1cbi1cbiBzdGF0aWMgdm9pZCBlbmV0Y19zeW5jX21hY19maWx0ZXJzKHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4ge1xuIFx0c3RydWN0IGVuZXRjX21hY19maWx0ZXIgKmYgPSBwZi1cdTAwM2VtYWNfZmlsdGVyO1xuQEAgLTEyMiwxMiAmIzQzOzcxLDE2IEBAIHN0YXRpYyB2b2lkIGVuZXRjX3N5bmNfbWFjX2ZpbHRlcnMoc3RydWN0IGVuZXRjX3BmICpwZilcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1BRERSX1RZUEU7IGkmIzQzOyYjNDM7LCBmJiM0MzsmIzQzOykge1xuIFx0XHRib29sIGVtID0gKGYtXHUwMDNlbWFjX2FkZHJfY250ID09IDEpIFx1MDAyNlx1MDAyNiAoaSA9PSBVQyk7XG4gXHRcdGJvb2wgY2xlYXIgPSAhZi1cdTAwM2VtYWNfYWRkcl9jbnQ7XG4mIzQzO1x0XHR1NjQgaGFzaDtcbiBcbiBcdFx0aWYgKGNsZWFyKSB7XG4tXHRcdFx0aWYgKGkgPT0gVUMpXG4mIzQzO1x0XHRcdGlmIChpID09IFVDKSB7XG4gXHRcdFx0XHRlbmV0Y19jbGVhcl9tYWNfZmx0X2VudHJ5KHNpLCBwb3MpO1xuJiM0MztcdFx0XHRcdGVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcihzaSwgMCwgMCk7XG4mIzQzO1x0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0ZW5ldGNfc2V0X3NpX21jX2hhc2hfZmlsdGVyKHNpLCAwLCAwKTtcbiYjNDM7XHRcdFx0fVxuIFxuLVx0XHRcdGVuZXRjX2NsZWFyX21hY19odF9mbHQoc2ksIDAsIGkpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG5AQCAtMTM1LDcgJiM0Mzs4OCw3IEBAIHN0YXRpYyB2b2lkIGVuZXRjX3N5bmNfbWFjX2ZpbHRlcnMoc3RydWN0IGVuZXRjX3BmICpwZilcbiBcdFx0aWYgKGVtKSB7XG4gXHRcdFx0aW50IGVycjtcbiBcbi1cdFx0XHRlbmV0Y19jbGVhcl9tYWNfaHRfZmx0KHNpLCAwLCBVQyk7XG4mIzQzO1x0XHRcdGVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcihzaSwgMCwgMCk7XG4gXG4gXHRcdFx0ZXJyID0gZW5ldGNfc2V0X21hY19mbHRfZW50cnkoc2ksIHBvcywgZi1cdTAwM2VtYWNfYWRkcixcbiBcdFx0XHRcdFx0XHQgICAgICBCSVQoMCkpO1xuQEAgLTE0NywxMSAmIzQzOzEwMCwxNSBAQCBzdGF0aWMgdm9pZCBlbmV0Y19zeW5jX21hY19maWx0ZXJzKHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4gXHRcdFx0XHQgZXJyKTtcbiBcdFx0fVxuIFxuJiM0MztcdFx0Yml0bWFwX3RvX2FycjY0KFx1MDAyNmhhc2gsIGYtXHUwMDNlbWFjX2hhc2hfdGFibGUsXG4mIzQzO1x0XHRcdFx0RU5FVENfTUFERFJfSEFTSF9UQkxfU1opO1xuIFx0XHQvKiBoYXNoIHRhYmxlIGZpbHRlciwgY2xlYXIgRU0gZmlsdGVyIGZvciBVQyBlbnRyaWVzICovXG4tXHRcdGlmIChpID09IFVDKVxuJiM0MztcdFx0aWYgKGkgPT0gVUMpIHtcbiBcdFx0XHRlbmV0Y19jbGVhcl9tYWNfZmx0X2VudHJ5KHNpLCBwb3MpO1xuLVxuLVx0XHRlbmV0Y19zZXRfbWFjX2h0X2ZsdChzaSwgMCwgaSwgKmYtXHUwMDNlbWFjX2hhc2hfdGFibGUpO1xuJiM0MztcdFx0XHRlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc2ksIDAsIGhhc2gpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0ZW5ldGNfc2V0X3NpX21jX2hhc2hfZmlsdGVyKHNpLCAwLCBoYXNoKTtcbiYjNDM7XHRcdH1cbiBcdH1cbiB9XG4gXG5AQCAtMTU5LDIxICYjNDM7MTE2LDE3IEBAIHN0YXRpYyB2b2lkIGVuZXRjX3BmX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIHtcbiBcdHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdHN0cnVjdCBlbmV0Y19wZiAqcGYgPSBlbmV0Y19zaV9wcml2KHByaXYtXHUwMDNlc2kpO1xuLVx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnByaXYtXHUwMDNlc2ktXHUwMDNlaHc7XG4gXHRib29sIHVwcm9tID0gZmFsc2UsIG1wcm9tID0gZmFsc2U7XG4gXHRzdHJ1Y3QgZW5ldGNfbWFjX2ZpbHRlciAqZmlsdGVyO1xuIFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcbi1cdHUzMiBwc2lwbXIgPSAwO1xuIFx0Ym9vbCBlbTtcbiBcbiBcdGlmIChuZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfUFJPTUlTQykge1xuIFx0XHQvKiBlbmFibGUgcHJvbWlzYyBtb2RlIGZvciBTSTAgKFBGKSAqL1xuLVx0XHRwc2lwbXIgPSBFTkVUQ19QU0lQTVJfU0VUX1VQKDApIHwgRU5FVENfUFNJUE1SX1NFVF9NUCgwKTtcbiBcdFx0dXByb20gPSB0cnVlO1xuIFx0XHRtcHJvbSA9IHRydWU7XG4gXHR9IGVsc2UgaWYgKG5kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9BTExNVUxUSSkge1xuIFx0XHQvKiBlbmFibGUgbXVsdGkgY2FzdCBwcm9taXNjIG1vZGUgZm9yIFNJMCAoUEYpICovXG4tXHRcdHBzaXBtciA9IEVORVRDX1BTSVBNUl9TRVRfTVAoMCk7XG4gXHRcdG1wcm9tID0gdHJ1ZTtcbiBcdH1cbiBcbkBAIC0yMTEsOSAmIzQzOzE2NCw4IEBAIHN0YXRpYyB2b2lkIGVuZXRjX3BmX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0XHQvKiB1cGRhdGUgUEYgZW50cmllcyAqL1xuIFx0XHRlbmV0Y19zeW5jX21hY19maWx0ZXJzKHBmKTtcbiBcbi1cdHBzaXBtciB8PSBlbmV0Y19wb3J0X3JkKGh3LCBFTkVUQ19QU0lQTVIpIFx1MDAyNlxuLVx0XHQgIH4oRU5FVENfUFNJUE1SX1NFVF9VUCgwKSB8IEVORVRDX1BTSVBNUl9TRVRfTVAoMCkpO1xuLVx0ZW5ldGNfcG9ydF93cihodywgRU5FVENfUFNJUE1SLCBwc2lwbXIpO1xuJiM0MztcdGVuZXRjX3NldF9zaV91Y19wcm9taXNjKHByaXYtXHUwMDNlc2ksIDAsIHVwcm9tKTtcbiYjNDM7XHRlbmV0Y19zZXRfc2lfbWNfcHJvbWlzYyhwcml2LVx1MDAzZXNpLCAwLCBtcHJvbSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGVuZXRjX3NldF9sb29wYmFjayhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgYm9vbCBlbilcbkBAIC00NjksMTIgJiM0Mzs0MjEsMTEgQEAgc3RhdGljIHZvaWQgZW5ldGNfY29uZmlndXJlX3BvcnQoc3RydWN0IGVuZXRjX3BmICpwZilcbiBcbiBcdC8qIHNwbGl0IHVwIFJGUyBlbnRyaWVzICovXG4gXHRlbmV0Y19wb3J0X2Fzc2lnbl9yZnNfZW50cmllcyhwZi1cdTAwM2VzaSk7XG4tXG4gXHQvKiBlbmZvcmNlIFZMQU4gcHJvbWlzYyBtb2RlIGZvciBhbGwgU0lzICovXG4tXHRwZi1cdTAwM2V2bGFuX3Byb21pc2Nfc2ltYXAgPSBFTkVUQ19WTEFOX1BST01JU0NfTUFQX0FMTDtcbi1cdGVuZXRjX3NldF92bGFuX3Byb21pc2MoaHcsIHBmLVx1MDAzZXZsYW5fcHJvbWlzY19zaW1hcCk7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHBmLVx1MDAzZXRvdGFsX3ZmcyAmIzQzOyAxOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGVuZXRjX3NldF9zaV92bGFuX3Byb21pc2MocGYtXHUwMDNlc2ksIGksIHRydWUpO1xuIFxuLVx0ZW5ldGNfcG9ydF93cihodywgRU5FVENfUFNJUE1SLCAwKTtcbiYjNDM7XHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQ19QU0lQTU1SLCAwKTtcbiBcbiBcdC8qIGVuYWJsZSBwb3J0ICovXG4gXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQ19QTVIsIEVORVRDX1BNUl9FTik7XG5AQCAtNDk0LDEyICYjNDM7NDQ1LDkgQEAgc3RhdGljIGludCBlbmV0Y19wZl9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHR9XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSB7XG4tXHRcdHN0cnVjdCBlbmV0Y19wZiAqcGYgPSBlbmV0Y19zaV9wcml2KHByaXYtXHUwMDNlc2kpO1xuJiM0MztcdFx0Ym9vbCBwcm9taXNjID0gIShmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKTtcbiBcbi1cdFx0aWYgKCEhKGZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpKVxuLVx0XHRcdGVuZXRjX2Rpc2FibGVfc2lfdmxhbl9wcm9taXNjKHBmLCAwKTtcbi1cdFx0ZWxzZVxuLVx0XHRcdGVuZXRjX2VuYWJsZV9zaV92bGFuX3Byb21pc2MocGYsIDApO1xuJiM0MztcdFx0ZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzYyhwcml2LVx1MDAzZXNpLCAwLCBwcm9taXNjKTtcbiBcdH1cbiBcbiBcdGlmIChjaGFuZ2VkIFx1MDAyNiBORVRJRl9GX0xPT1BCQUNLKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmhcbmluZGV4IDI4NWI3ZTVjNDhmZGM3Li41NmQyM2E4YTExYTA2MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuaFxuQEAgLTE3LDEyICYjNDM7MTcsOSBAQCBzdHJ1Y3QgZW5ldGNfdmZfc3RhdGUge1xuIH07XG4gXG4gc3RydWN0IGVuZXRjX3BvcnRfY2FwcyB7XG4tXHR1MzIgaGFsZl9kdXBsZXg6MTtcbi1cdGludCBudW1fdnNpO1xuIFx0aW50IG51bV9tc2l4O1xuIFx0aW50IG51bV9yeF9iZHI7XG4gXHRpbnQgbnVtX3R4X2Jkcjtcbi1cdGludCBtYWNfZmlsdGVyX251bTtcbiB9O1xuIFxuIHN0cnVjdCBlbmV0Y19wZjtcbkBAIC00Nyw3ICYjNDM7NDQsNiBAQCBzdHJ1Y3QgZW5ldGNfcGYge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IG1zZ190YXNrO1xuIFx0Y2hhciBtc2dfaW50X25hbWVbRU5FVENfSU5UX05BTUVfTUFYXTtcbiBcbi1cdGNoYXIgdmxhbl9wcm9taXNjX3NpbWFwOyAvKiBiaXRtYXAgb2YgU0lzIGluIFZMQU4gcHJvbWlzYyBtb2RlICovXG4gXHRERUNMQVJFX0JJVE1BUCh2bGFuX2h0X2ZpbHRlciwgRU5FVENfVkxBTl9IVF9TSVpFKTtcbiBcdERFQ0xBUkVfQklUTUFQKGFjdGl2ZV92bGFucywgVkxBTl9OX1ZJRCk7XG4gXG5AQCAtNjAsOCAmIzQzOzU2LDYgQEAgc3RydWN0IGVuZXRjX3BmIHtcbiBcbiBcdHN0cnVjdCBlbmV0Y19wb3J0X2NhcHMgY2FwcztcbiBcdGNvbnN0IHN0cnVjdCBlbmV0Y19wZl9vcHMgKm9wcztcbi1cbi1cdGludCBudW1fbWZlO1x0LyogbnVtYmVyIG9mIG1hYyBhZGRyZXNzIGZpbHRlciB0YWJsZSBlbnRyaWVzICovXG4gfTtcbiBcbiAjZGVmaW5lIHBoeWxpbmtfdG9fZW5ldGNfcGYoY29uZmlnKSBcXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uY1xuaW5kZXggNmU1ZDJmODY5OTE1MGIuLmQzMmExOTVhMDRjOTdlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmNcbkBAIC0xLDUgJiM0MzsxLDUgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAmIzQzOyBPUiBCU0QtMy1DbGF1c2UpXG4tLyogQ29weXJpZ2h0IDIwMjQgTlhQICovXG4mIzQzOy8qIENvcHlyaWdodCAyMDI0LTIwMjYgTlhQICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZnNsL2VuZXRjX21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX21kaW8uaFx1MDAzZVxuQEAgLTg3LDYgJiM0Mzs4NywxMTIgQEAgaW50IGVuZXRjX3NldHVwX21hY19hZGRyZXNzZXMoc3RydWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IGVuZXRjX3BmICpwZilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfc2V0dXBfbWFjX2FkZHJlc3Nlcyk7XG4gXG4mIzQzO3ZvaWQgZW5ldGNfc2V0X3NpX3VjX3Byb21pc2Moc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCBib29sIHByb21pc2MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXHUwMDI2c2ktXHUwMDNlaHc7XG4mIzQzO1x0aW50IHBzaXBtbXJfb2ZmO1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1xuJiM0MztcdGlmIChpc19lbmV0Y19yZXYxKHNpKSlcbiYjNDM7XHRcdHBzaXBtbXJfb2ZmID0gRU5FVENfUFNJUE1NUjtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRwc2lwbW1yX29mZiA9IEVORVRDNF9QU0lQTU1SO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBwc2lwbW1yX29mZik7XG4mIzQzO1xuJiM0MztcdGlmIChwcm9taXNjKVxuJiM0MztcdFx0dmFsIHw9IFBTSVBNTVJfU0lfTUFDX1VQKHNpX2lkKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR2YWwgXHUwMDI2PSB+UFNJUE1NUl9TSV9NQUNfVVAoc2lfaWQpO1xuJiM0MztcbiYjNDM7XHRlbmV0Y19wb3J0X3dyKGh3LCBwc2lwbW1yX29mZiwgdmFsKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChlbmV0Y19zZXRfc2lfdWNfcHJvbWlzYyk7XG4mIzQzO1xuJiM0Mzt2b2lkIGVuZXRjX3NldF9zaV9tY19wcm9taXNjKHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZCwgYm9vbCBwcm9taXNjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnNpLVx1MDAzZWh3O1xuJiM0MztcdGludCBwc2lwbW1yX29mZjtcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcbiYjNDM7XHRpZiAoaXNfZW5ldGNfcmV2MShzaSkpXG4mIzQzO1x0XHRwc2lwbW1yX29mZiA9IEVORVRDX1BTSVBNTVI7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cHNpcG1tcl9vZmYgPSBFTkVUQzRfUFNJUE1NUjtcbiYjNDM7XG4mIzQzO1x0dmFsID0gZW5ldGNfcG9ydF9yZChodywgcHNpcG1tcl9vZmYpO1xuJiM0MztcbiYjNDM7XHRpZiAocHJvbWlzYylcbiYjNDM7XHRcdHZhbCB8PSBQU0lQTU1SX1NJX01BQ19NUChzaV9pZCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dmFsIFx1MDAyNj0gflBTSVBNTVJfU0lfTUFDX01QKHNpX2lkKTtcbiYjNDM7XG4mIzQzO1x0ZW5ldGNfcG9ydF93cihodywgcHNpcG1tcl9vZmYsIHZhbCk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfc2V0X3NpX21jX3Byb21pc2MpO1xuJiM0MztcbiYjNDM7dm9pZCBlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCB1NjQgaGFzaClcbiYjNDM7e1xuJiM0MztcdGludCBwc2l1bWhmcjBfb2ZmLCBwc2l1bWhmcjFfb2ZmO1xuJiM0MztcdHN0cnVjdCBlbmV0Y19odyAqaHcgPSBcdTAwMjZzaS1cdTAwM2VodztcbiYjNDM7XG4mIzQzO1x0aWYgKGlzX2VuZXRjX3JldjEoc2kpKSB7XG4mIzQzO1x0XHRib29sIGVyciA9IHNpLVx1MDAzZWVycmF0YSBcdTAwMjYgRU5FVENfRVJSX1VDTUNTV1A7XG4mIzQzO1xuJiM0MztcdFx0cHNpdW1oZnIwX29mZiA9IEVORVRDX1BTSVVNSEZSMChzaV9pZCwgZXJyKTtcbiYjNDM7XHRcdHBzaXVtaGZyMV9vZmYgPSBFTkVUQ19QU0lVTUhGUjEoc2lfaWQpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRwc2l1bWhmcjBfb2ZmID0gRU5FVEM0X1BTSVVNSEZSMChzaV9pZCk7XG4mIzQzO1x0XHRwc2l1bWhmcjFfb2ZmID0gRU5FVEM0X1BTSVVNSEZSMShzaV9pZCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlbmV0Y19wb3J0X3dyKGh3LCBwc2l1bWhmcjBfb2ZmLCBsb3dlcl8zMl9iaXRzKGhhc2gpKTtcbiYjNDM7XHRlbmV0Y19wb3J0X3dyKGh3LCBwc2l1bWhmcjFfb2ZmLCB1cHBlcl8zMl9iaXRzKGhhc2gpKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIpO1xuJiM0MztcbiYjNDM7dm9pZCBlbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCB1NjQgaGFzaClcbiYjNDM7e1xuJiM0MztcdGludCBwc2ltbWhmcjBfb2ZmLCBwc2ltbWhmcjFfb2ZmO1xuJiM0MztcdHN0cnVjdCBlbmV0Y19odyAqaHcgPSBcdTAwMjZzaS1cdTAwM2VodztcbiYjNDM7XG4mIzQzO1x0aWYgKGlzX2VuZXRjX3JldjEoc2kpKSB7XG4mIzQzO1x0XHRib29sIGVyciA9IHNpLVx1MDAzZWVycmF0YSBcdTAwMjYgRU5FVENfRVJSX1VDTUNTV1A7XG4mIzQzO1xuJiM0MztcdFx0cHNpbW1oZnIwX29mZiA9IEVORVRDX1BTSU1NSEZSMChzaV9pZCwgZXJyKTtcbiYjNDM7XHRcdHBzaW1taGZyMV9vZmYgPSBFTkVUQ19QU0lNTUhGUjEoc2lfaWQpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRwc2ltbWhmcjBfb2ZmID0gRU5FVEM0X1BTSU1NSEZSMChzaV9pZCk7XG4mIzQzO1x0XHRwc2ltbWhmcjFfb2ZmID0gRU5FVEM0X1BTSU1NSEZSMShzaV9pZCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlbmV0Y19wb3J0X3dyKGh3LCBwc2ltbWhmcjBfb2ZmLCBsb3dlcl8zMl9iaXRzKGhhc2gpKTtcbiYjNDM7XHRlbmV0Y19wb3J0X3dyKGh3LCBwc2ltbWhmcjFfb2ZmLCB1cHBlcl8zMl9iaXRzKGhhc2gpKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChlbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXIpO1xuJiM0MztcbiYjNDM7dm9pZCBlbmV0Y19zZXRfc2lfdmxhbl9wcm9taXNjKHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZCwgYm9vbCBwcm9taXNjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnNpLVx1MDAzZWh3O1xuJiM0MztcdGludCBwc2lwdm1yX29mZjtcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcbiYjNDM7XHRpZiAoaXNfZW5ldGNfcmV2MShzaSkpXG4mIzQzO1x0XHRwc2lwdm1yX29mZiA9IEVORVRDX1BTSVBWTVI7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cHNpcHZtcl9vZmYgPSBFTkVUQzRfUFNJUFZNUjtcbiYjNDM7XG4mIzQzO1x0dmFsID0gZW5ldGNfcG9ydF9yZChodywgcHNpcHZtcl9vZmYpO1xuJiM0MztcbiYjNDM7XHRpZiAocHJvbWlzYylcbiYjNDM7XHRcdHZhbCB8PSBQU0lQVk1SX1NJX1ZMQU5fUChzaV9pZCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dmFsIFx1MDAyNj0gflBTSVBWTVJfU0lfVkxBTl9QKHNpX2lkKTtcbiYjNDM7XG4mIzQzO1x0ZW5ldGNfcG9ydF93cihodywgcHNpcHZtcl9vZmYsIHZhbCk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzYyk7XG4mIzQzO1xuIHZvaWQgZW5ldGNfcGZfbmV0ZGV2X3NldHVwKHN0cnVjdCBlbmV0Y19zaSAqc2ksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqbmRldl9vcHMpXG4ge1xuQEAgLTI3NSw3ICYjNDM7MzgxLDggQEAgc3RhdGljIGJvb2wgZW5ldGNfcG9ydF9oYXNfcGNzKHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4gXHRyZXR1cm4gKHBmLVx1MDAzZWlmX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJIHx8XG4gXHRcdHBmLVx1MDAzZWlmX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCB8fFxuIFx0XHRwZi1cdTAwM2VpZl9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVggfHxcbi1cdFx0cGYtXHUwMDNlaWZfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSk7XG4mIzQzO1x0XHRwZi1cdTAwM2VpZl9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJIHx8XG4mIzQzO1x0XHRwZi1cdTAwM2VpZl9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUik7XG4gfVxuIFxuIGludCBlbmV0Y19tZGlvYnVzX2NyZWF0ZShzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG5AQCAtMzE2LDI1ICYjNDM7NDIzLDQyIEBAIGludCBlbmV0Y19waHlsaW5rX2NyZWF0ZShzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXG4ge1xuIFx0c3RydWN0IGVuZXRjX3BmICpwZiA9IGVuZXRjX3NpX3ByaXYocHJpdi1cdTAwM2VzaSk7XG4gXHRzdHJ1Y3QgcGh5bGluayAqcGh5bGluaztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG1hY19jYXBzO1xuIFx0aW50IGVycjtcbiBcbiBcdHBmLVx1MDAzZXBoeWxpbmtfY29uZmlnLmRldiA9IFx1MDAyNnByaXYtXHUwMDNlbmRldi1cdTAwM2VkZXY7XG4gXHRwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZy50eXBlID0gUEhZTElOS19ORVRERVY7XG4tXHRwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzID0gTUFDX0FTWU1fUEFVU0UgfCBNQUNfU1lNX1BBVVNFIHxcbi1cdFx0TUFDXzEwIHwgTUFDXzEwMCB8IE1BQ18xMDAwIHwgTUFDXzI1MDBGRDtcbiBcbiBcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwsXG4gXHRcdCAgcGYtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuLVx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSxcbi1cdFx0ICBwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4tXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCxcbi1cdFx0ICBwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4tXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWCxcbi1cdFx0ICBwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4tXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUksXG4tXHRcdCAgcGYtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuLVx0cGh5X2ludGVyZmFjZV9zZXRfcmdtaWkocGYtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuIFxuJiM0MztcdG1hY19jYXBzID0gTUFDX0FTWU1fUEFVU0UgfCBNQUNfU1lNX1BBVVNFO1xuJiM0MztcdGlmICghZW5ldGNfaXNfcHNldWRvX21hYyhwcml2LVx1MDAzZXNpKSkge1xuJiM0MztcdFx0bWFjX2NhcHMgfD0gTUFDXzEwIHwgTUFDXzEwMCB8IE1BQ18xMDAwRkQgfCBNQUNfMjUwMEZEO1xuJiM0MztcbiYjNDM7XHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfU0dNSUksXG4mIzQzO1x0XHRcdCAgcGYtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuJiM0MztcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgsXG4mIzQzO1x0XHRcdCAgcGYtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuJiM0MztcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVgsXG4mIzQzO1x0XHRcdCAgcGYtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuJiM0MztcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJLFxuJiM0MztcdFx0XHQgIHBmLVx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWlzX2VuZXRjX3JldjEocHJpdi1cdTAwM2VzaSkpIHtcbiYjNDM7XHRcdFx0bWFjX2NhcHMgfD0gTUFDXzUwMDBGRCB8IE1BQ18xMDAwMEZEO1xuJiM0MztcdFx0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSLFxuJiM0MztcdFx0XHRcdCAgcGYtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHBoeV9pbnRlcmZhY2Vfc2V0X3JnbWlpKHBmLVx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0bWFjX2NhcHMgfD0gTUFDXzEwRkQgfCBNQUNfMTAwRkQgfCBNQUNfMTAwMEZEIHwgTUFDXzI1MDBGRCB8XG4mIzQzO1x0XHRcdCAgICBNQUNfNTAwMEZEIHwgTUFDXzEwMDAwRkQgfCBNQUNfMjAwMDBGRCB8XG4mIzQzO1x0XHRcdCAgICBNQUNfMjUwMDBGRDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBmLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgPSBtYWNfY2FwcztcbiBcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcdTAwMjZwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZywgb2ZfZndub2RlX2hhbmRsZShub2RlKSxcbiBcdFx0XHRcdCBwZi1cdTAwM2VpZl9tb2RlLCBvcHMpO1xuIFx0aWYgKElTX0VSUihwaHlsaW5rKSkge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uaFxuaW5kZXggNTdkMmUwZWJkMmIwYmIuLjgyNDNjZTBkZTU3ZjY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmhcbkBAIC0xNyw2ICYjNDM7MTcsMTEgQEAgdm9pZCBlbmV0Y19zZXRfZGVmYXVsdF9yc3Nfa2V5KHN0cnVjdCBlbmV0Y19wZiAqcGYpO1xuIGludCBlbmV0Y192bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIF9fYmUxNiBwcm90LCB1MTYgdmlkKTtcbiBpbnQgZW5ldGNfdmxhbl9yeF9kZWxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBfX2JlMTYgcHJvdCwgdTE2IHZpZCk7XG4gaW50IGVuZXRjX2luaXRfc3Jpb3ZfcmVzb3VyY2VzKHN0cnVjdCBlbmV0Y19wZiAqcGYpO1xuJiM0Mzt2b2lkIGVuZXRjX3NldF9zaV91Y19wcm9taXNjKHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZCwgYm9vbCBwcm9taXNjKTtcbiYjNDM7dm9pZCBlbmV0Y19zZXRfc2lfbWNfcHJvbWlzYyhzdHJ1Y3QgZW5ldGNfc2kgKnNpLCBpbnQgc2lfaWQsIGJvb2wgcHJvbWlzYyk7XG4mIzQzO3ZvaWQgZW5ldGNfc2V0X3NpX3VjX2hhc2hfZmlsdGVyKHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZCwgdTY0IGhhc2gpO1xuJiM0Mzt2b2lkIGVuZXRjX3NldF9zaV9tY19oYXNoX2ZpbHRlcihzdHJ1Y3QgZW5ldGNfc2kgKnNpLCBpbnQgc2lfaWQsIHU2NCBoYXNoKTtcbiYjNDM7dm9pZCBlbmV0Y19zZXRfc2lfdmxhbl9wcm9taXNjKHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZCwgYm9vbCBwcm9taXNjKTtcbiBcbiBzdGF0aWMgaW5saW5lIHUxNiBlbmV0Y19nZXRfaXBfcmV2aXNpb24oc3RydWN0IGVuZXRjX2h3ICpodylcbiB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3Fvcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3Fvcy5jXG5pbmRleCA3YjE3YmNhMjRmMjYwZi4uMmFhMGZjYWFmY2QyM2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcW9zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19xb3MuY1xuQEAgLTExMzUsNyAmIzQzOzExMzUsNiBAQCBzdGF0aWMgaW50IGVuZXRjX3BzZnBfcGFyc2VfY2xzZmxvd2VyKHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYsXG4gXHRzdHJ1Y3QgZmxvd19hY3Rpb25fZW50cnkgKmVudHJ5O1xuIFx0c3RydWN0IGFjdGlvbl9nYXRlX2VudHJ5ICplO1xuIFx0dTggc2ZpX292ZXJ3cml0ZSA9IDA7XG4tXHRpbnQgZW50cmllc19zaXplO1xuIFx0aW50IGksIGVycjtcbiBcbiBcdGlmIChmLVx1MDAzZWNvbW1vbi5jaGFpbl9pbmRleCBcdTAwM2U9IHByaXYtXHUwMDNlcHNmcF9jYXAubWF4X3N0cmVhbWlkKSB7XG5AQCAtMTI0Miw4ICYjNDM7MTI0MSw3IEBAIHN0YXRpYyBpbnQgZW5ldGNfcHNmcF9wYXJzZV9jbHNmbG93ZXIoc3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdixcbiBcdFx0Z290byBmcmVlX2ZpbHRlcjtcbiBcdH1cbiBcbi1cdGVudHJpZXNfc2l6ZSA9IHN0cnVjdF9zaXplKHNnaSwgZW50cmllcywgZW50cnlnLVx1MDAzZWdhdGUubnVtX2VudHJpZXMpO1xuLVx0c2dpID0ga3phbGxvYyhlbnRyaWVzX3NpemUsIEdGUF9LRVJORUwpO1xuJiM0MztcdHNnaSA9IGt6YWxsb2NfZmxleCgqc2dpLCBlbnRyaWVzLCBlbnRyeWctXHUwMDNlZ2F0ZS5udW1fZW50cmllcyk7XG4gXHRpZiAoIXNnaSkge1xuIFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIGZyZWVfZmlsdGVyO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y192Zi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3ZmLmNcbmluZGV4IDljZGIwYTRkNmJhZmI3Li43ZGNiNGEwMjQ2ZjUyOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y192Zi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfdmYuY1xuQEAgLTMxNyw3ICYjNDM7MzE3LDE0IEBAIHN0YXRpYyBpbnQgZW5ldGNfdmZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXG4gXHRlbmV0Y19nZXRfc2lfY2FwcyhzaSk7XG4gXG4tXHRuZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXEoc2l6ZW9mKCpwcml2KSwgRU5FVENfTUFYX05VTV9UWFFTKTtcbiYjNDM7XHQvKiBDdXJyZW50bHksIHRoZSBzdXBwb3J0ZWQgU29DcyBoYXZlIGEgbWF4IG9mIDYgQ1BVcyBhbmQgdGhlIFZGc1xuJiM0MztcdCAqIGhhdmUgbGVzcyB0aGFuIDYgUlgvVFggcmluZ3MuIFNvIG5vIGlzc3VlcyBmb3IgdGhlc2Ugc3VwcG9ydGVkXG4mIzQzO1x0ICogU29DcywgYnV0IGZvciBmdXR1cmUgU29DcyB3aGljaCBoYXZlIG1vcmUgQ1BVcyBvciBtb3JlIFRYL1JYXG4mIzQzO1x0ICogcmluZ3MsIGFsbCB0aGUgcmVsYXRlZCBsb2dpYyBuZWVkcyB0byBiZSBpbXByb3ZlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRuZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXFzKHNpemVvZigqcHJpdiksXG4mIzQzO1x0XHRcdFx0ICBtaW4oc2ktXHUwMDNlbnVtX3R4X3JpbmdzLCBFTkVUQ19NQVhfTlVNX1RYUVMpLFxuJiM0MztcdFx0XHRcdCAgbWluKHNpLVx1MDAzZW51bV9yeF9yaW5ncywgRU5FVENfTUFYX05VTV9UWFFTKSk7XG4gXHRpZiAoIW5kZXYpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7bmV0ZGV2IGNyZWF0aW9uIGZhaWxlZFxcblwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc2wvbnRtcC5oIGIvaW5jbHVkZS9saW51eC9mc2wvbnRtcC5oXG5pbmRleCBkM2I2YzQ3NmI5MWEyZC4uNzY0ZWYyODkyNjA4NWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzbC9udG1wLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnNsL250bXAuaFxuQEAgLTc1LDggJiM0Mzs3NSwxMCBAQCBzdHJ1Y3QgbnRtcF91c2VyIHtcbiBcdC8qIE5UTVAgdGFibGUgYml0bWFwcyBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCAqL1xuIFx0dTMyIGV0dF9iaXRtYXBfc2l6ZTtcbiBcdHUzMiBlY3RfYml0bWFwX3NpemU7XG4mIzQzO1x0dTE2IG1hZnRfbnVtX2VudHJpZXM7XG4gXHR1bnNpZ25lZCBsb25nICpldHRfZ2lkX2JpdG1hcDsgLyogb25seSB2YWxpZCBmb3Igc3dpdGNoICovXG4gXHR1bnNpZ25lZCBsb25nICplY3RfZ2lkX2JpdG1hcDsgLyogb25seSB2YWxpZCBmb3Igc3dpdGNoICovXG4mIzQzO1x0dW5zaWduZWQgbG9uZyAqbWFmdF9laWRfYml0bWFwOyAvKiBvbmx5IHZhbGlkIGZvciBFTkVUQyAqL1xuIH07XG4gXG4gc3RydWN0IG1hZnRfZW50cnlfZGF0YSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDM6MDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlNMX0VORVRDJiMzNDssCiAgICAmIzM0O05YUF9FTkVUQzQmIzM0OywKICAgICYjMzQ7RlNMX0VORVRDX1ZGJiMzNDssCiAgICAmIzM0O0ZTTF9FTkVUQ19RT1MmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbmV0YzRfcGZfc2V0X3J4X21vZGUmIzM0OywKICAgICYjMzQ7ZW5ldGNfcGZfc2V0X3J4X21vZGUmIzM0OywKICAgICYjMzQ7ZW5ldGM0X3BmX3NldF9tYWNfZmlsdGVyJiMzNDssCiAgICAmIzM0O2VuZXRjNF9wZl9zZXRfdWNfZXhhY3RfZmlsdGVyJiMzNDssCiAgICAmIzM0O2VuZXRjNF9wZl9hZGRfbWFmdF9lbnRyaWVzJiMzNDssCiAgICAmIzM0O2VuZXRjX3N5bmNfbWFjX2ZpbHRlcnMmIzM0OywKICAgICYjMzQ7ZW5ldGNfc2V0X3NpX3VjX3Byb21pc2MmIzM0OywKICAgICYjMzQ7ZW5ldGNfc2V0X3NpX21jX3Byb21pc2MmIzM0OywKICAgICYjMzQ7ZW5ldGNfc2V0X3NpX3VjX2hhc2hfZmlsdGVyJiMzNDssCiAgICAmIzM0O2VuZXRjX3NldF9zaV9tY19oYXNoX2ZpbHRlciYjMzQ7LAogICAgJiMzNDtlbmV0Y19zZXRfc2lfdmxhbl9wcm9taXNjJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgRU5FVEMgZHJpdmVyIHRvIHVzZSB0aGUgbmV3IGBuZG9fc2V0X3J4X21vZGVfYXN5bmNgIG5ldF9kZXZpY2Vfb3BzIG1lbWJlciBpbnN0ZWFkIG9mIGEgY3VzdG9tIHdvcmtxdWV1ZSBmb3Igc2V0dGluZyB0aGUgUlggbW9kZS4gSXQgYWxzbyBtb2RpZmllcyBNQUMgYW5kIFZMQU4gZmlsdGVyaW5nIGxvZ2ljIGluIHRoZSBQRiBkcml2ZXJzIChgZW5ldGM0X3BmLmNgIGFuZCBgZW5ldGNfcGYuY2ApLCBhbmQgaW50cm9kdWNlcyBjb21tb24gaGVscGVyIGZ1bmN0aW9ucyBmb3IgcHJvbWlzY3VvdXMgbW9kZSBhbmQgaGFzaCBmaWx0ZXJzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZiMTM5ZTQ3MmQ5MGE3OGFlZDMwYWRhMjI2MTU3NGFkZWUyYzI5NjYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyMCAwMzowMDoxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Yy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjLmgKaW5kZXggMDRhNWRkNWVhNmM3NGMuLjg4MzljZmI0OWJjZmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGMuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGMuaApAQCAtMSw1ICYjNDM7MSw1IEBACiAvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAmIzQzOyBPUiBCU0QtMy1DbGF1c2UpICovCi0vKiBDb3B5cmlnaHQgMjAxNy0yMDE5IE5YUCAqLwomIzQzOy8qIENvcHlyaWdodCAyMDE3LTIwMTksIDIwMjUtMjAyNiBOWFAgKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L3RpbWVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGNpLmgmZ3Q7CkBAIC0zMjQsOCAmIzQzOzMyNCw2IEBAIHN0cnVjdCBlbmV0Y19zaSB7CiAJY29uc3Qgc3RydWN0IGVuZXRjX2RydmRhdGEgKmRydmRhdGE7CiAJY29uc3Qgc3RydWN0IGVuZXRjX3NpX29wcyAqb3BzOwogCi0Jc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtxdWV1ZTsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcnhfbW9kZV90YXNrOwogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdDsKIAlzdHJ1Y3QgZW5ldGNfbXNnX3N3YmQgbXNnOyAvKiBPbmx5IHZhbGlkIGZvciBWU0kgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfZGVidWdmcy5jCmluZGV4IDFiMTU5MWRjZTczZDRiLi41MDI5MDM4YmY5OWZhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9kZWJ1Z2ZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9kZWJ1Z2ZzLmMKQEAgLTI4LDE1ICYjNDM7MjgsMTQgQEAgc3RhdGljIHZvaWQgZW5ldGNfc2hvd19zaV9tYWNfaGFzaF9maWx0ZXIoc3RydWN0IHNlcV9maWxlICpzLCBpbnQgaSkKIAogc3RhdGljIGludCBlbmV0Y19tYWNfZmlsdGVyX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBlbmV0Y19zaSAqc2kgPSBzLSZndDtwcml2YXRlOwotCXN0cnVjdCBlbmV0Y19odyAqaHcgPSAmYW1wO3NpLSZndDtodzsKJiM0MzsJc3RydWN0IGVuZXRjX3BmICpwZiA9IGVuZXRjX3NpX3ByaXYocy0mZ3Q7cHJpdmF0ZSk7CiYjNDM7CXN0cnVjdCBlbmV0Y19odyAqaHcgPSAmYW1wO3BmLSZndDtzaS0mZ3Q7aHc7CiYjNDM7CWludCBudW1fc2kgPSBwZi0mZ3Q7dG90YWxfdmZzICYjNDM7IDE7CiAJc3RydWN0IG1hZnRfZW50cnlfZGF0YSBtYWZ0OwotCXN0cnVjdCBlbmV0Y19wZiAqcGY7Ci0JaW50IGksIGVyciwgbnVtX3NpOwotCXUzMiB2YWw7Ci0KLQlwZiA9IGVuZXRjX3NpX3ByaXYoc2kpOwotCW51bV9zaSA9IHBmLSZndDtjYXBzLm51bV92c2kgJiM0MzsgMTsKJiM0MzsJc3RydWN0IG50bXBfdXNlciAqdXNlcjsKJiM0MzsJdTMyIHZhbCwgZW50cnlfaWQ7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwlpbnQgaTsKIAogCXZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDNF9QU0lQTU1SKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3NpOyBpJiM0MzsmIzQzOykgewpAQCAtNTAsMzEgJiM0Mzs0OSwzOCBAQCBzdGF0aWMgaW50IGVuZXRjX21hY19maWx0ZXJfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpCiAJZm9yIChpID0gMDsgaSAmbHQ7IG51bV9zaTsgaSYjNDM7JiM0MzspCiAJCWVuZXRjX3Nob3dfc2lfbWFjX2hhc2hfZmlsdGVyKHMsIGkpOwogCi0JaWYgKCFwZi0mZ3Q7bnVtX21mZSkKLQkJcmV0dXJuIDA7CiYjNDM7CXVzZXIgPSAmYW1wO3BmLSZndDtzaS0mZ3Q7bnRtcF91c2VyOwomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsKJiM0MzsJaWYgKGJpdG1hcF9lbXB0eSh1c2VyLSZndDttYWZ0X2VpZF9iaXRtYXAsIHVzZXItJmd0O21hZnRfbnVtX2VudHJpZXMpKQomIzQzOwkJZ290byB1bmxvY2tfcnRubDsKIAogCS8qIE1BQyBhZGRyZXNzIGZpbHRlciB0YWJsZSAqLwogCXNlcV9wdXRzKHMsICYjMzQ7TUFDIGFkZHJlc3MgZmlsdGVyIHRhYmxlXG4mIzM0Oyk7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IHBmLSZndDtudW1fbWZlOyBpJiM0MzsmIzQzOykgewomIzQzOwlmb3JfZWFjaF9zZXRfYml0KGVudHJ5X2lkLCB1c2VyLSZndDttYWZ0X2VpZF9iaXRtYXAsCiYjNDM7CQkJIHVzZXItJmd0O21hZnRfbnVtX2VudHJpZXMpIHsKIAkJbWVtc2V0KCZhbXA7bWFmdCwgMCwgc2l6ZW9mKG1hZnQpKTsKLQkJZXJyID0gbnRtcF9tYWZ0X3F1ZXJ5X2VudHJ5KCZhbXA7c2ktJmd0O250bXBfdXNlciwgaSwgJmFtcDttYWZ0KTsKJiM0MzsJCWVyciA9IG50bXBfbWFmdF9xdWVyeV9lbnRyeSh1c2VyLCBlbnRyeV9pZCwgJmFtcDttYWZ0KTsKIAkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7CiYjNDM7CQkJZ290byB1bmxvY2tfcnRubDsKIAotCQlzZXFfcHJpbnRmKHMsICYjMzQ7RW50cnkgJWQsIE1BQzogJXBNLCBTSSBiaXRtYXA6IDB4JTA0eFxuJiMzNDssIGksCi0JCQkgICBtYWZ0LmtleWUubWFjX2FkZHIsIGxlMTZfdG9fY3B1KG1hZnQuY2ZnZS5zaV9iaXRtYXApKTsKJiM0MzsJCXNlcV9wcmludGYocywgJiMzNDtFbnRyeSAlZCwgTUFDOiAlcE0sIFNJIGJpdG1hcDogMHglMDR4XG4mIzM0OywKJiM0MzsJCQkgICBlbnRyeV9pZCwgbWFmdC5rZXllLm1hY19hZGRyLAomIzQzOwkJCSAgIGxlMTZfdG9fY3B1KG1hZnQuY2ZnZS5zaV9iaXRtYXApKTsKIAl9CiAKLQlyZXR1cm4gMDsKJiM0Mzt1bmxvY2tfcnRubDoKJiM0MzsJcnRubF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIERFRklORV9TSE9XX0FUVFJJQlVURShlbmV0Y19tYWNfZmlsdGVyKTsKIAogdm9pZCBlbmV0Y19jcmVhdGVfZGVidWdmcyhzdHJ1Y3QgZW5ldGNfc2kgKnNpKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gc2ktJmd0O25kZXY7CiAJc3RydWN0IGRlbnRyeSAqcm9vdDsKIAotCXJvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIobmV0ZGV2X25hbWUobmRldiksIE5VTEwpOwomIzQzOwlyb290ID0gZGVidWdmc19jcmVhdGVfZGlyKHBjaV9uYW1lKHNpLSZndDtwZGV2KSwgTlVMTCk7CiAJaWYgKElTX0VSUihyb290KSkKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X2h3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X2h3LmgKaW5kZXggZjE4NDM3NTU2YTBlZTIuLjA5MDI1ZTdhMmEzYWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X2h3LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9ody5oCkBAIC02OSw4ICYjNDM7NjksNiBAQAogCiAvKiBQb3J0IFN0YXRpb24gaW50ZXJmYWNlIHByb21pc2N1b3VzIE1BQyBtb2RlIHJlZ2lzdGVyICovCiAjZGVmaW5lIEVORVRDNF9QU0lQTU1SCQkJMHgyMDAKLSNkZWZpbmUgIFBTSVBNTVJfU0lfTUFDX1VQKGEpCQlCSVQoYSkgLyogYSA9IFNJIGluZGV4ICovCi0jZGVmaW5lICBQU0lQTU1SX1NJX01BQ19NUChhKQkJQklUKChhKSAmIzQzOyAxNikKIAogLyogUG9ydCBTdGF0aW9uIGludGVyZmFjZSBwcm9taXNjdW91cyBWTEFOIG1vZGUgcmVnaXN0ZXIgKi8KICNkZWZpbmUgRU5FVEM0X1BTSVBWTVIJCQkweDIwNApAQCAtMTM3LDcgJiM0MzsxMzUsNiBAQAogI2RlZmluZSBFTkVUQzRfUFNJVkhGUjEoYSkJCSgoYSkgKiAweDgwICYjNDM7IDB4MjA2NCkKIAogI2RlZmluZSBFTkVUQzRfUE1DQVBSCQkJMHg0MDA0Ci0jZGVmaW5lICBQTUNBUFJfSEQJCQlCSVQoOCkKICNkZWZpbmUgIFBNQ0FQUl9GUAkJCUdFTk1BU0soMTAsIDkpCiAKIC8qIFBvcnQgY2FwYWJpbGl0eSByZWdpc3RlciAqLwpAQCAtMTUwLDcgJiM0MzsxNDcsNyBAQAogI2RlZmluZSAgUENSX0wyRE9TRQkJCUJJVCg0KQogI2RlZmluZSAgUENSX1RJTUVSX0NTCQkJQklUKDgpCiAjZGVmaW5lICBQQ1JfUFNQRUVECQkJR0VOTUFTSygyOSwgMTYpCi0jZGVmaW5lICBQQ1JfUFNQRUVEX1ZBTChzcGVlZCkJCSgoKHNwZWVkKSAvIDEwIC0gMSkgJmx0OyZsdDsgMTYpCiYjNDM7I2RlZmluZSAgUENSX1BTUEVFRF9WQUwocykJCUZJRUxEX1BSRVAoUENSX1BTUEVFRCwgKChzKSAvIDEwIC0gMSkpCiAKIC8qIFBvcnQgTUFDIGFkZHJlc3MgcmVnaXN0ZXIgMC8xICovCiAjZGVmaW5lIEVORVRDNF9QTUFSMAkJCTB4NDAyMApAQCAtMjAwLDcgJiM0MzsxOTcsNiBAQAogI2RlZmluZSAgUE1fQ01EX0NGR19DTlRfRlJNX0VOCQlCSVQoMTMpCiAjZGVmaW5lICBQTV9DTURfQ0ZHX1RYUAkJCUJJVCgxNSkKICNkZWZpbmUgIFBNX0NNRF9DRkdfU0VORF9JRExFCQlCSVQoMTYpCi0jZGVmaW5lICBQTV9DTURfQ0ZHX0hEX0ZDRU4JCUJJVCgxOCkKICNkZWZpbmUgIFBNX0NNRF9DRkdfU0ZECQkJQklUKDIxKQogI2RlZmluZSAgUE1fQ01EX0NGR19UWF9GTFVTSAkJQklUKDIyKQogI2RlZmluZSAgUE1fQ01EX0NGR19UWF9MT1dQX0VOCQlCSVQoMjMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMKaW5kZXggNDM3YTE1YmJiNDdiYTguLmZjZmJhYmIyOWQyMmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jCkBAIC0yMywxOCAmIzQzOzIzLDExIEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9nZXRfcG9ydF9jYXBzKHN0cnVjdCBlbmV0Y19wZiAqcGYpCiAJdTMyIHZhbDsKIAogCXZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDNF9FQ0FQUjEpOwotCXBmLSZndDtjYXBzLm51bV92c2kgPSAodmFsICZhbXA7IEVDQVBSMV9OVU1fVlNJKSAmZ3Q7Jmd0OyAyNDsKIAlwZi0mZ3Q7Y2Fwcy5udW1fbXNpeCA9ICgodmFsICZhbXA7IEVDQVBSMV9OVU1fTVNJWCkgJmd0OyZndDsgMTIpICYjNDM7IDE7CiAKIAl2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBFTkVUQzRfRUNBUFIyKTsKIAlwZi0mZ3Q7Y2Fwcy5udW1fcnhfYmRyID0gKHZhbCAmYW1wOyBFQ0FQUjJfTlVNX1JYX0JEUikgJmd0OyZndDsgMTY7CiAJcGYtJmd0O2NhcHMubnVtX3R4X2JkciA9IHZhbCAmYW1wOyBFQ0FQUjJfTlVNX1RYX0JEUjsKLQotCXZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDNF9QTUNBUFIpOwotCXBmLSZndDtjYXBzLmhhbGZfZHVwbGV4ID0gKHZhbCAmYW1wOyBQTUNBUFJfSEQpID8gMSA6IDA7Ci0KLQl2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBFTkVUQzRfUFNJTUFGQ0FQUik7Ci0JcGYtJmd0O2NhcHMubWFjX2ZpbHRlcl9udW0gPSB2YWwgJmFtcDsgUFNJTUFGQ0FQUl9OVU1fTUFDX0FGVEU7CiB9CiAKIHN0YXRpYyB2b2lkIGVuZXRjNF9nZXRfcHNpX2h3X2ZlYXR1cmVzKHN0cnVjdCBlbmV0Y19zaSAqc2kpCkBAIC03NSwzOCAmIzQzOzY4LDYgQEAgc3RhdGljIHZvaWQgZW5ldGM0X3BmX2dldF9zaV9wcmltYXJ5X21hYyhzdHJ1Y3QgZW5ldGNfaHcgKmh3LCBpbnQgc2ksCiAJcHV0X3VuYWxpZ25lZF9sZTE2KGxvd2VyLCBhZGRyICYjNDM7IDQpOwogfQogCi1zdGF0aWMgdm9pZCBlbmV0YzRfcGZfc2V0X3NpX21hY19wcm9taXNjKHN0cnVjdCBlbmV0Y19odyAqaHcsIGludCBzaSwKLQkJCQkJIGJvb2wgdWNfcHJvbWlzYywgYm9vbCBtY19wcm9taXNjKQotewotCXUzMiB2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBFTkVUQzRfUFNJUE1NUik7Ci0KLQlpZiAodWNfcHJvbWlzYykKLQkJdmFsIHw9IFBTSVBNTVJfU0lfTUFDX1VQKHNpKTsKLQllbHNlCi0JCXZhbCAmYW1wOz0gflBTSVBNTVJfU0lfTUFDX1VQKHNpKTsKLQotCWlmIChtY19wcm9taXNjKQotCQl2YWwgfD0gUFNJUE1NUl9TSV9NQUNfTVAoc2kpOwotCWVsc2UKLQkJdmFsICZhbXA7PSB+UFNJUE1NUl9TSV9NQUNfTVAoc2kpOwotCi0JZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSVBNTVIsIHZhbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX2h3ICpodywgaW50IHNpLAotCQkJCQkgICAgdTY0IGhhc2gpCi17Ci0JZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSVVNSEZSMChzaSksIGxvd2VyXzMyX2JpdHMoaGFzaCkpOwotCWVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lVTUhGUjEoc2kpLCB1cHBlcl8zMl9iaXRzKGhhc2gpKTsKLX0KLQotc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9zaV9tY19oYXNoX2ZpbHRlcihzdHJ1Y3QgZW5ldGNfaHcgKmh3LCBpbnQgc2ksCi0JCQkJCSAgICB1NjQgaGFzaCkKLXsKLQllbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJTU1IRlIwKHNpKSwgbG93ZXJfMzJfYml0cyhoYXNoKSk7Ci0JZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSU1NSEZSMShzaSksIHVwcGVyXzMyX2JpdHMoaGFzaCkpOwotfQotCiBzdGF0aWMgdm9pZCBlbmV0YzRfcGZfc2V0X2xvb3BiYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBib29sIGVuKQogewogCXN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKQEAgLTEyNCwzNCAmIzQzOzg1LDQ3IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfbG9vcGJhY2soc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgZW4pCiAKIHN0YXRpYyB2b2lkIGVuZXRjNF9wZl9jbGVhcl9tYWZ0X2VudHJpZXMoc3RydWN0IGVuZXRjX3BmICpwZikKIHsKLQlpbnQgaTsKJiM0MzsJc3RydWN0IG50bXBfdXNlciAqdXNlciA9ICZhbXA7cGYtJmd0O3NpLSZndDtudG1wX3VzZXI7CiYjNDM7CXUzMiBlbnRyeV9pZDsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBwZi0mZ3Q7bnVtX21mZTsgaSYjNDM7JiM0MzspCi0JCW50bXBfbWFmdF9kZWxldGVfZW50cnkoJmFtcDtwZi0mZ3Q7c2ktJmd0O250bXBfdXNlciwgaSk7Ci0KLQlwZi0mZ3Q7bnVtX21mZSA9IDA7CiYjNDM7CWZvcl9lYWNoX3NldF9iaXQoZW50cnlfaWQsIHVzZXItJmd0O21hZnRfZWlkX2JpdG1hcCwKJiM0MzsJCQkgdXNlci0mZ3Q7bWFmdF9udW1fZW50cmllcykgewomIzQzOwkJaWYgKCFudG1wX21hZnRfZGVsZXRlX2VudHJ5KHVzZXIsIGVudHJ5X2lkKSkKJiM0MzsJCQludG1wX2NsZWFyX2VpZF9iaXRtYXAodXNlci0mZ3Q7bWFmdF9laWRfYml0bWFwLCBlbnRyeV9pZCk7CiYjNDM7CX0KIH0KIAogc3RhdGljIGludCBlbmV0YzRfcGZfYWRkX21hZnRfZW50cmllcyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLAotCQkJCSAgICAgIHN0cnVjdCBlbmV0Y19tYWNfYWRkciAqbWFjLAotCQkJCSAgICAgIGludCBtYWNfY250KQomIzQzOwkJCQkgICAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMpCiB7CiYjNDM7CXN0cnVjdCBudG1wX3VzZXIgKnVzZXIgPSAmYW1wO3BmLSZndDtzaS0mZ3Q7bnRtcF91c2VyOwomIzQzOwlpbnQgbWFjX2NudCA9IG5ldGRldl9od19hZGRyX2xpc3RfY291bnQodWMpOwogCXN0cnVjdCBtYWZ0X2VudHJ5X2RhdGEgbWFmdCA9IHt9OwomIzQzOwlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOwomIzQzOwl1MzIgYXZhaWxhYmxlX2VudHJpZXM7CiAJdTE2IHNpX2JpdCA9IEJJVCgwKTsKLQlpbnQgaSwgZXJyOwomIzQzOwl1MzIgZW50cnlfaWQ7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWF2YWlsYWJsZV9lbnRyaWVzID0gdXNlci0mZ3Q7bWFmdF9udW1fZW50cmllcyAtCiYjNDM7CQkJICAgIGJpdG1hcF93ZWlnaHQodXNlci0mZ3Q7bWFmdF9laWRfYml0bWFwLAomIzQzOwkJCQkJICB1c2VyLSZndDttYWZ0X251bV9lbnRyaWVzKTsKJiM0MzsKJiM0MzsJaWYgKG1hY19jbnQgJmd0OyBhdmFpbGFibGVfZW50cmllcykKJiM0MzsJCXJldHVybiAtRU5PU1BDOwogCiAJbWFmdC5jZmdlLnNpX2JpdG1hcCA9IGNwdV90b19sZTE2KHNpX2JpdCk7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IG1hY19jbnQ7IGkmIzQzOyYjNDM7KSB7Ci0JCWV0aGVyX2FkZHJfY29weShtYWZ0LmtleWUubWFjX2FkZHIsIG1hY1tpXS5hZGRyKTsKLQkJZXJyID0gbnRtcF9tYWZ0X2FkZF9lbnRyeSgmYW1wO3BmLSZndDtzaS0mZ3Q7bnRtcF91c2VyLCBpLCAmYW1wO21hZnQpOwomIzQzOwluZXRkZXZfaHdfYWRkcl9saXN0X2Zvcl9lYWNoKGhhLCB1YykgewomIzQzOwkJZW50cnlfaWQgPSBudG1wX2xvb2t1cF9mcmVlX2VpZCh1c2VyLSZndDttYWZ0X2VpZF9iaXRtYXAsCiYjNDM7CQkJCQkJdXNlci0mZ3Q7bWFmdF9udW1fZW50cmllcyk7CiYjNDM7CQlldGhlcl9hZGRyX2NvcHkobWFmdC5rZXllLm1hY19hZGRyLCBoYS0mZ3Q7YWRkcik7CiYjNDM7CQllcnIgPSBudG1wX21hZnRfYWRkX2VudHJ5KHVzZXIsIGVudHJ5X2lkLCAmYW1wO21hZnQpOwogCQlpZiAodW5saWtlbHkoZXJyKSkgewotCQkJcGYtJmd0O251bV9tZmUgPSBpOwomIzQzOwkJCW50bXBfY2xlYXJfZWlkX2JpdG1hcCh1c2VyLSZndDttYWZ0X2VpZF9iaXRtYXAsIGVudHJ5X2lkKTsKIAkJCWdvdG8gY2xlYXJfbWFmdF9lbnRyaWVzOwogCQl9CiAJfQogCi0JcGYtJmd0O251bV9tZmUgPSBtYWNfY250OwotCiAJcmV0dXJuIDA7CiAKIGNsZWFyX21hZnRfZW50cmllczoKQEAgLTE2MCw5NyAmIzQzOzEzNCw3MCBAQCBzdGF0aWMgaW50IGVuZXRjNF9wZl9hZGRfbWFmdF9lbnRyaWVzKHN0cnVjdCBlbmV0Y19wZiAqcGYsCiAJcmV0dXJuICBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgZW5ldGM0X3BmX3NldF91Y19leGFjdF9maWx0ZXIoc3RydWN0IGVuZXRjX3BmICpwZikKJiM0MztzdGF0aWMgdm9pZCBlbmV0YzRfcGZfc2V0X3VjX2hhc2hfZmlsdGVyKHN0cnVjdCBlbmV0Y19wZiAqcGYsCiYjNDM7CQkJCQkgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjKQogewotCWludCBtYXhfbnVtX21mZSA9IHBmLSZndDtjYXBzLm1hY19maWx0ZXJfbnVtOwotCXN0cnVjdCBlbmV0Y19tYWNfZmlsdGVyIG1hY19maWx0ZXIgPSB7fTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBmLSZndDtzaS0mZ3Q7bmRldjsKLQlzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gJmFtcDtwZi0mZ3Q7c2ktJmd0O2h3OwotCXN0cnVjdCBlbmV0Y19tYWNfYWRkciAqbWFjX3RibDsKJiM0MzsJc3RydWN0IGVuZXRjX21hY19maWx0ZXIgKm1hY19maWx0ZXIgPSAmYW1wO3BmLSZndDttYWNfZmlsdGVyW1VDXTsKIAlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOwotCWludCBpID0gMCwgZXJyOwotCWludCBtYWNfY250OwomIzQzOwl1NjQgaGFzaDsKIAotCW5ldGlmX2FkZHJfbG9ja19iaChuZGV2KTsKJiM0MzsJZW5ldGNfcmVzZXRfbWFjX2FkZHJfZmlsdGVyKG1hY19maWx0ZXIpOwomIzQzOwluZXRkZXZfaHdfYWRkcl9saXN0X2Zvcl9lYWNoKGhhLCB1YykKJiM0MzsJCWVuZXRjX2FkZF9tYWNfYWRkcl9odF9maWx0ZXIobWFjX2ZpbHRlciwgaGEtJmd0O2FkZHIpOwomIzQzOwomIzQzOwliaXRtYXBfdG9fYXJyNjQoJmFtcDtoYXNoLCBtYWNfZmlsdGVyLSZndDttYWNfaGFzaF90YWJsZSwKJiM0MzsJCQlFTkVUQ19NQUREUl9IQVNIX1RCTF9TWik7CiYjNDM7CWVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcihwZi0mZ3Q7c2ksIDAsIGhhc2gpOwomIzQzO30KIAotCW1hY19jbnQgPSBuZXRkZXZfdWNfY291bnQobmRldik7Ci0JaWYgKCFtYWNfY250KSB7Ci0JCW5ldGlmX2FkZHJfdW5sb2NrX2JoKG5kZXYpOwomIzQzO3N0YXRpYyBpbnQgZW5ldGM0X3BmX3NldF91Y19leGFjdF9maWx0ZXIoc3RydWN0IGVuZXRjX3BmICpwZiwKJiM0MzsJCQkJCSBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZW5ldGNfc2kgKnNpID0gcGYtJmd0O3NpOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAobmV0ZGV2X2h3X2FkZHJfbGlzdF9lbXB0eSh1YykpIHsKIAkJLyogY2xlYXIgYm90aCBNQUMgaGFzaCBhbmQgZXhhY3QgZmlsdGVycyAqLwotCQllbmV0YzRfcGZfc2V0X3NpX3VjX2hhc2hfZmlsdGVyKGh3LCAwLCAwKTsKJiM0MzsJCWVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcihzaSwgMCwgMCk7CiAJCWVuZXRjNF9wZl9jbGVhcl9tYWZ0X2VudHJpZXMocGYpOwogCiAJCXJldHVybiAwOwogCX0KIAotCWlmIChtYWNfY250ICZndDsgbWF4X251bV9tZmUpIHsKLQkJZXJyID0gLUVOT1NQQzsKLQkJZ290byB1bmxvY2tfbmV0aWZfYWRkcjsKLQl9Ci0KLQltYWNfdGJsID0ga3phbGxvY19vYmpzKCptYWNfdGJsLCBtYWNfY250LCBHRlBfQVRPTUlDKTsKLQlpZiAoIW1hY190YmwpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byB1bmxvY2tfbmV0aWZfYWRkcjsKLQl9Ci0KLQluZXRkZXZfZm9yX2VhY2hfdWNfYWRkcihoYSwgbmRldikgewotCQllbmV0Y19hZGRfbWFjX2FkZHJfaHRfZmlsdGVyKCZhbXA7bWFjX2ZpbHRlciwgaGEtJmd0O2FkZHIpOwotCQlldGhlcl9hZGRyX2NvcHkobWFjX3RibFtpJiM0MzsmIzQzO10uYWRkciwgaGEtJmd0O2FkZHIpOwotCX0KLQotCW5ldGlmX2FkZHJfdW5sb2NrX2JoKG5kZXYpOwotCi0JLyogU2V0IHRlbXBvcmFyeSB1bmljYXN0IGhhc2ggZmlsdGVycyBpbiBjYXNlIG9mIFJ4IGxvc3Mgd2hlbgomIzQzOwkvKiBTZXQgdGVtcG9yYXJ5IHVuaWNhc3QgaGFzaCBmaWx0ZXIgaW4gY2FzZSBvZiBSeCBsb3NzIHdoZW4KIAkgKiB1cGRhdGluZyBNQUMgYWRkcmVzcyBmaWx0ZXIgdGFibGUKIAkgKi8KLQllbmV0YzRfcGZfc2V0X3NpX3VjX2hhc2hfZmlsdGVyKGh3LCAwLCAqbWFjX2ZpbHRlci5tYWNfaGFzaF90YWJsZSk7CiYjNDM7CWVuZXRjNF9wZl9zZXRfdWNfaGFzaF9maWx0ZXIocGYsIHVjKTsKIAllbmV0YzRfcGZfY2xlYXJfbWFmdF9lbnRyaWVzKHBmKTsKIAotCWlmICghZW5ldGM0X3BmX2FkZF9tYWZ0X2VudHJpZXMocGYsIG1hY190YmwsIGkpKQotCQllbmV0YzRfcGZfc2V0X3NpX3VjX2hhc2hfZmlsdGVyKGh3LCAwLCAwKTsKLQotCWtmcmVlKG1hY190YmwpOwotCi0JcmV0dXJuIDA7Ci0KLXVubG9ja19uZXRpZl9hZGRyOgotCW5ldGlmX2FkZHJfdW5sb2NrX2JoKG5kZXYpOwomIzQzOwllcnIgPSBlbmV0YzRfcGZfYWRkX21hZnRfZW50cmllcyhwZiwgdWMpOwomIzQzOwlpZiAoIWVycikgewomIzQzOwkJZW5ldGNfcmVzZXRfbWFjX2FkZHJfZmlsdGVyKCZhbXA7cGYtJmd0O21hY19maWx0ZXJbVUNdKTsKJiM0MzsJCWVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcihzaSwgMCwgMCk7CiYjNDM7CX0KIAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfbWFjX2hhc2hfZmlsdGVyKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGludCB0eXBlKQomIzQzO3N0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfbWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3BmICpwZiwKJiM0MzsJCQkJCSBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwZi0mZ3Q7c2ktJmd0O25kZXY7Ci0Jc3RydWN0IGVuZXRjX21hY19maWx0ZXIgKm1hY19maWx0ZXI7Ci0Jc3RydWN0IGVuZXRjX2h3ICpodyA9ICZhbXA7cGYtJmd0O3NpLSZndDtodzsKJiM0MzsJc3RydWN0IGVuZXRjX21hY19maWx0ZXIgKm1hY19maWx0ZXIgPSAmYW1wO3BmLSZndDttYWNfZmlsdGVyW01DXTsKIAlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOwomIzQzOwl1NjQgaGFzaDsKIAotCW5ldGlmX2FkZHJfbG9ja19iaChuZGV2KTsKLQlpZiAodHlwZSAmYW1wOyBFTkVUQ19NQUNfRklMVEVSX1RZUEVfVUMpIHsKLQkJbWFjX2ZpbHRlciA9ICZhbXA7cGYtJmd0O21hY19maWx0ZXJbVUNdOwotCQllbmV0Y19yZXNldF9tYWNfYWRkcl9maWx0ZXIobWFjX2ZpbHRlcik7Ci0JCW5ldGRldl9mb3JfZWFjaF91Y19hZGRyKGhhLCBuZGV2KQotCQkJZW5ldGNfYWRkX21hY19hZGRyX2h0X2ZpbHRlcihtYWNfZmlsdGVyLCBoYS0mZ3Q7YWRkcik7Ci0KLQkJZW5ldGM0X3BmX3NldF9zaV91Y19oYXNoX2ZpbHRlcihodywgMCwKLQkJCQkJCSptYWNfZmlsdGVyLSZndDttYWNfaGFzaF90YWJsZSk7Ci0JfQomIzQzOwllbmV0Y19yZXNldF9tYWNfYWRkcl9maWx0ZXIobWFjX2ZpbHRlcik7CiYjNDM7CW5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIG1jKQomIzQzOwkJZW5ldGNfYWRkX21hY19hZGRyX2h0X2ZpbHRlcihtYWNfZmlsdGVyLCBoYS0mZ3Q7YWRkcik7CiAKLQlpZiAodHlwZSAmYW1wOyBFTkVUQ19NQUNfRklMVEVSX1RZUEVfTUMpIHsKLQkJbWFjX2ZpbHRlciA9ICZhbXA7cGYtJmd0O21hY19maWx0ZXJbTUNdOwotCQllbmV0Y19yZXNldF9tYWNfYWRkcl9maWx0ZXIobWFjX2ZpbHRlcik7Ci0JCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBuZGV2KQotCQkJZW5ldGNfYWRkX21hY19hZGRyX2h0X2ZpbHRlcihtYWNfZmlsdGVyLCBoYS0mZ3Q7YWRkcik7Ci0KLQkJZW5ldGM0X3BmX3NldF9zaV9tY19oYXNoX2ZpbHRlcihodywgMCwKLQkJCQkJCSptYWNfZmlsdGVyLSZndDttYWNfaGFzaF90YWJsZSk7Ci0JfQotCW5ldGlmX2FkZHJfdW5sb2NrX2JoKG5kZXYpOwomIzQzOwliaXRtYXBfdG9fYXJyNjQoJmFtcDtoYXNoLCBtYWNfZmlsdGVyLSZndDttYWNfaGFzaF90YWJsZSwKJiM0MzsJCQlFTkVUQ19NQUREUl9IQVNIX1RCTF9TWik7CiYjNDM7CWVuZXRjX3NldF9zaV9tY19oYXNoX2ZpbHRlcihwZi0mZ3Q7c2ksIDAsIGhhc2gpOwogfQogCi1zdGF0aWMgdm9pZCBlbmV0YzRfcGZfc2V0X21hY19maWx0ZXIoc3RydWN0IGVuZXRjX3BmICpwZiwgaW50IHR5cGUpCiYjNDM7c3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9tYWNfZmlsdGVyKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGludCB0eXBlLAomIzQzOwkJCQkgICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp1YywKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpCiB7CiAJLyogQ3VycmVudGx5LCB0aGUgTUFDIGFkZHJlc3MgZmlsdGVyIHRhYmxlIChNQUZUKSBvbmx5IGhhcyA0IGVudHJpZXMsCiAJICogYW5kIG11bHRpcGxlIG11bHRpY2FzdCBhZGRyZXNzZXMgZm9yIGZpbHRlcmluZyB3aWxsIGJlIGNvbmZpZ3VyZWQKQEAgLTI1OCwxNSAmIzQzOzIwNSwxNiBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfcGZfc2V0X21hY19maWx0ZXIoc3RydWN0IGVuZXRjX3BmICpwZiwgaW50IHR5cGUpCiAJICogdW5pY2FzdCBmaWx0ZXJpbmcuIElmIHRoZSBudW1iZXIgb2YgdW5pY2FzdCBhZGRyZXNzZXMgZXhjZWVkcyB0aGUKIAkgKiB0YWJsZSBjYXBhY2l0eSwgdGhlIE1BQyBoYXNoIGZpbHRlciB3aWxsIGJlIHVzZWQuCiAJICovCi0JaWYgKHR5cGUgJmFtcDsgRU5FVENfTUFDX0ZJTFRFUl9UWVBFX1VDICZhbXA7JmFtcDsgZW5ldGM0X3BmX3NldF91Y19leGFjdF9maWx0ZXIocGYpKSB7CiYjNDM7CWlmICh0eXBlICZhbXA7IEVORVRDX01BQ19GSUxURVJfVFlQRV9VQyAmYW1wOyZhbXA7CiYjNDM7CSAgICBlbmV0YzRfcGZfc2V0X3VjX2V4YWN0X2ZpbHRlcihwZiwgdWMpKSB7CiAJCS8qIEZhbGwgYmFjayB0byB0aGUgTUFDIGhhc2ggZmlsdGVyICovCi0JCWVuZXRjNF9wZl9zZXRfbWFjX2hhc2hfZmlsdGVyKHBmLCBFTkVUQ19NQUNfRklMVEVSX1RZUEVfVUMpOwomIzQzOwkJZW5ldGM0X3BmX3NldF91Y19oYXNoX2ZpbHRlcihwZiwgdWMpOwogCQkvKiBDbGVhciB0aGUgb2xkIE1BQyBleGFjdCBmaWx0ZXIgKi8KIAkJZW5ldGM0X3BmX2NsZWFyX21hZnRfZW50cmllcyhwZik7CiAJfQogCiAJaWYgKHR5cGUgJmFtcDsgRU5FVENfTUFDX0ZJTFRFUl9UWVBFX01DKQotCQllbmV0YzRfcGZfc2V0X21hY19oYXNoX2ZpbHRlcihwZiwgRU5FVENfTUFDX0ZJTFRFUl9UWVBFX01DKTsKJiM0MzsJCWVuZXRjNF9wZl9zZXRfbWNfaGFzaF9maWx0ZXIocGYsIG1jKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBlbmV0Y19wZl9vcHMgZW5ldGM0X3BmX29wcyA9IHsKQEAgLTMwNiwzNCAmIzQzOzI1NCwzNSBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfZGVmYXVsdF9yaW5nc19hbGxvY2F0aW9uKHN0cnVjdCBlbmV0Y19wZiAqcGYpCiB7CiAJc3RydWN0IGVuZXRjX2h3ICpodyA9ICZhbXA7cGYtJmd0O3NpLSZndDtodzsKIAl1MzIgbnVtX3J4X2JkciwgbnVtX3R4X2JkciwgdmFsOwomIzQzOwlpbnQgbnVtX3ZmcyA9IHBmLSZndDt0b3RhbF92ZnM7CiAJdTMyIHZmX3R4X2JkciwgdmZfcnhfYmRyOwogCWludCBpLCByeF9yZW0sIHR4X3JlbTsKIAotCWlmIChwZi0mZ3Q7Y2Fwcy5udW1fcnhfYmRyICZsdDsgRU5FVENfU0lfTUFYX1JJTkdfTlVNICYjNDM7IHBmLSZndDtjYXBzLm51bV92c2kpCi0JCW51bV9yeF9iZHIgPSBwZi0mZ3Q7Y2Fwcy5udW1fcnhfYmRyIC0gcGYtJmd0O2NhcHMubnVtX3ZzaTsKJiM0MzsJaWYgKHBmLSZndDtjYXBzLm51bV9yeF9iZHIgJmx0OyBFTkVUQ19TSV9NQVhfUklOR19OVU0gJiM0MzsgbnVtX3ZmcykKJiM0MzsJCW51bV9yeF9iZHIgPSBwZi0mZ3Q7Y2Fwcy5udW1fcnhfYmRyIC0gbnVtX3ZmczsKIAllbHNlCiAJCW51bV9yeF9iZHIgPSBFTkVUQ19TSV9NQVhfUklOR19OVU07CiAKLQlpZiAocGYtJmd0O2NhcHMubnVtX3R4X2JkciAmbHQ7IEVORVRDX1NJX01BWF9SSU5HX05VTSAmIzQzOyBwZi0mZ3Q7Y2Fwcy5udW1fdnNpKQotCQludW1fdHhfYmRyID0gcGYtJmd0O2NhcHMubnVtX3R4X2JkciAtIHBmLSZndDtjYXBzLm51bV92c2k7CiYjNDM7CWlmIChwZi0mZ3Q7Y2Fwcy5udW1fdHhfYmRyICZsdDsgRU5FVENfU0lfTUFYX1JJTkdfTlVNICYjNDM7IG51bV92ZnMpCiYjNDM7CQludW1fdHhfYmRyID0gcGYtJmd0O2NhcHMubnVtX3R4X2JkciAtIG51bV92ZnM7CiAJZWxzZQogCQludW1fdHhfYmRyID0gRU5FVENfU0lfTUFYX1JJTkdfTlVNOwogCiAJdmFsID0gZW5ldGM0X3BzaWNmZ3IwX3ZhbF9jb25zdHJ1Y3QoZmFsc2UsIG51bV90eF9iZHIsIG51bV9yeF9iZHIpOwogCWVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lDRkdSMCgwKSwgdmFsKTsKIAotCWlmICghcGYtJmd0O2NhcHMubnVtX3ZzaSkKJiM0MzsJaWYgKCFudW1fdmZzKQogCQlyZXR1cm47CiAKIAludW1fcnhfYmRyID0gcGYtJmd0O2NhcHMubnVtX3J4X2JkciAtIG51bV9yeF9iZHI7Ci0JcnhfcmVtID0gbnVtX3J4X2JkciAlIHBmLSZndDtjYXBzLm51bV92c2k7Ci0JbnVtX3J4X2JkciA9IG51bV9yeF9iZHIgLyBwZi0mZ3Q7Y2Fwcy5udW1fdnNpOwomIzQzOwlyeF9yZW0gPSBudW1fcnhfYmRyICUgbnVtX3ZmczsKJiM0MzsJbnVtX3J4X2JkciA9IG51bV9yeF9iZHIgLyBudW1fdmZzOwogCiAJbnVtX3R4X2JkciA9IHBmLSZndDtjYXBzLm51bV90eF9iZHIgLSBudW1fdHhfYmRyOwotCXR4X3JlbSA9IG51bV90eF9iZHIgJSBwZi0mZ3Q7Y2Fwcy5udW1fdnNpOwotCW51bV90eF9iZHIgPSBudW1fdHhfYmRyIC8gcGYtJmd0O2NhcHMubnVtX3ZzaTsKJiM0MzsJdHhfcmVtID0gbnVtX3R4X2JkciAlIG51bV92ZnM7CiYjNDM7CW51bV90eF9iZHIgPSBudW1fdHhfYmRyIC8gbnVtX3ZmczsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBwZi0mZ3Q7Y2Fwcy5udW1fdnNpOyBpJiM0MzsmIzQzOykgewomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3ZmczsgaSYjNDM7JiM0MzspIHsKIAkJdmZfdHhfYmRyID0gKGkgJmx0OyB0eF9yZW0pID8gbnVtX3R4X2JkciAmIzQzOyAxIDogbnVtX3R4X2JkcjsKIAkJdmZfcnhfYmRyID0gKGkgJmx0OyByeF9yZW0pID8gbnVtX3J4X2JkciAmIzQzOyAxIDogbnVtX3J4X2JkcjsKIAkJdmFsID0gZW5ldGM0X3BzaWNmZ3IwX3ZhbF9jb25zdHJ1Y3QodHJ1ZSwgdmZfdHhfYmRyLCB2Zl9yeF9iZHIpOwpAQCAtMzQ2LDUzICYjNDM7Mjk1LDcwIEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9hbGxvY2F0ZV9zaV9yaW5ncyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKQogCWVuZXRjNF9kZWZhdWx0X3JpbmdzX2FsbG9jYXRpb24ocGYpOwogfQogCi1zdGF0aWMgdm9pZCBlbmV0YzRfcGZfc2V0X3NpX3ZsYW5fcHJvbWlzYyhzdHJ1Y3QgZW5ldGNfaHcgKmh3LCBpbnQgc2ksIGJvb2wgZW4pCi17Ci0JdTMyIHZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDNF9QU0lQVk1SKTsKLQotCWlmIChlbikKLQkJdmFsIHw9IEJJVChzaSk7Ci0JZWxzZQotCQl2YWwgJmFtcDs9IH5CSVQoc2kpOwotCi0JZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSVBWTVIsIHZhbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVuZXRjNF9zZXRfZGVmYXVsdF9zaV92bGFuX3Byb21pc2Moc3RydWN0IGVuZXRjX3BmICpwZikKLXsKLQlzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gJmFtcDtwZi0mZ3Q7c2ktJmd0O2h3OwotCWludCBudW1fc2kgPSBwZi0mZ3Q7Y2Fwcy5udW1fdnNpICYjNDM7IDE7Ci0JaW50IGk7Ci0KLQkvKiBlbmZvcmNlIFZMQU4gcHJvbWlzY3VvdXMgbW9kZSBmb3IgYWxsIFNJcyAqLwotCWZvciAoaSA9IDA7IGkgJmx0OyBudW1fc2k7IGkmIzQzOyYjNDM7KQotCQllbmV0YzRfcGZfc2V0X3NpX3ZsYW5fcHJvbWlzYyhodywgaSwgdHJ1ZSk7Ci19Ci0KIC8qIEFsbG9jYXRlIHRoZSBudW1iZXIgb2YgTVNJLVggdmVjdG9ycyBmb3IgcGVyIFNJLiAqLwogc3RhdGljIHZvaWQgZW5ldGM0X3NldF9zaV9tc2l4X251bShzdHJ1Y3QgZW5ldGNfcGYgKnBmKQogewomIzQzOwlpbnQgdmFsaWRfbnVtX3NpID0gcGYtJmd0O3RvdGFsX3ZmcyAmIzQzOyAxOwogCXN0cnVjdCBlbmV0Y19odyAqaHcgPSAmYW1wO3BmLSZndDtzaS0mZ3Q7aHc7Ci0JaW50IGksIG51bV9tc2l4LCB0b3RhbF9zaTsKJiM0MzsJaW50IGksIG51bV9tc2l4LCBudW1fdnNpOwogCXUzMiB2YWw7CiAKLQl0b3RhbF9zaSA9IHBmLSZndDtjYXBzLm51bV92c2kgJiM0MzsgMTsKJiM0MzsJdmFsID0gZW5ldGNfcG9ydF9yZChodywgRU5FVEM0X0VDQVBSMSk7CiYjNDM7CW51bV92c2kgPSBGSUVMRF9HRVQoRUNBUFIxX05VTV9WU0ksIHZhbCk7CiYjNDM7CiYjNDM7CS8qIFRoZSBQU0lhQ0ZHUjJbTlVNX01TSVhdIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIE1TSS1YIGFsbG9jYXRlZCB0bwomIzQzOwkgKiB0aGUgU0kgaXMgTlVNX01TSVggJiM0MzsgMSwgc28gdGhlIG1pbmltdW0gbnVtYmVyIG9mIE1TSS1YIGFsbG9jYXRlZCB0bwomIzQzOwkgKiBlYWNoIFNJIGlzIDEuIFRoZSB0b3RhbCBudW1iZXIgb2YgTVNJLVggYWxsb2NhdGVkIHRvIFBTSSBhbmQgVlNJcwomIzQzOwkgKiBjYW5ub3QgZXhjZWVkIHRoZSB0b3RhbCBudW1iZXIgb2YgTVNJLVggb3duZWQgYnkgdGhpcyBFTkVUQywgd2hpY2gKJiM0MzsJICogaXMgRUNBUFIxW05VTV9NU0lYXS4gT3RoZXJ3aXNlLCB3aGVuIG11bHRpcGxlIEVORVRDIGluc3RhbmNlcyBleGlzdCwKJiM0MzsJICogaXQgd2lsbCBhZmZlY3Qgb3RoZXIgRU5FVENzIHdob3NlIE1TSS1YIGludGVycnVwdHMgY2Fubm90IGJlCiYjNDM7CSAqIGdlbmVyYXRlZC4gVGhpcyBpcyBzaW1pbGFyIHRvIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzOiB0aGUgYXJyYXkKJiM0MzsJICogaXRzZWxmIGlzIG5vdCBhZmZlY3RlZCwgYnV0IGFkamFjZW50IGFycmF5cyB3aWxsIGJlIGNvcnJ1cHRlZC4KJiM0MzsJICoKJiM0MzsJICogcGYtJmd0O3RvdGFsX3ZmcyBpcyAwIGlmIENPTkZJR19QQ0lfSU9WIGlzIGRpc2FibGVkLiBJZiB0aGUgaGFyZHdhcmUKJiM0MzsJICogaXRzZWxmIHN1cHBvcnRzIFNSLUlPViwgdGhlbiB3aGVuIGFsbG9jYXRpbmcgdGhlIG51bWJlciBvZiBNU0lYcyB0bwomIzQzOwkgKiB0aGUgU0ksIGl0IG11c3QgYmUgdGFrZW4gaW50byBhY2NvdW50IHRoYXQgdGhlIFZTSSBoYXMgYXQgbGVhc3QgMQomIzQzOwkgKiBNU0lYLCBhbmQgdGhlIHRvdGFsIG51bWJlciBvZiBNU0lYcyBvZiBhbGwgU0lzIGNhbm5vdCBleGNlZWQKJiM0MzsJICogRUNBUFIxW05VTV9NU0lYXS4KJiM0MzsJICovCiYjNDM7CWlmICghcGYtJmd0O3RvdGFsX3ZmcyAmYW1wOyZhbXA7IG51bV92c2kpIHsKJiM0MzsJCS8qIEJlY2F1c2UgZWFjaCBTSSBoYXMgYXQgbGVhc3Qgb25lIE1TSVgsIGFuZCBmcm9tIHRoZSBoYXJkd2FyZQomIzQzOwkJICogcGVyc3BlY3RpdmUsIHBmLSZndDtjYXBzLm51bV9tc2l4IHdpbGwgYWx3YXlzIGJlIGdyZWF0ZXIgdGhhbgomIzQzOwkJICogbnVtX3ZzaS4gU28gbnVtX21zaXggaXMgYWx3YXlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwLgomIzQzOwkJICovCiYjNDM7CQludW1fbXNpeCA9IHBmLSZndDtjYXBzLm51bV9tc2l4IC0gbnVtX3ZzaSAtIDE7CiYjNDM7CQlpZiAobnVtX21zaXggJmd0OyBQU0lDRkdSMl9OVU1fTVNJWCkKJiM0MzsJCQludW1fbXNpeCA9IFBTSUNGR1IyX05VTV9NU0lYOwomIzQzOwkJZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSUNGR1IyKDApLCBudW1fbXNpeCk7CiAKLQludW1fbXNpeCA9IHBmLSZndDtjYXBzLm51bV9tc2l4IC8gdG90YWxfc2kgJiM0MzsKLQkJICAgcGYtJmd0O2NhcHMubnVtX21zaXggJSB0b3RhbF9zaSAtIDE7Ci0JdmFsID0gbnVtX21zaXggJmFtcDsgUFNJQ0ZHUjJfTlVNX01TSVg7Ci0JZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSUNGR1IyKDApLCB2YWwpOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG51bV92c2k7IGkmIzQzOyYjNDM7KQomIzQzOwkJCWVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lDRkdSMihpICYjNDM7IDEpLCAwKTsKIAotCW51bV9tc2l4ID0gcGYtJmd0O2NhcHMubnVtX21zaXggLyB0b3RhbF9zaSAtIDE7Ci0JdmFsID0gbnVtX21zaXggJmFtcDsgUFNJQ0ZHUjJfTlVNX01TSVg7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IHBmLSZndDtjYXBzLm51bV92c2k7IGkmIzQzOyYjNDM7KQotCQllbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJQ0ZHUjIoaSAmIzQzOyAxKSwgdmFsKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBMaWtld2lzZSwgZnJvbSB0aGUgaGFyZHdhcmUgcGVyc3BlY3RpdmUgcGYtJmd0O2NhcHMubnVtX21zaXggaXMgYWx3YXlzCiYjNDM7CSAqIGdyZWF0ZXIgdGhhbiB2YWxpZF9udW1fc2kuIFNvIG51bV9tc2l4IGlzIGFsd2F5cyBncmVhdGVyIHRoYW4gb3IKJiM0MzsJICogZXF1YWwgdG8gMC4KJiM0MzsJICovCiYjNDM7CW51bV9tc2l4ID0gcGYtJmd0O2NhcHMubnVtX21zaXggLyB2YWxpZF9udW1fc2kgJiM0MzsKJiM0MzsJCSAgIHBmLSZndDtjYXBzLm51bV9tc2l4ICUgdmFsaWRfbnVtX3NpIC0gMTsKJiM0MzsJaWYgKG51bV9tc2l4ICZndDsgUFNJQ0ZHUjJfTlVNX01TSVgpCiYjNDM7CQludW1fbXNpeCA9IFBTSUNGR1IyX05VTV9NU0lYOwomIzQzOwllbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJQ0ZHUjIoMCksIG51bV9tc2l4KTsKJiM0MzsKJiM0MzsJbnVtX21zaXggPSBwZi0mZ3Q7Y2Fwcy5udW1fbXNpeCAvIHZhbGlkX251bV9zaSAtIDE7CiYjNDM7CWlmIChudW1fbXNpeCAmZ3Q7IFBTSUNGR1IyX05VTV9NU0lYKQomIzQzOwkJbnVtX21zaXggPSBQU0lDRkdSMl9OVU1fTVNJWDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHBmLSZndDt0b3RhbF92ZnM7IGkmIzQzOyYjNDM7KQomIzQzOwkJZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSUNGR1IyKGkgJiM0MzsgMSksIG51bV9tc2l4KTsKIH0KIAogc3RhdGljIHZvaWQgZW5ldGM0X2VuYWJsZV9hbGxfc2koc3RydWN0IGVuZXRjX3BmICpwZikKIHsKIAlzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gJmFtcDtwZi0mZ3Q7c2ktJmd0O2h3OwotCWludCBudW1fc2kgPSBwZi0mZ3Q7Y2Fwcy5udW1fdnNpICYjNDM7IDE7CiYjNDM7CWludCBudW1fc2kgPSBwZi0mZ3Q7dG90YWxfdmZzICYjNDM7IDE7CiAJdTMyIHNpX2JpdG1hcCA9IDA7CiAJaW50IGk7CiAKQEAgLTQxMiw3ICYjNDM7Mzc4LDkgQEAgc3RhdGljIHZvaWQgZW5ldGM0X2NvbmZpZ3VyZV9wb3J0X3NpKHN0cnVjdCBlbmV0Y19wZiAqcGYpCiAJLyogT3V0ZXIgVkxBTiB0YWcgd2lsbCBiZSB1c2VkIGZvciBWTEFOIGZpbHRlcmluZyAqLwogCWVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lWTEFORk1SLCBQU0lWTEFORk1SX1ZTKTsKIAotCWVuZXRjNF9zZXRfZGVmYXVsdF9zaV92bGFuX3Byb21pc2MocGYpOwomIzQzOwkvKiBFbmZvcmNlIFZMQU4gcHJvbWlzY3VvdXMgbW9kZSBmb3IgYWxsIFNJcyAqLwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHBmLSZndDt0b3RhbF92ZnMgJiM0MzsgMTsgaSYjNDM7JiM0MzspCiYjNDM7CQllbmV0Y19zZXRfc2lfdmxhbl9wcm9taXNjKHBmLSZndDtzaSwgaSwgdHJ1ZSk7CiAKIAkvKiBEaXNhYmxlIFNJIE1BQyBtdWx0aWNhc3QgJmFtcDsgdW5pY2FzdCBwcm9taXNjdW91cyAqLwogCWVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lQTU1SLCAwKTsKQEAgLTQ1MCwxOCAmIzQzOzQxOCw2MCBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfY29uZmlndXJlX3BvcnQoc3RydWN0IGVuZXRjX3BmICpwZikKIAllbmV0Y19zZXRfZGVmYXVsdF9yc3Nfa2V5KHBmKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGVuZXRjNF9nZXRfbnRtcF9jYXBzKHN0cnVjdCBlbmV0Y19zaSAqc2kpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbnRtcF91c2VyICp1c2VyID0gJmFtcDtzaS0mZ3Q7bnRtcF91c2VyOwomIzQzOwlzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gJmFtcDtzaS0mZ3Q7aHc7CiYjNDM7CXUzMiB2YWw7CiYjNDM7CiYjNDM7CXZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDNF9QU0lNQUZDQVBSKTsKJiM0MzsJdXNlci0mZ3Q7bWFmdF9udW1fZW50cmllcyA9IEZJRUxEX0dFVChQU0lNQUZDQVBSX05VTV9NQUNfQUZURSwgdmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBlbmV0YzRfbnRtcF9iaXRtYXBfaW5pdChzdHJ1Y3QgbnRtcF91c2VyICp1c2VyKQomIzQzO3sKJiM0MzsJdXNlci0mZ3Q7bWFmdF9laWRfYml0bWFwID0gYml0bWFwX3phbGxvYyh1c2VyLSZndDttYWZ0X251bV9lbnRyaWVzLAomIzQzOwkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghdXNlci0mZ3Q7bWFmdF9laWRfYml0bWFwKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlbmV0YzRfbnRtcF9iaXRtYXBfZnJlZShzdHJ1Y3QgbnRtcF91c2VyICp1c2VyKQomIzQzO3sKJiM0MzsJYml0bWFwX2ZyZWUodXNlci0mZ3Q7bWFmdF9laWRfYml0bWFwKTsKJiM0MzsJdXNlci0mZ3Q7bWFmdF9laWRfYml0bWFwID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGVuZXRjNF9pbml0X250bXBfdXNlcihzdHJ1Y3QgZW5ldGNfc2kgKnNpKQogewogCXN0cnVjdCBudG1wX3VzZXIgKnVzZXIgPSAmYW1wO3NpLSZndDtudG1wX3VzZXI7CiYjNDM7CWludCBlcnI7CiAKIAkvKiBGb3IgRU5FVEMgNC4xLCBhbGwgdGFibGUgdmVyc2lvbnMgYXJlIDAgKi8KIAltZW1zZXQoJmFtcDt1c2VyLSZndDt0YmwsIDAsIHNpemVvZih1c2VyLSZndDt0YmwpKTsKIAotCXJldHVybiBlbmV0YzRfc2V0dXBfY2JkcihzaSk7CiYjNDM7CWVyciA9IGVuZXRjNF9zZXR1cF9jYmRyKHNpKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWVuZXRjNF9nZXRfbnRtcF9jYXBzKHNpKTsKJiM0MzsJZXJyID0gZW5ldGM0X250bXBfYml0bWFwX2luaXQodXNlcik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIHRlYXJkb3duX2NiZHI7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO3RlYXJkb3duX2NiZHI6CiYjNDM7CWVuZXRjNF90ZWFyZG93bl9jYmRyKHNpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgZW5ldGM0X2ZyZWVfbnRtcF91c2VyKHN0cnVjdCBlbmV0Y19zaSAqc2kpCiB7CiYjNDM7CWVuZXRjNF9udG1wX2JpdG1hcF9mcmVlKCZhbXA7c2ktJmd0O250bXBfdXNlcik7CiAJZW5ldGM0X3RlYXJkb3duX2NiZHIoc2kpOwogfQogCkBAIC00NzksNyAmIzQzOzQ4OSw3IEBAIHN0YXRpYyBpbnQgZW5ldGM0X3BmX2luaXQoc3RydWN0IGVuZXRjX3BmICpwZikKIAogCWVyciA9IGVuZXRjNF9pbml0X250bXBfdXNlcihwZi0mZ3Q7c2kpOwogCWlmIChlcnIpIHsKLQkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIGluaXQgQ0JEUlxuJiMzNDspOwomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIGluaXQgTlRNUCB1c2VyXG4mIzM0Oyk7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC00OTMsMTggJiM0Mzs1MDMsMTcgQEAgc3RhdGljIHZvaWQgZW5ldGM0X3BmX2ZyZWUoc3RydWN0IGVuZXRjX3BmICpwZikKIAllbmV0YzRfZnJlZV9udG1wX3VzZXIocGYtJmd0O3NpKTsKIH0KIAotc3RhdGljIHZvaWQgZW5ldGM0X3BzaV9kb19zZXRfcnhfbW9kZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7c3RhdGljIGludCBlbmV0YzRfcGZfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiYjNDM7CQkJCSBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMsCiYjNDM7CQkJCSBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpCiB7Ci0Jc3RydWN0IGVuZXRjX3NpICpzaSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZW5ldGNfc2ksIHJ4X21vZGVfdGFzayk7Ci0Jc3RydWN0IGVuZXRjX3BmICpwZiA9IGVuZXRjX3NpX3ByaXYoc2kpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gc2ktJmd0O25kZXY7Ci0Jc3RydWN0IGVuZXRjX2h3ICpodyA9ICZhbXA7c2ktJmd0O2h3OwomIzQzOwlzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CXN0cnVjdCBlbmV0Y19wZiAqcGYgPSBlbmV0Y19zaV9wcml2KHByaXYtJmd0O3NpKTsKJiM0MzsJc3RydWN0IGVuZXRjX3NpICpzaSA9IHByaXYtJmd0O3NpOwogCWJvb2wgdWNfcHJvbWlzYyA9IGZhbHNlOwogCWJvb2wgbWNfcHJvbWlzYyA9IGZhbHNlOwogCWludCB0eXBlID0gMDsKIAotCXJ0bmxfbG9jaygpOwotCiAJaWYgKG5kZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9QUk9NSVNDKSB7CiAJCXVjX3Byb21pc2MgPSB0cnVlOwogCQltY19wcm9taXNjID0gdHJ1ZTsKQEAgLTUxNSwyOCAmIzQzOzUyNCwyMSBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfcHNpX2RvX3NldF9yeF9tb2RlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJdHlwZSA9IEVORVRDX01BQ19GSUxURVJfVFlQRV9BTEw7CiAJfQogCi0JZW5ldGM0X3BmX3NldF9zaV9tYWNfcHJvbWlzYyhodywgMCwgdWNfcHJvbWlzYywgbWNfcHJvbWlzYyk7CiYjNDM7CWVuZXRjX3NldF9zaV91Y19wcm9taXNjKHNpLCAwLCB1Y19wcm9taXNjKTsKJiM0MzsJZW5ldGNfc2V0X3NpX21jX3Byb21pc2Moc2ksIDAsIG1jX3Byb21pc2MpOwogCiAJaWYgKHVjX3Byb21pc2MpIHsKLQkJZW5ldGM0X3BmX3NldF9zaV91Y19oYXNoX2ZpbHRlcihodywgMCwgMCk7CiYjNDM7CQllbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc2ksIDAsIDApOwogCQllbmV0YzRfcGZfY2xlYXJfbWFmdF9lbnRyaWVzKHBmKTsKIAl9CiAKIAlpZiAobWNfcHJvbWlzYykKLQkJZW5ldGM0X3BmX3NldF9zaV9tY19oYXNoX2ZpbHRlcihodywgMCwgMCk7CiYjNDM7CQllbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXIoc2ksIDAsIDApOwogCiAJLyogU2V0IG5ldyBNQUMgZmlsdGVyICovCi0JZW5ldGM0X3BmX3NldF9tYWNfZmlsdGVyKHBmLCB0eXBlKTsKJiM0MzsJZW5ldGM0X3BmX3NldF9tYWNfZmlsdGVyKHBmLCB0eXBlLCB1YywgbWMpOwogCi0JcnRubF91bmxvY2soKTsKLX0KLQotc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQotewotCXN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKLQlzdHJ1Y3QgZW5ldGNfc2kgKnNpID0gcHJpdi0mZ3Q7c2k7Ci0KLQlxdWV1ZV93b3JrKHNpLSZndDt3b3JrcXVldWUsICZhbXA7c2ktJmd0O3J4X21vZGVfdGFzayk7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGVuZXRjNF9wZl9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCkBAIC01NDQsMTIgJiM0Mzs1NDYsMTEgQEAgc3RhdGljIGludCBlbmV0YzRfcGZfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAogewogCW5ldGRldl9mZWF0dXJlc190IGNoYW5nZWQgPSBuZGV2LSZndDtmZWF0dXJlcyBeIGZlYXR1cmVzOwogCXN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKLQlzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gJmFtcDtwcml2LSZndDtzaS0mZ3Q7aHc7CiAKIAlpZiAoY2hhbmdlZCAmYW1wOyBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpIHsKIAkJYm9vbCBwcm9taXNjX2VuID0gIShmZWF0dXJlcyAmYW1wOyBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpOwogCi0JCWVuZXRjNF9wZl9zZXRfc2lfdmxhbl9wcm9taXNjKGh3LCAwLCBwcm9taXNjX2VuKTsKJiM0MzsJCWVuZXRjX3NldF9zaV92bGFuX3Byb21pc2MocHJpdi0mZ3Q7c2ksIDAsIHByb21pc2NfZW4pOwogCX0KIAogCWlmIChjaGFuZ2VkICZhbXA7IE5FVElGX0ZfTE9PUEJBQ0spCkBAIC01NjYsNyAmIzQzOzU2Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZW5ldGM0X25kZXZfb3BzID0gewogCS5uZG9fc3RhcnRfeG1pdAkJPSBlbmV0Y194bWl0LAogCS5uZG9fZ2V0X3N0YXRzCQk9IGVuZXRjX2dldF9zdGF0cywKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGVuZXRjX3BmX3NldF9tYWNfYWRkciwKLQkubmRvX3NldF9yeF9tb2RlCT0gZW5ldGM0X3BmX3NldF9yeF9tb2RlLAomIzQzOwkubmRvX3NldF9yeF9tb2RlX2FzeW5jCT0gZW5ldGM0X3BmX3NldF9yeF9tb2RlLAogCS5uZG9fc2V0X2ZlYXR1cmVzCT0gZW5ldGM0X3BmX3NldF9mZWF0dXJlcywKIAkubmRvX3ZsYW5fcnhfYWRkX3ZpZAk9IGVuZXRjX3ZsYW5fcnhfYWRkX3ZpZCwKIAkubmRvX3ZsYW5fcnhfa2lsbF92aWQJPSBlbmV0Y192bGFuX3J4X2RlbF92aWQsCkBAIC02MDIsMTEgJiM0Mzs2MDMsNiBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfbWFjX2NvbmZpZyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLCB1bnNpZ25lZCBpbnQgbW9kZSwKIAljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9SWElEOgogCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1RYSUQ6CiAJCXZhbCB8PSBJRk1PREVfUkdNSUk7Ci0JCS8qIFdlIG5lZWQgdG8gZW5hYmxlIGF1dG8tbmVnb3RpYXRpb24gZm9yIHRoZSBNQUMKLQkJICogaWYgaXRzIFJHTUlJIGludGVyZmFjZSBzdXBwb3J0IEluLUJhbmQgc3RhdHVzLgotCQkgKi8KLQkJaWYgKHBoeWxpbmtfYXV0b25lZ19pbmJhbmQobW9kZSkpCi0JCQl2YWwgfD0gUE1fSUZfTU9ERV9FTkE7CiAJCWJyZWFrOwogCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUk6CiAJCXZhbCB8PSBJRk1PREVfUk1JSTsKQEAgLTYxNiw3ICYjNDM7NjEyLDYgQEAgc3RhdGljIHZvaWQgZW5ldGM0X21hY19jb25maWcoc3RydWN0IGVuZXRjX3BmICpwZiwgdW5zaWduZWQgaW50IG1vZGUsCiAJCXZhbCB8PSBJRk1PREVfU0dNSUk7CiAJCWJyZWFrOwogCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSOgotCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1hHTUlJOgogCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk6CiAJCXZhbCB8PSBJRk1PREVfWEdNSUk7CiAJCWJyZWFrOwpAQCAtNjQyLDI2ICYjNDM7NjM3LDE5IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9zZXRfcG9ydF9zcGVlZChzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2LCBpbnQgc3BlZWQpCiAJdTMyIG9sZF9zcGVlZCA9IHByaXYtJmd0O3NwZWVkOwogCXUzMiB2YWw7CiAKJiM0MzsJLyogSWYgdGhlIHNwZWVkIGlzIHVua25vd24sIHVzZSB0aGUgbWluaW11bSB2YWx1ZSAqLwomIzQzOwlpZiAoc3BlZWQgPT0gU1BFRURfVU5LTk9XTikgewomIzQzOwkJc3BlZWQgPSBTUEVFRF8xMDsKJiM0MzsJCWRldl93YXJuKHByaXYtJmd0O2RldiwgJiMzNDtTcGVlZCB1bmtub3duLCBkZWZhdWx0IGlzIDEwTWJwc1xuJiMzNDspOwomIzQzOwl9CiYjNDM7CiAJaWYgKHNwZWVkID09IG9sZF9zcGVlZCkKIAkJcmV0dXJuOwogCi0JdmFsID0gZW5ldGNfcG9ydF9yZCgmYW1wO3ByaXYtJmd0O3NpLSZndDtodywgRU5FVEM0X1BDUik7Ci0JdmFsICZhbXA7PSB+UENSX1BTUEVFRDsKLQotCXN3aXRjaCAoc3BlZWQpIHsKLQljYXNlIFNQRUVEXzEwMDoKLQljYXNlIFNQRUVEXzEwMDA6Ci0JY2FzZSBTUEVFRF8yNTAwOgotCWNhc2UgU1BFRURfMTAwMDA6Ci0JCXZhbCB8PSAoUENSX1BTUEVFRCAmYW1wOyBQQ1JfUFNQRUVEX1ZBTChzcGVlZCkpOwotCQlicmVhazsKLQljYXNlIFNQRUVEXzEwOgotCWRlZmF1bHQ6Ci0JCXZhbCB8PSAoUENSX1BTUEVFRCAmYW1wOyBQQ1JfUFNQRUVEX1ZBTChTUEVFRF8xMCkpOwotCX0KLQotCXByaXYtJmd0O3NwZWVkID0gc3BlZWQ7CiYjNDM7CXZhbCA9IGVuZXRjX3BvcnRfcmQoJmFtcDtwcml2LSZndDtzaS0mZ3Q7aHcsIEVORVRDNF9QQ1IpICZhbXA7ICh+UENSX1BTUEVFRCk7CiYjNDM7CXZhbCB8PSBQQ1JfUFNQRUVEX1ZBTChzcGVlZCk7CiAJZW5ldGNfcG9ydF93cigmYW1wO3ByaXYtJmd0O3NpLSZndDtodywgRU5FVEM0X1BDUiwgdmFsKTsKJiM0MzsJcHJpdi0mZ3Q7c3BlZWQgPSBzcGVlZDsKIH0KIAogc3RhdGljIHZvaWQgZW5ldGM0X3NldF9yZ21paV9tYWMoc3RydWN0IGVuZXRjX3BmICpwZiwgaW50IHNwZWVkLCBpbnQgZHVwbGV4KQpAQCAtNzE3LDIyICYjNDM7NzA1LDYgQEAgc3RhdGljIHZvaWQgZW5ldGM0X3NldF9ybWlpX21hYyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBpbnQgc3BlZWQsIGludCBkdXBsZXgpCiAJZW5ldGNfcG9ydF9tYWNfd3Ioc2ksIEVORVRDNF9QTV9JRl9NT0RFKDApLCB2YWwpOwogfQogCi1zdGF0aWMgdm9pZCBlbmV0YzRfc2V0X2hkX2Zsb3dfY29udHJvbChzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBib29sIGVuYWJsZSkKLXsKLQlzdHJ1Y3QgZW5ldGNfc2kgKnNpID0gcGYtJmd0O3NpOwotCXUzMiBvbGRfdmFsLCB2YWw7Ci0KLQlpZiAoIXBmLSZndDtjYXBzLmhhbGZfZHVwbGV4KQotCQlyZXR1cm47Ci0KLQlvbGRfdmFsID0gZW5ldGNfcG9ydF9tYWNfcmQoc2ksIEVORVRDNF9QTV9DTURfQ0ZHKDApKTsKLQl2YWwgPSB1MzJfcmVwbGFjZV9iaXRzKG9sZF92YWwsIGVuYWJsZSA/IDEgOiAwLCBQTV9DTURfQ0ZHX0hEX0ZDRU4pOwotCWlmICh2YWwgPT0gb2xkX3ZhbCkKLQkJcmV0dXJuOwotCi0JZW5ldGNfcG9ydF9tYWNfd3Ioc2ksIEVORVRDNF9QTV9DTURfQ0ZHKDApLCB2YWwpOwotfQotCiBzdGF0aWMgdm9pZCBlbmV0YzRfc2V0X3J4X3BhdXNlKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGJvb2wgcnhfcGF1c2UpCiB7CiAJc3RydWN0IGVuZXRjX3NpICpzaSA9IHBmLSZndDtzaTsKQEAgLTkwOCwxMyAmIzQzOzg4MCwxMSBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfcGxfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsCiAJc3RydWN0IGVuZXRjX3BmICpwZiA9IHBoeWxpbmtfdG9fZW5ldGNfcGYoY29uZmlnKTsKIAlzdHJ1Y3QgZW5ldGNfc2kgKnNpID0gcGYtJmd0O3NpOwogCXN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXY7Ci0JYm9vbCBoZF9mYyA9IGZhbHNlOwogCiAJcHJpdiA9IG5ldGRldl9wcml2KHNpLSZndDtuZGV2KTsKIAllbmV0YzRfc2V0X3BvcnRfc3BlZWQocHJpdiwgc3BlZWQpOwogCi0JaWYgKCFwaHlsaW5rX2F1dG9uZWdfaW5iYW5kKG1vZGUpICZhbXA7JmFtcDsKLQkgICAgcGh5X2ludGVyZmFjZV9tb2RlX2lzX3JnbWlpKGludGVyZmFjZSkpCiYjNDM7CWlmIChwaHlfaW50ZXJmYWNlX21vZGVfaXNfcmdtaWkoaW50ZXJmYWNlKSkKIAkJZW5ldGM0X3NldF9yZ21paV9tYWMocGYsIHNwZWVkLCBkdXBsZXgpOwogCiAJaWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSkKQEAgLTkyNiwxOCAmIzQzOzg5Niw4IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wbF9tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywKIAkJICovCiAJCWlmIChwcml2LSZndDthY3RpdmVfb2ZmbG9hZHMgJmFtcDsgRU5FVENfRl9RQlUpCiAJCQl0eF9wYXVzZSA9IGZhbHNlOwotCX0gZWxzZSB7IC8qIERVUExFWF9IQUxGICovCi0JCWlmICh0eF9wYXVzZSB8fCByeF9wYXVzZSkKLQkJCWhkX2ZjID0gdHJ1ZTsKLQotCQkvKiBBcyBwZXIgODAyLjMgYW5uZXggMzFCLCBQQVVTRSBmcmFtZXMgYXJlIG9ubHkgc3VwcG9ydGVkCi0JCSAqIHdoZW4gdGhlIGxpbmsgaXMgY29uZmlndXJlZCBmb3IgZnVsbCBkdXBsZXggb3BlcmF0aW9uLgotCQkgKi8KLQkJdHhfcGF1c2UgPSBmYWxzZTsKLQkJcnhfcGF1c2UgPSBmYWxzZTsKIAl9CiAKLQllbmV0YzRfc2V0X2hkX2Zsb3dfY29udHJvbChwZiwgaGRfZmMpOwogCWVuZXRjNF9zZXRfdHhfcGF1c2UocGYsIHByaXYtJmd0O251bV9yeF9yaW5ncywgdHhfcGF1c2UpOwogCWVuZXRjNF9zZXRfcnhfcGF1c2UocGYsIHJ4X3BhdXNlKTsKIAllbmV0YzRfbWFjX3R4X2VuYWJsZShwZik7CkBAIC0xMDA5LDE5ICYjNDM7OTY5LDYgQEAgc3RhdGljIHZvaWQgZW5ldGM0X2xpbmtfZGVpbml0KHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYpCiAJZW5ldGNfbWRpb2J1c19kZXN0cm95KHBmKTsKIH0KIAotc3RhdGljIGludCBlbmV0YzRfcHNpX3dxX3Rhc2tfaW5pdChzdHJ1Y3QgZW5ldGNfc2kgKnNpKQotewotCWNoYXIgd3FfbmFtZVsyNF07Ci0KLQlJTklUX1dPUksoJmFtcDtzaS0mZ3Q7cnhfbW9kZV90YXNrLCBlbmV0YzRfcHNpX2RvX3NldF9yeF9tb2RlKTsKLQlzbnByaW50Zih3cV9uYW1lLCBzaXplb2Yod3FfbmFtZSksICYjMzQ7ZW5ldGMtJXMmIzM0OywgcGNpX25hbWUoc2ktJmd0O3BkZXYpKTsKLQlzaS0mZ3Q7d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUod3FfbmFtZSk7Ci0JaWYgKCFzaS0mZ3Q7d29ya3F1ZXVlKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGVuZXRjNF9wZl9uZXRkZXZfY3JlYXRlKHN0cnVjdCBlbmV0Y19zaSAqc2kpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtzaS0mZ3Q7cGRldi0mZ3Q7ZGV2OwpAQCAtMTA2MiwxMiAmIzQzOzEwMDksNiBAQCBzdGF0aWMgaW50IGVuZXRjNF9wZl9uZXRkZXZfY3JlYXRlKHN0cnVjdCBlbmV0Y19zaSAqc2kpCiAJaWYgKGVycikKIAkJZ290byBlcnJfbGlua19pbml0OwogCi0JZXJyID0gZW5ldGM0X3BzaV93cV90YXNrX2luaXQoc2kpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIGluaXQgd29ya3F1ZXVlXG4mIzM0Oyk7Ci0JCWdvdG8gZXJyX3dxX2luaXQ7Ci0JfQotCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIG5ldGRldlxuJiMzNDspOwpAQCAtMTA3Nyw4ICYjNDM7MTAxOCw2IEBAIHN0YXRpYyBpbnQgZW5ldGM0X3BmX25ldGRldl9jcmVhdGUoc3RydWN0IGVuZXRjX3NpICpzaSkKIAlyZXR1cm4gMDsKIAogZXJyX3JlZ19uZXRkZXY6Ci0JZGVzdHJveV93b3JrcXVldWUoc2ktJmd0O3dvcmtxdWV1ZSk7Ci1lcnJfd3FfaW5pdDoKIAllbmV0YzRfbGlua19kZWluaXQocHJpdik7CiBlcnJfbGlua19pbml0OgogCWVuZXRjX2ZyZWVfbXNpeChwcml2KTsKQEAgLTEwOTYsOCAmIzQzOzEwMzUsNiBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfcGZfbmV0ZGV2X2Rlc3Ryb3koc3RydWN0IGVuZXRjX3NpICpzaSkKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHNpLSZndDtuZGV2OwogCiAJdW5yZWdpc3Rlcl9uZXRkZXYobmRldik7Ci0JY2FuY2VsX3dvcmsoJmFtcDtzaS0mZ3Q7cnhfbW9kZV90YXNrKTsKLQlkZXN0cm95X3dvcmtxdWV1ZShzaS0mZ3Q7d29ya3F1ZXVlKTsKIAllbmV0YzRfbGlua19kZWluaXQocHJpdik7CiAJZW5ldGNfZnJlZV9tc2l4KHByaXYpOwogCWZyZWVfbmV0ZGV2KG5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ldGh0b29sLmMKaW5kZXggNzFmMzc2ZWYxYmUxYzkuLjA3Yjc4MzJmMjQyNzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ldGh0b29sLmMKQEAgLTI5LDcgJiM0MzsyOSw3IEBAIHN0YXRpYyBjb25zdCB1MzIgZW5ldGNfcnhiZHJfcmVnc1tdID0gewogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBlbmV0Y19wb3J0X3JlZ3NbXSA9IHsKLQlFTkVUQ19QTVIsIEVORVRDX1BTUiwgRU5FVENfUFNJUE1SLCBFTkVUQ19QU0lQTUFSMCgwKSwKJiM0MzsJRU5FVENfUE1SLCBFTkVUQ19QU1IsIEVORVRDX1BTSVBNTVIsIEVORVRDX1BTSVBNQVIwKDApLAogCUVORVRDX1BTSVBNQVIxKDApLCBFTkVUQ19QVFhNQkFSLCBFTkVUQ19QQ0FQUjAsIEVORVRDX1BDQVBSMSwKIAlFTkVUQ19QU0lDRkdSMCgwKSwgRU5FVENfUFJGU0NBUFIsIEVORVRDX1BUQ01TRFVSKDApLAogCUVORVRDX1BNMF9DTURfQ0ZHLCBFTkVUQ19QTTBfTUFYRlJNLCBFTkVUQ19QTTBfSUZfTU9ERQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX2h3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfaHcuaAppbmRleCBiZjk5YjY1ZDc1OThhYi4uMTZkYTczMmRjNWRlODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ody5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ody5oCkBAIC0xODAsMTMgJiM0MzsxODAsMTMgQEAgZW51bSBlbmV0Y19iZHJfdHlwZSB7VFgsIFJYfTsKICNkZWZpbmUgRU5FVENfUE1SX1BTUEVFRF8xMDAwTQlCSVQoOSkKICNkZWZpbmUgRU5FVENfUE1SX1BTUEVFRF8yNTAwTQlCSVQoMTApCiAjZGVmaW5lIEVORVRDX1BTUgkJMHgwMDA0IC8qIFJPICovCi0jZGVmaW5lIEVORVRDX1BTSVBNUgkJMHgwMDE4Ci0jZGVmaW5lIEVORVRDX1BTSVBNUl9TRVRfVVAobikJQklUKG4pIC8qIG4gPSBTSSBpbmRleCAqLwotI2RlZmluZSBFTkVUQ19QU0lQTVJfU0VUX01QKG4pCUJJVCgobikgJiM0MzsgMTYpCiYjNDM7I2RlZmluZSBFTkVUQ19QU0lQTU1SCQkweDAwMTgKJiM0MzsjZGVmaW5lICBQU0lQTU1SX1NJX01BQ19VUChuKQlCSVQobikgLyogbiA9IFNJIGluZGV4ICovCiYjNDM7I2RlZmluZSAgUFNJUE1NUl9TSV9NQUNfTVAobikJQklUKChuKSAmIzQzOyAxNikKJiM0MzsKICNkZWZpbmUgRU5FVENfUFNJUFZNUgkJMHgwMDFjCi0jZGVmaW5lIEVORVRDX1ZMQU5fUFJPTUlTQ19NQVBfQUxMCTB4NwotI2RlZmluZSBFTkVUQ19QU0lQVk1SX1NFVF9WUChzaW1hcCkJKChzaW1hcCkgJmFtcDsgMHg3KQotI2RlZmluZSBFTkVUQ19QU0lQVk1SX1NFVF9WVVRBKHNpbWFwKQkoKChzaW1hcCkgJmFtcDsgMHg3KSAmbHQ7Jmx0OyAxNikKJiM0MzsjZGVmaW5lICBQU0lQVk1SX1NJX1ZMQU5fUChuKQlCSVQobikgLyogbiA9IFNJIGluZGV4ICovCiYjNDM7CiAjZGVmaW5lIEVORVRDX1BTSVBNQVIwKG4pCSgweDAxMDAgJiM0MzsgKG4pICogMHg4KSAvKiBuID0gU0kgaW5kZXggKi8KICNkZWZpbmUgRU5FVENfUFNJUE1BUjEobikJKDB4MDEwNCAmIzQzOyAobikgKiAweDgpCiAjZGVmaW5lIEVORVRDX1BWQ0xDVFIJCTB4MDIwOApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuYwppbmRleCAyZDY4N2JiOGMzYTA2My4uYTUwOTkyOWY4OWYyNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jCkBAIC00MiwyNiAmIzQzOzQyLDYgQEAgc3RhdGljIHZvaWQgZW5ldGNfcGZfZGVzdHJveV9wY3Moc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpCiAJbHlueF9wY3NfZGVzdHJveShwY3MpOwogfQogCi1zdGF0aWMgdm9pZCBlbmV0Y19zZXRfdmxhbl9wcm9taXNjKHN0cnVjdCBlbmV0Y19odyAqaHcsIGNoYXIgc2lfbWFwKQotewotCXUzMiB2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBFTkVUQ19QU0lQVk1SKTsKLQotCXZhbCAmYW1wOz0gfkVORVRDX1BTSVBWTVJfU0VUX1ZQKEVORVRDX1ZMQU5fUFJPTUlTQ19NQVBfQUxMKTsKLQllbmV0Y19wb3J0X3dyKGh3LCBFTkVUQ19QU0lQVk1SLCBFTkVUQ19QU0lQVk1SX1NFVF9WUChzaV9tYXApIHwgdmFsKTsKLX0KLQotc3RhdGljIHZvaWQgZW5ldGNfZW5hYmxlX3NpX3ZsYW5fcHJvbWlzYyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBpbnQgc2lfaWR4KQotewotCXBmLSZndDt2bGFuX3Byb21pc2Nfc2ltYXAgfD0gQklUKHNpX2lkeCk7Ci0JZW5ldGNfc2V0X3ZsYW5fcHJvbWlzYygmYW1wO3BmLSZndDtzaS0mZ3Q7aHcsIHBmLSZndDt2bGFuX3Byb21pc2Nfc2ltYXApOwotfQotCi1zdGF0aWMgdm9pZCBlbmV0Y19kaXNhYmxlX3NpX3ZsYW5fcHJvbWlzYyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBpbnQgc2lfaWR4KQotewotCXBmLSZndDt2bGFuX3Byb21pc2Nfc2ltYXAgJmFtcDs9IH5CSVQoc2lfaWR4KTsKLQllbmV0Y19zZXRfdmxhbl9wcm9taXNjKCZhbXA7cGYtJmd0O3NpLSZndDtodywgcGYtJmd0O3ZsYW5fcHJvbWlzY19zaW1hcCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGVuZXRjX3NldF9pc29sX3ZsYW4oc3RydWN0IGVuZXRjX2h3ICpodywgaW50IHNpLCB1MTYgdmxhbiwgdTggcW9zKQogewogCXUzMiB2YWwgPSAwOwpAQCAtODAsMzcgJiM0Mzs2MCw2IEBAIHN0YXRpYyB2b2lkIGVuZXRjX2FkZF9tYWNfYWRkcl9lbV9maWx0ZXIoc3RydWN0IGVuZXRjX21hY19maWx0ZXIgKmZpbHRlciwKIAlmaWx0ZXItJmd0O21hY19hZGRyX2NudCYjNDM7JiM0Mzs7CiB9CiAKLXN0YXRpYyB2b2lkIGVuZXRjX2NsZWFyX21hY19odF9mbHQoc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkeCwgaW50IHR5cGUpCi17Ci0JYm9vbCBlcnIgPSBzaS0mZ3Q7ZXJyYXRhICZhbXA7IEVORVRDX0VSUl9VQ01DU1dQOwotCi0JaWYgKHR5cGUgPT0gVUMpIHsKLQkJZW5ldGNfcG9ydF93cigmYW1wO3NpLSZndDtodywgRU5FVENfUFNJVU1IRlIwKHNpX2lkeCwgZXJyKSwgMCk7Ci0JCWVuZXRjX3BvcnRfd3IoJmFtcDtzaS0mZ3Q7aHcsIEVORVRDX1BTSVVNSEZSMShzaV9pZHgpLCAwKTsKLQl9IGVsc2UgeyAvKiBNQyAqLwotCQllbmV0Y19wb3J0X3dyKCZhbXA7c2ktJmd0O2h3LCBFTkVUQ19QU0lNTUhGUjAoc2lfaWR4LCBlcnIpLCAwKTsKLQkJZW5ldGNfcG9ydF93cigmYW1wO3NpLSZndDtodywgRU5FVENfUFNJTU1IRlIxKHNpX2lkeCksIDApOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZW5ldGNfc2V0X21hY19odF9mbHQoc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkeCwgaW50IHR5cGUsCi0JCQkJIHVuc2lnbmVkIGxvbmcgaGFzaCkKLXsKLQlib29sIGVyciA9IHNpLSZndDtlcnJhdGEgJmFtcDsgRU5FVENfRVJSX1VDTUNTV1A7Ci0KLQlpZiAodHlwZSA9PSBVQykgewotCQllbmV0Y19wb3J0X3dyKCZhbXA7c2ktJmd0O2h3LCBFTkVUQ19QU0lVTUhGUjAoc2lfaWR4LCBlcnIpLAotCQkJICAgICAgbG93ZXJfMzJfYml0cyhoYXNoKSk7Ci0JCWVuZXRjX3BvcnRfd3IoJmFtcDtzaS0mZ3Q7aHcsIEVORVRDX1BTSVVNSEZSMShzaV9pZHgpLAotCQkJICAgICAgdXBwZXJfMzJfYml0cyhoYXNoKSk7Ci0JfSBlbHNlIHsgLyogTUMgKi8KLQkJZW5ldGNfcG9ydF93cigmYW1wO3NpLSZndDtodywgRU5FVENfUFNJTU1IRlIwKHNpX2lkeCwgZXJyKSwKLQkJCSAgICAgIGxvd2VyXzMyX2JpdHMoaGFzaCkpOwotCQllbmV0Y19wb3J0X3dyKCZhbXA7c2ktJmd0O2h3LCBFTkVUQ19QU0lNTUhGUjEoc2lfaWR4KSwKLQkJCSAgICAgIHVwcGVyXzMyX2JpdHMoaGFzaCkpOwotCX0KLX0KLQogc3RhdGljIHZvaWQgZW5ldGNfc3luY19tYWNfZmlsdGVycyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKQogewogCXN0cnVjdCBlbmV0Y19tYWNfZmlsdGVyICpmID0gcGYtJmd0O21hY19maWx0ZXI7CkBAIC0xMjIsMTIgJiM0Mzs3MSwxNiBAQCBzdGF0aWMgdm9pZCBlbmV0Y19zeW5jX21hY19maWx0ZXJzKHN0cnVjdCBlbmV0Y19wZiAqcGYpCiAJZm9yIChpID0gMDsgaSAmbHQ7IE1BRERSX1RZUEU7IGkmIzQzOyYjNDM7LCBmJiM0MzsmIzQzOykgewogCQlib29sIGVtID0gKGYtJmd0O21hY19hZGRyX2NudCA9PSAxKSAmYW1wOyZhbXA7IChpID09IFVDKTsKIAkJYm9vbCBjbGVhciA9ICFmLSZndDttYWNfYWRkcl9jbnQ7CiYjNDM7CQl1NjQgaGFzaDsKIAogCQlpZiAoY2xlYXIpIHsKLQkJCWlmIChpID09IFVDKQomIzQzOwkJCWlmIChpID09IFVDKSB7CiAJCQkJZW5ldGNfY2xlYXJfbWFjX2ZsdF9lbnRyeShzaSwgcG9zKTsKJiM0MzsJCQkJZW5ldGNfc2V0X3NpX3VjX2hhc2hfZmlsdGVyKHNpLCAwLCAwKTsKJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQllbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXIoc2ksIDAsIDApOwomIzQzOwkJCX0KIAotCQkJZW5ldGNfY2xlYXJfbWFjX2h0X2ZsdChzaSwgMCwgaSk7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0xMzUsNyAmIzQzOzg4LDcgQEAgc3RhdGljIHZvaWQgZW5ldGNfc3luY19tYWNfZmlsdGVycyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKQogCQlpZiAoZW0pIHsKIAkJCWludCBlcnI7CiAKLQkJCWVuZXRjX2NsZWFyX21hY19odF9mbHQoc2ksIDAsIFVDKTsKJiM0MzsJCQllbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc2ksIDAsIDApOwogCiAJCQllcnIgPSBlbmV0Y19zZXRfbWFjX2ZsdF9lbnRyeShzaSwgcG9zLCBmLSZndDttYWNfYWRkciwKIAkJCQkJCSAgICAgIEJJVCgwKSk7CkBAIC0xNDcsMTEgJiM0MzsxMDAsMTUgQEAgc3RhdGljIHZvaWQgZW5ldGNfc3luY19tYWNfZmlsdGVycyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKQogCQkJCSBlcnIpOwogCQl9CiAKJiM0MzsJCWJpdG1hcF90b19hcnI2NCgmYW1wO2hhc2gsIGYtJmd0O21hY19oYXNoX3RhYmxlLAomIzQzOwkJCQlFTkVUQ19NQUREUl9IQVNIX1RCTF9TWik7CiAJCS8qIGhhc2ggdGFibGUgZmlsdGVyLCBjbGVhciBFTSBmaWx0ZXIgZm9yIFVDIGVudHJpZXMgKi8KLQkJaWYgKGkgPT0gVUMpCiYjNDM7CQlpZiAoaSA9PSBVQykgewogCQkJZW5ldGNfY2xlYXJfbWFjX2ZsdF9lbnRyeShzaSwgcG9zKTsKLQotCQllbmV0Y19zZXRfbWFjX2h0X2ZsdChzaSwgMCwgaSwgKmYtJmd0O21hY19oYXNoX3RhYmxlKTsKJiM0MzsJCQllbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc2ksIDAsIGhhc2gpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQllbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXIoc2ksIDAsIGhhc2gpOwomIzQzOwkJfQogCX0KIH0KIApAQCAtMTU5LDIxICYjNDM7MTE2LDE3IEBAIHN0YXRpYyB2b2lkIGVuZXRjX3BmX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAlzdHJ1Y3QgZW5ldGNfcGYgKnBmID0gZW5ldGNfc2lfcHJpdihwcml2LSZndDtzaSk7Ci0Jc3RydWN0IGVuZXRjX2h3ICpodyA9ICZhbXA7cHJpdi0mZ3Q7c2ktJmd0O2h3OwogCWJvb2wgdXByb20gPSBmYWxzZSwgbXByb20gPSBmYWxzZTsKIAlzdHJ1Y3QgZW5ldGNfbWFjX2ZpbHRlciAqZmlsdGVyOwogCXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7Ci0JdTMyIHBzaXBtciA9IDA7CiAJYm9vbCBlbTsKIAogCWlmIChuZGV2LSZndDtmbGFncyAmYW1wOyBJRkZfUFJPTUlTQykgewogCQkvKiBlbmFibGUgcHJvbWlzYyBtb2RlIGZvciBTSTAgKFBGKSAqLwotCQlwc2lwbXIgPSBFTkVUQ19QU0lQTVJfU0VUX1VQKDApIHwgRU5FVENfUFNJUE1SX1NFVF9NUCgwKTsKIAkJdXByb20gPSB0cnVlOwogCQltcHJvbSA9IHRydWU7CiAJfSBlbHNlIGlmIChuZGV2LSZndDtmbGFncyAmYW1wOyBJRkZfQUxMTVVMVEkpIHsKIAkJLyogZW5hYmxlIG11bHRpIGNhc3QgcHJvbWlzYyBtb2RlIGZvciBTSTAgKFBGKSAqLwotCQlwc2lwbXIgPSBFTkVUQ19QU0lQTVJfU0VUX01QKDApOwogCQltcHJvbSA9IHRydWU7CiAJfQogCkBAIC0yMTEsOSAmIzQzOzE2NCw4IEBAIHN0YXRpYyB2b2lkIGVuZXRjX3BmX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCQkvKiB1cGRhdGUgUEYgZW50cmllcyAqLwogCQllbmV0Y19zeW5jX21hY19maWx0ZXJzKHBmKTsKIAotCXBzaXBtciB8PSBlbmV0Y19wb3J0X3JkKGh3LCBFTkVUQ19QU0lQTVIpICZhbXA7Ci0JCSAgfihFTkVUQ19QU0lQTVJfU0VUX1VQKDApIHwgRU5FVENfUFNJUE1SX1NFVF9NUCgwKSk7Ci0JZW5ldGNfcG9ydF93cihodywgRU5FVENfUFNJUE1SLCBwc2lwbXIpOwomIzQzOwllbmV0Y19zZXRfc2lfdWNfcHJvbWlzYyhwcml2LSZndDtzaSwgMCwgdXByb20pOwomIzQzOwllbmV0Y19zZXRfc2lfbWNfcHJvbWlzYyhwcml2LSZndDtzaSwgMCwgbXByb20pOwogfQogCiBzdGF0aWMgdm9pZCBlbmV0Y19zZXRfbG9vcGJhY2soc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgZW4pCkBAIC00NjksMTIgJiM0Mzs0MjEsMTEgQEAgc3RhdGljIHZvaWQgZW5ldGNfY29uZmlndXJlX3BvcnQoc3RydWN0IGVuZXRjX3BmICpwZikKIAogCS8qIHNwbGl0IHVwIFJGUyBlbnRyaWVzICovCiAJZW5ldGNfcG9ydF9hc3NpZ25fcmZzX2VudHJpZXMocGYtJmd0O3NpKTsKLQogCS8qIGVuZm9yY2UgVkxBTiBwcm9taXNjIG1vZGUgZm9yIGFsbCBTSXMgKi8KLQlwZi0mZ3Q7dmxhbl9wcm9taXNjX3NpbWFwID0gRU5FVENfVkxBTl9QUk9NSVNDX01BUF9BTEw7Ci0JZW5ldGNfc2V0X3ZsYW5fcHJvbWlzYyhodywgcGYtJmd0O3ZsYW5fcHJvbWlzY19zaW1hcCk7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgcGYtJmd0O3RvdGFsX3ZmcyAmIzQzOyAxOyBpJiM0MzsmIzQzOykKJiM0MzsJCWVuZXRjX3NldF9zaV92bGFuX3Byb21pc2MocGYtJmd0O3NpLCBpLCB0cnVlKTsKIAotCWVuZXRjX3BvcnRfd3IoaHcsIEVORVRDX1BTSVBNUiwgMCk7CiYjNDM7CWVuZXRjX3BvcnRfd3IoaHcsIEVORVRDX1BTSVBNTVIsIDApOwogCiAJLyogZW5hYmxlIHBvcnQgKi8KIAllbmV0Y19wb3J0X3dyKGh3LCBFTkVUQ19QTVIsIEVORVRDX1BNUl9FTik7CkBAIC00OTQsMTIgJiM0Mzs0NDUsOSBAQCBzdGF0aWMgaW50IGVuZXRjX3BmX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAl9CiAKIAlpZiAoY2hhbmdlZCAmYW1wOyBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpIHsKLQkJc3RydWN0IGVuZXRjX3BmICpwZiA9IGVuZXRjX3NpX3ByaXYocHJpdi0mZ3Q7c2kpOwomIzQzOwkJYm9vbCBwcm9taXNjID0gIShmZWF0dXJlcyAmYW1wOyBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpOwogCi0JCWlmICghIShmZWF0dXJlcyAmYW1wOyBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpKQotCQkJZW5ldGNfZGlzYWJsZV9zaV92bGFuX3Byb21pc2MocGYsIDApOwotCQllbHNlCi0JCQllbmV0Y19lbmFibGVfc2lfdmxhbl9wcm9taXNjKHBmLCAwKTsKJiM0MzsJCWVuZXRjX3NldF9zaV92bGFuX3Byb21pc2MocHJpdi0mZ3Q7c2ksIDAsIHByb21pc2MpOwogCX0KIAogCWlmIChjaGFuZ2VkICZhbXA7IE5FVElGX0ZfTE9PUEJBQ0spCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5oCmluZGV4IDI4NWI3ZTVjNDhmZGM3Li41NmQyM2E4YTExYTA2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmgKQEAgLTE3LDEyICYjNDM7MTcsOSBAQCBzdHJ1Y3QgZW5ldGNfdmZfc3RhdGUgewogfTsKIAogc3RydWN0IGVuZXRjX3BvcnRfY2FwcyB7Ci0JdTMyIGhhbGZfZHVwbGV4OjE7Ci0JaW50IG51bV92c2k7CiAJaW50IG51bV9tc2l4OwogCWludCBudW1fcnhfYmRyOwogCWludCBudW1fdHhfYmRyOwotCWludCBtYWNfZmlsdGVyX251bTsKIH07CiAKIHN0cnVjdCBlbmV0Y19wZjsKQEAgLTQ3LDcgJiM0Mzs0NCw2IEBAIHN0cnVjdCBlbmV0Y19wZiB7CiAJc3RydWN0IHdvcmtfc3RydWN0IG1zZ190YXNrOwogCWNoYXIgbXNnX2ludF9uYW1lW0VORVRDX0lOVF9OQU1FX01BWF07CiAKLQljaGFyIHZsYW5fcHJvbWlzY19zaW1hcDsgLyogYml0bWFwIG9mIFNJcyBpbiBWTEFOIHByb21pc2MgbW9kZSAqLwogCURFQ0xBUkVfQklUTUFQKHZsYW5faHRfZmlsdGVyLCBFTkVUQ19WTEFOX0hUX1NJWkUpOwogCURFQ0xBUkVfQklUTUFQKGFjdGl2ZV92bGFucywgVkxBTl9OX1ZJRCk7CiAKQEAgLTYwLDggJiM0Mzs1Niw2IEBAIHN0cnVjdCBlbmV0Y19wZiB7CiAKIAlzdHJ1Y3QgZW5ldGNfcG9ydF9jYXBzIGNhcHM7CiAJY29uc3Qgc3RydWN0IGVuZXRjX3BmX29wcyAqb3BzOwotCi0JaW50IG51bV9tZmU7CS8qIG51bWJlciBvZiBtYWMgYWRkcmVzcyBmaWx0ZXIgdGFibGUgZW50cmllcyAqLwogfTsKIAogI2RlZmluZSBwaHlsaW5rX3RvX2VuZXRjX3BmKGNvbmZpZykgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jCmluZGV4IDZlNWQyZjg2OTkxNTBiLi5kMzJhMTk1YTA0Yzk3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYwpAQCAtMSw1ICYjNDM7MSw1IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAmIzQzOyBPUiBCU0QtMy1DbGF1c2UpCi0vKiBDb3B5cmlnaHQgMjAyNCBOWFAgKi8KJiM0MzsvKiBDb3B5cmlnaHQgMjAyNC0yMDI2IE5YUCAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgvZnNsL2VuZXRjX21kaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9vZl9tZGlvLmgmZ3Q7CkBAIC04Nyw2ICYjNDM7ODcsMTEyIEBAIGludCBlbmV0Y19zZXR1cF9tYWNfYWRkcmVzc2VzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBlbmV0Y19wZiAqcGYpCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChlbmV0Y19zZXR1cF9tYWNfYWRkcmVzc2VzKTsKIAomIzQzO3ZvaWQgZW5ldGNfc2V0X3NpX3VjX3Byb21pc2Moc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCBib29sIHByb21pc2MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gJmFtcDtzaS0mZ3Q7aHc7CiYjNDM7CWludCBwc2lwbW1yX29mZjsKJiM0MzsJdTMyIHZhbDsKJiM0MzsKJiM0MzsJaWYgKGlzX2VuZXRjX3JldjEoc2kpKQomIzQzOwkJcHNpcG1tcl9vZmYgPSBFTkVUQ19QU0lQTU1SOwomIzQzOwllbHNlCiYjNDM7CQlwc2lwbW1yX29mZiA9IEVORVRDNF9QU0lQTU1SOwomIzQzOwomIzQzOwl2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBwc2lwbW1yX29mZik7CiYjNDM7CiYjNDM7CWlmIChwcm9taXNjKQomIzQzOwkJdmFsIHw9IFBTSVBNTVJfU0lfTUFDX1VQKHNpX2lkKTsKJiM0MzsJZWxzZQomIzQzOwkJdmFsICZhbXA7PSB+UFNJUE1NUl9TSV9NQUNfVVAoc2lfaWQpOwomIzQzOwomIzQzOwllbmV0Y19wb3J0X3dyKGh3LCBwc2lwbW1yX29mZiwgdmFsKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfc2V0X3NpX3VjX3Byb21pc2MpOwomIzQzOwomIzQzO3ZvaWQgZW5ldGNfc2V0X3NpX21jX3Byb21pc2Moc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCBib29sIHByb21pc2MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gJmFtcDtzaS0mZ3Q7aHc7CiYjNDM7CWludCBwc2lwbW1yX29mZjsKJiM0MzsJdTMyIHZhbDsKJiM0MzsKJiM0MzsJaWYgKGlzX2VuZXRjX3JldjEoc2kpKQomIzQzOwkJcHNpcG1tcl9vZmYgPSBFTkVUQ19QU0lQTU1SOwomIzQzOwllbHNlCiYjNDM7CQlwc2lwbW1yX29mZiA9IEVORVRDNF9QU0lQTU1SOwomIzQzOwomIzQzOwl2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBwc2lwbW1yX29mZik7CiYjNDM7CiYjNDM7CWlmIChwcm9taXNjKQomIzQzOwkJdmFsIHw9IFBTSVBNTVJfU0lfTUFDX01QKHNpX2lkKTsKJiM0MzsJZWxzZQomIzQzOwkJdmFsICZhbXA7PSB+UFNJUE1NUl9TSV9NQUNfTVAoc2lfaWQpOwomIzQzOwomIzQzOwllbmV0Y19wb3J0X3dyKGh3LCBwc2lwbW1yX29mZiwgdmFsKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfc2V0X3NpX21jX3Byb21pc2MpOwomIzQzOwomIzQzO3ZvaWQgZW5ldGNfc2V0X3NpX3VjX2hhc2hfZmlsdGVyKHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZCwgdTY0IGhhc2gpCiYjNDM7ewomIzQzOwlpbnQgcHNpdW1oZnIwX29mZiwgcHNpdW1oZnIxX29mZjsKJiM0MzsJc3RydWN0IGVuZXRjX2h3ICpodyA9ICZhbXA7c2ktJmd0O2h3OwomIzQzOwomIzQzOwlpZiAoaXNfZW5ldGNfcmV2MShzaSkpIHsKJiM0MzsJCWJvb2wgZXJyID0gc2ktJmd0O2VycmF0YSAmYW1wOyBFTkVUQ19FUlJfVUNNQ1NXUDsKJiM0MzsKJiM0MzsJCXBzaXVtaGZyMF9vZmYgPSBFTkVUQ19QU0lVTUhGUjAoc2lfaWQsIGVycik7CiYjNDM7CQlwc2l1bWhmcjFfb2ZmID0gRU5FVENfUFNJVU1IRlIxKHNpX2lkKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXBzaXVtaGZyMF9vZmYgPSBFTkVUQzRfUFNJVU1IRlIwKHNpX2lkKTsKJiM0MzsJCXBzaXVtaGZyMV9vZmYgPSBFTkVUQzRfUFNJVU1IRlIxKHNpX2lkKTsKJiM0MzsJfQomIzQzOwomIzQzOwllbmV0Y19wb3J0X3dyKGh3LCBwc2l1bWhmcjBfb2ZmLCBsb3dlcl8zMl9iaXRzKGhhc2gpKTsKJiM0MzsJZW5ldGNfcG9ydF93cihodywgcHNpdW1oZnIxX29mZiwgdXBwZXJfMzJfYml0cyhoYXNoKSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcik7CiYjNDM7CiYjNDM7dm9pZCBlbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCB1NjQgaGFzaCkKJiM0Mzt7CiYjNDM7CWludCBwc2ltbWhmcjBfb2ZmLCBwc2ltbWhmcjFfb2ZmOwomIzQzOwlzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gJmFtcDtzaS0mZ3Q7aHc7CiYjNDM7CiYjNDM7CWlmIChpc19lbmV0Y19yZXYxKHNpKSkgewomIzQzOwkJYm9vbCBlcnIgPSBzaS0mZ3Q7ZXJyYXRhICZhbXA7IEVORVRDX0VSUl9VQ01DU1dQOwomIzQzOwomIzQzOwkJcHNpbW1oZnIwX29mZiA9IEVORVRDX1BTSU1NSEZSMChzaV9pZCwgZXJyKTsKJiM0MzsJCXBzaW1taGZyMV9vZmYgPSBFTkVUQ19QU0lNTUhGUjEoc2lfaWQpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcHNpbW1oZnIwX29mZiA9IEVORVRDNF9QU0lNTUhGUjAoc2lfaWQpOwomIzQzOwkJcHNpbW1oZnIxX29mZiA9IEVORVRDNF9QU0lNTUhGUjEoc2lfaWQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVuZXRjX3BvcnRfd3IoaHcsIHBzaW1taGZyMF9vZmYsIGxvd2VyXzMyX2JpdHMoaGFzaCkpOwomIzQzOwllbmV0Y19wb3J0X3dyKGh3LCBwc2ltbWhmcjFfb2ZmLCB1cHBlcl8zMl9iaXRzKGhhc2gpKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfc2V0X3NpX21jX2hhc2hfZmlsdGVyKTsKJiM0MzsKJiM0Mzt2b2lkIGVuZXRjX3NldF9zaV92bGFuX3Byb21pc2Moc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCBib29sIHByb21pc2MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gJmFtcDtzaS0mZ3Q7aHc7CiYjNDM7CWludCBwc2lwdm1yX29mZjsKJiM0MzsJdTMyIHZhbDsKJiM0MzsKJiM0MzsJaWYgKGlzX2VuZXRjX3JldjEoc2kpKQomIzQzOwkJcHNpcHZtcl9vZmYgPSBFTkVUQ19QU0lQVk1SOwomIzQzOwllbHNlCiYjNDM7CQlwc2lwdm1yX29mZiA9IEVORVRDNF9QU0lQVk1SOwomIzQzOwomIzQzOwl2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBwc2lwdm1yX29mZik7CiYjNDM7CiYjNDM7CWlmIChwcm9taXNjKQomIzQzOwkJdmFsIHw9IFBTSVBWTVJfU0lfVkxBTl9QKHNpX2lkKTsKJiM0MzsJZWxzZQomIzQzOwkJdmFsICZhbXA7PSB+UFNJUFZNUl9TSV9WTEFOX1Aoc2lfaWQpOwomIzQzOwomIzQzOwllbmV0Y19wb3J0X3dyKGh3LCBwc2lwdm1yX29mZiwgdmFsKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzYyk7CiYjNDM7CiB2b2lkIGVuZXRjX3BmX25ldGRldl9zZXR1cChzdHJ1Y3QgZW5ldGNfc2kgKnNpLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKIAkJCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqbmRldl9vcHMpCiB7CkBAIC0yNzUsNyAmIzQzOzM4MSw4IEBAIHN0YXRpYyBib29sIGVuZXRjX3BvcnRfaGFzX3BjcyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKQogCXJldHVybiAocGYtJmd0O2lmX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJIHx8CiAJCXBmLSZndDtpZl9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggfHwKIAkJcGYtJmd0O2lmX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWCB8fAotCQlwZi0mZ3Q7aWZfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSk7CiYjNDM7CQlwZi0mZ3Q7aWZfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSB8fAomIzQzOwkJcGYtJmd0O2lmX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSKTsKIH0KIAogaW50IGVuZXRjX21kaW9idXNfY3JlYXRlKHN0cnVjdCBlbmV0Y19wZiAqcGYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKQEAgLTMxNiwyNSAmIzQzOzQyMyw0MiBAQCBpbnQgZW5ldGNfcGh5bGlua19jcmVhdGUoc3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICpub2RlLAogewogCXN0cnVjdCBlbmV0Y19wZiAqcGYgPSBlbmV0Y19zaV9wcml2KHByaXYtJmd0O3NpKTsKIAlzdHJ1Y3QgcGh5bGluayAqcGh5bGluazsKJiM0MzsJdW5zaWduZWQgbG9uZyBtYWNfY2FwczsKIAlpbnQgZXJyOwogCiAJcGYtJmd0O3BoeWxpbmtfY29uZmlnLmRldiA9ICZhbXA7cHJpdi0mZ3Q7bmRldi0mZ3Q7ZGV2OwogCXBmLSZndDtwaHlsaW5rX2NvbmZpZy50eXBlID0gUEhZTElOS19ORVRERVY7Ci0JcGYtJmd0O3BoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgPSBNQUNfQVNZTV9QQVVTRSB8IE1BQ19TWU1fUEFVU0UgfAotCQlNQUNfMTAgfCBNQUNfMTAwIHwgTUFDXzEwMDAgfCBNQUNfMjUwMEZEOwogCiAJX19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCwKIAkJICBwZi0mZ3Q7cGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpOwotCV9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfU0dNSUksCi0JCSAgcGYtJmd0O3BoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTsKLQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCwKLQkJICBwZi0mZ3Q7cGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpOwotCV9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMjUwMEJBU0VYLAotCQkgIHBmLSZndDtwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7Ci0JX19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJLAotCQkgIHBmLSZndDtwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7Ci0JcGh5X2ludGVyZmFjZV9zZXRfcmdtaWkocGYtJmd0O3BoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTsKIAomIzQzOwltYWNfY2FwcyA9IE1BQ19BU1lNX1BBVVNFIHwgTUFDX1NZTV9QQVVTRTsKJiM0MzsJaWYgKCFlbmV0Y19pc19wc2V1ZG9fbWFjKHByaXYtJmd0O3NpKSkgewomIzQzOwkJbWFjX2NhcHMgfD0gTUFDXzEwIHwgTUFDXzEwMCB8IE1BQ18xMDAwRkQgfCBNQUNfMjUwMEZEOwomIzQzOwomIzQzOwkJX19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSwKJiM0MzsJCQkgIHBmLSZndDtwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7CiYjNDM7CQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCwKJiM0MzsJCQkgIHBmLSZndDtwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7CiYjNDM7CQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWCwKJiM0MzsJCQkgIHBmLSZndDtwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7CiYjNDM7CQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUksCiYjNDM7CQkJICBwZi0mZ3Q7cGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpOwomIzQzOwomIzQzOwkJaWYgKCFpc19lbmV0Y19yZXYxKHByaXYtJmd0O3NpKSkgewomIzQzOwkJCW1hY19jYXBzIHw9IE1BQ181MDAwRkQgfCBNQUNfMTAwMDBGRDsKJiM0MzsJCQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSLAomIzQzOwkJCQkgIHBmLSZndDtwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlwaHlfaW50ZXJmYWNlX3NldF9yZ21paShwZi0mZ3Q7cGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJbWFjX2NhcHMgfD0gTUFDXzEwRkQgfCBNQUNfMTAwRkQgfCBNQUNfMTAwMEZEIHwgTUFDXzI1MDBGRCB8CiYjNDM7CQkJICAgIE1BQ181MDAwRkQgfCBNQUNfMTAwMDBGRCB8IE1BQ18yMDAwMEZEIHwKJiM0MzsJCQkgICAgTUFDXzI1MDAwRkQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGYtJmd0O3BoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgPSBtYWNfY2FwczsKIAlwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoJmFtcDtwZi0mZ3Q7cGh5bGlua19jb25maWcsIG9mX2Z3bm9kZV9oYW5kbGUobm9kZSksCiAJCQkJIHBmLSZndDtpZl9tb2RlLCBvcHMpOwogCWlmIChJU19FUlIocGh5bGluaykpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uaAppbmRleCA1N2QyZTBlYmQyYjBiYi4uODI0M2NlMGRlNTdmNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmgKQEAgLTE3LDYgJiM0MzsxNywxMSBAQCB2b2lkIGVuZXRjX3NldF9kZWZhdWx0X3Jzc19rZXkoc3RydWN0IGVuZXRjX3BmICpwZik7CiBpbnQgZW5ldGNfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBfX2JlMTYgcHJvdCwgdTE2IHZpZCk7CiBpbnQgZW5ldGNfdmxhbl9yeF9kZWxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBfX2JlMTYgcHJvdCwgdTE2IHZpZCk7CiBpbnQgZW5ldGNfaW5pdF9zcmlvdl9yZXNvdXJjZXMoc3RydWN0IGVuZXRjX3BmICpwZik7CiYjNDM7dm9pZCBlbmV0Y19zZXRfc2lfdWNfcHJvbWlzYyhzdHJ1Y3QgZW5ldGNfc2kgKnNpLCBpbnQgc2lfaWQsIGJvb2wgcHJvbWlzYyk7CiYjNDM7dm9pZCBlbmV0Y19zZXRfc2lfbWNfcHJvbWlzYyhzdHJ1Y3QgZW5ldGNfc2kgKnNpLCBpbnQgc2lfaWQsIGJvb2wgcHJvbWlzYyk7CiYjNDM7dm9pZCBlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCB1NjQgaGFzaCk7CiYjNDM7dm9pZCBlbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCB1NjQgaGFzaCk7CiYjNDM7dm9pZCBlbmV0Y19zZXRfc2lfdmxhbl9wcm9taXNjKHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZCwgYm9vbCBwcm9taXNjKTsKIAogc3RhdGljIGlubGluZSB1MTYgZW5ldGNfZ2V0X2lwX3JldmlzaW9uKHN0cnVjdCBlbmV0Y19odyAqaHcpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcW9zLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcW9zLmMKaW5kZXggN2IxN2JjYTI0ZjI2MGYuLjJhYTBmY2FhZmNkMjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcW9zLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3Fvcy5jCkBAIC0xMTM1LDcgJiM0MzsxMTM1LDYgQEAgc3RhdGljIGludCBlbmV0Y19wc2ZwX3BhcnNlX2Nsc2Zsb3dlcihzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2LAogCXN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnk7CiAJc3RydWN0IGFjdGlvbl9nYXRlX2VudHJ5ICplOwogCXU4IHNmaV9vdmVyd3JpdGUgPSAwOwotCWludCBlbnRyaWVzX3NpemU7CiAJaW50IGksIGVycjsKIAogCWlmIChmLSZndDtjb21tb24uY2hhaW5faW5kZXggJmd0Oz0gcHJpdi0mZ3Q7cHNmcF9jYXAubWF4X3N0cmVhbWlkKSB7CkBAIC0xMjQyLDggJiM0MzsxMjQxLDcgQEAgc3RhdGljIGludCBlbmV0Y19wc2ZwX3BhcnNlX2Nsc2Zsb3dlcihzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2LAogCQlnb3RvIGZyZWVfZmlsdGVyOwogCX0KIAotCWVudHJpZXNfc2l6ZSA9IHN0cnVjdF9zaXplKHNnaSwgZW50cmllcywgZW50cnlnLSZndDtnYXRlLm51bV9lbnRyaWVzKTsKLQlzZ2kgPSBremFsbG9jKGVudHJpZXNfc2l6ZSwgR0ZQX0tFUk5FTCk7CiYjNDM7CXNnaSA9IGt6YWxsb2NfZmxleCgqc2dpLCBlbnRyaWVzLCBlbnRyeWctJmd0O2dhdGUubnVtX2VudHJpZXMpOwogCWlmICghc2dpKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZnJlZV9maWx0ZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfdmYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y192Zi5jCmluZGV4IDljZGIwYTRkNmJhZmI3Li43ZGNiNGEwMjQ2ZjUyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3ZmLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3ZmLmMKQEAgLTMxNyw3ICYjNDM7MzE3LDE0IEBAIHN0YXRpYyBpbnQgZW5ldGNfdmZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAKIAllbmV0Y19nZXRfc2lfY2FwcyhzaSk7CiAKLQluZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXEoc2l6ZW9mKCpwcml2KSwgRU5FVENfTUFYX05VTV9UWFFTKTsKJiM0MzsJLyogQ3VycmVudGx5LCB0aGUgc3VwcG9ydGVkIFNvQ3MgaGF2ZSBhIG1heCBvZiA2IENQVXMgYW5kIHRoZSBWRnMKJiM0MzsJICogaGF2ZSBsZXNzIHRoYW4gNiBSWC9UWCByaW5ncy4gU28gbm8gaXNzdWVzIGZvciB0aGVzZSBzdXBwb3J0ZWQKJiM0MzsJICogU29DcywgYnV0IGZvciBmdXR1cmUgU29DcyB3aGljaCBoYXZlIG1vcmUgQ1BVcyBvciBtb3JlIFRYL1JYCiYjNDM7CSAqIHJpbmdzLCBhbGwgdGhlIHJlbGF0ZWQgbG9naWMgbmVlZHMgdG8gYmUgaW1wcm92ZWQuCiYjNDM7CSAqLwomIzQzOwluZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXFzKHNpemVvZigqcHJpdiksCiYjNDM7CQkJCSAgbWluKHNpLSZndDtudW1fdHhfcmluZ3MsIEVORVRDX01BWF9OVU1fVFhRUyksCiYjNDM7CQkJCSAgbWluKHNpLSZndDtudW1fcnhfcmluZ3MsIEVORVRDX01BWF9OVU1fVFhRUykpOwogCWlmICghbmRldikgewogCQllcnIgPSAtRU5PTUVNOwogCQlkZXZfZXJyKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O25ldGRldiBjcmVhdGlvbiBmYWlsZWRcbiYjMzQ7KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNsL250bXAuaCBiL2luY2x1ZGUvbGludXgvZnNsL250bXAuaAppbmRleCBkM2I2YzQ3NmI5MWEyZC4uNzY0ZWYyODkyNjA4NWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnNsL250bXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZzbC9udG1wLmgKQEAgLTc1LDggJiM0Mzs3NSwxMCBAQCBzdHJ1Y3QgbnRtcF91c2VyIHsKIAkvKiBOVE1QIHRhYmxlIGJpdG1hcHMgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQgKi8KIAl1MzIgZXR0X2JpdG1hcF9zaXplOwogCXUzMiBlY3RfYml0bWFwX3NpemU7CiYjNDM7CXUxNiBtYWZ0X251bV9lbnRyaWVzOwogCXVuc2lnbmVkIGxvbmcgKmV0dF9naWRfYml0bWFwOyAvKiBvbmx5IHZhbGlkIGZvciBzd2l0Y2ggKi8KIAl1bnNpZ25lZCBsb25nICplY3RfZ2lkX2JpdG1hcDsgLyogb25seSB2YWxpZCBmb3Igc3dpdGNoICovCiYjNDM7CXVuc2lnbmVkIGxvbmcgKm1hZnRfZWlkX2JpdG1hcDsgLyogb25seSB2YWxpZCBmb3IgRU5FVEMgKi8KIH07CiAKIHN0cnVjdCBtYWZ0X2VudHJ5X2RhdGEgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzA5MAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDYyOTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDAzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0ZTTF9FTkVUQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnPTM4Nz1DT05GSUdfRlNMX0RQQUEyX0VUSD1tXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnOjM4ODpDT05GSUdfRlNMX0VORVRDPW1cbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWctMzg5LUNPTkZJR19OWFBfRU5FVEM0PW1cbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWc6MzkwOkNPTkZJR19GU0xfRU5FVENfVkY9bVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZzozOTE6Q09ORklHX0ZTTF9FTkVUQ19RT1M9eVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0zOTItQ09ORklHX05YUF9ORVRDX0JMS19DVFJMPW1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9LY29uZmlnPTI9Y29uZmlnIE5FVF9EU0FfTkVUQ19TV0lUQ0hcbi0tXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9LY29uZmlnLTctXHRzZWxlY3QgTkVUX0RTQV9UQUdfTkVUQ1xuZHJpdmVycy9uZXQvZHNhL25ldGMvS2NvbmZpZzo4Olx0c2VsZWN0IEZTTF9FTkVUQ19NRElPXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9LY29uZmlnLTktXHRzZWxlY3QgTlhQX05UTVBcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L0tjb25maWc9MzI9Y29uZmlnIE5FVF9EU0FfTVNDQ19GRUxJWFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvS2NvbmZpZy00My1cdHNlbGVjdCBORVRfRFNBX1RBR19PQ0VMT1RcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvS2NvbmZpZzo0NDpcdHNlbGVjdCBGU0xfRU5FVENfTURJT1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9LY29uZmlnLTQ1LVx0c2VsZWN0IFBDU19MWU5YXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZzoyOmNvbmZpZyBGU0xfRU5FVENfQ09SRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctMy1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWc9Mjc9Y29uZmlnIE5YUF9OVE1QXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctMjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZzozMDpjb25maWcgRlNMX0VORVRDXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy0zMS1cdHRyaXN0YXRlIFwmIzM0O0VORVRDIFBGIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTMzLVx0ZGVwZW5kcyBvbiBQQ0lfTVNJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZzozNDpcdHNlbGVjdCBGU0xfRU5FVENfQ09SRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWc6MzU6XHRzZWxlY3QgRlNMX0VORVRDX0lFUkJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjM2Olx0c2VsZWN0IEZTTF9FTkVUQ19NRElPXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy0zNy1cdHNlbGVjdCBOWFBfRU5FVENfUEZfQ09NTU9OXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWc9NDg9Y29uZmlnIE5YUF9FTkVUQzRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy01MS1cdGRlcGVuZHMgb24gUENJX01TSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWc6NTI6XHRzZWxlY3QgRlNMX0VORVRDX0NPUkVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjUzOlx0c2VsZWN0IEZTTF9FTkVUQ19NRElPXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy01NC1cdHNlbGVjdCBOWFBfRU5FVENfUEZfQ09NTU9OXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctNjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZzo2Njpjb25maWcgRlNMX0VORVRDX1ZGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy02Ny1cdHRyaXN0YXRlIFwmIzM0O0VORVRDIFZGIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTY5LVx0ZGVwZW5kcyBvbiBQQ0lfTVNJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZzo3MDpcdHNlbGVjdCBGU0xfRU5FVENfQ09SRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWc6NzE6XHRzZWxlY3QgRlNMX0VORVRDX01ESU9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTcyLVx0c2VsZWN0IFBIWUxJTktcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy04MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjgxOmNvbmZpZyBGU0xfRU5FVENfSUVSQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctODItXHR0cmlzdGF0ZSBcJiMzNDtFTkVUQyBJRVJCIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTg4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWc6ODk6Y29uZmlnIEZTTF9FTkVUQ19NRElPXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy05MC1cdHRyaXN0YXRlIFwmIzM0O0VORVRDIE1ESU8gZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctOTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZzo5ODpjb25maWcgRlNMX0VORVRDX1BUUF9DTE9DS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctOTktXHR0cmlzdGF0ZSBcJiMzNDtFTkVUQyBQVFAgY2xvY2sgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZzoxMDA6XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX1FPUklRIFx1MDAyNlx1MDAyNiAoRlNMX0VORVRDIHx8IEZTTF9FTkVUQ19WRilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTEwMS1cdGRlZmF1bHQgeVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTEwOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjExMDpjb25maWcgRlNMX0VORVRDX1FPU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctMTExLVx0Ym9vbCBcJiMzNDtFTkVUQyBoYXJkd2FyZSBUaW1lLXNlbnNpdGl2ZSBOZXR3b3JrIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjExMjpcdGRlcGVuZHMgb24gKEZTTF9FTkVUQyB8fCBGU0xfRU5FVENfVkYpIFx1MDAyNlx1MDAyNiAoTkVUX1NDSF9UQVBSSU8gfHwgTkVUX1NDSF9DQlMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy0xMTMtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlLTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvTWFrZWZpbGU6MzpvYmotJChDT05GSUdfRlNMX0VORVRDX0NPUkUpICYjNDM7PSBmc2wtZW5ldGMtY29yZS5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvTWFrZWZpbGUtNC1mc2wtZW5ldGMtY29yZS15IDo9IGVuZXRjLm8gZW5ldGNfY2Jkci5vIGVuZXRjX2V0aHRvb2wub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9NYWtlZmlsZT0xMT1ueHAtbmV0Yy1saWIteSA6PSBudG1wLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9NYWtlZmlsZS0xMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfRlNMX0VORVRDKSAmIzQzOz0gZnNsLWVuZXRjLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9NYWtlZmlsZS0xNC1mc2wtZW5ldGMteSA6PSBlbmV0Y19wZi5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvTWFrZWZpbGU6MTU6ZnNsLWVuZXRjLSQoQ09ORklHX0ZTTF9FTkVUQ19RT1MpICYjNDM7PSBlbmV0Y19xb3Mub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlLTE2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9NYWtlZmlsZT0xOT1ueHAtZW5ldGM0LSQoQ09ORklHX0RFQlVHX0ZTKSAmIzQzOz0gZW5ldGM0X2RlYnVnZnMub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlLTIwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlOjIxOm9iai0kKENPTkZJR19GU0xfRU5FVENfVkYpICYjNDM7PSBmc2wtZW5ldGMtdmYub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlLTIyLWZzbC1lbmV0Yy12Zi15IDo9IGVuZXRjX3ZmLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9NYWtlZmlsZS0yMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfRlNMX0VORVRDX0lFUkIpICYjNDM7PSBmc2wtZW5ldGMtaWVyYi5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvTWFrZWZpbGUtMjUtZnNsLWVuZXRjLWllcmIteSA6PSBlbmV0Y19pZXJiLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9NYWtlZmlsZS0yNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9NYWtlZmlsZToyNzpvYmotJChDT05GSUdfRlNMX0VORVRDX01ESU8pICYjNDM7PSBmc2wtZW5ldGMtbWRpby5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvTWFrZWZpbGUtMjgtZnNsLWVuZXRjLW1kaW8teSA6PSBlbmV0Y19wY2lfbWRpby5vIGVuZXRjX21kaW8ub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlLTI5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlOjMwOm9iai0kKENPTkZJR19GU0xfRU5FVENfUFRQX0NMT0NLKSAmIzQzOz0gZnNsLWVuZXRjLXB0cC5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvTWFrZWZpbGUtMzEtZnNsLWVuZXRjLXB0cC15IDo9IGVuZXRjX3B0cC5vXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjLmg9NTk1PXN0YXRpYyBpbmxpbmUgYm9vbCBlbmV0Y19wdHBfY2xvY2tfaXNfZW5hYmxlZChzdHJ1Y3QgZW5ldGNfc2kgKnNpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Yy5oLTU5Ny1cdGlmIChpc19lbmV0Y19yZXYxKHNpKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Yy5oOjU5ODpcdFx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0ZTTF9FTkVUQ19QVFBfQ0xPQ0spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjLmgtNTk5LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Yy5oLTYwMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Yy5oOjYwMzojaWZkZWYgQ09ORklHX0ZTTF9FTkVUQ19RT1NcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Yy5oLTYwNC1pbnQgZW5ldGNfcW9zX3F1ZXJ5X2NhcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHZvaWQgKnR5cGVfZGF0YSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX2llcmIuaC02LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX2llcmIuaDo3OiNpZiBJU19FTkFCTEVEKENPTkZJR19GU0xfRU5FVENfSUVSQilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19pZXJiLmgtOC1cbi0tXG5kcml2ZXJzL3B0cC9LY29uZmlnPTU4PWNvbmZpZyBQVFBfMTU4OF9DTE9DS19RT1JJUVxuZHJpdmVycy9wdHAvS2NvbmZpZy01OS1cdHRyaXN0YXRlIFwmIzM0O0ZyZWVzY2FsZSBRb3JJUSAxNTg4IHRpbWVyIGFzIFBUUCBjbG9ja1wmIzM0O1xuZHJpdmVycy9wdHAvS2NvbmZpZzo2MDpcdGRlcGVuZHMgb24gR0lBTkZBUiB8fCBGU0xfRFBBQV9FVEggfHwgRlNMX0RQQUEyX0VUSCB8fCBGU0xfRU5FVEMgfHwgRlNMX0VORVRDX1ZGIHx8IENPTVBJTEVfVEVTVFxuZHJpdmVycy9wdHAvS2NvbmZpZy02MS1cdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcbmRyaXZlcnMvcHRwL0tjb25maWc6NjI6XHRkZWZhdWx0IHkgaWYgR0lBTkZBUiB8fCBGU0xfRFBBQV9FVEggfHwgRlNMX0RQQUEyX0VUSCB8fCBGU0xfRU5FVEMgfHwgRlNMX0VORVRDX1ZGXG5kcml2ZXJzL3B0cC9LY29uZmlnLTYzLVx0aGVscFxuLS1cbmluY2x1ZGUvbGludXgvZnNsL2VuZXRjX21kaW8uaC0zLVxuaW5jbHVkZS9saW51eC9mc2wvZW5ldGNfbWRpby5oOjQ6I2lmbmRlZiBfRlNMX0VORVRDX01ESU9fSF9cbmluY2x1ZGUvbGludXgvZnNsL2VuZXRjX21kaW8uaDo1OiNkZWZpbmUgX0ZTTF9FTkVUQ19NRElPX0hfXG5pbmNsdWRlL2xpbnV4L2ZzbC9lbmV0Y19tZGlvLmgtNi1cbi0tXG5pbmNsdWRlL2xpbnV4L2ZzbC9lbmV0Y19tZGlvLmg9MzM9c3RydWN0IGVuZXRjX21kaW9fcHJpdiB7XG4tLVxuaW5jbHVkZS9saW51eC9mc2wvZW5ldGNfbWRpby5oLTM3LVxuaW5jbHVkZS9saW51eC9mc2wvZW5ldGNfbWRpby5oOjM4OiNpZiBJU19SRUFDSEFCTEUoQ09ORklHX0ZTTF9FTkVUQ19NRElPKVxuaW5jbHVkZS9saW51eC9mc2wvZW5ldGNfbWRpby5oLTM5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDAzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5MDk0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRU5FVEMgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvYCBkaXJlY3RvcnkuIFJpZ2h0LCBhbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3Mgc2VlbSB0byBiZSBgRlNMX0VORVRDYCwgYE5YUF9FTkVUQzRgLCBgRlNMX0VORVRDX1ZGYCwgYW5kIGBGU0xfRU5FVENfUU9TYC4gSG1tLCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpZiB0aGVzZSBhcmUgYWxyZWFkeSBlbmFibGVkIGluIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uIExldCBtZSBjaGVjayBgYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZ2AuLi4gQWgsIHllcy4gYENPTkZJR19GU0xfRU5FVEM9bWAsIGBDT05GSUdfTlhQX0VORVRDND1tYCwgYENPTkZJR19GU0xfRU5FVENfVkY9bWAsIGFuZCBgQ09ORklHX0ZTTF9FTkVUQ19RT1M9eWAuIFNvIHRoZXkmIzM5O3JlIGFscmVhZHkgaW4gdGhlIGRlZmNvbmZpZy4gR29vZCwganVzdCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxpc3QgdGhlbSB3aXRob3V0IHRoZSBgQ09ORklHX2AgcHJlZml4IGluIHRoZSBkb2N1bWVudGF0aW9uIG9yIHdoZXJldmVyIHRoaXMgaXMgZ29pbmcuCgpOb3csIGxldCYjMzk7cyBkaWcgaW50byB0aGUgYWN0dWFsIGNvZGUgY2hhbmdlLiBUaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIHNlZW1zIHRvIGJlIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jYC4gT2theSwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIGhhcHBlbmluZy4gVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBlbmV0YzRfcHNpX2RvX3NldF9yeF9tb2RlYCBmdW5jdGlvbiwgd2hpY2ggd2FzIHBhcnQgb2YgYSB3b3JrcXVldWUsIGFuZCBpdCBzZWVtcyBsaWtlIGl0JiMzOTtzIHJlcGxhY2luZyBgLm5kb19zZXRfcnhfbW9kZWAgd2l0aCBgLm5kb19zZXRfcnhfbW9kZV9hc3luY2AgaW4gdGhlIGBuZXRfZGV2aWNlX29wc2Agc3RydWN0dXJlLiBIYW5nIG9uLi4uIGAubmRvX3NldF9yeF9tb2RlX2FzeW5jYD8gSXMgdGhhdCBhIG5ldyBtZW1iZXIgb2YgdGhlIGBuZXRfZGV2aWNlX29wc2Agc3RydWN0PyBUaGF0JiMzOTtzIG5vdCBzb21ldGhpbmcgSSYjMzk7bSBpbW1lZGlhdGVseSBmYW1pbGlhciB3aXRoLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhhdC4gVGltZSB0byBjaGVjayBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAgdG8gc2VlIHdoYXQgdGhlIGRlYWwgaXMgd2l0aCB0aGlzIG5ldyBjYWxsYmFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAwMzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZG9fc2V0X3J4X21vZGVfYXN5bmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0PTI4OD1uZG9fc2V0X3J4X21vZGU6XG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTI5MC1cdENvbnRleHQ6IEJIcyBkaXNhYmxlZFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0OjI5MTpcdE5vdGVzOiBEZXByZWNhdGVkIGluIGZhdm9yIG9mIG5kb19zZXRfcnhfbW9kZV9hc3luYyB3aGljaCBydW5zXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3QtMjkyLVx0aW4gcHJvY2VzcyBjb250ZXh0LlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTI5My1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdDoyOTQ6bmRvX3NldF9yeF9tb2RlX2FzeW5jOlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTI5NS1cdFN5bmNocm9uaXphdGlvbjogcnRubF9sb2NrKCkgc2VtYXBob3JlLiBJbiBhZGRpdGlvbiwgbmV0ZGV2IGluc3RhbmNlXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM9MjE1Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwb2liX25ldGRldl9vcHNfcGYgPSB7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMtMjE2NS1cdC5uZG9fdHhfdGltZW91dFx0XHQgPSBpcG9pYl90aW1lb3V0LFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmM6MjE2NjpcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcdCA9IGlwb2liX3NldF9yeF9tb2RlX2FzeW5jLFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMtMjE2Ny1cdC5uZG9fZ2V0X2lmbGlua1x0XHQgPSBpcG9pYl9nZXRfaWZsaW5rLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jPTIxODA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcG9pYl9uZXRkZXZfb3BzX3ZmID0ge1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jLTIxODgtXHQubmRvX3R4X3RpbWVvdXRcdFx0ID0gaXBvaWJfdGltZW91dCxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jOjIxODk6XHQubmRvX3NldF9yeF9tb2RlX2FzeW5jXHQgPSBpcG9pYl9zZXRfcnhfbW9kZV9hc3luYyxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jLTIxOTAtXHQubmRvX2dldF9pZmxpbmtcdFx0ID0gaXBvaWJfZ2V0X2lmbGluayxcbi0tXG5kcml2ZXJzL25ldC9kdW1teS5jPTg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZHVtbXlfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9kdW1teS5jLTkyLVx0Lm5kb192YWxpZGF0ZV9hZGRyXHQ9IGV0aF92YWxpZGF0ZV9hZGRyLFxuZHJpdmVycy9uZXQvZHVtbXkuYzo5MzpcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcdD0gc2V0X211bHRpY2FzdF9saXN0LFxuZHJpdmVycy9uZXQvZHVtbXkuYy05NC1cdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IGV0aF9tYWNfYWRkcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYz0xNjA1ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJueHRfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNjA1OC1cdC5uZG9fZ2V0X3N0YXRzNjRcdD0gYm54dF9nZXRfc3RhdHM2NCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jOjE2MDU5Olx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1x0PSBibnh0X3NldF9yeF9tb2RlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTYwNjAtXHQubmRvX2V0aF9pb2N0bFx0XHQ9IGJueHRfaW9jdGwsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jPTU2ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVuZXRjNF9uZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMtNTY5LVx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcdD0gZW5ldGNfcGZfc2V0X21hY19hZGRyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jOjU3MDpcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcdD0gZW5ldGM0X3BmX3NldF9yeF9tb2RlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jLTU3MS1cdC5uZG9fc2V0X2ZlYXR1cmVzXHQ9IGVuZXRjNF9wZl9zZXRfZmVhdHVyZXMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYz01MTM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWF2Zl9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMtNTEzNy1cdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IGlhdmZfeG1pdF9mcmFtZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmM6NTEzODpcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcdD0gaWF2Zl9zZXRfcnhfbW9kZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMtNTEzOS1cdC5uZG9fdmFsaWRhdGVfYWRkclx0PSBldGhfdmFsaWRhdGVfYWRkcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jPTUzMjI9Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1seDVlX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYy01MzI4LVx0Lm5kb19nZXRfc3RhdHM2NCAgICAgICAgID0gbWx4NWVfZ2V0X3N0YXRzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYzo1MzI5Olx0Lm5kb19zZXRfcnhfbW9kZV9hc3luYyAgID0gbWx4NWVfc2V0X3J4X21vZGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jLTUzMzAtXHQubmRvX3NldF9tYWNfYWRkcmVzcyAgICAgPSBtbHg1ZV9zZXRfbWFjLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2LmM9NTU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZmJuaWNfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jLTU2Ni1cdC5uZG9fY2hhbmdlX210dVx0XHQ9IGZibmljX2NoYW5nZV9tdHUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jOjU2NzpcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcdD0gZmJuaWNfc2V0X3J4X21vZGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX25ldGRldi5jLTU2OC1cdC5uZG9fZ2V0X3N0YXRzNjRcdD0gZmJuaWNfZ2V0X3N0YXRzNjQsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTYyNz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5zaW1fbmV0ZGV2X29wcyA9IHtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy02MjgtXHQubmRvX3N0YXJ0X3htaXRcdFx0PSBuc2ltX3N0YXJ0X3htaXQsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6NjI5Olx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1x0PSBuc2ltX3NldF9yeF9tb2RlLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTYzMC1cdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IGV0aF9tYWNfYWRkcixcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9NjUyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbnNpbV92Zl9uZXRkZXZfb3BzID0ge1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTY1My1cdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IG5zaW1fc3RhcnRfeG1pdCxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzo2NTQ6XHQubmRvX3NldF9yeF9tb2RlX2FzeW5jXHQ9IG5zaW1fc2V0X3J4X21vZGUsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtNjU1LVx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcdD0gZXRoX21hY19hZGRyLFxuLS1cbmRyaXZlcnMvbmV0L25ldGtpdC5jPTMzMT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5ldGtpdF9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGtpdC5jLTMzNS1cdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IG5ldGtpdF94bWl0LFxuZHJpdmVycy9uZXQvbmV0a2l0LmM6MzM2Olx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1x0PSBuZXRraXRfc2V0X211bHRpY2FzdCxcbmRyaXZlcnMvbmV0L25ldGtpdC5jLTMzNy1cdC5uZG9fc2V0X3J4X2hlYWRyb29tXHQ9IG5ldGtpdF9zZXRfaGVhZHJvb20sXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0xMDYyPXN0cnVjdCBuZXRkZXZfbmV0X25vdGlmaWVyIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTExMjItICpcdENhbm5vdCBzbGVlcCwgY2FsbGVkIHdpdGggbmV0aWZfYWRkcl9sb2NrX2JoIGhlbGQuXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjExMjM6ICpcdERlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgbmRvX3NldF9yeF9tb2RlX2FzeW5jLlxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xMTI0LSAqXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjExMjU6ICogaW50ICgqbmRvX3NldF9yeF9tb2RlX2FzeW5jKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xMTI2LSAqXHRcdFx0XHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMsXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0xNDQ2PXN0cnVjdCBuZXRfZGV2aWNlX29wcyB7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xNDYxLVx0dm9pZFx0XHRcdCgqbmRvX3NldF9yeF9tb2RlKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MTQ2MjpcdGludFx0XHRcdCgqbmRvX3NldF9yeF9tb2RlX2FzeW5jKShcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTQ2My1cdFx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9kZXYuYz0xMTMyNj1pbnQgcmVnaXN0ZXJfbmV0ZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvZGV2LmMtMTEzODItXHQgICAgZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3NldF9yeF9tb2RlIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvZGV2LmM6MTEzODM6XHQgICAgIWRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zZXRfcnhfbW9kZV9hc3luYylcbm5ldC9jb3JlL2Rldi5jOjExMzg0Olx0XHRuZXRkZXZfV0FSTihkZXYsIFwmIzM0O29wcy1sb2NrZWQgZHJpdmVycyBzaG91bGQgdXNlIG5kb19zZXRfcnhfbW9kZV9hc3luY1xcblwmIzM0Oyk7XG5uZXQvY29yZS9kZXYuYy0xMTM4NS1cbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTEyNzc9dm9pZCBuZXRpZl9yeF9tb2RlX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTI5NC1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTI5NTpcdGlmIChvcHMtXHUwMDNlbmRvX3NldF9yeF9tb2RlX2FzeW5jKSB7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEyOTYtXHRcdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTMxNS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTMxNjpcdGlmIChvcHMtXHUwMDNlbmRvX3NldF9yeF9tb2RlX2FzeW5jKSB7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEzMTc6XHRcdGVyciA9IG9wcy1cdTAwM2VuZG9fc2V0X3J4X21vZGVfYXN5bmMoZGV2LCBcdTAwMjZ1Y19zbmFwLCBcdTAwMjZtY19zbmFwKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTMxOC1cbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTEzNjI9dm9pZCBfX2Rldl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTM3My1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTM3NDpcdGlmIChvcHMtXHUwMDNlbmRvX3NldF9yeF9tb2RlX2FzeW5jIHx8IG9wcy1cdTAwM2VuZG9fY2hhbmdlX3J4X2ZsYWdzIHx8XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzNzUtXHQgICAgbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSkge1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9MTM5MD12b2lkIGRldl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTQwMC0gKlxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxNDAxOiAqIERyaXZlcnMgaW1wbGVtZW50aW5nIG5kb19zZXRfcnhfbW9kZV9hc3luYygpIGhhdmUgdGhlaXIgcnggbW9kZSBjYWxsYmFja1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xNDAyLSAqIGV4ZWN1dGVkIGZyb20gYSB3b3JrcXVldWUuIFRoaXMgYWxsb3dzIHRoZSBjYWxsYmFjayB0byBzbGVlcCwgYnV0IG1lYW5zXG4tLVxubmV0L2NvcmUvZGV2X2lvY3RsLmM9NTQxPXN0YXRpYyBpbnQgZGV2X2lmc2lvYyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB2b2lkIF9fdXNlciAqZGF0YSxcbi0tXG5uZXQvY29yZS9kZXZfaW9jdGwuYy01ODgtXHRjYXNlIFNJT0NBRERNVUxUSTpcbm5ldC9jb3JlL2Rldl9pb2N0bC5jOjU4OTpcdFx0aWYgKCghb3BzLVx1MDAzZW5kb19zZXRfcnhfbW9kZSBcdTAwMjZcdTAwMjYgIW9wcy1cdTAwM2VuZG9fc2V0X3J4X21vZGVfYXN5bmMpIHx8XG5uZXQvY29yZS9kZXZfaW9jdGwuYy01OTAtXHRcdCAgICBpZnItXHUwMDNlaWZyX2h3YWRkci5zYV9mYW1pbHkgIT0gQUZfVU5TUEVDKVxuLS1cbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTYwMC1cdGNhc2UgU0lPQ0RFTE1VTFRJOlxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NjAxOlx0XHRpZiAoKCFvcHMtXHUwMDNlbmRvX3NldF9yeF9tb2RlIFx1MDAyNlx1MDAyNiAhb3BzLVx1MDAzZW5kb19zZXRfcnhfbW9kZV9hc3luYykgfHxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTYwMi1cdFx0ICAgIGlmci1cdTAwM2VpZnJfaHdhZGRyLnNhX2ZhbWlseSAhPSBBRl9VTlNQRUMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMDM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMwNjIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIEVORVRDIERyaXZlcjogQSBGb2N1c2VkIEFwcHJvYWNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBtYWtpbmcgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgRU5FVEMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyBpdCBoYW5kbGVzIFJYIG1vZGUuIFRoZSBrZXkgdGhpbmcgaXMgdGhhdCBpdCYjMzk7cyByZXBsYWNpbmcgdGhlIHdvcmtxdWV1ZSB3aXRoIGBuZG9fc2V0X3J4X21vZGVfYXN5bmNgLCB3aGljaCBydW5zIGluIHByb2Nlc3MgY29udGV4dC4gVGhpcyBzZWVtcyBsaWtlIGEgZGVjZW50IGNoYW5nZSwgcmVkdWNpbmcgc29tZSBvdmVyaGVhZCwgYnV0IGl0IGRlZmluaXRlbHkgbmVlZHMgc29tZSBhdHRlbnRpb24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuCgpNeSBtYWluIGNvbmNlcm4gaXMgdGhlIHJlbW92YWwgb2YgdGhlIHdvcmtxdWV1ZSBhbmQgdGhlIHN1YnNlcXVlbnQgbW9kaWZpY2F0aW9ucyB0byB0aGUgTUFDIGZpbHRlcmluZyBsb2dpYy4gVGhpcyBwYXRjaCB0b3VjaGVzIGBlbmV0YzRfcGYuY2AgYW5kIGBlbmV0Y19wZi5jYCBwcmV0dHkgZXh0ZW5zaXZlbHksIHNvIHRob3NlIGFyZSBteSBwcmltYXJ5IGFyZWFzIG9mIGZvY3VzLiBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgbW9kaWZpZWQgdG8gZGV0ZXJtaW5lIHRoZSBhdHRhY2sgc3VyZmFjZS4KCk5vdywgbGV0JiMzOTtzIHNlZSwgYWZ0ZXIgc29tZSBkaWdnaW5nLCBoZXJlIGFyZSB0aGUgZnVuY3Rpb25zIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhhdCBhcmUgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaCB0aGF0IGFyZSBub3QgaW4gdGhlIGhvdCBwYXRoOiBgZW5ldGM0X3BmX3NldF9yeF9tb2RlYCwgYGVuZXRjX3BmX3NldF9yeF9tb2RlYCwgYGVuZXRjNF9wZl9zZXRfbWFjX2ZpbHRlcmAsIGBlbmV0YzRfcGZfc2V0X3VjX2V4YWN0X2ZpbHRlcmAsIGBlbmV0YzRfcGZfYWRkX21hZnRfZW50cmllc2AsIGBlbmV0Y19zeW5jX21hY19maWx0ZXJzYCwgYGVuZXRjX3NldF9zaV91Y19wcm9taXNjYCwgYGVuZXRjX3NldF9zaV9tY19wcm9taXNjYCwgYGVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcmAsIGBlbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXJgLCBgZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzY2AsIGFuZCBgZW5ldGNfcHNmcF9wYXJzZV9jbHNmbG93ZXJgLgoKSSBkaWQgYSBxdWljayBjaGVjayBvbiBhIGNvdXBsZSBvZiB0aG9zZSB0byBzZWUgaWYgYW55IGltbWVkaWF0ZWx5IHN0b29kIG91dC4gYGVuZXRjX3BzZnBfcGFyc2VfY2xzZmxvd2VyYCBoYXMgYSBzbWFsbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZmluZS4gSG93ZXZlciwgYGVuZXRjX3ZmX3Byb2JlYCBoYXMgYSBjaGFuZ2Ugd2hlcmUgdGhlIG1heGltdW0gbnVtYmVyIG9mIHF1ZXVlcyBpcyBjaGFuZ2VkLCBzbyB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCBmb3IgbWlzY29uZmlndXJhdGlvbiwgYnV0IHRoYXQmIzM5O3MgYSBzbWFsbGVyIGNoYW5nZS4KCkdpdmVuIHRoaXMsIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBtYWluIGZpbGVzLCBlc3BlY2lhbGx5IHRoZSBsaXN0ZWQgc3ltYm9scy4gVGhlIGNvbmZpZyBvcHRpb25zIEkmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIHRvIHRlc3QgdGhpcyBjaGFuZ2UgYXJlOiBgRlNMX0VORVRDYCwgYE5YUF9FTkVUQzRgLCBgRlNMX0VORVRDX1ZGYCwgYW5kIGBGU0xfRU5FVENfUU9TYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBjb3JyZWN0IGNvbmZpZ3MsIGFjY29yZGluZyB0byB0aGUgS2NvbmZpZyBmaWxlcy4KCk9rYXksIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3MgYWdhaW4uLi4geWVwLCB0aG9zZSBhcmUgaXQuIE5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGNvbmZpZ3MgdGhhdCBtaWdodCBiZSByZWxldmFudCBoZXJlLiBMZXQmIzM5O3Mgc2VlLi4uIGBOWFBfTlRNUGA/IE5vLCB3YWl0Li4uIEluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZ2AsIGl0JiMzOTtzIHRoZXJlLi4uCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDAzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05YUF9OVE1QJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9uZXRjL0tjb25maWc9Mj1jb25maWcgTkVUX0RTQV9ORVRDX1NXSVRDSFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9uZXRjL0tjb25maWctOC1cdHNlbGVjdCBGU0xfRU5FVENfTURJT1xuZHJpdmVycy9uZXQvZHNhL25ldGMvS2NvbmZpZzo5Olx0c2VsZWN0IE5YUF9OVE1QXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9LY29uZmlnLTEwLVx0c2VsZWN0IE5YUF9ORVRDX0xJQlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnPTI9Y29uZmlnIEZTTF9FTkVUQ19DT1JFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy0zLVx0dHJpc3RhdGVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjQ6XHRzZWxlY3QgTlhQX05FVENfTElCIGlmIE5YUF9OVE1QXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy01LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnPTIwPWNvbmZpZyBOWFBfTkVUQ19MSUJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy0yNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjI3OmNvbmZpZyBOWFBfTlRNUFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctMjgtXHRib29sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWc9NDg9Y29uZmlnIE5YUF9FTkVUQzRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy01NC1cdHNlbGVjdCBOWFBfRU5FVENfUEZfQ09NTU9OXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZzo1NTpcdHNlbGVjdCBOWFBfTlRNUFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctNTYtXHRzZWxlY3QgUEhZTElOS1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDAzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1NjY0CgkJCQkJCQlvdXRwdXQ6IDMyMwoJCQkJCQkJdGhvdWdodHM6IDQxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBFTkVUQyBEcml2ZXIgQ2hhbmdlcyoqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBOWFBfRU5FVEM0YCBkZXBlbmRzIG9uIGBOWFBfTlRNUGAuIEdvb2QgdG8ga25vdy4gTGV0IG1lIHF1aWNrbHkgYXNzZXNzIGlmIGBGU0xfRU5FVENgIGlzIHN1ZmZpY2llbnQgb24gaXRzIG93bi4gSXQgc2VlbXMgSSBuZWVkIHRvIGVuYWJsZSBhIGZldyBjb25maWd1cmF0aW9uczogYEZTTF9FTkVUQ2AsIGBOWFBfRU5FVEM0YCwgYEZTTF9FTkVUQ19WRmAsIGFuZCBgRlNMX0VORVRDX1FPU2AuIEFscmlnaHQsIEkmIzM5O3ZlIGdvdCB0aGF0LgoKTm93LCBsZXQmIzM5O3MgcHJlcGFyZSB0aGUgb3V0cHV0IGZvciB0aGlzIHBhdGNoLiBJJiMzOTtsbCBmbGFnIGl0IGFzIGBXb3J0aEZ1enppbmc6IHRydWVgLCB0aGF0JiMzOTtzIGEgZ2l2ZW4uIFRoZSBjb3JlIG9mIHRoaXMgd29yayBsaWVzIGluIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgUlggbW9kZSwgTUFDIGZpbHRlcnMsIGFuZCBWTEFOIGZpbHRlcmluZy4gVGhlcmVmb3JlLCB0aGUgaW1wb3J0YW50IHN5bWJvbHMgdG8gZm9jdXMgb24gZHVyaW5nIGZ1enppbmcgYXJlOiBgZW5ldGM0X3BmX3NldF9yeF9tb2RlYCwgYGVuZXRjX3BmX3NldF9yeF9tb2RlYCwgYGVuZXRjNF9wZl9zZXRfbWFjX2ZpbHRlcmAsIGBlbmV0YzRfcGZfc2V0X3VjX2V4YWN0X2ZpbHRlcmAsIGBlbmV0YzRfcGZfYWRkX21hZnRfZW50cmllc2AsIGBlbmV0Y19zeW5jX21hY19maWx0ZXJzYCwgYGVuZXRjX3NldF9zaV91Y19wcm9taXNjYCwgYGVuZXRjX3NldF9zaV9tY19wcm9taXNjYCwgYGVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcmAsIGBlbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXJgIGFuZCBgZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzY2AuIFRoZXNlIHJlcHJlc2VudCB0aGUgcHJpbWFyeSBhcmVhcyBvZiBmdW5jdGlvbmFsIGNoYW5nZS4KCkZvciBlbmFibGluZyB0aGUgY29uZmlndXJhdGlvbnMsIEkmIzM5O2xsIG5lZWQgdG8gc3BlY2lmeSB0aGVzZSBjbGVhcmx5OiBgRlNMX0VORVRDYCwgYE5YUF9FTkVUQzRgLCBgRlNMX0VORVRDX1ZGYCwgYW5kIGBGU0xfRU5FVENfUU9TYC4KCkluIHRlcm1zIG9mIHJlYXNvbmluZywgdGhlIHBhdGNoIGlzIHJlZmFjdG9yaW5nIHRoZSBFTkVUQyBkcml2ZXIgdG8gdXNlIGBuZG9fc2V0X3J4X21vZGVfYXN5bmNgIGluc3RlYWQgb2YgYSB3b3JrcXVldWUuIFRoaXMgaXMgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgaW4gaG93IGl0IHNldHMgdGhlIFJYIG1vZGUuIFRoZXJlJiMzOTtzIGFsc28gbW9kaWZpY2F0aW9uIG9mIE1BQyBhbmQgVkxBTiBmaWx0ZXJpbmcsIHBsdXMgdGhlIGludHJvZHVjdGlvbiBvZiBjb21tb24gaGVscGVyIGZ1bmN0aW9ucyBmb3IgcHJvbWlzY3VvdXMgbW9kZSBhbmQgaGFzaCBmaWx0ZXJzLiBTaW5jZSB0aGVzZSBhcmUgYWxsIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgZHJpdmVyIGNvZGUsIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDAzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGU0xfRU5FVEMmIzM0OywKICAgICYjMzQ7TlhQX0VORVRDNCYjMzQ7LAogICAgJiMzNDtGU0xfRU5FVENfVkYmIzM0OywKICAgICYjMzQ7RlNMX0VORVRDX1FPUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VuZXRjNF9wZl9zZXRfcnhfbW9kZSYjMzQ7LAogICAgJiMzNDtlbmV0Y19wZl9zZXRfcnhfbW9kZSYjMzQ7LAogICAgJiMzNDtlbmV0YzRfcGZfc2V0X21hY19maWx0ZXImIzM0OywKICAgICYjMzQ7ZW5ldGM0X3BmX3NldF91Y19leGFjdF9maWx0ZXImIzM0OywKICAgICYjMzQ7ZW5ldGM0X3BmX2FkZF9tYWZ0X2VudHJpZXMmIzM0OywKICAgICYjMzQ7ZW5ldGNfc3luY19tYWNfZmlsdGVycyYjMzQ7LAogICAgJiMzNDtlbmV0Y19zZXRfc2lfdWNfcHJvbWlzYyYjMzQ7LAogICAgJiMzNDtlbmV0Y19zZXRfc2lfbWNfcHJvbWlzYyYjMzQ7LAogICAgJiMzNDtlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXImIzM0OywKICAgICYjMzQ7ZW5ldGNfc2V0X3NpX21jX2hhc2hfZmlsdGVyJiMzNDssCiAgICAmIzM0O2VuZXRjX3NldF9zaV92bGFuX3Byb21pc2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBFTkVUQyBkcml2ZXIgdG8gdXNlIHRoZSBuZXcgYG5kb19zZXRfcnhfbW9kZV9hc3luY2AgbmV0X2RldmljZV9vcHMgbWVtYmVyIGluc3RlYWQgb2YgYSBjdXN0b20gd29ya3F1ZXVlIGZvciBzZXR0aW5nIHRoZSBSWCBtb2RlLiBJdCBhbHNvIG1vZGlmaWVzIE1BQyBhbmQgVkxBTiBmaWx0ZXJpbmcgbG9naWMgaW4gdGhlIFBGIGRyaXZlcnMgKGBlbmV0YzRfcGYuY2AgYW5kIGBlbmV0Y19wZi5jYCksIGFuZCBpbnRyb2R1Y2VzIGNvbW1vbiBoZWxwZXIgZnVuY3Rpb25zIGZvciBwcm9taXNjdW91cyBtb2RlIGFuZCBoYXNoIGZpbHRlcnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlNMX0VORVRDJiMzNDssCiAgICAmIzM0O05YUF9FTkVUQzQmIzM0OywKICAgICYjMzQ7RlNMX0VORVRDX1ZGJiMzNDssCiAgICAmIzM0O0ZTTF9FTkVUQ19RT1MmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbmV0YzRfcGZfc2V0X3J4X21vZGUmIzM0OywKICAgICYjMzQ7ZW5ldGNfcGZfc2V0X3J4X21vZGUmIzM0OywKICAgICYjMzQ7ZW5ldGM0X3BmX3NldF9tYWNfZmlsdGVyJiMzNDssCiAgICAmIzM0O2VuZXRjNF9wZl9zZXRfdWNfZXhhY3RfZmlsdGVyJiMzNDssCiAgICAmIzM0O2VuZXRjNF9wZl9hZGRfbWFmdF9lbnRyaWVzJiMzNDssCiAgICAmIzM0O2VuZXRjX3N5bmNfbWFjX2ZpbHRlcnMmIzM0OywKICAgICYjMzQ7ZW5ldGNfc2V0X3NpX3VjX3Byb21pc2MmIzM0OywKICAgICYjMzQ7ZW5ldGNfc2V0X3NpX21jX3Byb21pc2MmIzM0OywKICAgICYjMzQ7ZW5ldGNfc2V0X3NpX3VjX2hhc2hfZmlsdGVyJiMzNDssCiAgICAmIzM0O2VuZXRjX3NldF9zaV9tY19oYXNoX2ZpbHRlciYjMzQ7LAogICAgJiMzNDtlbmV0Y19zZXRfc2lfdmxhbl9wcm9taXNjJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgRU5FVEMgZHJpdmVyIHRvIHVzZSB0aGUgbmV3IGBuZG9fc2V0X3J4X21vZGVfYXN5bmNgIG5ldF9kZXZpY2Vfb3BzIG1lbWJlciBpbnN0ZWFkIG9mIGEgY3VzdG9tIHdvcmtxdWV1ZSBmb3Igc2V0dGluZyB0aGUgUlggbW9kZS4gSXQgYWxzbyBtb2RpZmllcyBNQUMgYW5kIFZMQU4gZmlsdGVyaW5nIGxvZ2ljIGluIHRoZSBQRiBkcml2ZXJzIChgZW5ldGM0X3BmLmNgIGFuZCBgZW5ldGNfcGYuY2ApLCBhbmQgaW50cm9kdWNlcyBjb21tb24gaGVscGVyIGZ1bmN0aW9ucyBmb3IgcHJvbWlzY3VvdXMgbW9kZSBhbmQgaGFzaCBmaWx0ZXJzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwMzowMDoxNS4zMDk4MzQ3OTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTAxNjczMjI4MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlNMX0VORVRDXCIsXG4gICAgXCJOWFBfRU5FVEM0XCIsXG4gICAgXCJGU0xfRU5FVENfVkZcIixcbiAgICBcIkZTTF9FTkVUQ19RT1NcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlbmV0YzRfcGZfc2V0X3J4X21vZGVcIixcbiAgICBcImVuZXRjX3BmX3NldF9yeF9tb2RlXCIsXG4gICAgXCJlbmV0YzRfcGZfc2V0X21hY19maWx0ZXJcIixcbiAgICBcImVuZXRjNF9wZl9zZXRfdWNfZXhhY3RfZmlsdGVyXCIsXG4gICAgXCJlbmV0YzRfcGZfYWRkX21hZnRfZW50cmllc1wiLFxuICAgIFwiZW5ldGNfc3luY19tYWNfZmlsdGVyc1wiLFxuICAgIFwiZW5ldGNfc2V0X3NpX3VjX3Byb21pc2NcIixcbiAgICBcImVuZXRjX3NldF9zaV9tY19wcm9taXNjXCIsXG4gICAgXCJlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXJcIixcbiAgICBcImVuZXRjX3NldF9zaV9tY19oYXNoX2ZpbHRlclwiLFxuICAgIFwiZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgRU5FVEMgZHJpdmVyIHRvIHVzZSB0aGUgbmV3IGBuZG9fc2V0X3J4X21vZGVfYXN5bmNgIG5ldF9kZXZpY2Vfb3BzIG1lbWJlciBpbnN0ZWFkIG9mIGEgY3VzdG9tIHdvcmtxdWV1ZSBmb3Igc2V0dGluZyB0aGUgUlggbW9kZS4gSXQgYWxzbyBtb2RpZmllcyBNQUMgYW5kIFZMQU4gZmlsdGVyaW5nIGxvZ2ljIGluIHRoZSBQRiBkcml2ZXJzIChgZW5ldGM0X3BmLmNgIGFuZCBgZW5ldGNfcGYuY2ApLCBhbmQgaW50cm9kdWNlcyBjb21tb24gaGVscGVyIGZ1bmN0aW9ucyBmb3IgcHJvbWlzY3VvdXMgbW9kZSBhbmQgaGFzaCBmaWx0ZXJzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDAzOjAwOjE1LjMwOTg0MDYwOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgxNTk5NTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNmIxMzllNDcyZDkwYTc4YWVkMzBhZGEyMjYxNTc0YWRlZTJjMjk2NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyMCAwMzowMDoxMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Yy5oXFxuaW5kZXggMDRhNWRkNWVhNmM3NGMuLjg4MzljZmI0OWJjZmU4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Yy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjLmhcXG5AQCAtMSw1ICsxLDUgQEBcXG4gLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wKyBPUiBCU0QtMy1DbGF1c2UpICovXFxuLS8qIENvcHlyaWdodCAyMDE3LTIwMTkgTlhQICovXFxuKy8qIENvcHlyaWdodCAyMDE3LTIwMTksIDIwMjUtMjAyNiBOWFAgKi9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90aW1lci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLmhcXHUwMDNlXFxuQEAgLTMyNCw4ICszMjQsNiBAQCBzdHJ1Y3QgZW5ldGNfc2kge1xcbiBcXHRjb25zdCBzdHJ1Y3QgZW5ldGNfZHJ2ZGF0YSAqZHJ2ZGF0YTtcXG4gXFx0Y29uc3Qgc3RydWN0IGVuZXRjX3NpX29wcyAqb3BzO1xcbiBcXG4tXFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtxdWV1ZTtcXG4tXFx0c3RydWN0IHdvcmtfc3RydWN0IHJ4X21vZGVfdGFzaztcXG4gXFx0c3RydWN0IGRlbnRyeSAqZGVidWdmc19yb290O1xcbiBcXHRzdHJ1Y3QgZW5ldGNfbXNnX3N3YmQgbXNnOyAvKiBPbmx5IHZhbGlkIGZvciBWU0kgKi9cXG4gfTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X2RlYnVnZnMuY1xcbmluZGV4IDFiMTU5MWRjZTczZDRiLi41MDI5MDM4YmY5OWZhYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X2RlYnVnZnMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfZGVidWdmcy5jXFxuQEAgLTI4LDE1ICsyOCwxNCBAQCBzdGF0aWMgdm9pZCBlbmV0Y19zaG93X3NpX21hY19oYXNoX2ZpbHRlcihzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGludCBpKVxcbiBcXG4gc3RhdGljIGludCBlbmV0Y19tYWNfZmlsdGVyX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKVxcbiB7XFxuLVxcdHN0cnVjdCBlbmV0Y19zaSAqc2kgPSBzLVxcdTAwM2Vwcml2YXRlO1xcbi1cXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXFx1MDAyNnNpLVxcdTAwM2VodztcXG4rXFx0c3RydWN0IGVuZXRjX3BmICpwZiA9IGVuZXRjX3NpX3ByaXYocy1cXHUwMDNlcHJpdmF0ZSk7XFxuK1xcdHN0cnVjdCBlbmV0Y19odyAqaHcgPSBcXHUwMDI2cGYtXFx1MDAzZXNpLVxcdTAwM2VodztcXG4rXFx0aW50IG51bV9zaSA9IHBmLVxcdTAwM2V0b3RhbF92ZnMgKyAxO1xcbiBcXHRzdHJ1Y3QgbWFmdF9lbnRyeV9kYXRhIG1hZnQ7XFxuLVxcdHN0cnVjdCBlbmV0Y19wZiAqcGY7XFxuLVxcdGludCBpLCBlcnIsIG51bV9zaTtcXG4tXFx0dTMyIHZhbDtcXG4tXFxuLVxcdHBmID0gZW5ldGNfc2lfcHJpdihzaSk7XFxuLVxcdG51bV9zaSA9IHBmLVxcdTAwM2VjYXBzLm51bV92c2kgKyAxO1xcbitcXHRzdHJ1Y3QgbnRtcF91c2VyICp1c2VyO1xcbitcXHR1MzIgdmFsLCBlbnRyeV9pZDtcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcdGludCBpO1xcbiBcXG4gXFx0dmFsID0gZW5ldGNfcG9ydF9yZChodywgRU5FVEM0X1BTSVBNTVIpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX3NpOyBpKyspIHtcXG5AQCAtNTAsMzEgKzQ5LDM4IEBAIHN0YXRpYyBpbnQgZW5ldGNfbWFjX2ZpbHRlcl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSlcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9zaTsgaSsrKVxcbiBcXHRcXHRlbmV0Y19zaG93X3NpX21hY19oYXNoX2ZpbHRlcihzLCBpKTtcXG4gXFxuLVxcdGlmICghcGYtXFx1MDAzZW51bV9tZmUpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHR1c2VyID0gXFx1MDAyNnBmLVxcdTAwM2VzaS1cXHUwMDNlbnRtcF91c2VyO1xcbitcXHRydG5sX2xvY2soKTtcXG4rXFxuK1xcdGlmIChiaXRtYXBfZW1wdHkodXNlci1cXHUwMDNlbWFmdF9laWRfYml0bWFwLCB1c2VyLVxcdTAwM2VtYWZ0X251bV9lbnRyaWVzKSlcXG4rXFx0XFx0Z290byB1bmxvY2tfcnRubDtcXG4gXFxuIFxcdC8qIE1BQyBhZGRyZXNzIGZpbHRlciB0YWJsZSAqL1xcbiBcXHRzZXFfcHV0cyhzLCBcXFwiTUFDIGFkZHJlc3MgZmlsdGVyIHRhYmxlXFxcXG5cXFwiKTtcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBmLVxcdTAwM2VudW1fbWZlOyBpKyspIHtcXG4rXFx0Zm9yX2VhY2hfc2V0X2JpdChlbnRyeV9pZCwgdXNlci1cXHUwMDNlbWFmdF9laWRfYml0bWFwLFxcbitcXHRcXHRcXHQgdXNlci1cXHUwMDNlbWFmdF9udW1fZW50cmllcykge1xcbiBcXHRcXHRtZW1zZXQoXFx1MDAyNm1hZnQsIDAsIHNpemVvZihtYWZ0KSk7XFxuLVxcdFxcdGVyciA9IG50bXBfbWFmdF9xdWVyeV9lbnRyeShcXHUwMDI2c2ktXFx1MDAzZW50bXBfdXNlciwgaSwgXFx1MDAyNm1hZnQpO1xcbitcXHRcXHRlcnIgPSBudG1wX21hZnRfcXVlcnlfZW50cnkodXNlciwgZW50cnlfaWQsIFxcdTAwMjZtYWZ0KTtcXG4gXFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0XFx0Z290byB1bmxvY2tfcnRubDtcXG4gXFxuLVxcdFxcdHNlcV9wcmludGYocywgXFxcIkVudHJ5ICVkLCBNQUM6ICVwTSwgU0kgYml0bWFwOiAweCUwNHhcXFxcblxcXCIsIGksXFxuLVxcdFxcdFxcdCAgIG1hZnQua2V5ZS5tYWNfYWRkciwgbGUxNl90b19jcHUobWFmdC5jZmdlLnNpX2JpdG1hcCkpO1xcbitcXHRcXHRzZXFfcHJpbnRmKHMsIFxcXCJFbnRyeSAlZCwgTUFDOiAlcE0sIFNJIGJpdG1hcDogMHglMDR4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBlbnRyeV9pZCwgbWFmdC5rZXllLm1hY19hZGRyLFxcbitcXHRcXHRcXHQgICBsZTE2X3RvX2NwdShtYWZ0LmNmZ2Uuc2lfYml0bWFwKSk7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiAwO1xcbit1bmxvY2tfcnRubDpcXG4rXFx0cnRubF91bmxvY2soKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gREVGSU5FX1NIT1dfQVRUUklCVVRFKGVuZXRjX21hY19maWx0ZXIpO1xcbiBcXG4gdm9pZCBlbmV0Y19jcmVhdGVfZGVidWdmcyhzdHJ1Y3QgZW5ldGNfc2kgKnNpKVxcbiB7XFxuLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gc2ktXFx1MDAzZW5kZXY7XFxuIFxcdHN0cnVjdCBkZW50cnkgKnJvb3Q7XFxuIFxcbi1cXHRyb290ID0gZGVidWdmc19jcmVhdGVfZGlyKG5ldGRldl9uYW1lKG5kZXYpLCBOVUxMKTtcXG4rXFx0cm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihwY2lfbmFtZShzaS1cXHUwMDNlcGRldiksIE5VTEwpO1xcbiBcXHRpZiAoSVNfRVJSKHJvb3QpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X2h3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X2h3LmhcXG5pbmRleCBmMTg0Mzc1NTZhMGVlMi4uMDkwMjVlN2EyYTNhZWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9ody5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9ody5oXFxuQEAgLTY5LDggKzY5LDYgQEBcXG4gXFxuIC8qIFBvcnQgU3RhdGlvbiBpbnRlcmZhY2UgcHJvbWlzY3VvdXMgTUFDIG1vZGUgcmVnaXN0ZXIgKi9cXG4gI2RlZmluZSBFTkVUQzRfUFNJUE1NUlxcdFxcdFxcdDB4MjAwXFxuLSNkZWZpbmUgIFBTSVBNTVJfU0lfTUFDX1VQKGEpXFx0XFx0QklUKGEpIC8qIGEgPSBTSSBpbmRleCAqL1xcbi0jZGVmaW5lICBQU0lQTU1SX1NJX01BQ19NUChhKVxcdFxcdEJJVCgoYSkgKyAxNilcXG4gXFxuIC8qIFBvcnQgU3RhdGlvbiBpbnRlcmZhY2UgcHJvbWlzY3VvdXMgVkxBTiBtb2RlIHJlZ2lzdGVyICovXFxuICNkZWZpbmUgRU5FVEM0X1BTSVBWTVJcXHRcXHRcXHQweDIwNFxcbkBAIC0xMzcsNyArMTM1LDYgQEBcXG4gI2RlZmluZSBFTkVUQzRfUFNJVkhGUjEoYSlcXHRcXHQoKGEpICogMHg4MCArIDB4MjA2NClcXG4gXFxuICNkZWZpbmUgRU5FVEM0X1BNQ0FQUlxcdFxcdFxcdDB4NDAwNFxcbi0jZGVmaW5lICBQTUNBUFJfSERcXHRcXHRcXHRCSVQoOClcXG4gI2RlZmluZSAgUE1DQVBSX0ZQXFx0XFx0XFx0R0VOTUFTSygxMCwgOSlcXG4gXFxuIC8qIFBvcnQgY2FwYWJpbGl0eSByZWdpc3RlciAqL1xcbkBAIC0xNTAsNyArMTQ3LDcgQEBcXG4gI2RlZmluZSAgUENSX0wyRE9TRVxcdFxcdFxcdEJJVCg0KVxcbiAjZGVmaW5lICBQQ1JfVElNRVJfQ1NcXHRcXHRcXHRCSVQoOClcXG4gI2RlZmluZSAgUENSX1BTUEVFRFxcdFxcdFxcdEdFTk1BU0soMjksIDE2KVxcbi0jZGVmaW5lICBQQ1JfUFNQRUVEX1ZBTChzcGVlZClcXHRcXHQoKChzcGVlZCkgLyAxMCAtIDEpIFxcdTAwM2NcXHUwMDNjIDE2KVxcbisjZGVmaW5lICBQQ1JfUFNQRUVEX1ZBTChzKVxcdFxcdEZJRUxEX1BSRVAoUENSX1BTUEVFRCwgKChzKSAvIDEwIC0gMSkpXFxuIFxcbiAvKiBQb3J0IE1BQyBhZGRyZXNzIHJlZ2lzdGVyIDAvMSAqL1xcbiAjZGVmaW5lIEVORVRDNF9QTUFSMFxcdFxcdFxcdDB4NDAyMFxcbkBAIC0yMDAsNyArMTk3LDYgQEBcXG4gI2RlZmluZSAgUE1fQ01EX0NGR19DTlRfRlJNX0VOXFx0XFx0QklUKDEzKVxcbiAjZGVmaW5lICBQTV9DTURfQ0ZHX1RYUFxcdFxcdFxcdEJJVCgxNSlcXG4gI2RlZmluZSAgUE1fQ01EX0NGR19TRU5EX0lETEVcXHRcXHRCSVQoMTYpXFxuLSNkZWZpbmUgIFBNX0NNRF9DRkdfSERfRkNFTlxcdFxcdEJJVCgxOClcXG4gI2RlZmluZSAgUE1fQ01EX0NGR19TRkRcXHRcXHRcXHRCSVQoMjEpXFxuICNkZWZpbmUgIFBNX0NNRF9DRkdfVFhfRkxVU0hcXHRcXHRCSVQoMjIpXFxuICNkZWZpbmUgIFBNX0NNRF9DRkdfVFhfTE9XUF9FTlxcdFxcdEJJVCgyMylcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jXFxuaW5kZXggNDM3YTE1YmJiNDdiYTguLmZjZmJhYmIyOWQyMmU0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuY1xcbkBAIC0yMywxOCArMjMsMTEgQEAgc3RhdGljIHZvaWQgZW5ldGM0X2dldF9wb3J0X2NhcHMoc3RydWN0IGVuZXRjX3BmICpwZilcXG4gXFx0dTMyIHZhbDtcXG4gXFxuIFxcdHZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDNF9FQ0FQUjEpO1xcbi1cXHRwZi1cXHUwMDNlY2Fwcy5udW1fdnNpID0gKHZhbCBcXHUwMDI2IEVDQVBSMV9OVU1fVlNJKSBcXHUwMDNlXFx1MDAzZSAyNDtcXG4gXFx0cGYtXFx1MDAzZWNhcHMubnVtX21zaXggPSAoKHZhbCBcXHUwMDI2IEVDQVBSMV9OVU1fTVNJWCkgXFx1MDAzZVxcdTAwM2UgMTIpICsgMTtcXG4gXFxuIFxcdHZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDNF9FQ0FQUjIpO1xcbiBcXHRwZi1cXHUwMDNlY2Fwcy5udW1fcnhfYmRyID0gKHZhbCBcXHUwMDI2IEVDQVBSMl9OVU1fUlhfQkRSKSBcXHUwMDNlXFx1MDAzZSAxNjtcXG4gXFx0cGYtXFx1MDAzZWNhcHMubnVtX3R4X2JkciA9IHZhbCBcXHUwMDI2IEVDQVBSMl9OVU1fVFhfQkRSO1xcbi1cXG4tXFx0dmFsID0gZW5ldGNfcG9ydF9yZChodywgRU5FVEM0X1BNQ0FQUik7XFxuLVxcdHBmLVxcdTAwM2VjYXBzLmhhbGZfZHVwbGV4ID0gKHZhbCBcXHUwMDI2IFBNQ0FQUl9IRCkgPyAxIDogMDtcXG4tXFxuLVxcdHZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDNF9QU0lNQUZDQVBSKTtcXG4tXFx0cGYtXFx1MDAzZWNhcHMubWFjX2ZpbHRlcl9udW0gPSB2YWwgXFx1MDAyNiBQU0lNQUZDQVBSX05VTV9NQUNfQUZURTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgZW5ldGM0X2dldF9wc2lfaHdfZmVhdHVyZXMoc3RydWN0IGVuZXRjX3NpICpzaSlcXG5AQCAtNzUsMzggKzY4LDYgQEAgc3RhdGljIHZvaWQgZW5ldGM0X3BmX2dldF9zaV9wcmltYXJ5X21hYyhzdHJ1Y3QgZW5ldGNfaHcgKmh3LCBpbnQgc2ksXFxuIFxcdHB1dF91bmFsaWduZWRfbGUxNihsb3dlciwgYWRkciArIDQpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBlbmV0YzRfcGZfc2V0X3NpX21hY19wcm9taXNjKHN0cnVjdCBlbmV0Y19odyAqaHcsIGludCBzaSxcXG4tXFx0XFx0XFx0XFx0XFx0IGJvb2wgdWNfcHJvbWlzYywgYm9vbCBtY19wcm9taXNjKVxcbi17XFxuLVxcdHUzMiB2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBFTkVUQzRfUFNJUE1NUik7XFxuLVxcbi1cXHRpZiAodWNfcHJvbWlzYylcXG4tXFx0XFx0dmFsIHw9IFBTSVBNTVJfU0lfTUFDX1VQKHNpKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHR2YWwgXFx1MDAyNj0gflBTSVBNTVJfU0lfTUFDX1VQKHNpKTtcXG4tXFxuLVxcdGlmIChtY19wcm9taXNjKVxcbi1cXHRcXHR2YWwgfD0gUFNJUE1NUl9TSV9NQUNfTVAoc2kpO1xcbi1cXHRlbHNlXFxuLVxcdFxcdHZhbCBcXHUwMDI2PSB+UFNJUE1NUl9TSV9NQUNfTVAoc2kpO1xcbi1cXG4tXFx0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSVBNTVIsIHZhbCk7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX2h3ICpodywgaW50IHNpLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgdTY0IGhhc2gpXFxuLXtcXG4tXFx0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSVVNSEZSMChzaSksIGxvd2VyXzMyX2JpdHMoaGFzaCkpO1xcbi1cXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJVU1IRlIxKHNpKSwgdXBwZXJfMzJfYml0cyhoYXNoKSk7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfc2lfbWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX2h3ICpodywgaW50IHNpLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgdTY0IGhhc2gpXFxuLXtcXG4tXFx0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSU1NSEZSMChzaSksIGxvd2VyXzMyX2JpdHMoaGFzaCkpO1xcbi1cXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJTU1IRlIxKHNpKSwgdXBwZXJfMzJfYml0cyhoYXNoKSk7XFxuLX1cXG4tXFxuIHN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfbG9vcGJhY2soc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgZW4pXFxuIHtcXG4gXFx0c3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbkBAIC0xMjQsMzQgKzg1LDQ3IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfbG9vcGJhY2soc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgZW4pXFxuIFxcbiBzdGF0aWMgdm9pZCBlbmV0YzRfcGZfY2xlYXJfbWFmdF9lbnRyaWVzKHN0cnVjdCBlbmV0Y19wZiAqcGYpXFxuIHtcXG4tXFx0aW50IGk7XFxuK1xcdHN0cnVjdCBudG1wX3VzZXIgKnVzZXIgPSBcXHUwMDI2cGYtXFx1MDAzZXNpLVxcdTAwM2VudG1wX3VzZXI7XFxuK1xcdHUzMiBlbnRyeV9pZDtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwZi1cXHUwMDNlbnVtX21mZTsgaSsrKVxcbi1cXHRcXHRudG1wX21hZnRfZGVsZXRlX2VudHJ5KFxcdTAwMjZwZi1cXHUwMDNlc2ktXFx1MDAzZW50bXBfdXNlciwgaSk7XFxuLVxcbi1cXHRwZi1cXHUwMDNlbnVtX21mZSA9IDA7XFxuK1xcdGZvcl9lYWNoX3NldF9iaXQoZW50cnlfaWQsIHVzZXItXFx1MDAzZW1hZnRfZWlkX2JpdG1hcCxcXG4rXFx0XFx0XFx0IHVzZXItXFx1MDAzZW1hZnRfbnVtX2VudHJpZXMpIHtcXG4rXFx0XFx0aWYgKCFudG1wX21hZnRfZGVsZXRlX2VudHJ5KHVzZXIsIGVudHJ5X2lkKSlcXG4rXFx0XFx0XFx0bnRtcF9jbGVhcl9laWRfYml0bWFwKHVzZXItXFx1MDAzZW1hZnRfZWlkX2JpdG1hcCwgZW50cnlfaWQpO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZW5ldGM0X3BmX2FkZF9tYWZ0X2VudHJpZXMoc3RydWN0IGVuZXRjX3BmICpwZixcXG4tXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGVuZXRjX21hY19hZGRyICptYWMsXFxuLVxcdFxcdFxcdFxcdCAgICAgIGludCBtYWNfY250KVxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMpXFxuIHtcXG4rXFx0c3RydWN0IG50bXBfdXNlciAqdXNlciA9IFxcdTAwMjZwZi1cXHUwMDNlc2ktXFx1MDAzZW50bXBfdXNlcjtcXG4rXFx0aW50IG1hY19jbnQgPSBuZXRkZXZfaHdfYWRkcl9saXN0X2NvdW50KHVjKTtcXG4gXFx0c3RydWN0IG1hZnRfZW50cnlfZGF0YSBtYWZ0ID0ge307XFxuK1xcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XFxuK1xcdHUzMiBhdmFpbGFibGVfZW50cmllcztcXG4gXFx0dTE2IHNpX2JpdCA9IEJJVCgwKTtcXG4tXFx0aW50IGksIGVycjtcXG4rXFx0dTMyIGVudHJ5X2lkO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0YXZhaWxhYmxlX2VudHJpZXMgPSB1c2VyLVxcdTAwM2VtYWZ0X251bV9lbnRyaWVzIC1cXG4rXFx0XFx0XFx0ICAgIGJpdG1hcF93ZWlnaHQodXNlci1cXHUwMDNlbWFmdF9laWRfYml0bWFwLFxcbitcXHRcXHRcXHRcXHRcXHQgIHVzZXItXFx1MDAzZW1hZnRfbnVtX2VudHJpZXMpO1xcbitcXG4rXFx0aWYgKG1hY19jbnQgXFx1MDAzZSBhdmFpbGFibGVfZW50cmllcylcXG4rXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuIFxcbiBcXHRtYWZ0LmNmZ2Uuc2lfYml0bWFwID0gY3B1X3RvX2xlMTYoc2lfYml0KTtcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG1hY19jbnQ7IGkrKykge1xcbi1cXHRcXHRldGhlcl9hZGRyX2NvcHkobWFmdC5rZXllLm1hY19hZGRyLCBtYWNbaV0uYWRkcik7XFxuLVxcdFxcdGVyciA9IG50bXBfbWFmdF9hZGRfZW50cnkoXFx1MDAyNnBmLVxcdTAwM2VzaS1cXHUwMDNlbnRtcF91c2VyLCBpLCBcXHUwMDI2bWFmdCk7XFxuK1xcdG5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIHVjKSB7XFxuK1xcdFxcdGVudHJ5X2lkID0gbnRtcF9sb29rdXBfZnJlZV9laWQodXNlci1cXHUwMDNlbWFmdF9laWRfYml0bWFwLFxcbitcXHRcXHRcXHRcXHRcXHRcXHR1c2VyLVxcdTAwM2VtYWZ0X251bV9lbnRyaWVzKTtcXG4rXFx0XFx0ZXRoZXJfYWRkcl9jb3B5KG1hZnQua2V5ZS5tYWNfYWRkciwgaGEtXFx1MDAzZWFkZHIpO1xcbitcXHRcXHRlcnIgPSBudG1wX21hZnRfYWRkX2VudHJ5KHVzZXIsIGVudHJ5X2lkLCBcXHUwMDI2bWFmdCk7XFxuIFxcdFxcdGlmICh1bmxpa2VseShlcnIpKSB7XFxuLVxcdFxcdFxcdHBmLVxcdTAwM2VudW1fbWZlID0gaTtcXG4rXFx0XFx0XFx0bnRtcF9jbGVhcl9laWRfYml0bWFwKHVzZXItXFx1MDAzZW1hZnRfZWlkX2JpdG1hcCwgZW50cnlfaWQpO1xcbiBcXHRcXHRcXHRnb3RvIGNsZWFyX21hZnRfZW50cmllcztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRwZi1cXHUwMDNlbnVtX21mZSA9IG1hY19jbnQ7XFxuLVxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIGNsZWFyX21hZnRfZW50cmllczpcXG5AQCAtMTYwLDk3ICsxMzQsNzAgQEAgc3RhdGljIGludCBlbmV0YzRfcGZfYWRkX21hZnRfZW50cmllcyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLFxcbiBcXHRyZXR1cm4gIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBlbmV0YzRfcGZfc2V0X3VjX2V4YWN0X2ZpbHRlcihzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxcbitzdGF0aWMgdm9pZCBlbmV0YzRfcGZfc2V0X3VjX2hhc2hfZmlsdGVyKHN0cnVjdCBlbmV0Y19wZiAqcGYsXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMpXFxuIHtcXG4tXFx0aW50IG1heF9udW1fbWZlID0gcGYtXFx1MDAzZWNhcHMubWFjX2ZpbHRlcl9udW07XFxuLVxcdHN0cnVjdCBlbmV0Y19tYWNfZmlsdGVyIG1hY19maWx0ZXIgPSB7fTtcXG4tXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwZi1cXHUwMDNlc2ktXFx1MDAzZW5kZXY7XFxuLVxcdHN0cnVjdCBlbmV0Y19odyAqaHcgPSBcXHUwMDI2cGYtXFx1MDAzZXNpLVxcdTAwM2VodztcXG4tXFx0c3RydWN0IGVuZXRjX21hY19hZGRyICptYWNfdGJsO1xcbitcXHRzdHJ1Y3QgZW5ldGNfbWFjX2ZpbHRlciAqbWFjX2ZpbHRlciA9IFxcdTAwMjZwZi1cXHUwMDNlbWFjX2ZpbHRlcltVQ107XFxuIFxcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XFxuLVxcdGludCBpID0gMCwgZXJyO1xcbi1cXHRpbnQgbWFjX2NudDtcXG4rXFx0dTY0IGhhc2g7XFxuIFxcbi1cXHRuZXRpZl9hZGRyX2xvY2tfYmgobmRldik7XFxuK1xcdGVuZXRjX3Jlc2V0X21hY19hZGRyX2ZpbHRlcihtYWNfZmlsdGVyKTtcXG4rXFx0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgdWMpXFxuK1xcdFxcdGVuZXRjX2FkZF9tYWNfYWRkcl9odF9maWx0ZXIobWFjX2ZpbHRlciwgaGEtXFx1MDAzZWFkZHIpO1xcbitcXG4rXFx0Yml0bWFwX3RvX2FycjY0KFxcdTAwMjZoYXNoLCBtYWNfZmlsdGVyLVxcdTAwM2VtYWNfaGFzaF90YWJsZSxcXG4rXFx0XFx0XFx0RU5FVENfTUFERFJfSEFTSF9UQkxfU1opO1xcbitcXHRlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIocGYtXFx1MDAzZXNpLCAwLCBoYXNoKTtcXG4rfVxcbiBcXG4tXFx0bWFjX2NudCA9IG5ldGRldl91Y19jb3VudChuZGV2KTtcXG4tXFx0aWYgKCFtYWNfY250KSB7XFxuLVxcdFxcdG5ldGlmX2FkZHJfdW5sb2NrX2JoKG5kZXYpO1xcbitzdGF0aWMgaW50IGVuZXRjNF9wZl9zZXRfdWNfZXhhY3RfZmlsdGVyKHN0cnVjdCBlbmV0Y19wZiAqcGYsXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMpXFxuK3tcXG4rXFx0c3RydWN0IGVuZXRjX3NpICpzaSA9IHBmLVxcdTAwM2VzaTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmIChuZXRkZXZfaHdfYWRkcl9saXN0X2VtcHR5KHVjKSkge1xcbiBcXHRcXHQvKiBjbGVhciBib3RoIE1BQyBoYXNoIGFuZCBleGFjdCBmaWx0ZXJzICovXFxuLVxcdFxcdGVuZXRjNF9wZl9zZXRfc2lfdWNfaGFzaF9maWx0ZXIoaHcsIDAsIDApO1xcbitcXHRcXHRlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc2ksIDAsIDApO1xcbiBcXHRcXHRlbmV0YzRfcGZfY2xlYXJfbWFmdF9lbnRyaWVzKHBmKTtcXG4gXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAobWFjX2NudCBcXHUwMDNlIG1heF9udW1fbWZlKSB7XFxuLVxcdFxcdGVyciA9IC1FTk9TUEM7XFxuLVxcdFxcdGdvdG8gdW5sb2NrX25ldGlmX2FkZHI7XFxuLVxcdH1cXG4tXFxuLVxcdG1hY190YmwgPSBremFsbG9jX29ianMoKm1hY190YmwsIG1hY19jbnQsIEdGUF9BVE9NSUMpO1xcbi1cXHRpZiAoIW1hY190YmwpIHtcXG4tXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4tXFx0XFx0Z290byB1bmxvY2tfbmV0aWZfYWRkcjtcXG4tXFx0fVxcbi1cXG4tXFx0bmV0ZGV2X2Zvcl9lYWNoX3VjX2FkZHIoaGEsIG5kZXYpIHtcXG4tXFx0XFx0ZW5ldGNfYWRkX21hY19hZGRyX2h0X2ZpbHRlcihcXHUwMDI2bWFjX2ZpbHRlciwgaGEtXFx1MDAzZWFkZHIpO1xcbi1cXHRcXHRldGhlcl9hZGRyX2NvcHkobWFjX3RibFtpKytdLmFkZHIsIGhhLVxcdTAwM2VhZGRyKTtcXG4tXFx0fVxcbi1cXG4tXFx0bmV0aWZfYWRkcl91bmxvY2tfYmgobmRldik7XFxuLVxcbi1cXHQvKiBTZXQgdGVtcG9yYXJ5IHVuaWNhc3QgaGFzaCBmaWx0ZXJzIGluIGNhc2Ugb2YgUnggbG9zcyB3aGVuXFxuK1xcdC8qIFNldCB0ZW1wb3JhcnkgdW5pY2FzdCBoYXNoIGZpbHRlciBpbiBjYXNlIG9mIFJ4IGxvc3Mgd2hlblxcbiBcXHQgKiB1cGRhdGluZyBNQUMgYWRkcmVzcyBmaWx0ZXIgdGFibGVcXG4gXFx0ICovXFxuLVxcdGVuZXRjNF9wZl9zZXRfc2lfdWNfaGFzaF9maWx0ZXIoaHcsIDAsICptYWNfZmlsdGVyLm1hY19oYXNoX3RhYmxlKTtcXG4rXFx0ZW5ldGM0X3BmX3NldF91Y19oYXNoX2ZpbHRlcihwZiwgdWMpO1xcbiBcXHRlbmV0YzRfcGZfY2xlYXJfbWFmdF9lbnRyaWVzKHBmKTtcXG4gXFxuLVxcdGlmICghZW5ldGM0X3BmX2FkZF9tYWZ0X2VudHJpZXMocGYsIG1hY190YmwsIGkpKVxcbi1cXHRcXHRlbmV0YzRfcGZfc2V0X3NpX3VjX2hhc2hfZmlsdGVyKGh3LCAwLCAwKTtcXG4tXFxuLVxcdGtmcmVlKG1hY190YmwpO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLVxcbi11bmxvY2tfbmV0aWZfYWRkcjpcXG4tXFx0bmV0aWZfYWRkcl91bmxvY2tfYmgobmRldik7XFxuK1xcdGVyciA9IGVuZXRjNF9wZl9hZGRfbWFmdF9lbnRyaWVzKHBmLCB1Yyk7XFxuK1xcdGlmICghZXJyKSB7XFxuK1xcdFxcdGVuZXRjX3Jlc2V0X21hY19hZGRyX2ZpbHRlcihcXHUwMDI2cGYtXFx1MDAzZW1hY19maWx0ZXJbVUNdKTtcXG4rXFx0XFx0ZW5ldGNfc2V0X3NpX3VjX2hhc2hfZmlsdGVyKHNpLCAwLCAwKTtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9tYWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3BmICpwZiwgaW50IHR5cGUpXFxuK3N0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfbWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3BmICpwZixcXG4rXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICptYylcXG4ge1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBmLVxcdTAwM2VzaS1cXHUwMDNlbmRldjtcXG4tXFx0c3RydWN0IGVuZXRjX21hY19maWx0ZXIgKm1hY19maWx0ZXI7XFxuLVxcdHN0cnVjdCBlbmV0Y19odyAqaHcgPSBcXHUwMDI2cGYtXFx1MDAzZXNpLVxcdTAwM2VodztcXG4rXFx0c3RydWN0IGVuZXRjX21hY19maWx0ZXIgKm1hY19maWx0ZXIgPSBcXHUwMDI2cGYtXFx1MDAzZW1hY19maWx0ZXJbTUNdO1xcbiBcXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xcbitcXHR1NjQgaGFzaDtcXG4gXFxuLVxcdG5ldGlmX2FkZHJfbG9ja19iaChuZGV2KTtcXG4tXFx0aWYgKHR5cGUgXFx1MDAyNiBFTkVUQ19NQUNfRklMVEVSX1RZUEVfVUMpIHtcXG4tXFx0XFx0bWFjX2ZpbHRlciA9IFxcdTAwMjZwZi1cXHUwMDNlbWFjX2ZpbHRlcltVQ107XFxuLVxcdFxcdGVuZXRjX3Jlc2V0X21hY19hZGRyX2ZpbHRlcihtYWNfZmlsdGVyKTtcXG4tXFx0XFx0bmV0ZGV2X2Zvcl9lYWNoX3VjX2FkZHIoaGEsIG5kZXYpXFxuLVxcdFxcdFxcdGVuZXRjX2FkZF9tYWNfYWRkcl9odF9maWx0ZXIobWFjX2ZpbHRlciwgaGEtXFx1MDAzZWFkZHIpO1xcbi1cXG4tXFx0XFx0ZW5ldGM0X3BmX3NldF9zaV91Y19oYXNoX2ZpbHRlcihodywgMCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0Km1hY19maWx0ZXItXFx1MDAzZW1hY19oYXNoX3RhYmxlKTtcXG4tXFx0fVxcbitcXHRlbmV0Y19yZXNldF9tYWNfYWRkcl9maWx0ZXIobWFjX2ZpbHRlcik7XFxuK1xcdG5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIG1jKVxcbitcXHRcXHRlbmV0Y19hZGRfbWFjX2FkZHJfaHRfZmlsdGVyKG1hY19maWx0ZXIsIGhhLVxcdTAwM2VhZGRyKTtcXG4gXFxuLVxcdGlmICh0eXBlIFxcdTAwMjYgRU5FVENfTUFDX0ZJTFRFUl9UWVBFX01DKSB7XFxuLVxcdFxcdG1hY19maWx0ZXIgPSBcXHUwMDI2cGYtXFx1MDAzZW1hY19maWx0ZXJbTUNdO1xcbi1cXHRcXHRlbmV0Y19yZXNldF9tYWNfYWRkcl9maWx0ZXIobWFjX2ZpbHRlcik7XFxuLVxcdFxcdG5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBuZGV2KVxcbi1cXHRcXHRcXHRlbmV0Y19hZGRfbWFjX2FkZHJfaHRfZmlsdGVyKG1hY19maWx0ZXIsIGhhLVxcdTAwM2VhZGRyKTtcXG4tXFxuLVxcdFxcdGVuZXRjNF9wZl9zZXRfc2lfbWNfaGFzaF9maWx0ZXIoaHcsIDAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCptYWNfZmlsdGVyLVxcdTAwM2VtYWNfaGFzaF90YWJsZSk7XFxuLVxcdH1cXG4tXFx0bmV0aWZfYWRkcl91bmxvY2tfYmgobmRldik7XFxuK1xcdGJpdG1hcF90b19hcnI2NChcXHUwMDI2aGFzaCwgbWFjX2ZpbHRlci1cXHUwMDNlbWFjX2hhc2hfdGFibGUsXFxuK1xcdFxcdFxcdEVORVRDX01BRERSX0hBU0hfVEJMX1NaKTtcXG4rXFx0ZW5ldGNfc2V0X3NpX21jX2hhc2hfZmlsdGVyKHBmLVxcdTAwM2VzaSwgMCwgaGFzaCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfbWFjX2ZpbHRlcihzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBpbnQgdHlwZSlcXG4rc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9tYWNfZmlsdGVyKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGludCB0eXBlLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp1YyxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpXFxuIHtcXG4gXFx0LyogQ3VycmVudGx5LCB0aGUgTUFDIGFkZHJlc3MgZmlsdGVyIHRhYmxlIChNQUZUKSBvbmx5IGhhcyA0IGVudHJpZXMsXFxuIFxcdCAqIGFuZCBtdWx0aXBsZSBtdWx0aWNhc3QgYWRkcmVzc2VzIGZvciBmaWx0ZXJpbmcgd2lsbCBiZSBjb25maWd1cmVkXFxuQEAgLTI1OCwxNSArMjA1LDE2IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfbWFjX2ZpbHRlcihzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBpbnQgdHlwZSlcXG4gXFx0ICogdW5pY2FzdCBmaWx0ZXJpbmcuIElmIHRoZSBudW1iZXIgb2YgdW5pY2FzdCBhZGRyZXNzZXMgZXhjZWVkcyB0aGVcXG4gXFx0ICogdGFibGUgY2FwYWNpdHksIHRoZSBNQUMgaGFzaCBmaWx0ZXIgd2lsbCBiZSB1c2VkLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHR5cGUgXFx1MDAyNiBFTkVUQ19NQUNfRklMVEVSX1RZUEVfVUMgXFx1MDAyNlxcdTAwMjYgZW5ldGM0X3BmX3NldF91Y19leGFjdF9maWx0ZXIocGYpKSB7XFxuK1xcdGlmICh0eXBlIFxcdTAwMjYgRU5FVENfTUFDX0ZJTFRFUl9UWVBFX1VDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBlbmV0YzRfcGZfc2V0X3VjX2V4YWN0X2ZpbHRlcihwZiwgdWMpKSB7XFxuIFxcdFxcdC8qIEZhbGwgYmFjayB0byB0aGUgTUFDIGhhc2ggZmlsdGVyICovXFxuLVxcdFxcdGVuZXRjNF9wZl9zZXRfbWFjX2hhc2hfZmlsdGVyKHBmLCBFTkVUQ19NQUNfRklMVEVSX1RZUEVfVUMpO1xcbitcXHRcXHRlbmV0YzRfcGZfc2V0X3VjX2hhc2hfZmlsdGVyKHBmLCB1Yyk7XFxuIFxcdFxcdC8qIENsZWFyIHRoZSBvbGQgTUFDIGV4YWN0IGZpbHRlciAqL1xcbiBcXHRcXHRlbmV0YzRfcGZfY2xlYXJfbWFmdF9lbnRyaWVzKHBmKTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHR5cGUgXFx1MDAyNiBFTkVUQ19NQUNfRklMVEVSX1RZUEVfTUMpXFxuLVxcdFxcdGVuZXRjNF9wZl9zZXRfbWFjX2hhc2hfZmlsdGVyKHBmLCBFTkVUQ19NQUNfRklMVEVSX1RZUEVfTUMpO1xcbitcXHRcXHRlbmV0YzRfcGZfc2V0X21jX2hhc2hfZmlsdGVyKHBmLCBtYyk7XFxuIH1cXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZW5ldGNfcGZfb3BzIGVuZXRjNF9wZl9vcHMgPSB7XFxuQEAgLTMwNiwzNCArMjU0LDM1IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9kZWZhdWx0X3JpbmdzX2FsbG9jYXRpb24oc3RydWN0IGVuZXRjX3BmICpwZilcXG4ge1xcbiBcXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXFx1MDAyNnBmLVxcdTAwM2VzaS1cXHUwMDNlaHc7XFxuIFxcdHUzMiBudW1fcnhfYmRyLCBudW1fdHhfYmRyLCB2YWw7XFxuK1xcdGludCBudW1fdmZzID0gcGYtXFx1MDAzZXRvdGFsX3ZmcztcXG4gXFx0dTMyIHZmX3R4X2JkciwgdmZfcnhfYmRyO1xcbiBcXHRpbnQgaSwgcnhfcmVtLCB0eF9yZW07XFxuIFxcbi1cXHRpZiAocGYtXFx1MDAzZWNhcHMubnVtX3J4X2JkciBcXHUwMDNjIEVORVRDX1NJX01BWF9SSU5HX05VTSArIHBmLVxcdTAwM2VjYXBzLm51bV92c2kpXFxuLVxcdFxcdG51bV9yeF9iZHIgPSBwZi1cXHUwMDNlY2Fwcy5udW1fcnhfYmRyIC0gcGYtXFx1MDAzZWNhcHMubnVtX3ZzaTtcXG4rXFx0aWYgKHBmLVxcdTAwM2VjYXBzLm51bV9yeF9iZHIgXFx1MDAzYyBFTkVUQ19TSV9NQVhfUklOR19OVU0gKyBudW1fdmZzKVxcbitcXHRcXHRudW1fcnhfYmRyID0gcGYtXFx1MDAzZWNhcHMubnVtX3J4X2JkciAtIG51bV92ZnM7XFxuIFxcdGVsc2VcXG4gXFx0XFx0bnVtX3J4X2JkciA9IEVORVRDX1NJX01BWF9SSU5HX05VTTtcXG4gXFxuLVxcdGlmIChwZi1cXHUwMDNlY2Fwcy5udW1fdHhfYmRyIFxcdTAwM2MgRU5FVENfU0lfTUFYX1JJTkdfTlVNICsgcGYtXFx1MDAzZWNhcHMubnVtX3ZzaSlcXG4tXFx0XFx0bnVtX3R4X2JkciA9IHBmLVxcdTAwM2VjYXBzLm51bV90eF9iZHIgLSBwZi1cXHUwMDNlY2Fwcy5udW1fdnNpO1xcbitcXHRpZiAocGYtXFx1MDAzZWNhcHMubnVtX3R4X2JkciBcXHUwMDNjIEVORVRDX1NJX01BWF9SSU5HX05VTSArIG51bV92ZnMpXFxuK1xcdFxcdG51bV90eF9iZHIgPSBwZi1cXHUwMDNlY2Fwcy5udW1fdHhfYmRyIC0gbnVtX3ZmcztcXG4gXFx0ZWxzZVxcbiBcXHRcXHRudW1fdHhfYmRyID0gRU5FVENfU0lfTUFYX1JJTkdfTlVNO1xcbiBcXG4gXFx0dmFsID0gZW5ldGM0X3BzaWNmZ3IwX3ZhbF9jb25zdHJ1Y3QoZmFsc2UsIG51bV90eF9iZHIsIG51bV9yeF9iZHIpO1xcbiBcXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJQ0ZHUjAoMCksIHZhbCk7XFxuIFxcbi1cXHRpZiAoIXBmLVxcdTAwM2VjYXBzLm51bV92c2kpXFxuK1xcdGlmICghbnVtX3ZmcylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0bnVtX3J4X2JkciA9IHBmLVxcdTAwM2VjYXBzLm51bV9yeF9iZHIgLSBudW1fcnhfYmRyO1xcbi1cXHRyeF9yZW0gPSBudW1fcnhfYmRyICUgcGYtXFx1MDAzZWNhcHMubnVtX3ZzaTtcXG4tXFx0bnVtX3J4X2JkciA9IG51bV9yeF9iZHIgLyBwZi1cXHUwMDNlY2Fwcy5udW1fdnNpO1xcbitcXHRyeF9yZW0gPSBudW1fcnhfYmRyICUgbnVtX3ZmcztcXG4rXFx0bnVtX3J4X2JkciA9IG51bV9yeF9iZHIgLyBudW1fdmZzO1xcbiBcXG4gXFx0bnVtX3R4X2JkciA9IHBmLVxcdTAwM2VjYXBzLm51bV90eF9iZHIgLSBudW1fdHhfYmRyO1xcbi1cXHR0eF9yZW0gPSBudW1fdHhfYmRyICUgcGYtXFx1MDAzZWNhcHMubnVtX3ZzaTtcXG4tXFx0bnVtX3R4X2JkciA9IG51bV90eF9iZHIgLyBwZi1cXHUwMDNlY2Fwcy5udW1fdnNpO1xcbitcXHR0eF9yZW0gPSBudW1fdHhfYmRyICUgbnVtX3ZmcztcXG4rXFx0bnVtX3R4X2JkciA9IG51bV90eF9iZHIgLyBudW1fdmZzO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBmLVxcdTAwM2VjYXBzLm51bV92c2k7IGkrKykge1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX3ZmczsgaSsrKSB7XFxuIFxcdFxcdHZmX3R4X2JkciA9IChpIFxcdTAwM2MgdHhfcmVtKSA/IG51bV90eF9iZHIgKyAxIDogbnVtX3R4X2JkcjtcXG4gXFx0XFx0dmZfcnhfYmRyID0gKGkgXFx1MDAzYyByeF9yZW0pID8gbnVtX3J4X2JkciArIDEgOiBudW1fcnhfYmRyO1xcbiBcXHRcXHR2YWwgPSBlbmV0YzRfcHNpY2ZncjBfdmFsX2NvbnN0cnVjdCh0cnVlLCB2Zl90eF9iZHIsIHZmX3J4X2Jkcik7XFxuQEAgLTM0Niw1MyArMjk1LDcwIEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9hbGxvY2F0ZV9zaV9yaW5ncyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxcbiBcXHRlbmV0YzRfZGVmYXVsdF9yaW5nc19hbGxvY2F0aW9uKHBmKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9zaV92bGFuX3Byb21pc2Moc3RydWN0IGVuZXRjX2h3ICpodywgaW50IHNpLCBib29sIGVuKVxcbi17XFxuLVxcdHUzMiB2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBFTkVUQzRfUFNJUFZNUik7XFxuLVxcbi1cXHRpZiAoZW4pXFxuLVxcdFxcdHZhbCB8PSBCSVQoc2kpO1xcbi1cXHRlbHNlXFxuLVxcdFxcdHZhbCBcXHUwMDI2PSB+QklUKHNpKTtcXG4tXFxuLVxcdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lQVk1SLCB2YWwpO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBlbmV0YzRfc2V0X2RlZmF1bHRfc2lfdmxhbl9wcm9taXNjKHN0cnVjdCBlbmV0Y19wZiAqcGYpXFxuLXtcXG4tXFx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFxcdTAwMjZwZi1cXHUwMDNlc2ktXFx1MDAzZWh3O1xcbi1cXHRpbnQgbnVtX3NpID0gcGYtXFx1MDAzZWNhcHMubnVtX3ZzaSArIDE7XFxuLVxcdGludCBpO1xcbi1cXG4tXFx0LyogZW5mb3JjZSBWTEFOIHByb21pc2N1b3VzIG1vZGUgZm9yIGFsbCBTSXMgKi9cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9zaTsgaSsrKVxcbi1cXHRcXHRlbmV0YzRfcGZfc2V0X3NpX3ZsYW5fcHJvbWlzYyhodywgaSwgdHJ1ZSk7XFxuLX1cXG4tXFxuIC8qIEFsbG9jYXRlIHRoZSBudW1iZXIgb2YgTVNJLVggdmVjdG9ycyBmb3IgcGVyIFNJLiAqL1xcbiBzdGF0aWMgdm9pZCBlbmV0YzRfc2V0X3NpX21zaXhfbnVtKHN0cnVjdCBlbmV0Y19wZiAqcGYpXFxuIHtcXG4rXFx0aW50IHZhbGlkX251bV9zaSA9IHBmLVxcdTAwM2V0b3RhbF92ZnMgKyAxO1xcbiBcXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXFx1MDAyNnBmLVxcdTAwM2VzaS1cXHUwMDNlaHc7XFxuLVxcdGludCBpLCBudW1fbXNpeCwgdG90YWxfc2k7XFxuK1xcdGludCBpLCBudW1fbXNpeCwgbnVtX3ZzaTtcXG4gXFx0dTMyIHZhbDtcXG4gXFxuLVxcdHRvdGFsX3NpID0gcGYtXFx1MDAzZWNhcHMubnVtX3ZzaSArIDE7XFxuK1xcdHZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDNF9FQ0FQUjEpO1xcbitcXHRudW1fdnNpID0gRklFTERfR0VUKEVDQVBSMV9OVU1fVlNJLCB2YWwpO1xcbitcXG4rXFx0LyogVGhlIFBTSWFDRkdSMltOVU1fTVNJWF0gaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgTVNJLVggYWxsb2NhdGVkIHRvXFxuK1xcdCAqIHRoZSBTSSBpcyBOVU1fTVNJWCArIDEsIHNvIHRoZSBtaW5pbXVtIG51bWJlciBvZiBNU0ktWCBhbGxvY2F0ZWQgdG9cXG4rXFx0ICogZWFjaCBTSSBpcyAxLiBUaGUgdG90YWwgbnVtYmVyIG9mIE1TSS1YIGFsbG9jYXRlZCB0byBQU0kgYW5kIFZTSXNcXG4rXFx0ICogY2Fubm90IGV4Y2VlZCB0aGUgdG90YWwgbnVtYmVyIG9mIE1TSS1YIG93bmVkIGJ5IHRoaXMgRU5FVEMsIHdoaWNoXFxuK1xcdCAqIGlzIEVDQVBSMVtOVU1fTVNJWF0uIE90aGVyd2lzZSwgd2hlbiBtdWx0aXBsZSBFTkVUQyBpbnN0YW5jZXMgZXhpc3QsXFxuK1xcdCAqIGl0IHdpbGwgYWZmZWN0IG90aGVyIEVORVRDcyB3aG9zZSBNU0ktWCBpbnRlcnJ1cHRzIGNhbm5vdCBiZVxcbitcXHQgKiBnZW5lcmF0ZWQuIFRoaXMgaXMgc2ltaWxhciB0byBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2VzczogdGhlIGFycmF5XFxuK1xcdCAqIGl0c2VsZiBpcyBub3QgYWZmZWN0ZWQsIGJ1dCBhZGphY2VudCBhcnJheXMgd2lsbCBiZSBjb3JydXB0ZWQuXFxuK1xcdCAqXFxuK1xcdCAqIHBmLVxcdTAwM2V0b3RhbF92ZnMgaXMgMCBpZiBDT05GSUdfUENJX0lPViBpcyBkaXNhYmxlZC4gSWYgdGhlIGhhcmR3YXJlXFxuK1xcdCAqIGl0c2VsZiBzdXBwb3J0cyBTUi1JT1YsIHRoZW4gd2hlbiBhbGxvY2F0aW5nIHRoZSBudW1iZXIgb2YgTVNJWHMgdG9cXG4rXFx0ICogdGhlIFNJLCBpdCBtdXN0IGJlIHRha2VuIGludG8gYWNjb3VudCB0aGF0IHRoZSBWU0kgaGFzIGF0IGxlYXN0IDFcXG4rXFx0ICogTVNJWCwgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgTVNJWHMgb2YgYWxsIFNJcyBjYW5ub3QgZXhjZWVkXFxuK1xcdCAqIEVDQVBSMVtOVU1fTVNJWF0uXFxuK1xcdCAqL1xcbitcXHRpZiAoIXBmLVxcdTAwM2V0b3RhbF92ZnMgXFx1MDAyNlxcdTAwMjYgbnVtX3ZzaSkge1xcbitcXHRcXHQvKiBCZWNhdXNlIGVhY2ggU0kgaGFzIGF0IGxlYXN0IG9uZSBNU0lYLCBhbmQgZnJvbSB0aGUgaGFyZHdhcmVcXG4rXFx0XFx0ICogcGVyc3BlY3RpdmUsIHBmLVxcdTAwM2VjYXBzLm51bV9tc2l4IHdpbGwgYWx3YXlzIGJlIGdyZWF0ZXIgdGhhblxcbitcXHRcXHQgKiBudW1fdnNpLiBTbyBudW1fbXNpeCBpcyBhbHdheXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRudW1fbXNpeCA9IHBmLVxcdTAwM2VjYXBzLm51bV9tc2l4IC0gbnVtX3ZzaSAtIDE7XFxuK1xcdFxcdGlmIChudW1fbXNpeCBcXHUwMDNlIFBTSUNGR1IyX05VTV9NU0lYKVxcbitcXHRcXHRcXHRudW1fbXNpeCA9IFBTSUNGR1IyX05VTV9NU0lYO1xcbitcXHRcXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJQ0ZHUjIoMCksIG51bV9tc2l4KTtcXG4gXFxuLVxcdG51bV9tc2l4ID0gcGYtXFx1MDAzZWNhcHMubnVtX21zaXggLyB0b3RhbF9zaSArXFxuLVxcdFxcdCAgIHBmLVxcdTAwM2VjYXBzLm51bV9tc2l4ICUgdG90YWxfc2kgLSAxO1xcbi1cXHR2YWwgPSBudW1fbXNpeCBcXHUwMDI2IFBTSUNGR1IyX05VTV9NU0lYO1xcbi1cXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJQ0ZHUjIoMCksIHZhbCk7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fdnNpOyBpKyspXFxuK1xcdFxcdFxcdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lDRkdSMihpICsgMSksIDApO1xcbiBcXG4tXFx0bnVtX21zaXggPSBwZi1cXHUwMDNlY2Fwcy5udW1fbXNpeCAvIHRvdGFsX3NpIC0gMTtcXG4tXFx0dmFsID0gbnVtX21zaXggXFx1MDAyNiBQU0lDRkdSMl9OVU1fTVNJWDtcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBmLVxcdTAwM2VjYXBzLm51bV92c2k7IGkrKylcXG4tXFx0XFx0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSUNGR1IyKGkgKyAxKSwgdmFsKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHQvKiBMaWtld2lzZSwgZnJvbSB0aGUgaGFyZHdhcmUgcGVyc3BlY3RpdmUgcGYtXFx1MDAzZWNhcHMubnVtX21zaXggaXMgYWx3YXlzXFxuK1xcdCAqIGdyZWF0ZXIgdGhhbiB2YWxpZF9udW1fc2kuIFNvIG51bV9tc2l4IGlzIGFsd2F5cyBncmVhdGVyIHRoYW4gb3JcXG4rXFx0ICogZXF1YWwgdG8gMC5cXG4rXFx0ICovXFxuK1xcdG51bV9tc2l4ID0gcGYtXFx1MDAzZWNhcHMubnVtX21zaXggLyB2YWxpZF9udW1fc2kgK1xcbitcXHRcXHQgICBwZi1cXHUwMDNlY2Fwcy5udW1fbXNpeCAlIHZhbGlkX251bV9zaSAtIDE7XFxuK1xcdGlmIChudW1fbXNpeCBcXHUwMDNlIFBTSUNGR1IyX05VTV9NU0lYKVxcbitcXHRcXHRudW1fbXNpeCA9IFBTSUNGR1IyX05VTV9NU0lYO1xcbitcXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJQ0ZHUjIoMCksIG51bV9tc2l4KTtcXG4rXFxuK1xcdG51bV9tc2l4ID0gcGYtXFx1MDAzZWNhcHMubnVtX21zaXggLyB2YWxpZF9udW1fc2kgLSAxO1xcbitcXHRpZiAobnVtX21zaXggXFx1MDAzZSBQU0lDRkdSMl9OVU1fTVNJWClcXG4rXFx0XFx0bnVtX21zaXggPSBQU0lDRkdSMl9OVU1fTVNJWDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwZi1cXHUwMDNldG90YWxfdmZzOyBpKyspXFxuK1xcdFxcdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lDRkdSMihpICsgMSksIG51bV9tc2l4KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgZW5ldGM0X2VuYWJsZV9hbGxfc2koc3RydWN0IGVuZXRjX3BmICpwZilcXG4ge1xcbiBcXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXFx1MDAyNnBmLVxcdTAwM2VzaS1cXHUwMDNlaHc7XFxuLVxcdGludCBudW1fc2kgPSBwZi1cXHUwMDNlY2Fwcy5udW1fdnNpICsgMTtcXG4rXFx0aW50IG51bV9zaSA9IHBmLVxcdTAwM2V0b3RhbF92ZnMgKyAxO1xcbiBcXHR1MzIgc2lfYml0bWFwID0gMDtcXG4gXFx0aW50IGk7XFxuIFxcbkBAIC00MTIsNyArMzc4LDkgQEAgc3RhdGljIHZvaWQgZW5ldGM0X2NvbmZpZ3VyZV9wb3J0X3NpKHN0cnVjdCBlbmV0Y19wZiAqcGYpXFxuIFxcdC8qIE91dGVyIFZMQU4gdGFnIHdpbGwgYmUgdXNlZCBmb3IgVkxBTiBmaWx0ZXJpbmcgKi9cXG4gXFx0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSVZMQU5GTVIsIFBTSVZMQU5GTVJfVlMpO1xcbiBcXG4tXFx0ZW5ldGM0X3NldF9kZWZhdWx0X3NpX3ZsYW5fcHJvbWlzYyhwZik7XFxuK1xcdC8qIEVuZm9yY2UgVkxBTiBwcm9taXNjdW91cyBtb2RlIGZvciBhbGwgU0lzICovXFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgcGYtXFx1MDAzZXRvdGFsX3ZmcyArIDE7IGkrKylcXG4rXFx0XFx0ZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzYyhwZi1cXHUwMDNlc2ksIGksIHRydWUpO1xcbiBcXG4gXFx0LyogRGlzYWJsZSBTSSBNQUMgbXVsdGljYXN0IFxcdTAwMjYgdW5pY2FzdCBwcm9taXNjdW91cyAqL1xcbiBcXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJUE1NUiwgMCk7XFxuQEAgLTQ1MCwxOCArNDE4LDYwIEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9jb25maWd1cmVfcG9ydChzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxcbiBcXHRlbmV0Y19zZXRfZGVmYXVsdF9yc3Nfa2V5KHBmKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgZW5ldGM0X2dldF9udG1wX2NhcHMoc3RydWN0IGVuZXRjX3NpICpzaSlcXG4re1xcbitcXHRzdHJ1Y3QgbnRtcF91c2VyICp1c2VyID0gXFx1MDAyNnNpLVxcdTAwM2VudG1wX3VzZXI7XFxuK1xcdHN0cnVjdCBlbmV0Y19odyAqaHcgPSBcXHUwMDI2c2ktXFx1MDAzZWh3O1xcbitcXHR1MzIgdmFsO1xcbitcXG4rXFx0dmFsID0gZW5ldGNfcG9ydF9yZChodywgRU5FVEM0X1BTSU1BRkNBUFIpO1xcbitcXHR1c2VyLVxcdTAwM2VtYWZ0X251bV9lbnRyaWVzID0gRklFTERfR0VUKFBTSU1BRkNBUFJfTlVNX01BQ19BRlRFLCB2YWwpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGVuZXRjNF9udG1wX2JpdG1hcF9pbml0KHN0cnVjdCBudG1wX3VzZXIgKnVzZXIpXFxuK3tcXG4rXFx0dXNlci1cXHUwMDNlbWFmdF9laWRfYml0bWFwID0gYml0bWFwX3phbGxvYyh1c2VyLVxcdTAwM2VtYWZ0X251bV9lbnRyaWVzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCF1c2VyLVxcdTAwM2VtYWZ0X2VpZF9iaXRtYXApXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVuZXRjNF9udG1wX2JpdG1hcF9mcmVlKHN0cnVjdCBudG1wX3VzZXIgKnVzZXIpXFxuK3tcXG4rXFx0Yml0bWFwX2ZyZWUodXNlci1cXHUwMDNlbWFmdF9laWRfYml0bWFwKTtcXG4rXFx0dXNlci1cXHUwMDNlbWFmdF9laWRfYml0bWFwID0gTlVMTDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBlbmV0YzRfaW5pdF9udG1wX3VzZXIoc3RydWN0IGVuZXRjX3NpICpzaSlcXG4ge1xcbiBcXHRzdHJ1Y3QgbnRtcF91c2VyICp1c2VyID0gXFx1MDAyNnNpLVxcdTAwM2VudG1wX3VzZXI7XFxuK1xcdGludCBlcnI7XFxuIFxcbiBcXHQvKiBGb3IgRU5FVEMgNC4xLCBhbGwgdGFibGUgdmVyc2lvbnMgYXJlIDAgKi9cXG4gXFx0bWVtc2V0KFxcdTAwMjZ1c2VyLVxcdTAwM2V0YmwsIDAsIHNpemVvZih1c2VyLVxcdTAwM2V0YmwpKTtcXG4gXFxuLVxcdHJldHVybiBlbmV0YzRfc2V0dXBfY2JkcihzaSk7XFxuK1xcdGVyciA9IGVuZXRjNF9zZXR1cF9jYmRyKHNpKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGVuZXRjNF9nZXRfbnRtcF9jYXBzKHNpKTtcXG4rXFx0ZXJyID0gZW5ldGM0X250bXBfYml0bWFwX2luaXQodXNlcik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gdGVhcmRvd25fY2JkcjtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rdGVhcmRvd25fY2JkcjpcXG4rXFx0ZW5ldGM0X3RlYXJkb3duX2NiZHIoc2kpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgZW5ldGM0X2ZyZWVfbnRtcF91c2VyKHN0cnVjdCBlbmV0Y19zaSAqc2kpXFxuIHtcXG4rXFx0ZW5ldGM0X250bXBfYml0bWFwX2ZyZWUoXFx1MDAyNnNpLVxcdTAwM2VudG1wX3VzZXIpO1xcbiBcXHRlbmV0YzRfdGVhcmRvd25fY2JkcihzaSk7XFxuIH1cXG4gXFxuQEAgLTQ3OSw3ICs0ODksNyBAQCBzdGF0aWMgaW50IGVuZXRjNF9wZl9pbml0KHN0cnVjdCBlbmV0Y19wZiAqcGYpXFxuIFxcbiBcXHRlcnIgPSBlbmV0YzRfaW5pdF9udG1wX3VzZXIocGYtXFx1MDAzZXNpKTtcXG4gXFx0aWYgKGVycikge1xcbi1cXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBpbml0IENCRFJcXFxcblxcXCIpO1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBpbml0IE5UTVAgdXNlclxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4gXFxuQEAgLTQ5MywxOCArNTAzLDE3IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wZl9mcmVlKHN0cnVjdCBlbmV0Y19wZiAqcGYpXFxuIFxcdGVuZXRjNF9mcmVlX250bXBfdXNlcihwZi1cXHUwMDNlc2kpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBlbmV0YzRfcHNpX2RvX3NldF9yeF9tb2RlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4rc3RhdGljIGludCBlbmV0YzRfcGZfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpXFxuIHtcXG4tXFx0c3RydWN0IGVuZXRjX3NpICpzaSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZW5ldGNfc2ksIHJ4X21vZGVfdGFzayk7XFxuLVxcdHN0cnVjdCBlbmV0Y19wZiAqcGYgPSBlbmV0Y19zaV9wcml2KHNpKTtcXG4tXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBzaS1cXHUwMDNlbmRldjtcXG4tXFx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFxcdTAwMjZzaS1cXHUwMDNlaHc7XFxuK1xcdHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0c3RydWN0IGVuZXRjX3BmICpwZiA9IGVuZXRjX3NpX3ByaXYocHJpdi1cXHUwMDNlc2kpO1xcbitcXHRzdHJ1Y3QgZW5ldGNfc2kgKnNpID0gcHJpdi1cXHUwMDNlc2k7XFxuIFxcdGJvb2wgdWNfcHJvbWlzYyA9IGZhbHNlO1xcbiBcXHRib29sIG1jX3Byb21pc2MgPSBmYWxzZTtcXG4gXFx0aW50IHR5cGUgPSAwO1xcbiBcXG4tXFx0cnRubF9sb2NrKCk7XFxuLVxcbiBcXHRpZiAobmRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfUFJPTUlTQykge1xcbiBcXHRcXHR1Y19wcm9taXNjID0gdHJ1ZTtcXG4gXFx0XFx0bWNfcHJvbWlzYyA9IHRydWU7XFxuQEAgLTUxNSwyOCArNTI0LDIxIEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wc2lfZG9fc2V0X3J4X21vZGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRcXHR0eXBlID0gRU5FVENfTUFDX0ZJTFRFUl9UWVBFX0FMTDtcXG4gXFx0fVxcbiBcXG4tXFx0ZW5ldGM0X3BmX3NldF9zaV9tYWNfcHJvbWlzYyhodywgMCwgdWNfcHJvbWlzYywgbWNfcHJvbWlzYyk7XFxuK1xcdGVuZXRjX3NldF9zaV91Y19wcm9taXNjKHNpLCAwLCB1Y19wcm9taXNjKTtcXG4rXFx0ZW5ldGNfc2V0X3NpX21jX3Byb21pc2Moc2ksIDAsIG1jX3Byb21pc2MpO1xcbiBcXG4gXFx0aWYgKHVjX3Byb21pc2MpIHtcXG4tXFx0XFx0ZW5ldGM0X3BmX3NldF9zaV91Y19oYXNoX2ZpbHRlcihodywgMCwgMCk7XFxuK1xcdFxcdGVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcihzaSwgMCwgMCk7XFxuIFxcdFxcdGVuZXRjNF9wZl9jbGVhcl9tYWZ0X2VudHJpZXMocGYpO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAobWNfcHJvbWlzYylcXG4tXFx0XFx0ZW5ldGM0X3BmX3NldF9zaV9tY19oYXNoX2ZpbHRlcihodywgMCwgMCk7XFxuK1xcdFxcdGVuZXRjX3NldF9zaV9tY19oYXNoX2ZpbHRlcihzaSwgMCwgMCk7XFxuIFxcbiBcXHQvKiBTZXQgbmV3IE1BQyBmaWx0ZXIgKi9cXG4tXFx0ZW5ldGM0X3BmX3NldF9tYWNfZmlsdGVyKHBmLCB0eXBlKTtcXG4rXFx0ZW5ldGM0X3BmX3NldF9tYWNfZmlsdGVyKHBmLCB0eXBlLCB1YywgbWMpO1xcbiBcXG4tXFx0cnRubF91bmxvY2soKTtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi17XFxuLVxcdHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4tXFx0c3RydWN0IGVuZXRjX3NpICpzaSA9IHByaXYtXFx1MDAzZXNpO1xcbi1cXG4tXFx0cXVldWVfd29yayhzaS1cXHUwMDNld29ya3F1ZXVlLCBcXHUwMDI2c2ktXFx1MDAzZXJ4X21vZGVfdGFzayk7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGVuZXRjNF9wZl9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuQEAgLTU0NCwxMiArNTQ2LDExIEBAIHN0YXRpYyBpbnQgZW5ldGM0X3BmX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4ge1xcbiBcXHRuZXRkZXZfZmVhdHVyZXNfdCBjaGFuZ2VkID0gbmRldi1cXHUwMDNlZmVhdHVyZXMgXiBmZWF0dXJlcztcXG4gXFx0c3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbi1cXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXFx1MDAyNnByaXYtXFx1MDAzZXNpLVxcdTAwM2VodztcXG4gXFxuIFxcdGlmIChjaGFuZ2VkIFxcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSB7XFxuIFxcdFxcdGJvb2wgcHJvbWlzY19lbiA9ICEoZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpO1xcbiBcXG4tXFx0XFx0ZW5ldGM0X3BmX3NldF9zaV92bGFuX3Byb21pc2MoaHcsIDAsIHByb21pc2NfZW4pO1xcbitcXHRcXHRlbmV0Y19zZXRfc2lfdmxhbl9wcm9taXNjKHByaXYtXFx1MDAzZXNpLCAwLCBwcm9taXNjX2VuKTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGNoYW5nZWQgXFx1MDAyNiBORVRJRl9GX0xPT1BCQUNLKVxcbkBAIC01NjYsNyArNTY3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlbmV0YzRfbmRldl9vcHMgPSB7XFxuIFxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gZW5ldGNfeG1pdCxcXG4gXFx0Lm5kb19nZXRfc3RhdHNcXHRcXHQ9IGVuZXRjX2dldF9zdGF0cyxcXG4gXFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcXHQ9IGVuZXRjX3BmX3NldF9tYWNfYWRkcixcXG4tXFx0Lm5kb19zZXRfcnhfbW9kZVxcdD0gZW5ldGM0X3BmX3NldF9yeF9tb2RlLFxcbitcXHQubmRvX3NldF9yeF9tb2RlX2FzeW5jXFx0PSBlbmV0YzRfcGZfc2V0X3J4X21vZGUsXFxuIFxcdC5uZG9fc2V0X2ZlYXR1cmVzXFx0PSBlbmV0YzRfcGZfc2V0X2ZlYXR1cmVzLFxcbiBcXHQubmRvX3ZsYW5fcnhfYWRkX3ZpZFxcdD0gZW5ldGNfdmxhbl9yeF9hZGRfdmlkLFxcbiBcXHQubmRvX3ZsYW5fcnhfa2lsbF92aWRcXHQ9IGVuZXRjX3ZsYW5fcnhfZGVsX3ZpZCxcXG5AQCAtNjAyLDExICs2MDMsNiBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfbWFjX2NvbmZpZyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLCB1bnNpZ25lZCBpbnQgbW9kZSxcXG4gXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfUlhJRDpcXG4gXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfVFhJRDpcXG4gXFx0XFx0dmFsIHw9IElGTU9ERV9SR01JSTtcXG4tXFx0XFx0LyogV2UgbmVlZCB0byBlbmFibGUgYXV0by1uZWdvdGlhdGlvbiBmb3IgdGhlIE1BQ1xcbi1cXHRcXHQgKiBpZiBpdHMgUkdNSUkgaW50ZXJmYWNlIHN1cHBvcnQgSW4tQmFuZCBzdGF0dXMuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAocGh5bGlua19hdXRvbmVnX2luYmFuZChtb2RlKSlcXG4tXFx0XFx0XFx0dmFsIHw9IFBNX0lGX01PREVfRU5BO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUk1JSTpcXG4gXFx0XFx0dmFsIHw9IElGTU9ERV9STUlJO1xcbkBAIC02MTYsNyArNjEyLDYgQEAgc3RhdGljIHZvaWQgZW5ldGM0X21hY19jb25maWcoc3RydWN0IGVuZXRjX3BmICpwZiwgdW5zaWduZWQgaW50IG1vZGUsXFxuIFxcdFxcdHZhbCB8PSBJRk1PREVfU0dNSUk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUjpcXG4tXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfWEdNSUk6XFxuIFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk6XFxuIFxcdFxcdHZhbCB8PSBJRk1PREVfWEdNSUk7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC02NDIsMjYgKzYzNywxOSBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfc2V0X3BvcnRfc3BlZWQoc3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdiwgaW50IHNwZWVkKVxcbiBcXHR1MzIgb2xkX3NwZWVkID0gcHJpdi1cXHUwMDNlc3BlZWQ7XFxuIFxcdHUzMiB2YWw7XFxuIFxcbitcXHQvKiBJZiB0aGUgc3BlZWQgaXMgdW5rbm93biwgdXNlIHRoZSBtaW5pbXVtIHZhbHVlICovXFxuK1xcdGlmIChzcGVlZCA9PSBTUEVFRF9VTktOT1dOKSB7XFxuK1xcdFxcdHNwZWVkID0gU1BFRURfMTA7XFxuK1xcdFxcdGRldl93YXJuKHByaXYtXFx1MDAzZWRldiwgXFxcIlNwZWVkIHVua25vd24sIGRlZmF1bHQgaXMgMTBNYnBzXFxcXG5cXFwiKTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHNwZWVkID09IG9sZF9zcGVlZClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0dmFsID0gZW5ldGNfcG9ydF9yZChcXHUwMDI2cHJpdi1cXHUwMDNlc2ktXFx1MDAzZWh3LCBFTkVUQzRfUENSKTtcXG4tXFx0dmFsIFxcdTAwMjY9IH5QQ1JfUFNQRUVEO1xcbi1cXG4tXFx0c3dpdGNoIChzcGVlZCkge1xcbi1cXHRjYXNlIFNQRUVEXzEwMDpcXG4tXFx0Y2FzZSBTUEVFRF8xMDAwOlxcbi1cXHRjYXNlIFNQRUVEXzI1MDA6XFxuLVxcdGNhc2UgU1BFRURfMTAwMDA6XFxuLVxcdFxcdHZhbCB8PSAoUENSX1BTUEVFRCBcXHUwMDI2IFBDUl9QU1BFRURfVkFMKHNwZWVkKSk7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIFNQRUVEXzEwOlxcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHR2YWwgfD0gKFBDUl9QU1BFRUQgXFx1MDAyNiBQQ1JfUFNQRUVEX1ZBTChTUEVFRF8xMCkpO1xcbi1cXHR9XFxuLVxcbi1cXHRwcml2LVxcdTAwM2VzcGVlZCA9IHNwZWVkO1xcbitcXHR2YWwgPSBlbmV0Y19wb3J0X3JkKFxcdTAwMjZwcml2LVxcdTAwM2VzaS1cXHUwMDNlaHcsIEVORVRDNF9QQ1IpIFxcdTAwMjYgKH5QQ1JfUFNQRUVEKTtcXG4rXFx0dmFsIHw9IFBDUl9QU1BFRURfVkFMKHNwZWVkKTtcXG4gXFx0ZW5ldGNfcG9ydF93cihcXHUwMDI2cHJpdi1cXHUwMDNlc2ktXFx1MDAzZWh3LCBFTkVUQzRfUENSLCB2YWwpO1xcbitcXHRwcml2LVxcdTAwM2VzcGVlZCA9IHNwZWVkO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBlbmV0YzRfc2V0X3JnbWlpX21hYyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBpbnQgc3BlZWQsIGludCBkdXBsZXgpXFxuQEAgLTcxNywyMiArNzA1LDYgQEAgc3RhdGljIHZvaWQgZW5ldGM0X3NldF9ybWlpX21hYyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBpbnQgc3BlZWQsIGludCBkdXBsZXgpXFxuIFxcdGVuZXRjX3BvcnRfbWFjX3dyKHNpLCBFTkVUQzRfUE1fSUZfTU9ERSgwKSwgdmFsKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgZW5ldGM0X3NldF9oZF9mbG93X2NvbnRyb2woc3RydWN0IGVuZXRjX3BmICpwZiwgYm9vbCBlbmFibGUpXFxuLXtcXG4tXFx0c3RydWN0IGVuZXRjX3NpICpzaSA9IHBmLVxcdTAwM2VzaTtcXG4tXFx0dTMyIG9sZF92YWwsIHZhbDtcXG4tXFxuLVxcdGlmICghcGYtXFx1MDAzZWNhcHMuaGFsZl9kdXBsZXgpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdG9sZF92YWwgPSBlbmV0Y19wb3J0X21hY19yZChzaSwgRU5FVEM0X1BNX0NNRF9DRkcoMCkpO1xcbi1cXHR2YWwgPSB1MzJfcmVwbGFjZV9iaXRzKG9sZF92YWwsIGVuYWJsZSA/IDEgOiAwLCBQTV9DTURfQ0ZHX0hEX0ZDRU4pO1xcbi1cXHRpZiAodmFsID09IG9sZF92YWwpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdGVuZXRjX3BvcnRfbWFjX3dyKHNpLCBFTkVUQzRfUE1fQ01EX0NGRygwKSwgdmFsKTtcXG4tfVxcbi1cXG4gc3RhdGljIHZvaWQgZW5ldGM0X3NldF9yeF9wYXVzZShzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBib29sIHJ4X3BhdXNlKVxcbiB7XFxuIFxcdHN0cnVjdCBlbmV0Y19zaSAqc2kgPSBwZi1cXHUwMDNlc2k7XFxuQEAgLTkwOCwxMyArODgwLDExIEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wbF9tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG4gXFx0c3RydWN0IGVuZXRjX3BmICpwZiA9IHBoeWxpbmtfdG9fZW5ldGNfcGYoY29uZmlnKTtcXG4gXFx0c3RydWN0IGVuZXRjX3NpICpzaSA9IHBmLVxcdTAwM2VzaTtcXG4gXFx0c3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdjtcXG4tXFx0Ym9vbCBoZF9mYyA9IGZhbHNlO1xcbiBcXG4gXFx0cHJpdiA9IG5ldGRldl9wcml2KHNpLVxcdTAwM2VuZGV2KTtcXG4gXFx0ZW5ldGM0X3NldF9wb3J0X3NwZWVkKHByaXYsIHNwZWVkKTtcXG4gXFxuLVxcdGlmICghcGh5bGlua19hdXRvbmVnX2luYmFuZChtb2RlKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgcGh5X2ludGVyZmFjZV9tb2RlX2lzX3JnbWlpKGludGVyZmFjZSkpXFxuK1xcdGlmIChwaHlfaW50ZXJmYWNlX21vZGVfaXNfcmdtaWkoaW50ZXJmYWNlKSlcXG4gXFx0XFx0ZW5ldGM0X3NldF9yZ21paV9tYWMocGYsIHNwZWVkLCBkdXBsZXgpO1xcbiBcXG4gXFx0aWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcXG5AQCAtOTI2LDE4ICs4OTYsOCBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfcGxfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAocHJpdi1cXHUwMDNlYWN0aXZlX29mZmxvYWRzIFxcdTAwMjYgRU5FVENfRl9RQlUpXFxuIFxcdFxcdFxcdHR4X3BhdXNlID0gZmFsc2U7XFxuLVxcdH0gZWxzZSB7IC8qIERVUExFWF9IQUxGICovXFxuLVxcdFxcdGlmICh0eF9wYXVzZSB8fCByeF9wYXVzZSlcXG4tXFx0XFx0XFx0aGRfZmMgPSB0cnVlO1xcbi1cXG4tXFx0XFx0LyogQXMgcGVyIDgwMi4zIGFubmV4IDMxQiwgUEFVU0UgZnJhbWVzIGFyZSBvbmx5IHN1cHBvcnRlZFxcbi1cXHRcXHQgKiB3aGVuIHRoZSBsaW5rIGlzIGNvbmZpZ3VyZWQgZm9yIGZ1bGwgZHVwbGV4IG9wZXJhdGlvbi5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdHR4X3BhdXNlID0gZmFsc2U7XFxuLVxcdFxcdHJ4X3BhdXNlID0gZmFsc2U7XFxuIFxcdH1cXG4gXFxuLVxcdGVuZXRjNF9zZXRfaGRfZmxvd19jb250cm9sKHBmLCBoZF9mYyk7XFxuIFxcdGVuZXRjNF9zZXRfdHhfcGF1c2UocGYsIHByaXYtXFx1MDAzZW51bV9yeF9yaW5ncywgdHhfcGF1c2UpO1xcbiBcXHRlbmV0YzRfc2V0X3J4X3BhdXNlKHBmLCByeF9wYXVzZSk7XFxuIFxcdGVuZXRjNF9tYWNfdHhfZW5hYmxlKHBmKTtcXG5AQCAtMTAwOSwxOSArOTY5LDYgQEAgc3RhdGljIHZvaWQgZW5ldGM0X2xpbmtfZGVpbml0KHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYpXFxuIFxcdGVuZXRjX21kaW9idXNfZGVzdHJveShwZik7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgZW5ldGM0X3BzaV93cV90YXNrX2luaXQoc3RydWN0IGVuZXRjX3NpICpzaSlcXG4te1xcbi1cXHRjaGFyIHdxX25hbWVbMjRdO1xcbi1cXG4tXFx0SU5JVF9XT1JLKFxcdTAwMjZzaS1cXHUwMDNlcnhfbW9kZV90YXNrLCBlbmV0YzRfcHNpX2RvX3NldF9yeF9tb2RlKTtcXG4tXFx0c25wcmludGYod3FfbmFtZSwgc2l6ZW9mKHdxX25hbWUpLCBcXFwiZW5ldGMtJXNcXFwiLCBwY2lfbmFtZShzaS1cXHUwMDNlcGRldikpO1xcbi1cXHRzaS1cXHUwMDNld29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUod3FfbmFtZSk7XFxuLVxcdGlmICghc2ktXFx1MDAzZXdvcmtxdWV1ZSlcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBlbmV0YzRfcGZfbmV0ZGV2X2NyZWF0ZShzdHJ1Y3QgZW5ldGNfc2kgKnNpKVxcbiB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZzaS1cXHUwMDNlcGRldi1cXHUwMDNlZGV2O1xcbkBAIC0xMDYyLDEyICsxMDA5LDYgQEAgc3RhdGljIGludCBlbmV0YzRfcGZfbmV0ZGV2X2NyZWF0ZShzdHJ1Y3QgZW5ldGNfc2kgKnNpKVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGVycl9saW5rX2luaXQ7XFxuIFxcbi1cXHRlcnIgPSBlbmV0YzRfcHNpX3dxX3Rhc2tfaW5pdChzaSk7XFxuLVxcdGlmIChlcnIpIHtcXG4tXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgdG8gaW5pdCB3b3JrcXVldWVcXFxcblxcXCIpO1xcbi1cXHRcXHRnb3RvIGVycl93cV9pbml0O1xcbi1cXHR9XFxuLVxcbiBcXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIgbmV0ZGV2XFxcXG5cXFwiKTtcXG5AQCAtMTA3Nyw4ICsxMDE4LDYgQEAgc3RhdGljIGludCBlbmV0YzRfcGZfbmV0ZGV2X2NyZWF0ZShzdHJ1Y3QgZW5ldGNfc2kgKnNpKVxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIGVycl9yZWdfbmV0ZGV2Olxcbi1cXHRkZXN0cm95X3dvcmtxdWV1ZShzaS1cXHUwMDNld29ya3F1ZXVlKTtcXG4tZXJyX3dxX2luaXQ6XFxuIFxcdGVuZXRjNF9saW5rX2RlaW5pdChwcml2KTtcXG4gZXJyX2xpbmtfaW5pdDpcXG4gXFx0ZW5ldGNfZnJlZV9tc2l4KHByaXYpO1xcbkBAIC0xMDk2LDggKzEwMzUsNiBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfcGZfbmV0ZGV2X2Rlc3Ryb3koc3RydWN0IGVuZXRjX3NpICpzaSlcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBzaS1cXHUwMDNlbmRldjtcXG4gXFxuIFxcdHVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xcbi1cXHRjYW5jZWxfd29yayhcXHUwMDI2c2ktXFx1MDAzZXJ4X21vZGVfdGFzayk7XFxuLVxcdGRlc3Ryb3lfd29ya3F1ZXVlKHNpLVxcdTAwM2V3b3JrcXVldWUpO1xcbiBcXHRlbmV0YzRfbGlua19kZWluaXQocHJpdik7XFxuIFxcdGVuZXRjX2ZyZWVfbXNpeChwcml2KTtcXG4gXFx0ZnJlZV9uZXRkZXYobmRldik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfZXRodG9vbC5jXFxuaW5kZXggNzFmMzc2ZWYxYmUxYzkuLjA3Yjc4MzJmMjQyNzZhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ldGh0b29sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfZXRodG9vbC5jXFxuQEAgLTI5LDcgKzI5LDcgQEAgc3RhdGljIGNvbnN0IHUzMiBlbmV0Y19yeGJkcl9yZWdzW10gPSB7XFxuIH07XFxuIFxcbiBzdGF0aWMgY29uc3QgdTMyIGVuZXRjX3BvcnRfcmVnc1tdID0ge1xcbi1cXHRFTkVUQ19QTVIsIEVORVRDX1BTUiwgRU5FVENfUFNJUE1SLCBFTkVUQ19QU0lQTUFSMCgwKSxcXG4rXFx0RU5FVENfUE1SLCBFTkVUQ19QU1IsIEVORVRDX1BTSVBNTVIsIEVORVRDX1BTSVBNQVIwKDApLFxcbiBcXHRFTkVUQ19QU0lQTUFSMSgwKSwgRU5FVENfUFRYTUJBUiwgRU5FVENfUENBUFIwLCBFTkVUQ19QQ0FQUjEsXFxuIFxcdEVORVRDX1BTSUNGR1IwKDApLCBFTkVUQ19QUkZTQ0FQUiwgRU5FVENfUFRDTVNEVVIoMCksXFxuIFxcdEVORVRDX1BNMF9DTURfQ0ZHLCBFTkVUQ19QTTBfTUFYRlJNLCBFTkVUQ19QTTBfSUZfTU9ERVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfaHcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ody5oXFxuaW5kZXggYmY5OWI2NWQ3NTk4YWIuLjE2ZGE3MzJkYzVkZTgyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ody5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX2h3LmhcXG5AQCAtMTgwLDEzICsxODAsMTMgQEAgZW51bSBlbmV0Y19iZHJfdHlwZSB7VFgsIFJYfTtcXG4gI2RlZmluZSBFTkVUQ19QTVJfUFNQRUVEXzEwMDBNXFx0QklUKDkpXFxuICNkZWZpbmUgRU5FVENfUE1SX1BTUEVFRF8yNTAwTVxcdEJJVCgxMClcXG4gI2RlZmluZSBFTkVUQ19QU1JcXHRcXHQweDAwMDQgLyogUk8gKi9cXG4tI2RlZmluZSBFTkVUQ19QU0lQTVJcXHRcXHQweDAwMThcXG4tI2RlZmluZSBFTkVUQ19QU0lQTVJfU0VUX1VQKG4pXFx0QklUKG4pIC8qIG4gPSBTSSBpbmRleCAqL1xcbi0jZGVmaW5lIEVORVRDX1BTSVBNUl9TRVRfTVAobilcXHRCSVQoKG4pICsgMTYpXFxuKyNkZWZpbmUgRU5FVENfUFNJUE1NUlxcdFxcdDB4MDAxOFxcbisjZGVmaW5lICBQU0lQTU1SX1NJX01BQ19VUChuKVxcdEJJVChuKSAvKiBuID0gU0kgaW5kZXggKi9cXG4rI2RlZmluZSAgUFNJUE1NUl9TSV9NQUNfTVAobilcXHRCSVQoKG4pICsgMTYpXFxuK1xcbiAjZGVmaW5lIEVORVRDX1BTSVBWTVJcXHRcXHQweDAwMWNcXG4tI2RlZmluZSBFTkVUQ19WTEFOX1BST01JU0NfTUFQX0FMTFxcdDB4N1xcbi0jZGVmaW5lIEVORVRDX1BTSVBWTVJfU0VUX1ZQKHNpbWFwKVxcdCgoc2ltYXApIFxcdTAwMjYgMHg3KVxcbi0jZGVmaW5lIEVORVRDX1BTSVBWTVJfU0VUX1ZVVEEoc2ltYXApXFx0KCgoc2ltYXApIFxcdTAwMjYgMHg3KSBcXHUwMDNjXFx1MDAzYyAxNilcXG4rI2RlZmluZSAgUFNJUFZNUl9TSV9WTEFOX1AobilcXHRCSVQobikgLyogbiA9IFNJIGluZGV4ICovXFxuK1xcbiAjZGVmaW5lIEVORVRDX1BTSVBNQVIwKG4pXFx0KDB4MDEwMCArIChuKSAqIDB4OCkgLyogbiA9IFNJIGluZGV4ICovXFxuICNkZWZpbmUgRU5FVENfUFNJUE1BUjEobilcXHQoMHgwMTA0ICsgKG4pICogMHg4KVxcbiAjZGVmaW5lIEVORVRDX1BWQ0xDVFJcXHRcXHQweDAyMDhcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuY1xcbmluZGV4IDJkNjg3YmI4YzNhMDYzLi5hNTA5OTI5Zjg5ZjI1ZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jXFxuQEAgLTQyLDI2ICs0Miw2IEBAIHN0YXRpYyB2b2lkIGVuZXRjX3BmX2Rlc3Ryb3lfcGNzKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKVxcbiBcXHRseW54X3Bjc19kZXN0cm95KHBjcyk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGVuZXRjX3NldF92bGFuX3Byb21pc2Moc3RydWN0IGVuZXRjX2h3ICpodywgY2hhciBzaV9tYXApXFxuLXtcXG4tXFx0dTMyIHZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDX1BTSVBWTVIpO1xcbi1cXG4tXFx0dmFsIFxcdTAwMjY9IH5FTkVUQ19QU0lQVk1SX1NFVF9WUChFTkVUQ19WTEFOX1BST01JU0NfTUFQX0FMTCk7XFxuLVxcdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDX1BTSVBWTVIsIEVORVRDX1BTSVBWTVJfU0VUX1ZQKHNpX21hcCkgfCB2YWwpO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBlbmV0Y19lbmFibGVfc2lfdmxhbl9wcm9taXNjKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGludCBzaV9pZHgpXFxuLXtcXG4tXFx0cGYtXFx1MDAzZXZsYW5fcHJvbWlzY19zaW1hcCB8PSBCSVQoc2lfaWR4KTtcXG4tXFx0ZW5ldGNfc2V0X3ZsYW5fcHJvbWlzYyhcXHUwMDI2cGYtXFx1MDAzZXNpLVxcdTAwM2VodywgcGYtXFx1MDAzZXZsYW5fcHJvbWlzY19zaW1hcCk7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIGVuZXRjX2Rpc2FibGVfc2lfdmxhbl9wcm9taXNjKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGludCBzaV9pZHgpXFxuLXtcXG4tXFx0cGYtXFx1MDAzZXZsYW5fcHJvbWlzY19zaW1hcCBcXHUwMDI2PSB+QklUKHNpX2lkeCk7XFxuLVxcdGVuZXRjX3NldF92bGFuX3Byb21pc2MoXFx1MDAyNnBmLVxcdTAwM2VzaS1cXHUwMDNlaHcsIHBmLVxcdTAwM2V2bGFuX3Byb21pc2Nfc2ltYXApO1xcbi19XFxuLVxcbiBzdGF0aWMgdm9pZCBlbmV0Y19zZXRfaXNvbF92bGFuKHN0cnVjdCBlbmV0Y19odyAqaHcsIGludCBzaSwgdTE2IHZsYW4sIHU4IHFvcylcXG4ge1xcbiBcXHR1MzIgdmFsID0gMDtcXG5AQCAtODAsMzcgKzYwLDYgQEAgc3RhdGljIHZvaWQgZW5ldGNfYWRkX21hY19hZGRyX2VtX2ZpbHRlcihzdHJ1Y3QgZW5ldGNfbWFjX2ZpbHRlciAqZmlsdGVyLFxcbiBcXHRmaWx0ZXItXFx1MDAzZW1hY19hZGRyX2NudCsrO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBlbmV0Y19jbGVhcl9tYWNfaHRfZmx0KHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZHgsIGludCB0eXBlKVxcbi17XFxuLVxcdGJvb2wgZXJyID0gc2ktXFx1MDAzZWVycmF0YSBcXHUwMDI2IEVORVRDX0VSUl9VQ01DU1dQO1xcbi1cXG4tXFx0aWYgKHR5cGUgPT0gVUMpIHtcXG4tXFx0XFx0ZW5ldGNfcG9ydF93cihcXHUwMDI2c2ktXFx1MDAzZWh3LCBFTkVUQ19QU0lVTUhGUjAoc2lfaWR4LCBlcnIpLCAwKTtcXG4tXFx0XFx0ZW5ldGNfcG9ydF93cihcXHUwMDI2c2ktXFx1MDAzZWh3LCBFTkVUQ19QU0lVTUhGUjEoc2lfaWR4KSwgMCk7XFxuLVxcdH0gZWxzZSB7IC8qIE1DICovXFxuLVxcdFxcdGVuZXRjX3BvcnRfd3IoXFx1MDAyNnNpLVxcdTAwM2VodywgRU5FVENfUFNJTU1IRlIwKHNpX2lkeCwgZXJyKSwgMCk7XFxuLVxcdFxcdGVuZXRjX3BvcnRfd3IoXFx1MDAyNnNpLVxcdTAwM2VodywgRU5FVENfUFNJTU1IRlIxKHNpX2lkeCksIDApO1xcbi1cXHR9XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIGVuZXRjX3NldF9tYWNfaHRfZmx0KHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZHgsIGludCB0eXBlLFxcbi1cXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBoYXNoKVxcbi17XFxuLVxcdGJvb2wgZXJyID0gc2ktXFx1MDAzZWVycmF0YSBcXHUwMDI2IEVORVRDX0VSUl9VQ01DU1dQO1xcbi1cXG4tXFx0aWYgKHR5cGUgPT0gVUMpIHtcXG4tXFx0XFx0ZW5ldGNfcG9ydF93cihcXHUwMDI2c2ktXFx1MDAzZWh3LCBFTkVUQ19QU0lVTUhGUjAoc2lfaWR4LCBlcnIpLFxcbi1cXHRcXHRcXHQgICAgICBsb3dlcl8zMl9iaXRzKGhhc2gpKTtcXG4tXFx0XFx0ZW5ldGNfcG9ydF93cihcXHUwMDI2c2ktXFx1MDAzZWh3LCBFTkVUQ19QU0lVTUhGUjEoc2lfaWR4KSxcXG4tXFx0XFx0XFx0ICAgICAgdXBwZXJfMzJfYml0cyhoYXNoKSk7XFxuLVxcdH0gZWxzZSB7IC8qIE1DICovXFxuLVxcdFxcdGVuZXRjX3BvcnRfd3IoXFx1MDAyNnNpLVxcdTAwM2VodywgRU5FVENfUFNJTU1IRlIwKHNpX2lkeCwgZXJyKSxcXG4tXFx0XFx0XFx0ICAgICAgbG93ZXJfMzJfYml0cyhoYXNoKSk7XFxuLVxcdFxcdGVuZXRjX3BvcnRfd3IoXFx1MDAyNnNpLVxcdTAwM2VodywgRU5FVENfUFNJTU1IRlIxKHNpX2lkeCksXFxuLVxcdFxcdFxcdCAgICAgIHVwcGVyXzMyX2JpdHMoaGFzaCkpO1xcbi1cXHR9XFxuLX1cXG4tXFxuIHN0YXRpYyB2b2lkIGVuZXRjX3N5bmNfbWFjX2ZpbHRlcnMoc3RydWN0IGVuZXRjX3BmICpwZilcXG4ge1xcbiBcXHRzdHJ1Y3QgZW5ldGNfbWFjX2ZpbHRlciAqZiA9IHBmLVxcdTAwM2VtYWNfZmlsdGVyO1xcbkBAIC0xMjIsMTIgKzcxLDE2IEBAIHN0YXRpYyB2b2lkIGVuZXRjX3N5bmNfbWFjX2ZpbHRlcnMoc3RydWN0IGVuZXRjX3BmICpwZilcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1BRERSX1RZUEU7IGkrKywgZisrKSB7XFxuIFxcdFxcdGJvb2wgZW0gPSAoZi1cXHUwMDNlbWFjX2FkZHJfY250ID09IDEpIFxcdTAwMjZcXHUwMDI2IChpID09IFVDKTtcXG4gXFx0XFx0Ym9vbCBjbGVhciA9ICFmLVxcdTAwM2VtYWNfYWRkcl9jbnQ7XFxuK1xcdFxcdHU2NCBoYXNoO1xcbiBcXG4gXFx0XFx0aWYgKGNsZWFyKSB7XFxuLVxcdFxcdFxcdGlmIChpID09IFVDKVxcbitcXHRcXHRcXHRpZiAoaSA9PSBVQykge1xcbiBcXHRcXHRcXHRcXHRlbmV0Y19jbGVhcl9tYWNfZmx0X2VudHJ5KHNpLCBwb3MpO1xcbitcXHRcXHRcXHRcXHRlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc2ksIDAsIDApO1xcbitcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHRlbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXIoc2ksIDAsIDApO1xcbitcXHRcXHRcXHR9XFxuIFxcbi1cXHRcXHRcXHRlbmV0Y19jbGVhcl9tYWNfaHRfZmx0KHNpLCAwLCBpKTtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTEzNSw3ICs4OCw3IEBAIHN0YXRpYyB2b2lkIGVuZXRjX3N5bmNfbWFjX2ZpbHRlcnMoc3RydWN0IGVuZXRjX3BmICpwZilcXG4gXFx0XFx0aWYgKGVtKSB7XFxuIFxcdFxcdFxcdGludCBlcnI7XFxuIFxcbi1cXHRcXHRcXHRlbmV0Y19jbGVhcl9tYWNfaHRfZmx0KHNpLCAwLCBVQyk7XFxuK1xcdFxcdFxcdGVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcihzaSwgMCwgMCk7XFxuIFxcbiBcXHRcXHRcXHRlcnIgPSBlbmV0Y19zZXRfbWFjX2ZsdF9lbnRyeShzaSwgcG9zLCBmLVxcdTAwM2VtYWNfYWRkcixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgQklUKDApKTtcXG5AQCAtMTQ3LDExICsxMDAsMTUgQEAgc3RhdGljIHZvaWQgZW5ldGNfc3luY19tYWNfZmlsdGVycyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxcbiBcXHRcXHRcXHRcXHQgZXJyKTtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0Yml0bWFwX3RvX2FycjY0KFxcdTAwMjZoYXNoLCBmLVxcdTAwM2VtYWNfaGFzaF90YWJsZSxcXG4rXFx0XFx0XFx0XFx0RU5FVENfTUFERFJfSEFTSF9UQkxfU1opO1xcbiBcXHRcXHQvKiBoYXNoIHRhYmxlIGZpbHRlciwgY2xlYXIgRU0gZmlsdGVyIGZvciBVQyBlbnRyaWVzICovXFxuLVxcdFxcdGlmIChpID09IFVDKVxcbitcXHRcXHRpZiAoaSA9PSBVQykge1xcbiBcXHRcXHRcXHRlbmV0Y19jbGVhcl9tYWNfZmx0X2VudHJ5KHNpLCBwb3MpO1xcbi1cXG4tXFx0XFx0ZW5ldGNfc2V0X21hY19odF9mbHQoc2ksIDAsIGksICpmLVxcdTAwM2VtYWNfaGFzaF90YWJsZSk7XFxuK1xcdFxcdFxcdGVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcihzaSwgMCwgaGFzaCk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGVuZXRjX3NldF9zaV9tY19oYXNoX2ZpbHRlcihzaSwgMCwgaGFzaCk7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0xNTksMjEgKzExNiwxNyBAQCBzdGF0aWMgdm9pZCBlbmV0Y19wZl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcdHN0cnVjdCBlbmV0Y19wZiAqcGYgPSBlbmV0Y19zaV9wcml2KHByaXYtXFx1MDAzZXNpKTtcXG4tXFx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFxcdTAwMjZwcml2LVxcdTAwM2VzaS1cXHUwMDNlaHc7XFxuIFxcdGJvb2wgdXByb20gPSBmYWxzZSwgbXByb20gPSBmYWxzZTtcXG4gXFx0c3RydWN0IGVuZXRjX21hY19maWx0ZXIgKmZpbHRlcjtcXG4gXFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcXG4tXFx0dTMyIHBzaXBtciA9IDA7XFxuIFxcdGJvb2wgZW07XFxuIFxcbiBcXHRpZiAobmRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfUFJPTUlTQykge1xcbiBcXHRcXHQvKiBlbmFibGUgcHJvbWlzYyBtb2RlIGZvciBTSTAgKFBGKSAqL1xcbi1cXHRcXHRwc2lwbXIgPSBFTkVUQ19QU0lQTVJfU0VUX1VQKDApIHwgRU5FVENfUFNJUE1SX1NFVF9NUCgwKTtcXG4gXFx0XFx0dXByb20gPSB0cnVlO1xcbiBcXHRcXHRtcHJvbSA9IHRydWU7XFxuIFxcdH0gZWxzZSBpZiAobmRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfQUxMTVVMVEkpIHtcXG4gXFx0XFx0LyogZW5hYmxlIG11bHRpIGNhc3QgcHJvbWlzYyBtb2RlIGZvciBTSTAgKFBGKSAqL1xcbi1cXHRcXHRwc2lwbXIgPSBFTkVUQ19QU0lQTVJfU0VUX01QKDApO1xcbiBcXHRcXHRtcHJvbSA9IHRydWU7XFxuIFxcdH1cXG4gXFxuQEAgLTIxMSw5ICsxNjQsOCBAQCBzdGF0aWMgdm9pZCBlbmV0Y19wZl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0XFx0LyogdXBkYXRlIFBGIGVudHJpZXMgKi9cXG4gXFx0XFx0ZW5ldGNfc3luY19tYWNfZmlsdGVycyhwZik7XFxuIFxcbi1cXHRwc2lwbXIgfD0gZW5ldGNfcG9ydF9yZChodywgRU5FVENfUFNJUE1SKSBcXHUwMDI2XFxuLVxcdFxcdCAgfihFTkVUQ19QU0lQTVJfU0VUX1VQKDApIHwgRU5FVENfUFNJUE1SX1NFVF9NUCgwKSk7XFxuLVxcdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDX1BTSVBNUiwgcHNpcG1yKTtcXG4rXFx0ZW5ldGNfc2V0X3NpX3VjX3Byb21pc2MocHJpdi1cXHUwMDNlc2ksIDAsIHVwcm9tKTtcXG4rXFx0ZW5ldGNfc2V0X3NpX21jX3Byb21pc2MocHJpdi1cXHUwMDNlc2ksIDAsIG1wcm9tKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgZW5ldGNfc2V0X2xvb3BiYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBib29sIGVuKVxcbkBAIC00NjksMTIgKzQyMSwxMSBAQCBzdGF0aWMgdm9pZCBlbmV0Y19jb25maWd1cmVfcG9ydChzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxcbiBcXG4gXFx0Lyogc3BsaXQgdXAgUkZTIGVudHJpZXMgKi9cXG4gXFx0ZW5ldGNfcG9ydF9hc3NpZ25fcmZzX2VudHJpZXMocGYtXFx1MDAzZXNpKTtcXG4tXFxuIFxcdC8qIGVuZm9yY2UgVkxBTiBwcm9taXNjIG1vZGUgZm9yIGFsbCBTSXMgKi9cXG4tXFx0cGYtXFx1MDAzZXZsYW5fcHJvbWlzY19zaW1hcCA9IEVORVRDX1ZMQU5fUFJPTUlTQ19NQVBfQUxMO1xcbi1cXHRlbmV0Y19zZXRfdmxhbl9wcm9taXNjKGh3LCBwZi1cXHUwMDNldmxhbl9wcm9taXNjX3NpbWFwKTtcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBwZi1cXHUwMDNldG90YWxfdmZzICsgMTsgaSsrKVxcbitcXHRcXHRlbmV0Y19zZXRfc2lfdmxhbl9wcm9taXNjKHBmLVxcdTAwM2VzaSwgaSwgdHJ1ZSk7XFxuIFxcbi1cXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQ19QU0lQTVIsIDApO1xcbitcXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQ19QU0lQTU1SLCAwKTtcXG4gXFxuIFxcdC8qIGVuYWJsZSBwb3J0ICovXFxuIFxcdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDX1BNUiwgRU5FVENfUE1SX0VOKTtcXG5AQCAtNDk0LDEyICs0NDUsOSBAQCBzdGF0aWMgaW50IGVuZXRjX3BmX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGNoYW5nZWQgXFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpIHtcXG4tXFx0XFx0c3RydWN0IGVuZXRjX3BmICpwZiA9IGVuZXRjX3NpX3ByaXYocHJpdi1cXHUwMDNlc2kpO1xcbitcXHRcXHRib29sIHByb21pc2MgPSAhKGZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKTtcXG4gXFxuLVxcdFxcdGlmICghIShmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikpXFxuLVxcdFxcdFxcdGVuZXRjX2Rpc2FibGVfc2lfdmxhbl9wcm9taXNjKHBmLCAwKTtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRlbmV0Y19lbmFibGVfc2lfdmxhbl9wcm9taXNjKHBmLCAwKTtcXG4rXFx0XFx0ZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzYyhwcml2LVxcdTAwM2VzaSwgMCwgcHJvbWlzYyk7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChjaGFuZ2VkIFxcdTAwMjYgTkVUSUZfRl9MT09QQkFDSylcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuaFxcbmluZGV4IDI4NWI3ZTVjNDhmZGM3Li41NmQyM2E4YTExYTA2MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5oXFxuQEAgLTE3LDEyICsxNyw5IEBAIHN0cnVjdCBlbmV0Y192Zl9zdGF0ZSB7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgZW5ldGNfcG9ydF9jYXBzIHtcXG4tXFx0dTMyIGhhbGZfZHVwbGV4OjE7XFxuLVxcdGludCBudW1fdnNpO1xcbiBcXHRpbnQgbnVtX21zaXg7XFxuIFxcdGludCBudW1fcnhfYmRyO1xcbiBcXHRpbnQgbnVtX3R4X2JkcjtcXG4tXFx0aW50IG1hY19maWx0ZXJfbnVtO1xcbiB9O1xcbiBcXG4gc3RydWN0IGVuZXRjX3BmO1xcbkBAIC00Nyw3ICs0NCw2IEBAIHN0cnVjdCBlbmV0Y19wZiB7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCBtc2dfdGFzaztcXG4gXFx0Y2hhciBtc2dfaW50X25hbWVbRU5FVENfSU5UX05BTUVfTUFYXTtcXG4gXFxuLVxcdGNoYXIgdmxhbl9wcm9taXNjX3NpbWFwOyAvKiBiaXRtYXAgb2YgU0lzIGluIFZMQU4gcHJvbWlzYyBtb2RlICovXFxuIFxcdERFQ0xBUkVfQklUTUFQKHZsYW5faHRfZmlsdGVyLCBFTkVUQ19WTEFOX0hUX1NJWkUpO1xcbiBcXHRERUNMQVJFX0JJVE1BUChhY3RpdmVfdmxhbnMsIFZMQU5fTl9WSUQpO1xcbiBcXG5AQCAtNjAsOCArNTYsNiBAQCBzdHJ1Y3QgZW5ldGNfcGYge1xcbiBcXG4gXFx0c3RydWN0IGVuZXRjX3BvcnRfY2FwcyBjYXBzO1xcbiBcXHRjb25zdCBzdHJ1Y3QgZW5ldGNfcGZfb3BzICpvcHM7XFxuLVxcbi1cXHRpbnQgbnVtX21mZTtcXHQvKiBudW1iZXIgb2YgbWFjIGFkZHJlc3MgZmlsdGVyIHRhYmxlIGVudHJpZXMgKi9cXG4gfTtcXG4gXFxuICNkZWZpbmUgcGh5bGlua190b19lbmV0Y19wZihjb25maWcpIFxcXFxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jXFxuaW5kZXggNmU1ZDJmODY5OTE1MGIuLmQzMmExOTVhMDRjOTdlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uY1xcbkBAIC0xLDUgKzEsNSBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjArIE9SIEJTRC0zLUNsYXVzZSlcXG4tLyogQ29weXJpZ2h0IDIwMjQgTlhQICovXFxuKy8qIENvcHlyaWdodCAyMDI0LTIwMjYgTlhQICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZnNsL2VuZXRjX21kaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX21kaW8uaFxcdTAwM2VcXG5AQCAtODcsNiArODcsMTEyIEBAIGludCBlbmV0Y19zZXR1cF9tYWNfYWRkcmVzc2VzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIHN0cnVjdCBlbmV0Y19wZiAqcGYpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfc2V0dXBfbWFjX2FkZHJlc3Nlcyk7XFxuIFxcbit2b2lkIGVuZXRjX3NldF9zaV91Y19wcm9taXNjKHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZCwgYm9vbCBwcm9taXNjKVxcbit7XFxuK1xcdHN0cnVjdCBlbmV0Y19odyAqaHcgPSBcXHUwMDI2c2ktXFx1MDAzZWh3O1xcbitcXHRpbnQgcHNpcG1tcl9vZmY7XFxuK1xcdHUzMiB2YWw7XFxuK1xcbitcXHRpZiAoaXNfZW5ldGNfcmV2MShzaSkpXFxuK1xcdFxcdHBzaXBtbXJfb2ZmID0gRU5FVENfUFNJUE1NUjtcXG4rXFx0ZWxzZVxcbitcXHRcXHRwc2lwbW1yX29mZiA9IEVORVRDNF9QU0lQTU1SO1xcbitcXG4rXFx0dmFsID0gZW5ldGNfcG9ydF9yZChodywgcHNpcG1tcl9vZmYpO1xcbitcXG4rXFx0aWYgKHByb21pc2MpXFxuK1xcdFxcdHZhbCB8PSBQU0lQTU1SX1NJX01BQ19VUChzaV9pZCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dmFsIFxcdTAwMjY9IH5QU0lQTU1SX1NJX01BQ19VUChzaV9pZCk7XFxuK1xcbitcXHRlbmV0Y19wb3J0X3dyKGh3LCBwc2lwbW1yX29mZiwgdmFsKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChlbmV0Y19zZXRfc2lfdWNfcHJvbWlzYyk7XFxuK1xcbit2b2lkIGVuZXRjX3NldF9zaV9tY19wcm9taXNjKHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZCwgYm9vbCBwcm9taXNjKVxcbit7XFxuK1xcdHN0cnVjdCBlbmV0Y19odyAqaHcgPSBcXHUwMDI2c2ktXFx1MDAzZWh3O1xcbitcXHRpbnQgcHNpcG1tcl9vZmY7XFxuK1xcdHUzMiB2YWw7XFxuK1xcbitcXHRpZiAoaXNfZW5ldGNfcmV2MShzaSkpXFxuK1xcdFxcdHBzaXBtbXJfb2ZmID0gRU5FVENfUFNJUE1NUjtcXG4rXFx0ZWxzZVxcbitcXHRcXHRwc2lwbW1yX29mZiA9IEVORVRDNF9QU0lQTU1SO1xcbitcXG4rXFx0dmFsID0gZW5ldGNfcG9ydF9yZChodywgcHNpcG1tcl9vZmYpO1xcbitcXG4rXFx0aWYgKHByb21pc2MpXFxuK1xcdFxcdHZhbCB8PSBQU0lQTU1SX1NJX01BQ19NUChzaV9pZCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dmFsIFxcdTAwMjY9IH5QU0lQTU1SX1NJX01BQ19NUChzaV9pZCk7XFxuK1xcbitcXHRlbmV0Y19wb3J0X3dyKGh3LCBwc2lwbW1yX29mZiwgdmFsKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChlbmV0Y19zZXRfc2lfbWNfcHJvbWlzYyk7XFxuK1xcbit2b2lkIGVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcihzdHJ1Y3QgZW5ldGNfc2kgKnNpLCBpbnQgc2lfaWQsIHU2NCBoYXNoKVxcbit7XFxuK1xcdGludCBwc2l1bWhmcjBfb2ZmLCBwc2l1bWhmcjFfb2ZmO1xcbitcXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXFx1MDAyNnNpLVxcdTAwM2VodztcXG4rXFxuK1xcdGlmIChpc19lbmV0Y19yZXYxKHNpKSkge1xcbitcXHRcXHRib29sIGVyciA9IHNpLVxcdTAwM2VlcnJhdGEgXFx1MDAyNiBFTkVUQ19FUlJfVUNNQ1NXUDtcXG4rXFxuK1xcdFxcdHBzaXVtaGZyMF9vZmYgPSBFTkVUQ19QU0lVTUhGUjAoc2lfaWQsIGVycik7XFxuK1xcdFxcdHBzaXVtaGZyMV9vZmYgPSBFTkVUQ19QU0lVTUhGUjEoc2lfaWQpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwc2l1bWhmcjBfb2ZmID0gRU5FVEM0X1BTSVVNSEZSMChzaV9pZCk7XFxuK1xcdFxcdHBzaXVtaGZyMV9vZmYgPSBFTkVUQzRfUFNJVU1IRlIxKHNpX2lkKTtcXG4rXFx0fVxcbitcXG4rXFx0ZW5ldGNfcG9ydF93cihodywgcHNpdW1oZnIwX29mZiwgbG93ZXJfMzJfYml0cyhoYXNoKSk7XFxuK1xcdGVuZXRjX3BvcnRfd3IoaHcsIHBzaXVtaGZyMV9vZmYsIHVwcGVyXzMyX2JpdHMoaGFzaCkpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcik7XFxuK1xcbit2b2lkIGVuZXRjX3NldF9zaV9tY19oYXNoX2ZpbHRlcihzdHJ1Y3QgZW5ldGNfc2kgKnNpLCBpbnQgc2lfaWQsIHU2NCBoYXNoKVxcbit7XFxuK1xcdGludCBwc2ltbWhmcjBfb2ZmLCBwc2ltbWhmcjFfb2ZmO1xcbitcXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXFx1MDAyNnNpLVxcdTAwM2VodztcXG4rXFxuK1xcdGlmIChpc19lbmV0Y19yZXYxKHNpKSkge1xcbitcXHRcXHRib29sIGVyciA9IHNpLVxcdTAwM2VlcnJhdGEgXFx1MDAyNiBFTkVUQ19FUlJfVUNNQ1NXUDtcXG4rXFxuK1xcdFxcdHBzaW1taGZyMF9vZmYgPSBFTkVUQ19QU0lNTUhGUjAoc2lfaWQsIGVycik7XFxuK1xcdFxcdHBzaW1taGZyMV9vZmYgPSBFTkVUQ19QU0lNTUhGUjEoc2lfaWQpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwc2ltbWhmcjBfb2ZmID0gRU5FVEM0X1BTSU1NSEZSMChzaV9pZCk7XFxuK1xcdFxcdHBzaW1taGZyMV9vZmYgPSBFTkVUQzRfUFNJTU1IRlIxKHNpX2lkKTtcXG4rXFx0fVxcbitcXG4rXFx0ZW5ldGNfcG9ydF93cihodywgcHNpbW1oZnIwX29mZiwgbG93ZXJfMzJfYml0cyhoYXNoKSk7XFxuK1xcdGVuZXRjX3BvcnRfd3IoaHcsIHBzaW1taGZyMV9vZmYsIHVwcGVyXzMyX2JpdHMoaGFzaCkpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGVuZXRjX3NldF9zaV9tY19oYXNoX2ZpbHRlcik7XFxuK1xcbit2b2lkIGVuZXRjX3NldF9zaV92bGFuX3Byb21pc2Moc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCBib29sIHByb21pc2MpXFxuK3tcXG4rXFx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFxcdTAwMjZzaS1cXHUwMDNlaHc7XFxuK1xcdGludCBwc2lwdm1yX29mZjtcXG4rXFx0dTMyIHZhbDtcXG4rXFxuK1xcdGlmIChpc19lbmV0Y19yZXYxKHNpKSlcXG4rXFx0XFx0cHNpcHZtcl9vZmYgPSBFTkVUQ19QU0lQVk1SO1xcbitcXHRlbHNlXFxuK1xcdFxcdHBzaXB2bXJfb2ZmID0gRU5FVEM0X1BTSVBWTVI7XFxuK1xcbitcXHR2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBwc2lwdm1yX29mZik7XFxuK1xcbitcXHRpZiAocHJvbWlzYylcXG4rXFx0XFx0dmFsIHw9IFBTSVBWTVJfU0lfVkxBTl9QKHNpX2lkKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHR2YWwgXFx1MDAyNj0gflBTSVBWTVJfU0lfVkxBTl9QKHNpX2lkKTtcXG4rXFxuK1xcdGVuZXRjX3BvcnRfd3IoaHcsIHBzaXB2bXJfb2ZmLCB2YWwpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGVuZXRjX3NldF9zaV92bGFuX3Byb21pc2MpO1xcbitcXG4gdm9pZCBlbmV0Y19wZl9uZXRkZXZfc2V0dXAoc3RydWN0IGVuZXRjX3NpICpzaSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuIFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqbmRldl9vcHMpXFxuIHtcXG5AQCAtMjc1LDcgKzM4MSw4IEBAIHN0YXRpYyBib29sIGVuZXRjX3BvcnRfaGFzX3BjcyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxcbiBcXHRyZXR1cm4gKHBmLVxcdTAwM2VpZl9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSB8fFxcbiBcXHRcXHRwZi1cXHUwMDNlaWZfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYIHx8XFxuIFxcdFxcdHBmLVxcdTAwM2VpZl9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVggfHxcXG4tXFx0XFx0cGYtXFx1MDAzZWlmX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUkpO1xcbitcXHRcXHRwZi1cXHUwMDNlaWZfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSB8fFxcbitcXHRcXHRwZi1cXHUwMDNlaWZfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIpO1xcbiB9XFxuIFxcbiBpbnQgZW5ldGNfbWRpb2J1c19jcmVhdGUoc3RydWN0IGVuZXRjX3BmICpwZiwgc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxcbkBAIC0zMTYsMjUgKzQyMyw0MiBAQCBpbnQgZW5ldGNfcGh5bGlua19jcmVhdGUoc3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxcbiB7XFxuIFxcdHN0cnVjdCBlbmV0Y19wZiAqcGYgPSBlbmV0Y19zaV9wcml2KHByaXYtXFx1MDAzZXNpKTtcXG4gXFx0c3RydWN0IHBoeWxpbmsgKnBoeWxpbms7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbWFjX2NhcHM7XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRwZi1cXHUwMDNlcGh5bGlua19jb25maWcuZGV2ID0gXFx1MDAyNnByaXYtXFx1MDAzZW5kZXYtXFx1MDAzZWRldjtcXG4gXFx0cGYtXFx1MDAzZXBoeWxpbmtfY29uZmlnLnR5cGUgPSBQSFlMSU5LX05FVERFVjtcXG4tXFx0cGYtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgPSBNQUNfQVNZTV9QQVVTRSB8IE1BQ19TWU1fUEFVU0UgfFxcbi1cXHRcXHRNQUNfMTAgfCBNQUNfMTAwIHwgTUFDXzEwMDAgfCBNQUNfMjUwMEZEO1xcbiBcXG4gXFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCxcXG4gXFx0XFx0ICBwZi1cXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbi1cXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJLFxcbi1cXHRcXHQgIHBmLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuLVxcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYLFxcbi1cXHRcXHQgIHBmLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuLVxcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMjUwMEJBU0VYLFxcbi1cXHRcXHQgIHBmLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuLVxcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSxcXG4tXFx0XFx0ICBwZi1cXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbi1cXHRwaHlfaW50ZXJmYWNlX3NldF9yZ21paShwZi1cXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbiBcXG4rXFx0bWFjX2NhcHMgPSBNQUNfQVNZTV9QQVVTRSB8IE1BQ19TWU1fUEFVU0U7XFxuK1xcdGlmICghZW5ldGNfaXNfcHNldWRvX21hYyhwcml2LVxcdTAwM2VzaSkpIHtcXG4rXFx0XFx0bWFjX2NhcHMgfD0gTUFDXzEwIHwgTUFDXzEwMCB8IE1BQ18xMDAwRkQgfCBNQUNfMjUwMEZEO1xcbitcXG4rXFx0XFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSxcXG4rXFx0XFx0XFx0ICBwZi1cXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbitcXHRcXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCxcXG4rXFx0XFx0XFx0ICBwZi1cXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbitcXHRcXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWCxcXG4rXFx0XFx0XFx0ICBwZi1cXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbitcXHRcXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUksXFxuK1xcdFxcdFxcdCAgcGYtXFx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcXG4rXFxuK1xcdFxcdGlmICghaXNfZW5ldGNfcmV2MShwcml2LVxcdTAwM2VzaSkpIHtcXG4rXFx0XFx0XFx0bWFjX2NhcHMgfD0gTUFDXzUwMDBGRCB8IE1BQ18xMDAwMEZEO1xcbitcXHRcXHRcXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSLFxcbitcXHRcXHRcXHRcXHQgIHBmLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHBoeV9pbnRlcmZhY2Vfc2V0X3JnbWlpKHBmLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdG1hY19jYXBzIHw9IE1BQ18xMEZEIHwgTUFDXzEwMEZEIHwgTUFDXzEwMDBGRCB8IE1BQ18yNTAwRkQgfFxcbitcXHRcXHRcXHQgICAgTUFDXzUwMDBGRCB8IE1BQ18xMDAwMEZEIHwgTUFDXzIwMDAwRkQgfFxcbitcXHRcXHRcXHQgICAgTUFDXzI1MDAwRkQ7XFxuK1xcdH1cXG4rXFxuK1xcdHBmLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzID0gbWFjX2NhcHM7XFxuIFxcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcXHUwMDI2cGYtXFx1MDAzZXBoeWxpbmtfY29uZmlnLCBvZl9md25vZGVfaGFuZGxlKG5vZGUpLFxcbiBcXHRcXHRcXHRcXHQgcGYtXFx1MDAzZWlmX21vZGUsIG9wcyk7XFxuIFxcdGlmIChJU19FUlIocGh5bGluaykpIHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5oXFxuaW5kZXggNTdkMmUwZWJkMmIwYmIuLjgyNDNjZTBkZTU3ZjY0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uaFxcbkBAIC0xNyw2ICsxNywxMSBAQCB2b2lkIGVuZXRjX3NldF9kZWZhdWx0X3Jzc19rZXkoc3RydWN0IGVuZXRjX3BmICpwZik7XFxuIGludCBlbmV0Y192bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIF9fYmUxNiBwcm90LCB1MTYgdmlkKTtcXG4gaW50IGVuZXRjX3ZsYW5fcnhfZGVsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgX19iZTE2IHByb3QsIHUxNiB2aWQpO1xcbiBpbnQgZW5ldGNfaW5pdF9zcmlvdl9yZXNvdXJjZXMoc3RydWN0IGVuZXRjX3BmICpwZik7XFxuK3ZvaWQgZW5ldGNfc2V0X3NpX3VjX3Byb21pc2Moc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCBib29sIHByb21pc2MpO1xcbit2b2lkIGVuZXRjX3NldF9zaV9tY19wcm9taXNjKHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZCwgYm9vbCBwcm9taXNjKTtcXG4rdm9pZCBlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCB1NjQgaGFzaCk7XFxuK3ZvaWQgZW5ldGNfc2V0X3NpX21jX2hhc2hfZmlsdGVyKHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZCwgdTY0IGhhc2gpO1xcbit2b2lkIGVuZXRjX3NldF9zaV92bGFuX3Byb21pc2Moc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCBib29sIHByb21pc2MpO1xcbiBcXG4gc3RhdGljIGlubGluZSB1MTYgZW5ldGNfZ2V0X2lwX3JldmlzaW9uKHN0cnVjdCBlbmV0Y19odyAqaHcpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3Fvcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3Fvcy5jXFxuaW5kZXggN2IxN2JjYTI0ZjI2MGYuLjJhYTBmY2FhZmNkMjNjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19xb3MuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19xb3MuY1xcbkBAIC0xMTM1LDcgKzExMzUsNiBAQCBzdGF0aWMgaW50IGVuZXRjX3BzZnBfcGFyc2VfY2xzZmxvd2VyKHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYsXFxuIFxcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnk7XFxuIFxcdHN0cnVjdCBhY3Rpb25fZ2F0ZV9lbnRyeSAqZTtcXG4gXFx0dTggc2ZpX292ZXJ3cml0ZSA9IDA7XFxuLVxcdGludCBlbnRyaWVzX3NpemU7XFxuIFxcdGludCBpLCBlcnI7XFxuIFxcbiBcXHRpZiAoZi1cXHUwMDNlY29tbW9uLmNoYWluX2luZGV4IFxcdTAwM2U9IHByaXYtXFx1MDAzZXBzZnBfY2FwLm1heF9zdHJlYW1pZCkge1xcbkBAIC0xMjQyLDggKzEyNDEsNyBAQCBzdGF0aWMgaW50IGVuZXRjX3BzZnBfcGFyc2VfY2xzZmxvd2VyKHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYsXFxuIFxcdFxcdGdvdG8gZnJlZV9maWx0ZXI7XFxuIFxcdH1cXG4gXFxuLVxcdGVudHJpZXNfc2l6ZSA9IHN0cnVjdF9zaXplKHNnaSwgZW50cmllcywgZW50cnlnLVxcdTAwM2VnYXRlLm51bV9lbnRyaWVzKTtcXG4tXFx0c2dpID0ga3phbGxvYyhlbnRyaWVzX3NpemUsIEdGUF9LRVJORUwpO1xcbitcXHRzZ2kgPSBremFsbG9jX2ZsZXgoKnNnaSwgZW50cmllcywgZW50cnlnLVxcdTAwM2VnYXRlLm51bV9lbnRyaWVzKTtcXG4gXFx0aWYgKCFzZ2kpIHtcXG4gXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byBmcmVlX2ZpbHRlcjtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3ZmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfdmYuY1xcbmluZGV4IDljZGIwYTRkNmJhZmI3Li43ZGNiNGEwMjQ2ZjUyOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfdmYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y192Zi5jXFxuQEAgLTMxNyw3ICszMTcsMTQgQEAgc3RhdGljIGludCBlbmV0Y192Zl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFxuIFxcdGVuZXRjX2dldF9zaV9jYXBzKHNpKTtcXG4gXFxuLVxcdG5kZXYgPSBhbGxvY19ldGhlcmRldl9tcShzaXplb2YoKnByaXYpLCBFTkVUQ19NQVhfTlVNX1RYUVMpO1xcbitcXHQvKiBDdXJyZW50bHksIHRoZSBzdXBwb3J0ZWQgU29DcyBoYXZlIGEgbWF4IG9mIDYgQ1BVcyBhbmQgdGhlIFZGc1xcbitcXHQgKiBoYXZlIGxlc3MgdGhhbiA2IFJYL1RYIHJpbmdzLiBTbyBubyBpc3N1ZXMgZm9yIHRoZXNlIHN1cHBvcnRlZFxcbitcXHQgKiBTb0NzLCBidXQgZm9yIGZ1dHVyZSBTb0NzIHdoaWNoIGhhdmUgbW9yZSBDUFVzIG9yIG1vcmUgVFgvUlhcXG4rXFx0ICogcmluZ3MsIGFsbCB0aGUgcmVsYXRlZCBsb2dpYyBuZWVkcyB0byBiZSBpbXByb3ZlZC5cXG4rXFx0ICovXFxuK1xcdG5kZXYgPSBhbGxvY19ldGhlcmRldl9tcXMoc2l6ZW9mKCpwcml2KSxcXG4rXFx0XFx0XFx0XFx0ICBtaW4oc2ktXFx1MDAzZW51bV90eF9yaW5ncywgRU5FVENfTUFYX05VTV9UWFFTKSxcXG4rXFx0XFx0XFx0XFx0ICBtaW4oc2ktXFx1MDAzZW51bV9yeF9yaW5ncywgRU5FVENfTUFYX05VTV9UWFFTKSk7XFxuIFxcdGlmICghbmRldikge1xcbiBcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiBcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJuZXRkZXYgY3JlYXRpb24gZmFpbGVkXFxcXG5cXFwiKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc2wvbnRtcC5oIGIvaW5jbHVkZS9saW51eC9mc2wvbnRtcC5oXFxuaW5kZXggZDNiNmM0NzZiOTFhMmQuLjc2NGVmMjg5MjYwODVlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZnNsL250bXAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZnNsL250bXAuaFxcbkBAIC03NSw4ICs3NSwxMCBAQCBzdHJ1Y3QgbnRtcF91c2VyIHtcXG4gXFx0LyogTlRNUCB0YWJsZSBiaXRtYXBzIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50ICovXFxuIFxcdHUzMiBldHRfYml0bWFwX3NpemU7XFxuIFxcdHUzMiBlY3RfYml0bWFwX3NpemU7XFxuK1xcdHUxNiBtYWZ0X251bV9lbnRyaWVzO1xcbiBcXHR1bnNpZ25lZCBsb25nICpldHRfZ2lkX2JpdG1hcDsgLyogb25seSB2YWxpZCBmb3Igc3dpdGNoICovXFxuIFxcdHVuc2lnbmVkIGxvbmcgKmVjdF9naWRfYml0bWFwOyAvKiBvbmx5IHZhbGlkIGZvciBzd2l0Y2ggKi9cXG4rXFx0dW5zaWduZWQgbG9uZyAqbWFmdF9laWRfYml0bWFwOyAvKiBvbmx5IHZhbGlkIGZvciBFTkVUQyAqL1xcbiB9O1xcbiBcXG4gc3RydWN0IG1hZnRfZW50cnlfZGF0YSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDAzOjAwOjE2LjE5Mjg3NDQ0MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5Mjg0Mjc1MDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZTTF9FTkVUQ1wiLFxuICAgIFwiTlhQX0VORVRDNFwiLFxuICAgIFwiRlNMX0VORVRDX1ZGXCIsXG4gICAgXCJGU0xfRU5FVENfUU9TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZW5ldGM0X3BmX3NldF9yeF9tb2RlXCIsXG4gICAgXCJlbmV0Y19wZl9zZXRfcnhfbW9kZVwiLFxuICAgIFwiZW5ldGM0X3BmX3NldF9tYWNfZmlsdGVyXCIsXG4gICAgXCJlbmV0YzRfcGZfc2V0X3VjX2V4YWN0X2ZpbHRlclwiLFxuICAgIFwiZW5ldGM0X3BmX2FkZF9tYWZ0X2VudHJpZXNcIixcbiAgICBcImVuZXRjX3N5bmNfbWFjX2ZpbHRlcnNcIixcbiAgICBcImVuZXRjX3NldF9zaV91Y19wcm9taXNjXCIsXG4gICAgXCJlbmV0Y19zZXRfc2lfbWNfcHJvbWlzY1wiLFxuICAgIFwiZW5ldGNfc2V0X3NpX3VjX2hhc2hfZmlsdGVyXCIsXG4gICAgXCJlbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXJcIixcbiAgICBcImVuZXRjX3NldF9zaV92bGFuX3Byb21pc2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIEVORVRDIGRyaXZlciB0byB1c2UgdGhlIG5ldyBgbmRvX3NldF9yeF9tb2RlX2FzeW5jYCBuZXRfZGV2aWNlX29wcyBtZW1iZXIgaW5zdGVhZCBvZiBhIGN1c3RvbSB3b3JrcXVldWUgZm9yIHNldHRpbmcgdGhlIFJYIG1vZGUuIEl0IGFsc28gbW9kaWZpZXMgTUFDIGFuZCBWTEFOIGZpbHRlcmluZyBsb2dpYyBpbiB0aGUgUEYgZHJpdmVycyAoYGVuZXRjNF9wZi5jYCBhbmQgYGVuZXRjX3BmLmNgKSwgYW5kIGludHJvZHVjZXMgY29tbW9uIGhlbHBlciBmdW5jdGlvbnMgZm9yIHByb21pc2N1b3VzIG1vZGUgYW5kIGhhc2ggZmlsdGVycy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBkcml2ZXIgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZiMTM5ZTQ3MmQ5MGE3OGFlZDMwYWRhMjI2MTU3NGFkZWUyYzI5NjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAwMzowMDoxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Yy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjLmhcbmluZGV4IDA0YTVkZDVlYTZjNzRjLi44ODM5Y2ZiNDliY2ZlOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Yy5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGMuaFxuQEAgLTEsNSArMSw1IEBAXG4gLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wKyBPUiBCU0QtMy1DbGF1c2UpICovXG4tLyogQ29weXJpZ2h0IDIwMTctMjAxOSBOWFAgKi9cbisvKiBDb3B5cmlnaHQgMjAxNy0yMDE5LCAyMDI1LTIwMjYgTlhQICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG5AQCAtMzI0LDggKzMyNCw2IEBAIHN0cnVjdCBlbmV0Y19zaSB7XG4gXHRjb25zdCBzdHJ1Y3QgZW5ldGNfZHJ2ZGF0YSAqZHJ2ZGF0YTtcbiBcdGNvbnN0IHN0cnVjdCBlbmV0Y19zaV9vcHMgKm9wcztcbiBcbi1cdHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcXVldWU7XG4tXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcnhfbW9kZV90YXNrO1xuIFx0c3RydWN0IGRlbnRyeSAqZGVidWdmc19yb290O1xuIFx0c3RydWN0IGVuZXRjX21zZ19zd2JkIG1zZzsgLyogT25seSB2YWxpZCBmb3IgVlNJICovXG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfZGVidWdmcy5jXG5pbmRleCAxYjE1OTFkY2U3M2Q0Yi4uNTAyOTAzOGJmOTlmYWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X2RlYnVnZnMuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9kZWJ1Z2ZzLmNcbkBAIC0yOCwxNSArMjgsMTQgQEAgc3RhdGljIHZvaWQgZW5ldGNfc2hvd19zaV9tYWNfaGFzaF9maWx0ZXIoc3RydWN0IHNlcV9maWxlICpzLCBpbnQgaSlcbiBcbiBzdGF0aWMgaW50IGVuZXRjX21hY19maWx0ZXJfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpXG4ge1xuLVx0c3RydWN0IGVuZXRjX3NpICpzaSA9IHMtXHUwMDNlcHJpdmF0ZTtcbi1cdHN0cnVjdCBlbmV0Y19odyAqaHcgPSBcdTAwMjZzaS1cdTAwM2VodztcbitcdHN0cnVjdCBlbmV0Y19wZiAqcGYgPSBlbmV0Y19zaV9wcml2KHMtXHUwMDNlcHJpdmF0ZSk7XG4rXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXHUwMDI2cGYtXHUwMDNlc2ktXHUwMDNlaHc7XG4rXHRpbnQgbnVtX3NpID0gcGYtXHUwMDNldG90YWxfdmZzICsgMTtcbiBcdHN0cnVjdCBtYWZ0X2VudHJ5X2RhdGEgbWFmdDtcbi1cdHN0cnVjdCBlbmV0Y19wZiAqcGY7XG4tXHRpbnQgaSwgZXJyLCBudW1fc2k7XG4tXHR1MzIgdmFsO1xuLVxuLVx0cGYgPSBlbmV0Y19zaV9wcml2KHNpKTtcbi1cdG51bV9zaSA9IHBmLVx1MDAzZWNhcHMubnVtX3ZzaSArIDE7XG4rXHRzdHJ1Y3QgbnRtcF91c2VyICp1c2VyO1xuK1x0dTMyIHZhbCwgZW50cnlfaWQ7XG4rXHRpbnQgZXJyID0gMDtcbitcdGludCBpO1xuIFxuIFx0dmFsID0gZW5ldGNfcG9ydF9yZChodywgRU5FVEM0X1BTSVBNTVIpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3NpOyBpKyspIHtcbkBAIC01MCwzMSArNDksMzggQEAgc3RhdGljIGludCBlbmV0Y19tYWNfZmlsdGVyX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3NpOyBpKyspXG4gXHRcdGVuZXRjX3Nob3dfc2lfbWFjX2hhc2hfZmlsdGVyKHMsIGkpO1xuIFxuLVx0aWYgKCFwZi1cdTAwM2VudW1fbWZlKVxuLVx0XHRyZXR1cm4gMDtcbitcdHVzZXIgPSBcdTAwMjZwZi1cdTAwM2VzaS1cdTAwM2VudG1wX3VzZXI7XG4rXHRydG5sX2xvY2soKTtcbitcbitcdGlmIChiaXRtYXBfZW1wdHkodXNlci1cdTAwM2VtYWZ0X2VpZF9iaXRtYXAsIHVzZXItXHUwMDNlbWFmdF9udW1fZW50cmllcykpXG4rXHRcdGdvdG8gdW5sb2NrX3J0bmw7XG4gXG4gXHQvKiBNQUMgYWRkcmVzcyBmaWx0ZXIgdGFibGUgKi9cbiBcdHNlcV9wdXRzKHMsIFwiTUFDIGFkZHJlc3MgZmlsdGVyIHRhYmxlXFxuXCIpO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGYtXHUwMDNlbnVtX21mZTsgaSsrKSB7XG4rXHRmb3JfZWFjaF9zZXRfYml0KGVudHJ5X2lkLCB1c2VyLVx1MDAzZW1hZnRfZWlkX2JpdG1hcCxcbitcdFx0XHQgdXNlci1cdTAwM2VtYWZ0X251bV9lbnRyaWVzKSB7XG4gXHRcdG1lbXNldChcdTAwMjZtYWZ0LCAwLCBzaXplb2YobWFmdCkpO1xuLVx0XHRlcnIgPSBudG1wX21hZnRfcXVlcnlfZW50cnkoXHUwMDI2c2ktXHUwMDNlbnRtcF91c2VyLCBpLCBcdTAwMjZtYWZ0KTtcbitcdFx0ZXJyID0gbnRtcF9tYWZ0X3F1ZXJ5X2VudHJ5KHVzZXIsIGVudHJ5X2lkLCBcdTAwMjZtYWZ0KTtcbiBcdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRcdGdvdG8gdW5sb2NrX3J0bmw7XG4gXG4tXHRcdHNlcV9wcmludGYocywgXCJFbnRyeSAlZCwgTUFDOiAlcE0sIFNJIGJpdG1hcDogMHglMDR4XFxuXCIsIGksXG4tXHRcdFx0ICAgbWFmdC5rZXllLm1hY19hZGRyLCBsZTE2X3RvX2NwdShtYWZ0LmNmZ2Uuc2lfYml0bWFwKSk7XG4rXHRcdHNlcV9wcmludGYocywgXCJFbnRyeSAlZCwgTUFDOiAlcE0sIFNJIGJpdG1hcDogMHglMDR4XFxuXCIsXG4rXHRcdFx0ICAgZW50cnlfaWQsIG1hZnQua2V5ZS5tYWNfYWRkcixcbitcdFx0XHQgICBsZTE2X3RvX2NwdShtYWZ0LmNmZ2Uuc2lfYml0bWFwKSk7XG4gXHR9XG4gXG4tXHRyZXR1cm4gMDtcbit1bmxvY2tfcnRubDpcbitcdHJ0bmxfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBERUZJTkVfU0hPV19BVFRSSUJVVEUoZW5ldGNfbWFjX2ZpbHRlcik7XG4gXG4gdm9pZCBlbmV0Y19jcmVhdGVfZGVidWdmcyhzdHJ1Y3QgZW5ldGNfc2kgKnNpKVxuIHtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gc2ktXHUwMDNlbmRldjtcbiBcdHN0cnVjdCBkZW50cnkgKnJvb3Q7XG4gXG4tXHRyb290ID0gZGVidWdmc19jcmVhdGVfZGlyKG5ldGRldl9uYW1lKG5kZXYpLCBOVUxMKTtcbitcdHJvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIocGNpX25hbWUoc2ktXHUwMDNlcGRldiksIE5VTEwpO1xuIFx0aWYgKElTX0VSUihyb290KSlcbiBcdFx0cmV0dXJuO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfaHcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfaHcuaFxuaW5kZXggZjE4NDM3NTU2YTBlZTIuLjA5MDI1ZTdhMmEzYWVkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9ody5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X2h3LmhcbkBAIC02OSw4ICs2OSw2IEBAXG4gXG4gLyogUG9ydCBTdGF0aW9uIGludGVyZmFjZSBwcm9taXNjdW91cyBNQUMgbW9kZSByZWdpc3RlciAqL1xuICNkZWZpbmUgRU5FVEM0X1BTSVBNTVJcdFx0XHQweDIwMFxuLSNkZWZpbmUgIFBTSVBNTVJfU0lfTUFDX1VQKGEpXHRcdEJJVChhKSAvKiBhID0gU0kgaW5kZXggKi9cbi0jZGVmaW5lICBQU0lQTU1SX1NJX01BQ19NUChhKVx0XHRCSVQoKGEpICsgMTYpXG4gXG4gLyogUG9ydCBTdGF0aW9uIGludGVyZmFjZSBwcm9taXNjdW91cyBWTEFOIG1vZGUgcmVnaXN0ZXIgKi9cbiAjZGVmaW5lIEVORVRDNF9QU0lQVk1SXHRcdFx0MHgyMDRcbkBAIC0xMzcsNyArMTM1LDYgQEBcbiAjZGVmaW5lIEVORVRDNF9QU0lWSEZSMShhKVx0XHQoKGEpICogMHg4MCArIDB4MjA2NClcbiBcbiAjZGVmaW5lIEVORVRDNF9QTUNBUFJcdFx0XHQweDQwMDRcbi0jZGVmaW5lICBQTUNBUFJfSERcdFx0XHRCSVQoOClcbiAjZGVmaW5lICBQTUNBUFJfRlBcdFx0XHRHRU5NQVNLKDEwLCA5KVxuIFxuIC8qIFBvcnQgY2FwYWJpbGl0eSByZWdpc3RlciAqL1xuQEAgLTE1MCw3ICsxNDcsNyBAQFxuICNkZWZpbmUgIFBDUl9MMkRPU0VcdFx0XHRCSVQoNClcbiAjZGVmaW5lICBQQ1JfVElNRVJfQ1NcdFx0XHRCSVQoOClcbiAjZGVmaW5lICBQQ1JfUFNQRUVEXHRcdFx0R0VOTUFTSygyOSwgMTYpXG4tI2RlZmluZSAgUENSX1BTUEVFRF9WQUwoc3BlZWQpXHRcdCgoKHNwZWVkKSAvIDEwIC0gMSkgXHUwMDNjXHUwMDNjIDE2KVxuKyNkZWZpbmUgIFBDUl9QU1BFRURfVkFMKHMpXHRcdEZJRUxEX1BSRVAoUENSX1BTUEVFRCwgKChzKSAvIDEwIC0gMSkpXG4gXG4gLyogUG9ydCBNQUMgYWRkcmVzcyByZWdpc3RlciAwLzEgKi9cbiAjZGVmaW5lIEVORVRDNF9QTUFSMFx0XHRcdDB4NDAyMFxuQEAgLTIwMCw3ICsxOTcsNiBAQFxuICNkZWZpbmUgIFBNX0NNRF9DRkdfQ05UX0ZSTV9FTlx0XHRCSVQoMTMpXG4gI2RlZmluZSAgUE1fQ01EX0NGR19UWFBcdFx0XHRCSVQoMTUpXG4gI2RlZmluZSAgUE1fQ01EX0NGR19TRU5EX0lETEVcdFx0QklUKDE2KVxuLSNkZWZpbmUgIFBNX0NNRF9DRkdfSERfRkNFTlx0XHRCSVQoMTgpXG4gI2RlZmluZSAgUE1fQ01EX0NGR19TRkRcdFx0XHRCSVQoMjEpXG4gI2RlZmluZSAgUE1fQ01EX0NGR19UWF9GTFVTSFx0XHRCSVQoMjIpXG4gI2RlZmluZSAgUE1fQ01EX0NGR19UWF9MT1dQX0VOXHRcdEJJVCgyMylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmNcbmluZGV4IDQzN2ExNWJiYjQ3YmE4Li5mY2ZiYWJiMjlkMjJlNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jXG5AQCAtMjMsMTggKzIzLDExIEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9nZXRfcG9ydF9jYXBzKHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4gXHR1MzIgdmFsO1xuIFxuIFx0dmFsID0gZW5ldGNfcG9ydF9yZChodywgRU5FVEM0X0VDQVBSMSk7XG4tXHRwZi1cdTAwM2VjYXBzLm51bV92c2kgPSAodmFsIFx1MDAyNiBFQ0FQUjFfTlVNX1ZTSSkgXHUwMDNlXHUwMDNlIDI0O1xuIFx0cGYtXHUwMDNlY2Fwcy5udW1fbXNpeCA9ICgodmFsIFx1MDAyNiBFQ0FQUjFfTlVNX01TSVgpIFx1MDAzZVx1MDAzZSAxMikgKyAxO1xuIFxuIFx0dmFsID0gZW5ldGNfcG9ydF9yZChodywgRU5FVEM0X0VDQVBSMik7XG4gXHRwZi1cdTAwM2VjYXBzLm51bV9yeF9iZHIgPSAodmFsIFx1MDAyNiBFQ0FQUjJfTlVNX1JYX0JEUikgXHUwMDNlXHUwMDNlIDE2O1xuIFx0cGYtXHUwMDNlY2Fwcy5udW1fdHhfYmRyID0gdmFsIFx1MDAyNiBFQ0FQUjJfTlVNX1RYX0JEUjtcbi1cbi1cdHZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDNF9QTUNBUFIpO1xuLVx0cGYtXHUwMDNlY2Fwcy5oYWxmX2R1cGxleCA9ICh2YWwgXHUwMDI2IFBNQ0FQUl9IRCkgPyAxIDogMDtcbi1cbi1cdHZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDNF9QU0lNQUZDQVBSKTtcbi1cdHBmLVx1MDAzZWNhcHMubWFjX2ZpbHRlcl9udW0gPSB2YWwgXHUwMDI2IFBTSU1BRkNBUFJfTlVNX01BQ19BRlRFO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBlbmV0YzRfZ2V0X3BzaV9od19mZWF0dXJlcyhzdHJ1Y3QgZW5ldGNfc2kgKnNpKVxuQEAgLTc1LDM4ICs2OCw2IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wZl9nZXRfc2lfcHJpbWFyeV9tYWMoc3RydWN0IGVuZXRjX2h3ICpodywgaW50IHNpLFxuIFx0cHV0X3VuYWxpZ25lZF9sZTE2KGxvd2VyLCBhZGRyICsgNCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfc2lfbWFjX3Byb21pc2Moc3RydWN0IGVuZXRjX2h3ICpodywgaW50IHNpLFxuLVx0XHRcdFx0XHQgYm9vbCB1Y19wcm9taXNjLCBib29sIG1jX3Byb21pc2MpXG4te1xuLVx0dTMyIHZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDNF9QU0lQTU1SKTtcbi1cbi1cdGlmICh1Y19wcm9taXNjKVxuLVx0XHR2YWwgfD0gUFNJUE1NUl9TSV9NQUNfVVAoc2kpO1xuLVx0ZWxzZVxuLVx0XHR2YWwgXHUwMDI2PSB+UFNJUE1NUl9TSV9NQUNfVVAoc2kpO1xuLVxuLVx0aWYgKG1jX3Byb21pc2MpXG4tXHRcdHZhbCB8PSBQU0lQTU1SX1NJX01BQ19NUChzaSk7XG4tXHRlbHNlXG4tXHRcdHZhbCBcdTAwMjY9IH5QU0lQTU1SX1NJX01BQ19NUChzaSk7XG4tXG4tXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJUE1NUiwgdmFsKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9zaV91Y19oYXNoX2ZpbHRlcihzdHJ1Y3QgZW5ldGNfaHcgKmh3LCBpbnQgc2ksXG4tXHRcdFx0XHRcdCAgICB1NjQgaGFzaClcbi17XG4tXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJVU1IRlIwKHNpKSwgbG93ZXJfMzJfYml0cyhoYXNoKSk7XG4tXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJVU1IRlIxKHNpKSwgdXBwZXJfMzJfYml0cyhoYXNoKSk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfc2lfbWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX2h3ICpodywgaW50IHNpLFxuLVx0XHRcdFx0XHQgICAgdTY0IGhhc2gpXG4te1xuLVx0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSU1NSEZSMChzaSksIGxvd2VyXzMyX2JpdHMoaGFzaCkpO1xuLVx0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSU1NSEZSMShzaSksIHVwcGVyXzMyX2JpdHMoaGFzaCkpO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBlbmV0YzRfcGZfc2V0X2xvb3BiYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBib29sIGVuKVxuIHtcbiBcdHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbkBAIC0xMjQsMzQgKzg1LDQ3IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfbG9vcGJhY2soc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgZW4pXG4gXG4gc3RhdGljIHZvaWQgZW5ldGM0X3BmX2NsZWFyX21hZnRfZW50cmllcyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuIHtcbi1cdGludCBpO1xuK1x0c3RydWN0IG50bXBfdXNlciAqdXNlciA9IFx1MDAyNnBmLVx1MDAzZXNpLVx1MDAzZW50bXBfdXNlcjtcbitcdHUzMiBlbnRyeV9pZDtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmLVx1MDAzZW51bV9tZmU7IGkrKylcbi1cdFx0bnRtcF9tYWZ0X2RlbGV0ZV9lbnRyeShcdTAwMjZwZi1cdTAwM2VzaS1cdTAwM2VudG1wX3VzZXIsIGkpO1xuLVxuLVx0cGYtXHUwMDNlbnVtX21mZSA9IDA7XG4rXHRmb3JfZWFjaF9zZXRfYml0KGVudHJ5X2lkLCB1c2VyLVx1MDAzZW1hZnRfZWlkX2JpdG1hcCxcbitcdFx0XHQgdXNlci1cdTAwM2VtYWZ0X251bV9lbnRyaWVzKSB7XG4rXHRcdGlmICghbnRtcF9tYWZ0X2RlbGV0ZV9lbnRyeSh1c2VyLCBlbnRyeV9pZCkpXG4rXHRcdFx0bnRtcF9jbGVhcl9laWRfYml0bWFwKHVzZXItXHUwMDNlbWFmdF9laWRfYml0bWFwLCBlbnRyeV9pZCk7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyBpbnQgZW5ldGM0X3BmX2FkZF9tYWZ0X2VudHJpZXMoc3RydWN0IGVuZXRjX3BmICpwZixcbi1cdFx0XHRcdCAgICAgIHN0cnVjdCBlbmV0Y19tYWNfYWRkciAqbWFjLFxuLVx0XHRcdFx0ICAgICAgaW50IG1hY19jbnQpXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMpXG4ge1xuK1x0c3RydWN0IG50bXBfdXNlciAqdXNlciA9IFx1MDAyNnBmLVx1MDAzZXNpLVx1MDAzZW50bXBfdXNlcjtcbitcdGludCBtYWNfY250ID0gbmV0ZGV2X2h3X2FkZHJfbGlzdF9jb3VudCh1Yyk7XG4gXHRzdHJ1Y3QgbWFmdF9lbnRyeV9kYXRhIG1hZnQgPSB7fTtcbitcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4rXHR1MzIgYXZhaWxhYmxlX2VudHJpZXM7XG4gXHR1MTYgc2lfYml0ID0gQklUKDApO1xuLVx0aW50IGksIGVycjtcbitcdHUzMiBlbnRyeV9pZDtcbitcdGludCBlcnI7XG4rXG4rXHRhdmFpbGFibGVfZW50cmllcyA9IHVzZXItXHUwMDNlbWFmdF9udW1fZW50cmllcyAtXG4rXHRcdFx0ICAgIGJpdG1hcF93ZWlnaHQodXNlci1cdTAwM2VtYWZ0X2VpZF9iaXRtYXAsXG4rXHRcdFx0XHRcdCAgdXNlci1cdTAwM2VtYWZ0X251bV9lbnRyaWVzKTtcbitcbitcdGlmIChtYWNfY250IFx1MDAzZSBhdmFpbGFibGVfZW50cmllcylcbitcdFx0cmV0dXJuIC1FTk9TUEM7XG4gXG4gXHRtYWZ0LmNmZ2Uuc2lfYml0bWFwID0gY3B1X3RvX2xlMTYoc2lfYml0KTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1hY19jbnQ7IGkrKykge1xuLVx0XHRldGhlcl9hZGRyX2NvcHkobWFmdC5rZXllLm1hY19hZGRyLCBtYWNbaV0uYWRkcik7XG4tXHRcdGVyciA9IG50bXBfbWFmdF9hZGRfZW50cnkoXHUwMDI2cGYtXHUwMDNlc2ktXHUwMDNlbnRtcF91c2VyLCBpLCBcdTAwMjZtYWZ0KTtcbitcdG5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIHVjKSB7XG4rXHRcdGVudHJ5X2lkID0gbnRtcF9sb29rdXBfZnJlZV9laWQodXNlci1cdTAwM2VtYWZ0X2VpZF9iaXRtYXAsXG4rXHRcdFx0XHRcdFx0dXNlci1cdTAwM2VtYWZ0X251bV9lbnRyaWVzKTtcbitcdFx0ZXRoZXJfYWRkcl9jb3B5KG1hZnQua2V5ZS5tYWNfYWRkciwgaGEtXHUwMDNlYWRkcik7XG4rXHRcdGVyciA9IG50bXBfbWFmdF9hZGRfZW50cnkodXNlciwgZW50cnlfaWQsIFx1MDAyNm1hZnQpO1xuIFx0XHRpZiAodW5saWtlbHkoZXJyKSkge1xuLVx0XHRcdHBmLVx1MDAzZW51bV9tZmUgPSBpO1xuK1x0XHRcdG50bXBfY2xlYXJfZWlkX2JpdG1hcCh1c2VyLVx1MDAzZW1hZnRfZWlkX2JpdG1hcCwgZW50cnlfaWQpO1xuIFx0XHRcdGdvdG8gY2xlYXJfbWFmdF9lbnRyaWVzO1xuIFx0XHR9XG4gXHR9XG4gXG4tXHRwZi1cdTAwM2VudW1fbWZlID0gbWFjX2NudDtcbi1cbiBcdHJldHVybiAwO1xuIFxuIGNsZWFyX21hZnRfZW50cmllczpcbkBAIC0xNjAsOTcgKzEzNCw3MCBAQCBzdGF0aWMgaW50IGVuZXRjNF9wZl9hZGRfbWFmdF9lbnRyaWVzKHN0cnVjdCBlbmV0Y19wZiAqcGYsXG4gXHRyZXR1cm4gIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCBlbmV0YzRfcGZfc2V0X3VjX2V4YWN0X2ZpbHRlcihzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuK3N0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfdWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3BmICpwZixcbitcdFx0XHRcdFx0IHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp1YylcbiB7XG4tXHRpbnQgbWF4X251bV9tZmUgPSBwZi1cdTAwM2VjYXBzLm1hY19maWx0ZXJfbnVtO1xuLVx0c3RydWN0IGVuZXRjX21hY19maWx0ZXIgbWFjX2ZpbHRlciA9IHt9O1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwZi1cdTAwM2VzaS1cdTAwM2VuZGV2O1xuLVx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZXNpLVx1MDAzZWh3O1xuLVx0c3RydWN0IGVuZXRjX21hY19hZGRyICptYWNfdGJsO1xuK1x0c3RydWN0IGVuZXRjX21hY19maWx0ZXIgKm1hY19maWx0ZXIgPSBcdTAwMjZwZi1cdTAwM2VtYWNfZmlsdGVyW1VDXTtcbiBcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4tXHRpbnQgaSA9IDAsIGVycjtcbi1cdGludCBtYWNfY250O1xuK1x0dTY0IGhhc2g7XG4gXG4tXHRuZXRpZl9hZGRyX2xvY2tfYmgobmRldik7XG4rXHRlbmV0Y19yZXNldF9tYWNfYWRkcl9maWx0ZXIobWFjX2ZpbHRlcik7XG4rXHRuZXRkZXZfaHdfYWRkcl9saXN0X2Zvcl9lYWNoKGhhLCB1YylcbitcdFx0ZW5ldGNfYWRkX21hY19hZGRyX2h0X2ZpbHRlcihtYWNfZmlsdGVyLCBoYS1cdTAwM2VhZGRyKTtcbitcbitcdGJpdG1hcF90b19hcnI2NChcdTAwMjZoYXNoLCBtYWNfZmlsdGVyLVx1MDAzZW1hY19oYXNoX3RhYmxlLFxuK1x0XHRcdEVORVRDX01BRERSX0hBU0hfVEJMX1NaKTtcbitcdGVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcihwZi1cdTAwM2VzaSwgMCwgaGFzaCk7XG4rfVxuIFxuLVx0bWFjX2NudCA9IG5ldGRldl91Y19jb3VudChuZGV2KTtcbi1cdGlmICghbWFjX2NudCkge1xuLVx0XHRuZXRpZl9hZGRyX3VubG9ja19iaChuZGV2KTtcbitzdGF0aWMgaW50IGVuZXRjNF9wZl9zZXRfdWNfZXhhY3RfZmlsdGVyKHN0cnVjdCBlbmV0Y19wZiAqcGYsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMpXG4re1xuK1x0c3RydWN0IGVuZXRjX3NpICpzaSA9IHBmLVx1MDAzZXNpO1xuK1x0aW50IGVycjtcbitcbitcdGlmIChuZXRkZXZfaHdfYWRkcl9saXN0X2VtcHR5KHVjKSkge1xuIFx0XHQvKiBjbGVhciBib3RoIE1BQyBoYXNoIGFuZCBleGFjdCBmaWx0ZXJzICovXG4tXHRcdGVuZXRjNF9wZl9zZXRfc2lfdWNfaGFzaF9maWx0ZXIoaHcsIDAsIDApO1xuK1x0XHRlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc2ksIDAsIDApO1xuIFx0XHRlbmV0YzRfcGZfY2xlYXJfbWFmdF9lbnRyaWVzKHBmKTtcbiBcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHRpZiAobWFjX2NudCBcdTAwM2UgbWF4X251bV9tZmUpIHtcbi1cdFx0ZXJyID0gLUVOT1NQQztcbi1cdFx0Z290byB1bmxvY2tfbmV0aWZfYWRkcjtcbi1cdH1cbi1cbi1cdG1hY190YmwgPSBremFsbG9jX29ianMoKm1hY190YmwsIG1hY19jbnQsIEdGUF9BVE9NSUMpO1xuLVx0aWYgKCFtYWNfdGJsKSB7XG4tXHRcdGVyciA9IC1FTk9NRU07XG4tXHRcdGdvdG8gdW5sb2NrX25ldGlmX2FkZHI7XG4tXHR9XG4tXG4tXHRuZXRkZXZfZm9yX2VhY2hfdWNfYWRkcihoYSwgbmRldikge1xuLVx0XHRlbmV0Y19hZGRfbWFjX2FkZHJfaHRfZmlsdGVyKFx1MDAyNm1hY19maWx0ZXIsIGhhLVx1MDAzZWFkZHIpO1xuLVx0XHRldGhlcl9hZGRyX2NvcHkobWFjX3RibFtpKytdLmFkZHIsIGhhLVx1MDAzZWFkZHIpO1xuLVx0fVxuLVxuLVx0bmV0aWZfYWRkcl91bmxvY2tfYmgobmRldik7XG4tXG4tXHQvKiBTZXQgdGVtcG9yYXJ5IHVuaWNhc3QgaGFzaCBmaWx0ZXJzIGluIGNhc2Ugb2YgUnggbG9zcyB3aGVuXG4rXHQvKiBTZXQgdGVtcG9yYXJ5IHVuaWNhc3QgaGFzaCBmaWx0ZXIgaW4gY2FzZSBvZiBSeCBsb3NzIHdoZW5cbiBcdCAqIHVwZGF0aW5nIE1BQyBhZGRyZXNzIGZpbHRlciB0YWJsZVxuIFx0ICovXG4tXHRlbmV0YzRfcGZfc2V0X3NpX3VjX2hhc2hfZmlsdGVyKGh3LCAwLCAqbWFjX2ZpbHRlci5tYWNfaGFzaF90YWJsZSk7XG4rXHRlbmV0YzRfcGZfc2V0X3VjX2hhc2hfZmlsdGVyKHBmLCB1Yyk7XG4gXHRlbmV0YzRfcGZfY2xlYXJfbWFmdF9lbnRyaWVzKHBmKTtcbiBcbi1cdGlmICghZW5ldGM0X3BmX2FkZF9tYWZ0X2VudHJpZXMocGYsIG1hY190YmwsIGkpKVxuLVx0XHRlbmV0YzRfcGZfc2V0X3NpX3VjX2hhc2hfZmlsdGVyKGh3LCAwLCAwKTtcbi1cbi1cdGtmcmVlKG1hY190YmwpO1xuLVxuLVx0cmV0dXJuIDA7XG4tXG4tdW5sb2NrX25ldGlmX2FkZHI6XG4tXHRuZXRpZl9hZGRyX3VubG9ja19iaChuZGV2KTtcbitcdGVyciA9IGVuZXRjNF9wZl9hZGRfbWFmdF9lbnRyaWVzKHBmLCB1Yyk7XG4rXHRpZiAoIWVycikge1xuK1x0XHRlbmV0Y19yZXNldF9tYWNfYWRkcl9maWx0ZXIoXHUwMDI2cGYtXHUwMDNlbWFjX2ZpbHRlcltVQ10pO1xuK1x0XHRlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc2ksIDAsIDApO1xuK1x0fVxuIFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9tYWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3BmICpwZiwgaW50IHR5cGUpXG4rc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9tY19oYXNoX2ZpbHRlcihzdHJ1Y3QgZW5ldGNfcGYgKnBmLFxuK1x0XHRcdFx0XHQgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jKVxuIHtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGYtXHUwMDNlc2ktXHUwMDNlbmRldjtcbi1cdHN0cnVjdCBlbmV0Y19tYWNfZmlsdGVyICptYWNfZmlsdGVyO1xuLVx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZXNpLVx1MDAzZWh3O1xuK1x0c3RydWN0IGVuZXRjX21hY19maWx0ZXIgKm1hY19maWx0ZXIgPSBcdTAwMjZwZi1cdTAwM2VtYWNfZmlsdGVyW01DXTtcbiBcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4rXHR1NjQgaGFzaDtcbiBcbi1cdG5ldGlmX2FkZHJfbG9ja19iaChuZGV2KTtcbi1cdGlmICh0eXBlIFx1MDAyNiBFTkVUQ19NQUNfRklMVEVSX1RZUEVfVUMpIHtcbi1cdFx0bWFjX2ZpbHRlciA9IFx1MDAyNnBmLVx1MDAzZW1hY19maWx0ZXJbVUNdO1xuLVx0XHRlbmV0Y19yZXNldF9tYWNfYWRkcl9maWx0ZXIobWFjX2ZpbHRlcik7XG4tXHRcdG5ldGRldl9mb3JfZWFjaF91Y19hZGRyKGhhLCBuZGV2KVxuLVx0XHRcdGVuZXRjX2FkZF9tYWNfYWRkcl9odF9maWx0ZXIobWFjX2ZpbHRlciwgaGEtXHUwMDNlYWRkcik7XG4tXG4tXHRcdGVuZXRjNF9wZl9zZXRfc2lfdWNfaGFzaF9maWx0ZXIoaHcsIDAsXG4tXHRcdFx0XHRcdFx0Km1hY19maWx0ZXItXHUwMDNlbWFjX2hhc2hfdGFibGUpO1xuLVx0fVxuK1x0ZW5ldGNfcmVzZXRfbWFjX2FkZHJfZmlsdGVyKG1hY19maWx0ZXIpO1xuK1x0bmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgbWMpXG4rXHRcdGVuZXRjX2FkZF9tYWNfYWRkcl9odF9maWx0ZXIobWFjX2ZpbHRlciwgaGEtXHUwMDNlYWRkcik7XG4gXG4tXHRpZiAodHlwZSBcdTAwMjYgRU5FVENfTUFDX0ZJTFRFUl9UWVBFX01DKSB7XG4tXHRcdG1hY19maWx0ZXIgPSBcdTAwMjZwZi1cdTAwM2VtYWNfZmlsdGVyW01DXTtcbi1cdFx0ZW5ldGNfcmVzZXRfbWFjX2FkZHJfZmlsdGVyKG1hY19maWx0ZXIpO1xuLVx0XHRuZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihoYSwgbmRldilcbi1cdFx0XHRlbmV0Y19hZGRfbWFjX2FkZHJfaHRfZmlsdGVyKG1hY19maWx0ZXIsIGhhLVx1MDAzZWFkZHIpO1xuLVxuLVx0XHRlbmV0YzRfcGZfc2V0X3NpX21jX2hhc2hfZmlsdGVyKGh3LCAwLFxuLVx0XHRcdFx0XHRcdCptYWNfZmlsdGVyLVx1MDAzZW1hY19oYXNoX3RhYmxlKTtcbi1cdH1cbi1cdG5ldGlmX2FkZHJfdW5sb2NrX2JoKG5kZXYpO1xuK1x0Yml0bWFwX3RvX2FycjY0KFx1MDAyNmhhc2gsIG1hY19maWx0ZXItXHUwMDNlbWFjX2hhc2hfdGFibGUsXG4rXHRcdFx0RU5FVENfTUFERFJfSEFTSF9UQkxfU1opO1xuK1x0ZW5ldGNfc2V0X3NpX21jX2hhc2hfZmlsdGVyKHBmLVx1MDAzZXNpLCAwLCBoYXNoKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9tYWNfZmlsdGVyKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGludCB0eXBlKVxuK3N0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfbWFjX2ZpbHRlcihzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBpbnQgdHlwZSxcbitcdFx0XHRcdCAgICAgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbWMpXG4ge1xuIFx0LyogQ3VycmVudGx5LCB0aGUgTUFDIGFkZHJlc3MgZmlsdGVyIHRhYmxlIChNQUZUKSBvbmx5IGhhcyA0IGVudHJpZXMsXG4gXHQgKiBhbmQgbXVsdGlwbGUgbXVsdGljYXN0IGFkZHJlc3NlcyBmb3IgZmlsdGVyaW5nIHdpbGwgYmUgY29uZmlndXJlZFxuQEAgLTI1OCwxNSArMjA1LDE2IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfbWFjX2ZpbHRlcihzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBpbnQgdHlwZSlcbiBcdCAqIHVuaWNhc3QgZmlsdGVyaW5nLiBJZiB0aGUgbnVtYmVyIG9mIHVuaWNhc3QgYWRkcmVzc2VzIGV4Y2VlZHMgdGhlXG4gXHQgKiB0YWJsZSBjYXBhY2l0eSwgdGhlIE1BQyBoYXNoIGZpbHRlciB3aWxsIGJlIHVzZWQuXG4gXHQgKi9cbi1cdGlmICh0eXBlIFx1MDAyNiBFTkVUQ19NQUNfRklMVEVSX1RZUEVfVUMgXHUwMDI2XHUwMDI2IGVuZXRjNF9wZl9zZXRfdWNfZXhhY3RfZmlsdGVyKHBmKSkge1xuK1x0aWYgKHR5cGUgXHUwMDI2IEVORVRDX01BQ19GSUxURVJfVFlQRV9VQyBcdTAwMjZcdTAwMjZcbitcdCAgICBlbmV0YzRfcGZfc2V0X3VjX2V4YWN0X2ZpbHRlcihwZiwgdWMpKSB7XG4gXHRcdC8qIEZhbGwgYmFjayB0byB0aGUgTUFDIGhhc2ggZmlsdGVyICovXG4tXHRcdGVuZXRjNF9wZl9zZXRfbWFjX2hhc2hfZmlsdGVyKHBmLCBFTkVUQ19NQUNfRklMVEVSX1RZUEVfVUMpO1xuK1x0XHRlbmV0YzRfcGZfc2V0X3VjX2hhc2hfZmlsdGVyKHBmLCB1Yyk7XG4gXHRcdC8qIENsZWFyIHRoZSBvbGQgTUFDIGV4YWN0IGZpbHRlciAqL1xuIFx0XHRlbmV0YzRfcGZfY2xlYXJfbWFmdF9lbnRyaWVzKHBmKTtcbiBcdH1cbiBcbiBcdGlmICh0eXBlIFx1MDAyNiBFTkVUQ19NQUNfRklMVEVSX1RZUEVfTUMpXG4tXHRcdGVuZXRjNF9wZl9zZXRfbWFjX2hhc2hfZmlsdGVyKHBmLCBFTkVUQ19NQUNfRklMVEVSX1RZUEVfTUMpO1xuK1x0XHRlbmV0YzRfcGZfc2V0X21jX2hhc2hfZmlsdGVyKHBmLCBtYyk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZW5ldGNfcGZfb3BzIGVuZXRjNF9wZl9vcHMgPSB7XG5AQCAtMzA2LDM0ICsyNTQsMzUgQEAgc3RhdGljIHZvaWQgZW5ldGM0X2RlZmF1bHRfcmluZ3NfYWxsb2NhdGlvbihzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuIHtcbiBcdHN0cnVjdCBlbmV0Y19odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2VzaS1cdTAwM2VodztcbiBcdHUzMiBudW1fcnhfYmRyLCBudW1fdHhfYmRyLCB2YWw7XG4rXHRpbnQgbnVtX3ZmcyA9IHBmLVx1MDAzZXRvdGFsX3ZmcztcbiBcdHUzMiB2Zl90eF9iZHIsIHZmX3J4X2JkcjtcbiBcdGludCBpLCByeF9yZW0sIHR4X3JlbTtcbiBcbi1cdGlmIChwZi1cdTAwM2VjYXBzLm51bV9yeF9iZHIgXHUwMDNjIEVORVRDX1NJX01BWF9SSU5HX05VTSArIHBmLVx1MDAzZWNhcHMubnVtX3ZzaSlcbi1cdFx0bnVtX3J4X2JkciA9IHBmLVx1MDAzZWNhcHMubnVtX3J4X2JkciAtIHBmLVx1MDAzZWNhcHMubnVtX3ZzaTtcbitcdGlmIChwZi1cdTAwM2VjYXBzLm51bV9yeF9iZHIgXHUwMDNjIEVORVRDX1NJX01BWF9SSU5HX05VTSArIG51bV92ZnMpXG4rXHRcdG51bV9yeF9iZHIgPSBwZi1cdTAwM2VjYXBzLm51bV9yeF9iZHIgLSBudW1fdmZzO1xuIFx0ZWxzZVxuIFx0XHRudW1fcnhfYmRyID0gRU5FVENfU0lfTUFYX1JJTkdfTlVNO1xuIFxuLVx0aWYgKHBmLVx1MDAzZWNhcHMubnVtX3R4X2JkciBcdTAwM2MgRU5FVENfU0lfTUFYX1JJTkdfTlVNICsgcGYtXHUwMDNlY2Fwcy5udW1fdnNpKVxuLVx0XHRudW1fdHhfYmRyID0gcGYtXHUwMDNlY2Fwcy5udW1fdHhfYmRyIC0gcGYtXHUwMDNlY2Fwcy5udW1fdnNpO1xuK1x0aWYgKHBmLVx1MDAzZWNhcHMubnVtX3R4X2JkciBcdTAwM2MgRU5FVENfU0lfTUFYX1JJTkdfTlVNICsgbnVtX3ZmcylcbitcdFx0bnVtX3R4X2JkciA9IHBmLVx1MDAzZWNhcHMubnVtX3R4X2JkciAtIG51bV92ZnM7XG4gXHRlbHNlXG4gXHRcdG51bV90eF9iZHIgPSBFTkVUQ19TSV9NQVhfUklOR19OVU07XG4gXG4gXHR2YWwgPSBlbmV0YzRfcHNpY2ZncjBfdmFsX2NvbnN0cnVjdChmYWxzZSwgbnVtX3R4X2JkciwgbnVtX3J4X2Jkcik7XG4gXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJQ0ZHUjAoMCksIHZhbCk7XG4gXG4tXHRpZiAoIXBmLVx1MDAzZWNhcHMubnVtX3ZzaSlcbitcdGlmICghbnVtX3ZmcylcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bnVtX3J4X2JkciA9IHBmLVx1MDAzZWNhcHMubnVtX3J4X2JkciAtIG51bV9yeF9iZHI7XG4tXHRyeF9yZW0gPSBudW1fcnhfYmRyICUgcGYtXHUwMDNlY2Fwcy5udW1fdnNpO1xuLVx0bnVtX3J4X2JkciA9IG51bV9yeF9iZHIgLyBwZi1cdTAwM2VjYXBzLm51bV92c2k7XG4rXHRyeF9yZW0gPSBudW1fcnhfYmRyICUgbnVtX3ZmcztcbitcdG51bV9yeF9iZHIgPSBudW1fcnhfYmRyIC8gbnVtX3ZmcztcbiBcbiBcdG51bV90eF9iZHIgPSBwZi1cdTAwM2VjYXBzLm51bV90eF9iZHIgLSBudW1fdHhfYmRyO1xuLVx0dHhfcmVtID0gbnVtX3R4X2JkciAlIHBmLVx1MDAzZWNhcHMubnVtX3ZzaTtcbi1cdG51bV90eF9iZHIgPSBudW1fdHhfYmRyIC8gcGYtXHUwMDNlY2Fwcy5udW1fdnNpO1xuK1x0dHhfcmVtID0gbnVtX3R4X2JkciAlIG51bV92ZnM7XG4rXHRudW1fdHhfYmRyID0gbnVtX3R4X2JkciAvIG51bV92ZnM7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZi1cdTAwM2VjYXBzLm51bV92c2k7IGkrKykge1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3ZmczsgaSsrKSB7XG4gXHRcdHZmX3R4X2JkciA9IChpIFx1MDAzYyB0eF9yZW0pID8gbnVtX3R4X2JkciArIDEgOiBudW1fdHhfYmRyO1xuIFx0XHR2Zl9yeF9iZHIgPSAoaSBcdTAwM2MgcnhfcmVtKSA/IG51bV9yeF9iZHIgKyAxIDogbnVtX3J4X2JkcjtcbiBcdFx0dmFsID0gZW5ldGM0X3BzaWNmZ3IwX3ZhbF9jb25zdHJ1Y3QodHJ1ZSwgdmZfdHhfYmRyLCB2Zl9yeF9iZHIpO1xuQEAgLTM0Niw1MyArMjk1LDcwIEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9hbGxvY2F0ZV9zaV9yaW5ncyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuIFx0ZW5ldGM0X2RlZmF1bHRfcmluZ3NfYWxsb2NhdGlvbihwZik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGVuZXRjNF9wZl9zZXRfc2lfdmxhbl9wcm9taXNjKHN0cnVjdCBlbmV0Y19odyAqaHcsIGludCBzaSwgYm9vbCBlbilcbi17XG4tXHR1MzIgdmFsID0gZW5ldGNfcG9ydF9yZChodywgRU5FVEM0X1BTSVBWTVIpO1xuLVxuLVx0aWYgKGVuKVxuLVx0XHR2YWwgfD0gQklUKHNpKTtcbi1cdGVsc2Vcbi1cdFx0dmFsIFx1MDAyNj0gfkJJVChzaSk7XG4tXG4tXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJUFZNUiwgdmFsKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgZW5ldGM0X3NldF9kZWZhdWx0X3NpX3ZsYW5fcHJvbWlzYyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuLXtcbi1cdHN0cnVjdCBlbmV0Y19odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2VzaS1cdTAwM2Vodztcbi1cdGludCBudW1fc2kgPSBwZi1cdTAwM2VjYXBzLm51bV92c2kgKyAxO1xuLVx0aW50IGk7XG4tXG4tXHQvKiBlbmZvcmNlIFZMQU4gcHJvbWlzY3VvdXMgbW9kZSBmb3IgYWxsIFNJcyAqL1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3NpOyBpKyspXG4tXHRcdGVuZXRjNF9wZl9zZXRfc2lfdmxhbl9wcm9taXNjKGh3LCBpLCB0cnVlKTtcbi19XG4tXG4gLyogQWxsb2NhdGUgdGhlIG51bWJlciBvZiBNU0ktWCB2ZWN0b3JzIGZvciBwZXIgU0kuICovXG4gc3RhdGljIHZvaWQgZW5ldGM0X3NldF9zaV9tc2l4X251bShzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuIHtcbitcdGludCB2YWxpZF9udW1fc2kgPSBwZi1cdTAwM2V0b3RhbF92ZnMgKyAxO1xuIFx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZXNpLVx1MDAzZWh3O1xuLVx0aW50IGksIG51bV9tc2l4LCB0b3RhbF9zaTtcbitcdGludCBpLCBudW1fbXNpeCwgbnVtX3ZzaTtcbiBcdHUzMiB2YWw7XG4gXG4tXHR0b3RhbF9zaSA9IHBmLVx1MDAzZWNhcHMubnVtX3ZzaSArIDE7XG4rXHR2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBFTkVUQzRfRUNBUFIxKTtcbitcdG51bV92c2kgPSBGSUVMRF9HRVQoRUNBUFIxX05VTV9WU0ksIHZhbCk7XG4rXG4rXHQvKiBUaGUgUFNJYUNGR1IyW05VTV9NU0lYXSBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBNU0ktWCBhbGxvY2F0ZWQgdG9cbitcdCAqIHRoZSBTSSBpcyBOVU1fTVNJWCArIDEsIHNvIHRoZSBtaW5pbXVtIG51bWJlciBvZiBNU0ktWCBhbGxvY2F0ZWQgdG9cbitcdCAqIGVhY2ggU0kgaXMgMS4gVGhlIHRvdGFsIG51bWJlciBvZiBNU0ktWCBhbGxvY2F0ZWQgdG8gUFNJIGFuZCBWU0lzXG4rXHQgKiBjYW5ub3QgZXhjZWVkIHRoZSB0b3RhbCBudW1iZXIgb2YgTVNJLVggb3duZWQgYnkgdGhpcyBFTkVUQywgd2hpY2hcbitcdCAqIGlzIEVDQVBSMVtOVU1fTVNJWF0uIE90aGVyd2lzZSwgd2hlbiBtdWx0aXBsZSBFTkVUQyBpbnN0YW5jZXMgZXhpc3QsXG4rXHQgKiBpdCB3aWxsIGFmZmVjdCBvdGhlciBFTkVUQ3Mgd2hvc2UgTVNJLVggaW50ZXJydXB0cyBjYW5ub3QgYmVcbitcdCAqIGdlbmVyYXRlZC4gVGhpcyBpcyBzaW1pbGFyIHRvIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzOiB0aGUgYXJyYXlcbitcdCAqIGl0c2VsZiBpcyBub3QgYWZmZWN0ZWQsIGJ1dCBhZGphY2VudCBhcnJheXMgd2lsbCBiZSBjb3JydXB0ZWQuXG4rXHQgKlxuK1x0ICogcGYtXHUwMDNldG90YWxfdmZzIGlzIDAgaWYgQ09ORklHX1BDSV9JT1YgaXMgZGlzYWJsZWQuIElmIHRoZSBoYXJkd2FyZVxuK1x0ICogaXRzZWxmIHN1cHBvcnRzIFNSLUlPViwgdGhlbiB3aGVuIGFsbG9jYXRpbmcgdGhlIG51bWJlciBvZiBNU0lYcyB0b1xuK1x0ICogdGhlIFNJLCBpdCBtdXN0IGJlIHRha2VuIGludG8gYWNjb3VudCB0aGF0IHRoZSBWU0kgaGFzIGF0IGxlYXN0IDFcbitcdCAqIE1TSVgsIGFuZCB0aGUgdG90YWwgbnVtYmVyIG9mIE1TSVhzIG9mIGFsbCBTSXMgY2Fubm90IGV4Y2VlZFxuK1x0ICogRUNBUFIxW05VTV9NU0lYXS5cbitcdCAqL1xuK1x0aWYgKCFwZi1cdTAwM2V0b3RhbF92ZnMgXHUwMDI2XHUwMDI2IG51bV92c2kpIHtcbitcdFx0LyogQmVjYXVzZSBlYWNoIFNJIGhhcyBhdCBsZWFzdCBvbmUgTVNJWCwgYW5kIGZyb20gdGhlIGhhcmR3YXJlXG4rXHRcdCAqIHBlcnNwZWN0aXZlLCBwZi1cdTAwM2VjYXBzLm51bV9tc2l4IHdpbGwgYWx3YXlzIGJlIGdyZWF0ZXIgdGhhblxuK1x0XHQgKiBudW1fdnNpLiBTbyBudW1fbXNpeCBpcyBhbHdheXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAuXG4rXHRcdCAqL1xuK1x0XHRudW1fbXNpeCA9IHBmLVx1MDAzZWNhcHMubnVtX21zaXggLSBudW1fdnNpIC0gMTtcbitcdFx0aWYgKG51bV9tc2l4IFx1MDAzZSBQU0lDRkdSMl9OVU1fTVNJWClcbitcdFx0XHRudW1fbXNpeCA9IFBTSUNGR1IyX05VTV9NU0lYO1xuK1x0XHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJQ0ZHUjIoMCksIG51bV9tc2l4KTtcbiBcbi1cdG51bV9tc2l4ID0gcGYtXHUwMDNlY2Fwcy5udW1fbXNpeCAvIHRvdGFsX3NpICtcbi1cdFx0ICAgcGYtXHUwMDNlY2Fwcy5udW1fbXNpeCAlIHRvdGFsX3NpIC0gMTtcbi1cdHZhbCA9IG51bV9tc2l4IFx1MDAyNiBQU0lDRkdSMl9OVU1fTVNJWDtcbi1cdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lDRkdSMigwKSwgdmFsKTtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3ZzaTsgaSsrKVxuK1x0XHRcdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lDRkdSMihpICsgMSksIDApO1xuIFxuLVx0bnVtX21zaXggPSBwZi1cdTAwM2VjYXBzLm51bV9tc2l4IC8gdG90YWxfc2kgLSAxO1xuLVx0dmFsID0gbnVtX21zaXggXHUwMDI2IFBTSUNGR1IyX05VTV9NU0lYO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGYtXHUwMDNlY2Fwcy5udW1fdnNpOyBpKyspXG4tXHRcdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lDRkdSMihpICsgMSksIHZhbCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qIExpa2V3aXNlLCBmcm9tIHRoZSBoYXJkd2FyZSBwZXJzcGVjdGl2ZSBwZi1cdTAwM2VjYXBzLm51bV9tc2l4IGlzIGFsd2F5c1xuK1x0ICogZ3JlYXRlciB0aGFuIHZhbGlkX251bV9zaS4gU28gbnVtX21zaXggaXMgYWx3YXlzIGdyZWF0ZXIgdGhhbiBvclxuK1x0ICogZXF1YWwgdG8gMC5cbitcdCAqL1xuK1x0bnVtX21zaXggPSBwZi1cdTAwM2VjYXBzLm51bV9tc2l4IC8gdmFsaWRfbnVtX3NpICtcbitcdFx0ICAgcGYtXHUwMDNlY2Fwcy5udW1fbXNpeCAlIHZhbGlkX251bV9zaSAtIDE7XG4rXHRpZiAobnVtX21zaXggXHUwMDNlIFBTSUNGR1IyX05VTV9NU0lYKVxuK1x0XHRudW1fbXNpeCA9IFBTSUNGR1IyX05VTV9NU0lYO1xuK1x0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSUNGR1IyKDApLCBudW1fbXNpeCk7XG4rXG4rXHRudW1fbXNpeCA9IHBmLVx1MDAzZWNhcHMubnVtX21zaXggLyB2YWxpZF9udW1fc2kgLSAxO1xuK1x0aWYgKG51bV9tc2l4IFx1MDAzZSBQU0lDRkdSMl9OVU1fTVNJWClcbitcdFx0bnVtX21zaXggPSBQU0lDRkdSMl9OVU1fTVNJWDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmLVx1MDAzZXRvdGFsX3ZmczsgaSsrKVxuK1x0XHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQzRfUFNJQ0ZHUjIoaSArIDEpLCBudW1fbXNpeCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGVuZXRjNF9lbmFibGVfYWxsX3NpKHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4ge1xuIFx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZXNpLVx1MDAzZWh3O1xuLVx0aW50IG51bV9zaSA9IHBmLVx1MDAzZWNhcHMubnVtX3ZzaSArIDE7XG4rXHRpbnQgbnVtX3NpID0gcGYtXHUwMDNldG90YWxfdmZzICsgMTtcbiBcdHUzMiBzaV9iaXRtYXAgPSAwO1xuIFx0aW50IGk7XG4gXG5AQCAtNDEyLDcgKzM3OCw5IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9jb25maWd1cmVfcG9ydF9zaShzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuIFx0LyogT3V0ZXIgVkxBTiB0YWcgd2lsbCBiZSB1c2VkIGZvciBWTEFOIGZpbHRlcmluZyAqL1xuIFx0ZW5ldGNfcG9ydF93cihodywgRU5FVEM0X1BTSVZMQU5GTVIsIFBTSVZMQU5GTVJfVlMpO1xuIFxuLVx0ZW5ldGM0X3NldF9kZWZhdWx0X3NpX3ZsYW5fcHJvbWlzYyhwZik7XG4rXHQvKiBFbmZvcmNlIFZMQU4gcHJvbWlzY3VvdXMgbW9kZSBmb3IgYWxsIFNJcyAqL1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHBmLVx1MDAzZXRvdGFsX3ZmcyArIDE7IGkrKylcbitcdFx0ZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzYyhwZi1cdTAwM2VzaSwgaSwgdHJ1ZSk7XG4gXG4gXHQvKiBEaXNhYmxlIFNJIE1BQyBtdWx0aWNhc3QgXHUwMDI2IHVuaWNhc3QgcHJvbWlzY3VvdXMgKi9cbiBcdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDNF9QU0lQTU1SLCAwKTtcbkBAIC00NTAsMTggKzQxOCw2MCBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfY29uZmlndXJlX3BvcnQoc3RydWN0IGVuZXRjX3BmICpwZilcbiBcdGVuZXRjX3NldF9kZWZhdWx0X3Jzc19rZXkocGYpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBlbmV0YzRfZ2V0X250bXBfY2FwcyhzdHJ1Y3QgZW5ldGNfc2kgKnNpKVxuK3tcbitcdHN0cnVjdCBudG1wX3VzZXIgKnVzZXIgPSBcdTAwMjZzaS1cdTAwM2VudG1wX3VzZXI7XG4rXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXHUwMDI2c2ktXHUwMDNlaHc7XG4rXHR1MzIgdmFsO1xuK1xuK1x0dmFsID0gZW5ldGNfcG9ydF9yZChodywgRU5FVEM0X1BTSU1BRkNBUFIpO1xuK1x0dXNlci1cdTAwM2VtYWZ0X251bV9lbnRyaWVzID0gRklFTERfR0VUKFBTSU1BRkNBUFJfTlVNX01BQ19BRlRFLCB2YWwpO1xuK31cbitcbitzdGF0aWMgaW50IGVuZXRjNF9udG1wX2JpdG1hcF9pbml0KHN0cnVjdCBudG1wX3VzZXIgKnVzZXIpXG4re1xuK1x0dXNlci1cdTAwM2VtYWZ0X2VpZF9iaXRtYXAgPSBiaXRtYXBfemFsbG9jKHVzZXItXHUwMDNlbWFmdF9udW1fZW50cmllcyxcbitcdFx0XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXVzZXItXHUwMDNlbWFmdF9laWRfYml0bWFwKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBlbmV0YzRfbnRtcF9iaXRtYXBfZnJlZShzdHJ1Y3QgbnRtcF91c2VyICp1c2VyKVxuK3tcbitcdGJpdG1hcF9mcmVlKHVzZXItXHUwMDNlbWFmdF9laWRfYml0bWFwKTtcbitcdHVzZXItXHUwMDNlbWFmdF9laWRfYml0bWFwID0gTlVMTDtcbit9XG4rXG4gc3RhdGljIGludCBlbmV0YzRfaW5pdF9udG1wX3VzZXIoc3RydWN0IGVuZXRjX3NpICpzaSlcbiB7XG4gXHRzdHJ1Y3QgbnRtcF91c2VyICp1c2VyID0gXHUwMDI2c2ktXHUwMDNlbnRtcF91c2VyO1xuK1x0aW50IGVycjtcbiBcbiBcdC8qIEZvciBFTkVUQyA0LjEsIGFsbCB0YWJsZSB2ZXJzaW9ucyBhcmUgMCAqL1xuIFx0bWVtc2V0KFx1MDAyNnVzZXItXHUwMDNldGJsLCAwLCBzaXplb2YodXNlci1cdTAwM2V0YmwpKTtcbiBcbi1cdHJldHVybiBlbmV0YzRfc2V0dXBfY2JkcihzaSk7XG4rXHRlcnIgPSBlbmV0YzRfc2V0dXBfY2JkcihzaSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0ZW5ldGM0X2dldF9udG1wX2NhcHMoc2kpO1xuK1x0ZXJyID0gZW5ldGM0X250bXBfYml0bWFwX2luaXQodXNlcik7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIHRlYXJkb3duX2NiZHI7XG4rXG4rXHRyZXR1cm4gMDtcbitcbit0ZWFyZG93bl9jYmRyOlxuK1x0ZW5ldGM0X3RlYXJkb3duX2NiZHIoc2kpO1xuK1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZW5ldGM0X2ZyZWVfbnRtcF91c2VyKHN0cnVjdCBlbmV0Y19zaSAqc2kpXG4ge1xuK1x0ZW5ldGM0X250bXBfYml0bWFwX2ZyZWUoXHUwMDI2c2ktXHUwMDNlbnRtcF91c2VyKTtcbiBcdGVuZXRjNF90ZWFyZG93bl9jYmRyKHNpKTtcbiB9XG4gXG5AQCAtNDc5LDcgKzQ4OSw3IEBAIHN0YXRpYyBpbnQgZW5ldGM0X3BmX2luaXQoc3RydWN0IGVuZXRjX3BmICpwZilcbiBcbiBcdGVyciA9IGVuZXRjNF9pbml0X250bXBfdXNlcihwZi1cdTAwM2VzaSk7XG4gXHRpZiAoZXJyKSB7XG4tXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byBpbml0IENCRFJcXG5cIik7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byBpbml0IE5UTVAgdXNlclxcblwiKTtcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbkBAIC00OTMsMTggKzUwMywxNyBAQCBzdGF0aWMgdm9pZCBlbmV0YzRfcGZfZnJlZShzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuIFx0ZW5ldGM0X2ZyZWVfbnRtcF91c2VyKHBmLVx1MDAzZXNpKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgZW5ldGM0X3BzaV9kb19zZXRfcnhfbW9kZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4rc3RhdGljIGludCBlbmV0YzRfcGZfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4rXHRcdFx0XHQgc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjLFxuK1x0XHRcdFx0IHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICptYylcbiB7XG4tXHRzdHJ1Y3QgZW5ldGNfc2kgKnNpID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBlbmV0Y19zaSwgcnhfbW9kZV90YXNrKTtcbi1cdHN0cnVjdCBlbmV0Y19wZiAqcGYgPSBlbmV0Y19zaV9wcml2KHNpKTtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gc2ktXHUwMDNlbmRldjtcbi1cdHN0cnVjdCBlbmV0Y19odyAqaHcgPSBcdTAwMjZzaS1cdTAwM2VodztcbitcdHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdHN0cnVjdCBlbmV0Y19wZiAqcGYgPSBlbmV0Y19zaV9wcml2KHByaXYtXHUwMDNlc2kpO1xuK1x0c3RydWN0IGVuZXRjX3NpICpzaSA9IHByaXYtXHUwMDNlc2k7XG4gXHRib29sIHVjX3Byb21pc2MgPSBmYWxzZTtcbiBcdGJvb2wgbWNfcHJvbWlzYyA9IGZhbHNlO1xuIFx0aW50IHR5cGUgPSAwO1xuIFxuLVx0cnRubF9sb2NrKCk7XG4tXG4gXHRpZiAobmRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1BST01JU0MpIHtcbiBcdFx0dWNfcHJvbWlzYyA9IHRydWU7XG4gXHRcdG1jX3Byb21pc2MgPSB0cnVlO1xuQEAgLTUxNSwyOCArNTI0LDIxIEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wc2lfZG9fc2V0X3J4X21vZGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHR0eXBlID0gRU5FVENfTUFDX0ZJTFRFUl9UWVBFX0FMTDtcbiBcdH1cbiBcbi1cdGVuZXRjNF9wZl9zZXRfc2lfbWFjX3Byb21pc2MoaHcsIDAsIHVjX3Byb21pc2MsIG1jX3Byb21pc2MpO1xuK1x0ZW5ldGNfc2V0X3NpX3VjX3Byb21pc2Moc2ksIDAsIHVjX3Byb21pc2MpO1xuK1x0ZW5ldGNfc2V0X3NpX21jX3Byb21pc2Moc2ksIDAsIG1jX3Byb21pc2MpO1xuIFxuIFx0aWYgKHVjX3Byb21pc2MpIHtcbi1cdFx0ZW5ldGM0X3BmX3NldF9zaV91Y19oYXNoX2ZpbHRlcihodywgMCwgMCk7XG4rXHRcdGVuZXRjX3NldF9zaV91Y19oYXNoX2ZpbHRlcihzaSwgMCwgMCk7XG4gXHRcdGVuZXRjNF9wZl9jbGVhcl9tYWZ0X2VudHJpZXMocGYpO1xuIFx0fVxuIFxuIFx0aWYgKG1jX3Byb21pc2MpXG4tXHRcdGVuZXRjNF9wZl9zZXRfc2lfbWNfaGFzaF9maWx0ZXIoaHcsIDAsIDApO1xuK1x0XHRlbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXIoc2ksIDAsIDApO1xuIFxuIFx0LyogU2V0IG5ldyBNQUMgZmlsdGVyICovXG4tXHRlbmV0YzRfcGZfc2V0X21hY19maWx0ZXIocGYsIHR5cGUpO1xuK1x0ZW5ldGM0X3BmX3NldF9tYWNfZmlsdGVyKHBmLCB0eXBlLCB1YywgbWMpO1xuIFxuLVx0cnRubF91bmxvY2soKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgZW5ldGM0X3BmX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLXtcbi1cdHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbi1cdHN0cnVjdCBlbmV0Y19zaSAqc2kgPSBwcml2LVx1MDAzZXNpO1xuLVxuLVx0cXVldWVfd29yayhzaS1cdTAwM2V3b3JrcXVldWUsIFx1MDAyNnNpLVx1MDAzZXJ4X21vZGVfdGFzayk7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBlbmV0YzRfcGZfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuQEAgLTU0NCwxMiArNTQ2LDExIEBAIHN0YXRpYyBpbnQgZW5ldGM0X3BmX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiB7XG4gXHRuZXRkZXZfZmVhdHVyZXNfdCBjaGFuZ2VkID0gbmRldi1cdTAwM2VmZWF0dXJlcyBeIGZlYXR1cmVzO1xuIFx0c3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuLVx0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnByaXYtXHUwMDNlc2ktXHUwMDNlaHc7XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSB7XG4gXHRcdGJvb2wgcHJvbWlzY19lbiA9ICEoZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUik7XG4gXG4tXHRcdGVuZXRjNF9wZl9zZXRfc2lfdmxhbl9wcm9taXNjKGh3LCAwLCBwcm9taXNjX2VuKTtcbitcdFx0ZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzYyhwcml2LVx1MDAzZXNpLCAwLCBwcm9taXNjX2VuKTtcbiBcdH1cbiBcbiBcdGlmIChjaGFuZ2VkIFx1MDAyNiBORVRJRl9GX0xPT1BCQUNLKVxuQEAgLTU2Niw3ICs1NjcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVuZXRjNF9uZGV2X29wcyA9IHtcbiBcdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IGVuZXRjX3htaXQsXG4gXHQubmRvX2dldF9zdGF0c1x0XHQ9IGVuZXRjX2dldF9zdGF0cyxcbiBcdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IGVuZXRjX3BmX3NldF9tYWNfYWRkcixcbi1cdC5uZG9fc2V0X3J4X21vZGVcdD0gZW5ldGM0X3BmX3NldF9yeF9tb2RlLFxuK1x0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1x0PSBlbmV0YzRfcGZfc2V0X3J4X21vZGUsXG4gXHQubmRvX3NldF9mZWF0dXJlc1x0PSBlbmV0YzRfcGZfc2V0X2ZlYXR1cmVzLFxuIFx0Lm5kb192bGFuX3J4X2FkZF92aWRcdD0gZW5ldGNfdmxhbl9yeF9hZGRfdmlkLFxuIFx0Lm5kb192bGFuX3J4X2tpbGxfdmlkXHQ9IGVuZXRjX3ZsYW5fcnhfZGVsX3ZpZCxcbkBAIC02MDIsMTEgKzYwMyw2IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9tYWNfY29uZmlnKHN0cnVjdCBlbmV0Y19wZiAqcGYsIHVuc2lnbmVkIGludCBtb2RlLFxuIFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfUlhJRDpcbiBcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1RYSUQ6XG4gXHRcdHZhbCB8PSBJRk1PREVfUkdNSUk7XG4tXHRcdC8qIFdlIG5lZWQgdG8gZW5hYmxlIGF1dG8tbmVnb3RpYXRpb24gZm9yIHRoZSBNQUNcbi1cdFx0ICogaWYgaXRzIFJHTUlJIGludGVyZmFjZSBzdXBwb3J0IEluLUJhbmQgc3RhdHVzLlxuLVx0XHQgKi9cbi1cdFx0aWYgKHBoeWxpbmtfYXV0b25lZ19pbmJhbmQobW9kZSkpXG4tXHRcdFx0dmFsIHw9IFBNX0lGX01PREVfRU5BO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUk6XG4gXHRcdHZhbCB8PSBJRk1PREVfUk1JSTtcbkBAIC02MTYsNyArNjEyLDYgQEAgc3RhdGljIHZvaWQgZW5ldGM0X21hY19jb25maWcoc3RydWN0IGVuZXRjX3BmICpwZiwgdW5zaWduZWQgaW50IG1vZGUsXG4gXHRcdHZhbCB8PSBJRk1PREVfU0dNSUk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVI6XG4tXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9YR01JSTpcbiBcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk6XG4gXHRcdHZhbCB8PSBJRk1PREVfWEdNSUk7XG4gXHRcdGJyZWFrO1xuQEAgLTY0MiwyNiArNjM3LDE5IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9zZXRfcG9ydF9zcGVlZChzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2LCBpbnQgc3BlZWQpXG4gXHR1MzIgb2xkX3NwZWVkID0gcHJpdi1cdTAwM2VzcGVlZDtcbiBcdHUzMiB2YWw7XG4gXG4rXHQvKiBJZiB0aGUgc3BlZWQgaXMgdW5rbm93biwgdXNlIHRoZSBtaW5pbXVtIHZhbHVlICovXG4rXHRpZiAoc3BlZWQgPT0gU1BFRURfVU5LTk9XTikge1xuK1x0XHRzcGVlZCA9IFNQRUVEXzEwO1xuK1x0XHRkZXZfd2Fybihwcml2LVx1MDAzZWRldiwgXCJTcGVlZCB1bmtub3duLCBkZWZhdWx0IGlzIDEwTWJwc1xcblwiKTtcbitcdH1cbitcbiBcdGlmIChzcGVlZCA9PSBvbGRfc3BlZWQpXG4gXHRcdHJldHVybjtcbiBcbi1cdHZhbCA9IGVuZXRjX3BvcnRfcmQoXHUwMDI2cHJpdi1cdTAwM2VzaS1cdTAwM2VodywgRU5FVEM0X1BDUik7XG4tXHR2YWwgXHUwMDI2PSB+UENSX1BTUEVFRDtcbi1cbi1cdHN3aXRjaCAoc3BlZWQpIHtcbi1cdGNhc2UgU1BFRURfMTAwOlxuLVx0Y2FzZSBTUEVFRF8xMDAwOlxuLVx0Y2FzZSBTUEVFRF8yNTAwOlxuLVx0Y2FzZSBTUEVFRF8xMDAwMDpcbi1cdFx0dmFsIHw9IChQQ1JfUFNQRUVEIFx1MDAyNiBQQ1JfUFNQRUVEX1ZBTChzcGVlZCkpO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgU1BFRURfMTA6XG4tXHRkZWZhdWx0OlxuLVx0XHR2YWwgfD0gKFBDUl9QU1BFRUQgXHUwMDI2IFBDUl9QU1BFRURfVkFMKFNQRUVEXzEwKSk7XG4tXHR9XG4tXG4tXHRwcml2LVx1MDAzZXNwZWVkID0gc3BlZWQ7XG4rXHR2YWwgPSBlbmV0Y19wb3J0X3JkKFx1MDAyNnByaXYtXHUwMDNlc2ktXHUwMDNlaHcsIEVORVRDNF9QQ1IpIFx1MDAyNiAoflBDUl9QU1BFRUQpO1xuK1x0dmFsIHw9IFBDUl9QU1BFRURfVkFMKHNwZWVkKTtcbiBcdGVuZXRjX3BvcnRfd3IoXHUwMDI2cHJpdi1cdTAwM2VzaS1cdTAwM2VodywgRU5FVEM0X1BDUiwgdmFsKTtcbitcdHByaXYtXHUwMDNlc3BlZWQgPSBzcGVlZDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZW5ldGM0X3NldF9yZ21paV9tYWMoc3RydWN0IGVuZXRjX3BmICpwZiwgaW50IHNwZWVkLCBpbnQgZHVwbGV4KVxuQEAgLTcxNywyMiArNzA1LDYgQEAgc3RhdGljIHZvaWQgZW5ldGM0X3NldF9ybWlpX21hYyhzdHJ1Y3QgZW5ldGNfcGYgKnBmLCBpbnQgc3BlZWQsIGludCBkdXBsZXgpXG4gXHRlbmV0Y19wb3J0X21hY193cihzaSwgRU5FVEM0X1BNX0lGX01PREUoMCksIHZhbCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGVuZXRjNF9zZXRfaGRfZmxvd19jb250cm9sKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGJvb2wgZW5hYmxlKVxuLXtcbi1cdHN0cnVjdCBlbmV0Y19zaSAqc2kgPSBwZi1cdTAwM2VzaTtcbi1cdHUzMiBvbGRfdmFsLCB2YWw7XG4tXG4tXHRpZiAoIXBmLVx1MDAzZWNhcHMuaGFsZl9kdXBsZXgpXG4tXHRcdHJldHVybjtcbi1cbi1cdG9sZF92YWwgPSBlbmV0Y19wb3J0X21hY19yZChzaSwgRU5FVEM0X1BNX0NNRF9DRkcoMCkpO1xuLVx0dmFsID0gdTMyX3JlcGxhY2VfYml0cyhvbGRfdmFsLCBlbmFibGUgPyAxIDogMCwgUE1fQ01EX0NGR19IRF9GQ0VOKTtcbi1cdGlmICh2YWwgPT0gb2xkX3ZhbClcbi1cdFx0cmV0dXJuO1xuLVxuLVx0ZW5ldGNfcG9ydF9tYWNfd3Ioc2ksIEVORVRDNF9QTV9DTURfQ0ZHKDApLCB2YWwpO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBlbmV0YzRfc2V0X3J4X3BhdXNlKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGJvb2wgcnhfcGF1c2UpXG4ge1xuIFx0c3RydWN0IGVuZXRjX3NpICpzaSA9IHBmLVx1MDAzZXNpO1xuQEAgLTkwOCwxMyArODgwLDExIEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wbF9tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiBcdHN0cnVjdCBlbmV0Y19wZiAqcGYgPSBwaHlsaW5rX3RvX2VuZXRjX3BmKGNvbmZpZyk7XG4gXHRzdHJ1Y3QgZW5ldGNfc2kgKnNpID0gcGYtXHUwMDNlc2k7XG4gXHRzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2O1xuLVx0Ym9vbCBoZF9mYyA9IGZhbHNlO1xuIFxuIFx0cHJpdiA9IG5ldGRldl9wcml2KHNpLVx1MDAzZW5kZXYpO1xuIFx0ZW5ldGM0X3NldF9wb3J0X3NwZWVkKHByaXYsIHNwZWVkKTtcbiBcbi1cdGlmICghcGh5bGlua19hdXRvbmVnX2luYmFuZChtb2RlKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBwaHlfaW50ZXJmYWNlX21vZGVfaXNfcmdtaWkoaW50ZXJmYWNlKSlcbitcdGlmIChwaHlfaW50ZXJmYWNlX21vZGVfaXNfcmdtaWkoaW50ZXJmYWNlKSlcbiBcdFx0ZW5ldGM0X3NldF9yZ21paV9tYWMocGYsIHNwZWVkLCBkdXBsZXgpO1xuIFxuIFx0aWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcbkBAIC05MjYsMTggKzg5Niw4IEBAIHN0YXRpYyB2b2lkIGVuZXRjNF9wbF9tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiBcdFx0ICovXG4gXHRcdGlmIChwcml2LVx1MDAzZWFjdGl2ZV9vZmZsb2FkcyBcdTAwMjYgRU5FVENfRl9RQlUpXG4gXHRcdFx0dHhfcGF1c2UgPSBmYWxzZTtcbi1cdH0gZWxzZSB7IC8qIERVUExFWF9IQUxGICovXG4tXHRcdGlmICh0eF9wYXVzZSB8fCByeF9wYXVzZSlcbi1cdFx0XHRoZF9mYyA9IHRydWU7XG4tXG4tXHRcdC8qIEFzIHBlciA4MDIuMyBhbm5leCAzMUIsIFBBVVNFIGZyYW1lcyBhcmUgb25seSBzdXBwb3J0ZWRcbi1cdFx0ICogd2hlbiB0aGUgbGluayBpcyBjb25maWd1cmVkIGZvciBmdWxsIGR1cGxleCBvcGVyYXRpb24uXG4tXHRcdCAqL1xuLVx0XHR0eF9wYXVzZSA9IGZhbHNlO1xuLVx0XHRyeF9wYXVzZSA9IGZhbHNlO1xuIFx0fVxuIFxuLVx0ZW5ldGM0X3NldF9oZF9mbG93X2NvbnRyb2wocGYsIGhkX2ZjKTtcbiBcdGVuZXRjNF9zZXRfdHhfcGF1c2UocGYsIHByaXYtXHUwMDNlbnVtX3J4X3JpbmdzLCB0eF9wYXVzZSk7XG4gXHRlbmV0YzRfc2V0X3J4X3BhdXNlKHBmLCByeF9wYXVzZSk7XG4gXHRlbmV0YzRfbWFjX3R4X2VuYWJsZShwZik7XG5AQCAtMTAwOSwxOSArOTY5LDYgQEAgc3RhdGljIHZvaWQgZW5ldGM0X2xpbmtfZGVpbml0KHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYpXG4gXHRlbmV0Y19tZGlvYnVzX2Rlc3Ryb3kocGYpO1xuIH1cbiBcbi1zdGF0aWMgaW50IGVuZXRjNF9wc2lfd3FfdGFza19pbml0KHN0cnVjdCBlbmV0Y19zaSAqc2kpXG4te1xuLVx0Y2hhciB3cV9uYW1lWzI0XTtcbi1cbi1cdElOSVRfV09SSyhcdTAwMjZzaS1cdTAwM2VyeF9tb2RlX3Rhc2ssIGVuZXRjNF9wc2lfZG9fc2V0X3J4X21vZGUpO1xuLVx0c25wcmludGYod3FfbmFtZSwgc2l6ZW9mKHdxX25hbWUpLCBcImVuZXRjLSVzXCIsIHBjaV9uYW1lKHNpLVx1MDAzZXBkZXYpKTtcbi1cdHNpLVx1MDAzZXdvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKHdxX25hbWUpO1xuLVx0aWYgKCFzaS1cdTAwM2V3b3JrcXVldWUpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIHN0YXRpYyBpbnQgZW5ldGM0X3BmX25ldGRldl9jcmVhdGUoc3RydWN0IGVuZXRjX3NpICpzaSlcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZzaS1cdTAwM2VwZGV2LVx1MDAzZWRldjtcbkBAIC0xMDYyLDEyICsxMDA5LDYgQEAgc3RhdGljIGludCBlbmV0YzRfcGZfbmV0ZGV2X2NyZWF0ZShzdHJ1Y3QgZW5ldGNfc2kgKnNpKVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfbGlua19pbml0O1xuIFxuLVx0ZXJyID0gZW5ldGM0X3BzaV93cV90YXNrX2luaXQoc2kpO1xuLVx0aWYgKGVycikge1xuLVx0XHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgdG8gaW5pdCB3b3JrcXVldWVcXG5cIik7XG4tXHRcdGdvdG8gZXJyX3dxX2luaXQ7XG4tXHR9XG4tXG4gXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byByZWdpc3RlciBuZXRkZXZcXG5cIik7XG5AQCAtMTA3Nyw4ICsxMDE4LDYgQEAgc3RhdGljIGludCBlbmV0YzRfcGZfbmV0ZGV2X2NyZWF0ZShzdHJ1Y3QgZW5ldGNfc2kgKnNpKVxuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX3JlZ19uZXRkZXY6XG4tXHRkZXN0cm95X3dvcmtxdWV1ZShzaS1cdTAwM2V3b3JrcXVldWUpO1xuLWVycl93cV9pbml0OlxuIFx0ZW5ldGM0X2xpbmtfZGVpbml0KHByaXYpO1xuIGVycl9saW5rX2luaXQ6XG4gXHRlbmV0Y19mcmVlX21zaXgocHJpdik7XG5AQCAtMTA5Niw4ICsxMDM1LDYgQEAgc3RhdGljIHZvaWQgZW5ldGM0X3BmX25ldGRldl9kZXN0cm95KHN0cnVjdCBlbmV0Y19zaSAqc2kpXG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHNpLVx1MDAzZW5kZXY7XG4gXG4gXHR1bnJlZ2lzdGVyX25ldGRldihuZGV2KTtcbi1cdGNhbmNlbF93b3JrKFx1MDAyNnNpLVx1MDAzZXJ4X21vZGVfdGFzayk7XG4tXHRkZXN0cm95X3dvcmtxdWV1ZShzaS1cdTAwM2V3b3JrcXVldWUpO1xuIFx0ZW5ldGM0X2xpbmtfZGVpbml0KHByaXYpO1xuIFx0ZW5ldGNfZnJlZV9tc2l4KHByaXYpO1xuIFx0ZnJlZV9uZXRkZXYobmRldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ldGh0b29sLmNcbmluZGV4IDcxZjM3NmVmMWJlMWM5Li4wN2I3ODMyZjI0Mjc2YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ldGh0b29sLmNcbkBAIC0yOSw3ICsyOSw3IEBAIHN0YXRpYyBjb25zdCB1MzIgZW5ldGNfcnhiZHJfcmVnc1tdID0ge1xuIH07XG4gXG4gc3RhdGljIGNvbnN0IHUzMiBlbmV0Y19wb3J0X3JlZ3NbXSA9IHtcbi1cdEVORVRDX1BNUiwgRU5FVENfUFNSLCBFTkVUQ19QU0lQTVIsIEVORVRDX1BTSVBNQVIwKDApLFxuK1x0RU5FVENfUE1SLCBFTkVUQ19QU1IsIEVORVRDX1BTSVBNTVIsIEVORVRDX1BTSVBNQVIwKDApLFxuIFx0RU5FVENfUFNJUE1BUjEoMCksIEVORVRDX1BUWE1CQVIsIEVORVRDX1BDQVBSMCwgRU5FVENfUENBUFIxLFxuIFx0RU5FVENfUFNJQ0ZHUjAoMCksIEVORVRDX1BSRlNDQVBSLCBFTkVUQ19QVENNU0RVUigwKSxcbiBcdEVORVRDX1BNMF9DTURfQ0ZHLCBFTkVUQ19QTTBfTUFYRlJNLCBFTkVUQ19QTTBfSUZfTU9ERVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ody5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX2h3LmhcbmluZGV4IGJmOTliNjVkNzU5OGFiLi4xNmRhNzMyZGM1ZGU4MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19ody5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfaHcuaFxuQEAgLTE4MCwxMyArMTgwLDEzIEBAIGVudW0gZW5ldGNfYmRyX3R5cGUge1RYLCBSWH07XG4gI2RlZmluZSBFTkVUQ19QTVJfUFNQRUVEXzEwMDBNXHRCSVQoOSlcbiAjZGVmaW5lIEVORVRDX1BNUl9QU1BFRURfMjUwME1cdEJJVCgxMClcbiAjZGVmaW5lIEVORVRDX1BTUlx0XHQweDAwMDQgLyogUk8gKi9cbi0jZGVmaW5lIEVORVRDX1BTSVBNUlx0XHQweDAwMThcbi0jZGVmaW5lIEVORVRDX1BTSVBNUl9TRVRfVVAobilcdEJJVChuKSAvKiBuID0gU0kgaW5kZXggKi9cbi0jZGVmaW5lIEVORVRDX1BTSVBNUl9TRVRfTVAobilcdEJJVCgobikgKyAxNilcbisjZGVmaW5lIEVORVRDX1BTSVBNTVJcdFx0MHgwMDE4XG4rI2RlZmluZSAgUFNJUE1NUl9TSV9NQUNfVVAobilcdEJJVChuKSAvKiBuID0gU0kgaW5kZXggKi9cbisjZGVmaW5lICBQU0lQTU1SX1NJX01BQ19NUChuKVx0QklUKChuKSArIDE2KVxuK1xuICNkZWZpbmUgRU5FVENfUFNJUFZNUlx0XHQweDAwMWNcbi0jZGVmaW5lIEVORVRDX1ZMQU5fUFJPTUlTQ19NQVBfQUxMXHQweDdcbi0jZGVmaW5lIEVORVRDX1BTSVBWTVJfU0VUX1ZQKHNpbWFwKVx0KChzaW1hcCkgXHUwMDI2IDB4Nylcbi0jZGVmaW5lIEVORVRDX1BTSVBWTVJfU0VUX1ZVVEEoc2ltYXApXHQoKChzaW1hcCkgXHUwMDI2IDB4NykgXHUwMDNjXHUwMDNjIDE2KVxuKyNkZWZpbmUgIFBTSVBWTVJfU0lfVkxBTl9QKG4pXHRCSVQobikgLyogbiA9IFNJIGluZGV4ICovXG4rXG4gI2RlZmluZSBFTkVUQ19QU0lQTUFSMChuKVx0KDB4MDEwMCArIChuKSAqIDB4OCkgLyogbiA9IFNJIGluZGV4ICovXG4gI2RlZmluZSBFTkVUQ19QU0lQTUFSMShuKVx0KDB4MDEwNCArIChuKSAqIDB4OClcbiAjZGVmaW5lIEVORVRDX1BWQ0xDVFJcdFx0MHgwMjA4XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuY1xuaW5kZXggMmQ2ODdiYjhjM2EwNjMuLmE1MDk5MjlmODlmMjVmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jXG5AQCAtNDIsMjYgKzQyLDYgQEAgc3RhdGljIHZvaWQgZW5ldGNfcGZfZGVzdHJveV9wY3Moc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpXG4gXHRseW54X3Bjc19kZXN0cm95KHBjcyk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGVuZXRjX3NldF92bGFuX3Byb21pc2Moc3RydWN0IGVuZXRjX2h3ICpodywgY2hhciBzaV9tYXApXG4te1xuLVx0dTMyIHZhbCA9IGVuZXRjX3BvcnRfcmQoaHcsIEVORVRDX1BTSVBWTVIpO1xuLVxuLVx0dmFsIFx1MDAyNj0gfkVORVRDX1BTSVBWTVJfU0VUX1ZQKEVORVRDX1ZMQU5fUFJPTUlTQ19NQVBfQUxMKTtcbi1cdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDX1BTSVBWTVIsIEVORVRDX1BTSVBWTVJfU0VUX1ZQKHNpX21hcCkgfCB2YWwpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBlbmV0Y19lbmFibGVfc2lfdmxhbl9wcm9taXNjKHN0cnVjdCBlbmV0Y19wZiAqcGYsIGludCBzaV9pZHgpXG4te1xuLVx0cGYtXHUwMDNldmxhbl9wcm9taXNjX3NpbWFwIHw9IEJJVChzaV9pZHgpO1xuLVx0ZW5ldGNfc2V0X3ZsYW5fcHJvbWlzYyhcdTAwMjZwZi1cdTAwM2VzaS1cdTAwM2VodywgcGYtXHUwMDNldmxhbl9wcm9taXNjX3NpbWFwKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgZW5ldGNfZGlzYWJsZV9zaV92bGFuX3Byb21pc2Moc3RydWN0IGVuZXRjX3BmICpwZiwgaW50IHNpX2lkeClcbi17XG4tXHRwZi1cdTAwM2V2bGFuX3Byb21pc2Nfc2ltYXAgXHUwMDI2PSB+QklUKHNpX2lkeCk7XG4tXHRlbmV0Y19zZXRfdmxhbl9wcm9taXNjKFx1MDAyNnBmLVx1MDAzZXNpLVx1MDAzZWh3LCBwZi1cdTAwM2V2bGFuX3Byb21pc2Nfc2ltYXApO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBlbmV0Y19zZXRfaXNvbF92bGFuKHN0cnVjdCBlbmV0Y19odyAqaHcsIGludCBzaSwgdTE2IHZsYW4sIHU4IHFvcylcbiB7XG4gXHR1MzIgdmFsID0gMDtcbkBAIC04MCwzNyArNjAsNiBAQCBzdGF0aWMgdm9pZCBlbmV0Y19hZGRfbWFjX2FkZHJfZW1fZmlsdGVyKHN0cnVjdCBlbmV0Y19tYWNfZmlsdGVyICpmaWx0ZXIsXG4gXHRmaWx0ZXItXHUwMDNlbWFjX2FkZHJfY250Kys7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGVuZXRjX2NsZWFyX21hY19odF9mbHQoc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkeCwgaW50IHR5cGUpXG4te1xuLVx0Ym9vbCBlcnIgPSBzaS1cdTAwM2VlcnJhdGEgXHUwMDI2IEVORVRDX0VSUl9VQ01DU1dQO1xuLVxuLVx0aWYgKHR5cGUgPT0gVUMpIHtcbi1cdFx0ZW5ldGNfcG9ydF93cihcdTAwMjZzaS1cdTAwM2VodywgRU5FVENfUFNJVU1IRlIwKHNpX2lkeCwgZXJyKSwgMCk7XG4tXHRcdGVuZXRjX3BvcnRfd3IoXHUwMDI2c2ktXHUwMDNlaHcsIEVORVRDX1BTSVVNSEZSMShzaV9pZHgpLCAwKTtcbi1cdH0gZWxzZSB7IC8qIE1DICovXG4tXHRcdGVuZXRjX3BvcnRfd3IoXHUwMDI2c2ktXHUwMDNlaHcsIEVORVRDX1BTSU1NSEZSMChzaV9pZHgsIGVyciksIDApO1xuLVx0XHRlbmV0Y19wb3J0X3dyKFx1MDAyNnNpLVx1MDAzZWh3LCBFTkVUQ19QU0lNTUhGUjEoc2lfaWR4KSwgMCk7XG4tXHR9XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGVuZXRjX3NldF9tYWNfaHRfZmx0KHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZHgsIGludCB0eXBlLFxuLVx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgaGFzaClcbi17XG4tXHRib29sIGVyciA9IHNpLVx1MDAzZWVycmF0YSBcdTAwMjYgRU5FVENfRVJSX1VDTUNTV1A7XG4tXG4tXHRpZiAodHlwZSA9PSBVQykge1xuLVx0XHRlbmV0Y19wb3J0X3dyKFx1MDAyNnNpLVx1MDAzZWh3LCBFTkVUQ19QU0lVTUhGUjAoc2lfaWR4LCBlcnIpLFxuLVx0XHRcdCAgICAgIGxvd2VyXzMyX2JpdHMoaGFzaCkpO1xuLVx0XHRlbmV0Y19wb3J0X3dyKFx1MDAyNnNpLVx1MDAzZWh3LCBFTkVUQ19QU0lVTUhGUjEoc2lfaWR4KSxcbi1cdFx0XHQgICAgICB1cHBlcl8zMl9iaXRzKGhhc2gpKTtcbi1cdH0gZWxzZSB7IC8qIE1DICovXG4tXHRcdGVuZXRjX3BvcnRfd3IoXHUwMDI2c2ktXHUwMDNlaHcsIEVORVRDX1BTSU1NSEZSMChzaV9pZHgsIGVyciksXG4tXHRcdFx0ICAgICAgbG93ZXJfMzJfYml0cyhoYXNoKSk7XG4tXHRcdGVuZXRjX3BvcnRfd3IoXHUwMDI2c2ktXHUwMDNlaHcsIEVORVRDX1BTSU1NSEZSMShzaV9pZHgpLFxuLVx0XHRcdCAgICAgIHVwcGVyXzMyX2JpdHMoaGFzaCkpO1xuLVx0fVxuLX1cbi1cbiBzdGF0aWMgdm9pZCBlbmV0Y19zeW5jX21hY19maWx0ZXJzKHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4ge1xuIFx0c3RydWN0IGVuZXRjX21hY19maWx0ZXIgKmYgPSBwZi1cdTAwM2VtYWNfZmlsdGVyO1xuQEAgLTEyMiwxMiArNzEsMTYgQEAgc3RhdGljIHZvaWQgZW5ldGNfc3luY19tYWNfZmlsdGVycyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFERFJfVFlQRTsgaSsrLCBmKyspIHtcbiBcdFx0Ym9vbCBlbSA9IChmLVx1MDAzZW1hY19hZGRyX2NudCA9PSAxKSBcdTAwMjZcdTAwMjYgKGkgPT0gVUMpO1xuIFx0XHRib29sIGNsZWFyID0gIWYtXHUwMDNlbWFjX2FkZHJfY250O1xuK1x0XHR1NjQgaGFzaDtcbiBcbiBcdFx0aWYgKGNsZWFyKSB7XG4tXHRcdFx0aWYgKGkgPT0gVUMpXG4rXHRcdFx0aWYgKGkgPT0gVUMpIHtcbiBcdFx0XHRcdGVuZXRjX2NsZWFyX21hY19mbHRfZW50cnkoc2ksIHBvcyk7XG4rXHRcdFx0XHRlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc2ksIDAsIDApO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRlbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXIoc2ksIDAsIDApO1xuK1x0XHRcdH1cbiBcbi1cdFx0XHRlbmV0Y19jbGVhcl9tYWNfaHRfZmx0KHNpLCAwLCBpKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuQEAgLTEzNSw3ICs4OCw3IEBAIHN0YXRpYyB2b2lkIGVuZXRjX3N5bmNfbWFjX2ZpbHRlcnMoc3RydWN0IGVuZXRjX3BmICpwZilcbiBcdFx0aWYgKGVtKSB7XG4gXHRcdFx0aW50IGVycjtcbiBcbi1cdFx0XHRlbmV0Y19jbGVhcl9tYWNfaHRfZmx0KHNpLCAwLCBVQyk7XG4rXHRcdFx0ZW5ldGNfc2V0X3NpX3VjX2hhc2hfZmlsdGVyKHNpLCAwLCAwKTtcbiBcbiBcdFx0XHRlcnIgPSBlbmV0Y19zZXRfbWFjX2ZsdF9lbnRyeShzaSwgcG9zLCBmLVx1MDAzZW1hY19hZGRyLFxuIFx0XHRcdFx0XHRcdCAgICAgIEJJVCgwKSk7XG5AQCAtMTQ3LDExICsxMDAsMTUgQEAgc3RhdGljIHZvaWQgZW5ldGNfc3luY19tYWNfZmlsdGVycyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuIFx0XHRcdFx0IGVycik7XG4gXHRcdH1cbiBcbitcdFx0Yml0bWFwX3RvX2FycjY0KFx1MDAyNmhhc2gsIGYtXHUwMDNlbWFjX2hhc2hfdGFibGUsXG4rXHRcdFx0XHRFTkVUQ19NQUREUl9IQVNIX1RCTF9TWik7XG4gXHRcdC8qIGhhc2ggdGFibGUgZmlsdGVyLCBjbGVhciBFTSBmaWx0ZXIgZm9yIFVDIGVudHJpZXMgKi9cbi1cdFx0aWYgKGkgPT0gVUMpXG4rXHRcdGlmIChpID09IFVDKSB7XG4gXHRcdFx0ZW5ldGNfY2xlYXJfbWFjX2ZsdF9lbnRyeShzaSwgcG9zKTtcbi1cbi1cdFx0ZW5ldGNfc2V0X21hY19odF9mbHQoc2ksIDAsIGksICpmLVx1MDAzZW1hY19oYXNoX3RhYmxlKTtcbitcdFx0XHRlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc2ksIDAsIGhhc2gpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGVuZXRjX3NldF9zaV9tY19oYXNoX2ZpbHRlcihzaSwgMCwgaGFzaCk7XG4rXHRcdH1cbiBcdH1cbiB9XG4gXG5AQCAtMTU5LDIxICsxMTYsMTcgQEAgc3RhdGljIHZvaWQgZW5ldGNfcGZfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuIFx0c3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFx0c3RydWN0IGVuZXRjX3BmICpwZiA9IGVuZXRjX3NpX3ByaXYocHJpdi1cdTAwM2VzaSk7XG4tXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXHUwMDI2cHJpdi1cdTAwM2VzaS1cdTAwM2VodztcbiBcdGJvb2wgdXByb20gPSBmYWxzZSwgbXByb20gPSBmYWxzZTtcbiBcdHN0cnVjdCBlbmV0Y19tYWNfZmlsdGVyICpmaWx0ZXI7XG4gXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xuLVx0dTMyIHBzaXBtciA9IDA7XG4gXHRib29sIGVtO1xuIFxuIFx0aWYgKG5kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9QUk9NSVNDKSB7XG4gXHRcdC8qIGVuYWJsZSBwcm9taXNjIG1vZGUgZm9yIFNJMCAoUEYpICovXG4tXHRcdHBzaXBtciA9IEVORVRDX1BTSVBNUl9TRVRfVVAoMCkgfCBFTkVUQ19QU0lQTVJfU0VUX01QKDApO1xuIFx0XHR1cHJvbSA9IHRydWU7XG4gXHRcdG1wcm9tID0gdHJ1ZTtcbiBcdH0gZWxzZSBpZiAobmRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX0FMTE1VTFRJKSB7XG4gXHRcdC8qIGVuYWJsZSBtdWx0aSBjYXN0IHByb21pc2MgbW9kZSBmb3IgU0kwIChQRikgKi9cbi1cdFx0cHNpcG1yID0gRU5FVENfUFNJUE1SX1NFVF9NUCgwKTtcbiBcdFx0bXByb20gPSB0cnVlO1xuIFx0fVxuIFxuQEAgLTIxMSw5ICsxNjQsOCBAQCBzdGF0aWMgdm9pZCBlbmV0Y19wZl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdFx0LyogdXBkYXRlIFBGIGVudHJpZXMgKi9cbiBcdFx0ZW5ldGNfc3luY19tYWNfZmlsdGVycyhwZik7XG4gXG4tXHRwc2lwbXIgfD0gZW5ldGNfcG9ydF9yZChodywgRU5FVENfUFNJUE1SKSBcdTAwMjZcbi1cdFx0ICB+KEVORVRDX1BTSVBNUl9TRVRfVVAoMCkgfCBFTkVUQ19QU0lQTVJfU0VUX01QKDApKTtcbi1cdGVuZXRjX3BvcnRfd3IoaHcsIEVORVRDX1BTSVBNUiwgcHNpcG1yKTtcbitcdGVuZXRjX3NldF9zaV91Y19wcm9taXNjKHByaXYtXHUwMDNlc2ksIDAsIHVwcm9tKTtcbitcdGVuZXRjX3NldF9zaV9tY19wcm9taXNjKHByaXYtXHUwMDNlc2ksIDAsIG1wcm9tKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZW5ldGNfc2V0X2xvb3BiYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBib29sIGVuKVxuQEAgLTQ2OSwxMiArNDIxLDExIEBAIHN0YXRpYyB2b2lkIGVuZXRjX2NvbmZpZ3VyZV9wb3J0KHN0cnVjdCBlbmV0Y19wZiAqcGYpXG4gXG4gXHQvKiBzcGxpdCB1cCBSRlMgZW50cmllcyAqL1xuIFx0ZW5ldGNfcG9ydF9hc3NpZ25fcmZzX2VudHJpZXMocGYtXHUwMDNlc2kpO1xuLVxuIFx0LyogZW5mb3JjZSBWTEFOIHByb21pc2MgbW9kZSBmb3IgYWxsIFNJcyAqL1xuLVx0cGYtXHUwMDNldmxhbl9wcm9taXNjX3NpbWFwID0gRU5FVENfVkxBTl9QUk9NSVNDX01BUF9BTEw7XG4tXHRlbmV0Y19zZXRfdmxhbl9wcm9taXNjKGh3LCBwZi1cdTAwM2V2bGFuX3Byb21pc2Nfc2ltYXApO1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHBmLVx1MDAzZXRvdGFsX3ZmcyArIDE7IGkrKylcbitcdFx0ZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzYyhwZi1cdTAwM2VzaSwgaSwgdHJ1ZSk7XG4gXG4tXHRlbmV0Y19wb3J0X3dyKGh3LCBFTkVUQ19QU0lQTVIsIDApO1xuK1x0ZW5ldGNfcG9ydF93cihodywgRU5FVENfUFNJUE1NUiwgMCk7XG4gXG4gXHQvKiBlbmFibGUgcG9ydCAqL1xuIFx0ZW5ldGNfcG9ydF93cihodywgRU5FVENfUE1SLCBFTkVUQ19QTVJfRU4pO1xuQEAgLTQ5NCwxMiArNDQ1LDkgQEAgc3RhdGljIGludCBlbmV0Y19wZl9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHR9XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSKSB7XG4tXHRcdHN0cnVjdCBlbmV0Y19wZiAqcGYgPSBlbmV0Y19zaV9wcml2KHByaXYtXHUwMDNlc2kpO1xuK1x0XHRib29sIHByb21pc2MgPSAhKGZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVIpO1xuIFxuLVx0XHRpZiAoISEoZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUikpXG4tXHRcdFx0ZW5ldGNfZGlzYWJsZV9zaV92bGFuX3Byb21pc2MocGYsIDApO1xuLVx0XHRlbHNlXG4tXHRcdFx0ZW5ldGNfZW5hYmxlX3NpX3ZsYW5fcHJvbWlzYyhwZiwgMCk7XG4rXHRcdGVuZXRjX3NldF9zaV92bGFuX3Byb21pc2MocHJpdi1cdTAwM2VzaSwgMCwgcHJvbWlzYyk7XG4gXHR9XG4gXG4gXHRpZiAoY2hhbmdlZCBcdTAwMjYgTkVUSUZfRl9MT09QQkFDSylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5oXG5pbmRleCAyODViN2U1YzQ4ZmRjNy4uNTZkMjNhOGExMWEwNjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmhcbkBAIC0xNywxMiArMTcsOSBAQCBzdHJ1Y3QgZW5ldGNfdmZfc3RhdGUge1xuIH07XG4gXG4gc3RydWN0IGVuZXRjX3BvcnRfY2FwcyB7XG4tXHR1MzIgaGFsZl9kdXBsZXg6MTtcbi1cdGludCBudW1fdnNpO1xuIFx0aW50IG51bV9tc2l4O1xuIFx0aW50IG51bV9yeF9iZHI7XG4gXHRpbnQgbnVtX3R4X2Jkcjtcbi1cdGludCBtYWNfZmlsdGVyX251bTtcbiB9O1xuIFxuIHN0cnVjdCBlbmV0Y19wZjtcbkBAIC00Nyw3ICs0NCw2IEBAIHN0cnVjdCBlbmV0Y19wZiB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgbXNnX3Rhc2s7XG4gXHRjaGFyIG1zZ19pbnRfbmFtZVtFTkVUQ19JTlRfTkFNRV9NQVhdO1xuIFxuLVx0Y2hhciB2bGFuX3Byb21pc2Nfc2ltYXA7IC8qIGJpdG1hcCBvZiBTSXMgaW4gVkxBTiBwcm9taXNjIG1vZGUgKi9cbiBcdERFQ0xBUkVfQklUTUFQKHZsYW5faHRfZmlsdGVyLCBFTkVUQ19WTEFOX0hUX1NJWkUpO1xuIFx0REVDTEFSRV9CSVRNQVAoYWN0aXZlX3ZsYW5zLCBWTEFOX05fVklEKTtcbiBcbkBAIC02MCw4ICs1Niw2IEBAIHN0cnVjdCBlbmV0Y19wZiB7XG4gXG4gXHRzdHJ1Y3QgZW5ldGNfcG9ydF9jYXBzIGNhcHM7XG4gXHRjb25zdCBzdHJ1Y3QgZW5ldGNfcGZfb3BzICpvcHM7XG4tXG4tXHRpbnQgbnVtX21mZTtcdC8qIG51bWJlciBvZiBtYWMgYWRkcmVzcyBmaWx0ZXIgdGFibGUgZW50cmllcyAqL1xuIH07XG4gXG4gI2RlZmluZSBwaHlsaW5rX3RvX2VuZXRjX3BmKGNvbmZpZykgXFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmNcbmluZGV4IDZlNWQyZjg2OTkxNTBiLi5kMzJhMTk1YTA0Yzk3ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jXG5AQCAtMSw1ICsxLDUgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjArIE9SIEJTRC0zLUNsYXVzZSlcbi0vKiBDb3B5cmlnaHQgMjAyNCBOWFAgKi9cbisvKiBDb3B5cmlnaHQgMjAyNC0yMDI2IE5YUCAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzbC9lbmV0Y19tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9tZGlvLmhcdTAwM2VcbkBAIC04Nyw2ICs4NywxMTIgQEAgaW50IGVuZXRjX3NldHVwX21hY19hZGRyZXNzZXMoc3RydWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IGVuZXRjX3BmICpwZilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfc2V0dXBfbWFjX2FkZHJlc3Nlcyk7XG4gXG4rdm9pZCBlbmV0Y19zZXRfc2lfdWNfcHJvbWlzYyhzdHJ1Y3QgZW5ldGNfc2kgKnNpLCBpbnQgc2lfaWQsIGJvb2wgcHJvbWlzYylcbit7XG4rXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXHUwMDI2c2ktXHUwMDNlaHc7XG4rXHRpbnQgcHNpcG1tcl9vZmY7XG4rXHR1MzIgdmFsO1xuK1xuK1x0aWYgKGlzX2VuZXRjX3JldjEoc2kpKVxuK1x0XHRwc2lwbW1yX29mZiA9IEVORVRDX1BTSVBNTVI7XG4rXHRlbHNlXG4rXHRcdHBzaXBtbXJfb2ZmID0gRU5FVEM0X1BTSVBNTVI7XG4rXG4rXHR2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBwc2lwbW1yX29mZik7XG4rXG4rXHRpZiAocHJvbWlzYylcbitcdFx0dmFsIHw9IFBTSVBNTVJfU0lfTUFDX1VQKHNpX2lkKTtcbitcdGVsc2VcbitcdFx0dmFsIFx1MDAyNj0gflBTSVBNTVJfU0lfTUFDX1VQKHNpX2lkKTtcbitcbitcdGVuZXRjX3BvcnRfd3IoaHcsIHBzaXBtbXJfb2ZmLCB2YWwpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChlbmV0Y19zZXRfc2lfdWNfcHJvbWlzYyk7XG4rXG4rdm9pZCBlbmV0Y19zZXRfc2lfbWNfcHJvbWlzYyhzdHJ1Y3QgZW5ldGNfc2kgKnNpLCBpbnQgc2lfaWQsIGJvb2wgcHJvbWlzYylcbit7XG4rXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXHUwMDI2c2ktXHUwMDNlaHc7XG4rXHRpbnQgcHNpcG1tcl9vZmY7XG4rXHR1MzIgdmFsO1xuK1xuK1x0aWYgKGlzX2VuZXRjX3JldjEoc2kpKVxuK1x0XHRwc2lwbW1yX29mZiA9IEVORVRDX1BTSVBNTVI7XG4rXHRlbHNlXG4rXHRcdHBzaXBtbXJfb2ZmID0gRU5FVEM0X1BTSVBNTVI7XG4rXG4rXHR2YWwgPSBlbmV0Y19wb3J0X3JkKGh3LCBwc2lwbW1yX29mZik7XG4rXG4rXHRpZiAocHJvbWlzYylcbitcdFx0dmFsIHw9IFBTSVBNTVJfU0lfTUFDX01QKHNpX2lkKTtcbitcdGVsc2VcbitcdFx0dmFsIFx1MDAyNj0gflBTSVBNTVJfU0lfTUFDX01QKHNpX2lkKTtcbitcbitcdGVuZXRjX3BvcnRfd3IoaHcsIHBzaXBtbXJfb2ZmLCB2YWwpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChlbmV0Y19zZXRfc2lfbWNfcHJvbWlzYyk7XG4rXG4rdm9pZCBlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCB1NjQgaGFzaClcbit7XG4rXHRpbnQgcHNpdW1oZnIwX29mZiwgcHNpdW1oZnIxX29mZjtcbitcdHN0cnVjdCBlbmV0Y19odyAqaHcgPSBcdTAwMjZzaS1cdTAwM2VodztcbitcbitcdGlmIChpc19lbmV0Y19yZXYxKHNpKSkge1xuK1x0XHRib29sIGVyciA9IHNpLVx1MDAzZWVycmF0YSBcdTAwMjYgRU5FVENfRVJSX1VDTUNTV1A7XG4rXG4rXHRcdHBzaXVtaGZyMF9vZmYgPSBFTkVUQ19QU0lVTUhGUjAoc2lfaWQsIGVycik7XG4rXHRcdHBzaXVtaGZyMV9vZmYgPSBFTkVUQ19QU0lVTUhGUjEoc2lfaWQpO1xuK1x0fSBlbHNlIHtcbitcdFx0cHNpdW1oZnIwX29mZiA9IEVORVRDNF9QU0lVTUhGUjAoc2lfaWQpO1xuK1x0XHRwc2l1bWhmcjFfb2ZmID0gRU5FVEM0X1BTSVVNSEZSMShzaV9pZCk7XG4rXHR9XG4rXG4rXHRlbmV0Y19wb3J0X3dyKGh3LCBwc2l1bWhmcjBfb2ZmLCBsb3dlcl8zMl9iaXRzKGhhc2gpKTtcbitcdGVuZXRjX3BvcnRfd3IoaHcsIHBzaXVtaGZyMV9vZmYsIHVwcGVyXzMyX2JpdHMoaGFzaCkpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIpO1xuK1xuK3ZvaWQgZW5ldGNfc2V0X3NpX21jX2hhc2hfZmlsdGVyKHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZCwgdTY0IGhhc2gpXG4re1xuK1x0aW50IHBzaW1taGZyMF9vZmYsIHBzaW1taGZyMV9vZmY7XG4rXHRzdHJ1Y3QgZW5ldGNfaHcgKmh3ID0gXHUwMDI2c2ktXHUwMDNlaHc7XG4rXG4rXHRpZiAoaXNfZW5ldGNfcmV2MShzaSkpIHtcbitcdFx0Ym9vbCBlcnIgPSBzaS1cdTAwM2VlcnJhdGEgXHUwMDI2IEVORVRDX0VSUl9VQ01DU1dQO1xuK1xuK1x0XHRwc2ltbWhmcjBfb2ZmID0gRU5FVENfUFNJTU1IRlIwKHNpX2lkLCBlcnIpO1xuK1x0XHRwc2ltbWhmcjFfb2ZmID0gRU5FVENfUFNJTU1IRlIxKHNpX2lkKTtcbitcdH0gZWxzZSB7XG4rXHRcdHBzaW1taGZyMF9vZmYgPSBFTkVUQzRfUFNJTU1IRlIwKHNpX2lkKTtcbitcdFx0cHNpbW1oZnIxX29mZiA9IEVORVRDNF9QU0lNTUhGUjEoc2lfaWQpO1xuK1x0fVxuK1xuK1x0ZW5ldGNfcG9ydF93cihodywgcHNpbW1oZnIwX29mZiwgbG93ZXJfMzJfYml0cyhoYXNoKSk7XG4rXHRlbmV0Y19wb3J0X3dyKGh3LCBwc2ltbWhmcjFfb2ZmLCB1cHBlcl8zMl9iaXRzKGhhc2gpKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfc2V0X3NpX21jX2hhc2hfZmlsdGVyKTtcbitcbit2b2lkIGVuZXRjX3NldF9zaV92bGFuX3Byb21pc2Moc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCBib29sIHByb21pc2MpXG4re1xuK1x0c3RydWN0IGVuZXRjX2h3ICpodyA9IFx1MDAyNnNpLVx1MDAzZWh3O1xuK1x0aW50IHBzaXB2bXJfb2ZmO1xuK1x0dTMyIHZhbDtcbitcbitcdGlmIChpc19lbmV0Y19yZXYxKHNpKSlcbitcdFx0cHNpcHZtcl9vZmYgPSBFTkVUQ19QU0lQVk1SO1xuK1x0ZWxzZVxuK1x0XHRwc2lwdm1yX29mZiA9IEVORVRDNF9QU0lQVk1SO1xuK1xuK1x0dmFsID0gZW5ldGNfcG9ydF9yZChodywgcHNpcHZtcl9vZmYpO1xuK1xuK1x0aWYgKHByb21pc2MpXG4rXHRcdHZhbCB8PSBQU0lQVk1SX1NJX1ZMQU5fUChzaV9pZCk7XG4rXHRlbHNlXG4rXHRcdHZhbCBcdTAwMjY9IH5QU0lQVk1SX1NJX1ZMQU5fUChzaV9pZCk7XG4rXG4rXHRlbmV0Y19wb3J0X3dyKGh3LCBwc2lwdm1yX29mZiwgdmFsKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzYyk7XG4rXG4gdm9pZCBlbmV0Y19wZl9uZXRkZXZfc2V0dXAoc3RydWN0IGVuZXRjX3NpICpzaSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRcdFx0ICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpuZGV2X29wcylcbiB7XG5AQCAtMjc1LDcgKzM4MSw4IEBAIHN0YXRpYyBib29sIGVuZXRjX3BvcnRfaGFzX3BjcyhzdHJ1Y3QgZW5ldGNfcGYgKnBmKVxuIFx0cmV0dXJuIChwZi1cdTAwM2VpZl9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSB8fFxuIFx0XHRwZi1cdTAwM2VpZl9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggfHxcbiBcdFx0cGYtXHUwMDNlaWZfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMjUwMEJBU0VYIHx8XG4tXHRcdHBmLVx1MDAzZWlmX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUkpO1xuK1x0XHRwZi1cdTAwM2VpZl9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJIHx8XG4rXHRcdHBmLVx1MDAzZWlmX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSKTtcbiB9XG4gXG4gaW50IGVuZXRjX21kaW9idXNfY3JlYXRlKHN0cnVjdCBlbmV0Y19wZiAqcGYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcbkBAIC0zMTYsMjUgKzQyMyw0MiBAQCBpbnQgZW5ldGNfcGh5bGlua19jcmVhdGUoc3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxuIHtcbiBcdHN0cnVjdCBlbmV0Y19wZiAqcGYgPSBlbmV0Y19zaV9wcml2KHByaXYtXHUwMDNlc2kpO1xuIFx0c3RydWN0IHBoeWxpbmsgKnBoeWxpbms7XG4rXHR1bnNpZ25lZCBsb25nIG1hY19jYXBzO1xuIFx0aW50IGVycjtcbiBcbiBcdHBmLVx1MDAzZXBoeWxpbmtfY29uZmlnLmRldiA9IFx1MDAyNnByaXYtXHUwMDNlbmRldi1cdTAwM2VkZXY7XG4gXHRwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZy50eXBlID0gUEhZTElOS19ORVRERVY7XG4tXHRwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzID0gTUFDX0FTWU1fUEFVU0UgfCBNQUNfU1lNX1BBVVNFIHxcbi1cdFx0TUFDXzEwIHwgTUFDXzEwMCB8IE1BQ18xMDAwIHwgTUFDXzI1MDBGRDtcbiBcbiBcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwsXG4gXHRcdCAgcGYtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuLVx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSxcbi1cdFx0ICBwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4tXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCxcbi1cdFx0ICBwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4tXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWCxcbi1cdFx0ICBwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4tXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUksXG4tXHRcdCAgcGYtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuLVx0cGh5X2ludGVyZmFjZV9zZXRfcmdtaWkocGYtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuIFxuK1x0bWFjX2NhcHMgPSBNQUNfQVNZTV9QQVVTRSB8IE1BQ19TWU1fUEFVU0U7XG4rXHRpZiAoIWVuZXRjX2lzX3BzZXVkb19tYWMocHJpdi1cdTAwM2VzaSkpIHtcbitcdFx0bWFjX2NhcHMgfD0gTUFDXzEwIHwgTUFDXzEwMCB8IE1BQ18xMDAwRkQgfCBNQUNfMjUwMEZEO1xuK1xuK1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJLFxuK1x0XHRcdCAgcGYtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuK1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCxcbitcdFx0XHQgIHBmLVx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbitcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVgsXG4rXHRcdFx0ICBwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4rXHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSxcbitcdFx0XHQgIHBmLVx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbitcbitcdFx0aWYgKCFpc19lbmV0Y19yZXYxKHByaXYtXHUwMDNlc2kpKSB7XG4rXHRcdFx0bWFjX2NhcHMgfD0gTUFDXzUwMDBGRCB8IE1BQ18xMDAwMEZEO1xuK1x0XHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIsXG4rXHRcdFx0XHQgIHBmLVx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbitcdFx0fVxuK1xuK1x0XHRwaHlfaW50ZXJmYWNlX3NldF9yZ21paShwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRtYWNfY2FwcyB8PSBNQUNfMTBGRCB8IE1BQ18xMDBGRCB8IE1BQ18xMDAwRkQgfCBNQUNfMjUwMEZEIHxcbitcdFx0XHQgICAgTUFDXzUwMDBGRCB8IE1BQ18xMDAwMEZEIHwgTUFDXzIwMDAwRkQgfFxuK1x0XHRcdCAgICBNQUNfMjUwMDBGRDtcbitcdH1cbitcbitcdHBmLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgPSBtYWNfY2FwcztcbiBcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcdTAwMjZwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZywgb2ZfZndub2RlX2hhbmRsZShub2RlKSxcbiBcdFx0XHRcdCBwZi1cdTAwM2VpZl9tb2RlLCBvcHMpO1xuIFx0aWYgKElTX0VSUihwaHlsaW5rKSkge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uaFxuaW5kZXggNTdkMmUwZWJkMmIwYmIuLjgyNDNjZTBkZTU3ZjY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmhcbkBAIC0xNyw2ICsxNywxMSBAQCB2b2lkIGVuZXRjX3NldF9kZWZhdWx0X3Jzc19rZXkoc3RydWN0IGVuZXRjX3BmICpwZik7XG4gaW50IGVuZXRjX3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgX19iZTE2IHByb3QsIHUxNiB2aWQpO1xuIGludCBlbmV0Y192bGFuX3J4X2RlbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIF9fYmUxNiBwcm90LCB1MTYgdmlkKTtcbiBpbnQgZW5ldGNfaW5pdF9zcmlvdl9yZXNvdXJjZXMoc3RydWN0IGVuZXRjX3BmICpwZik7XG4rdm9pZCBlbmV0Y19zZXRfc2lfdWNfcHJvbWlzYyhzdHJ1Y3QgZW5ldGNfc2kgKnNpLCBpbnQgc2lfaWQsIGJvb2wgcHJvbWlzYyk7XG4rdm9pZCBlbmV0Y19zZXRfc2lfbWNfcHJvbWlzYyhzdHJ1Y3QgZW5ldGNfc2kgKnNpLCBpbnQgc2lfaWQsIGJvb2wgcHJvbWlzYyk7XG4rdm9pZCBlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCB1NjQgaGFzaCk7XG4rdm9pZCBlbmV0Y19zZXRfc2lfbWNfaGFzaF9maWx0ZXIoc3RydWN0IGVuZXRjX3NpICpzaSwgaW50IHNpX2lkLCB1NjQgaGFzaCk7XG4rdm9pZCBlbmV0Y19zZXRfc2lfdmxhbl9wcm9taXNjKHN0cnVjdCBlbmV0Y19zaSAqc2ksIGludCBzaV9pZCwgYm9vbCBwcm9taXNjKTtcbiBcbiBzdGF0aWMgaW5saW5lIHUxNiBlbmV0Y19nZXRfaXBfcmV2aXNpb24oc3RydWN0IGVuZXRjX2h3ICpodylcbiB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3Fvcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3Fvcy5jXG5pbmRleCA3YjE3YmNhMjRmMjYwZi4uMmFhMGZjYWFmY2QyM2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcW9zLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19xb3MuY1xuQEAgLTExMzUsNyArMTEzNSw2IEBAIHN0YXRpYyBpbnQgZW5ldGNfcHNmcF9wYXJzZV9jbHNmbG93ZXIoc3RydWN0IGVuZXRjX25kZXZfcHJpdiAqcHJpdixcbiBcdHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnk7XG4gXHRzdHJ1Y3QgYWN0aW9uX2dhdGVfZW50cnkgKmU7XG4gXHR1OCBzZmlfb3ZlcndyaXRlID0gMDtcbi1cdGludCBlbnRyaWVzX3NpemU7XG4gXHRpbnQgaSwgZXJyO1xuIFxuIFx0aWYgKGYtXHUwMDNlY29tbW9uLmNoYWluX2luZGV4IFx1MDAzZT0gcHJpdi1cdTAwM2Vwc2ZwX2NhcC5tYXhfc3RyZWFtaWQpIHtcbkBAIC0xMjQyLDggKzEyNDEsNyBAQCBzdGF0aWMgaW50IGVuZXRjX3BzZnBfcGFyc2VfY2xzZmxvd2VyKHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYsXG4gXHRcdGdvdG8gZnJlZV9maWx0ZXI7XG4gXHR9XG4gXG4tXHRlbnRyaWVzX3NpemUgPSBzdHJ1Y3Rfc2l6ZShzZ2ksIGVudHJpZXMsIGVudHJ5Zy1cdTAwM2VnYXRlLm51bV9lbnRyaWVzKTtcbi1cdHNnaSA9IGt6YWxsb2MoZW50cmllc19zaXplLCBHRlBfS0VSTkVMKTtcbitcdHNnaSA9IGt6YWxsb2NfZmxleCgqc2dpLCBlbnRyaWVzLCBlbnRyeWctXHUwMDNlZ2F0ZS5udW1fZW50cmllcyk7XG4gXHRpZiAoIXNnaSkge1xuIFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIGZyZWVfZmlsdGVyO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y192Zi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3ZmLmNcbmluZGV4IDljZGIwYTRkNmJhZmI3Li43ZGNiNGEwMjQ2ZjUyOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y192Zi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfdmYuY1xuQEAgLTMxNyw3ICszMTcsMTQgQEAgc3RhdGljIGludCBlbmV0Y192Zl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcbiBcdGVuZXRjX2dldF9zaV9jYXBzKHNpKTtcbiBcbi1cdG5kZXYgPSBhbGxvY19ldGhlcmRldl9tcShzaXplb2YoKnByaXYpLCBFTkVUQ19NQVhfTlVNX1RYUVMpO1xuK1x0LyogQ3VycmVudGx5LCB0aGUgc3VwcG9ydGVkIFNvQ3MgaGF2ZSBhIG1heCBvZiA2IENQVXMgYW5kIHRoZSBWRnNcbitcdCAqIGhhdmUgbGVzcyB0aGFuIDYgUlgvVFggcmluZ3MuIFNvIG5vIGlzc3VlcyBmb3IgdGhlc2Ugc3VwcG9ydGVkXG4rXHQgKiBTb0NzLCBidXQgZm9yIGZ1dHVyZSBTb0NzIHdoaWNoIGhhdmUgbW9yZSBDUFVzIG9yIG1vcmUgVFgvUlhcbitcdCAqIHJpbmdzLCBhbGwgdGhlIHJlbGF0ZWQgbG9naWMgbmVlZHMgdG8gYmUgaW1wcm92ZWQuXG4rXHQgKi9cbitcdG5kZXYgPSBhbGxvY19ldGhlcmRldl9tcXMoc2l6ZW9mKCpwcml2KSxcbitcdFx0XHRcdCAgbWluKHNpLVx1MDAzZW51bV90eF9yaW5ncywgRU5FVENfTUFYX05VTV9UWFFTKSxcbitcdFx0XHRcdCAgbWluKHNpLVx1MDAzZW51bV9yeF9yaW5ncywgRU5FVENfTUFYX05VTV9UWFFTKSk7XG4gXHRpZiAoIW5kZXYpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCJuZXRkZXYgY3JlYXRpb24gZmFpbGVkXFxuXCIpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNsL250bXAuaCBiL2luY2x1ZGUvbGludXgvZnNsL250bXAuaFxuaW5kZXggZDNiNmM0NzZiOTFhMmQuLjc2NGVmMjg5MjYwODVlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mc2wvbnRtcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzbC9udG1wLmhcbkBAIC03NSw4ICs3NSwxMCBAQCBzdHJ1Y3QgbnRtcF91c2VyIHtcbiBcdC8qIE5UTVAgdGFibGUgYml0bWFwcyBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCAqL1xuIFx0dTMyIGV0dF9iaXRtYXBfc2l6ZTtcbiBcdHUzMiBlY3RfYml0bWFwX3NpemU7XG4rXHR1MTYgbWFmdF9udW1fZW50cmllcztcbiBcdHVuc2lnbmVkIGxvbmcgKmV0dF9naWRfYml0bWFwOyAvKiBvbmx5IHZhbGlkIGZvciBzd2l0Y2ggKi9cbiBcdHVuc2lnbmVkIGxvbmcgKmVjdF9naWRfYml0bWFwOyAvKiBvbmx5IHZhbGlkIGZvciBzd2l0Y2ggKi9cbitcdHVuc2lnbmVkIGxvbmcgKm1hZnRfZWlkX2JpdG1hcDsgLyogb25seSB2YWxpZCBmb3IgRU5FVEMgKi9cbiB9O1xuIFxuIHN0cnVjdCBtYWZ0X2VudHJ5X2RhdGEge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDM6MDA6MTYuMTkyODc4MDYxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzMTcyNTIzNjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MjMwOTAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjkxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDAzOjA2OjA5LjM2NTQwMzM2NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE2MjcyNDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkZTTF9FTkVUQ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnPTM4Nz1DT05GSUdfRlNMX0RQQUEyX0VUSD1tXFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZzozODg6Q09ORklHX0ZTTF9FTkVUQz1tXFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0zODktQ09ORklHX05YUF9FTkVUQzQ9bVxcbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWc6MzkwOkNPTkZJR19GU0xfRU5FVENfVkY9bVxcbmFyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWc6MzkxOkNPTkZJR19GU0xfRU5FVENfUU9TPXlcXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnLTM5Mi1DT05GSUdfTlhQX05FVENfQkxLX0NUUkw9bVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL25ldGMvS2NvbmZpZz0yPWNvbmZpZyBORVRfRFNBX05FVENfU1dJVENIXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9LY29uZmlnLTctXFx0c2VsZWN0IE5FVF9EU0FfVEFHX05FVENcXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9LY29uZmlnOjg6XFx0c2VsZWN0IEZTTF9FTkVUQ19NRElPXFxuZHJpdmVycy9uZXQvZHNhL25ldGMvS2NvbmZpZy05LVxcdHNlbGVjdCBOWFBfTlRNUFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9LY29uZmlnPTMyPWNvbmZpZyBORVRfRFNBX01TQ0NfRkVMSVhcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvS2NvbmZpZy00My1cXHRzZWxlY3QgTkVUX0RTQV9UQUdfT0NFTE9UXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9LY29uZmlnOjQ0OlxcdHNlbGVjdCBGU0xfRU5FVENfTURJT1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvS2NvbmZpZy00NS1cXHRzZWxlY3QgUENTX0xZTlhcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjI6Y29uZmlnIEZTTF9FTkVUQ19DT1JFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctMy1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWc9Mjc9Y29uZmlnIE5YUF9OVE1QXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy0yOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZzozMDpjb25maWcgRlNMX0VORVRDXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctMzEtXFx0dHJpc3RhdGUgXFxcIkVORVRDIFBGIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTMzLVxcdGRlcGVuZHMgb24gUENJX01TSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjM0OlxcdHNlbGVjdCBGU0xfRU5FVENfQ09SRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjM1OlxcdHNlbGVjdCBGU0xfRU5FVENfSUVSQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjM2OlxcdHNlbGVjdCBGU0xfRU5FVENfTURJT1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTM3LVxcdHNlbGVjdCBOWFBfRU5FVENfUEZfQ09NTU9OXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZz00OD1jb25maWcgTlhQX0VORVRDNFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctNTEtXFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWc6NTI6XFx0c2VsZWN0IEZTTF9FTkVUQ19DT1JFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWc6NTM6XFx0c2VsZWN0IEZTTF9FTkVUQ19NRElPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctNTQtXFx0c2VsZWN0IE5YUF9FTkVUQ19QRl9DT01NT05cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTY1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjY2OmNvbmZpZyBGU0xfRU5FVENfVkZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy02Ny1cXHR0cmlzdGF0ZSBcXFwiRU5FVEMgVkYgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctNjktXFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWc6NzA6XFx0c2VsZWN0IEZTTF9FTkVUQ19DT1JFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWc6NzE6XFx0c2VsZWN0IEZTTF9FTkVUQ19NRElPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctNzItXFx0c2VsZWN0IFBIWUxJTktcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTgwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjgxOmNvbmZpZyBGU0xfRU5FVENfSUVSQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTgyLVxcdHRyaXN0YXRlIFxcXCJFTkVUQyBJRVJCIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTg4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjg5OmNvbmZpZyBGU0xfRU5FVENfTURJT1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTkwLVxcdHRyaXN0YXRlIFxcXCJFTkVUQyBNRElPIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTk3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjk4OmNvbmZpZyBGU0xfRU5FVENfUFRQX0NMT0NLXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctOTktXFx0dHJpc3RhdGUgXFxcIkVORVRDIFBUUCBjbG9jayBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWc6MTAwOlxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfUU9SSVEgXFx1MDAyNlxcdTAwMjYgKEZTTF9FTkVUQyB8fCBGU0xfRU5FVENfVkYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctMTAxLVxcdGRlZmF1bHQgeVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWctMTA5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjExMDpjb25maWcgRlNMX0VORVRDX1FPU1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTExMS1cXHRib29sIFxcXCJFTkVUQyBoYXJkd2FyZSBUaW1lLXNlbnNpdGl2ZSBOZXR3b3JrIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWc6MTEyOlxcdGRlcGVuZHMgb24gKEZTTF9FTkVUQyB8fCBGU0xfRU5FVENfVkYpIFxcdTAwMjZcXHUwMDI2IChORVRfU0NIX1RBUFJJTyB8fCBORVRfU0NIX0NCUylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy0xMTMtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlLTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX0ZTTF9FTkVUQ19DT1JFKSArPSBmc2wtZW5ldGMtY29yZS5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlLTQtZnNsLWVuZXRjLWNvcmUteSA6PSBlbmV0Yy5vIGVuZXRjX2NiZHIubyBlbmV0Y19ldGh0b29sLm9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9NYWtlZmlsZT0xMT1ueHAtbmV0Yy1saWIteSA6PSBudG1wLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvTWFrZWZpbGUtMTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19GU0xfRU5FVEMpICs9IGZzbC1lbmV0Yy5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlLTE0LWZzbC1lbmV0Yy15IDo9IGVuZXRjX3BmLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvTWFrZWZpbGU6MTU6ZnNsLWVuZXRjLSQoQ09ORklHX0ZTTF9FTkVUQ19RT1MpICs9IGVuZXRjX3Fvcy5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlLTE2LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlPTE5PW54cC1lbmV0YzQtJChDT05GSUdfREVCVUdfRlMpICs9IGVuZXRjNF9kZWJ1Z2ZzLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvTWFrZWZpbGUtMjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlOjIxOm9iai0kKENPTkZJR19GU0xfRU5FVENfVkYpICs9IGZzbC1lbmV0Yy12Zi5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlLTIyLWZzbC1lbmV0Yy12Zi15IDo9IGVuZXRjX3ZmLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvTWFrZWZpbGUtMjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19GU0xfRU5FVENfSUVSQikgKz0gZnNsLWVuZXRjLWllcmIub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9NYWtlZmlsZS0yNS1mc2wtZW5ldGMtaWVyYi15IDo9IGVuZXRjX2llcmIub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9NYWtlZmlsZS0yNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvTWFrZWZpbGU6Mjc6b2JqLSQoQ09ORklHX0ZTTF9FTkVUQ19NRElPKSArPSBmc2wtZW5ldGMtbWRpby5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlLTI4LWZzbC1lbmV0Yy1tZGlvLXkgOj0gZW5ldGNfcGNpX21kaW8ubyBlbmV0Y19tZGlvLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvTWFrZWZpbGUtMjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL01ha2VmaWxlOjMwOm9iai0kKENPTkZJR19GU0xfRU5FVENfUFRQX0NMT0NLKSArPSBmc2wtZW5ldGMtcHRwLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvTWFrZWZpbGUtMzEtZnNsLWVuZXRjLXB0cC15IDo9IGVuZXRjX3B0cC5vXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGMuaD01OTU9c3RhdGljIGlubGluZSBib29sIGVuZXRjX3B0cF9jbG9ja19pc19lbmFibGVkKHN0cnVjdCBlbmV0Y19zaSAqc2kpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGMuaC01OTctXFx0aWYgKGlzX2VuZXRjX3JldjEoc2kpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Yy5oOjU5ODpcXHRcXHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfRlNMX0VORVRDX1BUUF9DTE9DSyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjLmgtNTk5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjLmgtNjAyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Yy5oOjYwMzojaWZkZWYgQ09ORklHX0ZTTF9FTkVUQ19RT1NcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGMuaC02MDQtaW50IGVuZXRjX3Fvc19xdWVyeV9jYXBzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB2b2lkICp0eXBlX2RhdGEpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX2llcmIuaC02LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19pZXJiLmg6NzojaWYgSVNfRU5BQkxFRChDT05GSUdfRlNMX0VORVRDX0lFUkIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX2llcmIuaC04LVxcbi0tXFxuZHJpdmVycy9wdHAvS2NvbmZpZz01OD1jb25maWcgUFRQXzE1ODhfQ0xPQ0tfUU9SSVFcXG5kcml2ZXJzL3B0cC9LY29uZmlnLTU5LVxcdHRyaXN0YXRlIFxcXCJGcmVlc2NhbGUgUW9ySVEgMTU4OCB0aW1lciBhcyBQVFAgY2xvY2tcXFwiXFxuZHJpdmVycy9wdHAvS2NvbmZpZzo2MDpcXHRkZXBlbmRzIG9uIEdJQU5GQVIgfHwgRlNMX0RQQUFfRVRIIHx8IEZTTF9EUEFBMl9FVEggfHwgRlNMX0VORVRDIHx8IEZTTF9FTkVUQ19WRiB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL3B0cC9LY29uZmlnLTYxLVxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcXG5kcml2ZXJzL3B0cC9LY29uZmlnOjYyOlxcdGRlZmF1bHQgeSBpZiBHSUFORkFSIHx8IEZTTF9EUEFBX0VUSCB8fCBGU0xfRFBBQTJfRVRIIHx8IEZTTF9FTkVUQyB8fCBGU0xfRU5FVENfVkZcXG5kcml2ZXJzL3B0cC9LY29uZmlnLTYzLVxcdGhlbHBcXG4tLVxcbmluY2x1ZGUvbGludXgvZnNsL2VuZXRjX21kaW8uaC0zLVxcbmluY2x1ZGUvbGludXgvZnNsL2VuZXRjX21kaW8uaDo0OiNpZm5kZWYgX0ZTTF9FTkVUQ19NRElPX0hfXFxuaW5jbHVkZS9saW51eC9mc2wvZW5ldGNfbWRpby5oOjU6I2RlZmluZSBfRlNMX0VORVRDX01ESU9fSF9cXG5pbmNsdWRlL2xpbnV4L2ZzbC9lbmV0Y19tZGlvLmgtNi1cXG4tLVxcbmluY2x1ZGUvbGludXgvZnNsL2VuZXRjX21kaW8uaD0zMz1zdHJ1Y3QgZW5ldGNfbWRpb19wcml2IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZnNsL2VuZXRjX21kaW8uaC0zNy1cXG5pbmNsdWRlL2xpbnV4L2ZzbC9lbmV0Y19tZGlvLmg6Mzg6I2lmIElTX1JFQUNIQUJMRShDT05GSUdfRlNMX0VORVRDX01ESU8pXFxuaW5jbHVkZS9saW51eC9mc2wvZW5ldGNfbWRpby5oLTM5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwMzowNjoxMS40ODE2ODA1ODFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzczNjIyMjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRU5FVEMgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9gIGRpcmVjdG9yeS4gUmlnaHQsIGFuZCB0aGUgcmVsZXZhbnQgY29uZmlncyBzZWVtIHRvIGJlIGBGU0xfRU5FVENgLCBgTlhQX0VORVRDNGAsIGBGU0xfRU5FVENfVkZgLCBhbmQgYEZTTF9FTkVUQ19RT1NgLiBIbW0sIEkgc2hvdWxkIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXNlIGFyZSBhbHJlYWR5IGVuYWJsZWQgaW4gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbi4gTGV0IG1lIGNoZWNrIGBhcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnYC4uLiBBaCwgeWVzLiBgQ09ORklHX0ZTTF9FTkVUQz1tYCwgYENPTkZJR19OWFBfRU5FVEM0PW1gLCBgQ09ORklHX0ZTTF9FTkVUQ19WRj1tYCwgYW5kIGBDT05GSUdfRlNMX0VORVRDX1FPUz15YC4gU28gdGhleSdyZSBhbHJlYWR5IGluIHRoZSBkZWZjb25maWcuIEdvb2QsIGp1c3QgbmVlZCB0byByZW1lbWJlciB0byBsaXN0IHRoZW0gd2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvciB3aGVyZXZlciB0aGlzIGlzIGdvaW5nLlxuXG5Ob3csIGxldCdzIGRpZyBpbnRvIHRoZSBhY3R1YWwgY29kZSBjaGFuZ2UuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gc2VlbXMgdG8gYmUgd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmNgLiBPa2F5LCBoZXJlJ3Mgd2hhdCdzIGhhcHBlbmluZy4gVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGBlbmV0YzRfcHNpX2RvX3NldF9yeF9tb2RlYCBmdW5jdGlvbiwgd2hpY2ggd2FzIHBhcnQgb2YgYSB3b3JrcXVldWUsIGFuZCBpdCBzZWVtcyBsaWtlIGl0J3MgcmVwbGFjaW5nIGAubmRvX3NldF9yeF9tb2RlYCB3aXRoIGAubmRvX3NldF9yeF9tb2RlX2FzeW5jYCBpbiB0aGUgYG5ldF9kZXZpY2Vfb3BzYCBzdHJ1Y3R1cmUuIEhhbmcgb24uLi4gYC5uZG9fc2V0X3J4X21vZGVfYXN5bmNgPyBJcyB0aGF0IGEgbmV3IG1lbWJlciBvZiB0aGUgYG5ldF9kZXZpY2Vfb3BzYCBzdHJ1Y3Q/IFRoYXQncyBub3Qgc29tZXRoaW5nIEknbSBpbW1lZGlhdGVseSBmYW1pbGlhciB3aXRoLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhhdC4gVGltZSB0byBjaGVjayBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAgdG8gc2VlIHdoYXQgdGhlIGRlYWwgaXMgd2l0aCB0aGlzIG5ldyBjYWxsYmFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkwOTQsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMDM6MDY6MTkuMjU1MzA0NzQ1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzYzODcxMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmRvX3NldF9yeF9tb2RlX2FzeW5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdD0yODg9bmRvX3NldF9yeF9tb2RlOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTI5MC1cXHRDb250ZXh0OiBCSHMgZGlzYWJsZWRcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3Q6MjkxOlxcdE5vdGVzOiBEZXByZWNhdGVkIGluIGZhdm9yIG9mIG5kb19zZXRfcnhfbW9kZV9hc3luYyB3aGljaCBydW5zXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTI5Mi1cXHRpbiBwcm9jZXNzIGNvbnRleHQuXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTI5My1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3Q6Mjk0Om5kb19zZXRfcnhfbW9kZV9hc3luYzpcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3QtMjk1LVxcdFN5bmNocm9uaXphdGlvbjogcnRubF9sb2NrKCkgc2VtYXBob3JlLiBJbiBhZGRpdGlvbiwgbmV0ZGV2IGluc3RhbmNlXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYz0yMTU3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBvaWJfbmV0ZGV2X29wc19wZiA9IHtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jLTIxNjUtXFx0Lm5kb190eF90aW1lb3V0XFx0XFx0ID0gaXBvaWJfdGltZW91dCxcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYzoyMTY2OlxcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcXHQgPSBpcG9pYl9zZXRfcnhfbW9kZV9hc3luYyxcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYy0yMTY3LVxcdC5uZG9fZ2V0X2lmbGlua1xcdFxcdCA9IGlwb2liX2dldF9pZmxpbmssXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYz0yMTgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBvaWJfbmV0ZGV2X29wc192ZiA9IHtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jLTIxODgtXFx0Lm5kb190eF90aW1lb3V0XFx0XFx0ID0gaXBvaWJfdGltZW91dCxcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYzoyMTg5OlxcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcXHQgPSBpcG9pYl9zZXRfcnhfbW9kZV9hc3luYyxcXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYy0yMTkwLVxcdC5uZG9fZ2V0X2lmbGlua1xcdFxcdCA9IGlwb2liX2dldF9pZmxpbmssXFxuLS1cXG5kcml2ZXJzL25ldC9kdW1teS5jPTg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZHVtbXlfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2R1bW15LmMtOTItXFx0Lm5kb192YWxpZGF0ZV9hZGRyXFx0PSBldGhfdmFsaWRhdGVfYWRkcixcXG5kcml2ZXJzL25ldC9kdW1teS5jOjkzOlxcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcXHQ9IHNldF9tdWx0aWNhc3RfbGlzdCxcXG5kcml2ZXJzL25ldC9kdW1teS5jLTk0LVxcdC5uZG9fc2V0X21hY19hZGRyZXNzXFx0PSBldGhfbWFjX2FkZHIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYz0xNjA1ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJueHRfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE2MDU4LVxcdC5uZG9fZ2V0X3N0YXRzNjRcXHQ9IGJueHRfZ2V0X3N0YXRzNjQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM6MTYwNTk6XFx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1xcdD0gYm54dF9zZXRfcnhfbW9kZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNjA2MC1cXHQubmRvX2V0aF9pb2N0bFxcdFxcdD0gYm54dF9pb2N0bCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuYz01NjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlbmV0YzRfbmRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMtNTY5LVxcdC5uZG9fc2V0X21hY19hZGRyZXNzXFx0PSBlbmV0Y19wZl9zZXRfbWFjX2FkZHIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jOjU3MDpcXHQubmRvX3NldF9yeF9tb2RlX2FzeW5jXFx0PSBlbmV0YzRfcGZfc2V0X3J4X21vZGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jLTU3MS1cXHQubmRvX3NldF9mZWF0dXJlc1xcdD0gZW5ldGM0X3BmX3NldF9mZWF0dXJlcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmM9NTEzND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlhdmZfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMtNTEzNy1cXHQubmRvX3N0YXJ0X3htaXRcXHRcXHQ9IGlhdmZfeG1pdF9mcmFtZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jOjUxMzg6XFx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1xcdD0gaWF2Zl9zZXRfcnhfbW9kZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jLTUxMzktXFx0Lm5kb192YWxpZGF0ZV9hZGRyXFx0PSBldGhfdmFsaWRhdGVfYWRkcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmM9NTMyMj1jb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWx4NWVfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMtNTMyOC1cXHQubmRvX2dldF9zdGF0czY0ICAgICAgICAgPSBtbHg1ZV9nZXRfc3RhdHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYzo1MzI5OlxcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmMgICA9IG1seDVlX3NldF9yeF9tb2RlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMtNTMzMC1cXHQubmRvX3NldF9tYWNfYWRkcmVzcyAgICAgPSBtbHg1ZV9zZXRfbWFjLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19uZXRkZXYuYz01NTk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBmYm5pY19uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19uZXRkZXYuYy01NjYtXFx0Lm5kb19jaGFuZ2VfbXR1XFx0XFx0PSBmYm5pY19jaGFuZ2VfbXR1LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2LmM6NTY3OlxcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcXHQ9IGZibmljX3NldF9yeF9tb2RlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbmV0ZGV2LmMtNTY4LVxcdC5uZG9fZ2V0X3N0YXRzNjRcXHQ9IGZibmljX2dldF9zdGF0czY0LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTYyNz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5zaW1fbmV0ZGV2X29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtNjI4LVxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gbnNpbV9zdGFydF94bWl0LFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzo2Mjk6XFx0Lm5kb19zZXRfcnhfbW9kZV9hc3luY1xcdD0gbnNpbV9zZXRfcnhfbW9kZSxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtNjMwLVxcdC5uZG9fc2V0X21hY19hZGRyZXNzXFx0PSBldGhfbWFjX2FkZHIsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9NjUyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbnNpbV92Zl9uZXRkZXZfb3BzID0ge1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy02NTMtXFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSBuc2ltX3N0YXJ0X3htaXQsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jOjY1NDpcXHQubmRvX3NldF9yeF9tb2RlX2FzeW5jXFx0PSBuc2ltX3NldF9yeF9tb2RlLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy02NTUtXFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcXHQ9IGV0aF9tYWNfYWRkcixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGtpdC5jPTMzMT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5ldGtpdF9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0a2l0LmMtMzM1LVxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gbmV0a2l0X3htaXQsXFxuZHJpdmVycy9uZXQvbmV0a2l0LmM6MzM2OlxcdC5uZG9fc2V0X3J4X21vZGVfYXN5bmNcXHQ9IG5ldGtpdF9zZXRfbXVsdGljYXN0LFxcbmRyaXZlcnMvbmV0L25ldGtpdC5jLTMzNy1cXHQubmRvX3NldF9yeF9oZWFkcm9vbVxcdD0gbmV0a2l0X3NldF9oZWFkcm9vbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MTA2Mj1zdHJ1Y3QgbmV0ZGV2X25ldF9ub3RpZmllciB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTExMjItICpcXHRDYW5ub3Qgc2xlZXAsIGNhbGxlZCB3aXRoIG5ldGlmX2FkZHJfbG9ja19iaCBoZWxkLlxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MTEyMzogKlxcdERlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgbmRvX3NldF9yeF9tb2RlX2FzeW5jLlxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTEyNC0gKlxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MTEyNTogKiBpbnQgKCpuZG9fc2V0X3J4X21vZGVfYXN5bmMpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xMTI2LSAqXFx0XFx0XFx0XFx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnVjLFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0xNDQ2PXN0cnVjdCBuZXRfZGV2aWNlX29wcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE0NjEtXFx0dm9pZFxcdFxcdFxcdCgqbmRvX3NldF9yeF9tb2RlKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjE0NjI6XFx0aW50XFx0XFx0XFx0KCpuZG9fc2V0X3J4X21vZGVfYXN5bmMpKFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTQ2My1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTEzMjY9aW50IHJlZ2lzdGVyX25ldGRldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTEzODItXFx0ICAgIGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3NldF9yeF9tb2RlIFxcdTAwMjZcXHUwMDI2XFxubmV0L2NvcmUvZGV2LmM6MTEzODM6XFx0ICAgICFkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zZXRfcnhfbW9kZV9hc3luYylcXG5uZXQvY29yZS9kZXYuYzoxMTM4NDpcXHRcXHRuZXRkZXZfV0FSTihkZXYsIFxcXCJvcHMtbG9ja2VkIGRyaXZlcnMgc2hvdWxkIHVzZSBuZG9fc2V0X3J4X21vZGVfYXN5bmNcXFxcblxcXCIpO1xcbm5ldC9jb3JlL2Rldi5jLTExMzg1LVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0xMjc3PXZvaWQgbmV0aWZfcnhfbW9kZV9ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTI5NC1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEyOTU6XFx0aWYgKG9wcy1cXHUwMDNlbmRvX3NldF9yeF9tb2RlX2FzeW5jKSB7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMjk2LVxcdFxcdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzE1LVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTMxNjpcXHRpZiAob3BzLVxcdTAwM2VuZG9fc2V0X3J4X21vZGVfYXN5bmMpIHtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEzMTc6XFx0XFx0ZXJyID0gb3BzLVxcdTAwM2VuZG9fc2V0X3J4X21vZGVfYXN5bmMoZGV2LCBcXHUwMDI2dWNfc25hcCwgXFx1MDAyNm1jX3NuYXApO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTMxOC1cXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9MTM2Mj12b2lkIF9fZGV2X3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzNzMtXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMzc0OlxcdGlmIChvcHMtXFx1MDAzZW5kb19zZXRfcnhfbW9kZV9hc3luYyB8fCBvcHMtXFx1MDAzZW5kb19jaGFuZ2VfcnhfZmxhZ3MgfHxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzNzUtXFx0ICAgIG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpIHtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9MTM5MD12b2lkIGRldl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xNDAwLSAqXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxNDAxOiAqIERyaXZlcnMgaW1wbGVtZW50aW5nIG5kb19zZXRfcnhfbW9kZV9hc3luYygpIGhhdmUgdGhlaXIgcnggbW9kZSBjYWxsYmFja1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTQwMi0gKiBleGVjdXRlZCBmcm9tIGEgd29ya3F1ZXVlLiBUaGlzIGFsbG93cyB0aGUgY2FsbGJhY2sgdG8gc2xlZXAsIGJ1dCBtZWFuc1xcbi0tXFxubmV0L2NvcmUvZGV2X2lvY3RsLmM9NTQxPXN0YXRpYyBpbnQgZGV2X2lmc2lvYyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB2b2lkIF9fdXNlciAqZGF0YSxcXG4tLVxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTU4OC1cXHRjYXNlIFNJT0NBRERNVUxUSTpcXG5uZXQvY29yZS9kZXZfaW9jdGwuYzo1ODk6XFx0XFx0aWYgKCghb3BzLVxcdTAwM2VuZG9fc2V0X3J4X21vZGUgXFx1MDAyNlxcdTAwMjYgIW9wcy1cXHUwMDNlbmRvX3NldF9yeF9tb2RlX2FzeW5jKSB8fFxcbm5ldC9jb3JlL2Rldl9pb2N0bC5jLTU5MC1cXHRcXHQgICAgaWZyLVxcdTAwM2VpZnJfaHdhZGRyLnNhX2ZhbWlseSAhPSBBRl9VTlNQRUMpXFxuLS1cXG5uZXQvY29yZS9kZXZfaW9jdGwuYy02MDAtXFx0Y2FzZSBTSU9DREVMTVVMVEk6XFxubmV0L2NvcmUvZGV2X2lvY3RsLmM6NjAxOlxcdFxcdGlmICgoIW9wcy1cXHUwMDNlbmRvX3NldF9yeF9tb2RlIFxcdTAwMjZcXHUwMDI2ICFvcHMtXFx1MDAzZW5kb19zZXRfcnhfbW9kZV9hc3luYykgfHxcXG5uZXQvY29yZS9kZXZfaW9jdGwuYy02MDItXFx0XFx0ICAgIGlmci1cXHUwMDNlaWZyX2h3YWRkci5zYV9mYW1pbHkgIT0gQUZfVU5TUEVDKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwMzowNjoyMS4xOTE2OTk3MDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzg2NDE1NjI1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBFTkVUQyBEcml2ZXI6IEEgRm9jdXNlZCBBcHByb2FjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0J3MgbWFraW5nIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIEVORVRDIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgaXQgaGFuZGxlcyBSWCBtb2RlLiBUaGUga2V5IHRoaW5nIGlzIHRoYXQgaXQncyByZXBsYWNpbmcgdGhlIHdvcmtxdWV1ZSB3aXRoIGBuZG9fc2V0X3J4X21vZGVfYXN5bmNgLCB3aGljaCBydW5zIGluIHByb2Nlc3MgY29udGV4dC4gVGhpcyBzZWVtcyBsaWtlIGEgZGVjZW50IGNoYW5nZSwgcmVkdWNpbmcgc29tZSBvdmVyaGVhZCwgYnV0IGl0IGRlZmluaXRlbHkgbmVlZHMgc29tZSBhdHRlbnRpb24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuXG5cbk15IG1haW4gY29uY2VybiBpcyB0aGUgcmVtb3ZhbCBvZiB0aGUgd29ya3F1ZXVlIGFuZCB0aGUgc3Vic2VxdWVudCBtb2RpZmljYXRpb25zIHRvIHRoZSBNQUMgZmlsdGVyaW5nIGxvZ2ljLiBUaGlzIHBhdGNoIHRvdWNoZXMgYGVuZXRjNF9wZi5jYCBhbmQgYGVuZXRjX3BmLmNgIHByZXR0eSBleHRlbnNpdmVseSwgc28gdGhvc2UgYXJlIG15IHByaW1hcnkgYXJlYXMgb2YgZm9jdXMuIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBtb2RpZmllZCB0byBkZXRlcm1pbmUgdGhlIGF0dGFjayBzdXJmYWNlLlxuXG5Ob3csIGxldCdzIHNlZSwgYWZ0ZXIgc29tZSBkaWdnaW5nLCBoZXJlIGFyZSB0aGUgZnVuY3Rpb25zIEkndmUgaWRlbnRpZmllZCB0aGF0IGFyZSBtb2RpZmllZCBieSB0aGlzIHBhdGNoIHRoYXQgYXJlIG5vdCBpbiB0aGUgaG90IHBhdGg6IGBlbmV0YzRfcGZfc2V0X3J4X21vZGVgLCBgZW5ldGNfcGZfc2V0X3J4X21vZGVgLCBgZW5ldGM0X3BmX3NldF9tYWNfZmlsdGVyYCwgYGVuZXRjNF9wZl9zZXRfdWNfZXhhY3RfZmlsdGVyYCwgYGVuZXRjNF9wZl9hZGRfbWFmdF9lbnRyaWVzYCwgYGVuZXRjX3N5bmNfbWFjX2ZpbHRlcnNgLCBgZW5ldGNfc2V0X3NpX3VjX3Byb21pc2NgLCBgZW5ldGNfc2V0X3NpX21jX3Byb21pc2NgLCBgZW5ldGNfc2V0X3NpX3VjX2hhc2hfZmlsdGVyYCwgYGVuZXRjX3NldF9zaV9tY19oYXNoX2ZpbHRlcmAsIGBlbmV0Y19zZXRfc2lfdmxhbl9wcm9taXNjYCwgYW5kIGBlbmV0Y19wc2ZwX3BhcnNlX2Nsc2Zsb3dlcmAuXG5cbkkgZGlkIGEgcXVpY2sgY2hlY2sgb24gYSBjb3VwbGUgb2YgdGhvc2UgdG8gc2VlIGlmIGFueSBpbW1lZGlhdGVseSBzdG9vZCBvdXQuIGBlbmV0Y19wc2ZwX3BhcnNlX2Nsc2Zsb3dlcmAgaGFzIGEgc21hbGwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZpbmUuIEhvd2V2ZXIsIGBlbmV0Y192Zl9wcm9iZWAgaGFzIGEgY2hhbmdlIHdoZXJlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBxdWV1ZXMgaXMgY2hhbmdlZCwgc28gdGhlcmUncyBhIHBvdGVudGlhbCBmb3IgbWlzY29uZmlndXJhdGlvbiwgYnV0IHRoYXQncyBhIHNtYWxsZXIgY2hhbmdlLlxuXG5HaXZlbiB0aGlzLCBJIHNob3VsZCBmb2N1cyBvbiB0aGUgbWFpbiBmaWxlcywgZXNwZWNpYWxseSB0aGUgbGlzdGVkIHN5bWJvbHMuIFRoZSBjb25maWcgb3B0aW9ucyBJJ2xsIG5lZWQgdG8gZW5hYmxlIHRvIHRlc3QgdGhpcyBjaGFuZ2UgYXJlOiBgRlNMX0VORVRDYCwgYE5YUF9FTkVUQzRgLCBgRlNMX0VORVRDX1ZGYCwgYW5kIGBGU0xfRU5FVENfUU9TYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBjb3JyZWN0IGNvbmZpZ3MsIGFjY29yZGluZyB0byB0aGUgS2NvbmZpZyBmaWxlcy5cblxuT2theSwgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBjb25maWdzIGFnYWluLi4uIHllcCwgdGhvc2UgYXJlIGl0LiBOb3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY29uZmlncyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGhlcmUuIExldCdzIHNlZS4uLiBgTlhQX05UTVBgPyBObywgd2FpdC4uLiBJbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL0tjb25maWdgLCBpdCdzIHRoZXJlLi4uXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMDYyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwMzowNjozNS4wNTU4NTgzNDdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyMDE1MzMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJOWFBfTlRNUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbmV0Yy9LY29uZmlnPTI9Y29uZmlnIE5FVF9EU0FfTkVUQ19TV0lUQ0hcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL0tjb25maWctOC1cXHRzZWxlY3QgRlNMX0VORVRDX01ESU9cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9LY29uZmlnOjk6XFx0c2VsZWN0IE5YUF9OVE1QXFxuZHJpdmVycy9uZXQvZHNhL25ldGMvS2NvbmZpZy0xMC1cXHRzZWxlY3QgTlhQX05FVENfTElCXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZz0yPWNvbmZpZyBGU0xfRU5FVENfQ09SRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTMtXFx0dHJpc3RhdGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZzo0OlxcdHNlbGVjdCBOWFBfTkVUQ19MSUIgaWYgTlhQX05UTVBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy01LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnPTIwPWNvbmZpZyBOWFBfTkVUQ19MSUJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTI2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjI3OmNvbmZpZyBOWFBfTlRNUFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTI4LVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnPTQ4PWNvbmZpZyBOWFBfRU5FVEM0XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvS2NvbmZpZy01NC1cXHRzZWxlY3QgTlhQX0VORVRDX1BGX0NPTU1PTlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnOjU1OlxcdHNlbGVjdCBOWFBfTlRNUFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9LY29uZmlnLTU2LVxcdHNlbGVjdCBQSFlMSU5LXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDAzOjA2OjM2Ljc3NjAxOTc4OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2MjMyMDgzMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgRU5FVEMgRHJpdmVyIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBOWFBfRU5FVEM0YCBkZXBlbmRzIG9uIGBOWFBfTlRNUGAuIEdvb2QgdG8ga25vdy4gTGV0IG1lIHF1aWNrbHkgYXNzZXNzIGlmIGBGU0xfRU5FVENgIGlzIHN1ZmZpY2llbnQgb24gaXRzIG93bi4gSXQgc2VlbXMgSSBuZWVkIHRvIGVuYWJsZSBhIGZldyBjb25maWd1cmF0aW9uczogYEZTTF9FTkVUQ2AsIGBOWFBfRU5FVEM0YCwgYEZTTF9FTkVUQ19WRmAsIGFuZCBgRlNMX0VORVRDX1FPU2AuIEFscmlnaHQsIEkndmUgZ290IHRoYXQuXG5cbk5vdywgbGV0J3MgcHJlcGFyZSB0aGUgb3V0cHV0IGZvciB0aGlzIHBhdGNoLiBJJ2xsIGZsYWcgaXQgYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAsIHRoYXQncyBhIGdpdmVuLiBUaGUgY29yZSBvZiB0aGlzIHdvcmsgbGllcyBpbiBob3cgdGhlIGRyaXZlciBoYW5kbGVzIFJYIG1vZGUsIE1BQyBmaWx0ZXJzLCBhbmQgVkxBTiBmaWx0ZXJpbmcuIFRoZXJlZm9yZSwgdGhlIGltcG9ydGFudCBzeW1ib2xzIHRvIGZvY3VzIG9uIGR1cmluZyBmdXp6aW5nIGFyZTogYGVuZXRjNF9wZl9zZXRfcnhfbW9kZWAsIGBlbmV0Y19wZl9zZXRfcnhfbW9kZWAsIGBlbmV0YzRfcGZfc2V0X21hY19maWx0ZXJgLCBgZW5ldGM0X3BmX3NldF91Y19leGFjdF9maWx0ZXJgLCBgZW5ldGM0X3BmX2FkZF9tYWZ0X2VudHJpZXNgLCBgZW5ldGNfc3luY19tYWNfZmlsdGVyc2AsIGBlbmV0Y19zZXRfc2lfdWNfcHJvbWlzY2AsIGBlbmV0Y19zZXRfc2lfbWNfcHJvbWlzY2AsIGBlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXJgLCBgZW5ldGNfc2V0X3NpX21jX2hhc2hfZmlsdGVyYCBhbmQgYGVuZXRjX3NldF9zaV92bGFuX3Byb21pc2NgLiBUaGVzZSByZXByZXNlbnQgdGhlIHByaW1hcnkgYXJlYXMgb2YgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cbkZvciBlbmFibGluZyB0aGUgY29uZmlndXJhdGlvbnMsIEknbGwgbmVlZCB0byBzcGVjaWZ5IHRoZXNlIGNsZWFybHk6IGBGU0xfRU5FVENgLCBgTlhQX0VORVRDNGAsIGBGU0xfRU5FVENfVkZgLCBhbmQgYEZTTF9FTkVUQ19RT1NgLlxuXG5JbiB0ZXJtcyBvZiByZWFzb25pbmcsIHRoZSBwYXRjaCBpcyByZWZhY3RvcmluZyB0aGUgRU5FVEMgZHJpdmVyIHRvIHVzZSBgbmRvX3NldF9yeF9tb2RlX2FzeW5jYCBpbnN0ZWFkIG9mIGEgd29ya3F1ZXVlLiBUaGlzIGlzIGEgZnVuZGFtZW50YWwgY2hhbmdlIGluIGhvdyBpdCBzZXRzIHRoZSBSWCBtb2RlLiBUaGVyZSdzIGFsc28gbW9kaWZpY2F0aW9uIG9mIE1BQyBhbmQgVkxBTiBmaWx0ZXJpbmcsIHBsdXMgdGhlIGludHJvZHVjdGlvbiBvZiBjb21tb24gaGVscGVyIGZ1bmN0aW9ucyBmb3IgcHJvbWlzY3VvdXMgbW9kZSBhbmQgaGFzaCBmaWx0ZXJzLiBTaW5jZSB0aGVzZSBhcmUgYWxsIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgZHJpdmVyIGNvZGUsIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NjY0LCJPdXRwdXRUb2tlbnMiOjMyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQwMzowNjo0NS4zOTkyMzAyNDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzkxNTI1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlNMX0VORVRDXCIsXG4gICAgXCJOWFBfRU5FVEM0XCIsXG4gICAgXCJGU0xfRU5FVENfVkZcIixcbiAgICBcIkZTTF9FTkVUQ19RT1NcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlbmV0YzRfcGZfc2V0X3J4X21vZGVcIixcbiAgICBcImVuZXRjX3BmX3NldF9yeF9tb2RlXCIsXG4gICAgXCJlbmV0YzRfcGZfc2V0X21hY19maWx0ZXJcIixcbiAgICBcImVuZXRjNF9wZl9zZXRfdWNfZXhhY3RfZmlsdGVyXCIsXG4gICAgXCJlbmV0YzRfcGZfYWRkX21hZnRfZW50cmllc1wiLFxuICAgIFwiZW5ldGNfc3luY19tYWNfZmlsdGVyc1wiLFxuICAgIFwiZW5ldGNfc2V0X3NpX3VjX3Byb21pc2NcIixcbiAgICBcImVuZXRjX3NldF9zaV9tY19wcm9taXNjXCIsXG4gICAgXCJlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXJcIixcbiAgICBcImVuZXRjX3NldF9zaV9tY19oYXNoX2ZpbHRlclwiLFxuICAgIFwiZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgRU5FVEMgZHJpdmVyIHRvIHVzZSB0aGUgbmV3IGBuZG9fc2V0X3J4X21vZGVfYXN5bmNgIG5ldF9kZXZpY2Vfb3BzIG1lbWJlciBpbnN0ZWFkIG9mIGEgY3VzdG9tIHdvcmtxdWV1ZSBmb3Igc2V0dGluZyB0aGUgUlggbW9kZS4gSXQgYWxzbyBtb2RpZmllcyBNQUMgYW5kIFZMQU4gZmlsdGVyaW5nIGxvZ2ljIGluIHRoZSBQRiBkcml2ZXJzIChgZW5ldGM0X3BmLmNgIGFuZCBgZW5ldGNfcGYuY2ApLCBhbmQgaW50cm9kdWNlcyBjb21tb24gaGVscGVyIGZ1bmN0aW9ucyBmb3IgcHJvbWlzY3VvdXMgbW9kZSBhbmQgaGFzaCBmaWx0ZXJzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlNMX0VORVRDXCIsXG4gICAgXCJOWFBfRU5FVEM0XCIsXG4gICAgXCJGU0xfRU5FVENfVkZcIixcbiAgICBcIkZTTF9FTkVUQ19RT1NcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlbmV0YzRfcGZfc2V0X3J4X21vZGVcIixcbiAgICBcImVuZXRjX3BmX3NldF9yeF9tb2RlXCIsXG4gICAgXCJlbmV0YzRfcGZfc2V0X21hY19maWx0ZXJcIixcbiAgICBcImVuZXRjNF9wZl9zZXRfdWNfZXhhY3RfZmlsdGVyXCIsXG4gICAgXCJlbmV0YzRfcGZfYWRkX21hZnRfZW50cmllc1wiLFxuICAgIFwiZW5ldGNfc3luY19tYWNfZmlsdGVyc1wiLFxuICAgIFwiZW5ldGNfc2V0X3NpX3VjX3Byb21pc2NcIixcbiAgICBcImVuZXRjX3NldF9zaV9tY19wcm9taXNjXCIsXG4gICAgXCJlbmV0Y19zZXRfc2lfdWNfaGFzaF9maWx0ZXJcIixcbiAgICBcImVuZXRjX3NldF9zaV9tY19oYXNoX2ZpbHRlclwiLFxuICAgIFwiZW5ldGNfc2V0X3NpX3ZsYW5fcHJvbWlzY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgRU5FVEMgZHJpdmVyIHRvIHVzZSB0aGUgbmV3IGBuZG9fc2V0X3J4X21vZGVfYXN5bmNgIG5ldF9kZXZpY2Vfb3BzIG1lbWJlciBpbnN0ZWFkIG9mIGEgY3VzdG9tIHdvcmtxdWV1ZSBmb3Igc2V0dGluZyB0aGUgUlggbW9kZS4gSXQgYWxzbyBtb2RpZmllcyBNQUMgYW5kIFZMQU4gZmlsdGVyaW5nIGxvZ2ljIGluIHRoZSBQRiBkcml2ZXJzIChgZW5ldGM0X3BmLmNgIGFuZCBgZW5ldGNfcGYuY2ApLCBhbmQgaW50cm9kdWNlcyBjb21tb24gaGVscGVyIGZ1bmN0aW9ucyBmb3IgcHJvbWlzY3VvdXMgbW9kZSBhbmQgaGFzaCBmaWx0ZXJzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowbt282[1] Phase: Succeeded StartedAt: 2026-07-20 03:07:26 +0000 UTC FinishedAt: 2026-07-20 03:07:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbt282[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-20 03:07:26 +0000 UTC FinishedAt: 2026-07-20 03:07:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbt282[2] Phase: Succeeded StartedAt: 2026-07-20 03:07:26 +0000 UTC FinishedAt: 2026-07-20 04:59:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-20 03:07:26 +0000 UTC FinishedAt: 2026-07-20 04:59:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-20 03:07:26 +0000 UTC FinishedAt: 2026-07-20 03:08:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-20 03:07:26 +0000 UTC FinishedAt: 2026-07-20 03:08:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowbt282/series-workflowbt282-convert-artifact-4210100065/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-20 03:08:18 +0000 UTC FinishedAt: 2026-07-20 04:02:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-20 03:08:18 +0000 UTC FinishedAt: 2026-07-20 04:02:37 +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:*a2bc8a6a-8c16-4271-9216-42e23bc5fd04,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-workflowbt282/series-workflowbt282-convert-artifact-4210100065/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": "d6aed078-adab-4efc-a979-ee8c46b3f7dd", "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-workflowbt282/series-workflowbt282-build-action-1001444495/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-20 03:08:18 +0000 UTC FinishedAt: 2026-07-20 04:01:44 +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:*a2bc8a6a-8c16-4271-9216-42e23bc5fd04,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-workflowbt282/series-workflowbt282-convert-artifact-4210100065/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": "d6aed078-adab-4efc-a979-ee8c46b3f7dd", "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-workflowbt282/series-workflowbt282-build-action-1001444495/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-20 04:02:37 +0000 UTC FinishedAt: 2026-07-20 04:02:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-20 04:02:37 +0000 UTC FinishedAt: 2026-07-20 04:02:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-20 04:02:37 +0000 UTC FinishedAt: 2026-07-20 04:02:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-20 04:02:37 +0000 UTC FinishedAt: 2026-07-20 04:02:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowbt282/series-workflowbt282-convert-artifact-3127333044/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-20 04:02:47 +0000 UTC FinishedAt: 2026-07-20 04:05:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-20 04:02:47 +0000 UTC FinishedAt: 2026-07-20 04:04:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d6aed078-adab-4efc-a979-ee8c46b3f7dd,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-workflowbt282/series-workflowbt282-build-action-1001444495/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-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-20 04:05:00 +0000 UTC FinishedAt: 2026-07-20 04:05:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-20 04:05:00 +0000 UTC FinishedAt: 2026-07-20 04:05:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-20 04:05:00 +0000 UTC FinishedAt: 2026-07-20 04:54:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-20 04:05:00 +0000 UTC FinishedAt: 2026-07-20 04:54:03 +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:*a2bc8a6a-8c16-4271-9216-42e23bc5fd04,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-workflowbt282/series-workflowbt282-convert-artifact-3127333044/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": "36011d19-b7fe-4ee1-be83-e937c13b66af", "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-workflowbt282/series-workflowbt282-build-action-716288640/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-20 04:05:00 +0000 UTC FinishedAt: 2026-07-20 04:53:53 +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:*a2bc8a6a-8c16-4271-9216-42e23bc5fd04,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-workflowbt282/series-workflowbt282-convert-artifact-3127333044/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": "36011d19-b7fe-4ee1-be83-e937c13b66af", "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-workflowbt282/series-workflowbt282-build-action-716288640/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-20 04:54:03 +0000 UTC FinishedAt: 2026-07-20 04:54:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-20 04:54:03 +0000 UTC FinishedAt: 2026-07-20 04:54:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-20 04:54:03 +0000 UTC FinishedAt: 2026-07-20 04:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-20 04:54:03 +0000 UTC FinishedAt: 2026-07-20 04:56:05 +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:*36011d19-b7fe-4ee1-be83-e937c13b66af,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-workflowbt282/series-workflowbt282-build-action-716288640/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-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-20 04:56:14 +0000 UTC FinishedAt: 2026-07-20 04:59:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-20 04:56:14 +0000 UTC FinishedAt: 2026-07-20 04:59:26 +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":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"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:*d6aed078-adab-4efc-a979-ee8c46b3f7dd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*36011d19-b7fe-4ee1-be83-e937c13b66af,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-workflowbt282/series-workflowbt282-build-action-1001444495/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-workflowbt282/series-workflowbt282-build-action-716288640/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-20 04:56:14 +0000 UTC FinishedAt: 2026-07-20 04:56:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-20 04:56:14 +0000 UTC FinishedAt: 2026-07-20 04:56:20 +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":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"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-workflowbt282/series-workflowbt282-convert-artifact-3009741277/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-20 04:56:14 +0000 UTC FinishedAt: 2026-07-20 04:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-20 04:56:14 +0000 UTC FinishedAt: 2026-07-20 04:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-20 04:56:14 +0000 UTC FinishedAt: 2026-07-20 04:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-20 04:56:25 +0000 UTC FinishedAt: 2026-07-20 04:59:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbt282[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["enetc4_pf_set_rx_mode","enetc_pf_set_rx_mode","enetc4_pf_set_mac_filter","enetc4_pf_set_uc_exact_filter","enetc4_pf_add_maft_entries","enetc_sync_mac_filters","enetc_set_si_uc_promisc","enetc_set_si_mc_promisc","enetc_set_si_uc_hash_filter","enetc_set_si_mc_hash_filter","enetc_set_si_vlan_promisc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ce6b4d3216b63f902bb8e9695ee6c10c83415f65","config_name":"upstream-apparmor-kasan.config","enable_configs":["FSL_ENETC","NXP_ENETC4","FSL_ENETC_VF","FSL_ENETC_QOS"],"series_id":"b69f1c7c-d12c-4f42-9233-3bd7c0def1a7","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-20 04:56:25 +0000 UTC FinishedAt: 2026-07-20 04:59:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d6aed078-adab-4efc-a979-ee8c46b3f7dd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*36011d19-b7fe-4ee1-be83-e937c13b66af,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-workflowbt282/series-workflowbt282-build-action-1001444495/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-workflowbt282/series-workflowbt282-build-action-716288640/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-workflowbt282/series-workflowbt282-convert-artifact-3009741277/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,}