Name: series-workflowhfh5q Phase: Succeeded StartedAt: 2026-08-09 08:15:30 +0000 UTC FinishedAt: 2026-08-09 12:41:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfh5q[0] Phase: Succeeded StartedAt: 2026-08-09 08:15:30 +0000 UTC FinishedAt: 2026-08-09 08:59:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfh5q[0].run-triage Phase: Succeeded StartedAt: 2026-08-09 08:15:30 +0000 UTC FinishedAt: 2026-08-09 08:59:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "c12cbf56320fb633484ee0ca1fb7d68d6b64b213", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM", "XFRM_USER", "INET_ESP", "INET_ESP_OFFLOAD", "INET6_ESP", "INET6_ESP_OFFLOAD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "c12cbf56320fb633484ee0ca1fb7d68d6b64b213", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM", "XFRM_USER", "INET_ESP", "INET_ESP_OFFLOAD", "INET6_ESP", "INET6_ESP_OFFLOAD" ], "series_id": "7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "xfrm_dev_state_flush", "xfrm_dev_state_free" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NDBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUF9PRkZMT0FEJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1BfT0ZGTE9BRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fZGV2X3N0YXRlX2ZsdXNoJiMzNDssCiAgICAmIzM0O3hmcm1fZGV2X3N0YXRlX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxpZmV0aW1lIGlzc3VlICh1c2UtYWZ0ZXItZnJlZSkgaW4gdGhlIFhGUk0gc3RhdGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGxvZ2ljLiBJdCBjaGFuZ2VzIGBobGlzdF9kZWxgIHRvIGBobGlzdF9kZWxfaW5pdGAgdG8gcHJldmVudCBpc3N1ZXMgd2l0aCBtdWx0aXBsZSBkZWxldGlvbnMgYW5kIGFkZHMgcmVmZXJlbmNlIGNvdW50aW5nIChgeGZybV9zdGF0ZV9ob2xkX3JjdWAgYW5kIGB4ZnJtX3N0YXRlX3B1dGApIGFyb3VuZCBgeGZybV9kZXZfc3RhdGVfZnJlZWAgdG8gZW5zdXJlIHRoZSBvYmplY3QgaXMgbm90IGZyZWVkIHdoaWxlIGJlaW5nIGFjY2Vzc2VkLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgdXNlLWFmdGVyLWZyZWUgYW5kIGRvdWJsZS1mcmVlIHZ1bG5lcmFiaWxpdGllcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMgYmVpbmcgcmVhZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBpbiBYRlJNIGRldmljZSBzdGF0ZSBnYXJiYWdlIGNvbGxlY3Rpb24uIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgeGZybV9kZXZfc3RhdGVfZmx1c2ggYW5kIHhmcm1fZGV2X3N0YXRlX2ZyZWUgaGFuZGxlIFhGUk0gb2ZmbG9hZCBzdGF0ZSBjbGVhbnVwLiBUbyByZWFjaCB0aGlzIGNvZGUsIFhGUk0gb2ZmbG9hZCBzdXBwb3J0IG11c3QgYmUgZW5hYmxlZCAoQ09ORklHX1hGUk1fT0ZGTE9BRCksIHdoaWNoIGlzIHNlbGVjdGVkIGJ5IElORVRfRVNQX09GRkxPQUQgYW5kIElORVQ2X0VTUF9PRkZMT0FELiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzIwMzUwODMxYTNlYzFmYjA0YzBmNDE3YmE2ZWM5Y2JjNjViMGVmN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDkgMDg6MTk6MDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jXG5pbmRleCAzNmE0ZjY3OTNlZGVmLi4wMTEzOGQzZDEwNjczIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX3N0YXRlLmNcbkBAIC03ODUsNyAmIzQzOzc4NSw3IEBAIHZvaWQgeGZybV9kZXZfc3RhdGVfZnJlZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbiBcdGlmIChkZXYgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2V4ZnJtZGV2X29wcykge1xuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XG4gXHRcdGlmICghaGxpc3RfdW5oYXNoZWQoXHUwMDI2eC1cdTAwM2VkZXZfZ2NsaXN0KSlcbi1cdFx0XHRobGlzdF9kZWwoXHUwMDI2eC1cdTAwM2VkZXZfZ2NsaXN0KTtcbiYjNDM7XHRcdFx0aGxpc3RfZGVsX2luaXQoXHUwMDI2eC1cdTAwM2VkZXZfZ2NsaXN0KTtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XG4gXG4gXHRcdGlmIChkZXYtXHUwMDNleGZybWRldl9vcHMtXHUwMDNleGRvX2Rldl9zdGF0ZV9mcmVlKVxuQEAgLTEwMDYsOCAmIzQzOzEwMDYsMTMgQEAgaW50IHhmcm1fZGV2X3N0YXRlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0YXNrX3ZhbGlcbiBcdFx0eHNvID0gXHUwMDI2eC1cdTAwM2V4c287XG4gXG4gXHRcdGlmICh4c28tXHUwMDNlZGV2ID09IGRldikge1xuJiM0MztcdFx0XHQvKiBUaGUgZGV2aWNlIEdDIGxpc3QgZG9lcyBub3QgaG9sZCBhIHJlZmVyZW5jZSB0byB4LiAqL1xuJiM0MztcdFx0XHRpZiAoIXhmcm1fc3RhdGVfaG9sZF9yY3UoeCkpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuIFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuIFx0XHRcdHhmcm1fZGV2X3N0YXRlX2ZyZWUoeCk7XG4mIzQzO1x0XHRcdHhmcm1fc3RhdGVfcHV0KHgpO1xuIFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcbiBcdFx0XHRnb3RvIHJlc3RhcnRfZ2M7XG4gXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODoxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zN208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk0mIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgICAmIzM0O0lORVRfRVNQJiMzNDssCiAgICAmIzM0O0lORVRfRVNQX09GRkxPQUQmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUF9PRkZMT0FEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZybV9kZXZfc3RhdGVfZmx1c2gmIzM0OywKICAgICYjMzQ7eGZybV9kZXZfc3RhdGVfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIGluIFhGUk0gZGV2aWNlIHN0YXRlIGdhcmJhZ2UgY29sbGVjdGlvbi4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyB4ZnJtX2Rldl9zdGF0ZV9mbHVzaCBhbmQgeGZybV9kZXZfc3RhdGVfZnJlZSBoYW5kbGUgWEZSTSBvZmZsb2FkIHN0YXRlIGNsZWFudXAuIFRvIHJlYWNoIHRoaXMgY29kZSwgWEZSTSBvZmZsb2FkIHN1cHBvcnQgbXVzdCBiZSBlbmFibGVkIChDT05GSUdfWEZSTV9PRkZMT0FEKSwgd2hpY2ggaXMgc2VsZWN0ZWQgYnkgSU5FVF9FU1BfT0ZGTE9BRCBhbmQgSU5FVDZfRVNQX09GRkxPQUQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MjAzNTA4MzFhM2VjMWZiMDRjMGY0MTdiYTZlYzljYmM2NWIwZWY3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgOSAwODoxOTowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwppbmRleCAzNmE0ZjY3OTNlZGVmLi4wMTEzOGQzZDEwNjczIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3N0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jCkBAIC03ODUsNyAmIzQzOzc4NSw3IEBAIHZvaWQgeGZybV9kZXZfc3RhdGVfZnJlZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCkKIAlpZiAoZGV2ICZhbXA7JmFtcDsgZGV2LSZndDt4ZnJtZGV2X29wcykgewogCQlzcGluX2xvY2tfYmgoJmFtcDt4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTsKIAkJaWYgKCFobGlzdF91bmhhc2hlZCgmYW1wO3gtJmd0O2Rldl9nY2xpc3QpKQotCQkJaGxpc3RfZGVsKCZhbXA7eC0mZ3Q7ZGV2X2djbGlzdCk7CiYjNDM7CQkJaGxpc3RfZGVsX2luaXQoJmFtcDt4LSZndDtkZXZfZ2NsaXN0KTsKIAkJc3Bpbl91bmxvY2tfYmgoJmFtcDt4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTsKIAogCQlpZiAoZGV2LSZndDt4ZnJtZGV2X29wcy0mZ3Q7eGRvX2Rldl9zdGF0ZV9mcmVlKQpAQCAtMTAwNiw4ICYjNDM7MTAwNiwxMyBAQCBpbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaQogCQl4c28gPSAmYW1wO3gtJmd0O3hzbzsKIAogCQlpZiAoeHNvLSZndDtkZXYgPT0gZGV2KSB7CiYjNDM7CQkJLyogVGhlIGRldmljZSBHQyBsaXN0IGRvZXMgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8geC4gKi8KJiM0MzsJCQlpZiAoIXhmcm1fc3RhdGVfaG9sZF9yY3UoeCkpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwogCQkJc3Bpbl91bmxvY2tfYmgoJmFtcDt4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTsKIAkJCXhmcm1fZGV2X3N0YXRlX2ZyZWUoeCk7CiYjNDM7CQkJeGZybV9zdGF0ZV9wdXQoeCk7CiAJCQlzcGluX2xvY2tfYmgoJmFtcDt4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTsKIAkJCWdvdG8gcmVzdGFydF9nYzsKIAkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlhGUk0gU3RhdGUgR2FyYmFnZSBDb2xsZWN0aW9uIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYG5ldC94ZnJtL3hmcm1fc3RhdGUuY2AuIEl0IHNlZW1zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgWEZSTSBzdGF0ZSBnYXJiYWdlIGNvbGxlY3Rpb24gbWVjaGFuaXNtIGZvciBkZXZpY2VzLiBUaGUgcGF0Y2ggYWx0ZXJzIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCBhbmQgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYC4KClRoZSBrZXkgY2hhbmdlIGluIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCBpcyB0aGUgcmVwbGFjZW1lbnQgb2YgYGhsaXN0X2RlbGAgd2l0aCBgaGxpc3RfZGVsX2luaXRgIHdoZW4gcmVtb3ZpbmcgYW4gZW50cnkgZnJvbSB0aGUgYGRldl9nY2xpc3RgLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIHByYWN0aWNlIHRvIGhlbHAgYXZvaWQgZGFuZ2xpbmcgcG9pbnRlcnMsIGdvb2QgY2F0Y2guCgpOb3csIGluIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAsIHRoZXkmIzM5O3ZlIGFkZGVkIHRoaXMgY29uZGl0aW9uYWwgYmxvY2sgKmJlZm9yZSogY2FsbGluZyBgeGZybV9kZXZfc3RhdGVfZnJlZWA6CgpgYGBjCgkJCS8qIFRoZSBkZXZpY2UgR0MgbGlzdCBkb2VzIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHguICovCgkJCWlmICgheGZybV9zdGF0ZV9ob2xkX3JjdSh4KSkKCQkJCWNvbnRpbnVlOwoKCQkJc3Bpbl91bmxvY2tfYmgoJmFtcDt4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTsKCQkJeGZybV9kZXZfc3RhdGVfZnJlZSh4KTsKCQkJeGZybV9zdGF0ZV9wdXQoeCk7CgkJCXNwaW5fbG9ja19iaCgmYW1wO3hmcm1fc3RhdGVfZGV2X2djX2xvY2spOwoJCQlnb3RvIHJlc3RhcnRfZ2M7CmBgYAoKSXQgbG9va3MgbGlrZSB0aGUgYHhmcm1fc3RhdGVfaG9sZF9yY3VgIGFuZCBjb3JyZXNwb25kaW5nIGB4ZnJtX3N0YXRlX3B1dGAgaXMgdGhlcmUgdG8gZW5zdXJlIHRoYXQgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgIGRvZXNuJiMzOTt0IHJlbGVhc2UgbWVtb3J5IHdoaWxlIHNvbWV0aGluZyBlbHNlIG1pZ2h0IHN0aWxsIGJlIHVzaW5nIGl0LiBUaGlzIGlzIGEgY29tbW9uIGFwcHJvYWNoIHVzaW5nIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSkgdG8gYXZvaWQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBkdXJpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIHdoZXJlIGEgc3RhdGUgZW50cnkgbWlnaHQgYmUgZnJlZWQgYmVmb3JlIGl0JiMzOTtzIGNvbXBsZXRlbHkgdW51c2VkLiBUaGUgY29tbWVudCBpbmRpY2F0ZXMgdGhlIGBkZXZfZ2NsaXN0YCBkb2VzbiYjMzk7dCBob2xkIGEgcmVmZXJlbmNlLCBzbyB0aGlzIGNvbmZpcm1zIHRoZSBuZWVkIGZvciBhbiBleHBsaWNpdCBob2xkLiBUaGUgYHJlc3RhcnRfZ2NgIGdvdG8gbGlrZWx5IGhhbmRsZXMgdGhlIGZhY3QgdGhhdCB0aGUgR0MgbGlzdCBtaWdodCBoYXZlIGNoYW5nZWQgZHVyaW5nIHRoZSBmcmVlaW5nIHByb2Nlc3MsIGFuZCB3ZSBuZWVkIHRvIHJlLWV2YWx1YXRlIGFmdGVyIGZyZWVpbmcgdGhlIGVudHJ5LgoKSSBzaG91bGQgcHJvYmFibHkgY29uZmlybSB3aGljaCBjb25maWcgb3B0aW9ucyBhcmUgcmVsYXRlZCB0byBYRlJNIHRvIGZ1cnRoZXIgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMuIEl0JiMzOTtzIGltcG9ydGFudCB0byBrbm93IHRoZSBjb250ZXh0IG9mIHRoaXMgcGF0Y2gsIGxpa2Ugd2hpY2gga2VybmVsIHZlcnNpb25zIGl0IGFwcGxpZXMgdG8uIFdlIG5lZWQgdG8gYmUgc3VyZSB0aGlzIGZpeGVzIHRoZSBpc3N1ZSBpbiBhbGwgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9kZXZfc3RhdGVfZmx1c2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9kZXZpY2UuYz01NDY9c3RhdGljIGludCB4ZnJtX2Rldl9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NDgtXHRpZiAoZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX0VTUCkge1xubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1NDk6XHRcdHhmcm1fZGV2X3N0YXRlX2ZsdXNoKGRldl9uZXQoZGV2KSwgZGV2LCB0cnVlKTtcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTUwLVx0XHR4ZnJtX2Rldl9wb2xpY3lfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM9NTU2PXN0YXRpYyBpbnQgeGZybV9kZXZfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NTcte1xubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1NTg6XHR4ZnJtX2Rldl9zdGF0ZV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU1OS1cdHhmcm1fZGV2X3BvbGljeV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTg4NT1zdGF0aWMgaW5saW5lIGludFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjg4Njp4ZnJtX2Rldl9zdGF0ZV9mbHVzaF9zZWNjdHhfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaWQpXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtODg3LXtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9OTE0PXN0YXRpYyBpbmxpbmUgaW50XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6OTE1Onhmcm1fZGV2X3N0YXRlX2ZsdXNoX3NlY2N0eF9jaGVjayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpZClcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy05MTYte1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz05NTk9RVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX2ZsdXNoKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy05NjAtXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6OTYxOmludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpZClcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy05NjIte1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy05NjgtXHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo5Njk6XHRlcnIgPSB4ZnJtX2Rldl9zdGF0ZV9mbHVzaF9zZWNjdHhfY2hlY2sobmV0LCBkZXYsIHRhc2tfdmFsaWQpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTk3MC1cdGlmIChlcnIpXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEwMjYtfVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjEwMjc6RVhQT1JUX1NZTUJPTCh4ZnJtX2Rldl9zdGF0ZV9mbHVzaCk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTAyOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODc3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgWEZSTSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIFhGUk0gY29uZmlndXJhdGlvbi4gUmlnaHQsIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBmb3IgdGhlIGNvcmUgWEZSTSBmdW5jdGlvbmFsaXR5IGlzIGBDT05GSUdfWEZSTWAuIEkmIzM5O3ZlIGdvdCB0byBjb25maXJtIHdoZXJlIHRoaXMgaXMgZGVmaW5lZCBhbmQgaG93IGl0JiMzOTtzIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIHJlbGV2YW50IEtjb25maWcgYW5kIE1ha2VmaWxlIGZpbGVzLiBUaGUgbG9naWNhbCBwbGFjZXMgdG8gc3RhcnQgYXJlIGBuZXQveGZybS9LY29uZmlnYCBhbmQgYG5ldC94ZnJtL01ha2VmaWxlYC4gVGhvc2UgZmlsZXMgc2hvdWxkIGdpdmUgbWUgdGhlIGRldGFpbHMgb24gZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIHRoZSBidWlsZCBsb2dpYyByZWxhdGVkIHRvIHRoaXMgZmVhdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgb3B0aW9uIGluZmx1ZW5jZXMgdGhlIGNvbXBpbGF0aW9uIGFuZCBsaW5raW5nIG9mIHRoZSBYRlJNIG1vZHVsZXMgYW5kIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGhpbiB0aGUgd2lkZXIgbmV0d29ya2luZyBzdGFjay4gR29vZCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX3N0YXRlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZT0xMj1lbmRpZlxubmV0L3hmcm0vTWFrZWZpbGUtMTMtXG5uZXQveGZybS9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfWEZSTSkgOj0geGZybV9wb2xpY3kubyB4ZnJtX3N0YXRlLm8geGZybV9oYXNoLm8gXFxcbm5ldC94ZnJtL01ha2VmaWxlLTE1LVx0XHQgICAgICB4ZnJtX2lucHV0Lm8geGZybV9vdXRwdXQubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMzAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipYRlJNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCkFscmlnaHQsIHNvIHRoZSBkaXNjdXNzaW9uIGhhcyBob25lZCBpbiBvbiBgQ09ORklHX1hGUk1gIGJlaW5nIGEgZnVuZGFtZW50YWwgcmVxdWlyZW1lbnQg4oCTIG5vIHN1cnByaXNlIHRoZXJlLiBCdXQgdGhlbiwgdGhlIG1lbnRpb24gb2YgYENPTkZJR19YRlJNX09GRkxPQURgIGFuZCBpdHMgcG90ZW50aWFsIGxpbmsgdG8gYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYC4uLiB0aGF0JiMzOTtzIGdvdCBtZSB0aGlua2luZy4gSXQmIzM5O3MgYSBrZXkgcXVlc3Rpb246IGlzIG9mZmxvYWQgZnVuY3Rpb25hbGl0eSBzdHJpY3RseSBuZWNlc3NhcnkgZm9yIHRoYXQgZmx1c2ggb3BlcmF0aW9uIHRvIGJlIHRyaWdnZXJlZD8gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIGRlcGVuZGVuY3ksIGFuZCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYG5ldC94ZnJtL3hmcm1fZGV2aWNlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBhbmQsIGNyaXRpY2FsbHksIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aWVkIHRvIGBDT05GSUdfWEZSTV9PRkZMT0FEYC4gTGV0JiMzOTtzIGNvbmZpcm0gb3IgcmVqZWN0IHRoZSBzdXNwZWN0ZWQgZGVwZW5kZW5jeSwgc2hhbGwgd2U/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9kZXZpY2UubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19YRlJNKSA6PSB4ZnJtX3BvbGljeS5vIHhmcm1fc3RhdGUubyB4ZnJtX2hhc2gubyBcXFxubmV0L3hmcm0vTWFrZWZpbGUtMTUtXHRcdCAgICAgIHhmcm1faW5wdXQubyB4ZnJtX291dHB1dC5vIFxcXG5uZXQveGZybS9NYWtlZmlsZToxNjpcdFx0ICAgICAgeGZybV9zeXNjdGwubyB4ZnJtX3JlcGxheS5vIHhmcm1fZGV2aWNlLm8gXFxcbm5ldC94ZnJtL01ha2VmaWxlLTE3LVx0XHQgICAgICB4ZnJtX25hdF9rZWVwYWxpdmUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NTYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgWEZSTSBEZXZpY2UgQ29kZSoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgYHhmcm1fZGV2aWNlLmNgIGdldHMgY29tcGlsZWQgaW50byB0aGUga2VybmVsIHdoZW4gYENPTkZJR19YRlJNYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIHRoZSBleHBlY3RlZCBzZXR1cC4gTm93LCBsZXQmIzM5O3MgdHJhY2Ugc29tZXRoaW5nIHNwZWNpZmljLiBJIHNlZSBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGNhbGxlZCB3aXRoaW4gYHhmcm1fZGV2X2Rvd25gIGFuZCBgeGZybV9kZXZfdW5yZWdpc3RlcmAuIFRoYXQgbWFrZXMgc2Vuc2U7IHdlJiMzOTtyZSBsaWtlbHkgY2xlYW5pbmcgdXAgc3RhdGUgd2hlbiBhIGRldmljZSBpcyBnb2luZyBvZmZsaW5lIG9yIGJlaW5nIHJlbW92ZWQuIEJ1dCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgKmZ1bGwqIHBpY3R1cmUuIFdoZXJlIGVsc2UgaXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgd2lkZXIgWEZSTSBmcmFtZXdvcmsuIExldCBtZSBjaGVjayB0aGUgY2FsbCBzaXRlcyBvZiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIHRvIGdldCBhIGJyb2FkZXIgdmlldyBvZiBob3cgaXQgb3BlcmF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fZGV2X3N0YXRlX2ZsdXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fZGV2aWNlLmM9NTQ2PXN0YXRpYyBpbnQgeGZybV9kZXZfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTQ4LVx0aWYgKGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19FU1ApIHtcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6NTQ5Olx0XHR4ZnJtX2Rldl9zdGF0ZV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU1MC1cdFx0eGZybV9kZXZfcG9saWN5X2ZsdXNoKGRldl9uZXQoZGV2KSwgZGV2LCB0cnVlKTtcbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jPTU1Nj1zdGF0aWMgaW50IHhmcm1fZGV2X3VucmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTU3LXtcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6NTU4Olx0eGZybV9kZXZfc3RhdGVfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NTktXHR4ZnJtX2Rldl9wb2xpY3lfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz04ODU9c3RhdGljIGlubGluZSBpbnRcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo4ODY6eGZybV9kZXZfc3RhdGVfZmx1c2hfc2VjY3R4X2NoZWNrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0YXNrX3ZhbGlkKVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTg4Ny17XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTkxND1zdGF0aWMgaW5saW5lIGludFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjkxNTp4ZnJtX2Rldl9zdGF0ZV9mbHVzaF9zZWNjdHhfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaWQpXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtOTE2LXtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9OTU5PUVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9mbHVzaCk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtOTYwLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjk2MTppbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaWQpXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtOTYyLXtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtOTY4LVx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6OTY5Olx0ZXJyID0geGZybV9kZXZfc3RhdGVfZmx1c2hfc2VjY3R4X2NoZWNrKG5ldCwgZGV2LCB0YXNrX3ZhbGlkKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy05NzAtXHRpZiAoZXJyKVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMDI2LX1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxMDI3OkVYUE9SVF9TWU1CT0woeGZybV9kZXZfc3RhdGVfZmx1c2gpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEwMjgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NzYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgWEZSTSBEZXZpY2UgTGlmZWN5Y2xlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBYRlJNIGRldmljZXMgYXJlIG1hbmFnZWQsIGFuZCB0aGlzIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgZnVuY3Rpb24gaGFzIGNhdWdodCBteSBleWUuIEkmIzM5O20gbm90aW5nIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYm90aCBgeGZybV9kZXZfZG93bmAgYW5kIGB4ZnJtX2Rldl91bnJlZ2lzdGVyYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYmVjYXVzZSBib3RoIG9mIHRob3NlIGZ1bmN0aW9ucyByZXNpZGUgaW4gYG5ldC94ZnJtL3hmcm1fZGV2aWNlLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zIHRyaWdnZXJlZCBmcm9tPyYjMzQ7IFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGtub3cgaWYgYHhmcm1fZGV2X2Rvd25gIHVzZXMgYSBub3RpZmllci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLCBiZWNhdXNlIHRoYXQmIzM5O3Mga2V5IHRvIGhvdyB0aGUgZGV2aWNlJiMzOTtzIHN0YXRlIGlzIGJlaW5nIGZsdXNoZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fZGV2X2Rvd24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9kZXZpY2UuYz01MjY9c3RhdGljIGludCB4ZnJtX2FwaV9jaGVjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTQ1LVxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1NDY6c3RhdGljIGludCB4ZnJtX2Rldl9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU0Ny17XG4tLVxubmV0L3hmcm0veGZybV9kZXZpY2UuYz01NjQ9c3RhdGljIGludCB4ZnJtX2Rldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU3NS1cdGNhc2UgTkVUREVWX0RPV046XG5uZXQveGZybS94ZnJtX2RldmljZS5jOjU3NjpcdFx0cmV0dXJuIHhmcm1fZGV2X2Rvd24oZGV2KTtcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTc3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTcxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqWEZSTSBTdWJzeXN0ZW0gRXZlbnQgSGFuZGxpbmcqKgoKUmlnaHQsIHNvIGB4ZnJtX2Rldl9ldmVudGAgaXMgYSBub3RpZmllci4gVGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0IHRlbGxzIG1lIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhc3luY2hyb25vdXMgZXZlbnQgaGFuZGxpbmcgcmVsYXRlZCB0byB0aGUgWEZSTSBzdWJzeXN0ZW0uIEdpdmVuIHRoYXQgaXQmIzM5O3MgYSBub3RpZmllciwgSSBpbW1lZGlhdGVseSB0aGluayBhYm91dCB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVsZXZhbnQgdG8gaXQuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCB3ZSYjMzk7cmUgZ29pbmcgdG8gbmVlZCBgQ09ORklHX1hGUk1gIGVuYWJsZWQsIHRoYXQmIzM5O3MgYWxtb3N0IGd1YXJhbnRlZWQuIE5vdywgdGhlIG9mZmxvYWQgY29tcG9uZW50OyB0aGF0IG1pZ2h0IG5lZWQgc29tZSBzcGVjaWZpYyBzZXR0aW5ncywgc28gYENPTkZJR19YRlJNX09GRkxPQURgIGlzIHRoZSBuZXh0IG9idmlvdXMgdGhpbmcgdG8gY2hlY2suIFRvIGNvbmZpcm0gdGhhdCBkZXBlbmRlbmN5LCBJJiMzOTtsbCBxdWlja2x5IGxvb2sgaW50byB0aGUgYG5ldC94ZnJtL0tjb25maWdgIGZpbGUgYW5kIGNvbmZpcm0gdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFhGUk0gb2ZmbG9hZC4gVGhhdCYjMzk7bGwgbG9jayBpbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcmUtcmVxdWlzaXRlIGJ1aWxkIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7WEZSTV9PRkZMT0FEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTAtXG5uZXQveGZybS9LY29uZmlnOjExOmNvbmZpZyBYRlJNX09GRkxPQURcbm5ldC94ZnJtL0tjb25maWctMTItXHRib29sXG4tLVxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0yMS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6MjI6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMjMtc3RhdGljIHZvaWQgX194ZnJtX3RyYW5zcG9ydF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM9MjM5PWludCB4ZnJtX2Rldl9zdGF0ZV9hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTI1MS1cdGlmICh4dW8tXHUwMDNlZmxhZ3MgXHUwMDI2XG5uZXQveGZybS94ZnJtX2RldmljZS5jOjI1MjpcdCAgICB+KFhGUk1fT0ZGTE9BRF9JUFY2IHwgWEZSTV9PRkZMT0FEX0lOQk9VTkQgfCBYRlJNX09GRkxPQURfUEFDS0VUKSkge1xubmV0L3hmcm0veGZybV9kZXZpY2UuYy0yNTMtXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7VW5yZWNvZ25pemVkIGZsYWdzIGluIG9mZmxvYWQgcmVxdWVzdFwmIzM0Oyk7XG4tLVxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0yNTYtXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjI1NzpcdGlmICgoeHVvLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX09GRkxPQURfSU5CT1VORCBcdTAwMjZcdTAwMjYgeC1cdTAwM2VkaXIgPT0gWEZSTV9TQV9ESVJfT1VUKSB8fFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzoyNTg6XHQgICAgKCEoeHVvLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX09GRkxPQURfSU5CT1VORCkgXHUwMDI2XHUwMDI2IHgtXHUwMDNlZGlyID09IFhGUk1fU0FfRElSX0lOKSkge1xubmV0L3hmcm0veGZybV9kZXZpY2UuYy0yNTktXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7TWlzbWF0Y2hlZCBTQSBhbmQgb2ZmbG9hZCBkaXJlY3Rpb25cJiMzNDspO1xuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMjYyLVxubmV0L3hmcm0veGZybV9kZXZpY2UuYzoyNjM6XHRpZiAoeHVvLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX09GRkxPQURfSU5CT1VORCBcdTAwMjZcdTAwMjYgeC1cdTAwM2VpZl9pZCkge1xubmV0L3hmcm0veGZybV9kZXZpY2UuYy0yNjQtXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7WEZSTSBpZl9pZCBpcyBub3Qgc3VwcG9ydGVkIGluIFJYIHBhdGhcJiMzNDspO1xuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMjY3LVxubmV0L3hmcm0veGZybV9kZXZpY2UuYzoyNjg6XHRpc19wYWNrZXRfb2ZmbG9hZCA9IHh1by1cdTAwM2VmbGFncyBcdTAwMjYgWEZSTV9PRkZMT0FEX1BBQ0tFVDtcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMjY5LVxuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMjc5LVxubmV0L3hmcm0veGZybV9kZXZpY2UuYzoyODA6XHRcdGlmICghKHh1by1cdTAwM2VmbGFncyBcdTAwMjYgWEZSTV9PRkZMT0FEX0lOQk9VTkQpKSB7XG5uZXQveGZybS94ZnJtX2RldmljZS5jLTI4MS1cdFx0XHRzYWRkciA9IFx1MDAyNngtXHUwMDNlcHJvcHMuc2FkZHI7XG4tLVxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0zMjYtXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjMyNzpcdGlmICh4dW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fT0ZGTE9BRF9JTkJPVU5EKVxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0zMjgtXHRcdHhzby1cdTAwM2VkaXIgPSBYRlJNX0RFVl9PRkZMT0FEX0lOO1xuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM9MzU5PWludCB4ZnJtX2Rldl9wb2xpY3lfYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHhmcm1fcG9saWN5ICp4cCxcbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTM2Ni1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6MzY3Olx0aWYgKCF4dW8tXHUwMDNlZmxhZ3MgfHwgeHVvLVx1MDAzZWZsYWdzIFx1MDAyNiB+WEZSTV9PRkZMT0FEX1BBQ0tFVCkge1xubmV0L3hmcm0veGZybV9kZXZpY2UuYy0zNjgtXHRcdC8qIFdlIHN1cHBvcnQgb25seSBwYWNrZXQgb2ZmbG9hZCBtb2RlIGFuZCBpdCBtZWFuc1xubmV0L3hmcm0veGZybV9kZXZpY2UuYzozNjk6XHRcdCAqIHRoYXQgdXNlciBtdXN0IHNldCBYRlJNX09GRkxPQURfUEFDS0VUIGJpdC5cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMzcwLVx0XHQgKi9cbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jPTUyNj1zdGF0aWMgaW50IHhmcm1fYXBpX2NoZWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTUyNy17XG5uZXQveGZybS94ZnJtX2RldmljZS5jOjUyODojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01MjktXHRpZiAoKGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19FU1BfVFhfQ1NVTSkgXHUwMDI2XHUwMDI2XG4tLVxubmV0L3hmcm0veGZybV9yZXBsYXkuYz01NTM9c3RhdGljIHZvaWQgeGZybV9yZXBsYXlfYWR2YW5jZV9lc24oc3RydWN0IHhmcm1fc3RhdGUgKngsIF9fYmUzMiBuZXRfc2VxKVxuLS1cbm5ldC94ZnJtL3hmcm1fcmVwbGF5LmMtNjEwLVxubmV0L3hmcm0veGZybV9yZXBsYXkuYzo2MTE6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcbm5ldC94ZnJtL3hmcm1fcmVwbGF5LmMtNjEyLXN0YXRpYyBpbnQgeGZybV9yZXBsYXlfb3ZlcmZsb3dfb2ZmbG9hZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9NzYzPUVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9hbGxvYyk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtNzY0LVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjc2NTojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTc2Ni12b2lkIHhmcm1fZGV2X3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MTEzNj1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKl9feGZybV9zdGF0ZV9sb29rdXBfYWxsKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyAqc3RhdGVfcHRycyxcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTE0Ni1cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh4LCBzdGF0ZV9wdHJzLVx1MDAzZWJ5c3BpICYjNDM7IGgsIGJ5c3BpKSB7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTE0NzojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTExNDgtXHRcdGlmICh4ZG8tXHUwMDNldHlwZSA9PSBYRlJNX0RFVl9PRkZMT0FEX1BBQ0tFVCkge1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xMzYxPXhmcm1fc3RhdGVfZmluZChjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkcixcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTQzNC1cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh4LCBzdGF0ZV9wdHJzLmJ5ZHN0ICYjNDM7IGgsIGJ5ZHN0KSB7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTQzNTojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE0MzYtXHRcdGlmIChwb2wtXHUwMDNleGRvLnR5cGUgPT0gWEZSTV9ERVZfT0ZGTE9BRF9QQUNLRVQpIHtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTQ2OS1cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh4LCBzdGF0ZV9wdHJzLmJ5ZHN0ICYjNDM7IGhfd2lsZGNhcmQsIGJ5ZHN0KSB7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTQ3MDojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE0NzEtXHRcdGlmIChwb2wtXHUwMDNleGRvLnR5cGUgPT0gWEZSTV9ERVZfT0ZGTE9BRF9QQUNLRVQpIHtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTU0NS1cdFx0fVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE1NDY6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNTQ3LVx0XHRpZiAocG9sLVx1MDAzZXhkby50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUKSB7XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE2MDUtXHRcdH0gZWxzZSB7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTYwNjojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE2MDctXHRcdFx0c3RydWN0IHhmcm1fZGV2X29mZmxvYWQgKnhzbyA9IFx1MDAyNngtXHUwMDNleHNvO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTEyMDQ9c3RhdGljIHZvaWQgeHNvX3RvX3h1b19pZmluZGV4KGNvbnN0IHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkICp4c28sIGludCBpZmluZGV4LFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEyMDgtXHRpZiAoeHNvLVx1MDAzZWRpciA9PSBYRlJNX0RFVl9PRkZMT0FEX0lOKVxubmV0L3hmcm0veGZybV91c2VyLmM6MTIwOTpcdFx0eHVvLVx1MDAzZWZsYWdzID0gWEZSTV9PRkZMT0FEX0lOQk9VTkQ7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMjEwLVx0aWYgKHhzby1cdTAwM2V0eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUKVxubmV0L3hmcm0veGZybV91c2VyLmM6MTIxMTpcdFx0eHVvLVx1MDAzZWZsYWdzIHw9IFhGUk1fT0ZGTE9BRF9QQUNLRVQ7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMjEyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY4MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB0aGlzLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgQ09ORklHX1hGUk1fT0ZGTE9BRGAgRGVwZW5kZW5jeSoqCgpSaWdodCwgc28gSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nIGFib3V0IGBDT05GSUdfWEZSTV9PRkZMT0FEYC4gSXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyBvcHRpb24gaXMgKnJlcXVpcmVkKiBmb3IgdGhlIGZ1bmN0aW9uIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgdG8gd29yayBwcm9wZXJseS4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQgSSYjMzk7bSBoYXZpbmcgYSBxdWljayBjaGVjayB0byBtYWtlIHN1cmUgdGhhdCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgICppdHNlbGYqIGlzIGFjdHVhbGx5IGVuY2xvc2VkIHdpdGhpbiBhIGNvbmRpdGlvbmFsIGJsb2NrIGRlcGVuZGVudCBvbiBgQ09ORklHX1hGUk1fT0ZGTE9BRGAuCgpJIGtub3cgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpcyBkZWZpbmVkIGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgIOKAkyB0aGF0JiMzOTtzIGEgZ2l2ZW4uIE5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCB3aGVyZSB0aGF0IGZ1bmN0aW9uIGRlZmluaXRpb24gc2hvdWxkIGJlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgOTYxIGluIHRoYXQgZmlsZSwgdG8gY29uZmlybS4gTGV0IG1lIGp1c3Qgb3BlbiB0aGF0IGZpbGUgdXAgYW5kIGhhdmUgYSBsb29rLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9zdGF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NTA6XHRcdFx0fVxuIDk1MTpcdFx0fVxuIDk1MjpcdG91dDpcbiA5NTM6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XG4gOTU0Olx0XHRpZiAoY250KVxuIDk1NTpcdFx0XHRlcnIgPSAwO1xuIDk1NjpcdFxuIDk1NzpcdFx0cmV0dXJuIGVycjtcbiA5NTg6XHR9XG4gOTU5Olx0RVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX2ZsdXNoKTtcbiA5NjA6XHRcbiA5NjE6XHRpbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaWQpXG4gOTYyOlx0e1xuIDk2MzpcdFx0c3RydWN0IHhmcm1fc3RhdGUgKng7XG4gOTY0Olx0XHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqdG1wO1xuIDk2NTpcdFx0c3RydWN0IHhmcm1fZGV2X29mZmxvYWQgKnhzbztcbiA5NjY6XHRcdGludCBpLCBlcnIgPSAwLCBjbnQgPSAwO1xuIDk2NzpcdFxuIDk2ODpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XG4gOTY5Olx0XHRlcnIgPSB4ZnJtX2Rldl9zdGF0ZV9mbHVzaF9zZWNjdHhfY2hlY2sobmV0LCBkZXYsIHRhc2tfdmFsaWQpO1xuIDk3MDpcdFx0aWYgKGVycilcbiA5NzE6XHRcdFx0Z290byBvdXQ7XG4gOTcyOlx0XG4gOTczOlx0XHRlcnIgPSAtRVNSQ0g7XG4gOTc0Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gbmV0LVx1MDAzZXhmcm0uc3RhdGVfaG1hc2s7IGkmIzQzOyYjNDM7KSB7XG4gOTc1Olx0cmVzdGFydDpcbiA5NzY6XHRcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnkoeCwgeGZybV9zdGF0ZV9kZXJlZl9wcm90KG5ldC1cdTAwM2V4ZnJtLnN0YXRlX2J5ZHN0LCBuZXQpICYjNDM7IGksIGJ5ZHN0KSB7XG4gOTc3Olx0XHRcdFx0eHNvID0gXHUwMDI2eC1cdTAwM2V4c287XG4gOTc4Olx0XG4gOTc5Olx0XHRcdFx0aWYgKCF4ZnJtX3N0YXRlX2tlcm4oeCkgXHUwMDI2XHUwMDI2IHhzby1cdTAwM2VkZXYgPT0gZGV2KSB7XG4gOTgwOlx0XHRcdFx0XHR4ZnJtX3N0YXRlX2hvbGQoeCk7XG4gOTgxOlx0XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xuIDk4MjpcdFxuIDk4MzpcdFx0XHRcdFx0ZXJyID0geGZybV9zdGF0ZV9kZWxldGUoeCk7XG4gOTg0Olx0XHRcdFx0XHR4ZnJtX2Rldl9zdGF0ZV9mcmVlKHgpO1xuIDk4NTpcdFxuIDk4NjpcdFx0XHRcdFx0eGZybV9hdWRpdF9zdGF0ZV9kZWxldGUoeCwgZXJyID8gMCA6IDEsXG4gOTg3Olx0XHRcdFx0XHRcdFx0XHR0YXNrX3ZhbGlkKTtcbiA5ODg6XHRcdFx0XHRcdHhmcm1fc3RhdGVfcHV0KHgpO1xuIDk4OTpcdFx0XHRcdFx0aWYgKCFlcnIpXG4gOTkwOlx0XHRcdFx0XHRcdGNudCYjNDM7JiM0Mzs7XG4gOTkxOlx0XG4gOTkyOlx0XHRcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcbiA5OTM6XHRcdFx0XHRcdGdvdG8gcmVzdGFydDtcbiA5OTQ6XHRcdFx0XHR9XG4gOTk1Olx0XHRcdH1cbiA5OTY6XHRcdH1cbiA5OTc6XHRcdGlmIChjbnQpXG4gOTk4Olx0XHRcdGVyciA9IDA7XG4gOTk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3NjYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIEZ1bmN0aW9uJiMzOTtzIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCB3YXMgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBgQ09ORklHX1hGUk1fT0ZGTE9BRGAsIGJ1dCBpdCYjMzk7cyBub3Qgd2hlcmUgSSBleHBlY3RlZCBpdCB0byBiZS4gVGhpcyBpcyBpbnRlcmVzdGluZy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHdhcyBjbGVhcmx5IG9mZi4gTGV0JiMzOTtzIHNlZS4uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBwbGFjZW1lbnQgb2YgYCNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEYCB3aXRoaW4gYG5ldC94ZnJtL3hmcm1fc3RhdGUuY2AgdG8gdW5kZXJzdGFuZCB3aHkuIEl0JiMzOTtzIHRpbWUgdG8gZGVsdmUgaW50byB0aGUgY29kZSBhbmQgY2xhcmlmeSB3aGVyZSB0aGlzIG1hY3JvJiMzOTtzIGluZmx1ZW5jZSB0cnVseSBsaWVzLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9uIHRvIGdldCB0aGlzIGNsZWFyIGluIG15IGhlYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19YRlJNX09GRkxPQUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3N0YXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9zdGF0ZS5jPTc2Mz1FWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfYWxsb2MpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTc2NC1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo3NjU6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy03NjYtdm9pZCB4ZnJtX2Rldl9zdGF0ZV9kZWxldGUoc3RydWN0IHhmcm1fc3RhdGUgKngpXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTExMzY9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fc3RhdGVfbG9va3VwX2FsbChjb25zdCBzdHJ1Y3QgeGZybV9oYXNoX3N0YXRlX3B0cnMgKnN0YXRlX3B0cnMsXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTExNDYtXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeCwgc3RhdGVfcHRycy1cdTAwM2VieXNwaSAmIzQzOyBoLCBieXNwaSkge1xubmV0L3hmcm0veGZybV9zdGF0ZS5jOjExNDc6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMTQ4LVx0XHRpZiAoeGRvLVx1MDAzZXR5cGUgPT0gWEZSTV9ERVZfT0ZGTE9BRF9QQUNLRVQpIHtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MTM2MT14ZnJtX3N0YXRlX2ZpbmQoY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE0MzQtXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeCwgc3RhdGVfcHRycy5ieWRzdCAmIzQzOyBoLCBieWRzdCkge1xubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE0MzU6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNDM2LVx0XHRpZiAocG9sLVx1MDAzZXhkby50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUKSB7XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE0NjktXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeCwgc3RhdGVfcHRycy5ieWRzdCAmIzQzOyBoX3dpbGRjYXJkLCBieWRzdCkge1xubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE0NzA6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNDcxLVx0XHRpZiAocG9sLVx1MDAzZXhkby50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUKSB7XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE1NDUtXHRcdH1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxNTQ2OiNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTU0Ny1cdFx0aWYgKHBvbC1cdTAwM2V4ZG8udHlwZSA9PSBYRlJNX0RFVl9PRkZMT0FEX1BBQ0tFVCkge1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjA1LVx0XHR9IGVsc2Uge1xubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE2MDY6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjA3LVx0XHRcdHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkICp4c28gPSBcdTAwMjZ4LVx1MDAzZXhzbztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NzQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB4ZnJtX2Rldl9zdGF0ZSBGdW5jdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGtlcm5lbCYjMzk7cyBYRlJNIChJUHNlYykgc3Vic3lzdGVtIGFuZCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgZGV2aWNlIHN0YXRlLiBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlIGB4ZnJtX2Rldl9zdGF0ZWAgZnVuY3Rpb25zLCBhbmQgYSBsaXR0bGUgbmFnZ2luZyBxdWVzdGlvbiBoYXMgcG9wcGVkIHVwLiBJJiMzOTttIG5vdGluZyB0aGF0IGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgaXMsIGFzIGZhciBhcyBJIGNhbiB0ZWxsIGZyb20gdGhlIGJ1aWxkIGNvbmZpZywgYWx3YXlzIGluY2x1ZGVkLiBObyBzdXJwcmlzZXMgdGhlcmU7IHlvdSYjMzk7ZCB3YW50IGEgY2xlYW51cCBmdW5jdGlvbiBhdmFpbGFibGUuIEJ1dCB3aGF0IGFib3V0IGl0cyBjb3VudGVycGFydCwgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgPyBJcyB0aGF0IGNvbXBpbGVkIGluIGNvbmRpdGlvbmFsbHkgYmFzZWQgb24gc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3IgaXMgaXQgYWx3YXlzIHByZXNlbnQgYWxvbmdzaWRlIGl0cyBmbHVzaGluZyBzaWJsaW5nPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIG1hY3JvcyBhbmQgZGVwZW5kZW5jaWVzIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUgb2YgdGhlIGRldmljZSBzdGF0ZSBsaWZlY3ljbGUgYW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhvc2UgcmVzb3VyY2VzLiBNeSBpbnR1aXRpb24gc2F5cyBpdCAqc2hvdWxkKiBhbHdheXMgYmUgdGhlcmUsIGJ1dCBJJiMzOTt2ZSBiZWVuIHN1cnByaXNlZCBiZWZvcmUuIEkgbmVlZCB0byBnZXQgdGhpcyBjbGVhciBpbiBteSBoZWFkLCBzaW5jZSBpdCBtYXR0ZXJzIHdoZW4gZGVidWdnaW5nIGNlcnRhaW4gaW50ZXJhY3Rpb25zIHdpdGggbmV0d29yayBkZXZpY2VzIHVuZGVyIGhlYXZ5IGxvYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fZGV2X3N0YXRlX2ZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3N0YXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9zdGF0ZS5jPTU5Nj1zdGF0aWMgdm9pZCB4ZnJtX3N0YXRlX2djX2Rlc3Ryb3koc3RydWN0IHhmcm1fc3RhdGUgKngpXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTYxNy1cdFx0cHV0X3BhZ2UoeC1cdTAwM2V4ZnJhZy5wYWdlKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo2MTg6XHR4ZnJtX2Rldl9zdGF0ZV9mcmVlKHgpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTYxOS1cdHNlY3VyaXR5X3hmcm1fc3RhdGVfZnJlZSh4KTtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9Nzc4PUVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fZGV2X3N0YXRlX2RlbGV0ZSk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtNzc5LVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjc4MDp2b2lkIHhmcm1fZGV2X3N0YXRlX2ZyZWUoc3RydWN0IHhmcm1fc3RhdGUgKngpXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtNzgxLXtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9OTYxPWludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpZClcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtOTgzLVx0XHRcdFx0ZXJyID0geGZybV9zdGF0ZV9kZWxldGUoeCk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6OTg0Olx0XHRcdFx0eGZybV9kZXZfc3RhdGVfZnJlZSh4KTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy05ODUtXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEwMTMtXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTAxNDpcdFx0XHR4ZnJtX2Rldl9zdGF0ZV9mcmVlKHgpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEwMTUtXHRcdFx0eGZybV9zdGF0ZV9wdXQoeCk7XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTEzNjE9eGZybV9zdGF0ZV9maW5kKGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwgY29uc3QgeGZybV9hZGRyZXNzX3QgKnNhZGRyLFxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjEwLVx0XHRcdFx0eGZybV9kZXZfc3RhdGVfZGVsZXRlKHgpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE2MTE6XHRcdFx0XHR4ZnJtX2Rldl9zdGF0ZV9mcmVlKHgpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE2MTItXHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY3NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgeGZybV9kZXZfc3RhdGVfZnJlZWAgYW5kIGB4ZnJtX3N0YXRlYCoqCgpPa2F5LCBzbyBgeGZybV9kZXZfc3RhdGVfZnJlZWAgaXMgYWx3YXlzIGNvbXBpbGVkLCB0aGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gQnV0IGhvbGQgb24sIHRoZSBjb2RlIHVzZXMgYHgtJmd0O2Rldl9nY2xpc3RgLiBUaGlzIGlzIGEgY3J1Y2lhbCBjbHVlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHN0cnVjdHVyZSBvZiBgeGZybV9zdGF0ZWAg4oCTIHRoYXQmIzM5O3Mgd2hlcmUgSSBzaG91bGQgc3RhcnQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGlzIGNvbm5lY3Rpb24gYW5kIHBvdGVudGlhbCByZXNvdXJjZSBtYW5hZ2VtZW50LiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHhmcm1fc3RhdGVgIHRvIG1ha2Ugc3VyZSBJIGdyYXNwIHRoZSByZWxhdGlvbnNoaXAgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X2djbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3hmcm0uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC94ZnJtLmg9MTkwPXN0cnVjdCB4ZnJtX3N0YXRlIHtcbi0tXG5pbmNsdWRlL25ldC94ZnJtLmgtMTk2LVx0dW5pb24ge1xuaW5jbHVkZS9uZXQveGZybS5oOjE5NzpcdFx0c3RydWN0IGhsaXN0X25vZGVcdGRldl9nY2xpc3Q7XG5pbmNsdWRlL25ldC94ZnJtLmgtMTk4LVx0XHRzdHJ1Y3QgaGxpc3Rfbm9kZVx0YnlzcmM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDAwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSBWdWxuZXJhYmlsaXR5IGluIFhGUk0qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgYXNzdW1wdGlvbiB0aGF0IGBkZXZfZ2NsaXN0YCBpcyBhbHdheXMgcHJlc2VudC4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYWRkcmVzcyBhIHVzZS1hZnRlci1mcmVlIGluIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAuIFNwZWNpZmljYWxseSwgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgIGlzIGNhbGxlZCB3aXRob3V0IGEgaGVsZCByZWZlcmVuY2UgdG8gYHhgLiBJbW1lZGlhdGVseSwgdGhlIGFsYXJtIGJlbGxzIGFyZSBnb2luZyBvZmYuIFRoYXTigJlzIGEgY2xhc3NpYyBtZW1vcnkgc2FmZXR5IGlzc3VlLgoKTm93LCBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGRldGFpbHMuIE15IHVuZGVyc3RhbmRpbmcgaXMgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpdGVyYXRlcyB0aHJvdWdoIHNvbWV0aGluZyBjYWxsZWQgYHhmcm1fc3RhdGVfZGV2X2djX2xpc3RgLiBIbW1tLCBpcyB0aGF0IHRoZSBsaXN0IGluIHF1ZXN0aW9uPyBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGludGVyYWN0cyB3aXRoIHRoaXMgbGlzdC4gTGV0JiMzOTtzIHB1bGwgdXAgdGhlIHNvdXJjZSBjb2RlIGZvciBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aG9zZSBsaXN0IGVudHJpZXMgYW5kIGNvbmZpcm0gdGhpcyBzdXNwZWN0ZWQgZmxvdyBvZiBleGVjdXRpb24uIFRoZW4sIHRoZSBwYXRjaCBzaG91bGQgYmUgdW5kZXJzdGFuZGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9zdGF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5OTA6XHRcdFx0XHRcdFx0Y250JiM0MzsmIzQzOztcbiA5OTE6XHRcbiA5OTI6XHRcdFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xuIDk5MzpcdFx0XHRcdFx0Z290byByZXN0YXJ0O1xuIDk5NDpcdFx0XHRcdH1cbiA5OTU6XHRcdFx0fVxuIDk5NjpcdFx0fVxuIDk5NzpcdFx0aWYgKGNudClcbiA5OTg6XHRcdFx0ZXJyID0gMDtcbiA5OTk6XHRcbjEwMDA6XHRvdXQ6XG4xMDAxOlx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xuMTAwMjpcdFxuMTAwMzpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuMTAwNDpcdHJlc3RhcnRfZ2M6XG4xMDA1Olx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHgsIHRtcCwgXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbGlzdCwgZGV2X2djbGlzdCkge1xuMTAwNjpcdFx0XHR4c28gPSBcdTAwMjZ4LVx1MDAzZXhzbztcbjEwMDc6XHRcbjEwMDg6XHRcdFx0aWYgKHhzby1cdTAwM2VkZXYgPT0gZGV2KSB7XG4xMDA5Olx0XHRcdFx0LyogVGhlIGRldmljZSBHQyBsaXN0IGRvZXMgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8geC4gKi9cbjEwMTA6XHRcdFx0XHRpZiAoIXhmcm1fc3RhdGVfaG9sZF9yY3UoeCkpXG4xMDExOlx0XHRcdFx0XHRjb250aW51ZTtcbjEwMTI6XHRcbjEwMTM6XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcbjEwMTQ6XHRcdFx0XHR4ZnJtX2Rldl9zdGF0ZV9mcmVlKHgpO1xuMTAxNTpcdFx0XHRcdHhmcm1fc3RhdGVfcHV0KHgpO1xuMTAxNjpcdFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcbjEwMTc6XHRcdFx0XHRnb3RvIHJlc3RhcnRfZ2M7XG4xMDE4Olx0XHRcdH1cbjEwMTk6XHRcbjEwMjA6XHRcdH1cbjEwMjE6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuMTAyMjpcdFxuMTAyMzpcdFx0eGZybV9mbHVzaF9nYygpO1xuMTAyNDpcdFxuMTAyNTpcdFx0cmV0dXJuIGVycjtcbjEwMjY6XHR9XG4xMDI3Olx0RVhQT1JUX1NZTUJPTCh4ZnJtX2Rldl9zdGF0ZV9mbHVzaCk7XG4xMDI4Olx0XG4xMDI5Olx0dm9pZCB4ZnJtX3NhZF9nZXRpbmZvKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHhmcm1rX3NhZGluZm8gKnNpKVxuMTAzMDpcdHtcbjEwMzE6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xuMTAzMjpcdFx0c2ktXHUwMDNlc2FkY250ID0gbmV0LVx1MDAzZXhmcm0uc3RhdGVfbnVtO1xuMTAzMzpcdFx0c2ktXHUwMDNlc2FkaGNudCA9IG5ldC1cdTAwM2V4ZnJtLnN0YXRlX2htYXNrICYjNDM7IDE7XG4xMDM0Olx0XHRzaS1cdTAwM2VzYWRobWNudCA9IHhmcm1fc3RhdGVfaGFzaG1heDtcbjEwMzU6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XG4xMDM2Olx0fVxuMTAzNzpcdEVYUE9SVF9TWU1CT0woeGZybV9zYWRfZ2V0aW5mbyk7XG4xMDM4Olx0XG4xMDM5Olx0c3RhdGljIHZvaWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNDcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqWEZSTSBTdGF0ZSBNYW5hZ2VtZW50IEZpeCBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgb3ZlciB0aGlzIFhGUk0gc3RhdGUgbWFuYWdlbWVudCBmaXguIE15IGluaXRpYWwgdGhvdWdodCBpcywgeWVzLCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGl0ZXJhdGVzIHRocm91Z2ggdGhlIGB4ZnJtX3N0YXRlX2Rldl9nY19saXN0YC4gVGhhdCByaW5ncyBhIGJlbGwuIFRoZSBjb3JlIG9mIHRoaXMgZml4IHNlZW1zIHRvIGJlIGFkZGluZyBgeGZybV9zdGF0ZV9ob2xkX3JjdSh4KWAgYW5kIGB4ZnJtX3N0YXRlX3B1dCh4KWAgY2FsbHMgd2l0aGluIHRoYXQgbG9vcCB0byBtYWtlIHRoZSBwcm9jZXNzaW5nIG9mIGVhY2ggZW50cnkgc2FmZSwgd2hpY2ggaXMgYSBnb29kIGNhbGwsIHByZXZlbnRzIHJhY2VzLgoKSSBhbHNvIHNlZSBhIGNoYW5nZSBpbiBgeGZybV9kZXZfc3RhdGVfZnJlZWA6IHJlcGxhY2luZyBgaGxpc3RfZGVsYCB3aXRoIGBobGlzdF9kZWxfaW5pdGAuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFuZCBhZGRyZXNzZXMgYSBidWcgaW4gaG93IHN0YXRlcyBhcmUgbWFuYWdlZC4gRGVmaW5pdGVseSB3b3J0aCBhIGZ1enppbmcgY2FtcGFpZ24gdG8gdmFsaWRhdGUgdGhpcyBmaXguCgpUaGUga2V5IGZ1bmN0aW9ucyB0byBjb25jZW50cmF0ZSBvbiBmb3IgZnV6emluZyBhcmUsIG9idmlvdXNseSwgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBhbmQgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgLiBXYWl0LCBob2xkIG9uLiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGdldHMgY2FsbGVkIHdoZW4gYW4gWEZSTSBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkIG9yIGdvZXMgZG93bi4gT2theSwgc28gdGhhdCBzdWdnZXN0cyB0aGlzIGNvdWxkIGJlIGludGVyZXN0aW5nIGZyb20gYSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gY2hhbmdlIHBlcnNwZWN0aXZlLiBUaGlzIGlzIGEgdmVyeSBnb29kIGZvY3VzIHBvaW50LgoKRnVydGhlcm1vcmUsIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCBpcyBjYWxsZWQgZnJvbSBib3RoIGB4ZnJtX3N0YXRlX2djX2Rlc3Ryb3lgIGFuZCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgLiBUaGF0IG1ha2VzIHRoZXNlIHR3byBmdW5jdGlvbnMgYSBuYXR1cmFsIHBhaXIgZm9yIGZ1enppbmcuCgpMZXQmIzM5O3MgY2hlY2sgaWYgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpcyBzdGF0aWMgb3Igbm90LiBPa2F5LCBpdCYjMzk7cyBleHBvcnRlZC4gTGV0JiMzOTtzIHNlZSBhYm91dCBgeGZybV9kZXZfc3RhdGVfZnJlZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qeGZybV9kZXZfc3RhdGVfZnJlZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTA3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgU2NvcGUgb2YgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkmIzM5O20gc2VlaW5nIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCwgYW5kIG15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IHNpbmNlIGl0JiMzOTtzIHVzZWQgaW4gdGhpcyBjb250ZXh0LCBpdCBzaG91bGQgZWl0aGVyIGJlIGV4cG9ydGVkIG9yIHN0YXRpYy4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBub3QgZXhwbGljaXRseSBkZWNsYXJlZCBhcyBgc3RhdGljYCBpcyByYWlzaW5nIGEgZmxhZy4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGl0cyB2aXNpYmlsaXR5LiBJcyBpdCBtZWFudCBmb3IgaW50ZXJuYWwgdXNlIG9ubHkgd2l0aGluIGEgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdCwgb3IgaXMgaXQgcG90ZW50aWFsbHkgY2FsbGFibGUgZnJvbSBvdGhlciBtb2R1bGVzPyBUaGlzIHdhcnJhbnRzIGEgZGVlcGVyIGRpdmUgaW50byB0aGUga2VybmVsIHN5bWJvbCB0YWJsZSBvciwgZmFpbGluZyB0aGF0LCBhIGNyb3NzLXJlZmVyZW5jZSBzZWFyY2ggdG8gdW5kZXJzdGFuZCBpdHMgaW50ZW5kZWQgdXNhZ2UgYW5kIGVuc3VyZSBJJiMzOTttIGludGVycHJldGluZyBpdHMgcGxhY2VtZW50IGNvcnJlY3RseS4gSSBzdXNwZWN0IGEgcG90ZW50aWFsIG92ZXJzaWdodCBvciBwZXJoYXBzIGEgc3VidGxlIGRlc2lnbiBhc3BlY3QgSSBoYXZlbiYjMzk7dCBmdWxseSBncmFzcGVkIHlldC4gSSBuZWVkIHRvIGZpZ3VyZSB0aGlzIG91dCBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIHhmcm1fZGV2X3N0YXRlX2ZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9zdGF0ZS5jPTc3OD1FWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX2Rldl9zdGF0ZV9kZWxldGUpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTc3OS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo3ODA6dm9pZCB4ZnJtX2Rldl9zdGF0ZV9mcmVlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTc4MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Mjc1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgZnJhbWVkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczoKCioqQXNzZXNzaW5nIER5bmFtaWMgQmVoYXZpb3IgJmFtcDsgRXhwb3J0IFN0YXR1cyoqCgpBbHJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcy4uLiBhbmQgbXkgaW1tZWRpYXRlIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzbiYjMzk7dCBhIHN0YXRpYyBlbGVtZW50LiBJdCBoYXMgc29tZSBraW5kIG9mIGR5bmFtaWMgYmVoYXZpb3Igb3Igc3RhdGUgdGhhdCBuZWVkcyBleGFtaW5hdGlvbi4gR2l2ZW4gdGhhdCwgdGhlIGNyaXRpY2FsIG5leHQgc3RlcCBpcyB0byBkZXRlcm1pbmUgaWYgaXRzIGN1cnJlbnQgc3RhdGUgb3IgYW55IG9mIGl0cyB0cmFuc2Zvcm1hdGlvbnMgYXJlIGJlaW5nIHN1Y2Nlc3NmdWxseSBleHBvcnRlZCBvciByZW5kZXJlZCBleHRlcm5hbGx5LiBUaGUgZXhwb3J0IHByb2Nlc3MgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgcGljdHVyZSBoZXJlLiBJIGNhbiYjMzk7dCBkZXRlcm1pbmUgaXRzIGNvbXBsZXRlIHV0aWxpdHkgb3IgYmVoYXZpb3Igd2l0aG91dCBrbm93aW5nIHRoZSBzdGF0ZSBvZiBpdHMgb3V0cHV0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnhmcm1fZGV2X3N0YXRlX2ZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ2MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCYjMzk7cyBYRlJNIE9mZmxvYWQgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGtlcm5lbCBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgeGZybWAgc3Vic3lzdGVtIGFuZCBpdHMgb2ZmbG9hZCBjYXBhYmlsaXRpZXMuIEZpcnN0IG9mZiwgSSBzZWUgdGhhdCB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaXNuJiMzOTt0ICpleHBvcnRlZCogZGlyZWN0bHksIHdoaWNoIG1lYW5zIGl0cyBzeW1ib2wgYWRkcmVzcyBzaG91bGQgYmUgZGlzdGluY3Qgc2luY2UgaXQmIzM5O3Mgbm9uLXN0YXRpYy4gVGhlbiwgd2FpdCBhIHNlY29uZCwgaG9sZCBvbiwgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCAqaXMqIGV4cG9ydGVkIOKAkyBpbnRlcmVzdGluZy4gTGV0JiMzOTtzIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgbHVya2luZyBhcm91bmQgaGVyZS4gT2theSwgYHhmcm1fZGV2X2Rvd25gIGFuZCBgeGZybV9kZXZfdW5yZWdpc3RlcmAgYXJlIGJvdGggc3RhdGljLCBzcGVjaWZpY2FsbHkgZGVmaW5lZCB3aXRoaW4gYHhmcm1fZGV2aWNlLmNgLiBMb29raW5nIGZ1cnRoZXIsIGB4ZnJtX2Rldl9zdGF0ZV9hZGRgIGFuZCBgeGZybV9kZXZfc3RhdGVfZGVsZXRlYCBoYXZlIGFwcGVhcmFuY2VzIGFjcm9zcyBib3RoIGB4ZnJtX2RldmljZS5jYCBhbmQgYHhmcm1fc3RhdGUuY2AuCgpHaXZlbiB0aGUgY29udGV4dCwgSSB0aGluayBmb2N1c2luZyBvbiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGFuZCBgeGZybV9kZXZfc3RhdGVfZnJlZWAgaXMgdGhlIHJpZ2h0IG1vdmUuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCBgQ09ORklHX1hGUk1gIGFuZCBgQ09ORklHX1hGUk1fT0ZGTE9BRGAgYXJlIHRoZSBwcmVyZXF1aXNpdGVzIGZvciB0aGlzIGNvZGUgcGF0aC4gSG1tLCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIGFsd2F5cyBjb21waWxlZCBpZiBgQ09ORklHX1hGUk1gIGlzIGVuYWJsZWQsIGJ1dCBpdCB3aWxsIG9ubHkgYWN0dWFsbHkgKmRvKiBhbnl0aGluZyBpZiBgeHNvLSZndDtkZXYgPT0gZGV2YC4gYHhzb2AgaXMgYWN0dWFsbHkgYCZhbXA7eC0mZ3Q7eHNvYCwgd2hpY2ggZ2l2ZXMgdXMgYHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkYC4gSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGdvb2QgbG9vayBhdCBgc3RydWN0IHhmcm1fZGV2X29mZmxvYWRgIG5vdywgdG8gcHJvcGVybHkgdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3hmcm0uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC94ZnJtLmg9MTQ1PWVudW0ge1xuLS1cbmluY2x1ZGUvbmV0L3hmcm0uaC0xNDgtXG5pbmNsdWRlL25ldC94ZnJtLmg6MTQ5OnN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkIHtcbmluY2x1ZGUvbmV0L3hmcm0uaC0xNTAtXHQvKiBUaGUgZGV2aWNlIGZvciB0aGlzIG9mZmxvYWQuXG4tLVxuaW5jbHVkZS9uZXQveGZybS5oPTE5MD1zdHJ1Y3QgeGZybV9zdGF0ZSB7XG4tLVxuaW5jbHVkZS9uZXQveGZybS5oLTI5My1cbmluY2x1ZGUvbmV0L3hmcm0uaDoyOTQ6XHRzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCB4c287XG5pbmNsdWRlL25ldC94ZnJtLmgtMjk1LVxuLS1cbmluY2x1ZGUvbmV0L3hmcm0uaD02MzQ9c3RydWN0IHhmcm1fcG9saWN5IHtcbi0tXG5pbmNsdWRlL25ldC94ZnJtLmgtNjY2LVxuaW5jbHVkZS9uZXQveGZybS5oOjY2NzpcdHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkIHhkbztcbmluY2x1ZGUvbmV0L3hmcm0uaC02NjgtfTtcbi0tXG5pbmNsdWRlL25ldC94ZnJtLmg9MTcyMz1zdGF0aWMgaW5saW5lIHZvaWQgeGZybV9kZXZfc3RhdGVfdXBkYXRlX3N0YXRzKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuaW5jbHVkZS9uZXQveGZybS5oLTE3MjQte1xuaW5jbHVkZS9uZXQveGZybS5oOjE3MjU6XHRzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCAqeGRvID0gXHUwMDI2eC1cdTAwM2V4c287XG5pbmNsdWRlL25ldC94ZnJtLmgtMTcyNi1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBSRUFEX09OQ0UoeGRvLVx1MDAzZWRldik7XG4tLVxuaW5jbHVkZS9uZXQveGZybS5oPTIxMzQ9c3RhdGljIGlubGluZSB2b2lkIHhmcm1fZGV2X3N0YXRlX2FkdmFuY2VfZXNuKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuaW5jbHVkZS9uZXQveGZybS5oLTIxMzUte1xuaW5jbHVkZS9uZXQveGZybS5oOjIxMzY6XHRzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCAqeHNvID0gXHUwMDI2eC1cdTAwM2V4c287XG5pbmNsdWRlL25ldC94ZnJtLmgtMjEzNy1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBSRUFEX09OQ0UoeHNvLVx1MDAzZWRldik7XG4tLVxuaW5jbHVkZS9uZXQveGZybS5oPTIxNjE9c3RhdGljIGlubGluZSB2b2lkIHhmcm1fZGV2X3BvbGljeV9kZWxldGUoc3RydWN0IHhmcm1fcG9saWN5ICp4KVxuaW5jbHVkZS9uZXQveGZybS5oLTIxNjIte1xuaW5jbHVkZS9uZXQveGZybS5oOjIxNjM6XHRzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCAqeGRvID0gXHUwMDI2eC1cdTAwM2V4ZG87XG5pbmNsdWRlL25ldC94ZnJtLmgtMjE2NC1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB4ZG8tXHUwMDNlZGV2O1xuLS1cbmluY2x1ZGUvbmV0L3hmcm0uaD0yMTcwPXN0YXRpYyBpbmxpbmUgdm9pZCB4ZnJtX2Rldl9wb2xpY3lfZnJlZShzdHJ1Y3QgeGZybV9wb2xpY3kgKngpXG5pbmNsdWRlL25ldC94ZnJtLmgtMjE3MS17XG5pbmNsdWRlL25ldC94ZnJtLmg6MjE3MjpcdHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkICp4ZG8gPSBcdTAwMjZ4LVx1MDAzZXhkbztcbmluY2x1ZGUvbmV0L3hmcm0uaC0yMTczLVx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHhkby1cdTAwM2VkZXY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODI1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSB4ZnJtX3N0YXRlIFN0cnVjdHVyZSBhbmQgT2ZmbG9hZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYHhmcm1fc3RhdGVgIHN0cnVjdHVyZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGB4c29gIGFuZCBpdHMgbWVtYmVycy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdGluZyB0aGF0IGB4c29gLCB3aGF0ZXZlciBpdCBpcywgaXMgKmFsd2F5cyogcHJlc2VudCB3aXRoaW4gYHN0cnVjdCB4ZnJtX3N0YXRlYC4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGdpdmVuLiBCdXQgdGhlbiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGB4c28tJmd0O2RldmAsIGFuZCBJJiMzOTttIHJlbWVtYmVyaW5nIHRoYXQgaXQmIzM5O3Mgb25seSBwb3B1bGF0ZWQsIG9ubHkgdmFsaWQsIHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXMuIE15IHJlY29sbGVjdGlvbiBpcyB0aGF0IGB4c28tJmd0O2RldmAgaXMgb25seSBhc3NpZ25lZCB3aGVuIG9mZmxvYWQgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkLiBBbmQsIGZ1cnRoZXIsIGVuYWJsaW5nIHRoYXQgb2ZmbG9hZCBmZWF0dXJlIGhpbmdlcyBvbiB3aGV0aGVyIGBDT05GSUdfWEZSTV9PRkZMT0FEYCBpcyBzZXQgZHVyaW5nIHRoZSBrZXJuZWwgYnVpbGQuIFNvLCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGB4c28tJmd0O2RldmAgSSBuZWVkIHRvIHRyYWNlICp3aGVyZSogdGhpcyBmaWVsZCBpcyBhY3R1YWxseSBzZXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHN1cnJvdW5kaW5nIGl0cyBhc3NpZ25tZW50LiBMZXQmIzM5O3Mgc2VlIHdoZXJlIHRoYXQgaGFwcGVucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eHNvLVx1MDAzZWRldiA9JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fZGV2aWNlLmM9MjM5PWludCB4ZnJtX2Rldl9zdGF0ZV9hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTMwMy1cdGlmICghZGV2LVx1MDAzZXhmcm1kZXZfb3BzIHx8ICFkZXYtXHUwMDNleGZybWRldl9vcHMtXHUwMDNleGRvX2Rldl9zdGF0ZV9hZGQpIHtcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6MzA0Olx0XHR4c28tXHUwMDNlZGV2ID0gTlVMTDtcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMzA1LVx0XHRkZXZfcHV0KGRldik7XG4tLVxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0zMTEtXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RGV2aWNlIGRvZXNuJiMzOTt0IHN1cHBvcnQgb2ZmbG9hZCB3aXRoIEVTTlwmIzM0Oyk7XG5uZXQveGZybS94ZnJtX2RldmljZS5jOjMxMjpcdFx0eHNvLVx1MDAzZWRldiA9IE5VTEw7XG5uZXQveGZybS94ZnJtX2RldmljZS5jLTMxMy1cdFx0ZGV2X3B1dChkZXYpO1xuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMzIyLVxubmV0L3hmcm0veGZybV9kZXZpY2UuYzozMjM6XHR4c28tXHUwMDNlZGV2ID0gZGV2O1xubmV0L3hmcm0veGZybV9kZXZpY2UuYy0zMjQtXHR4c28tXHUwMDNlaWZpbmRleCA9IGRldi1cdTAwM2VpZmluZGV4O1xuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMzM4LVx0aWYgKGVycikge1xubmV0L3hmcm0veGZybV9kZXZpY2UuYzozMzk6XHRcdHhzby1cdTAwM2VkZXYgPSBOVUxMO1xubmV0L3hmcm0veGZybV9kZXZpY2UuYy0zNDAtXHRcdHhzby1cdTAwM2VkaXIgPSAwO1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz04ODY9eGZybV9kZXZfc3RhdGVfZmx1c2hfc2VjY3R4X2NoZWNrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0YXNrX3ZhbGlkKVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04OTYtXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6ODk3Olx0XHRcdGlmICh4c28tXHUwMDNlZGV2ID09IGRldiBcdTAwMjZcdTAwMjZcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04OTgtXHRcdFx0ICAgKGVyciA9IHNlY3VyaXR5X3hmcm1fc3RhdGVfZGVsZXRlKHgpKSAhPSAwKSB7XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTk2MT1pbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaWQpXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTk3OC1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo5Nzk6XHRcdFx0aWYgKCF4ZnJtX3N0YXRlX2tlcm4oeCkgXHUwMDI2XHUwMDI2IHhzby1cdTAwM2VkZXYgPT0gZGV2KSB7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtOTgwLVx0XHRcdFx0eGZybV9zdGF0ZV9ob2xkKHgpO1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMDA3LVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjEwMDg6XHRcdGlmICh4c28tXHUwMDNlZGV2ID09IGRldikge1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEwMDktXHRcdFx0LyogVGhlIGRldmljZSBHQyBsaXN0IGRvZXMgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8geC4gKi9cbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MTM2MT14ZnJtX3N0YXRlX2ZpbmQoY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE1NTMtXHRcdFx0eHNvLVx1MDAzZWRpciA9IHhkby1cdTAwM2VkaXI7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTU1NDpcdFx0XHR4c28tXHUwMDNlZGV2ID0gZGV2O1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE1NTUtXHRcdFx0eHNvLVx1MDAzZWlmaW5kZXggPSBkZXYtXHUwMDNlaWZpbmRleDtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTU2Mi1cdFx0XHRcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZ4c28tXHUwMDNlZGV2X3RyYWNrZXIpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE1NjM6XHRcdFx0XHR4c28tXHUwMDNlZGV2ID0gTlVMTDtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNTY0LVx0XHRcdFx0eHNvLVx1MDAzZXR5cGUgPSBYRlJNX0RFVl9PRkZMT0FEX1VOU1BFQ0lGSUVEO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA5NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaWdnaW5nIGludG8gdGhlIFhGUk0gRGV2aWNlIFN0YXRlKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyBkb3duIHRoaXMgYHhzby0mZ3Q7ZGV2YCBhc3NpZ25tZW50LCBhbmQgaXQgbG9va3MgbGlrZSBgeGZybV9kZXZfc3RhdGVfYWRkYCBpbiBgbmV0L3hmcm0veGZybV9kZXZpY2UuY2AgaXMgdGhlIGN1bHByaXQuIFRoYXQgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhhdCBkZXZpY2UgcG9pbnRlciwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkmIzM5O20gaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nLiAgSSBrbm93IGB4ZnJtX2RldmljZS5jYCBnZXRzIGNvbXBpbGVkIGFzIGxvbmcgYXMgYENPTkZJR19YRlJNYCBpcyBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnLCBzbyB0aGUgZmlsZSBpdHNlbGYgc2hvdWxkIGV4aXN0LiBXYWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nIGNydWNpYWwuIEkgc2VlbSB0byByZWNhbGwgdGhhdCBmdW5jdGlvbiBiZWluZyBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRGAuICBKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlLWV4YW1pbmUgYG5ldC94ZnJtL3hmcm1fZGV2aWNlLmNgIHRvIGNvbmZpcm0gdGhhdCBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gSXQmIzM5O3MgY3JpdGljYWwgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1hGUk1fT0ZGTE9BRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9kZXZpY2UuYy0yMS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6MjI6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMjMtc3RhdGljIHZvaWQgX194ZnJtX3RyYW5zcG9ydF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM9NTI2PXN0YXRpYyBpbnQgeGZybV9hcGlfY2hlY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTI3LXtcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6NTI4OiNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTUyOS1cdGlmICgoZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX0VTUF9UWF9DU1VNKSBcdTAwMjZcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2NDcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgWEZSTSBEZXZpY2UgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB0cmFjZSBkb3duIHdoZXJlIGB4ZnJtX2Rldl9zdGF0ZV9hZGRgIGlzIGRlZmluZWQuIEkga25vdyBpdCYjMzk7cyByZWxhdGVkIHRvIFhGUk0sIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGludm9sdmVkIGluIGRldmljZSBtYW5hZ2VtZW50IHNvbWVob3cuIExldCBtZSBzZWUuLi4gSSYjMzk7bSBwcmV0dHkgc3VyZSBJJiMzOTt2ZSBzZWVuIGl0IGluIGBuZXQveGZybS9gIGJlZm9yZS4gWWVwLCBgeGZybV9kZXZpY2UuY2Agc2VlbXMgbGlrZSB0aGUgbGlrZWx5IHBsYWNlLiBOb3cgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGZ1bmN0aW9uYWxpdHkgY29uZGl0aW9uYWxseSBjb21waWxlZD8gSSBuZWVkIHRvIGNoZWNrIGlmIGB4ZnJtX2Rldl9zdGF0ZV9hZGRgIGlzIGluc2lkZSBhbiBgI2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURgIGJsb2NrLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBkZXRhaWwuIEkgbmVlZCB0byBnZXQgdGhlIGRlZmluaXRpdmUgYW5zd2VyLiBUaW1lIHRvIGNyYWNrIG9wZW4gYG5ldC94ZnJtL3hmcm1fZGV2aWNlLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAyMiDigJMgdGhhdCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9kZXZpY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gICAyOlx0LypcbiAgIDM6XHQgKiB4ZnJtX2RldmljZS5jIC0gSVBzZWMgZGV2aWNlIG9mZmxvYWRpbmcgY29kZS5cbiAgIDQ6XHQgKlxuICAgNTpcdCAqIENvcHlyaWdodCAoYykgMjAxNSBzZWN1bmV0IFNlY3VyaXR5IE5ldHdvcmtzIEFHXG4gICA2Olx0ICpcbiAgIDc6XHQgKiBBdXRob3I6XG4gICA4Olx0ICogU3RlZmZlbiBLbGFzc2VydCBcdTAwM2NzdGVmZmVuLmtsYXNzZXJ0QHNlY3VuZXQuY29tXHUwMDNlXG4gICA5Olx0ICovXG4gIDEwOlx0XG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvZXJybm8uaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiAgMTc6XHQjaW5jbHVkZSBcdTAwM2NuZXQvZHN0LmhcdTAwM2VcbiAgMTg6XHQjaW5jbHVkZSBcdTAwM2NuZXQvZ3NvLmhcdTAwM2VcbiAgMTk6XHQjaW5jbHVkZSBcdTAwM2NuZXQveGZybS5oXHUwMDNlXG4gIDIwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbm90aWZpZXIuaFx1MDAzZVxuICAyMTpcdFxuICAyMjpcdCNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXG4gIDIzOlx0c3RhdGljIHZvaWQgX194ZnJtX3RyYW5zcG9ydF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuICAyNDpcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgaHNpemUpXG4gIDI1Olx0e1xuICAyNjpcdFx0c3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTtcbiAgMjc6XHRcbiAgMjg6XHRcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XG4gIDI5Olx0XHRpZiAoeG8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fR1NPX1NFR01FTlQpXG4gIDMwOlx0XHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyIC09IHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbjtcbiAgMzE6XHRcbiAgMzI6XHRcdHBza2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgJiM0MzsgeC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKTtcbiAgMzM6XHR9XG4gIDM0Olx0XG4gIDM1Olx0c3RhdGljIHZvaWQgX194ZnJtX21vZGVfdHVubmVsX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXG4gIDM2Olx0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IGhzaXplKVxuICAzNzpcdFxuICAzODpcdHtcbiAgMzk6XHRcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XG4gIDQwOlx0XG4gIDQxOlx0XHRpZiAoeG8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fR1NPX1NFR01FTlQpXG4gIDQyOlx0XHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7IGhzaXplO1xuICA0MzpcdFxuICA0NDpcdFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcbiAgNDU6XHRcdHBza2JfcHVsbChza2IsXG4gIDQ2Olx0XHRcdCAgc2tiLVx1MDAzZW1hY19sZW4gJiM0MzsgeC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuIC0geC1cdTAwM2Vwcm9wcy5lbmNfaGRyX2xlbik7XG4gIDQ3Olx0fVxuICA0ODpcdFxuICA0OTpcdHN0YXRpYyB2b2lkIF9feGZybV9tb2RlX2JlZXRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAgNTA6XHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGhzaXplKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODcyOQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBDb25kaXRpb25hbCBDb21waWxhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgYCNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEYCBzdGF0ZW1lbnQuIFJpZ2h0LCB0aGlzIGxvb2tzIGxpa2UgYSBmZWF0dXJlIGdhdGUsIG1lYW5pbmcgYSBjaHVuayBvZiBjb2RlIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIE15IGltbWVkaWF0ZSBxdWVzdGlvbiwgYXMgYWx3YXlzIHdoZW4gZGVhbGluZyB3aXRoIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGxpa2UgdGhpcywgaXM6IHdoZXJlIGRvZXMgdGhpcyBjb25kaXRpb25hbCBibG9jayAqZW5kKj8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGlzIHBhcnRpY3VsYXIgYCNpZmRlZmAuIElzIGl0IGEgc2hvcnQgYmxvY2ssIG9yIGEgbG9uZ2VyIG9uZSB0aGF0IHNwYW5zIG11bHRpcGxlIGZ1bmN0aW9ucyBvciBldmVuIGZpbGVzPyBUaGUgbGVuZ3RoIG9mIGl0IHdpbGwgaW1wYWN0IG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGEgc3BlY2lmaWMgZmVhdHVyZSBpcyBoYW5kbGVkLCBlc3BlY2lhbGx5IHdoZW4gSSYjMzk7bSBkZWJ1Z2dpbmcgb3IgdHJhY2luZyB0aGUgY29udHJvbCBmbG93LiBHb3R0YSBmaW5kIHRoYXQgYCNlbmRpZmAhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2VuZGlmLipDT05GSUdfWEZSTV9PRkZMT0FEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9kZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTczCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIHN1bW1hcml6ZWQsIHRhcmdldGluZyBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBgI2VuZGlmYCBpbiBgbmV0L3hmcm0veGZybV9kZXZpY2UuY2AqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBgbmV0L3hmcm0veGZybV9kZXZpY2UuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYCNlbmRpZmAgZGlyZWN0aXZlcyB3aXRoaW4gdGhhdCBmaWxlLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gZW5zdXJpbmcgcHJvcGVyIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBhdm9pZGluZyBhbnkgcG90ZW50aWFsIHByZXByb2Nlc3NvciBwaXRmYWxscy4gR2l2ZW4gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIFhGUk0gc3Vic3lzdGVtLCBldmVuIHNlZW1pbmdseSBiZW5pZ24gYCNlbmRpZmAgZGlyZWN0aXZlcyBjYW4gaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGRpZmZlcmVudCBidWlsZCBjb25maWd1cmF0aW9ucywga2VybmVsIHZlcnNpb25zLCBvciBlbmFibGVkIGZlYXR1cmVzLgoKSSYjMzk7bSB0aGlua2luZywgYXJlIHRoZXJlIGFueSB1bnVzdWFsIG5lc3Rpbmcgc3RydWN0dXJlcz8gQW0gSSBzZWVpbmcgYW55IHBvdGVudGlhbCBmb3IgbWlzbWF0Y2hlZCBgI2lmZGVmYC9gI2lmbmRlZmAgcGFpcnMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgY29kZSBpbmNsdXNpb24gb3IgZXhjbHVzaW9uPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgYXJlYXMgd2hlcmUgYSBtaXNzaW5nIG9yIG1pc3BsYWNlZCBgI2VuZGlmYCBtaWdodCBiZSBjYXVzaW5nIGlzc3VlcywgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gdGhlIGRldmljZSBtYW5hZ2VtZW50IHNpZGUgb2YgWEZSTS4gQSBjb21tb24gaXNzdWUgbWlnaHQgYmUgZGlmZmVyaW5nIGRlZmluaXRpb25zIGluIHZhcmlvdXMgY29uZmlndXJhdGlvbiBzdGF0ZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBkZXZpY2UgcmVnaXN0cmF0aW9uL2RlcmVnaXN0cmF0aW9uLCBvciBwZXJoYXBzIGV2ZW4gaW4gdGhlIGhhbmRsaW5nIG9mIFhGUk0gZGV2aWNlcyB3aXRoIHZhcnlpbmcgY2FwYWJpbGl0aWVzLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoaXMgc3Vic3lzdGVtLCBJJiMzOTttIG9uIHRoZSBsb29rb3V0IGZvciBhbnl0aGluZyB0aGF0IGNvdWxkIGFmZmVjdCBob3cgWEZSTSBpbnRlcmFjdHMgd2l0aCBuZXR3b3JrIGludGVyZmFjZXMgYW5kIHJvdXRpbmcuIE15IG1haW4gZ29hbCBpcyB0byBzZWUgaWYgYW55IG9idmlvdXMgdnVsbmVyYWJpbGl0aWVzIGV4aXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZW5kaWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fZGV2aWNlLmM9NTAzPXZvaWQgeGZybV9kZXZfYmFja2xvZyhzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZClcbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTUyMy19XG5uZXQveGZybS94ZnJtX2RldmljZS5jOjUyNDojZW5kaWZcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTI1LVxubmV0L3hmcm0veGZybV9kZXZpY2UuYz01MjY9c3RhdGljIGludCB4ZnJtX2FwaV9jaGVjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTQwLVx0XHRyZXR1cm4gTk9USUZZX0JBRDtcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6NTQxOiNlbmRpZlxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NDItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTAyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYENPTkZJR19YRlJNX09GRkxPQURgIERlcGVuZGVuY3kqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQsIHJpZ2h0LCBsaW5lIDUyNCB3aXRoIHRoZSBgI2VuZGlmYCBjbGVhcmx5IGNsb3NlcyB0aGUgYCNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEYCBibG9jay4gTWFrZXMgc2Vuc2UuIE5vdywgYHhmcm1fZGV2X3N0YXRlX2FkZGAgaXMgZGVmaW5lZCBhdCBsaW5lIDIzOS4gVGhhdCYjMzk7cyAqaW5zaWRlKiB0aGUgY29uZGl0aW9uYWwgYmxvY2ssIHNvIGBDT05GSUdfWEZSTV9PRkZMT0FEYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlIGZvciB0aGlzIGZ1bmN0aW9uLiBUaGlzIGFsc28gbWVhbnMgYENPTkZJR19YRlJNX09GRkxPQURgICptdXN0KiBiZSBzZXQgaW4gb3JkZXIgdG8gcmVhY2ggdGhlIGNvZGUgd2hlcmUgYHhzby0mZ3Q7ZGV2YCBpcyBhc3NpZ25lZCwgd2hpY2gsIGluIHR1cm4sIGlzIGEgY3JpdGljYWwgcGllY2UgaW4gdHJpZ2dlcmluZyB0aGUgYnVnIGluIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAuCgpIbW0sIG5vdyBsZXQgbWUganVzdCBjaGVjay4uLiBSaWdodCwgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpcyBjYWxsZWQgZnJvbSBib3RoIGB4ZnJtX2Rldl9kb3duYCBhbmQgYHhmcm1fZGV2X3VucmVnaXN0ZXJgLiBUaG9zZSBhcmUgZGVmaW5lZCBpbiBgbmV0L3hmcm0veGZybV9kZXZpY2UuY2AuIFNvIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGlzc3VlIGFuZCB3aGVuIHRoZSBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIGNhbGxlZCBJIHNob3VsZCBkb3VibGUgY2hlY2sgaWYgYHhmcm1fZGV2X2Rvd25gIGlzIGFsc28gcHJvdGVjdGVkIGJ5IGAjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9kZXZpY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTIwOlx0XHRcdHhmcm1fZGV2X3Jlc3VtZShza2IpO1xuIDUyMTpcdFx0fVxuIDUyMjpcdFxuIDUyMzpcdH1cbiA1MjQ6XHQjZW5kaWZcbiA1MjU6XHRcbiA1MjY6XHRzdGF0aWMgaW50IHhmcm1fYXBpX2NoZWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gNTI3Olx0e1xuIDUyODpcdCNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXG4gNTI5Olx0XHRpZiAoKGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19FU1BfVFhfQ1NVTSkgXHUwMDI2XHUwMDI2XG4gNTMwOlx0XHQgICAgIShkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfRVNQKSlcbiA1MzE6XHRcdFx0cmV0dXJuIE5PVElGWV9CQUQ7XG4gNTMyOlx0XG4gNTMzOlx0XHRpZiAoKGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19FU1ApIFx1MDAyNlx1MDAyNlxuIDUzNDpcdFx0ICAgICghKGRldi1cdTAwM2V4ZnJtZGV2X29wcyBcdTAwMjZcdTAwMjZcbiA1MzU6XHRcdCAgICAgICBkZXYtXHUwMDNleGZybWRldl9vcHMtXHUwMDNleGRvX2Rldl9zdGF0ZV9hZGQgXHUwMDI2XHUwMDI2XG4gNTM2Olx0XHQgICAgICAgZGV2LVx1MDAzZXhmcm1kZXZfb3BzLVx1MDAzZXhkb19kZXZfc3RhdGVfZGVsZXRlKSkpXG4gNTM3Olx0XHRcdHJldHVybiBOT1RJRllfQkFEO1xuIDUzODpcdCNlbHNlXG4gNTM5Olx0XHRpZiAoZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiAoTkVUSUZfRl9IV19FU1AgfCBORVRJRl9GX0hXX0VTUF9UWF9DU1VNKSlcbiA1NDA6XHRcdFx0cmV0dXJuIE5PVElGWV9CQUQ7XG4gNTQxOlx0I2VuZGlmXG4gNTQyOlx0XG4gNTQzOlx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gNTQ0Olx0fVxuIDU0NTpcdFxuIDU0NjpcdHN0YXRpYyBpbnQgeGZybV9kZXZfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDU0NzpcdHtcbiA1NDg6XHRcdGlmIChkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfRVNQKSB7XG4gNTQ5Olx0XHRcdHhmcm1fZGV2X3N0YXRlX2ZsdXNoKGRldl9uZXQoZGV2KSwgZGV2LCB0cnVlKTtcbiA1NTA6XHRcdFx0eGZybV9kZXZfcG9saWN5X2ZsdXNoKGRldl9uZXQoZGV2KSwgZGV2LCB0cnVlKTtcbiA1NTE6XHRcdH1cbiA1NTI6XHRcbiA1NTM6XHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiA1NTQ6XHR9XG4gNTU1Olx0XG4gNTU2Olx0c3RhdGljIGludCB4ZnJtX2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gNTU3Olx0e1xuIDU1ODpcdFx0eGZybV9kZXZfc3RhdGVfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xuIDU1OTpcdFx0eGZybV9kZXZfcG9saWN5X2ZsdXNoKGRldl9uZXQoZGV2KSwgZGV2LCB0cnVlKTtcbiA1NjA6XHRcbiA1NjE6XHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiA1NjI6XHR9XG4gNTYzOlx0XG4gNTY0Olx0c3RhdGljIGludCB4ZnJtX2Rldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcbiA1NjU6XHR7XG4gNTY2Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XG4gNTY3Olx0XG4gNTY4Olx0XHRzd2l0Y2ggKGV2ZW50KSB7XG4gNTY5Olx0XHRjYXNlIE5FVERFVl9SRUdJU1RFUjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3NTYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFhGUk0gRGV2aWNlIFJlZ2lzdHJhdGlvbiBhbmQgU3RhdGUgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgYHhmcm1fZGV2X2Rvd25gIGFuZCBgeGZybV9kZXZfdW5yZWdpc3RlcmAgZnVuY3Rpb25zLiBUaGV5JiMzOTtyZSBkZWZpbmVkIG91dHNpZGUgdGhlIGAjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRGAgYmxvY2ssIHdoaWNoIHNlZW1zIGEgYml0IG1pc2xlYWRpbmcgYXQgZmlyc3QgZ2xhbmNlLiBIb3dldmVyLCBJIHNlZSB0aGF0IHRoZXkgKm9ubHkqIGRvIGFueXRoaW5nIHNpZ25pZmljYW50IHdoZW4gYHhzby0mZ3Q7ZGV2ID09IGRldmAgd2l0aGluIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAuIEFuZCwgaG9sZCBvbiwgYHhzby0mZ3Q7ZGV2YCBpcyAqb25seSogc2V0IGlmIGBDT05GSUdfWEZSTV9PRkZMT0FEYCBpcyBhY3R1YWxseSBlbmFibGVkLiBUaGVyZWZvcmUsIGBDT05GSUdfWEZSTV9PRkZMT0FEYCBpcyBjbGVhcmx5IGEgcmVxdWlyZW1lbnQgZm9yIHRoZXNlIGZ1bmN0aW9ucyB0byBoYXZlIGFueSBwcmFjdGljYWwgaW1wYWN0LCBhbmQgYENPTkZJR19YRlJNYCBpcyByZXF1aXJlZCBhcyB3ZWxsLgoKQnV0LCBoYW5nIG9uLCBsZXQgbWUgcmV2aXNpdCB0aGlzLiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIGFsc28gY2FsbGVkIHVuY29uZGl0aW9uYWxseSBmcm9tIGB4ZnJtX2Rldl91bnJlZ2lzdGVyYC4gRXZlbiB0aGVuLCBJdCBzZWVtcyBhcyB0aG91Z2ggYENPTkZJR19YRlJNX09GRkxPQURgIGlzIG5lZWRlZCB0byBhY3R1YWxseSB1dGlsaXplIHRoZSBtb2RpZmllZCBjb2RlIHBhdGggaW4gYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCB3aGVyZSBgeHNvLSZndDtkZXYgPT0gZGV2YCBpcyB0cnVlLgoKVGhlbiwgSSYjMzk7bSB0cmFjaW5nIGJhY2sgdG8gdGhlIGNhbGwgc3RhY2sgb2YgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgLiBJIHNlZSB0aGF0IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGB4ZnJtX3N0YXRlX2djX2Rlc3Ryb3lgLCB3aGljaCBpdHNlbGYgaXMgY2FsbGVkIGZyb20gYHhmcm1fc3RhdGVfZ2NfdGFza2AuIGB4ZnJtX3N0YXRlX2djX2Rlc3Ryb3lgIGNhbGxzIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlKHgpYCB1bmNvbmRpdGlvbmFsbHkuIEluIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCBJIHNlZSB0aGF0IHRoZXJlIGlzIHRoaXMgY29kZToKCmBgYGMKCWlmIChkZXYgJmFtcDsmYW1wOyBkZXYtJmd0O3hmcm1kZXZfb3BzKSB7CgkJc3Bpbl9sb2NrX2JoKCZhbXA7eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7CgkJaWYgKCFobGlzdF91bmhhc2hlZCgmYW1wO3gtJmd0O2Rldl9nY2xpc3QpKQoJCQlobGlzdF9kZWxfaW5pdCgmYW1wO3gtJmd0O2Rldl9nY2xpc3QpOwoJCXNwaW5fdW5sb2NrX2JoKCZhbXA7eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7CmBgYAoKVGhpcyAqcmVxdWlyZXMqIGBkZXZgIHRvIGJlIG5vbi1OVUxMLCByaWdodD8gV2hpY2ggbWVhbnMgaXQgcmVxdWlyZXMgYHhzby0mZ3Q7ZGV2YC4gVGhlcmVmb3JlLCBgeHNvLSZndDtkZXZgIG11c3QgYmUgbm9uLU5VTEwgaGVyZS4gU28sIGp1c3QgbGlrZSBiZWZvcmUsIGBDT05GSUdfWEZSTV9PRkZMT0FEYCBpcyBlc3NlbnRpYWwgZm9yIHJlYWNoaW5nIHRoZSBtb2RpZmllZCBjb2RlIHdpdGhpbiBgeGZybV9kZXZfc3RhdGVfZnJlZWAgYXMgd2VsbC4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBydW4gdGhyb3VnaCBteSBoZWFkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgQ09ORklHX1hGUk1fVVNFUmAgbWlnaHQgYmUgbmVlZGVkIGlmIHVzZXJzcGFjZSBjb25maWd1cmF0aW9uIG9mIFhGUk0gc3RhdGVzIGlzIGludm9sdmVkLiBMZXQgbWUgZG91YmxlLWNoZWNrIGBuZXQveGZybS9LY29uZmlnYCB0byBjb25maXJtIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFhGUk1fVVNFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnPTIyPWlmIElORVRcbm5ldC94ZnJtL0tjb25maWc6MjM6Y29uZmlnIFhGUk1fVVNFUlxubmV0L3hmcm0vS2NvbmZpZy0yNC1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTMxLVxubmV0L3hmcm0vS2NvbmZpZzozMjpjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cdHRyaXN0YXRlIFwmIzM0O0NvbXBhdGlibGUgQUJJIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE5ODkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipYRlJNIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSBBbmFseXNpcyoqCgpSaWdodCwgc28gdG8gZ2V0IFhGUk0gc3RhdGVzIHByb3Blcmx5IGNvbmZpZ3VyZWQsIEkmIzM5O20gYWJzb2x1dGVseSBnb2luZyB0byBuZWVkIGBDT05GSUdfWEZSTV9VU0VSYC4gVGhhdCBtdWNoIGlzIG9idmlvdXMuIE5vdywgYSBjcnVjaWFsIGZvbGxvdy11cCBxdWVzdGlvbiBhbHdheXMgcG9wcyB1cDogRG9lcyBgQ09ORklHX1hGUk1fT0ZGTE9BRGAgaGF2ZSBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIG9yIHJlbGF0aW9uc2hpcHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBCZXN0IHRvIGNsYXJpZnkgdGhhdCBiZWZvcmUgbW92aW5nIGZvcndhcmQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBjb25maWd1cmF0aW9uIG1hdHJpeC4gTGV0IG1lIGludmVzdGlnYXRlIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBjb25zaWRlciBmb3IgdGhpcyB0byB3b3JrIGFwcHJvcHJpYXRlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNX09GRkxPQUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZz01PWNvbmZpZyBYRlJNXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xMC1cbm5ldC94ZnJtL0tjb25maWc6MTE6Y29uZmlnIFhGUk1fT0ZGTE9BRFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyNzMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgc3VtbWFyeToKCioqQW5hbHl6aW5nIGEgQm9vbGVhbiBEZWNpc2lvbioqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIGBib29sYCB2YXJpYWJsZSBoZXJlLCBhbmQgdGhlcmUmIzM5O3Mgbm8gZXhwbGljaXQgdXNlciBwcm9tcHQgb3IgY29uZmlndXJhdGlvbiBhc3NvY2lhdGVkIHdpdGggaXQuIFRoYXQgbWVhbnMgaXRzIHN0YXRlIOKAkyB0cnVlIG9yIGZhbHNlIOKAkyBpcyBiZWluZyBkZXRlcm1pbmVkIHVwc3RyZWFtLCBsaWtlbHkgdGhyb3VnaCBzb21lIG90aGVyIGNvbmZpZ3VyYXRpb24gb3IgYSBjb25kaXRpb25hbCBjaGVjay4gTXkgcHJpbWFyeSBxdWVzdGlvbiBpcywgd2hhdCYjMzk7cyBkcml2aW5nIHRoaXM/IEkgbmVlZCB0byB0cmFjZSB0aGUgbG9naWMgYW5kIGZpZ3VyZSBvdXQgKndoYXQqIGlzIHNlbGVjdGluZyBgWEZSTV9PRkZMT0FEYC4gVW5kZXJzdGFuZGluZyB0aGF0IHVwc3RyZWFtIGRlcGVuZGVuY3kgaXMgY3J1Y2lhbCB0byBncmFzcGluZyB0aGUgb3ZlcmFsbCBzeXN0ZW0gYmVoYXZpb3IuIFdoZXJlIGlzIHRoaXMgZmxhZyBhY3R1YWxseSBiZWluZyBzZXQ/IExldCYjMzk7cyBkaWcgaW4gYW5kIGZpbmQgdGhlIGRlcGVuZGVuY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBYRlJNX09GRkxPQUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0zNjk9Y29uZmlnIElORVRfRVNQX09GRkxPQURcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM3MS1cdGRlcGVuZHMgb24gSU5FVF9FU1Bcbm5ldC9pcHY0L0tjb25maWc6MzcyOlx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxubmV0L2lwdjQvS2NvbmZpZy0zNzMtXHRkZWZhdWx0IG5cbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTc3PWNvbmZpZyBJTkVUNl9FU1BfT0ZGTE9BRFxuLS1cbm5ldC9pcHY2L0tjb25maWctNzktXHRkZXBlbmRzIG9uIElORVQ2X0VTUFxubmV0L2lwdjYvS2NvbmZpZzo4MDpcdHNlbGVjdCBYRlJNX09GRkxPQURcbm5ldC9pcHY2L0tjb25maWctODEtXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI2NDgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFU1AgT2ZmbG9hZCBDb25maWd1cmF0aW9uIC0gVGhlIFBhdGggRm9yd2FyZCoqCgpSaWdodCwgc28gaXQmIzM5O3MgYmVjb21lIGNsZWFyOiBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUNl9FU1BfT0ZGTE9BRGAgYm90aCBhdXRvbWF0aWNhbGx5IHRyaWdnZXIgYFhGUk1fT0ZGTE9BRGAuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgdGhlIG9mZmxvYWQgZnVuY3Rpb25hbGl0eSBpcyBrZXkuIFRoZXJlZm9yZSwgZW5hYmxpbmcgdGhvc2UgdHdvIG9wdGlvbnMgaXMgdGhlIG9idmlvdXMgbmV4dCBzdGVwLiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhhdCwgdGhvdWdoLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgYW5kIG1ha2Ugc3VyZSBub3RoaW5nIGVsc2UgaXMgYWxzbyBzZWxlY3RpbmcgYFhGUk1fT0ZGTE9BRGAuIFRoZXJlIG1pZ2h0IGJlIG90aGVyIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Ygb3Igb3RoZXIgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZmlndXJhdGlvbiBjaGFuZ2UgdGhhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIEJlc3QgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFhGUk1fT0ZGTE9BRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODkzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRVNQIE9mZmxvYWQgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBob25pbmcgaW4gb24gdGhlIEVTUCBvZmZsb2FkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgdGhlIGtleSBwbGF5ZXJzIGhlcmUgc2VlbSB0byBiZSBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUNl9FU1BfT0ZGTE9BRGAuIEhvd2V2ZXIsIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGluY2x1ZGUgYElORVRfRVNQX09GRkxPQURgLCBgSU5FVDZfRVNQX09GRkxPQURgLCBhbG9uZyB3aXRoIHRoZSBjcnVjaWFsIGBYRlJNX1VTRVJgIGFuZCBgWEZSTWAgb3B0aW9ucywgYXMgdGhleSYjMzk7cmUgZm91bmRhdGlvbmFsIGZvciB0aGUgdHJhbnNmb3JtIGxheWVyLiBXYWl0IGEgbWludXRlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55IGRlcGVuZGVuY2llcyAtIEkgYWxzbyBuZWVkIHRvIGluY2x1ZGUgYElORVRfRVNQYCBhbmQgYElORVQ2X0VTUGAgYXMgd2VsbC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gYW5kIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZSBmb3IgdGhlIGBJTkVUX0VTUF9PRkZMT0FEYCBkZXBlbmRlbmN5LCBqdXN0IHRvIHNvbGlkaWZ5IG15IG1lbnRhbCBtb2RlbC4gVGhpcyB3YXkgSSBjYW4gdmVyaWZ5IG15IHVuZGVyc3RhbmRpbmcgYW5kIGF2b2lkIG1ha2luZyBhbnkgbWlzdGFrZXMgaW4gbXkgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVRfRVNQX09GRkxPQUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0zNTQ9Y29uZmlnIElORVRfRVNQXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zNjgtXG5uZXQvaXB2NC9LY29uZmlnOjM2OTpjb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxubmV0L2lwdjQvS2NvbmZpZy0zNzAtXHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzMzYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2MjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEVTUCBPZmZsb2FkIENvbmZpZ3VyYXRpb24gYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgRVNQIG9mZmxvYWQgaXMgY29uZmlndXJlZC4gSXQgbG9va3MgbGlrZSBgSU5FVF9FU1BfT0ZGTE9BRGAgaXMgYSB0cmlzdGF0ZSB3aXRoIGEgcHJvbXB0LiBJIHNob3VsZCBhZGQgYm90aCBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUNl9FU1BfT0ZGTE9BRGAgdG8gdGhlIEVuYWJsZUNvbmZpZ3MuIFRoYXQgbWFrZXMgc2Vuc2UsIHRob3NlIGFyZSB0aGUga2V5IHRoaW5ncyB0byBlbmFibGUuCgpMZXQmIzM5O3MgZG8gYSBxdWljayByZWNhcCBvZiB0aGUgY29uZmlncyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoOiBgWEZSTWAsIGBYRlJNX1VTRVJgLCBgSU5FVF9FU1BgLCBgSU5FVF9FU1BfT0ZGTE9BRGAsIGBJTkVUNl9FU1BgLCBhbmQgYElORVQ2X0VTUF9PRkZMT0FEYC4KCkhtbSwgd2FpdC4gYFhGUk1fT0ZGTE9BRGAgaXMgYWN0dWFsbHkgc2VsZWN0ZWQgYnkgYElORVRfRVNQX09GRkxPQURgLiBTaG91bGQgSSBib3RoZXIgcHV0dGluZyBpdCBvbiB0aGUgbGlzdD8gTm8sIGl0IGRvZXNuJiMzOTt0IGhhdmUgYSBwcm9tcHQsIHNvIGl0IGNhbiYjMzk7dCBiZSBkaXJlY3RseSBlbmFibGVkIGluIHRoZSBgLmNvbmZpZ2AgZmlsZS4gSXQgKmhhcyogdG8gYmUgc2VsZWN0ZWQgYnkgZWl0aGVyIGBJTkVUX0VTUF9PRkZMT0FEYCBvciBgSU5FVDZfRVNQX09GRkxPQURgLiBPa2F5LCBzbyBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUNl9FU1BfT0ZGTE9BRGAgYXJlIHRoZSByaWdodCBvbmVzIHRvIGZvY3VzIG9uLgoKTm93LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGFuZCBleGFtaW5lIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgYW5kIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYC4gR29vZCwgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpcyBleHBvcnRlZCBhbmQgaXNuJiMzOTt0IHN0YXRpYy4gYHhmcm1fZGV2X3N0YXRlX2ZyZWVgIGlzIGFsc28gbm90IHN0YXRpYy4gU28sIGJvdGggb2YgdGhlc2UgYXJlIHBvdGVudGlhbCBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIGFuYWx5c2lzLgoKV2FpdCBhIHNlY29uZCwgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgIGlzIGNhbGxlZCBmcm9tIGB4ZnJtX3N0YXRlX2djX2Rlc3Ryb3lgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGB4ZnJtX3N0YXRlX2djX3Rhc2tgLiBBbmQgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpcyBjYWxsZWQgZnJvbSBgeGZybV9kZXZfZG93bmAgYW5kIGB4ZnJtX2Rldl91bnJlZ2lzdGVyYC4gT2theS4gQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCB3ZXJlIG1vZGlmaWVkPyBObywganVzdCB0aG9zZSB0d28uCgpPa2F5LCBub3cgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayBpZiBgeGZybV9kZXZfc3RhdGVfZnJlZWAgaXMgaW5saW5lZC4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQmIzM5O3MgZGVmaW5lZCBpbiBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYCBhbmQgaXMgYWxzbyBjYWxsZWQgZnJvbSB0aGVyZS4gSXQmIzM5O3MgYWN0dWFsbHkgY2FsbGVkIGZyb20gYHhmcm1fc3RhdGVfZ2NfZGVzdHJveWAgKmFuZCogYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBzbyB0aGUgZnVuY3Rpb24gaXMgaW4gYHhmcm1fc3RhdGUuY2AuIENhbiB0aGUgY29tcGlsZXIgaW5saW5lIHRoaXM/IEl0JiMzOTtzIG5vdCBtYXJrZWQgYGlubGluZWAuIEl0IGlzIGEgcmVndWxhciBmdW5jdGlvbi4gVGhlIHF1ZXN0aW9uIG5vdyBpcyBpZiBpdCYjMzk7cyBleHBvcnRlZC4gTm9wZSwgaXQmIzM5O3Mgbm90IGV4cG9ydGVkLiBCdXQgaXQmIzM5O3MgYWxzbyAqbm90KiBzdGF0aWMsIHNvIHRoZSBjb21waWxlciBjYW4mIzM5O3QgaW5saW5lIGl0IGFjcm9zcyB0cmFuc2xhdGlvbiB1bml0cy4gSG93ZXZlciwgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBvbmx5IGNhbGxlZCBmcm9tIHdpdGhpbiBgeGZybV9zdGF0ZS5jYC4gV2FpdCwgaXMgdGhhdCB0cnVlPyBMZXQgbWUgdmVyaWZ5LiBJcyBpdCBkZWNsYXJlZCBpbiBhIGhlYWRlcj8gSSBuZWVkIHRvIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX2Rldl9zdGF0ZV9mcmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3hmcm0uaD0yMTMxPXZvaWQgeGZybV9kZXZfc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTtcbmluY2x1ZGUvbmV0L3hmcm0uaDoyMTMyOnZvaWQgeGZybV9kZXZfc3RhdGVfZnJlZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCk7XG5pbmNsdWRlL25ldC94ZnJtLmgtMjEzMy1cbi0tXG5pbmNsdWRlL25ldC94ZnJtLmg9MjIwMz1zdGF0aWMgaW5saW5lIHZvaWQgeGZybV9kZXZfc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuLS1cbmluY2x1ZGUvbmV0L3hmcm0uaC0yMjA2LVxuaW5jbHVkZS9uZXQveGZybS5oOjIyMDc6c3RhdGljIGlubGluZSB2b2lkIHhmcm1fZGV2X3N0YXRlX2ZyZWUoc3RydWN0IHhmcm1fc3RhdGUgKngpXG5pbmNsdWRlL25ldC94ZnJtLmgtMjIwOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODE1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqWEZSTSBLZXkgTGVuZ3RocyBhbmQgSW5saW5lIEZ1bmN0aW9ucyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhlIFhGUk0gY29kZSwgc3BlY2lmaWNhbGx5IGtleSBsZW5ndGhzLiBUaGUgZGVjbGFyYXRpb24gSSBuZWVkIGlzIGluIGBpbmNsdWRlL25ldC94ZnJtLmhgLiBPa2F5LCBnb3QgaXQuIEhtbSwgaW50ZXJlc3RpbmcuLi4gdGhlcmUmIzM5O3MgYSAqc3RhdGljIGlubGluZSogdmVyc2lvbiBkZWZpbmVkIGFzIHdlbGw/IFRoYXQmIzM5O3MgYSBjbGFzc2ljIG9wdGltaXphdGlvbiB0ZWNobmlxdWUsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiBib3RoIHRoZSBtYWluIGRlY2xhcmF0aW9uIGFuZCB0aGUgaW5saW5lIHZhcmlhbnQuIEdvdHRhIHNlZSBob3cgdGhleSBpbnRlcmFjdC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIuIFRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJJiMzOTtsbCBqdW1wIHRvIGFyb3VuZCBsaW5lIDIyMDcgaW4gYGluY2x1ZGUvbmV0L3hmcm0uaGAgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkZXRhaWxzIEkgbmVlZCB0byBldmFsdWF0ZSB0aGUgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBhbmQgZmlndXJlIG91dCBleGFjdGx5IGhvdyB0aGVzZSBrZXkgbGVuZ3RocyBhcmUgaGFuZGxlZCBhbmQgb3B0aW1pemVkIHdpdGhpbiB0aGUgWEZSTSBmcmFtZXdvcmsuIFRoaXMgaXMgYSBjcml0aWNhbCBhcmVhIGZvciBwZXJmb3JtYW5jZSwgc28gdW5kZXJzdGFuZGluZyB0aGUgaW5saW5lIGltcGxpY2F0aW9ucyBpcyBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQveGZybS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTk1Olx0XG4yMTk2Olx0c3RhdGljIGlubGluZSBpbnQgeGZybV9kZXZfc3RhdGVfYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHhmcm1fc3RhdGUgKngsXG4yMTk3Olx0XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCB4ZnJtX3VzZXJfb2ZmbG9hZCAqeHVvLFxuMjE5ODpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4yMTk5Olx0e1xuMjIwMDpcdFx0cmV0dXJuIDA7XG4yMjAxOlx0fVxuMjIwMjpcdFxuMjIwMzpcdHN0YXRpYyBpbmxpbmUgdm9pZCB4ZnJtX2Rldl9zdGF0ZV9kZWxldGUoc3RydWN0IHhmcm1fc3RhdGUgKngpXG4yMjA0Olx0e1xuMjIwNTpcdH1cbjIyMDY6XHRcbjIyMDc6XHRzdGF0aWMgaW5saW5lIHZvaWQgeGZybV9kZXZfc3RhdGVfZnJlZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbjIyMDg6XHR7XG4yMjA5Olx0fVxuMjIxMDpcdFxuMjIxMTpcdHN0YXRpYyBpbmxpbmUgaW50IHhmcm1fZGV2X3BvbGljeV9hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLFxuMjIxMjpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHhmcm1fdXNlcl9vZmZsb2FkICp4dW8sIHU4IGRpcixcbjIyMTM6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjIyMTQ6XHR7XG4yMjE1Olx0XHRyZXR1cm4gMDtcbjIyMTY6XHR9XG4yMjE3Olx0XG4yMjE4Olx0c3RhdGljIGlubGluZSB2b2lkIHhmcm1fZGV2X3BvbGljeV9kZWxldGUoc3RydWN0IHhmcm1fcG9saWN5ICp4KVxuMjIxOTpcdHtcbjIyMjA6XHR9XG4yMjIxOlx0XG4yMjIyOlx0c3RhdGljIGlubGluZSB2b2lkIHhmcm1fZGV2X3BvbGljeV9mcmVlKHN0cnVjdCB4ZnJtX3BvbGljeSAqeClcbjIyMjM6XHR7XG4yMjI0Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTUzNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgeGZybSBPZmZsb2FkIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgYHN0YXRpYyBpbmxpbmVgIHZlcnNpb24gaXMgYmVpbmcgdXNlZCBzcGVjaWZpY2FsbHkgd2hlbiBgQ09ORklHX1hGUk1fT0ZGTE9BRGAgaXNuJiMzOTt0IGRlZmluZWQuIFRoYXQgc3VnZ2VzdHMgdGhhdCB0aGVyZSYjMzk7cyBhbiBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgcHJlc3VtYWJseSBvcHRpbWl6ZWQgZm9yIGhhcmR3YXJlIG9mZmxvYWQsIHRoYXQga2lja3MgaW4gd2hlbiB0aGUgb2ZmbG9hZCBmZWF0dXJlICppcyogZW5hYmxlZC4gVGhpcyBiZWdzIHRoZSBxdWVzdGlvbjogV2hhdCYjMzk7cyB0aGUgZXhhY3QgbmF0dXJlIG9mIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBpbmxpbmUgdmVyc2lvbiBhbmQgdGhlIG9mZmxvYWQgdmVyc2lvbi4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgYCNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEYCBibG9jayBpbiBgaW5jbHVkZS9uZXQveGZybS5oYCB0byBzZWUgaG93IHRoZXNlIGFyZSBoYW5kbGVkIGFuZCBleGFjdGx5IGhvdyB0aGUgY29kZSBicmFuY2hlcy4gVGhlIGhlYWRlciBmaWxlIHNob3VsZCBnaXZlIG1lIHRoZSBmdWxsIHBpY3R1cmUuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgc3BlY2lmaWMgcGllY2UgZml0cyBpbnRvIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfWEZSTV9PRkZMT0FEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQveGZybS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3hmcm0uaD0xNzIxPXZvaWQgeGZybV9zdGF0ZV91cGRhdGVfc3RhdHMoc3RydWN0IG5ldCAqbmV0KTtcbmluY2x1ZGUvbmV0L3hmcm0uaDoxNzIyOiNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXG5pbmNsdWRlL25ldC94ZnJtLmgtMTcyMy1zdGF0aWMgaW5saW5lIHZvaWQgeGZybV9kZXZfc3RhdGVfdXBkYXRlX3N0YXRzKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuLS1cbmluY2x1ZGUvbmV0L3hmcm0uaD0yMTE4PXZvaWQgX19pbml0IHhmcm1fZGV2X2luaXQodm9pZCk7XG5pbmNsdWRlL25ldC94ZnJtLmgtMjExOS1cbmluY2x1ZGUvbmV0L3hmcm0uaDoyMTIwOiNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXG5pbmNsdWRlL25ldC94ZnJtLmgtMjEyMS12b2lkIHhmcm1fZGV2X3Jlc3VtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYwMTEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBpdHMgZGVmaW5pdGlvbiBpcyBjb25kaXRpb25hbC4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIHdhcyB0aGF0IHRoaXMgZnVuY3Rpb24gb25seSBleGlzdGVkIGlmIGBDT05GSUdfWEZSTV9PRkZMT0FEYCB3YXMgZW5hYmxlZC4gQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gSSAqc3dlYXIqIEkgc2F3IGl0IGRlZmluZWQgZWxzZXdoZXJlLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC94ZnJtL3hmcm1fc3RhdGUuY2AsIGFuZCBpdCAqd2FzbiYjMzk7dCogd3JhcHBlZCBpbiBhbiBgI2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURgIGJsb2NrLiBUaGlzIGlzIHRocm93aW5nIG1lIG9mZi4KCkkgbmVlZCB0byBjb25maXJtIHRoaXMgZGlzY3JlcGFuY3kuIExldCBtZSBwdWxsIHVwIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA3ODAuIEkmIzM5O2xsIHNlZSBpZiBJIGNhbiBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIGZ1bmN0aW9uJiMzOTtzIGV4aXN0ZW5jZSBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGhhcyBiZWVuIGRlZmluZWQuIFRoaXMgY291bGQgYmUgYSBjcml0aWNhbCBtaXN1bmRlcnN0YW5kaW5nIG9uIG15IHBhcnQsIG9yIGEgc3VidGxlIG51YW5jZSBpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiB0aGF0IEkmIzM5O20gbWlzc2luZy4gVGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fc3RhdGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzYwOlx0XHR9XG4gNzYxOlx0XHRyZXR1cm4geDtcbiA3NjI6XHR9XG4gNzYzOlx0RVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX2FsbG9jKTtcbiA3NjQ6XHRcbiA3NjU6XHQjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxuIDc2NjpcdHZvaWQgeGZybV9kZXZfc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuIDc2NzpcdHtcbiA3Njg6XHRcdHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkICp4c28gPSBcdTAwMjZ4LVx1MDAzZXhzbztcbiA3Njk6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBSRUFEX09OQ0UoeHNvLVx1MDAzZWRldik7XG4gNzcwOlx0XG4gNzcxOlx0XHRpZiAoZGV2KSB7XG4gNzcyOlx0XHRcdGRldi1cdTAwM2V4ZnJtZGV2X29wcy1cdTAwM2V4ZG9fZGV2X3N0YXRlX2RlbGV0ZShkZXYsIHgpO1xuIDc3MzpcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XG4gNzc0Olx0XHRcdGhsaXN0X2FkZF9oZWFkKFx1MDAyNngtXHUwMDNlZGV2X2djbGlzdCwgXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbGlzdCk7XG4gNzc1Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuIDc3NjpcdFx0fVxuIDc3NzpcdH1cbiA3Nzg6XHRFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX2Rldl9zdGF0ZV9kZWxldGUpO1xuIDc3OTpcdFxuIDc4MDpcdHZvaWQgeGZybV9kZXZfc3RhdGVfZnJlZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbiA3ODE6XHR7XG4gNzgyOlx0XHRzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCAqeHNvID0gXHUwMDI2eC1cdTAwM2V4c287XG4gNzgzOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gUkVBRF9PTkNFKHhzby1cdTAwM2VkZXYpO1xuIDc4NDpcdFxuIDc4NTpcdFx0aWYgKGRldiBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZXhmcm1kZXZfb3BzKSB7XG4gNzg2Olx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcbiA3ODc6XHRcdFx0aWYgKCFobGlzdF91bmhhc2hlZChcdTAwMjZ4LVx1MDAzZWRldl9nY2xpc3QpKVxuIDc4ODpcdFx0XHRcdGhsaXN0X2RlbF9pbml0KFx1MDAyNngtXHUwMDNlZGV2X2djbGlzdCk7XG4gNzg5Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuIDc5MDpcdFxuIDc5MTpcdFx0XHRpZiAoZGV2LVx1MDAzZXhmcm1kZXZfb3BzLVx1MDAzZXhkb19kZXZfc3RhdGVfZnJlZSlcbiA3OTI6XHRcdFx0XHRkZXYtXHUwMDNleGZybWRldl9vcHMtXHUwMDNleGRvX2Rldl9zdGF0ZV9mcmVlKGRldiwgeCk7XG4gNzkzOlx0XHRcdFdSSVRFX09OQ0UoeHNvLVx1MDAzZWRldiwgTlVMTCk7XG4gNzk0Olx0XHRcdHhzby1cdTAwM2V0eXBlID0gWEZSTV9ERVZfT0ZGTE9BRF9VTlNQRUNJRklFRDtcbiA3OTU6XHRcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNnhzby1cdTAwM2VkZXZfdHJhY2tlcik7XG4gNzk2Olx0XHR9XG4gNzk3Olx0fVxuIDc5ODpcdCNlbmRpZlxuIDc5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzA4NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGluIFhGUk0gT2ZmbG9hZCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBwaW5wb2ludGVkIHRoYXQgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgICppcyogaW5kZWVkIHdyYXBwZWQgd2l0aGluIHRoZSBgI2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURgIGJsb2NrLiBDb25maXJtZWQ7IGl0IGNvbmNsdWRlcyBhcm91bmQgbGluZSA3OTguIFRoYXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIEhvd2V2ZXIsIEkmIzM5O3ZlIG5vdGljZWQgc29tZXRoaW5nIHNsaWdodGx5IGRpZmZlcmVudCB3aXRoIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAuIEl0JiMzOTtzICpvdXRzaWRlKiB0aGF0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBUaGF0IGluaXRpYWxseSB0aHJldyBtZSwgYnV0IHRoZW4gSSByZW1lbWJlcmVkIGl0ICpjYWxscyogYHhmcm1fZGV2X3N0YXRlX2ZyZWVgLCB3aGljaCBpcyBhIGBzdGF0aWMgaW5saW5lYCBmdW5jdGlvbi4gQWhhISBTbywgaWYgYENPTkZJR19YRlJNX09GRkxPQURgIGlzbiYjMzk7dCBzZXQsIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCBlZmZlY3RpdmVseSBiZWNvbWVzIGEgbm8tb3AsIHJpZ2h0PwoKQnV0IHRoYXQgc3RpbGwgYmVncyB0aGUgcXVlc3Rpb24uIElmIG9mZmxvYWQgaXMgZGlzYWJsZWQsIGlzIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgYWN0dWFsbHkgbG9vcGluZyB0aHJvdWdoIGFueXRoaW5nPyBEb2VzIGl0IGV2ZW4gaXRlcmF0ZSBvdmVyIGB4ZnJtX3N0YXRlX2Rldl9nY19saXN0YCB3aGVuIGl0ICpzaG91bGRuJiMzOTt0KiBiZSBkb2luZyBhbnl0aGluZz8gSSYjMzk7ZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBiZWhhdmlvciBvZiBgeGZybV9zdGF0ZV9kZXZfZ2NfbGlzdGAgdW5kZXIgdGhhdCBzY2VuYXJpby4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9zdGF0ZV9kZXZfZ2NfbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3N0YXRlLmM9NTM9c3RhdGljIEhMSVNUX0hFQUQoeGZybV9zdGF0ZV9nY19saXN0KTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo1NDpzdGF0aWMgSExJU1RfSEVBRCh4ZnJtX3N0YXRlX2Rldl9nY19saXN0KTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy01NS1cbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9NzY2PXZvaWQgeGZybV9kZXZfc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy03NzMtXHRcdHNwaW5fbG9ja19iaChcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo3NzQ6XHRcdGhsaXN0X2FkZF9oZWFkKFx1MDAyNngtXHUwMDNlZGV2X2djbGlzdCwgXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbGlzdCk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtNzc1LVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9OTYxPWludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpZClcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTAwNC1yZXN0YXJ0X2djOlxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjEwMDU6XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHgsIHRtcCwgXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbGlzdCwgZGV2X2djbGlzdCkge1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEwMDYtXHRcdHhzbyA9IFx1MDAyNngtXHUwMDNleHNvO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk0OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYHhmcm1fc3RhdGVfZGV2X2djX2xpc3RgIFZ1bG5lcmFiaWxpdHkgYW5kIEZpeCoqCgpPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyBgeGZybV9zdGF0ZV9kZXZfZ2NfbGlzdGAgaXMgYWx3YXlzIGRlZmluZWQsIHdoaWNoIGlzIGdvb2QuIEhvd2V2ZXIsIHRoZSBjcml0aWNhbCBgaGxpc3RfYWRkX2hlYWRgIGNhbGwsIGBobGlzdF9hZGRfaGVhZCgmYW1wO3gtJmd0O2Rldl9nY2xpc3QsICZhbXA7eGZybV9zdGF0ZV9kZXZfZ2NfbGlzdClgLCBvbmx5IGhhcHBlbnMgd2l0aGluIGB4ZnJtX2Rldl9zdGF0ZV9kZWxldGVgLiBBbmQgdGhhdCBmdW5jdGlvbiBpcyBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRGAuCgpTbywgaXQmIzM5O3MgcHJldHR5IGNsZWFyOiBpZiBgQ09ORklHX1hGUk1fT0ZGTE9BRGAgaXNuJiMzOTt0IGVuYWJsZWQsIHRoYXQgbGlzdCBpcyAqYWx3YXlzKiBlbXB0eS4gVGhhdOKAmXMgYSBrZXkgb2JzZXJ2YXRpb24uIFRoaXMgbWVhbnMgYENPTkZJR19YRlJNX09GRkxPQURgIGlzIGFic29sdXRlbHkgbmVjZXNzYXJ5IGZvciB0aGUgYnVnIGFuZCwgY29uc2VxdWVudGx5LCB0aGUgZml4LCB0byBldmVuIGNvbWUgaW50byBwbGF5LiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHByZXJlcXVpc2l0ZS4KClRoZXJlZm9yZSwgd2UgaGF2ZSBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2NlbmFyaW8gdG8gdGFyZ2V0IHRvIHJlcHJvZHVjZSB0aGlzLiBXZSBuZWVkIGF0IGEgbWluaW11bToKLSBgWEZSTWAKLSBgWEZSTV9VU0VSYAotIGBJTkVUX0VTUGAKLSBgSU5FVF9FU1BfT0ZGTE9BRGAKLSBgSU5FVDZfRVNQYAotIGBJTkVUNl9FU1BfT0ZGTE9BRGAKCkJ1dCB0aGVuIGEgdGhvdWdodCBjb21lcyB0byBtaW5kLiBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUNl9FU1BfT0ZGTE9BRGAgKnNlbGVjdCogYFhGUk1fT0ZGTE9BRGAsIHNvIHRoZXkgYXJlIGxpbmtlZCBhbmQgdGhhdCBzZWVtcyByZWFzb25hYmxlLiBCdXQgYXJlIHRoZXJlIG90aGVyLCBsZXNzIG9idmlvdXMsIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYWxzbyBzZWxlY3QgYFhGUk1fT0ZGTE9BRGA/IEl0JiMzOTtzIGVzc2VudGlhbCB0byBjb25maXJtIHRoYXQgbm90aGluZyBlbHNlIGluYWR2ZXJ0ZW50bHkgdHJpZ2dlcnMgdGhlIHNhbWUgYmVoYXZpb3IuIE5lZWQgdG8gdmVyaWZ5IHRoYXQgYFhGUk1fT0ZGTE9BRGAgaXNuJiMzOTt0IGluZGlyZWN0bHkgc2VsZWN0ZWQgYnkgc29tZXRoaW5nIGVsc2UuIFRoYXQgY291bGQgb3BlbiB1cCBhIG11Y2ggd2lkZXIgYXR0YWNrIHN1cmZhY2UgdGhhbiBpbml0aWFsbHkgYW50aWNpcGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBYRlJNX09GRkxPQUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0zNjk9Y29uZmlnIElORVRfRVNQX09GRkxPQURcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM3MS1cdGRlcGVuZHMgb24gSU5FVF9FU1Bcbm5ldC9pcHY0L0tjb25maWc6MzcyOlx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxubmV0L2lwdjQvS2NvbmZpZy0zNzMtXHRkZWZhdWx0IG5cbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTc3PWNvbmZpZyBJTkVUNl9FU1BfT0ZGTE9BRFxuLS1cbm5ldC9pcHY2L0tjb25maWctNzktXHRkZXBlbmRzIG9uIElORVQ2X0VTUFxubmV0L2lwdjYvS2NvbmZpZzo4MDpcdHNlbGVjdCBYRlJNX09GRkxPQURcbm5ldC9pcHY2L0tjb25maWctODEtXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3ODgKCQkJCQkJCW91dHB1dDogMTg5CgkJCQkJCQl0aG91Z2h0czogNjc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBYRlJNIE9mZmxvYWQgUGF0Y2gqKgoKT2theSwgc28gdGhlIHByaW1hcnkgZm9jdXMgaGVyZSBpcyBhIGZpeCByZWxhdGVkIHRvIGEgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSB3aXRoaW4gdGhlIFhGUk0gZGV2aWNlIHN0YXRlIGdhcmJhZ2UgY29sbGVjdGlvbi4gIFRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGFyZSBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGFuZCBgeGZybV9kZXZfc3RhdGVfZnJlZWAuICBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IHRhcmdldHMgWEZSTSBvZmZsb2FkIHN0YXRlIGNsZWFudXAsIHNvIHRoYXQgbWVhbnMgYElORVRfRVNQX09GRkxPQURgIGFuZCBgSU5FVDZfRVNQX09GRkxPQURgIG11c3QgYmUgZW5hYmxlZCB0byB0cmlnZ2VyIHRoZSB2dWxuZXJhYmxlIGNvZGUuIFRob3NlIHNlZW0gdG8gYmUgdGhlIGNyaXRpY2FsIGVuYWJsaW5nIGNvbmRpdGlvbnMuCgpJbml0aWFsbHksIEkgemVyb2VkIGluIG9uIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgYW5kIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCBhcyB0aGUgZm9jdXMgc3ltYm9scyBiZWNhdXNlIHRoZXkgYXJlIGRpcmVjdGx5IG1vZGlmaWVkIGJ5IHRoZSBwYXRjaC4gSSB2ZXJpZmllZCBib3RoLiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIGV4cG9ydGVkLCBtYWtpbmcgaXQgZWFzeSB0byByZWZlcmVuY2UuIFdoaWxlIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCBpc24mIzM5O3QgZXhwbGljaXRseSBleHBvcnRlZCwgdGhlIGZhY3QgdGhhdCBpdCBpcyAqbm9uLXN0YXRpYyogbWVhbnMgaXQgd2lsbCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIG1ha2luZyBpdCBhIHZhbGlkIGZvY3VzIHN5bWJvbCB0b28uIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIGl0cyBkZWZpbml0aW9uIHdpdGhpbiBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYCBhbmQgY29uZmlybWVkIGl0JiMzOTtzIG5vdCBpbmxpbmUuCgpMb29raW5nIGF0IHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9ucywgSSByZWFsaXplZCB0aGF0IEkgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlIG1ldC4gU2luY2Ugd2UgbmVlZCBvZmZsb2FkLCB0aGF0IG1lYW5zIHdlIG5lZWQgYElORVRfRVNQYCBhbmQgYElORVQ2X0VTUGAgd2hpY2ggaW4gdHVybiBuZWVkIGBJTkVUYCwgYElORVQ2YCBhbmQgYFhGUk1gLiBgWEZSTV9VU0VSYCBpcyBpbmNsdWRlZCBiZWNhdXNlIGl0JiMzOTtzIHJlcXVpcmVkIGZvciBjb25maWd1cmluZyBYRlJNIHN0YXRlcyBmcm9tIHVzZXJzcGFjZS4gQWxsIG9mIHRoZXNlIGNvbmZpZ3MgbG9vayBjb3JyZWN0LiAgVGhlIG92ZXJhbGwgcmVhc29uaW5nIGluIHRoZSBjb25maWd1cmF0aW9uIGlzIGFjY3VyYXRlOiBlbmFibGluZyBvZmZsb2FkIHN1cHBvcnQgdmlhIGBJTkVUX0VTUF9PRkZMT0FEYCBhbmQgYElORVQ2X0VTUF9PRkZMT0FEYCBpcyBlc3NlbnRpYWwgdG8gcmVhY2ggdGhlIHRhcmdldGVkIGNvZGUuCgpJJiMzOTt2ZSByZXZpZXdlZCB0aGUgY29kZS4gRXZlcnl0aGluZyBjaGVja3Mgb3V0LiAgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpcyBpbmRlZWQgZXhwb3J0ZWQgYW5kIGRlZmluZWQgaW4gYG5ldC94ZnJtL3hmcm1fc3RhdGUuY2AgYW5kIGlzIG5vdCBpbmxpbmUuCgpJJiMzOTttIGNvbmZpZGVudCBpbiB0aGlzIGFuYWx5c2lzLiBJIHdpbGwgbW92ZSB0byBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUF9PRkZMT0FEJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1BfT0ZGTE9BRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fZGV2X3N0YXRlX2ZsdXNoJiMzNDssCiAgICAmIzM0O3hmcm1fZGV2X3N0YXRlX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBpbiBYRlJNIGRldmljZSBzdGF0ZSBnYXJiYWdlIGNvbGxlY3Rpb24uIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgeGZybV9kZXZfc3RhdGVfZmx1c2ggYW5kIHhmcm1fZGV2X3N0YXRlX2ZyZWUgaGFuZGxlIFhGUk0gb2ZmbG9hZCBzdGF0ZSBjbGVhbnVwLiBUbyByZWFjaCB0aGlzIGNvZGUsIFhGUk0gb2ZmbG9hZCBzdXBwb3J0IG11c3QgYmUgZW5hYmxlZCAoQ09ORklHX1hGUk1fT0ZGTE9BRCksIHdoaWNoIGlzIHNlbGVjdGVkIGJ5IElORVRfRVNQX09GRkxPQUQgYW5kIElORVQ2X0VTUF9PRkZMT0FELiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUF9PRkZMT0FEJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1BfT0ZGTE9BRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fZGV2X3N0YXRlX2ZsdXNoJiMzNDssCiAgICAmIzM0O3hmcm1fZGV2X3N0YXRlX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBpbiBYRlJNIGRldmljZSBzdGF0ZSBnYXJiYWdlIGNvbGxlY3Rpb24uIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgeGZybV9kZXZfc3RhdGVfZmx1c2ggYW5kIHhmcm1fZGV2X3N0YXRlX2ZyZWUgaGFuZGxlIFhGUk0gb2ZmbG9hZCBzdGF0ZSBjbGVhbnVwLiBUbyByZWFjaCB0aGlzIGNvZGUsIFhGUk0gb2ZmbG9hZCBzdXBwb3J0IG11c3QgYmUgZW5hYmxlZCAoQ09ORklHX1hGUk1fT0ZGTE9BRCksIHdoaWNoIGlzIHNlbGVjdGVkIGJ5IElORVRfRVNQX09GRkxPQUQgYW5kIElORVQ2X0VTUF9PRkZMT0FELiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbGlmZXRpbWUgaXNzdWUgKHVzZS1hZnRlci1mcmVlKSBpbiB0aGUgWEZSTSBzdGF0ZSBnYXJiYWdlIGNvbGxlY3Rpb24gbG9naWMuIEl0IGNoYW5nZXMgYGhsaXN0X2RlbGAgdG8gYGhsaXN0X2RlbF9pbml0YCB0byBwcmV2ZW50IGlzc3VlcyB3aXRoIG11bHRpcGxlIGRlbGV0aW9ucyBhbmQgYWRkcyByZWZlcmVuY2UgY291bnRpbmcgKGB4ZnJtX3N0YXRlX2hvbGRfcmN1YCBhbmQgYHhmcm1fc3RhdGVfcHV0YCkgYXJvdW5kIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCB0byBlbnN1cmUgdGhlIG9iamVjdCBpcyBub3QgZnJlZWQgd2hpbGUgYmVpbmcgYWNjZXNzZWQuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgdnVsbmVyYWJpbGl0aWVzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcyBiZWluZyByZWFkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MjAzNTA4MzFhM2VjMWZiMDRjMGY0MTdiYTZlYzljYmM2NWIwZWY3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgOSAwODoxOTowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwppbmRleCAzNmE0ZjY3OTNlZGVmLi4wMTEzOGQzZDEwNjczIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3N0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jCkBAIC03ODUsNyAmIzQzOzc4NSw3IEBAIHZvaWQgeGZybV9kZXZfc3RhdGVfZnJlZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCkKIAlpZiAoZGV2ICZhbXA7JmFtcDsgZGV2LSZndDt4ZnJtZGV2X29wcykgewogCQlzcGluX2xvY2tfYmgoJmFtcDt4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTsKIAkJaWYgKCFobGlzdF91bmhhc2hlZCgmYW1wO3gtJmd0O2Rldl9nY2xpc3QpKQotCQkJaGxpc3RfZGVsKCZhbXA7eC0mZ3Q7ZGV2X2djbGlzdCk7CiYjNDM7CQkJaGxpc3RfZGVsX2luaXQoJmFtcDt4LSZndDtkZXZfZ2NsaXN0KTsKIAkJc3Bpbl91bmxvY2tfYmgoJmFtcDt4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTsKIAogCQlpZiAoZGV2LSZndDt4ZnJtZGV2X29wcy0mZ3Q7eGRvX2Rldl9zdGF0ZV9mcmVlKQpAQCAtMTAwNiw4ICYjNDM7MTAwNiwxMyBAQCBpbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaQogCQl4c28gPSAmYW1wO3gtJmd0O3hzbzsKIAogCQlpZiAoeHNvLSZndDtkZXYgPT0gZGV2KSB7CiYjNDM7CQkJLyogVGhlIGRldmljZSBHQyBsaXN0IGRvZXMgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8geC4gKi8KJiM0MzsJCQlpZiAoIXhmcm1fc3RhdGVfaG9sZF9yY3UoeCkpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwogCQkJc3Bpbl91bmxvY2tfYmgoJmFtcDt4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTsKIAkJCXhmcm1fZGV2X3N0YXRlX2ZyZWUoeCk7CiYjNDM7CQkJeGZybV9zdGF0ZV9wdXQoeCk7CiAJCQlzcGluX2xvY2tfYmgoJmFtcDt4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTsKIAkJCWdvdG8gcmVzdGFydF9nYzsKIAkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyNAoJCQkJCQkJb3V0cHV0OiAxNzcKCQkJCQkJCXRob3VnaHRzOiA2NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBBIExpZmV0aW1lIEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIGlzIGFkZHJlc3NpbmcgYSBsaWZldGltZSBpc3N1ZSwgc3BlY2lmaWNhbGx5IGEgdXNlLWFmdGVyLWZyZWUgb3IgcG90ZW50aWFsIGRvdWJsZS1mcmVlIHNjZW5hcmlvLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMgaW4gaG93IGB4ZnJtX3N0YXRlYCBvYmplY3RzIGFyZSBoYW5kbGVkIGluIHRoZSBkZXZpY2UgZ2FyYmFnZSBjb2xsZWN0aW9uLgoKTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIGNvbmZpcm1lZCBieSB0aGUgY29kZSBjaGFuZ2VzLiBJbiBgeGZybV9kZXZfc3RhdGVfZnJlZWAsIHRoZXkmIzM5O3ZlIHJlcGxhY2VkIGEgc2ltcGxlIGBobGlzdF9kZWxgIHdpdGggYGhsaXN0X2RlbF9pbml0YCBmb3IgdGhlIGBkZXZfZ2NsaXN0YC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBpc3N1ZSB3aGVyZSB0aGUgbGlzdCBjb3VsZCBiZSBtYW5pcHVsYXRlZCBhZnRlciBkZWxldGlvbiwgb3IgZG91YmxlIGRlbGV0aW9uIGNvdWxkIG9jY3VyLiBUaGUgYWRkaXRpb24gb2YgYHhmcm1fc3RhdGVfaG9sZF9yY3UoeClgIGFuZCBgeGZybV9zdGF0ZV9wdXQoeClgIHdpdGhpbiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIHRoZSBrZXkuIFRoZSBjb21tZW50IGNvbmZpcm1zIHRoZSBsaXN0IGRvZXNuJiMzOTt0IGhhdmUgYSByZWZlcmVuY2UsIG1lYW5pbmcgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBiZWluZyBhZGRlZCAqYmVmb3JlKiBjYWxsaW5nIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCwgd2hpY2ggY291bGQgc2xlZXAgb3IgcGVyZm9ybSBvdGhlciBvcGVyYXRpb25zLiBTdWJzZXF1ZW50bHksIHRoZSByZWZlcmVuY2UgaXMgcmVtb3ZlZC4KClRoaXMgbG9va3MgbGlrZSBhIGNsYXNzaWMgcmVmLWNvdW50aW5nIHNjaGVtZSwgd2hpY2ggdGVsbHMgbWUgdGhpcyBwYXRjaCBpcyBhZGRpbmcgYSByZWZlcmVuY2UgY291bnQgdG8gYHhgIGJlZm9yZSB0aGUgYHhmcm1fZGV2X3N0YXRlX2ZyZWUoeClgIGNhbGwgaXMgbWFkZS4gVGhpcyBwcmV2ZW50cyBhIHJhY2Ugb3IgYSBVQUYgYnkgZW5zdXJpbmcgdGhlIG9iamVjdCYjMzk7cyBsaWZldGltZSBpcyBtYW5hZ2VkIGNvcnJlY3RseSB3aGlsZSBpdCYjMzk7cyBiZWluZyBhY2Nlc3NlZCBvciBmbHVzaGVkLgoKQmFzZWQgb24gdGhpcywgS0FTQU4gc2VlbXMgdG8gYmUgdGhlIHJpZ2h0IHRvb2wgZm9yIGlkZW50aWZ5aW5nIFVBRiBpc3N1ZXMsIHNvIEkgZG9uJiMzOTt0IHNlZSBhbnkgcmVhc29uIGZvciBLTVNBTiBoZXJlLiBUaGVyZSYjMzk7cyBubyBpbmRpY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhbmQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHJlbWFpbmluZyBVQUYgYnVncy4gVGhlcmVmb3JlLCBJJiMzOTttIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxpZmV0aW1lIGlzc3VlICh1c2UtYWZ0ZXItZnJlZSkgaW4gdGhlIFhGUk0gc3RhdGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGxvZ2ljLiBJdCBjaGFuZ2VzIGBobGlzdF9kZWxgIHRvIGBobGlzdF9kZWxfaW5pdGAgdG8gcHJldmVudCBpc3N1ZXMgd2l0aCBtdWx0aXBsZSBkZWxldGlvbnMgYW5kIGFkZHMgcmVmZXJlbmNlIGNvdW50aW5nIChgeGZybV9zdGF0ZV9ob2xkX3JjdWAgYW5kIGB4ZnJtX3N0YXRlX3B1dGApIGFyb3VuZCBgeGZybV9kZXZfc3RhdGVfZnJlZWAgdG8gZW5zdXJlIHRoZSBvYmplY3QgaXMgbm90IGZyZWVkIHdoaWxlIGJlaW5nIGFjY2Vzc2VkLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgdXNlLWFmdGVyLWZyZWUgYW5kIGRvdWJsZS1mcmVlIHZ1bG5lcmFiaWxpdGllcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMgYmVpbmcgcmVhZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbGlmZXRpbWUgaXNzdWUgKHVzZS1hZnRlci1mcmVlKSBpbiB0aGUgWEZSTSBzdGF0ZSBnYXJiYWdlIGNvbGxlY3Rpb24gbG9naWMuIEl0IGNoYW5nZXMgYGhsaXN0X2RlbGAgdG8gYGhsaXN0X2RlbF9pbml0YCB0byBwcmV2ZW50IGlzc3VlcyB3aXRoIG11bHRpcGxlIGRlbGV0aW9ucyBhbmQgYWRkcyByZWZlcmVuY2UgY291bnRpbmcgKGB4ZnJtX3N0YXRlX2hvbGRfcmN1YCBhbmQgYHhmcm1fc3RhdGVfcHV0YCkgYXJvdW5kIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCB0byBlbnN1cmUgdGhlIG9iamVjdCBpcyBub3QgZnJlZWQgd2hpbGUgYmVpbmcgYWNjZXNzZWQuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgdnVsbmVyYWJpbGl0aWVzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcyBiZWluZyByZWFkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoxOTowNi40MDEyNjY2NzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDI5MzM4MzQ1MTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1cIixcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiSU5FVF9FU1BcIixcbiAgICBcIklORVRfRVNQX09GRkxPQURcIixcbiAgICBcIklORVQ2X0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQX09GRkxPQURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX2Rldl9zdGF0ZV9mbHVzaFwiLFxuICAgIFwieGZybV9kZXZfc3RhdGVfZnJlZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsaWZldGltZSBpc3N1ZSAodXNlLWFmdGVyLWZyZWUpIGluIHRoZSBYRlJNIHN0YXRlIGdhcmJhZ2UgY29sbGVjdGlvbiBsb2dpYy4gSXQgY2hhbmdlcyBgaGxpc3RfZGVsYCB0byBgaGxpc3RfZGVsX2luaXRgIHRvIHByZXZlbnQgaXNzdWVzIHdpdGggbXVsdGlwbGUgZGVsZXRpb25zIGFuZCBhZGRzIHJlZmVyZW5jZSBjb3VudGluZyAoYHhmcm1fc3RhdGVfaG9sZF9yY3VgIGFuZCBgeGZybV9zdGF0ZV9wdXRgKSBhcm91bmQgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgIHRvIGVuc3VyZSB0aGUgb2JqZWN0IGlzIG5vdCBmcmVlZCB3aGlsZSBiZWluZyBhY2Nlc3NlZC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHVzZS1hZnRlci1mcmVlIGFuZCBkb3VibGUtZnJlZSB2dWxuZXJhYmlsaXRpZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzIGJlaW5nIHJlYWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBpbiBYRlJNIGRldmljZSBzdGF0ZSBnYXJiYWdlIGNvbGxlY3Rpb24uIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgeGZybV9kZXZfc3RhdGVfZmx1c2ggYW5kIHhmcm1fZGV2X3N0YXRlX2ZyZWUgaGFuZGxlIFhGUk0gb2ZmbG9hZCBzdGF0ZSBjbGVhbnVwLiBUbyByZWFjaCB0aGlzIGNvZGUsIFhGUk0gb2ZmbG9hZCBzdXBwb3J0IG11c3QgYmUgZW5hYmxlZCAoQ09ORklHX1hGUk1fT0ZGTE9BRCksIHdoaWNoIGlzIHNlbGVjdGVkIGJ5IElORVRfRVNQX09GRkxPQUQgYW5kIElORVQ2X0VTUF9PRkZMT0FELlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoxOTowNi40MDEyNzE0NDJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODY5MTA3NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3MjAzNTA4MzFhM2VjMWZiMDRjMGY0MTdiYTZlYzljYmM2NWIwZWY3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDkgMDg6MTk6MDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jXFxuaW5kZXggMzZhNGY2NzkzZWRlZi4uMDExMzhkM2QxMDY3MyAxMDA2NDRcXG4tLS0gYS9uZXQveGZybS94ZnJtX3N0YXRlLmNcXG4rKysgYi9uZXQveGZybS94ZnJtX3N0YXRlLmNcXG5AQCAtNzg1LDcgKzc4NSw3IEBAIHZvaWQgeGZybV9kZXZfc3RhdGVfZnJlZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4gXFx0aWYgKGRldiBcXHUwMDI2XFx1MDAyNiBkZXYtXFx1MDAzZXhmcm1kZXZfb3BzKSB7XFxuIFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XFxuIFxcdFxcdGlmICghaGxpc3RfdW5oYXNoZWQoXFx1MDAyNngtXFx1MDAzZWRldl9nY2xpc3QpKVxcbi1cXHRcXHRcXHRobGlzdF9kZWwoXFx1MDAyNngtXFx1MDAzZWRldl9nY2xpc3QpO1xcbitcXHRcXHRcXHRobGlzdF9kZWxfaW5pdChcXHUwMDI2eC1cXHUwMDNlZGV2X2djbGlzdCk7XFxuIFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcXG4gXFxuIFxcdFxcdGlmIChkZXYtXFx1MDAzZXhmcm1kZXZfb3BzLVxcdTAwM2V4ZG9fZGV2X3N0YXRlX2ZyZWUpXFxuQEAgLTEwMDYsOCArMTAwNiwxMyBAQCBpbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaVxcbiBcXHRcXHR4c28gPSBcXHUwMDI2eC1cXHUwMDNleHNvO1xcbiBcXG4gXFx0XFx0aWYgKHhzby1cXHUwMDNlZGV2ID09IGRldikge1xcbitcXHRcXHRcXHQvKiBUaGUgZGV2aWNlIEdDIGxpc3QgZG9lcyBub3QgaG9sZCBhIHJlZmVyZW5jZSB0byB4LiAqL1xcbitcXHRcXHRcXHRpZiAoIXhmcm1fc3RhdGVfaG9sZF9yY3UoeCkpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xcbiBcXHRcXHRcXHR4ZnJtX2Rldl9zdGF0ZV9mcmVlKHgpO1xcbitcXHRcXHRcXHR4ZnJtX3N0YXRlX3B1dCh4KTtcXG4gXFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcXG4gXFx0XFx0XFx0Z290byByZXN0YXJ0X2djO1xcbiBcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjE5OjA3Ljc4OTA2MzI5OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIyMjQ1NDU2NDE4ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTVwiLFxuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVF9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJTkVUNl9FU1BfT0ZGTE9BRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fZGV2X3N0YXRlX2ZsdXNoXCIsXG4gICAgXCJ4ZnJtX2Rldl9zdGF0ZV9mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBpbiBYRlJNIGRldmljZSBzdGF0ZSBnYXJiYWdlIGNvbGxlY3Rpb24uIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgeGZybV9kZXZfc3RhdGVfZmx1c2ggYW5kIHhmcm1fZGV2X3N0YXRlX2ZyZWUgaGFuZGxlIFhGUk0gb2ZmbG9hZCBzdGF0ZSBjbGVhbnVwLiBUbyByZWFjaCB0aGlzIGNvZGUsIFhGUk0gb2ZmbG9hZCBzdXBwb3J0IG11c3QgYmUgZW5hYmxlZCAoQ09ORklHX1hGUk1fT0ZGTE9BRCksIHdoaWNoIGlzIHNlbGVjdGVkIGJ5IElORVRfRVNQX09GRkxPQUQgYW5kIElORVQ2X0VTUF9PRkZMT0FELlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MjAzNTA4MzFhM2VjMWZiMDRjMGY0MTdiYTZlYzljYmM2NWIwZWY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgOSAwODoxOTowNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xuaW5kZXggMzZhNGY2NzkzZWRlZi4uMDExMzhkM2QxMDY3MyAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xuKysrIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jXG5AQCAtNzg1LDcgKzc4NSw3IEBAIHZvaWQgeGZybV9kZXZfc3RhdGVfZnJlZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbiBcdGlmIChkZXYgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2V4ZnJtZGV2X29wcykge1xuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XG4gXHRcdGlmICghaGxpc3RfdW5oYXNoZWQoXHUwMDI2eC1cdTAwM2VkZXZfZ2NsaXN0KSlcbi1cdFx0XHRobGlzdF9kZWwoXHUwMDI2eC1cdTAwM2VkZXZfZ2NsaXN0KTtcbitcdFx0XHRobGlzdF9kZWxfaW5pdChcdTAwMjZ4LVx1MDAzZWRldl9nY2xpc3QpO1xuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcbiBcbiBcdFx0aWYgKGRldi1cdTAwM2V4ZnJtZGV2X29wcy1cdTAwM2V4ZG9fZGV2X3N0YXRlX2ZyZWUpXG5AQCAtMTAwNiw4ICsxMDA2LDEzIEBAIGludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpXG4gXHRcdHhzbyA9IFx1MDAyNngtXHUwMDNleHNvO1xuIFxuIFx0XHRpZiAoeHNvLVx1MDAzZWRldiA9PSBkZXYpIHtcbitcdFx0XHQvKiBUaGUgZGV2aWNlIEdDIGxpc3QgZG9lcyBub3QgaG9sZCBhIHJlZmVyZW5jZSB0byB4LiAqL1xuK1x0XHRcdGlmICgheGZybV9zdGF0ZV9ob2xkX3JjdSh4KSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuIFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuIFx0XHRcdHhmcm1fZGV2X3N0YXRlX2ZyZWUoeCk7XG4rXHRcdFx0eGZybV9zdGF0ZV9wdXQoeCk7XG4gXHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuIFx0XHRcdGdvdG8gcmVzdGFydF9nYztcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6MTk6MDcuNzg5MDY0NDE5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjEwMDkwODYzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWEZSTSBTdGF0ZSBHYXJiYWdlIENvbGxlY3Rpb24gRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYG5ldC94ZnJtL3hmcm1fc3RhdGUuY2AuIEl0IHNlZW1zIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBYRlJNIHN0YXRlIGdhcmJhZ2UgY29sbGVjdGlvbiBtZWNoYW5pc20gZm9yIGRldmljZXMuIFRoZSBwYXRjaCBhbHRlcnMgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgIGFuZCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgLlxuXG5UaGUga2V5IGNoYW5nZSBpbiBgeGZybV9kZXZfc3RhdGVfZnJlZWAgaXMgdGhlIHJlcGxhY2VtZW50IG9mIGBobGlzdF9kZWxgIHdpdGggYGhsaXN0X2RlbF9pbml0YCB3aGVuIHJlbW92aW5nIGFuIGVudHJ5IGZyb20gdGhlIGBkZXZfZ2NsaXN0YC4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBwcmFjdGljZSB0byBoZWxwIGF2b2lkIGRhbmdsaW5nIHBvaW50ZXJzLCBnb29kIGNhdGNoLlxuXG5Ob3csIGluIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAsIHRoZXkndmUgYWRkZWQgdGhpcyBjb25kaXRpb25hbCBibG9jayAqYmVmb3JlKiBjYWxsaW5nIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYDpcblxuYGBgY1xuXHRcdFx0LyogVGhlIGRldmljZSBHQyBsaXN0IGRvZXMgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8geC4gKi9cblx0XHRcdGlmICgheGZybV9zdGF0ZV9ob2xkX3JjdSh4KSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuXHRcdFx0eGZybV9kZXZfc3RhdGVfZnJlZSh4KTtcblx0XHRcdHhmcm1fc3RhdGVfcHV0KHgpO1xuXHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuXHRcdFx0Z290byByZXN0YXJ0X2djO1xuYGBgXG5cbkl0IGxvb2tzIGxpa2UgdGhlIGB4ZnJtX3N0YXRlX2hvbGRfcmN1YCBhbmQgY29ycmVzcG9uZGluZyBgeGZybV9zdGF0ZV9wdXRgIGlzIHRoZXJlIHRvIGVuc3VyZSB0aGF0IGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCBkb2Vzbid0IHJlbGVhc2UgbWVtb3J5IHdoaWxlIHNvbWV0aGluZyBlbHNlIG1pZ2h0IHN0aWxsIGJlIHVzaW5nIGl0LiBUaGlzIGlzIGEgY29tbW9uIGFwcHJvYWNoIHVzaW5nIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSkgdG8gYXZvaWQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBkdXJpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIHdoZXJlIGEgc3RhdGUgZW50cnkgbWlnaHQgYmUgZnJlZWQgYmVmb3JlIGl0J3MgY29tcGxldGVseSB1bnVzZWQuIFRoZSBjb21tZW50IGluZGljYXRlcyB0aGUgYGRldl9nY2xpc3RgIGRvZXNuJ3QgaG9sZCBhIHJlZmVyZW5jZSwgc28gdGhpcyBjb25maXJtcyB0aGUgbmVlZCBmb3IgYW4gZXhwbGljaXQgaG9sZC4gVGhlIGByZXN0YXJ0X2djYCBnb3RvIGxpa2VseSBoYW5kbGVzIHRoZSBmYWN0IHRoYXQgdGhlIEdDIGxpc3QgbWlnaHQgaGF2ZSBjaGFuZ2VkIGR1cmluZyB0aGUgZnJlZWluZyBwcm9jZXNzLCBhbmQgd2UgbmVlZCB0byByZS1ldmFsdWF0ZSBhZnRlciBmcmVlaW5nIHRoZSBlbnRyeS5cblxuSSBzaG91bGQgcHJvYmFibHkgY29uZmlybSB3aGljaCBjb25maWcgb3B0aW9ucyBhcmUgcmVsYXRlZCB0byBYRlJNIHRvIGZ1cnRoZXIgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMuIEl0J3MgaW1wb3J0YW50IHRvIGtub3cgdGhlIGNvbnRleHQgb2YgdGhpcyBwYXRjaCwgbGlrZSB3aGljaCBrZXJuZWwgdmVyc2lvbnMgaXQgYXBwbGllcyB0by4gV2UgbmVlZCB0byBiZSBzdXJlIHRoaXMgZml4ZXMgdGhlIGlzc3VlIGluIGFsbCByZWxldmFudCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjE5OjI4Ljc5ODE1Mjk3MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTU2ODI4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2Rldl9zdGF0ZV9mbHVzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9kZXZpY2UuYz01NDY9c3RhdGljIGludCB4ZnJtX2Rldl9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU0OC1cXHRpZiAoZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfSFdfRVNQKSB7XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1NDk6XFx0XFx0eGZybV9kZXZfc3RhdGVfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTUwLVxcdFxcdHhmcm1fZGV2X3BvbGljeV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jPTU1Nj1zdGF0aWMgaW50IHhmcm1fZGV2X3VucmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU1Ny17XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1NTg6XFx0eGZybV9kZXZfc3RhdGVfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTU5LVxcdHhmcm1fZGV2X3BvbGljeV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9ODg1PXN0YXRpYyBpbmxpbmUgaW50XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjg4Njp4ZnJtX2Rldl9zdGF0ZV9mbHVzaF9zZWNjdHhfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaWQpXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTg4Ny17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9OTE0PXN0YXRpYyBpbmxpbmUgaW50XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjkxNTp4ZnJtX2Rldl9zdGF0ZV9mbHVzaF9zZWNjdHhfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaWQpXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTkxNi17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9OTU5PUVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9mbHVzaCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTk2MC1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6OTYxOmludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpZClcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtOTYyLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy05NjgtXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6OTY5OlxcdGVyciA9IHhmcm1fZGV2X3N0YXRlX2ZsdXNoX3NlY2N0eF9jaGVjayhuZXQsIGRldiwgdGFza192YWxpZCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTk3MC1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEwMjYtfVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxMDI3OkVYUE9SVF9TWU1CT0woeGZybV9kZXZfc3RhdGVfZmx1c2gpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMDI4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoxOToyOC44NTc3MjU1MDhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjUxMjA5NTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBYRlJNIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBpbnRvIFhGUk0gY29uZmlndXJhdGlvbi4gUmlnaHQsIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBmb3IgdGhlIGNvcmUgWEZSTSBmdW5jdGlvbmFsaXR5IGlzIGBDT05GSUdfWEZSTWAuIEkndmUgZ290IHRvIGNvbmZpcm0gd2hlcmUgdGhpcyBpcyBkZWZpbmVkIGFuZCBob3cgaXQncyBoYW5kbGVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGltZSB0byBjcmFjayBvcGVuIHRoZSByZWxldmFudCBLY29uZmlnIGFuZCBNYWtlZmlsZSBmaWxlcy4gVGhlIGxvZ2ljYWwgcGxhY2VzIHRvIHN0YXJ0IGFyZSBgbmV0L3hmcm0vS2NvbmZpZ2AgYW5kIGBuZXQveGZybS9NYWtlZmlsZWAuIFRob3NlIGZpbGVzIHNob3VsZCBnaXZlIG1lIHRoZSBkZXRhaWxzIG9uIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCB0aGUgYnVpbGQgbG9naWMgcmVsYXRlZCB0byB0aGlzIGZlYXR1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIG9wdGlvbiBpbmZsdWVuY2VzIHRoZSBjb21waWxhdGlvbiBhbmQgbGlua2luZyBvZiB0aGUgWEZSTSBtb2R1bGVzIGFuZCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoaW4gdGhlIHdpZGVyIG5ldHdvcmtpbmcgc3RhY2suIEdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NzcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoxOTozOC41MDg5MzczODRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzMjY4NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9zdGF0ZS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlPTEyPWVuZGlmXFxubmV0L3hmcm0vTWFrZWZpbGUtMTMtXFxubmV0L3hmcm0vTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX1hGUk0pIDo9IHhmcm1fcG9saWN5Lm8geGZybV9zdGF0ZS5vIHhmcm1faGFzaC5vIFxcXFxcXG5uZXQveGZybS9NYWtlZmlsZS0xNS1cXHRcXHQgICAgICB4ZnJtX2lucHV0Lm8geGZybV9vdXRwdXQubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjE5OjM4LjU1ODI2OTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzgzNzQzOTU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqWEZSTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBkaXNjdXNzaW9uIGhhcyBob25lZCBpbiBvbiBgQ09ORklHX1hGUk1gIGJlaW5nIGEgZnVuZGFtZW50YWwgcmVxdWlyZW1lbnQg4oCTIG5vIHN1cnByaXNlIHRoZXJlLiBCdXQgdGhlbiwgdGhlIG1lbnRpb24gb2YgYENPTkZJR19YRlJNX09GRkxPQURgIGFuZCBpdHMgcG90ZW50aWFsIGxpbmsgdG8gYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYC4uLiB0aGF0J3MgZ290IG1lIHRoaW5raW5nLiBJdCdzIGEga2V5IHF1ZXN0aW9uOiBpcyBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkgc3RyaWN0bHkgbmVjZXNzYXJ5IGZvciB0aGF0IGZsdXNoIG9wZXJhdGlvbiB0byBiZSB0cmlnZ2VyZWQ/IEkgbmVlZCB0byBjbGFyaWZ5IHRoZSBkZXBlbmRlbmN5LCBhbmQgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBuZXQveGZybS94ZnJtX2RldmljZS5jYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGFuZCwgY3JpdGljYWxseSwgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRpZWQgdG8gYENPTkZJR19YRlJNX09GRkxPQURgLiBMZXQncyBjb25maXJtIG9yIHJlamVjdCB0aGUgc3VzcGVjdGVkIGRlcGVuZGVuY3ksIHNoYWxsIHdlP1xuXG5cbiIsIklucHV0VG9rZW5zIjo0MjMwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6MjA6MDIuMzk1NzExNTQyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTk5MTA5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9kZXZpY2Uub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9NYWtlZmlsZT0xND1vYmotJChDT05GSUdfWEZSTSkgOj0geGZybV9wb2xpY3kubyB4ZnJtX3N0YXRlLm8geGZybV9oYXNoLm8gXFxcXFxcbm5ldC94ZnJtL01ha2VmaWxlLTE1LVxcdFxcdCAgICAgIHhmcm1faW5wdXQubyB4ZnJtX291dHB1dC5vIFxcXFxcXG5uZXQveGZybS9NYWtlZmlsZToxNjpcXHRcXHQgICAgICB4ZnJtX3N5c2N0bC5vIHhmcm1fcmVwbGF5Lm8geGZybV9kZXZpY2UubyBcXFxcXFxubmV0L3hmcm0vTWFrZWZpbGUtMTctXFx0XFx0ICAgICAgeGZybV9uYXRfa2VlcGFsaXZlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6MjA6MDMuNzU1NjMwNTUyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjIwMzkyMjg0NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIFhGUk0gRGV2aWNlIENvZGUqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgeGZybV9kZXZpY2UuY2AgZ2V0cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgd2hlbiBgQ09ORklHX1hGUk1gIGlzIGVuYWJsZWQuIFRoYXQncyB0aGUgZXhwZWN0ZWQgc2V0dXAuIE5vdywgbGV0J3MgdHJhY2Ugc29tZXRoaW5nIHNwZWNpZmljLiBJIHNlZSBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGNhbGxlZCB3aXRoaW4gYHhmcm1fZGV2X2Rvd25gIGFuZCBgeGZybV9kZXZfdW5yZWdpc3RlcmAuIFRoYXQgbWFrZXMgc2Vuc2U7IHdlJ3JlIGxpa2VseSBjbGVhbmluZyB1cCBzdGF0ZSB3aGVuIGEgZGV2aWNlIGlzIGdvaW5nIG9mZmxpbmUgb3IgYmVpbmcgcmVtb3ZlZC4gQnV0IEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqZnVsbCogcGljdHVyZS4gV2hlcmUgZWxzZSBpcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSB3aWRlciBYRlJNIGZyYW1ld29yay4gTGV0IG1lIGNoZWNrIHRoZSBjYWxsIHNpdGVzIG9mIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgdG8gZ2V0IGEgYnJvYWRlciB2aWV3IG9mIGhvdyBpdCBvcGVyYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY1NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjIwOjI1Ljc5NDg2MTYzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTk0ODA4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2Rldl9zdGF0ZV9mbHVzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9kZXZpY2UuYz01NDY9c3RhdGljIGludCB4ZnJtX2Rldl9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU0OC1cXHRpZiAoZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfSFdfRVNQKSB7XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1NDk6XFx0XFx0eGZybV9kZXZfc3RhdGVfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTUwLVxcdFxcdHhmcm1fZGV2X3BvbGljeV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jPTU1Nj1zdGF0aWMgaW50IHhmcm1fZGV2X3VucmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU1Ny17XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1NTg6XFx0eGZybV9kZXZfc3RhdGVfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTU5LVxcdHhmcm1fZGV2X3BvbGljeV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9ODg1PXN0YXRpYyBpbmxpbmUgaW50XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjg4Njp4ZnJtX2Rldl9zdGF0ZV9mbHVzaF9zZWNjdHhfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaWQpXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTg4Ny17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9OTE0PXN0YXRpYyBpbmxpbmUgaW50XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjkxNTp4ZnJtX2Rldl9zdGF0ZV9mbHVzaF9zZWNjdHhfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaWQpXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTkxNi17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9OTU5PUVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9mbHVzaCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTk2MC1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6OTYxOmludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpZClcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtOTYyLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy05NjgtXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6OTY5OlxcdGVyciA9IHhmcm1fZGV2X3N0YXRlX2ZsdXNoX3NlY2N0eF9jaGVjayhuZXQsIGRldiwgdGFza192YWxpZCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTk3MC1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEwMjYtfVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxMDI3OkVYUE9SVF9TWU1CT0woeGZybV9kZXZfc3RhdGVfZmx1c2gpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMDI4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoyMDoyNS44NTA4MTQ2MTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjM4ODIzNDE1MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBYRlJNIERldmljZSBMaWZlY3ljbGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBYRlJNIGRldmljZXMgYXJlIG1hbmFnZWQsIGFuZCB0aGlzIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgZnVuY3Rpb24gaGFzIGNhdWdodCBteSBleWUuIEknbSBub3RpbmcgdGhhdCBpdCdzIGNhbGxlZCBmcm9tIGJvdGggYHhmcm1fZGV2X2Rvd25gIGFuZCBgeGZybV9kZXZfdW5yZWdpc3RlcmAuIFRoYXQncyBpbnRlcmVzdGluZywgYmVjYXVzZSBib3RoIG9mIHRob3NlIGZ1bmN0aW9ucyByZXNpZGUgaW4gYG5ldC94ZnJtL3hmcm1fZGV2aWNlLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zIHRyaWdnZXJlZCBmcm9tP1wiIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGtub3cgaWYgYHhmcm1fZGV2X2Rvd25gIHVzZXMgYSBub3RpZmllci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLCBiZWNhdXNlIHRoYXQncyBrZXkgdG8gaG93IHRoZSBkZXZpY2UncyBzdGF0ZSBpcyBiZWluZyBmbHVzaGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Njc2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6MjA6NDkuNzMzMTU5NTQyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDk4MTg5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2Rldl9kb3duXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2RldmljZS5jPTUyNj1zdGF0aWMgaW50IHhmcm1fYXBpX2NoZWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU0NS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjU0NjpzdGF0aWMgaW50IHhmcm1fZGV2X2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU0Ny17XFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jPTU2ND1zdGF0aWMgaW50IHhmcm1fZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NzUtXFx0Y2FzZSBORVRERVZfRE9XTjpcXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjU3NjpcXHRcXHRyZXR1cm4geGZybV9kZXZfZG93bihkZXYpO1xcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTc3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoyMDo0OS43ODgxNDYyNThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc0MTc5MzAxMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlhGUk0gU3Vic3lzdGVtIEV2ZW50IEhhbmRsaW5nKipcblxuUmlnaHQsIHNvIGB4ZnJtX2Rldl9ldmVudGAgaXMgYSBub3RpZmllci4gVGhhdCdzIHRoZSBrZXkuIFRoYXQgdGVsbHMgbWUgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggYXN5bmNocm9ub3VzIGV2ZW50IGhhbmRsaW5nIHJlbGF0ZWQgdG8gdGhlIFhGUk0gc3Vic3lzdGVtLiBHaXZlbiB0aGF0IGl0J3MgYSBub3RpZmllciwgSSBpbW1lZGlhdGVseSB0aGluayBhYm91dCB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVsZXZhbnQgdG8gaXQuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCB3ZSdyZSBnb2luZyB0byBuZWVkIGBDT05GSUdfWEZSTWAgZW5hYmxlZCwgdGhhdCdzIGFsbW9zdCBndWFyYW50ZWVkLiBOb3csIHRoZSBvZmZsb2FkIGNvbXBvbmVudDsgdGhhdCBtaWdodCBuZWVkIHNvbWUgc3BlY2lmaWMgc2V0dGluZ3MsIHNvIGBDT05GSUdfWEZSTV9PRkZMT0FEYCBpcyB0aGUgbmV4dCBvYnZpb3VzIHRoaW5nIHRvIGNoZWNrLiBUbyBjb25maXJtIHRoYXQgZGVwZW5kZW5jeSwgSSdsbCBxdWlja2x5IGxvb2sgaW50byB0aGUgYG5ldC94ZnJtL0tjb25maWdgIGZpbGUgYW5kIGNvbmZpcm0gdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFhGUk0gb2ZmbG9hZC4gVGhhdCdsbCBsb2NrIGluIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHByZS1yZXF1aXNpdGUgYnVpbGQgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTcxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6MjE6MDcuMjA2MDc5MzE1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE5Mjc1ODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlhGUk1fT0ZGTE9BRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vS2NvbmZpZz01PWNvbmZpZyBYRlJNXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTEwLVxcbm5ldC94ZnJtL0tjb25maWc6MTE6Y29uZmlnIFhGUk1fT0ZGTE9BRFxcbm5ldC94ZnJtL0tjb25maWctMTItXFx0Ym9vbFxcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0yMS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjIyOiNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0yMy1zdGF0aWMgdm9pZCBfX3hmcm1fdHJhbnNwb3J0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jPTIzOT1pbnQgeGZybV9kZXZfc3RhdGVfYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHhmcm1fc3RhdGUgKngsXFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTI1MS1cXHRpZiAoeHVvLVxcdTAwM2VmbGFncyBcXHUwMDI2XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzoyNTI6XFx0ICAgIH4oWEZSTV9PRkZMT0FEX0lQVjYgfCBYRlJNX09GRkxPQURfSU5CT1VORCB8IFhGUk1fT0ZGTE9BRF9QQUNLRVQpKSB7XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0yNTMtXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiVW5yZWNvZ25pemVkIGZsYWdzIGluIG9mZmxvYWQgcmVxdWVzdFxcXCIpO1xcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0yNTYtXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzoyNTc6XFx0aWYgKCh4dW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9PRkZMT0FEX0lOQk9VTkQgXFx1MDAyNlxcdTAwMjYgeC1cXHUwMDNlZGlyID09IFhGUk1fU0FfRElSX09VVCkgfHxcXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjI1ODpcXHQgICAgKCEoeHVvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fT0ZGTE9BRF9JTkJPVU5EKSBcXHUwMDI2XFx1MDAyNiB4LVxcdTAwM2VkaXIgPT0gWEZSTV9TQV9ESVJfSU4pKSB7XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0yNTktXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiTWlzbWF0Y2hlZCBTQSBhbmQgb2ZmbG9hZCBkaXJlY3Rpb25cXFwiKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMjYyLVxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6MjYzOlxcdGlmICh4dW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9PRkZMT0FEX0lOQk9VTkQgXFx1MDAyNlxcdTAwMjYgeC1cXHUwMDNlaWZfaWQpIHtcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTI2NC1cXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJYRlJNIGlmX2lkIGlzIG5vdCBzdXBwb3J0ZWQgaW4gUlggcGF0aFxcXCIpO1xcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0yNjctXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzoyNjg6XFx0aXNfcGFja2V0X29mZmxvYWQgPSB4dW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9PRkZMT0FEX1BBQ0tFVDtcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTI2OS1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMjc5LVxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6MjgwOlxcdFxcdGlmICghKHh1by1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBYRlJNX09GRkxPQURfSU5CT1VORCkpIHtcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTI4MS1cXHRcXHRcXHRzYWRkciA9IFxcdTAwMjZ4LVxcdTAwM2Vwcm9wcy5zYWRkcjtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMzI2LVxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6MzI3OlxcdGlmICh4dW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9PRkZMT0FEX0lOQk9VTkQpXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0zMjgtXFx0XFx0eHNvLVxcdTAwM2VkaXIgPSBYRlJNX0RFVl9PRkZMT0FEX0lOO1xcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYz0zNTk9aW50IHhmcm1fZGV2X3BvbGljeV9hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLFxcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0zNjYtXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzozNjc6XFx0aWYgKCF4dW8tXFx1MDAzZWZsYWdzIHx8IHh1by1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB+WEZSTV9PRkZMT0FEX1BBQ0tFVCkge1xcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMzY4LVxcdFxcdC8qIFdlIHN1cHBvcnQgb25seSBwYWNrZXQgb2ZmbG9hZCBtb2RlIGFuZCBpdCBtZWFuc1xcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6MzY5OlxcdFxcdCAqIHRoYXQgdXNlciBtdXN0IHNldCBYRlJNX09GRkxPQURfUEFDS0VUIGJpdC5cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTM3MC1cXHRcXHQgKi9cXG4tLVxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM9NTI2PXN0YXRpYyBpbnQgeGZybV9hcGlfY2hlY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTUyNy17XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1Mjg6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTUyOS1cXHRpZiAoKGRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0hXX0VTUF9UWF9DU1VNKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L3hmcm0veGZybV9yZXBsYXkuYz01NTM9c3RhdGljIHZvaWQgeGZybV9yZXBsYXlfYWR2YW5jZV9lc24oc3RydWN0IHhmcm1fc3RhdGUgKngsIF9fYmUzMiBuZXRfc2VxKVxcbi0tXFxubmV0L3hmcm0veGZybV9yZXBsYXkuYy02MTAtXFxubmV0L3hmcm0veGZybV9yZXBsYXkuYzo2MTE6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcXG5uZXQveGZybS94ZnJtX3JlcGxheS5jLTYxMi1zdGF0aWMgaW50IHhmcm1fcmVwbGF5X292ZXJmbG93X29mZmxvYWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9NzYzPUVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9hbGxvYyk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTc2NC1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6NzY1OiNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTc2Ni12b2lkIHhmcm1fZGV2X3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xMTM2PXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cF9hbGwoY29uc3Qgc3RydWN0IHhmcm1faGFzaF9zdGF0ZV9wdHJzICpzdGF0ZV9wdHJzLFxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTExNDYtXFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHgsIHN0YXRlX3B0cnMtXFx1MDAzZWJ5c3BpICsgaCwgYnlzcGkpIHtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTE0NzojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMTQ4LVxcdFxcdGlmICh4ZG8tXFx1MDAzZXR5cGUgPT0gWEZSTV9ERVZfT0ZGTE9BRF9QQUNLRVQpIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xMzYxPXhmcm1fc3RhdGVfZmluZChjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkcixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNDM0LVxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh4LCBzdGF0ZV9wdHJzLmJ5ZHN0ICsgaCwgYnlkc3QpIHtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTQzNTojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNDM2LVxcdFxcdGlmIChwb2wtXFx1MDAzZXhkby50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUKSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTQ2OS1cXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeCwgc3RhdGVfcHRycy5ieWRzdCArIGhfd2lsZGNhcmQsIGJ5ZHN0KSB7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE0NzA6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTQ3MS1cXHRcXHRpZiAocG9sLVxcdTAwM2V4ZG8udHlwZSA9PSBYRlJNX0RFVl9PRkZMT0FEX1BBQ0tFVCkge1xcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE1NDUtXFx0XFx0fVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxNTQ2OiNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE1NDctXFx0XFx0aWYgKHBvbC1cXHUwMDNleGRvLnR5cGUgPT0gWEZSTV9ERVZfT0ZGTE9BRF9QQUNLRVQpIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjA1LVxcdFxcdH0gZWxzZSB7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE2MDY6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTYwNy1cXHRcXHRcXHRzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCAqeHNvID0gXFx1MDAyNngtXFx1MDAzZXhzbztcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTEyMDQ9c3RhdGljIHZvaWQgeHNvX3RvX3h1b19pZmluZGV4KGNvbnN0IHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkICp4c28sIGludCBpZmluZGV4LFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTIwOC1cXHRpZiAoeHNvLVxcdTAwM2VkaXIgPT0gWEZSTV9ERVZfT0ZGTE9BRF9JTilcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMjA5OlxcdFxcdHh1by1cXHUwMDNlZmxhZ3MgPSBYRlJNX09GRkxPQURfSU5CT1VORDtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMjEwLVxcdGlmICh4c28tXFx1MDAzZXR5cGUgPT0gWEZSTV9ERVZfT0ZGTE9BRF9QQUNLRVQpXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTIxMTpcXHRcXHR4dW8tXFx1MDAzZWZsYWdzIHw9IFhGUk1fT0ZGTE9BRF9QQUNLRVQ7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMTIxMi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjIxOjA4LjQyNTM2NDAyNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDk1NTY1MTMzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2YgdGhpcy5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgQ09ORklHX1hGUk1fT0ZGTE9BRGAgRGVwZW5kZW5jeSoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgYWJvdXQgYENPTkZJR19YRlJNX09GRkxPQURgLiBJdCBzZWVtcyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIG9wdGlvbiBpcyAqcmVxdWlyZWQqIGZvciB0aGUgZnVuY3Rpb24gYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCB0byB3b3JrIHByb3Blcmx5LiBObyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCBJJ20gaGF2aW5nIGEgcXVpY2sgY2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCAqaXRzZWxmKiBpcyBhY3R1YWxseSBlbmNsb3NlZCB3aXRoaW4gYSBjb25kaXRpb25hbCBibG9jayBkZXBlbmRlbnQgb24gYENPTkZJR19YRlJNX09GRkxPQURgLlxuXG5JIGtub3cgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpcyBkZWZpbmVkIGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgIOKAkyB0aGF0J3MgYSBnaXZlbi4gTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgYXJvdW5kIHdoZXJlIHRoYXQgZnVuY3Rpb24gZGVmaW5pdGlvbiBzaG91bGQgYmUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA5NjEgaW4gdGhhdCBmaWxlLCB0byBjb25maXJtLiBMZXQgbWUganVzdCBvcGVuIHRoYXQgZmlsZSB1cCBhbmQgaGF2ZSBhIGxvb2suLi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY4MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjI2OjE3Ljk4MTg4MDU3MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV9zdGF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk1MDpcXHRcXHRcXHR9XFxuIDk1MTpcXHRcXHR9XFxuIDk1MjpcXHRvdXQ6XFxuIDk1MzpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XFxuIDk1NDpcXHRcXHRpZiAoY250KVxcbiA5NTU6XFx0XFx0XFx0ZXJyID0gMDtcXG4gOTU2OlxcdFxcbiA5NTc6XFx0XFx0cmV0dXJuIGVycjtcXG4gOTU4OlxcdH1cXG4gOTU5OlxcdEVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9mbHVzaCk7XFxuIDk2MDpcXHRcXG4gOTYxOlxcdGludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpZClcXG4gOTYyOlxcdHtcXG4gOTYzOlxcdFxcdHN0cnVjdCB4ZnJtX3N0YXRlICp4O1xcbiA5NjQ6XFx0XFx0c3RydWN0IGhsaXN0X25vZGUgKnRtcDtcXG4gOTY1OlxcdFxcdHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkICp4c287XFxuIDk2NjpcXHRcXHRpbnQgaSwgZXJyID0gMCwgY250ID0gMDtcXG4gOTY3OlxcdFxcbiA5Njg6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcXG4gOTY5OlxcdFxcdGVyciA9IHhmcm1fZGV2X3N0YXRlX2ZsdXNoX3NlY2N0eF9jaGVjayhuZXQsIGRldiwgdGFza192YWxpZCk7XFxuIDk3MDpcXHRcXHRpZiAoZXJyKVxcbiA5NzE6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDk3MjpcXHRcXG4gOTczOlxcdFxcdGVyciA9IC1FU1JDSDtcXG4gOTc0OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYz0gbmV0LVxcdTAwM2V4ZnJtLnN0YXRlX2htYXNrOyBpKyspIHtcXG4gOTc1OlxcdHJlc3RhcnQ6XFxuIDk3NjpcXHRcXHRcXHRobGlzdF9mb3JfZWFjaF9lbnRyeSh4LCB4ZnJtX3N0YXRlX2RlcmVmX3Byb3QobmV0LVxcdTAwM2V4ZnJtLnN0YXRlX2J5ZHN0LCBuZXQpICsgaSwgYnlkc3QpIHtcXG4gOTc3OlxcdFxcdFxcdFxcdHhzbyA9IFxcdTAwMjZ4LVxcdTAwM2V4c287XFxuIDk3ODpcXHRcXG4gOTc5OlxcdFxcdFxcdFxcdGlmICgheGZybV9zdGF0ZV9rZXJuKHgpIFxcdTAwMjZcXHUwMDI2IHhzby1cXHUwMDNlZGV2ID09IGRldikge1xcbiA5ODA6XFx0XFx0XFx0XFx0XFx0eGZybV9zdGF0ZV9ob2xkKHgpO1xcbiA5ODE6XFx0XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5ldC1cXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xcbiA5ODI6XFx0XFxuIDk4MzpcXHRcXHRcXHRcXHRcXHRlcnIgPSB4ZnJtX3N0YXRlX2RlbGV0ZSh4KTtcXG4gOTg0OlxcdFxcdFxcdFxcdFxcdHhmcm1fZGV2X3N0YXRlX2ZyZWUoeCk7XFxuIDk4NTpcXHRcXG4gOTg2OlxcdFxcdFxcdFxcdFxcdHhmcm1fYXVkaXRfc3RhdGVfZGVsZXRlKHgsIGVyciA/IDAgOiAxLFxcbiA5ODc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0dGFza192YWxpZCk7XFxuIDk4ODpcXHRcXHRcXHRcXHRcXHR4ZnJtX3N0YXRlX3B1dCh4KTtcXG4gOTg5OlxcdFxcdFxcdFxcdFxcdGlmICghZXJyKVxcbiA5OTA6XFx0XFx0XFx0XFx0XFx0XFx0Y250Kys7XFxuIDk5MTpcXHRcXG4gOTkyOlxcdFxcdFxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XFxuIDk5MzpcXHRcXHRcXHRcXHRcXHRnb3RvIHJlc3RhcnQ7XFxuIDk5NDpcXHRcXHRcXHRcXHR9XFxuIDk5NTpcXHRcXHRcXHR9XFxuIDk5NjpcXHRcXHR9XFxuIDk5NzpcXHRcXHRpZiAoY250KVxcbiA5OTg6XFx0XFx0XFx0ZXJyID0gMDtcXG4gOTk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoyNjoxNy45ODIwMzU5NTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgwNzMzODg0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIEZ1bmN0aW9uJ3MgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgd2FzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYENPTkZJR19YRlJNX09GRkxPQURgLCBidXQgaXQncyBub3Qgd2hlcmUgSSBleHBlY3RlZCBpdCB0byBiZS4gVGhpcyBpcyBpbnRlcmVzdGluZy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHdhcyBjbGVhcmx5IG9mZi4gTGV0J3Mgc2VlLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIHBsYWNlbWVudCBvZiBgI2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURgIHdpdGhpbiBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYCB0byB1bmRlcnN0YW5kIHdoeS4gSXQncyB0aW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgYW5kIGNsYXJpZnkgd2hlcmUgdGhpcyBtYWNybydzIGluZmx1ZW5jZSB0cnVseSBsaWVzLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9uIHRvIGdldCB0aGlzIGNsZWFyIGluIG15IGhlYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3NjYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjI2OjIzLjc4OTM3NzM3N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyMDM3MTQ1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfWEZSTV9PRkZMT0FEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fc3RhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3N0YXRlLmM9NzYzPUVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9hbGxvYyk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTc2NC1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6NzY1OiNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTc2Ni12b2lkIHhmcm1fZGV2X3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xMTM2PXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cF9hbGwoY29uc3Qgc3RydWN0IHhmcm1faGFzaF9zdGF0ZV9wdHJzICpzdGF0ZV9wdHJzLFxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTExNDYtXFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHgsIHN0YXRlX3B0cnMtXFx1MDAzZWJ5c3BpICsgaCwgYnlzcGkpIHtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTE0NzojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMTQ4LVxcdFxcdGlmICh4ZG8tXFx1MDAzZXR5cGUgPT0gWEZSTV9ERVZfT0ZGTE9BRF9QQUNLRVQpIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xMzYxPXhmcm1fc3RhdGVfZmluZChjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkcixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNDM0LVxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh4LCBzdGF0ZV9wdHJzLmJ5ZHN0ICsgaCwgYnlkc3QpIHtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTQzNTojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNDM2LVxcdFxcdGlmIChwb2wtXFx1MDAzZXhkby50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUKSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTQ2OS1cXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeCwgc3RhdGVfcHRycy5ieWRzdCArIGhfd2lsZGNhcmQsIGJ5ZHN0KSB7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE0NzA6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTQ3MS1cXHRcXHRpZiAocG9sLVxcdTAwM2V4ZG8udHlwZSA9PSBYRlJNX0RFVl9PRkZMT0FEX1BBQ0tFVCkge1xcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE1NDUtXFx0XFx0fVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxNTQ2OiNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE1NDctXFx0XFx0aWYgKHBvbC1cXHUwMDNleGRvLnR5cGUgPT0gWEZSTV9ERVZfT0ZGTE9BRF9QQUNLRVQpIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjA1LVxcdFxcdH0gZWxzZSB7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE2MDY6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTYwNy1cXHRcXHRcXHRzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCAqeHNvID0gXFx1MDAyNngtXFx1MDAzZXhzbztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6MjY6MjUuMDA5NzUzNTAzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3Mjk1NDQxMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgeGZybV9kZXZfc3RhdGUgRnVuY3Rpb25zKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUga2VybmVsJ3MgWEZSTSAoSVBzZWMpIHN1YnN5c3RlbSBhbmQgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIGRldmljZSBzdGF0ZS4gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlIGB4ZnJtX2Rldl9zdGF0ZWAgZnVuY3Rpb25zLCBhbmQgYSBsaXR0bGUgbmFnZ2luZyBxdWVzdGlvbiBoYXMgcG9wcGVkIHVwLiBJJ20gbm90aW5nIHRoYXQgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpcywgYXMgZmFyIGFzIEkgY2FuIHRlbGwgZnJvbSB0aGUgYnVpbGQgY29uZmlnLCBhbHdheXMgaW5jbHVkZWQuIE5vIHN1cnByaXNlcyB0aGVyZTsgeW91J2Qgd2FudCBhIGNsZWFudXAgZnVuY3Rpb24gYXZhaWxhYmxlLiBCdXQgd2hhdCBhYm91dCBpdHMgY291bnRlcnBhcnQsIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYD8gSXMgdGhhdCBjb21waWxlZCBpbiBjb25kaXRpb25hbGx5IGJhc2VkIG9uIHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIGlzIGl0IGFsd2F5cyBwcmVzZW50IGFsb25nc2lkZSBpdHMgZmx1c2hpbmcgc2libGluZz8gSSBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBtYWNyb3MgYW5kIGRlcGVuZGVuY2llcyB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIG9mIHRoZSBkZXZpY2Ugc3RhdGUgbGlmZWN5Y2xlIGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRob3NlIHJlc291cmNlcy4gTXkgaW50dWl0aW9uIHNheXMgaXQgKnNob3VsZCogYWx3YXlzIGJlIHRoZXJlLCBidXQgSSd2ZSBiZWVuIHN1cnByaXNlZCBiZWZvcmUuIEkgbmVlZCB0byBnZXQgdGhpcyBjbGVhciBpbiBteSBoZWFkLCBzaW5jZSBpdCBtYXR0ZXJzIHdoZW4gZGVidWdnaW5nIGNlcnRhaW4gaW50ZXJhY3Rpb25zIHdpdGggbmV0d29yayBkZXZpY2VzIHVuZGVyIGhlYXZ5IGxvYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzc0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6MjY6MzEuNzM5MzAwMzQ2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njk4ODMxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2Rldl9zdGF0ZV9mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fc3RhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3N0YXRlLmM9NTk2PXN0YXRpYyB2b2lkIHhmcm1fc3RhdGVfZ2NfZGVzdHJveShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy02MTctXFx0XFx0cHV0X3BhZ2UoeC1cXHUwMDNleGZyYWcucGFnZSk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjYxODpcXHR4ZnJtX2Rldl9zdGF0ZV9mcmVlKHgpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy02MTktXFx0c2VjdXJpdHlfeGZybV9zdGF0ZV9mcmVlKHgpO1xcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTc3OD1FWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX2Rldl9zdGF0ZV9kZWxldGUpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy03NzktXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjc4MDp2b2lkIHhmcm1fZGV2X3N0YXRlX2ZyZWUoc3RydWN0IHhmcm1fc3RhdGUgKngpXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTc4MS17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9OTYxPWludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpZClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy05ODMtXFx0XFx0XFx0XFx0ZXJyID0geGZybV9zdGF0ZV9kZWxldGUoeCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjk4NDpcXHRcXHRcXHRcXHR4ZnJtX2Rldl9zdGF0ZV9mcmVlKHgpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy05ODUtXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTAxMy1cXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjEwMTQ6XFx0XFx0XFx0eGZybV9kZXZfc3RhdGVfZnJlZSh4KTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTAxNS1cXHRcXHRcXHR4ZnJtX3N0YXRlX3B1dCh4KTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xMzYxPXhmcm1fc3RhdGVfZmluZChjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkcixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjEwLVxcdFxcdFxcdFxcdHhmcm1fZGV2X3N0YXRlX2RlbGV0ZSh4KTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTYxMTpcXHRcXHRcXHRcXHR4ZnJtX2Rldl9zdGF0ZV9mcmVlKHgpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjEyLVxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6MjY6MzEuNzg2MjkzOTkzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMzkzNzAyODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCBhbmQgYHhmcm1fc3RhdGVgKipcblxuT2theSwgc28gYHhmcm1fZGV2X3N0YXRlX2ZyZWVgIGlzIGFsd2F5cyBjb21waWxlZCwgdGhhdCdzIGdvb2QgdG8ga25vdy4gQnV0IGhvbGQgb24sIHRoZSBjb2RlIHVzZXMgYHgtXHUwMDNlZGV2X2djbGlzdGAuIFRoaXMgaXMgYSBjcnVjaWFsIGNsdWUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3RydWN0dXJlIG9mIGB4ZnJtX3N0YXRlYCDigJMgdGhhdCdzIHdoZXJlIEkgc2hvdWxkIHN0YXJ0IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcyBjb25uZWN0aW9uIGFuZCBwb3RlbnRpYWwgcmVzb3VyY2UgbWFuYWdlbWVudC4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHhmcm1fc3RhdGVgIHRvIG1ha2Ugc3VyZSBJIGdyYXNwIHRoZSByZWxhdGlvbnNoaXAgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NzYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoyNjozNC44MjU2NjY1MDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTg1Njc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldl9nY2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQveGZybS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3hmcm0uaD0xOTA9c3RydWN0IHhmcm1fc3RhdGUge1xcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oLTE5Ni1cXHR1bmlvbiB7XFxuaW5jbHVkZS9uZXQveGZybS5oOjE5NzpcXHRcXHRzdHJ1Y3QgaGxpc3Rfbm9kZVxcdGRldl9nY2xpc3Q7XFxuaW5jbHVkZS9uZXQveGZybS5oLTE5OC1cXHRcXHRzdHJ1Y3QgaGxpc3Rfbm9kZVxcdGJ5c3JjO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoyNjozNC44NzA2NTYyOTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI3NzU4NTI2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgVnVsbmVyYWJpbGl0eSBpbiBYRlJNKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBhc3N1bXB0aW9uIHRoYXQgYGRldl9nY2xpc3RgIGlzIGFsd2F5cyBwcmVzZW50LiBUaGF0J3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGFkZHJlc3MgYSB1c2UtYWZ0ZXItZnJlZSBpbiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgLiBTcGVjaWZpY2FsbHksIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCBpcyBjYWxsZWQgd2l0aG91dCBhIGhlbGQgcmVmZXJlbmNlIHRvIGB4YC4gSW1tZWRpYXRlbHksIHRoZSBhbGFybSBiZWxscyBhcmUgZ29pbmcgb2ZmLiBUaGF04oCZcyBhIGNsYXNzaWMgbWVtb3J5IHNhZmV0eSBpc3N1ZS5cblxuTm93LCBsZXQncyBkaWcgaW50byB0aGUgZGV0YWlscy4gTXkgdW5kZXJzdGFuZGluZyBpcyBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGl0ZXJhdGVzIHRocm91Z2ggc29tZXRoaW5nIGNhbGxlZCBgeGZybV9zdGF0ZV9kZXZfZ2NfbGlzdGAuIEhtbW0sIGlzIHRoYXQgdGhlIGxpc3QgaW4gcXVlc3Rpb24/IEkgbmVlZCB0byB2ZXJpZnkgaG93IGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgaW50ZXJhY3RzIHdpdGggdGhpcyBsaXN0LiBMZXQncyBwdWxsIHVwIHRoZSBzb3VyY2UgY29kZSBmb3IgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpbiBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYC4gSSBuZWVkIHRvIHNlZSBleGFjdGx5IGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhvc2UgbGlzdCBlbnRyaWVzIGFuZCBjb25maXJtIHRoaXMgc3VzcGVjdGVkIGZsb3cgb2YgZXhlY3V0aW9uLiBUaGVuLCB0aGUgcGF0Y2ggc2hvdWxkIGJlIHVuZGVyc3RhbmRhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAwMCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoyNjo0MC4xNDgyNDQxOTRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL3hmcm1fc3RhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5OTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5OTA6XFx0XFx0XFx0XFx0XFx0XFx0Y250Kys7XFxuIDk5MTpcXHRcXG4gOTkyOlxcdFxcdFxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XFxuIDk5MzpcXHRcXHRcXHRcXHRcXHRnb3RvIHJlc3RhcnQ7XFxuIDk5NDpcXHRcXHRcXHRcXHR9XFxuIDk5NTpcXHRcXHRcXHR9XFxuIDk5NjpcXHRcXHR9XFxuIDk5NzpcXHRcXHRpZiAoY250KVxcbiA5OTg6XFx0XFx0XFx0ZXJyID0gMDtcXG4gOTk5OlxcdFxcbjEwMDA6XFx0b3V0OlxcbjEwMDE6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5ldC1cXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xcbjEwMDI6XFx0XFxuMTAwMzpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xcbjEwMDQ6XFx0cmVzdGFydF9nYzpcXG4xMDA1OlxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeCwgdG1wLCBcXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbGlzdCwgZGV2X2djbGlzdCkge1xcbjEwMDY6XFx0XFx0XFx0eHNvID0gXFx1MDAyNngtXFx1MDAzZXhzbztcXG4xMDA3OlxcdFxcbjEwMDg6XFx0XFx0XFx0aWYgKHhzby1cXHUwMDNlZGV2ID09IGRldikge1xcbjEwMDk6XFx0XFx0XFx0XFx0LyogVGhlIGRldmljZSBHQyBsaXN0IGRvZXMgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8geC4gKi9cXG4xMDEwOlxcdFxcdFxcdFxcdGlmICgheGZybV9zdGF0ZV9ob2xkX3JjdSh4KSlcXG4xMDExOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEwMTI6XFx0XFxuMTAxMzpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XFxuMTAxNDpcXHRcXHRcXHRcXHR4ZnJtX2Rldl9zdGF0ZV9mcmVlKHgpO1xcbjEwMTU6XFx0XFx0XFx0XFx0eGZybV9zdGF0ZV9wdXQoeCk7XFxuMTAxNjpcXHRcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xcbjEwMTc6XFx0XFx0XFx0XFx0Z290byByZXN0YXJ0X2djO1xcbjEwMTg6XFx0XFx0XFx0fVxcbjEwMTk6XFx0XFxuMTAyMDpcXHRcXHR9XFxuMTAyMTpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XFxuMTAyMjpcXHRcXG4xMDIzOlxcdFxcdHhmcm1fZmx1c2hfZ2MoKTtcXG4xMDI0OlxcdFxcbjEwMjU6XFx0XFx0cmV0dXJuIGVycjtcXG4xMDI2OlxcdH1cXG4xMDI3OlxcdEVYUE9SVF9TWU1CT0woeGZybV9kZXZfc3RhdGVfZmx1c2gpO1xcbjEwMjg6XFx0XFxuMTAyOTpcXHR2b2lkIHhmcm1fc2FkX2dldGluZm8oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybWtfc2FkaW5mbyAqc2kpXFxuMTAzMDpcXHR7XFxuMTAzMTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5ldC1cXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xcbjEwMzI6XFx0XFx0c2ktXFx1MDAzZXNhZGNudCA9IG5ldC1cXHUwMDNleGZybS5zdGF0ZV9udW07XFxuMTAzMzpcXHRcXHRzaS1cXHUwMDNlc2FkaGNudCA9IG5ldC1cXHUwMDNleGZybS5zdGF0ZV9obWFzayArIDE7XFxuMTAzNDpcXHRcXHRzaS1cXHUwMDNlc2FkaG1jbnQgPSB4ZnJtX3N0YXRlX2hhc2htYXg7XFxuMTAzNTpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XFxuMTAzNjpcXHR9XFxuMTAzNzpcXHRFWFBPUlRfU1lNQk9MKHhmcm1fc2FkX2dldGluZm8pO1xcbjEwMzg6XFx0XFxuMTAzOTpcXHRzdGF0aWMgdm9pZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoyNjo0MC4xNDg0NjYzNzRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE4MDQzNTE4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWEZSTSBTdGF0ZSBNYW5hZ2VtZW50IEZpeCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIG92ZXIgdGhpcyBYRlJNIHN0YXRlIG1hbmFnZW1lbnQgZml4LiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHllcywgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBgeGZybV9zdGF0ZV9kZXZfZ2NfbGlzdGAuIFRoYXQgcmluZ3MgYSBiZWxsLiBUaGUgY29yZSBvZiB0aGlzIGZpeCBzZWVtcyB0byBiZSBhZGRpbmcgYHhmcm1fc3RhdGVfaG9sZF9yY3UoeClgIGFuZCBgeGZybV9zdGF0ZV9wdXQoeClgIGNhbGxzIHdpdGhpbiB0aGF0IGxvb3AgdG8gbWFrZSB0aGUgcHJvY2Vzc2luZyBvZiBlYWNoIGVudHJ5IHNhZmUsIHdoaWNoIGlzIGEgZ29vZCBjYWxsLCBwcmV2ZW50cyByYWNlcy5cblxuSSBhbHNvIHNlZSBhIGNoYW5nZSBpbiBgeGZybV9kZXZfc3RhdGVfZnJlZWA6IHJlcGxhY2luZyBgaGxpc3RfZGVsYCB3aXRoIGBobGlzdF9kZWxfaW5pdGAuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFuZCBhZGRyZXNzZXMgYSBidWcgaW4gaG93IHN0YXRlcyBhcmUgbWFuYWdlZC4gRGVmaW5pdGVseSB3b3J0aCBhIGZ1enppbmcgY2FtcGFpZ24gdG8gdmFsaWRhdGUgdGhpcyBmaXguXG5cblRoZSBrZXkgZnVuY3Rpb25zIHRvIGNvbmNlbnRyYXRlIG9uIGZvciBmdXp6aW5nIGFyZSwgb2J2aW91c2x5LCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGFuZCBgeGZybV9kZXZfc3RhdGVfZnJlZWAuIFdhaXQsIGhvbGQgb24uIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgZ2V0cyBjYWxsZWQgd2hlbiBhbiBYRlJNIGRldmljZSBpcyB1bnJlZ2lzdGVyZWQgb3IgZ29lcyBkb3duLiBPa2F5LCBzbyB0aGF0IHN1Z2dlc3RzIHRoaXMgY291bGQgYmUgaW50ZXJlc3RpbmcgZnJvbSBhIG5ldHdvcmsgY29uZmlndXJhdGlvbiBjaGFuZ2UgcGVyc3BlY3RpdmUuIFRoaXMgaXMgYSB2ZXJ5IGdvb2QgZm9jdXMgcG9pbnQuXG5cbkZ1cnRoZXJtb3JlLCBgeGZybV9kZXZfc3RhdGVfZnJlZWAgaXMgY2FsbGVkIGZyb20gYm90aCBgeGZybV9zdGF0ZV9nY19kZXN0cm95YCBhbmQgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYC4gVGhhdCBtYWtlcyB0aGVzZSB0d28gZnVuY3Rpb25zIGEgbmF0dXJhbCBwYWlyIGZvciBmdXp6aW5nLlxuXG5MZXQncyBjaGVjayBpZiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIHN0YXRpYyBvciBub3QuIE9rYXksIGl0J3MgZXhwb3J0ZWQuIExldCdzIHNlZSBhYm91dCBgeGZybV9kZXZfc3RhdGVfZnJlZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTQ3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6Mjc6MDEuOTUyODQyMzk3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzI2OTMwNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qeGZybV9kZXZfc3RhdGVfZnJlZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjI3OjAyLjAwMDExOTYzNFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE1OTc0NzI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgU2NvcGUgb2YgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIHNlZWluZyBgeGZybV9kZXZfc3RhdGVfZnJlZWAsIGFuZCBteSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCBzaW5jZSBpdCdzIHVzZWQgaW4gdGhpcyBjb250ZXh0LCBpdCBzaG91bGQgZWl0aGVyIGJlIGV4cG9ydGVkIG9yIHN0YXRpYy4gVGhlIGZhY3QgdGhhdCBpdCdzIG5vdCBleHBsaWNpdGx5IGRlY2xhcmVkIGFzIGBzdGF0aWNgIGlzIHJhaXNpbmcgYSBmbGFnLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaXRzIHZpc2liaWxpdHkuIElzIGl0IG1lYW50IGZvciBpbnRlcm5hbCB1c2Ugb25seSB3aXRoaW4gYSBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LCBvciBpcyBpdCBwb3RlbnRpYWxseSBjYWxsYWJsZSBmcm9tIG90aGVyIG1vZHVsZXM/IFRoaXMgd2FycmFudHMgYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgc3ltYm9sIHRhYmxlIG9yLCBmYWlsaW5nIHRoYXQsIGEgY3Jvc3MtcmVmZXJlbmNlIHNlYXJjaCB0byB1bmRlcnN0YW5kIGl0cyBpbnRlbmRlZCB1c2FnZSBhbmQgZW5zdXJlIEknbSBpbnRlcnByZXRpbmcgaXRzIHBsYWNlbWVudCBjb3JyZWN0bHkuIEkgc3VzcGVjdCBhIHBvdGVudGlhbCBvdmVyc2lnaHQgb3IgcGVyaGFwcyBhIHN1YnRsZSBkZXNpZ24gYXNwZWN0IEkgaGF2ZW4ndCBmdWxseSBncmFzcGVkIHlldC4gSSBuZWVkIHRvIGZpZ3VyZSB0aGlzIG91dCBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzkwNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjI3OjMzLjE1OTg3MDEyNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3NTMzODkyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIHhmcm1fZGV2X3N0YXRlX2ZyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fc3RhdGUuYz03Nzg9RVhQT1JUX1NZTUJPTF9HUEwoeGZybV9kZXZfc3RhdGVfZGVsZXRlKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtNzc5LVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo3ODA6dm9pZCB4ZnJtX2Rldl9zdGF0ZV9mcmVlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy03ODEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoyNzozNC40MzUyMTQ5NTlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMxMDMyMDQ0OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkFzc2Vzc2luZyBEeW5hbWljIEJlaGF2aW9yIFx1MDAyNiBFeHBvcnQgU3RhdHVzKipcblxuQWxyaWdodCwgSSdtIGxvb2tpbmcgYXQgdGhpcy4uLiBhbmQgbXkgaW1tZWRpYXRlIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzbid0IGEgc3RhdGljIGVsZW1lbnQuIEl0IGhhcyBzb21lIGtpbmQgb2YgZHluYW1pYyBiZWhhdmlvciBvciBzdGF0ZSB0aGF0IG5lZWRzIGV4YW1pbmF0aW9uLiBHaXZlbiB0aGF0LCB0aGUgY3JpdGljYWwgbmV4dCBzdGVwIGlzIHRvIGRldGVybWluZSBpZiBpdHMgY3VycmVudCBzdGF0ZSBvciBhbnkgb2YgaXRzIHRyYW5zZm9ybWF0aW9ucyBhcmUgYmVpbmcgc3VjY2Vzc2Z1bGx5IGV4cG9ydGVkIG9yIHJlbmRlcmVkIGV4dGVybmFsbHkuIFRoZSBleHBvcnQgcHJvY2VzcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBwaWN0dXJlIGhlcmUuIEkgY2FuJ3QgZGV0ZXJtaW5lIGl0cyBjb21wbGV0ZSB1dGlsaXR5IG9yIGJlaGF2aW9yIHdpdGhvdXQga25vd2luZyB0aGUgc3RhdGUgb2YgaXRzIG91dHB1dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyNzUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoyNzo1Ny41Mzg0MjI3ODVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTI0MDU3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLip4ZnJtX2Rldl9zdGF0ZV9mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6Mjc6NTcuNTg1NTU0OTExWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMTU4NDYwODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwncyBYRlJNIE9mZmxvYWQgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBrZXJuZWwgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHhmcm1gIHN1YnN5c3RlbSBhbmQgaXRzIG9mZmxvYWQgY2FwYWJpbGl0aWVzLiBGaXJzdCBvZmYsIEkgc2VlIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzbid0ICpleHBvcnRlZCogZGlyZWN0bHksIHdoaWNoIG1lYW5zIGl0cyBzeW1ib2wgYWRkcmVzcyBzaG91bGQgYmUgZGlzdGluY3Qgc2luY2UgaXQncyBub24tc3RhdGljLiBUaGVuLCB3YWl0IGEgc2Vjb25kLCBob2xkIG9uLCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgICppcyogZXhwb3J0ZWQg4oCTIGludGVyZXN0aW5nLiBMZXQncyBzZWUgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGx1cmtpbmcgYXJvdW5kIGhlcmUuIE9rYXksIGB4ZnJtX2Rldl9kb3duYCBhbmQgYHhmcm1fZGV2X3VucmVnaXN0ZXJgIGFyZSBib3RoIHN0YXRpYywgc3BlY2lmaWNhbGx5IGRlZmluZWQgd2l0aGluIGB4ZnJtX2RldmljZS5jYC4gTG9va2luZyBmdXJ0aGVyLCBgeGZybV9kZXZfc3RhdGVfYWRkYCBhbmQgYHhmcm1fZGV2X3N0YXRlX2RlbGV0ZWAgaGF2ZSBhcHBlYXJhbmNlcyBhY3Jvc3MgYm90aCBgeGZybV9kZXZpY2UuY2AgYW5kIGB4ZnJtX3N0YXRlLmNgLlxuXG5HaXZlbiB0aGUgY29udGV4dCwgSSB0aGluayBmb2N1c2luZyBvbiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGFuZCBgeGZybV9kZXZfc3RhdGVfZnJlZWAgaXMgdGhlIHJpZ2h0IG1vdmUuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCBgQ09ORklHX1hGUk1gIGFuZCBgQ09ORklHX1hGUk1fT0ZGTE9BRGAgYXJlIHRoZSBwcmVyZXF1aXNpdGVzIGZvciB0aGlzIGNvZGUgcGF0aC4gSG1tLCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIGFsd2F5cyBjb21waWxlZCBpZiBgQ09ORklHX1hGUk1gIGlzIGVuYWJsZWQsIGJ1dCBpdCB3aWxsIG9ubHkgYWN0dWFsbHkgKmRvKiBhbnl0aGluZyBpZiBgeHNvLVx1MDAzZWRldiA9PSBkZXZgLiBgeHNvYCBpcyBhY3R1YWxseSBgXHUwMDI2eC1cdTAwM2V4c29gLCB3aGljaCBnaXZlcyB1cyBgc3RydWN0IHhmcm1fZGV2X29mZmxvYWRgLiBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgZ29vZCBsb29rIGF0IGBzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZGAgbm93LCB0byBwcm9wZXJseSB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDYxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjI4OjA0LjYwMTQwMzQ0M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5MTY3MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHhmcm1fZGV2X29mZmxvYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQveGZybS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3hmcm0uaD0xNDU9ZW51bSB7XFxuLS1cXG5pbmNsdWRlL25ldC94ZnJtLmgtMTQ4LVxcbmluY2x1ZGUvbmV0L3hmcm0uaDoxNDk6c3RydWN0IHhmcm1fZGV2X29mZmxvYWQge1xcbmluY2x1ZGUvbmV0L3hmcm0uaC0xNTAtXFx0LyogVGhlIGRldmljZSBmb3IgdGhpcyBvZmZsb2FkLlxcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oPTE5MD1zdHJ1Y3QgeGZybV9zdGF0ZSB7XFxuLS1cXG5pbmNsdWRlL25ldC94ZnJtLmgtMjkzLVxcbmluY2x1ZGUvbmV0L3hmcm0uaDoyOTQ6XFx0c3RydWN0IHhmcm1fZGV2X29mZmxvYWQgeHNvO1xcbmluY2x1ZGUvbmV0L3hmcm0uaC0yOTUtXFxuLS1cXG5pbmNsdWRlL25ldC94ZnJtLmg9NjM0PXN0cnVjdCB4ZnJtX3BvbGljeSB7XFxuLS1cXG5pbmNsdWRlL25ldC94ZnJtLmgtNjY2LVxcbmluY2x1ZGUvbmV0L3hmcm0uaDo2Njc6XFx0c3RydWN0IHhmcm1fZGV2X29mZmxvYWQgeGRvO1xcbmluY2x1ZGUvbmV0L3hmcm0uaC02NjgtfTtcXG4tLVxcbmluY2x1ZGUvbmV0L3hmcm0uaD0xNzIzPXN0YXRpYyBpbmxpbmUgdm9pZCB4ZnJtX2Rldl9zdGF0ZV91cGRhdGVfc3RhdHMoc3RydWN0IHhmcm1fc3RhdGUgKngpXFxuaW5jbHVkZS9uZXQveGZybS5oLTE3MjQte1xcbmluY2x1ZGUvbmV0L3hmcm0uaDoxNzI1OlxcdHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkICp4ZG8gPSBcXHUwMDI2eC1cXHUwMDNleHNvO1xcbmluY2x1ZGUvbmV0L3hmcm0uaC0xNzI2LVxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBSRUFEX09OQ0UoeGRvLVxcdTAwM2VkZXYpO1xcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oPTIxMzQ9c3RhdGljIGlubGluZSB2b2lkIHhmcm1fZGV2X3N0YXRlX2FkdmFuY2VfZXNuKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbmluY2x1ZGUvbmV0L3hmcm0uaC0yMTM1LXtcXG5pbmNsdWRlL25ldC94ZnJtLmg6MjEzNjpcXHRzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCAqeHNvID0gXFx1MDAyNngtXFx1MDAzZXhzbztcXG5pbmNsdWRlL25ldC94ZnJtLmgtMjEzNy1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gUkVBRF9PTkNFKHhzby1cXHUwMDNlZGV2KTtcXG4tLVxcbmluY2x1ZGUvbmV0L3hmcm0uaD0yMTYxPXN0YXRpYyBpbmxpbmUgdm9pZCB4ZnJtX2Rldl9wb2xpY3lfZGVsZXRlKHN0cnVjdCB4ZnJtX3BvbGljeSAqeClcXG5pbmNsdWRlL25ldC94ZnJtLmgtMjE2Mi17XFxuaW5jbHVkZS9uZXQveGZybS5oOjIxNjM6XFx0c3RydWN0IHhmcm1fZGV2X29mZmxvYWQgKnhkbyA9IFxcdTAwMjZ4LVxcdTAwM2V4ZG87XFxuaW5jbHVkZS9uZXQveGZybS5oLTIxNjQtXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHhkby1cXHUwMDNlZGV2O1xcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oPTIxNzA9c3RhdGljIGlubGluZSB2b2lkIHhmcm1fZGV2X3BvbGljeV9mcmVlKHN0cnVjdCB4ZnJtX3BvbGljeSAqeClcXG5pbmNsdWRlL25ldC94ZnJtLmgtMjE3MS17XFxuaW5jbHVkZS9uZXQveGZybS5oOjIxNzI6XFx0c3RydWN0IHhmcm1fZGV2X29mZmxvYWQgKnhkbyA9IFxcdTAwMjZ4LVxcdTAwM2V4ZG87XFxuaW5jbHVkZS9uZXQveGZybS5oLTIxNzMtXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHhkby1cXHUwMDNlZGV2O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoyODowNC42NDczMjIxMVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTcwOTEzNjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgeGZybV9zdGF0ZSBTdHJ1Y3R1cmUgYW5kIE9mZmxvYWQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgeGZybV9zdGF0ZWAgc3RydWN0dXJlIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHhzb2AgYW5kIGl0cyBtZW1iZXJzLiBTcGVjaWZpY2FsbHksIEknbSBub3RpbmcgdGhhdCBgeHNvYCwgd2hhdGV2ZXIgaXQgaXMsIGlzICphbHdheXMqIHByZXNlbnQgd2l0aGluIGBzdHJ1Y3QgeGZybV9zdGF0ZWAuIFRoYXQncyBhIGZ1bmRhbWVudGFsIGdpdmVuLiBCdXQgdGhlbiBJJ20gdGhpbmtpbmcgYWJvdXQgYHhzby1cdTAwM2VkZXZgLCBhbmQgSSdtIHJlbWVtYmVyaW5nIHRoYXQgaXQncyBvbmx5IHBvcHVsYXRlZCwgb25seSB2YWxpZCwgdW5kZXIgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcy4gTXkgcmVjb2xsZWN0aW9uIGlzIHRoYXQgYHhzby1cdTAwM2VkZXZgIGlzIG9ubHkgYXNzaWduZWQgd2hlbiBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZC4gQW5kLCBmdXJ0aGVyLCBlbmFibGluZyB0aGF0IG9mZmxvYWQgZmVhdHVyZSBoaW5nZXMgb24gd2hldGhlciBgQ09ORklHX1hGUk1fT0ZGTE9BRGAgaXMgc2V0IGR1cmluZyB0aGUga2VybmVsIGJ1aWxkLiBTbywgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgeHNvLVx1MDAzZWRldmAgSSBuZWVkIHRvIHRyYWNlICp3aGVyZSogdGhpcyBmaWVsZCBpcyBhY3R1YWxseSBzZXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHN1cnJvdW5kaW5nIGl0cyBhc3NpZ25tZW50LiBMZXQncyBzZWUgd2hlcmUgdGhhdCBoYXBwZW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgyNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjI4OjA4LjgxODIzODk3N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4NDUwMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieHNvLVxcdTAwM2VkZXYgPVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9kZXZpY2UuYz0yMzk9aW50IHhmcm1fZGV2X3N0YXRlX2FkZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0zMDMtXFx0aWYgKCFkZXYtXFx1MDAzZXhmcm1kZXZfb3BzIHx8ICFkZXYtXFx1MDAzZXhmcm1kZXZfb3BzLVxcdTAwM2V4ZG9fZGV2X3N0YXRlX2FkZCkge1xcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6MzA0OlxcdFxcdHhzby1cXHUwMDNlZGV2ID0gTlVMTDtcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTMwNS1cXHRcXHRkZXZfcHV0KGRldik7XFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTMxMS1cXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJEZXZpY2UgZG9lc24ndCBzdXBwb3J0IG9mZmxvYWQgd2l0aCBFU05cXFwiKTtcXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjMxMjpcXHRcXHR4c28tXFx1MDAzZWRldiA9IE5VTEw7XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0zMTMtXFx0XFx0ZGV2X3B1dChkZXYpO1xcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0zMjItXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzozMjM6XFx0eHNvLVxcdTAwM2VkZXYgPSBkZXY7XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0zMjQtXFx0eHNvLVxcdTAwM2VpZmluZGV4ID0gZGV2LVxcdTAwM2VpZmluZGV4O1xcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0zMzgtXFx0aWYgKGVycikge1xcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6MzM5OlxcdFxcdHhzby1cXHUwMDNlZGV2ID0gTlVMTDtcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTM0MC1cXHRcXHR4c28tXFx1MDAzZWRpciA9IDA7XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9ODg2PXhmcm1fZGV2X3N0YXRlX2ZsdXNoX3NlY2N0eF9jaGVjayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpZClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04OTYtXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjg5NzpcXHRcXHRcXHRpZiAoeHNvLVxcdTAwM2VkZXYgPT0gZGV2IFxcdTAwMjZcXHUwMDI2XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTg5OC1cXHRcXHRcXHQgICAoZXJyID0gc2VjdXJpdHlfeGZybV9zdGF0ZV9kZWxldGUoeCkpICE9IDApIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz05NjE9aW50IHhmcm1fZGV2X3N0YXRlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0YXNrX3ZhbGlkKVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTk3OC1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6OTc5OlxcdFxcdFxcdGlmICgheGZybV9zdGF0ZV9rZXJuKHgpIFxcdTAwMjZcXHUwMDI2IHhzby1cXHUwMDNlZGV2ID09IGRldikge1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy05ODAtXFx0XFx0XFx0XFx0eGZybV9zdGF0ZV9ob2xkKHgpO1xcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEwMDctXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjEwMDg6XFx0XFx0aWYgKHhzby1cXHUwMDNlZGV2ID09IGRldikge1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMDA5LVxcdFxcdFxcdC8qIFRoZSBkZXZpY2UgR0MgbGlzdCBkb2VzIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHguICovXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MTM2MT14ZnJtX3N0YXRlX2ZpbmQoY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTU1My1cXHRcXHRcXHR4c28tXFx1MDAzZWRpciA9IHhkby1cXHUwMDNlZGlyO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxNTU0OlxcdFxcdFxcdHhzby1cXHUwMDNlZGV2ID0gZGV2O1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNTU1LVxcdFxcdFxcdHhzby1cXHUwMDNlaWZpbmRleCA9IGRldi1cXHUwMDNlaWZpbmRleDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNTYyLVxcdFxcdFxcdFxcdG5ldGRldl9wdXQoZGV2LCBcXHUwMDI2eHNvLVxcdTAwM2VkZXZfdHJhY2tlcik7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE1NjM6XFx0XFx0XFx0XFx0eHNvLVxcdTAwM2VkZXYgPSBOVUxMO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNTY0LVxcdFxcdFxcdFxcdHhzby1cXHUwMDNldHlwZSA9IFhGUk1fREVWX09GRkxPQURfVU5TUEVDSUZJRUQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjI4OjA4Ljg2MzA5MDg1NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzA5NTg0OTQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaWdnaW5nIGludG8gdGhlIFhGUk0gRGV2aWNlIFN0YXRlKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgZG93biB0aGlzIGB4c28tXHUwMDNlZGV2YCBhc3NpZ25tZW50LCBhbmQgaXQgbG9va3MgbGlrZSBgeGZybV9kZXZfc3RhdGVfYWRkYCBpbiBgbmV0L3hmcm0veGZybV9kZXZpY2UuY2AgaXMgdGhlIGN1bHByaXQuIFRoYXQgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhhdCBkZXZpY2UgcG9pbnRlciwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEknbSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcuICBJIGtub3cgYHhmcm1fZGV2aWNlLmNgIGdldHMgY29tcGlsZWQgYXMgbG9uZyBhcyBgQ09ORklHX1hGUk1gIGlzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcsIHNvIHRoZSBmaWxlIGl0c2VsZiBzaG91bGQgZXhpc3QuIFdhaXQgYSBtaW51dGUuLi4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcgY3J1Y2lhbC4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IGZ1bmN0aW9uIGJlaW5nIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEYC4gIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ20gZ29pbmcgdG8gcXVpY2tseSByZS1leGFtaW5lIGBuZXQveGZybS94ZnJtX2RldmljZS5jYCB0byBjb25maXJtIHRoYXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIEl0J3MgY3JpdGljYWwgSSBkb24ndCBtaXNzIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA5NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoyODoyMS45NTg5NDM0OTJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDQ1Njk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19YRlJNX09GRkxPQURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2RldmljZS5jLTIxLVxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6MjI6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTIzLXN0YXRpYyB2b2lkIF9feGZybV90cmFuc3BvcnRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM9NTI2PXN0YXRpYyBpbnQgeGZybV9hcGlfY2hlY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTUyNy17XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1Mjg6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTUyOS1cXHRpZiAoKGRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0hXX0VTUF9UWF9DU1VNKSBcXHUwMDI2XFx1MDAyNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoyODoyMi4wMDQ5OTMzMTlaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU2ODM4MTYzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIFhGUk0gRGV2aWNlIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNlIGRvd24gd2hlcmUgYHhmcm1fZGV2X3N0YXRlX2FkZGAgaXMgZGVmaW5lZC4gSSBrbm93IGl0J3MgcmVsYXRlZCB0byBYRlJNLCBhbmQgSSdtIHByZXR0eSBzdXJlIGl0J3MgaW52b2x2ZWQgaW4gZGV2aWNlIG1hbmFnZW1lbnQgc29tZWhvdy4gTGV0IG1lIHNlZS4uLiBJJ20gcHJldHR5IHN1cmUgSSd2ZSBzZWVuIGl0IGluIGBuZXQveGZybS9gIGJlZm9yZS4gWWVwLCBgeGZybV9kZXZpY2UuY2Agc2VlbXMgbGlrZSB0aGUgbGlrZWx5IHBsYWNlLiBOb3cgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGZ1bmN0aW9uYWxpdHkgY29uZGl0aW9uYWxseSBjb21waWxlZD8gSSBuZWVkIHRvIGNoZWNrIGlmIGB4ZnJtX2Rldl9zdGF0ZV9hZGRgIGlzIGluc2lkZSBhbiBgI2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURgIGJsb2NrLiBUaGF0J3MgYSBjcnVjaWFsIGRldGFpbC4gSSBuZWVkIHRvIGdldCB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuIFRpbWUgdG8gY3JhY2sgb3BlbiBgbmV0L3hmcm0veGZybV9kZXZpY2UuY2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDIyIOKAkyB0aGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY0NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjI4OjI2LjU3MzM3NzU3NloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Mzc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS94ZnJtX2RldmljZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiB4ZnJtX2RldmljZS5jIC0gSVBzZWMgZGV2aWNlIG9mZmxvYWRpbmcgY29kZS5cXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKGMpIDIwMTUgc2VjdW5ldCBTZWN1cml0eSBOZXR3b3JrcyBBR1xcbiAgIDY6XFx0ICpcXG4gICA3OlxcdCAqIEF1dGhvcjpcXG4gICA4OlxcdCAqIFN0ZWZmZW4gS2xhc3NlcnQgXFx1MDAzY3N0ZWZmZW4ua2xhc3NlcnRAc2VjdW5ldC5jb21cXHUwMDNlXFxuICAgOTpcXHQgKi9cXG4gIDEwOlxcdFxcbiAgMTE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vycm5vLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuICAxNzpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2RzdC5oXFx1MDAzZVxcbiAgMTg6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9nc28uaFxcdTAwM2VcXG4gIDE5OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQveGZybS5oXFx1MDAzZVxcbiAgMjA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcXHUwMDNlXFxuICAyMTpcXHRcXG4gIDIyOlxcdCNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXFxuICAyMzpcXHRzdGF0aWMgdm9pZCBfX3hmcm1fdHJhbnNwb3J0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXFxuICAyNDpcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBoc2l6ZSlcXG4gIDI1OlxcdHtcXG4gIDI2OlxcdFxcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XFxuICAyNzpcXHRcXG4gIDI4OlxcdFxcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XFxuICAyOTpcXHRcXHRpZiAoeG8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9HU09fU0VHTUVOVClcXG4gIDMwOlxcdFxcdFxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciAtPSB4LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuO1xcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHRwc2tiX3B1bGwoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgeC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbik7XFxuICAzMzpcXHR9XFxuICAzNDpcXHRcXG4gIDM1OlxcdHN0YXRpYyB2b2lkIF9feGZybV9tb2RlX3R1bm5lbF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAgMzY6XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBoc2l6ZSlcXG4gIDM3OlxcdFxcbiAgMzg6XFx0e1xcbiAgMzk6XFx0XFx0c3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTtcXG4gIDQwOlxcdFxcbiAgNDE6XFx0XFx0aWYgKHhvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fR1NPX1NFR01FTlQpXFxuICA0MjpcXHRcXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICsgaHNpemU7XFxuICA0MzpcXHRcXG4gIDQ0OlxcdFxcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XFxuICA0NTpcXHRcXHRwc2tiX3B1bGwoc2tiLFxcbiAgNDY6XFx0XFx0XFx0ICBza2ItXFx1MDAzZW1hY19sZW4gKyB4LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuIC0geC1cXHUwMDNlcHJvcHMuZW5jX2hkcl9sZW4pO1xcbiAgNDc6XFx0fVxcbiAgNDg6XFx0XFxuICA0OTpcXHRzdGF0aWMgdm9pZCBfX3hmcm1fbW9kZV9iZWV0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXFxuICA1MDpcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBoc2l6ZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6Mjg6MjYuNTczNDcyODU2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNjI1MzM1MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb25kaXRpb25hbCBDb21waWxhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSBhIGAjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRGAgc3RhdGVtZW50LiBSaWdodCwgdGhpcyBsb29rcyBsaWtlIGEgZmVhdHVyZSBnYXRlLCBtZWFuaW5nIGEgY2h1bmsgb2YgY29kZSBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGEga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24sIGFzIGFsd2F5cyB3aGVuIGRlYWxpbmcgd2l0aCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBsaWtlIHRoaXMsIGlzOiB3aGVyZSBkb2VzIHRoaXMgY29uZGl0aW9uYWwgYmxvY2sgKmVuZCo/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhpcyBwYXJ0aWN1bGFyIGAjaWZkZWZgLiBJcyBpdCBhIHNob3J0IGJsb2NrLCBvciBhIGxvbmdlciBvbmUgdGhhdCBzcGFucyBtdWx0aXBsZSBmdW5jdGlvbnMgb3IgZXZlbiBmaWxlcz8gVGhlIGxlbmd0aCBvZiBpdCB3aWxsIGltcGFjdCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBhIHNwZWNpZmljIGZlYXR1cmUgaXMgaGFuZGxlZCwgZXNwZWNpYWxseSB3aGVuIEknbSBkZWJ1Z2dpbmcgb3IgdHJhY2luZyB0aGUgY29udHJvbCBmbG93LiBHb3R0YSBmaW5kIHRoYXQgYCNlbmRpZmAhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzI5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoyODozMC45MzYwMDkzNjdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MzkxODM3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZW5kaWYuKkNPTkZJR19YRlJNX09GRkxPQURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6Mjg6MzAuOTg0NDA1Mjk0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDExMzg1NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgc3VtbWFyaXplZCwgdGFyZ2V0aW5nIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgYCNlbmRpZmAgaW4gYG5ldC94ZnJtL3hmcm1fZGV2aWNlLmNgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBuZXQveGZybS94ZnJtX2RldmljZS5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGAjZW5kaWZgIGRpcmVjdGl2ZXMgd2l0aGluIHRoYXQgZmlsZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGVuc3VyaW5nIHByb3BlciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgYXZvaWRpbmcgYW55IHBvdGVudGlhbCBwcmVwcm9jZXNzb3IgcGl0ZmFsbHMuIEdpdmVuIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBYRlJNIHN1YnN5c3RlbSwgZXZlbiBzZWVtaW5nbHkgYmVuaWduIGAjZW5kaWZgIGRpcmVjdGl2ZXMgY2FuIGhhdmUgaW1wbGljYXRpb25zIGZvciBkaWZmZXJlbnQgYnVpbGQgY29uZmlndXJhdGlvbnMsIGtlcm5lbCB2ZXJzaW9ucywgb3IgZW5hYmxlZCBmZWF0dXJlcy5cblxuSSdtIHRoaW5raW5nLCBhcmUgdGhlcmUgYW55IHVudXN1YWwgbmVzdGluZyBzdHJ1Y3R1cmVzPyBBbSBJIHNlZWluZyBhbnkgcG90ZW50aWFsIGZvciBtaXNtYXRjaGVkIGAjaWZkZWZgL2AjaWZuZGVmYCBwYWlycyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBjb2RlIGluY2x1c2lvbiBvciBleGNsdXNpb24/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGFueSBhcmVhcyB3aGVyZSBhIG1pc3Npbmcgb3IgbWlzcGxhY2VkIGAjZW5kaWZgIG1pZ2h0IGJlIGNhdXNpbmcgaXNzdWVzLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byB0aGUgZGV2aWNlIG1hbmFnZW1lbnQgc2lkZSBvZiBYRlJNLiBBIGNvbW1vbiBpc3N1ZSBtaWdodCBiZSBkaWZmZXJpbmcgZGVmaW5pdGlvbnMgaW4gdmFyaW91cyBjb25maWd1cmF0aW9uIHN0YXRlcy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgZGV2aWNlIHJlZ2lzdHJhdGlvbi9kZXJlZ2lzdHJhdGlvbiwgb3IgcGVyaGFwcyBldmVuIGluIHRoZSBoYW5kbGluZyBvZiBYRlJNIGRldmljZXMgd2l0aCB2YXJ5aW5nIGNhcGFiaWxpdGllcy4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzIHN1YnN5c3RlbSwgSSdtIG9uIHRoZSBsb29rb3V0IGZvciBhbnl0aGluZyB0aGF0IGNvdWxkIGFmZmVjdCBob3cgWEZSTSBpbnRlcmFjdHMgd2l0aCBuZXR3b3JrIGludGVyZmFjZXMgYW5kIHJvdXRpbmcuIE15IG1haW4gZ29hbCBpcyB0byBzZWUgaWYgYW55IG9idmlvdXMgdnVsbmVyYWJpbGl0aWVzIGV4aXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODk3MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjI4OjM0LjgyNTU0NzI4MloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3NDA0NzM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZW5kaWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2RldmljZS5jPTUwMz12b2lkIHhmcm1fZGV2X2JhY2tsb2coc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QpXFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTUyMy19XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1MjQ6I2VuZGlmXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01MjUtXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYz01MjY9c3RhdGljIGludCB4ZnJtX2FwaV9jaGVjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NDAtXFx0XFx0cmV0dXJuIE5PVElGWV9CQUQ7XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1NDE6I2VuZGlmXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NDItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjI4OjM1Ljk5OTYwMjIxMloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzI3NzU3NTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYENPTkZJR19YRlJNX09GRkxPQURgIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kLCByaWdodCwgbGluZSA1MjQgd2l0aCB0aGUgYCNlbmRpZmAgY2xlYXJseSBjbG9zZXMgdGhlIGAjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRGAgYmxvY2suIE1ha2VzIHNlbnNlLiBOb3csIGB4ZnJtX2Rldl9zdGF0ZV9hZGRgIGlzIGRlZmluZWQgYXQgbGluZSAyMzkuIFRoYXQncyAqaW5zaWRlKiB0aGUgY29uZGl0aW9uYWwgYmxvY2ssIHNvIGBDT05GSUdfWEZSTV9PRkZMT0FEYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlIGZvciB0aGlzIGZ1bmN0aW9uLiBUaGlzIGFsc28gbWVhbnMgYENPTkZJR19YRlJNX09GRkxPQURgICptdXN0KiBiZSBzZXQgaW4gb3JkZXIgdG8gcmVhY2ggdGhlIGNvZGUgd2hlcmUgYHhzby1cdTAwM2VkZXZgIGlzIGFzc2lnbmVkLCB3aGljaCwgaW4gdHVybiwgaXMgYSBjcml0aWNhbCBwaWVjZSBpbiB0cmlnZ2VyaW5nIHRoZSBidWcgaW4gYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYC5cblxuSG1tLCBub3cgbGV0IG1lIGp1c3QgY2hlY2suLi4gUmlnaHQsIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgaXMgY2FsbGVkIGZyb20gYm90aCBgeGZybV9kZXZfZG93bmAgYW5kIGB4ZnJtX2Rldl91bnJlZ2lzdGVyYC4gVGhvc2UgYXJlIGRlZmluZWQgaW4gYG5ldC94ZnJtL3hmcm1fZGV2aWNlLmNgLiBTbyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpc3N1ZSBhbmQgd2hlbiB0aGUgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpcyBjYWxsZWQgSSBzaG91bGQgZG91YmxlIGNoZWNrIGlmIGB4ZnJtX2Rldl9kb3duYCBpcyBhbHNvIHByb3RlY3RlZCBieSBgI2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTUwMiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoyODo0Mi43MjczNjIyMjJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV9kZXZpY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MjA6XFx0XFx0XFx0eGZybV9kZXZfcmVzdW1lKHNrYik7XFxuIDUyMTpcXHRcXHR9XFxuIDUyMjpcXHRcXG4gNTIzOlxcdH1cXG4gNTI0OlxcdCNlbmRpZlxcbiA1MjU6XFx0XFxuIDUyNjpcXHRzdGF0aWMgaW50IHhmcm1fYXBpX2NoZWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIDUyNzpcXHR7XFxuIDUyODpcXHQjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxcbiA1Mjk6XFx0XFx0aWYgKChkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9IV19FU1BfVFhfQ1NVTSkgXFx1MDAyNlxcdTAwMjZcXG4gNTMwOlxcdFxcdCAgICAhKGRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0hXX0VTUCkpXFxuIDUzMTpcXHRcXHRcXHRyZXR1cm4gTk9USUZZX0JBRDtcXG4gNTMyOlxcdFxcbiA1MzM6XFx0XFx0aWYgKChkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9IV19FU1ApIFxcdTAwMjZcXHUwMDI2XFxuIDUzNDpcXHRcXHQgICAgKCEoZGV2LVxcdTAwM2V4ZnJtZGV2X29wcyBcXHUwMDI2XFx1MDAyNlxcbiA1MzU6XFx0XFx0ICAgICAgIGRldi1cXHUwMDNleGZybWRldl9vcHMtXFx1MDAzZXhkb19kZXZfc3RhdGVfYWRkIFxcdTAwMjZcXHUwMDI2XFxuIDUzNjpcXHRcXHQgICAgICAgZGV2LVxcdTAwM2V4ZnJtZGV2X29wcy1cXHUwMDNleGRvX2Rldl9zdGF0ZV9kZWxldGUpKSlcXG4gNTM3OlxcdFxcdFxcdHJldHVybiBOT1RJRllfQkFEO1xcbiA1Mzg6XFx0I2Vsc2VcXG4gNTM5OlxcdFxcdGlmIChkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgKE5FVElGX0ZfSFdfRVNQIHwgTkVUSUZfRl9IV19FU1BfVFhfQ1NVTSkpXFxuIDU0MDpcXHRcXHRcXHRyZXR1cm4gTk9USUZZX0JBRDtcXG4gNTQxOlxcdCNlbmRpZlxcbiA1NDI6XFx0XFxuIDU0MzpcXHRcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuIDU0NDpcXHR9XFxuIDU0NTpcXHRcXG4gNTQ2OlxcdHN0YXRpYyBpbnQgeGZybV9kZXZfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiA1NDc6XFx0e1xcbiA1NDg6XFx0XFx0aWYgKGRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0hXX0VTUCkge1xcbiA1NDk6XFx0XFx0XFx0eGZybV9kZXZfc3RhdGVfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xcbiA1NTA6XFx0XFx0XFx0eGZybV9kZXZfcG9saWN5X2ZsdXNoKGRldl9uZXQoZGV2KSwgZGV2LCB0cnVlKTtcXG4gNTUxOlxcdFxcdH1cXG4gNTUyOlxcdFxcbiA1NTM6XFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbiA1NTQ6XFx0fVxcbiA1NTU6XFx0XFxuIDU1NjpcXHRzdGF0aWMgaW50IHhmcm1fZGV2X3VucmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gNTU3OlxcdHtcXG4gNTU4OlxcdFxcdHhmcm1fZGV2X3N0YXRlX2ZsdXNoKGRldl9uZXQoZGV2KSwgZGV2LCB0cnVlKTtcXG4gNTU5OlxcdFxcdHhmcm1fZGV2X3BvbGljeV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XFxuIDU2MDpcXHRcXG4gNTYxOlxcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4gNTYyOlxcdH1cXG4gNTYzOlxcdFxcbiA1NjQ6XFx0c3RhdGljIGludCB4ZnJtX2Rldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcXG4gNTY1OlxcdHtcXG4gNTY2OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcXG4gNTY3OlxcdFxcbiA1Njg6XFx0XFx0c3dpdGNoIChldmVudCkge1xcbiA1Njk6XFx0XFx0Y2FzZSBORVRERVZfUkVHSVNURVI6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjI4OjQyLjcyNzQ0MjI3MloiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTIwOTAwOTc0NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFhGUk0gRGV2aWNlIFJlZ2lzdHJhdGlvbiBhbmQgU3RhdGUgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGB4ZnJtX2Rldl9kb3duYCBhbmQgYHhmcm1fZGV2X3VucmVnaXN0ZXJgIGZ1bmN0aW9ucy4gVGhleSdyZSBkZWZpbmVkIG91dHNpZGUgdGhlIGAjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRGAgYmxvY2ssIHdoaWNoIHNlZW1zIGEgYml0IG1pc2xlYWRpbmcgYXQgZmlyc3QgZ2xhbmNlLiBIb3dldmVyLCBJIHNlZSB0aGF0IHRoZXkgKm9ubHkqIGRvIGFueXRoaW5nIHNpZ25pZmljYW50IHdoZW4gYHhzby1cdTAwM2VkZXYgPT0gZGV2YCB3aXRoaW4gYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYC4gQW5kLCBob2xkIG9uLCBgeHNvLVx1MDAzZWRldmAgaXMgKm9ubHkqIHNldCBpZiBgQ09ORklHX1hGUk1fT0ZGTE9BRGAgaXMgYWN0dWFsbHkgZW5hYmxlZC4gVGhlcmVmb3JlLCBgQ09ORklHX1hGUk1fT0ZGTE9BRGAgaXMgY2xlYXJseSBhIHJlcXVpcmVtZW50IGZvciB0aGVzZSBmdW5jdGlvbnMgdG8gaGF2ZSBhbnkgcHJhY3RpY2FsIGltcGFjdCwgYW5kIGBDT05GSUdfWEZSTWAgaXMgcmVxdWlyZWQgYXMgd2VsbC5cblxuQnV0LCBoYW5nIG9uLCBsZXQgbWUgcmV2aXNpdCB0aGlzLiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIGFsc28gY2FsbGVkIHVuY29uZGl0aW9uYWxseSBmcm9tIGB4ZnJtX2Rldl91bnJlZ2lzdGVyYC4gRXZlbiB0aGVuLCBJdCBzZWVtcyBhcyB0aG91Z2ggYENPTkZJR19YRlJNX09GRkxPQURgIGlzIG5lZWRlZCB0byBhY3R1YWxseSB1dGlsaXplIHRoZSBtb2RpZmllZCBjb2RlIHBhdGggaW4gYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCB3aGVyZSBgeHNvLVx1MDAzZWRldiA9PSBkZXZgIGlzIHRydWUuXG5cblRoZW4sIEknbSB0cmFjaW5nIGJhY2sgdG8gdGhlIGNhbGwgc3RhY2sgb2YgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgLiBJIHNlZSB0aGF0IGl0J3MgY2FsbGVkIGZyb20gYHhmcm1fc3RhdGVfZ2NfZGVzdHJveWAsIHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgZnJvbSBgeGZybV9zdGF0ZV9nY190YXNrYC4gYHhmcm1fc3RhdGVfZ2NfZGVzdHJveWAgY2FsbHMgYHhmcm1fZGV2X3N0YXRlX2ZyZWUoeClgIHVuY29uZGl0aW9uYWxseS4gSW4gYHhmcm1fZGV2X3N0YXRlX2ZyZWVgIEkgc2VlIHRoYXQgdGhlcmUgaXMgdGhpcyBjb2RlOlxuXG5gYGBjXG5cdGlmIChkZXYgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2V4ZnJtZGV2X29wcykge1xuXHRcdHNwaW5fbG9ja19iaChcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcblx0XHRpZiAoIWhsaXN0X3VuaGFzaGVkKFx1MDAyNngtXHUwMDNlZGV2X2djbGlzdCkpXG5cdFx0XHRobGlzdF9kZWxfaW5pdChcdTAwMjZ4LVx1MDAzZWRldl9nY2xpc3QpO1xuXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuYGBgXG5cblRoaXMgKnJlcXVpcmVzKiBgZGV2YCB0byBiZSBub24tTlVMTCwgcmlnaHQ/IFdoaWNoIG1lYW5zIGl0IHJlcXVpcmVzIGB4c28tXHUwMDNlZGV2YC4gVGhlcmVmb3JlLCBgeHNvLVx1MDAzZWRldmAgbXVzdCBiZSBub24tTlVMTCBoZXJlLiBTbywganVzdCBsaWtlIGJlZm9yZSwgYENPTkZJR19YRlJNX09GRkxPQURgIGlzIGVzc2VudGlhbCBmb3IgcmVhY2hpbmcgdGhlIG1vZGlmaWVkIGNvZGUgd2l0aGluIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCBhcyB3ZWxsLlxuXG5Ob3csIGxldCBtZSBqdXN0IHF1aWNrbHkgcnVuIHRocm91Z2ggbXkgaGVhZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYENPTkZJR19YRlJNX1VTRVJgIG1pZ2h0IGJlIG5lZWRlZCBpZiB1c2Vyc3BhY2UgY29uZmlndXJhdGlvbiBvZiBYRlJNIHN0YXRlcyBpcyBpbnZvbHZlZC4gTGV0IG1lIGRvdWJsZS1jaGVjayBgbmV0L3hmcm0vS2NvbmZpZ2AgdG8gY29uZmlybSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgYmUgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzU2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6MzM6MzQuODE3NTQyOTM1WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQzMTA4NjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX1VTRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9MjI9aWYgSU5FVFxcbm5ldC94ZnJtL0tjb25maWc6MjM6Y29uZmlnIFhGUk1fVVNFUlxcbm5ldC94ZnJtL0tjb25maWctMjQtXFx0dHJpc3RhdGUgXFxcIlRyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTMxLVxcbm5ldC94ZnJtL0tjb25maWc6MzI6Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcXG5uZXQveGZybS9LY29uZmlnLTMzLVxcdHRyaXN0YXRlIFxcXCJDb21wYXRpYmxlIEFCSSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODozMzozNi4wNjA2NTYxM1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDE4NjQ3ODY3NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlhGUk0gQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5IEFuYWx5c2lzKipcblxuUmlnaHQsIHNvIHRvIGdldCBYRlJNIHN0YXRlcyBwcm9wZXJseSBjb25maWd1cmVkLCBJJ20gYWJzb2x1dGVseSBnb2luZyB0byBuZWVkIGBDT05GSUdfWEZSTV9VU0VSYC4gVGhhdCBtdWNoIGlzIG9idmlvdXMuIE5vdywgYSBjcnVjaWFsIGZvbGxvdy11cCBxdWVzdGlvbiBhbHdheXMgcG9wcyB1cDogRG9lcyBgQ09ORklHX1hGUk1fT0ZGTE9BRGAgaGF2ZSBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIG9yIHJlbGF0aW9uc2hpcHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBCZXN0IHRvIGNsYXJpZnkgdGhhdCBiZWZvcmUgbW92aW5nIGZvcndhcmQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBjb25maWd1cmF0aW9uIG1hdHJpeC4gTGV0IG1lIGludmVzdGlnYXRlIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBjb25zaWRlciBmb3IgdGhpcyB0byB3b3JrIGFwcHJvcHJpYXRlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxOTg5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6MzY6NTcuOTI1NDQ2MDg3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI2NjEzMDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX09GRkxPQURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xMC1cXG5uZXQveGZybS9LY29uZmlnOjExOmNvbmZpZyBYRlJNX09GRkxPQURcXG5uZXQveGZybS9LY29uZmlnLTEyLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6MzY6NTkuMTUyMDY2MDAzWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwNzI0Njc3MTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHN1bW1hcnk6XG5cbioqQW5hbHl6aW5nIGEgQm9vbGVhbiBEZWNpc2lvbioqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYSBgYm9vbGAgdmFyaWFibGUgaGVyZSwgYW5kIHRoZXJlJ3Mgbm8gZXhwbGljaXQgdXNlciBwcm9tcHQgb3IgY29uZmlndXJhdGlvbiBhc3NvY2lhdGVkIHdpdGggaXQuIFRoYXQgbWVhbnMgaXRzIHN0YXRlIOKAkyB0cnVlIG9yIGZhbHNlIOKAkyBpcyBiZWluZyBkZXRlcm1pbmVkIHVwc3RyZWFtLCBsaWtlbHkgdGhyb3VnaCBzb21lIG90aGVyIGNvbmZpZ3VyYXRpb24gb3IgYSBjb25kaXRpb25hbCBjaGVjay4gTXkgcHJpbWFyeSBxdWVzdGlvbiBpcywgd2hhdCdzIGRyaXZpbmcgdGhpcz8gSSBuZWVkIHRvIHRyYWNlIHRoZSBsb2dpYyBhbmQgZmlndXJlIG91dCAqd2hhdCogaXMgc2VsZWN0aW5nIGBYRlJNX09GRkxPQURgLiBVbmRlcnN0YW5kaW5nIHRoYXQgdXBzdHJlYW0gZGVwZW5kZW5jeSBpcyBjcnVjaWFsIHRvIGdyYXNwaW5nIHRoZSBvdmVyYWxsIHN5c3RlbSBiZWhhdmlvci4gV2hlcmUgaXMgdGhpcyBmbGFnIGFjdHVhbGx5IGJlaW5nIHNldD8gTGV0J3MgZGlnIGluIGFuZCBmaW5kIHRoZSBkZXBlbmRlbmN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI3MywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjM4OjE5Ljg3Njc0NTY3MVoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg2Nzg1NjU2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgWEZSTV9PRkZMT0FEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTM2OT1jb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zNzEtXFx0ZGVwZW5kcyBvbiBJTkVUX0VTUFxcbm5ldC9pcHY0L0tjb25maWc6MzcyOlxcdHNlbGVjdCBYRlJNX09GRkxPQURcXG5uZXQvaXB2NC9LY29uZmlnLTM3My1cXHRkZWZhdWx0IG5cXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9Nzc9Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTc5LVxcdGRlcGVuZHMgb24gSU5FVDZfRVNQXFxubmV0L2lwdjYvS2NvbmZpZzo4MDpcXHRzZWxlY3QgWEZSTV9PRkZMT0FEXFxubmV0L2lwdjYvS2NvbmZpZy04MS1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6Mzg6MjIuNzQ0NjA4NTk1WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTM2NTI3MjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkVTUCBPZmZsb2FkIENvbmZpZ3VyYXRpb24gLSBUaGUgUGF0aCBGb3J3YXJkKipcblxuUmlnaHQsIHNvIGl0J3MgYmVjb21lIGNsZWFyOiBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUNl9FU1BfT0ZGTE9BRGAgYm90aCBhdXRvbWF0aWNhbGx5IHRyaWdnZXIgYFhGUk1fT0ZGTE9BRGAuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgdGhlIG9mZmxvYWQgZnVuY3Rpb25hbGl0eSBpcyBrZXkuIFRoZXJlZm9yZSwgZW5hYmxpbmcgdGhvc2UgdHdvIG9wdGlvbnMgaXMgdGhlIG9idmlvdXMgbmV4dCBzdGVwLiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhhdCwgdGhvdWdoLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgYW5kIG1ha2Ugc3VyZSBub3RoaW5nIGVsc2UgaXMgYWxzbyBzZWxlY3RpbmcgYFhGUk1fT0ZGTE9BRGAuIFRoZXJlIG1pZ2h0IGJlIG90aGVyIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Ygb3Igb3RoZXIgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZmlndXJhdGlvbiBjaGFuZ2UgdGhhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIEJlc3QgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNjQ4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6Mzg6NTkuODgxMTM5MjM3WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDExMzU5ODEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBYRlJNX09GRkxPQURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODozOTowMC4wMjIyODE5ODhaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzNTE2MzEyNjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkVTUCBPZmZsb2FkIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUgRVNQIG9mZmxvYWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nLCB0aGUga2V5IHBsYXllcnMgaGVyZSBzZWVtIHRvIGJlIGBJTkVUX0VTUF9PRkZMT0FEYCBhbmQgYElORVQ2X0VTUF9PRkZMT0FEYC4gSG93ZXZlciwgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJJ2xsIG1ha2Ugc3VyZSB0byBpbmNsdWRlIGBJTkVUX0VTUF9PRkZMT0FEYCwgYElORVQ2X0VTUF9PRkZMT0FEYCwgYWxvbmcgd2l0aCB0aGUgY3J1Y2lhbCBgWEZSTV9VU0VSYCBhbmQgYFhGUk1gIG9wdGlvbnMsIGFzIHRoZXkncmUgZm91bmRhdGlvbmFsIGZvciB0aGUgdHJhbnNmb3JtIGxheWVyLiBXYWl0IGEgbWludXRlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnkgZGVwZW5kZW5jaWVzIC0gSSBhbHNvIG5lZWQgdG8gaW5jbHVkZSBgSU5FVF9FU1BgIGFuZCBgSU5FVDZfRVNQYCBhcyB3ZWxsLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBhbmQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucywgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYG5ldC9pcHY0L0tjb25maWdgIGZpbGUgZm9yIHRoZSBgSU5FVF9FU1BfT0ZGTE9BRGAgZGVwZW5kZW5jeSwganVzdCB0byBzb2xpZGlmeSBteSBtZW50YWwgbW9kZWwuIFRoaXMgd2F5IEkgY2FuIHZlcmlmeSBteSB1bmRlcnN0YW5kaW5nIGFuZCBhdm9pZCBtYWtpbmcgYW55IG1pc3Rha2VzIGluIG15IGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODkzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6NDA6NTMuNTM4NTk4NDM3WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY2MDA3NjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTM1ND1jb25maWcgSU5FVF9FU1BcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzY4LVxcbm5ldC9pcHY0L0tjb25maWc6MzY5OmNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxubmV0L2lwdjQvS2NvbmZpZy0zNzAtXFx0dHJpc3RhdGUgXFxcIklQOiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6NDA6NTQuODA0NjEyMzU5WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2Mjc5MDUxNjczNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRVNQIE9mZmxvYWQgQ29uZmlndXJhdGlvbiBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgRVNQIG9mZmxvYWQgaXMgY29uZmlndXJlZC4gSXQgbG9va3MgbGlrZSBgSU5FVF9FU1BfT0ZGTE9BRGAgaXMgYSB0cmlzdGF0ZSB3aXRoIGEgcHJvbXB0LiBJIHNob3VsZCBhZGQgYm90aCBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUNl9FU1BfT0ZGTE9BRGAgdG8gdGhlIEVuYWJsZUNvbmZpZ3MuIFRoYXQgbWFrZXMgc2Vuc2UsIHRob3NlIGFyZSB0aGUga2V5IHRoaW5ncyB0byBlbmFibGUuXG5cbkxldCdzIGRvIGEgcXVpY2sgcmVjYXAgb2YgdGhlIGNvbmZpZ3Mgd2UncmUgZGVhbGluZyB3aXRoOiBgWEZSTWAsIGBYRlJNX1VTRVJgLCBgSU5FVF9FU1BgLCBgSU5FVF9FU1BfT0ZGTE9BRGAsIGBJTkVUNl9FU1BgLCBhbmQgYElORVQ2X0VTUF9PRkZMT0FEYC5cblxuSG1tLCB3YWl0LiBgWEZSTV9PRkZMT0FEYCBpcyBhY3R1YWxseSBzZWxlY3RlZCBieSBgSU5FVF9FU1BfT0ZGTE9BRGAuIFNob3VsZCBJIGJvdGhlciBwdXR0aW5nIGl0IG9uIHRoZSBsaXN0PyBObywgaXQgZG9lc24ndCBoYXZlIGEgcHJvbXB0LCBzbyBpdCBjYW4ndCBiZSBkaXJlY3RseSBlbmFibGVkIGluIHRoZSBgLmNvbmZpZ2AgZmlsZS4gSXQgKmhhcyogdG8gYmUgc2VsZWN0ZWQgYnkgZWl0aGVyIGBJTkVUX0VTUF9PRkZMT0FEYCBvciBgSU5FVDZfRVNQX09GRkxPQURgLiBPa2F5LCBzbyBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUNl9FU1BfT0ZGTE9BRGAgYXJlIHRoZSByaWdodCBvbmVzIHRvIGZvY3VzIG9uLlxuXG5Ob3csIGxldCdzIHN3aXRjaCBnZWFycyBhbmQgZXhhbWluZSBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGFuZCBgeGZybV9kZXZfc3RhdGVfZnJlZWAuIEdvb2QsIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgaXMgZXhwb3J0ZWQgYW5kIGlzbid0IHN0YXRpYy4gYHhmcm1fZGV2X3N0YXRlX2ZyZWVgIGlzIGFsc28gbm90IHN0YXRpYy4gU28sIGJvdGggb2YgdGhlc2UgYXJlIHBvdGVudGlhbCBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIGFuYWx5c2lzLlxuXG5XYWl0IGEgc2Vjb25kLCBgeGZybV9kZXZfc3RhdGVfZnJlZWAgaXMgY2FsbGVkIGZyb20gYHhmcm1fc3RhdGVfZ2NfZGVzdHJveWAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGZyb20gYHhmcm1fc3RhdGVfZ2NfdGFza2AuIEFuZCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIGNhbGxlZCBmcm9tIGB4ZnJtX2Rldl9kb3duYCBhbmQgYHhmcm1fZGV2X3VucmVnaXN0ZXJgLiBPa2F5LiBBcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHdlcmUgbW9kaWZpZWQ/IE5vLCBqdXN0IHRob3NlIHR3by5cblxuT2theSwgbm93IGxldCdzIGRvdWJsZS1jaGVjayBpZiBgeGZybV9kZXZfc3RhdGVfZnJlZWAgaXMgaW5saW5lZC4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQncyBkZWZpbmVkIGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgIGFuZCBpcyBhbHNvIGNhbGxlZCBmcm9tIHRoZXJlLiBJdCdzIGFjdHVhbGx5IGNhbGxlZCBmcm9tIGB4ZnJtX3N0YXRlX2djX2Rlc3Ryb3lgICphbmQqIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgc28gdGhlIGZ1bmN0aW9uIGlzIGluIGB4ZnJtX3N0YXRlLmNgLiBDYW4gdGhlIGNvbXBpbGVyIGlubGluZSB0aGlzPyBJdCdzIG5vdCBtYXJrZWQgYGlubGluZWAuIEl0IGlzIGEgcmVndWxhciBmdW5jdGlvbi4gVGhlIHF1ZXN0aW9uIG5vdyBpcyBpZiBpdCdzIGV4cG9ydGVkLiBOb3BlLCBpdCdzIG5vdCBleHBvcnRlZC4gQnV0IGl0J3MgYWxzbyAqbm90KiBzdGF0aWMsIHNvIHRoZSBjb21waWxlciBjYW4ndCBpbmxpbmUgaXQgYWNyb3NzIHRyYW5zbGF0aW9uIHVuaXRzLiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIGl0J3Mgb25seSBjYWxsZWQgZnJvbSB3aXRoaW4gYHhmcm1fc3RhdGUuY2AuIFdhaXQsIGlzIHRoYXQgdHJ1ZT8gTGV0IG1lIHZlcmlmeS4gSXMgaXQgZGVjbGFyZWQgaW4gYSBoZWFkZXI/IEkgbmVlZCB0byBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzMzYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6NDU6MTcuNTk1MTMyMjM3WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ3NjEwMjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fZGV2X3N0YXRlX2ZyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3hmcm0uaD0yMTMxPXZvaWQgeGZybV9kZXZfc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTtcXG5pbmNsdWRlL25ldC94ZnJtLmg6MjEzMjp2b2lkIHhmcm1fZGV2X3N0YXRlX2ZyZWUoc3RydWN0IHhmcm1fc3RhdGUgKngpO1xcbmluY2x1ZGUvbmV0L3hmcm0uaC0yMTMzLVxcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oPTIyMDM9c3RhdGljIGlubGluZSB2b2lkIHhmcm1fZGV2X3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbmluY2x1ZGUvbmV0L3hmcm0uaC0yMjA2LVxcbmluY2x1ZGUvbmV0L3hmcm0uaDoyMjA3OnN0YXRpYyBpbmxpbmUgdm9pZCB4ZnJtX2Rldl9zdGF0ZV9mcmVlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbmluY2x1ZGUvbmV0L3hmcm0uaC0yMjA4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6NDU6MTkuMDQyNzQ3NjI2WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzMzk1NzU4NTg1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqWEZSTSBLZXkgTGVuZ3RocyBhbmQgSW5saW5lIEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoZSBYRlJNIGNvZGUsIHNwZWNpZmljYWxseSBrZXkgbGVuZ3Rocy4gVGhlIGRlY2xhcmF0aW9uIEkgbmVlZCBpcyBpbiBgaW5jbHVkZS9uZXQveGZybS5oYC4gT2theSwgZ290IGl0LiBIbW0sIGludGVyZXN0aW5nLi4uIHRoZXJlJ3MgYSAqc3RhdGljIGlubGluZSogdmVyc2lvbiBkZWZpbmVkIGFzIHdlbGw/IFRoYXQncyBhIGNsYXNzaWMgb3B0aW1pemF0aW9uIHRlY2huaXF1ZSwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGJvdGggdGhlIG1haW4gZGVjbGFyYXRpb24gYW5kIHRoZSBpbmxpbmUgdmFyaWFudC4gR290dGEgc2VlIGhvdyB0aGV5IGludGVyYWN0LiBMZXQncyBkaWcgZGVlcGVyLiBUbyBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSSdsbCBqdW1wIHRvIGFyb3VuZCBsaW5lIDIyMDcgaW4gYGluY2x1ZGUvbmV0L3hmcm0uaGAgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkZXRhaWxzIEkgbmVlZCB0byBldmFsdWF0ZSB0aGUgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBhbmQgZmlndXJlIG91dCBleGFjdGx5IGhvdyB0aGVzZSBrZXkgbGVuZ3RocyBhcmUgaGFuZGxlZCBhbmQgb3B0aW1pemVkIHdpdGhpbiB0aGUgWEZSTSBmcmFtZXdvcmsuIFRoaXMgaXMgYSBjcml0aWNhbCBhcmVhIGZvciBwZXJmb3JtYW5jZSwgc28gdW5kZXJzdGFuZGluZyB0aGUgaW5saW5lIGltcGxpY2F0aW9ucyBpcyBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0ODE1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6NDk6MTMuMDAwMzM3MDc4WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC94ZnJtLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjE5NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE5NTpcXHRcXG4yMTk2OlxcdHN0YXRpYyBpbmxpbmUgaW50IHhmcm1fZGV2X3N0YXRlX2FkZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbjIxOTc6XFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgeGZybV91c2VyX29mZmxvYWQgKnh1byxcXG4yMTk4OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjIxOTk6XFx0e1xcbjIyMDA6XFx0XFx0cmV0dXJuIDA7XFxuMjIwMTpcXHR9XFxuMjIwMjpcXHRcXG4yMjAzOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCB4ZnJtX2Rldl9zdGF0ZV9kZWxldGUoc3RydWN0IHhmcm1fc3RhdGUgKngpXFxuMjIwNDpcXHR7XFxuMjIwNTpcXHR9XFxuMjIwNjpcXHRcXG4yMjA3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCB4ZnJtX2Rldl9zdGF0ZV9mcmVlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbjIyMDg6XFx0e1xcbjIyMDk6XFx0fVxcbjIyMTA6XFx0XFxuMjIxMTpcXHRzdGF0aWMgaW5saW5lIGludCB4ZnJtX2Rldl9wb2xpY3lfYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHhmcm1fcG9saWN5ICp4cCxcXG4yMjEyOlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB4ZnJtX3VzZXJfb2ZmbG9hZCAqeHVvLCB1OCBkaXIsXFxuMjIxMzpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMjIxNDpcXHR7XFxuMjIxNTpcXHRcXHRyZXR1cm4gMDtcXG4yMjE2OlxcdH1cXG4yMjE3OlxcdFxcbjIyMTg6XFx0c3RhdGljIGlubGluZSB2b2lkIHhmcm1fZGV2X3BvbGljeV9kZWxldGUoc3RydWN0IHhmcm1fcG9saWN5ICp4KVxcbjIyMTk6XFx0e1xcbjIyMjA6XFx0fVxcbjIyMjE6XFx0XFxuMjIyMjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgeGZybV9kZXZfcG9saWN5X2ZyZWUoc3RydWN0IHhmcm1fcG9saWN5ICp4KVxcbjIyMjM6XFx0e1xcbjIyMjQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODo0OToxMy4wMDA0ODU0NjhaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY3MTI1NDU3MTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgeGZybSBPZmZsb2FkIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGBzdGF0aWMgaW5saW5lYCB2ZXJzaW9uIGlzIGJlaW5nIHVzZWQgc3BlY2lmaWNhbGx5IHdoZW4gYENPTkZJR19YRlJNX09GRkxPQURgIGlzbid0IGRlZmluZWQuIFRoYXQgc3VnZ2VzdHMgdGhhdCB0aGVyZSdzIGFuIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uLCBwcmVzdW1hYmx5IG9wdGltaXplZCBmb3IgaGFyZHdhcmUgb2ZmbG9hZCwgdGhhdCBraWNrcyBpbiB3aGVuIHRoZSBvZmZsb2FkIGZlYXR1cmUgKmlzKiBlbmFibGVkLiBUaGlzIGJlZ3MgdGhlIHF1ZXN0aW9uOiBXaGF0J3MgdGhlIGV4YWN0IG5hdHVyZSBvZiB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgaW5saW5lIHZlcnNpb24gYW5kIHRoZSBvZmZsb2FkIHZlcnNpb24uIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGAjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRGAgYmxvY2sgaW4gYGluY2x1ZGUvbmV0L3hmcm0uaGAgdG8gc2VlIGhvdyB0aGVzZSBhcmUgaGFuZGxlZCBhbmQgZXhhY3RseSBob3cgdGhlIGNvZGUgYnJhbmNoZXMuIFRoZSBoZWFkZXIgZmlsZSBzaG91bGQgZ2l2ZSBtZSB0aGUgZnVsbCBwaWN0dXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHNwZWNpZmljIHBpZWNlIGZpdHMgaW50byB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1MzYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjUyOjAwLjEyNTk0NTNaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTUzNDEzMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1hGUk1fT0ZGTE9BRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC94ZnJtLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQveGZybS5oPTE3MjE9dm9pZCB4ZnJtX3N0YXRlX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgbmV0ICpuZXQpO1xcbmluY2x1ZGUvbmV0L3hmcm0uaDoxNzIyOiNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXFxuaW5jbHVkZS9uZXQveGZybS5oLTE3MjMtc3RhdGljIGlubGluZSB2b2lkIHhmcm1fZGV2X3N0YXRlX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbmluY2x1ZGUvbmV0L3hmcm0uaD0yMTE4PXZvaWQgX19pbml0IHhmcm1fZGV2X2luaXQodm9pZCk7XFxuaW5jbHVkZS9uZXQveGZybS5oLTIxMTktXFxuaW5jbHVkZS9uZXQveGZybS5oOjIxMjA6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcXG5pbmNsdWRlL25ldC94ZnJtLmgtMjEyMS12b2lkIHhmcm1fZGV2X3Jlc3VtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6NTI6MDEuNTIxMjk0ODE0WiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMDIzNzU0OTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgeGZybV9kZXZfc3RhdGVfZnJlZWAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIGl0cyBkZWZpbml0aW9uIGlzIGNvbmRpdGlvbmFsLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgd2FzIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGV4aXN0ZWQgaWYgYENPTkZJR19YRlJNX09GRkxPQURgIHdhcyBlbmFibGVkLiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBJICpzd2VhciogSSBzYXcgaXQgZGVmaW5lZCBlbHNld2hlcmUsIHNwZWNpZmljYWxseSBpbiBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYCwgYW5kIGl0ICp3YXNuJ3QqIHdyYXBwZWQgaW4gYW4gYCNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEYCBibG9jay4gVGhpcyBpcyB0aHJvd2luZyBtZSBvZmYuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoaXMgZGlzY3JlcGFuY3kuIExldCBtZSBwdWxsIHVwIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA3ODAuIEknbGwgc2VlIGlmIEkgY2FuIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBmdW5jdGlvbidzIGV4aXN0ZW5jZSBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGhhcyBiZWVuIGRlZmluZWQuIFRoaXMgY291bGQgYmUgYSBjcml0aWNhbCBtaXN1bmRlcnN0YW5kaW5nIG9uIG15IHBhcnQsIG9yIGEgc3VidGxlIG51YW5jZSBpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiB0aGF0IEknbSBtaXNzaW5nLiBUaW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MDExLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjUzOjIzLjU0NTA1MzAzM1oiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV9zdGF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc2MDpcXHRcXHR9XFxuIDc2MTpcXHRcXHRyZXR1cm4geDtcXG4gNzYyOlxcdH1cXG4gNzYzOlxcdEVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9hbGxvYyk7XFxuIDc2NDpcXHRcXG4gNzY1OlxcdCNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXFxuIDc2NjpcXHR2b2lkIHhmcm1fZGV2X3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4gNzY3OlxcdHtcXG4gNzY4OlxcdFxcdHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkICp4c28gPSBcXHUwMDI2eC1cXHUwMDNleHNvO1xcbiA3Njk6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IFJFQURfT05DRSh4c28tXFx1MDAzZWRldik7XFxuIDc3MDpcXHRcXG4gNzcxOlxcdFxcdGlmIChkZXYpIHtcXG4gNzcyOlxcdFxcdFxcdGRldi1cXHUwMDNleGZybWRldl9vcHMtXFx1MDAzZXhkb19kZXZfc3RhdGVfZGVsZXRlKGRldiwgeCk7XFxuIDc3MzpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xcbiA3NzQ6XFx0XFx0XFx0aGxpc3RfYWRkX2hlYWQoXFx1MDAyNngtXFx1MDAzZWRldl9nY2xpc3QsIFxcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19saXN0KTtcXG4gNzc1OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcXG4gNzc2OlxcdFxcdH1cXG4gNzc3OlxcdH1cXG4gNzc4OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fZGV2X3N0YXRlX2RlbGV0ZSk7XFxuIDc3OTpcXHRcXG4gNzgwOlxcdHZvaWQgeGZybV9kZXZfc3RhdGVfZnJlZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4gNzgxOlxcdHtcXG4gNzgyOlxcdFxcdHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkICp4c28gPSBcXHUwMDI2eC1cXHUwMDNleHNvO1xcbiA3ODM6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IFJFQURfT05DRSh4c28tXFx1MDAzZWRldik7XFxuIDc4NDpcXHRcXG4gNzg1OlxcdFxcdGlmIChkZXYgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2V4ZnJtZGV2X29wcykge1xcbiA3ODY6XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcXG4gNzg3OlxcdFxcdFxcdGlmICghaGxpc3RfdW5oYXNoZWQoXFx1MDAyNngtXFx1MDAzZWRldl9nY2xpc3QpKVxcbiA3ODg6XFx0XFx0XFx0XFx0aGxpc3RfZGVsX2luaXQoXFx1MDAyNngtXFx1MDAzZWRldl9nY2xpc3QpO1xcbiA3ODk6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xcbiA3OTA6XFx0XFxuIDc5MTpcXHRcXHRcXHRpZiAoZGV2LVxcdTAwM2V4ZnJtZGV2X29wcy1cXHUwMDNleGRvX2Rldl9zdGF0ZV9mcmVlKVxcbiA3OTI6XFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2V4ZnJtZGV2X29wcy1cXHUwMDNleGRvX2Rldl9zdGF0ZV9mcmVlKGRldiwgeCk7XFxuIDc5MzpcXHRcXHRcXHRXUklURV9PTkNFKHhzby1cXHUwMDNlZGV2LCBOVUxMKTtcXG4gNzk0OlxcdFxcdFxcdHhzby1cXHUwMDNldHlwZSA9IFhGUk1fREVWX09GRkxPQURfVU5TUEVDSUZJRUQ7XFxuIDc5NTpcXHRcXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNnhzby1cXHUwMDNlZGV2X3RyYWNrZXIpO1xcbiA3OTY6XFx0XFx0fVxcbiA3OTc6XFx0fVxcbiA3OTg6XFx0I2VuZGlmXFxuIDc5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6NTM6MjMuNTQ1MjEwNjAzWiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMTYzNTg1MTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gWEZSTSBPZmZsb2FkKipcblxuT2theSwgc28gSSd2ZSBwaW5wb2ludGVkIHRoYXQgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgICppcyogaW5kZWVkIHdyYXBwZWQgd2l0aGluIHRoZSBgI2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURgIGJsb2NrLiBDb25maXJtZWQ7IGl0IGNvbmNsdWRlcyBhcm91bmQgbGluZSA3OTguIFRoYXQncyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gSG93ZXZlciwgSSd2ZSBub3RpY2VkIHNvbWV0aGluZyBzbGlnaHRseSBkaWZmZXJlbnQgd2l0aCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgLiBJdCdzICpvdXRzaWRlKiB0aGF0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBUaGF0IGluaXRpYWxseSB0aHJldyBtZSwgYnV0IHRoZW4gSSByZW1lbWJlcmVkIGl0ICpjYWxscyogYHhmcm1fZGV2X3N0YXRlX2ZyZWVgLCB3aGljaCBpcyBhIGBzdGF0aWMgaW5saW5lYCBmdW5jdGlvbi4gQWhhISBTbywgaWYgYENPTkZJR19YRlJNX09GRkxPQURgIGlzbid0IHNldCwgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgIGVmZmVjdGl2ZWx5IGJlY29tZXMgYSBuby1vcCwgcmlnaHQ/XG5cbkJ1dCB0aGF0IHN0aWxsIGJlZ3MgdGhlIHF1ZXN0aW9uLiBJZiBvZmZsb2FkIGlzIGRpc2FibGVkLCBpcyBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGFjdHVhbGx5IGxvb3BpbmcgdGhyb3VnaCBhbnl0aGluZz8gRG9lcyBpdCBldmVuIGl0ZXJhdGUgb3ZlciBgeGZybV9zdGF0ZV9kZXZfZ2NfbGlzdGAgd2hlbiBpdCAqc2hvdWxkbid0KiBiZSBkb2luZyBhbnl0aGluZz8gSSdkIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGJlaGF2aW9yIG9mIGB4ZnJtX3N0YXRlX2Rldl9nY19saXN0YCB1bmRlciB0aGF0IHNjZW5hcmlvLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIG9mIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MDg0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6NTQ6MTMuNzA4Nzk4MzY1WiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDEzNzc4ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fc3RhdGVfZGV2X2djX2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fc3RhdGUuYz01Mz1zdGF0aWMgSExJU1RfSEVBRCh4ZnJtX3N0YXRlX2djX2xpc3QpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo1NDpzdGF0aWMgSExJU1RfSEVBRCh4ZnJtX3N0YXRlX2Rldl9nY19saXN0KTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtNTUtXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9NzY2PXZvaWQgeGZybV9kZXZfc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTc3My1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo3NzQ6XFx0XFx0aGxpc3RfYWRkX2hlYWQoXFx1MDAyNngtXFx1MDAzZWRldl9nY2xpc3QsIFxcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19saXN0KTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtNzc1LVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz05NjE9aW50IHhmcm1fZGV2X3N0YXRlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0YXNrX3ZhbGlkKVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEwMDQtcmVzdGFydF9nYzpcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTAwNTpcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHgsIHRtcCwgXFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xpc3QsIGRldl9nY2xpc3QpIHtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTAwNi1cXHRcXHR4c28gPSBcXHUwMDI2eC1cXHUwMDNleHNvO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODo1NDoxNS4xMjI1ODI5MDdaIiwiU2VxIjo2NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk2MjkyMDQ2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGB4ZnJtX3N0YXRlX2Rldl9nY19saXN0YCBWdWxuZXJhYmlsaXR5IGFuZCBGaXgqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyBgeGZybV9zdGF0ZV9kZXZfZ2NfbGlzdGAgaXMgYWx3YXlzIGRlZmluZWQsIHdoaWNoIGlzIGdvb2QuIEhvd2V2ZXIsIHRoZSBjcml0aWNhbCBgaGxpc3RfYWRkX2hlYWRgIGNhbGwsIGBobGlzdF9hZGRfaGVhZChcdTAwMjZ4LVx1MDAzZWRldl9nY2xpc3QsIFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xpc3QpYCwgb25seSBoYXBwZW5zIHdpdGhpbiBgeGZybV9kZXZfc3RhdGVfZGVsZXRlYC4gQW5kIHRoYXQgZnVuY3Rpb24gaXMgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURgLlxuXG5TbywgaXQncyBwcmV0dHkgY2xlYXI6IGlmIGBDT05GSUdfWEZSTV9PRkZMT0FEYCBpc24ndCBlbmFibGVkLCB0aGF0IGxpc3QgaXMgKmFsd2F5cyogZW1wdHkuIFRoYXTigJlzIGEga2V5IG9ic2VydmF0aW9uLiBUaGlzIG1lYW5zIGBDT05GSUdfWEZSTV9PRkZMT0FEYCBpcyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeSBmb3IgdGhlIGJ1ZyBhbmQsIGNvbnNlcXVlbnRseSwgdGhlIGZpeCwgdG8gZXZlbiBjb21lIGludG8gcGxheS4gSXQncyBhIGZ1bmRhbWVudGFsIHByZXJlcXVpc2l0ZS5cblxuVGhlcmVmb3JlLCB3ZSBoYXZlIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzY2VuYXJpbyB0byB0YXJnZXQgdG8gcmVwcm9kdWNlIHRoaXMuIFdlIG5lZWQgYXQgYSBtaW5pbXVtOlxuLSBgWEZSTWBcbi0gYFhGUk1fVVNFUmBcbi0gYElORVRfRVNQYFxuLSBgSU5FVF9FU1BfT0ZGTE9BRGBcbi0gYElORVQ2X0VTUGBcbi0gYElORVQ2X0VTUF9PRkZMT0FEYFxuXG5CdXQgdGhlbiBhIHRob3VnaHQgY29tZXMgdG8gbWluZC4gYElORVRfRVNQX09GRkxPQURgIGFuZCBgSU5FVDZfRVNQX09GRkxPQURgICpzZWxlY3QqIGBYRlJNX09GRkxPQURgLCBzbyB0aGV5IGFyZSBsaW5rZWQgYW5kIHRoYXQgc2VlbXMgcmVhc29uYWJsZS4gQnV0IGFyZSB0aGVyZSBvdGhlciwgbGVzcyBvYnZpb3VzLCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGFsc28gc2VsZWN0IGBYRlJNX09GRkxPQURgPyBJdCdzIGVzc2VudGlhbCB0byBjb25maXJtIHRoYXQgbm90aGluZyBlbHNlIGluYWR2ZXJ0ZW50bHkgdHJpZ2dlcnMgdGhlIHNhbWUgYmVoYXZpb3IuIE5lZWQgdG8gdmVyaWZ5IHRoYXQgYFhGUk1fT0ZGTE9BRGAgaXNuJ3QgaW5kaXJlY3RseSBzZWxlY3RlZCBieSBzb21ldGhpbmcgZWxzZS4gVGhhdCBjb3VsZCBvcGVuIHVwIGEgbXVjaCB3aWRlciBhdHRhY2sgc3VyZmFjZSB0aGFuIGluaXRpYWxseSBhbnRpY2lwYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5NDgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6NTQ6NTQuNzUxNzkwODEyWiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY4OTE0MjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBYRlJNX09GRkxPQURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MzY5PWNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM3MS1cXHRkZXBlbmRzIG9uIElORVRfRVNQXFxubmV0L2lwdjQvS2NvbmZpZzozNzI6XFx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxcbm5ldC9pcHY0L0tjb25maWctMzczLVxcdGRlZmF1bHQgblxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz03Nz1jb25maWcgSU5FVDZfRVNQX09GRkxPQURcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctNzktXFx0ZGVwZW5kcyBvbiBJTkVUNl9FU1BcXG5uZXQvaXB2Ni9LY29uZmlnOjgwOlxcdHNlbGVjdCBYRlJNX09GRkxPQURcXG5uZXQvaXB2Ni9LY29uZmlnLTgxLVxcdGRlZmF1bHQgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODo1NDo1Ni40MjA3MTMzMDVaIiwiU2VxIjo2NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU4Mzg5MDM2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFhGUk0gT2ZmbG9hZCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBwcmltYXJ5IGZvY3VzIGhlcmUgaXMgYSBmaXggcmVsYXRlZCB0byBhIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkgd2l0aGluIHRoZSBYRlJNIGRldmljZSBzdGF0ZSBnYXJiYWdlIGNvbGxlY3Rpb24uICBUaGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBhcmUgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBhbmQgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgLiAgVGhlIHBhdGNoIHNwZWNpZmljYWxseSB0YXJnZXRzIFhGUk0gb2ZmbG9hZCBzdGF0ZSBjbGVhbnVwLCBzbyB0aGF0IG1lYW5zIGBJTkVUX0VTUF9PRkZMT0FEYCBhbmQgYElORVQ2X0VTUF9PRkZMT0FEYCBtdXN0IGJlIGVuYWJsZWQgdG8gdHJpZ2dlciB0aGUgdnVsbmVyYWJsZSBjb2RlLiBUaG9zZSBzZWVtIHRvIGJlIHRoZSBjcml0aWNhbCBlbmFibGluZyBjb25kaXRpb25zLlxuXG5Jbml0aWFsbHksIEkgemVyb2VkIGluIG9uIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgYW5kIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCBhcyB0aGUgZm9jdXMgc3ltYm9scyBiZWNhdXNlIHRoZXkgYXJlIGRpcmVjdGx5IG1vZGlmaWVkIGJ5IHRoZSBwYXRjaC4gSSB2ZXJpZmllZCBib3RoLiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIGV4cG9ydGVkLCBtYWtpbmcgaXQgZWFzeSB0byByZWZlcmVuY2UuIFdoaWxlIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCBpc24ndCBleHBsaWNpdGx5IGV4cG9ydGVkLCB0aGUgZmFjdCB0aGF0IGl0IGlzICpub24tc3RhdGljKiBtZWFucyBpdCB3aWxsIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgbWFraW5nIGl0IGEgdmFsaWQgZm9jdXMgc3ltYm9sIHRvby4gSSd2ZSBkb3VibGUtY2hlY2tlZCBpdHMgZGVmaW5pdGlvbiB3aXRoaW4gYG5ldC94ZnJtL3hmcm1fc3RhdGUuY2AgYW5kIGNvbmZpcm1lZCBpdCdzIG5vdCBpbmxpbmUuXG5cbkxvb2tpbmcgYXQgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zLCBJIHJlYWxpemVkIHRoYXQgSSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUgbWV0LiBTaW5jZSB3ZSBuZWVkIG9mZmxvYWQsIHRoYXQgbWVhbnMgd2UgbmVlZCBgSU5FVF9FU1BgIGFuZCBgSU5FVDZfRVNQYCB3aGljaCBpbiB0dXJuIG5lZWQgYElORVRgLCBgSU5FVDZgIGFuZCBgWEZSTWAuIGBYRlJNX1VTRVJgIGlzIGluY2x1ZGVkIGJlY2F1c2UgaXQncyByZXF1aXJlZCBmb3IgY29uZmlndXJpbmcgWEZSTSBzdGF0ZXMgZnJvbSB1c2Vyc3BhY2UuIEFsbCBvZiB0aGVzZSBjb25maWdzIGxvb2sgY29ycmVjdC4gIFRoZSBvdmVyYWxsIHJlYXNvbmluZyBpbiB0aGUgY29uZmlndXJhdGlvbiBpcyBhY2N1cmF0ZTogZW5hYmxpbmcgb2ZmbG9hZCBzdXBwb3J0IHZpYSBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUNl9FU1BfT0ZGTE9BRGAgaXMgZXNzZW50aWFsIHRvIHJlYWNoIHRoZSB0YXJnZXRlZCBjb2RlLlxuXG5JJ3ZlIHJldmlld2VkIHRoZSBjb2RlLiBFdmVyeXRoaW5nIGNoZWNrcyBvdXQuICBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIGluZGVlZCBleHBvcnRlZCBhbmQgZGVmaW5lZCBpbiBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYCBhbmQgaXMgbm90IGlubGluZS5cblxuSSdtIGNvbmZpZGVudCBpbiB0aGlzIGFuYWx5c2lzLiBJIHdpbGwgbW92ZSB0byBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4Nzg4LCJPdXRwdXRUb2tlbnMiOjE4OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODo1NjoxMi4yNTk2MjAxMzVaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTA4MjU0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTVwiLFxuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVF9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJTkVUNl9FU1BfT0ZGTE9BRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fZGV2X3N0YXRlX2ZsdXNoXCIsXG4gICAgXCJ4ZnJtX2Rldl9zdGF0ZV9mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBpbiBYRlJNIGRldmljZSBzdGF0ZSBnYXJiYWdlIGNvbGxlY3Rpb24uIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgeGZybV9kZXZfc3RhdGVfZmx1c2ggYW5kIHhmcm1fZGV2X3N0YXRlX2ZyZWUgaGFuZGxlIFhGUk0gb2ZmbG9hZCBzdGF0ZSBjbGVhbnVwLiBUbyByZWFjaCB0aGlzIGNvZGUsIFhGUk0gb2ZmbG9hZCBzdXBwb3J0IG11c3QgYmUgZW5hYmxlZCAoQ09ORklHX1hGUk1fT0ZGTE9BRCksIHdoaWNoIGlzIHNlbGVjdGVkIGJ5IElORVRfRVNQX09GRkxPQUQgYW5kIElORVQ2X0VTUF9PRkZMT0FELlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1cIixcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiSU5FVF9FU1BcIixcbiAgICBcIklORVRfRVNQX09GRkxPQURcIixcbiAgICBcIklORVQ2X0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQX09GRkxPQURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX2Rldl9zdGF0ZV9mbHVzaFwiLFxuICAgIFwieGZybV9kZXZfc3RhdGVfZnJlZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgaW4gWEZSTSBkZXZpY2Ugc3RhdGUgZ2FyYmFnZSBjb2xsZWN0aW9uLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIHhmcm1fZGV2X3N0YXRlX2ZsdXNoIGFuZCB4ZnJtX2Rldl9zdGF0ZV9mcmVlIGhhbmRsZSBYRlJNIG9mZmxvYWQgc3RhdGUgY2xlYW51cC4gVG8gcmVhY2ggdGhpcyBjb2RlLCBYRlJNIG9mZmxvYWQgc3VwcG9ydCBtdXN0IGJlIGVuYWJsZWQgKENPTkZJR19YRlJNX09GRkxPQUQpLCB3aGljaCBpcyBzZWxlY3RlZCBieSBJTkVUX0VTUF9PRkZMT0FEIGFuZCBJTkVUNl9FU1BfT0ZGTE9BRC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6NTY6MTIuMzM0NzA5NDdaIiwiU2VxIjo2OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzQwNDg5MjM1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjU2OjEyLjMzNTI0NDA4WiIsIlNlcSI6NzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIwMzQwNDM1MzMzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsaWZldGltZSBpc3N1ZSAodXNlLWFmdGVyLWZyZWUpIGluIHRoZSBYRlJNIHN0YXRlIGdhcmJhZ2UgY29sbGVjdGlvbiBsb2dpYy4gSXQgY2hhbmdlcyBgaGxpc3RfZGVsYCB0byBgaGxpc3RfZGVsX2luaXRgIHRvIHByZXZlbnQgaXNzdWVzIHdpdGggbXVsdGlwbGUgZGVsZXRpb25zIGFuZCBhZGRzIHJlZmVyZW5jZSBjb3VudGluZyAoYHhmcm1fc3RhdGVfaG9sZF9yY3VgIGFuZCBgeGZybV9zdGF0ZV9wdXRgKSBhcm91bmQgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgIHRvIGVuc3VyZSB0aGUgb2JqZWN0IGlzIG5vdCBmcmVlZCB3aGlsZSBiZWluZyBhY2Nlc3NlZC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHVzZS1hZnRlci1mcmVlIGFuZCBkb3VibGUtZnJlZSB2dWxuZXJhYmlsaXRpZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzIGJlaW5nIHJlYWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzIwMzUwODMxYTNlYzFmYjA0YzBmNDE3YmE2ZWM5Y2JjNjViMGVmN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDkgMDg6MTk6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N0YXRlLmMgYi9uZXQveGZybS94ZnJtX3N0YXRlLmNcbmluZGV4IDM2YTRmNjc5M2VkZWYuLjAxMTM4ZDNkMTA2NzMgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX3N0YXRlLmNcbisrKyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xuQEAgLTc4NSw3ICs3ODUsNyBAQCB2b2lkIHhmcm1fZGV2X3N0YXRlX2ZyZWUoc3RydWN0IHhmcm1fc3RhdGUgKngpXG4gXHRpZiAoZGV2IFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNleGZybWRldl9vcHMpIHtcbiBcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuIFx0XHRpZiAoIWhsaXN0X3VuaGFzaGVkKFx1MDAyNngtXHUwMDNlZGV2X2djbGlzdCkpXG4tXHRcdFx0aGxpc3RfZGVsKFx1MDAyNngtXHUwMDNlZGV2X2djbGlzdCk7XG4rXHRcdFx0aGxpc3RfZGVsX2luaXQoXHUwMDI2eC1cdTAwM2VkZXZfZ2NsaXN0KTtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XG4gXG4gXHRcdGlmIChkZXYtXHUwMDNleGZybWRldl9vcHMtXHUwMDNleGRvX2Rldl9zdGF0ZV9mcmVlKVxuQEAgLTEwMDYsOCArMTAwNiwxMyBAQCBpbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaVxuIFx0XHR4c28gPSBcdTAwMjZ4LVx1MDAzZXhzbztcbiBcbiBcdFx0aWYgKHhzby1cdTAwM2VkZXYgPT0gZGV2KSB7XG4rXHRcdFx0LyogVGhlIGRldmljZSBHQyBsaXN0IGRvZXMgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8geC4gKi9cbitcdFx0XHRpZiAoIXhmcm1fc3RhdGVfaG9sZF9yY3UoeCkpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcbiBcdFx0XHR4ZnJtX2Rldl9zdGF0ZV9mcmVlKHgpO1xuK1x0XHRcdHhmcm1fc3RhdGVfcHV0KHgpO1xuIFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcbiBcdFx0XHRnb3RvIHJlc3RhcnRfZ2M7XG4gXHRcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjU2OjEyLjMzNTI0NTAzWiIsIlNlcSI6NzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwMzQwNDMyODEzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IEEgTGlmZXRpbWUgQnVnIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLiBJdCdzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgaXMgYWRkcmVzc2luZyBhIGxpZmV0aW1lIGlzc3VlLCBzcGVjaWZpY2FsbHkgYSB1c2UtYWZ0ZXItZnJlZSBvciBwb3RlbnRpYWwgZG91YmxlLWZyZWUgc2NlbmFyaW8uIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyBpbiBob3cgYHhmcm1fc3RhdGVgIG9iamVjdHMgYXJlIGhhbmRsZWQgaW4gdGhlIGRldmljZSBnYXJiYWdlIGNvbGxlY3Rpb24uXG5cbk15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyBjb25maXJtZWQgYnkgdGhlIGNvZGUgY2hhbmdlcy4gSW4gYHhmcm1fZGV2X3N0YXRlX2ZyZWVgLCB0aGV5J3ZlIHJlcGxhY2VkIGEgc2ltcGxlIGBobGlzdF9kZWxgIHdpdGggYGhsaXN0X2RlbF9pbml0YCBmb3IgdGhlIGBkZXZfZ2NsaXN0YC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBpc3N1ZSB3aGVyZSB0aGUgbGlzdCBjb3VsZCBiZSBtYW5pcHVsYXRlZCBhZnRlciBkZWxldGlvbiwgb3IgZG91YmxlIGRlbGV0aW9uIGNvdWxkIG9jY3VyLiBUaGUgYWRkaXRpb24gb2YgYHhmcm1fc3RhdGVfaG9sZF9yY3UoeClgIGFuZCBgeGZybV9zdGF0ZV9wdXQoeClgIHdpdGhpbiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIHRoZSBrZXkuIFRoZSBjb21tZW50IGNvbmZpcm1zIHRoZSBsaXN0IGRvZXNuJ3QgaGF2ZSBhIHJlZmVyZW5jZSwgbWVhbmluZyB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIGJlaW5nIGFkZGVkICpiZWZvcmUqIGNhbGxpbmcgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgLCB3aGljaCBjb3VsZCBzbGVlcCBvciBwZXJmb3JtIG90aGVyIG9wZXJhdGlvbnMuIFN1YnNlcXVlbnRseSwgdGhlIHJlZmVyZW5jZSBpcyByZW1vdmVkLlxuXG5UaGlzIGxvb2tzIGxpa2UgYSBjbGFzc2ljIHJlZi1jb3VudGluZyBzY2hlbWUsIHdoaWNoIHRlbGxzIG1lIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIGEgcmVmZXJlbmNlIGNvdW50IHRvIGB4YCBiZWZvcmUgdGhlIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlKHgpYCBjYWxsIGlzIG1hZGUuIFRoaXMgcHJldmVudHMgYSByYWNlIG9yIGEgVUFGIGJ5IGVuc3VyaW5nIHRoZSBvYmplY3QncyBsaWZldGltZSBpcyBtYW5hZ2VkIGNvcnJlY3RseSB3aGlsZSBpdCdzIGJlaW5nIGFjY2Vzc2VkIG9yIGZsdXNoZWQuXG5cbkJhc2VkIG9uIHRoaXMsIEtBU0FOIHNlZW1zIHRvIGJlIHRoZSByaWdodCB0b29sIGZvciBpZGVudGlmeWluZyBVQUYgaXNzdWVzLCBzbyBJIGRvbid0IHNlZSBhbnkgcmVhc29uIGZvciBLTVNBTiBoZXJlLiBUaGVyZSdzIG5vIGluZGljYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGFuZCBLQVNBTiBzaG91bGQgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcmVtYWluaW5nIFVBRiBidWdzLiBUaGVyZWZvcmUsIEknbSBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBmb3IgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyNCwiT3V0cHV0VG9rZW5zIjoxNzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODo1OTozNS43Mzk1NzY3NjFaIiwiU2VxIjo3MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbGlmZXRpbWUgaXNzdWUgKHVzZS1hZnRlci1mcmVlKSBpbiB0aGUgWEZSTSBzdGF0ZSBnYXJiYWdlIGNvbGxlY3Rpb24gbG9naWMuIEl0IGNoYW5nZXMgYGhsaXN0X2RlbGAgdG8gYGhsaXN0X2RlbF9pbml0YCB0byBwcmV2ZW50IGlzc3VlcyB3aXRoIG11bHRpcGxlIGRlbGV0aW9ucyBhbmQgYWRkcyByZWZlcmVuY2UgY291bnRpbmcgKGB4ZnJtX3N0YXRlX2hvbGRfcmN1YCBhbmQgYHhmcm1fc3RhdGVfcHV0YCkgYXJvdW5kIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCB0byBlbnN1cmUgdGhlIG9iamVjdCBpcyBub3QgZnJlZWQgd2hpbGUgYmVpbmcgYWNjZXNzZWQuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgdnVsbmVyYWJpbGl0aWVzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcyBiZWluZyByZWFkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbGlmZXRpbWUgaXNzdWUgKHVzZS1hZnRlci1mcmVlKSBpbiB0aGUgWEZSTSBzdGF0ZSBnYXJiYWdlIGNvbGxlY3Rpb24gbG9naWMuIEl0IGNoYW5nZXMgYGhsaXN0X2RlbGAgdG8gYGhsaXN0X2RlbF9pbml0YCB0byBwcmV2ZW50IGlzc3VlcyB3aXRoIG11bHRpcGxlIGRlbGV0aW9ucyBhbmQgYWRkcyByZWZlcmVuY2UgY291bnRpbmcgKGB4ZnJtX3N0YXRlX2hvbGRfcmN1YCBhbmQgYHhmcm1fc3RhdGVfcHV0YCkgYXJvdW5kIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCB0byBlbnN1cmUgdGhlIG9iamVjdCBpcyBub3QgZnJlZWQgd2hpbGUgYmVpbmcgYWNjZXNzZWQuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgdnVsbmVyYWJpbGl0aWVzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcyBiZWluZyByZWFkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowhfh5q[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-09 08:15:30 +0000 UTC FinishedAt: 2026-08-09 08:59:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "c12cbf56320fb633484ee0ca1fb7d68d6b64b213", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM", "XFRM_USER", "INET_ESP", "INET_ESP_OFFLOAD", "INET6_ESP", "INET6_ESP_OFFLOAD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "c12cbf56320fb633484ee0ca1fb7d68d6b64b213", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM", "XFRM_USER", "INET_ESP", "INET_ESP_OFFLOAD", "INET6_ESP", "INET6_ESP_OFFLOAD" ], "series_id": "7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "xfrm_dev_state_flush", "xfrm_dev_state_free" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NDBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUF9PRkZMT0FEJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1BfT0ZGTE9BRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fZGV2X3N0YXRlX2ZsdXNoJiMzNDssCiAgICAmIzM0O3hmcm1fZGV2X3N0YXRlX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxpZmV0aW1lIGlzc3VlICh1c2UtYWZ0ZXItZnJlZSkgaW4gdGhlIFhGUk0gc3RhdGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGxvZ2ljLiBJdCBjaGFuZ2VzIGBobGlzdF9kZWxgIHRvIGBobGlzdF9kZWxfaW5pdGAgdG8gcHJldmVudCBpc3N1ZXMgd2l0aCBtdWx0aXBsZSBkZWxldGlvbnMgYW5kIGFkZHMgcmVmZXJlbmNlIGNvdW50aW5nIChgeGZybV9zdGF0ZV9ob2xkX3JjdWAgYW5kIGB4ZnJtX3N0YXRlX3B1dGApIGFyb3VuZCBgeGZybV9kZXZfc3RhdGVfZnJlZWAgdG8gZW5zdXJlIHRoZSBvYmplY3QgaXMgbm90IGZyZWVkIHdoaWxlIGJlaW5nIGFjY2Vzc2VkLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgdXNlLWFmdGVyLWZyZWUgYW5kIGRvdWJsZS1mcmVlIHZ1bG5lcmFiaWxpdGllcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMgYmVpbmcgcmVhZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBpbiBYRlJNIGRldmljZSBzdGF0ZSBnYXJiYWdlIGNvbGxlY3Rpb24uIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgeGZybV9kZXZfc3RhdGVfZmx1c2ggYW5kIHhmcm1fZGV2X3N0YXRlX2ZyZWUgaGFuZGxlIFhGUk0gb2ZmbG9hZCBzdGF0ZSBjbGVhbnVwLiBUbyByZWFjaCB0aGlzIGNvZGUsIFhGUk0gb2ZmbG9hZCBzdXBwb3J0IG11c3QgYmUgZW5hYmxlZCAoQ09ORklHX1hGUk1fT0ZGTE9BRCksIHdoaWNoIGlzIHNlbGVjdGVkIGJ5IElORVRfRVNQX09GRkxPQUQgYW5kIElORVQ2X0VTUF9PRkZMT0FELiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzIwMzUwODMxYTNlYzFmYjA0YzBmNDE3YmE2ZWM5Y2JjNjViMGVmN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDkgMDg6MTk6MDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jXG5pbmRleCAzNmE0ZjY3OTNlZGVmLi4wMTEzOGQzZDEwNjczIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX3N0YXRlLmNcbkBAIC03ODUsNyAmIzQzOzc4NSw3IEBAIHZvaWQgeGZybV9kZXZfc3RhdGVfZnJlZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbiBcdGlmIChkZXYgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2V4ZnJtZGV2X29wcykge1xuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XG4gXHRcdGlmICghaGxpc3RfdW5oYXNoZWQoXHUwMDI2eC1cdTAwM2VkZXZfZ2NsaXN0KSlcbi1cdFx0XHRobGlzdF9kZWwoXHUwMDI2eC1cdTAwM2VkZXZfZ2NsaXN0KTtcbiYjNDM7XHRcdFx0aGxpc3RfZGVsX2luaXQoXHUwMDI2eC1cdTAwM2VkZXZfZ2NsaXN0KTtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XG4gXG4gXHRcdGlmIChkZXYtXHUwMDNleGZybWRldl9vcHMtXHUwMDNleGRvX2Rldl9zdGF0ZV9mcmVlKVxuQEAgLTEwMDYsOCAmIzQzOzEwMDYsMTMgQEAgaW50IHhmcm1fZGV2X3N0YXRlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0YXNrX3ZhbGlcbiBcdFx0eHNvID0gXHUwMDI2eC1cdTAwM2V4c287XG4gXG4gXHRcdGlmICh4c28tXHUwMDNlZGV2ID09IGRldikge1xuJiM0MztcdFx0XHQvKiBUaGUgZGV2aWNlIEdDIGxpc3QgZG9lcyBub3QgaG9sZCBhIHJlZmVyZW5jZSB0byB4LiAqL1xuJiM0MztcdFx0XHRpZiAoIXhmcm1fc3RhdGVfaG9sZF9yY3UoeCkpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuIFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuIFx0XHRcdHhmcm1fZGV2X3N0YXRlX2ZyZWUoeCk7XG4mIzQzO1x0XHRcdHhmcm1fc3RhdGVfcHV0KHgpO1xuIFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcbiBcdFx0XHRnb3RvIHJlc3RhcnRfZ2M7XG4gXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODoxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zN208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk0mIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgICAmIzM0O0lORVRfRVNQJiMzNDssCiAgICAmIzM0O0lORVRfRVNQX09GRkxPQUQmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUF9PRkZMT0FEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZybV9kZXZfc3RhdGVfZmx1c2gmIzM0OywKICAgICYjMzQ7eGZybV9kZXZfc3RhdGVfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIGluIFhGUk0gZGV2aWNlIHN0YXRlIGdhcmJhZ2UgY29sbGVjdGlvbi4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyB4ZnJtX2Rldl9zdGF0ZV9mbHVzaCBhbmQgeGZybV9kZXZfc3RhdGVfZnJlZSBoYW5kbGUgWEZSTSBvZmZsb2FkIHN0YXRlIGNsZWFudXAuIFRvIHJlYWNoIHRoaXMgY29kZSwgWEZSTSBvZmZsb2FkIHN1cHBvcnQgbXVzdCBiZSBlbmFibGVkIChDT05GSUdfWEZSTV9PRkZMT0FEKSwgd2hpY2ggaXMgc2VsZWN0ZWQgYnkgSU5FVF9FU1BfT0ZGTE9BRCBhbmQgSU5FVDZfRVNQX09GRkxPQUQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MjAzNTA4MzFhM2VjMWZiMDRjMGY0MTdiYTZlYzljYmM2NWIwZWY3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgOSAwODoxOTowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwppbmRleCAzNmE0ZjY3OTNlZGVmLi4wMTEzOGQzZDEwNjczIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3N0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jCkBAIC03ODUsNyAmIzQzOzc4NSw3IEBAIHZvaWQgeGZybV9kZXZfc3RhdGVfZnJlZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCkKIAlpZiAoZGV2ICZhbXA7JmFtcDsgZGV2LSZndDt4ZnJtZGV2X29wcykgewogCQlzcGluX2xvY2tfYmgoJmFtcDt4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTsKIAkJaWYgKCFobGlzdF91bmhhc2hlZCgmYW1wO3gtJmd0O2Rldl9nY2xpc3QpKQotCQkJaGxpc3RfZGVsKCZhbXA7eC0mZ3Q7ZGV2X2djbGlzdCk7CiYjNDM7CQkJaGxpc3RfZGVsX2luaXQoJmFtcDt4LSZndDtkZXZfZ2NsaXN0KTsKIAkJc3Bpbl91bmxvY2tfYmgoJmFtcDt4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTsKIAogCQlpZiAoZGV2LSZndDt4ZnJtZGV2X29wcy0mZ3Q7eGRvX2Rldl9zdGF0ZV9mcmVlKQpAQCAtMTAwNiw4ICYjNDM7MTAwNiwxMyBAQCBpbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaQogCQl4c28gPSAmYW1wO3gtJmd0O3hzbzsKIAogCQlpZiAoeHNvLSZndDtkZXYgPT0gZGV2KSB7CiYjNDM7CQkJLyogVGhlIGRldmljZSBHQyBsaXN0IGRvZXMgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8geC4gKi8KJiM0MzsJCQlpZiAoIXhmcm1fc3RhdGVfaG9sZF9yY3UoeCkpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwogCQkJc3Bpbl91bmxvY2tfYmgoJmFtcDt4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTsKIAkJCXhmcm1fZGV2X3N0YXRlX2ZyZWUoeCk7CiYjNDM7CQkJeGZybV9zdGF0ZV9wdXQoeCk7CiAJCQlzcGluX2xvY2tfYmgoJmFtcDt4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTsKIAkJCWdvdG8gcmVzdGFydF9nYzsKIAkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlhGUk0gU3RhdGUgR2FyYmFnZSBDb2xsZWN0aW9uIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYG5ldC94ZnJtL3hmcm1fc3RhdGUuY2AuIEl0IHNlZW1zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgWEZSTSBzdGF0ZSBnYXJiYWdlIGNvbGxlY3Rpb24gbWVjaGFuaXNtIGZvciBkZXZpY2VzLiBUaGUgcGF0Y2ggYWx0ZXJzIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCBhbmQgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYC4KClRoZSBrZXkgY2hhbmdlIGluIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCBpcyB0aGUgcmVwbGFjZW1lbnQgb2YgYGhsaXN0X2RlbGAgd2l0aCBgaGxpc3RfZGVsX2luaXRgIHdoZW4gcmVtb3ZpbmcgYW4gZW50cnkgZnJvbSB0aGUgYGRldl9nY2xpc3RgLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIHByYWN0aWNlIHRvIGhlbHAgYXZvaWQgZGFuZ2xpbmcgcG9pbnRlcnMsIGdvb2QgY2F0Y2guCgpOb3csIGluIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAsIHRoZXkmIzM5O3ZlIGFkZGVkIHRoaXMgY29uZGl0aW9uYWwgYmxvY2sgKmJlZm9yZSogY2FsbGluZyBgeGZybV9kZXZfc3RhdGVfZnJlZWA6CgpgYGBjCgkJCS8qIFRoZSBkZXZpY2UgR0MgbGlzdCBkb2VzIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHguICovCgkJCWlmICgheGZybV9zdGF0ZV9ob2xkX3JjdSh4KSkKCQkJCWNvbnRpbnVlOwoKCQkJc3Bpbl91bmxvY2tfYmgoJmFtcDt4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTsKCQkJeGZybV9kZXZfc3RhdGVfZnJlZSh4KTsKCQkJeGZybV9zdGF0ZV9wdXQoeCk7CgkJCXNwaW5fbG9ja19iaCgmYW1wO3hmcm1fc3RhdGVfZGV2X2djX2xvY2spOwoJCQlnb3RvIHJlc3RhcnRfZ2M7CmBgYAoKSXQgbG9va3MgbGlrZSB0aGUgYHhmcm1fc3RhdGVfaG9sZF9yY3VgIGFuZCBjb3JyZXNwb25kaW5nIGB4ZnJtX3N0YXRlX3B1dGAgaXMgdGhlcmUgdG8gZW5zdXJlIHRoYXQgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgIGRvZXNuJiMzOTt0IHJlbGVhc2UgbWVtb3J5IHdoaWxlIHNvbWV0aGluZyBlbHNlIG1pZ2h0IHN0aWxsIGJlIHVzaW5nIGl0LiBUaGlzIGlzIGEgY29tbW9uIGFwcHJvYWNoIHVzaW5nIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSkgdG8gYXZvaWQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBkdXJpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIHdoZXJlIGEgc3RhdGUgZW50cnkgbWlnaHQgYmUgZnJlZWQgYmVmb3JlIGl0JiMzOTtzIGNvbXBsZXRlbHkgdW51c2VkLiBUaGUgY29tbWVudCBpbmRpY2F0ZXMgdGhlIGBkZXZfZ2NsaXN0YCBkb2VzbiYjMzk7dCBob2xkIGEgcmVmZXJlbmNlLCBzbyB0aGlzIGNvbmZpcm1zIHRoZSBuZWVkIGZvciBhbiBleHBsaWNpdCBob2xkLiBUaGUgYHJlc3RhcnRfZ2NgIGdvdG8gbGlrZWx5IGhhbmRsZXMgdGhlIGZhY3QgdGhhdCB0aGUgR0MgbGlzdCBtaWdodCBoYXZlIGNoYW5nZWQgZHVyaW5nIHRoZSBmcmVlaW5nIHByb2Nlc3MsIGFuZCB3ZSBuZWVkIHRvIHJlLWV2YWx1YXRlIGFmdGVyIGZyZWVpbmcgdGhlIGVudHJ5LgoKSSBzaG91bGQgcHJvYmFibHkgY29uZmlybSB3aGljaCBjb25maWcgb3B0aW9ucyBhcmUgcmVsYXRlZCB0byBYRlJNIHRvIGZ1cnRoZXIgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMuIEl0JiMzOTtzIGltcG9ydGFudCB0byBrbm93IHRoZSBjb250ZXh0IG9mIHRoaXMgcGF0Y2gsIGxpa2Ugd2hpY2gga2VybmVsIHZlcnNpb25zIGl0IGFwcGxpZXMgdG8uIFdlIG5lZWQgdG8gYmUgc3VyZSB0aGlzIGZpeGVzIHRoZSBpc3N1ZSBpbiBhbGwgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9kZXZfc3RhdGVfZmx1c2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9kZXZpY2UuYz01NDY9c3RhdGljIGludCB4ZnJtX2Rldl9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NDgtXHRpZiAoZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX0VTUCkge1xubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1NDk6XHRcdHhmcm1fZGV2X3N0YXRlX2ZsdXNoKGRldl9uZXQoZGV2KSwgZGV2LCB0cnVlKTtcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTUwLVx0XHR4ZnJtX2Rldl9wb2xpY3lfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM9NTU2PXN0YXRpYyBpbnQgeGZybV9kZXZfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NTcte1xubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1NTg6XHR4ZnJtX2Rldl9zdGF0ZV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU1OS1cdHhmcm1fZGV2X3BvbGljeV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTg4NT1zdGF0aWMgaW5saW5lIGludFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjg4Njp4ZnJtX2Rldl9zdGF0ZV9mbHVzaF9zZWNjdHhfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaWQpXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtODg3LXtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9OTE0PXN0YXRpYyBpbmxpbmUgaW50XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6OTE1Onhmcm1fZGV2X3N0YXRlX2ZsdXNoX3NlY2N0eF9jaGVjayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpZClcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy05MTYte1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz05NTk9RVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX2ZsdXNoKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy05NjAtXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6OTYxOmludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpZClcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy05NjIte1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy05NjgtXHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo5Njk6XHRlcnIgPSB4ZnJtX2Rldl9zdGF0ZV9mbHVzaF9zZWNjdHhfY2hlY2sobmV0LCBkZXYsIHRhc2tfdmFsaWQpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTk3MC1cdGlmIChlcnIpXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEwMjYtfVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjEwMjc6RVhQT1JUX1NZTUJPTCh4ZnJtX2Rldl9zdGF0ZV9mbHVzaCk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTAyOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODc3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgWEZSTSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIFhGUk0gY29uZmlndXJhdGlvbi4gUmlnaHQsIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBmb3IgdGhlIGNvcmUgWEZSTSBmdW5jdGlvbmFsaXR5IGlzIGBDT05GSUdfWEZSTWAuIEkmIzM5O3ZlIGdvdCB0byBjb25maXJtIHdoZXJlIHRoaXMgaXMgZGVmaW5lZCBhbmQgaG93IGl0JiMzOTtzIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIHJlbGV2YW50IEtjb25maWcgYW5kIE1ha2VmaWxlIGZpbGVzLiBUaGUgbG9naWNhbCBwbGFjZXMgdG8gc3RhcnQgYXJlIGBuZXQveGZybS9LY29uZmlnYCBhbmQgYG5ldC94ZnJtL01ha2VmaWxlYC4gVGhvc2UgZmlsZXMgc2hvdWxkIGdpdmUgbWUgdGhlIGRldGFpbHMgb24gZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIHRoZSBidWlsZCBsb2dpYyByZWxhdGVkIHRvIHRoaXMgZmVhdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgb3B0aW9uIGluZmx1ZW5jZXMgdGhlIGNvbXBpbGF0aW9uIGFuZCBsaW5raW5nIG9mIHRoZSBYRlJNIG1vZHVsZXMgYW5kIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGhpbiB0aGUgd2lkZXIgbmV0d29ya2luZyBzdGFjay4gR29vZCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX3N0YXRlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZT0xMj1lbmRpZlxubmV0L3hmcm0vTWFrZWZpbGUtMTMtXG5uZXQveGZybS9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfWEZSTSkgOj0geGZybV9wb2xpY3kubyB4ZnJtX3N0YXRlLm8geGZybV9oYXNoLm8gXFxcbm5ldC94ZnJtL01ha2VmaWxlLTE1LVx0XHQgICAgICB4ZnJtX2lucHV0Lm8geGZybV9vdXRwdXQubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMzAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipYRlJNIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCkFscmlnaHQsIHNvIHRoZSBkaXNjdXNzaW9uIGhhcyBob25lZCBpbiBvbiBgQ09ORklHX1hGUk1gIGJlaW5nIGEgZnVuZGFtZW50YWwgcmVxdWlyZW1lbnQg4oCTIG5vIHN1cnByaXNlIHRoZXJlLiBCdXQgdGhlbiwgdGhlIG1lbnRpb24gb2YgYENPTkZJR19YRlJNX09GRkxPQURgIGFuZCBpdHMgcG90ZW50aWFsIGxpbmsgdG8gYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYC4uLiB0aGF0JiMzOTtzIGdvdCBtZSB0aGlua2luZy4gSXQmIzM5O3MgYSBrZXkgcXVlc3Rpb246IGlzIG9mZmxvYWQgZnVuY3Rpb25hbGl0eSBzdHJpY3RseSBuZWNlc3NhcnkgZm9yIHRoYXQgZmx1c2ggb3BlcmF0aW9uIHRvIGJlIHRyaWdnZXJlZD8gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIGRlcGVuZGVuY3ksIGFuZCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYG5ldC94ZnJtL3hmcm1fZGV2aWNlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBhbmQsIGNyaXRpY2FsbHksIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aWVkIHRvIGBDT05GSUdfWEZSTV9PRkZMT0FEYC4gTGV0JiMzOTtzIGNvbmZpcm0gb3IgcmVqZWN0IHRoZSBzdXNwZWN0ZWQgZGVwZW5kZW5jeSwgc2hhbGwgd2U/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9kZXZpY2UubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19YRlJNKSA6PSB4ZnJtX3BvbGljeS5vIHhmcm1fc3RhdGUubyB4ZnJtX2hhc2gubyBcXFxubmV0L3hmcm0vTWFrZWZpbGUtMTUtXHRcdCAgICAgIHhmcm1faW5wdXQubyB4ZnJtX291dHB1dC5vIFxcXG5uZXQveGZybS9NYWtlZmlsZToxNjpcdFx0ICAgICAgeGZybV9zeXNjdGwubyB4ZnJtX3JlcGxheS5vIHhmcm1fZGV2aWNlLm8gXFxcbm5ldC94ZnJtL01ha2VmaWxlLTE3LVx0XHQgICAgICB4ZnJtX25hdF9rZWVwYWxpdmUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NTYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgWEZSTSBEZXZpY2UgQ29kZSoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgYHhmcm1fZGV2aWNlLmNgIGdldHMgY29tcGlsZWQgaW50byB0aGUga2VybmVsIHdoZW4gYENPTkZJR19YRlJNYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIHRoZSBleHBlY3RlZCBzZXR1cC4gTm93LCBsZXQmIzM5O3MgdHJhY2Ugc29tZXRoaW5nIHNwZWNpZmljLiBJIHNlZSBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGNhbGxlZCB3aXRoaW4gYHhmcm1fZGV2X2Rvd25gIGFuZCBgeGZybV9kZXZfdW5yZWdpc3RlcmAuIFRoYXQgbWFrZXMgc2Vuc2U7IHdlJiMzOTtyZSBsaWtlbHkgY2xlYW5pbmcgdXAgc3RhdGUgd2hlbiBhIGRldmljZSBpcyBnb2luZyBvZmZsaW5lIG9yIGJlaW5nIHJlbW92ZWQuIEJ1dCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgKmZ1bGwqIHBpY3R1cmUuIFdoZXJlIGVsc2UgaXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgd2lkZXIgWEZSTSBmcmFtZXdvcmsuIExldCBtZSBjaGVjayB0aGUgY2FsbCBzaXRlcyBvZiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIHRvIGdldCBhIGJyb2FkZXIgdmlldyBvZiBob3cgaXQgb3BlcmF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fZGV2X3N0YXRlX2ZsdXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fZGV2aWNlLmM9NTQ2PXN0YXRpYyBpbnQgeGZybV9kZXZfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTQ4LVx0aWYgKGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19FU1ApIHtcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6NTQ5Olx0XHR4ZnJtX2Rldl9zdGF0ZV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU1MC1cdFx0eGZybV9kZXZfcG9saWN5X2ZsdXNoKGRldl9uZXQoZGV2KSwgZGV2LCB0cnVlKTtcbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jPTU1Nj1zdGF0aWMgaW50IHhmcm1fZGV2X3VucmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTU3LXtcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6NTU4Olx0eGZybV9kZXZfc3RhdGVfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NTktXHR4ZnJtX2Rldl9wb2xpY3lfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz04ODU9c3RhdGljIGlubGluZSBpbnRcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo4ODY6eGZybV9kZXZfc3RhdGVfZmx1c2hfc2VjY3R4X2NoZWNrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0YXNrX3ZhbGlkKVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTg4Ny17XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTkxND1zdGF0aWMgaW5saW5lIGludFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjkxNTp4ZnJtX2Rldl9zdGF0ZV9mbHVzaF9zZWNjdHhfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaWQpXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtOTE2LXtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9OTU5PUVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9mbHVzaCk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtOTYwLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjk2MTppbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaWQpXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtOTYyLXtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtOTY4LVx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6OTY5Olx0ZXJyID0geGZybV9kZXZfc3RhdGVfZmx1c2hfc2VjY3R4X2NoZWNrKG5ldCwgZGV2LCB0YXNrX3ZhbGlkKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy05NzAtXHRpZiAoZXJyKVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMDI2LX1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxMDI3OkVYUE9SVF9TWU1CT0woeGZybV9kZXZfc3RhdGVfZmx1c2gpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEwMjgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NzYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgWEZSTSBEZXZpY2UgTGlmZWN5Y2xlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBYRlJNIGRldmljZXMgYXJlIG1hbmFnZWQsIGFuZCB0aGlzIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgZnVuY3Rpb24gaGFzIGNhdWdodCBteSBleWUuIEkmIzM5O20gbm90aW5nIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYm90aCBgeGZybV9kZXZfZG93bmAgYW5kIGB4ZnJtX2Rldl91bnJlZ2lzdGVyYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYmVjYXVzZSBib3RoIG9mIHRob3NlIGZ1bmN0aW9ucyByZXNpZGUgaW4gYG5ldC94ZnJtL3hmcm1fZGV2aWNlLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zIHRyaWdnZXJlZCBmcm9tPyYjMzQ7IFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGtub3cgaWYgYHhmcm1fZGV2X2Rvd25gIHVzZXMgYSBub3RpZmllci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLCBiZWNhdXNlIHRoYXQmIzM5O3Mga2V5IHRvIGhvdyB0aGUgZGV2aWNlJiMzOTtzIHN0YXRlIGlzIGJlaW5nIGZsdXNoZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fZGV2X2Rvd24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9kZXZpY2UuYz01MjY9c3RhdGljIGludCB4ZnJtX2FwaV9jaGVjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTQ1LVxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1NDY6c3RhdGljIGludCB4ZnJtX2Rldl9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU0Ny17XG4tLVxubmV0L3hmcm0veGZybV9kZXZpY2UuYz01NjQ9c3RhdGljIGludCB4ZnJtX2Rldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU3NS1cdGNhc2UgTkVUREVWX0RPV046XG5uZXQveGZybS94ZnJtX2RldmljZS5jOjU3NjpcdFx0cmV0dXJuIHhmcm1fZGV2X2Rvd24oZGV2KTtcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTc3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTcxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqWEZSTSBTdWJzeXN0ZW0gRXZlbnQgSGFuZGxpbmcqKgoKUmlnaHQsIHNvIGB4ZnJtX2Rldl9ldmVudGAgaXMgYSBub3RpZmllci4gVGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0IHRlbGxzIG1lIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhc3luY2hyb25vdXMgZXZlbnQgaGFuZGxpbmcgcmVsYXRlZCB0byB0aGUgWEZSTSBzdWJzeXN0ZW0uIEdpdmVuIHRoYXQgaXQmIzM5O3MgYSBub3RpZmllciwgSSBpbW1lZGlhdGVseSB0aGluayBhYm91dCB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVsZXZhbnQgdG8gaXQuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCB3ZSYjMzk7cmUgZ29pbmcgdG8gbmVlZCBgQ09ORklHX1hGUk1gIGVuYWJsZWQsIHRoYXQmIzM5O3MgYWxtb3N0IGd1YXJhbnRlZWQuIE5vdywgdGhlIG9mZmxvYWQgY29tcG9uZW50OyB0aGF0IG1pZ2h0IG5lZWQgc29tZSBzcGVjaWZpYyBzZXR0aW5ncywgc28gYENPTkZJR19YRlJNX09GRkxPQURgIGlzIHRoZSBuZXh0IG9idmlvdXMgdGhpbmcgdG8gY2hlY2suIFRvIGNvbmZpcm0gdGhhdCBkZXBlbmRlbmN5LCBJJiMzOTtsbCBxdWlja2x5IGxvb2sgaW50byB0aGUgYG5ldC94ZnJtL0tjb25maWdgIGZpbGUgYW5kIGNvbmZpcm0gdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFhGUk0gb2ZmbG9hZC4gVGhhdCYjMzk7bGwgbG9jayBpbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcmUtcmVxdWlzaXRlIGJ1aWxkIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7WEZSTV9PRkZMT0FEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTAtXG5uZXQveGZybS9LY29uZmlnOjExOmNvbmZpZyBYRlJNX09GRkxPQURcbm5ldC94ZnJtL0tjb25maWctMTItXHRib29sXG4tLVxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0yMS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6MjI6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMjMtc3RhdGljIHZvaWQgX194ZnJtX3RyYW5zcG9ydF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM9MjM5PWludCB4ZnJtX2Rldl9zdGF0ZV9hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTI1MS1cdGlmICh4dW8tXHUwMDNlZmxhZ3MgXHUwMDI2XG5uZXQveGZybS94ZnJtX2RldmljZS5jOjI1MjpcdCAgICB+KFhGUk1fT0ZGTE9BRF9JUFY2IHwgWEZSTV9PRkZMT0FEX0lOQk9VTkQgfCBYRlJNX09GRkxPQURfUEFDS0VUKSkge1xubmV0L3hmcm0veGZybV9kZXZpY2UuYy0yNTMtXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7VW5yZWNvZ25pemVkIGZsYWdzIGluIG9mZmxvYWQgcmVxdWVzdFwmIzM0Oyk7XG4tLVxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0yNTYtXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjI1NzpcdGlmICgoeHVvLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX09GRkxPQURfSU5CT1VORCBcdTAwMjZcdTAwMjYgeC1cdTAwM2VkaXIgPT0gWEZSTV9TQV9ESVJfT1VUKSB8fFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzoyNTg6XHQgICAgKCEoeHVvLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX09GRkxPQURfSU5CT1VORCkgXHUwMDI2XHUwMDI2IHgtXHUwMDNlZGlyID09IFhGUk1fU0FfRElSX0lOKSkge1xubmV0L3hmcm0veGZybV9kZXZpY2UuYy0yNTktXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7TWlzbWF0Y2hlZCBTQSBhbmQgb2ZmbG9hZCBkaXJlY3Rpb25cJiMzNDspO1xuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMjYyLVxubmV0L3hmcm0veGZybV9kZXZpY2UuYzoyNjM6XHRpZiAoeHVvLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX09GRkxPQURfSU5CT1VORCBcdTAwMjZcdTAwMjYgeC1cdTAwM2VpZl9pZCkge1xubmV0L3hmcm0veGZybV9kZXZpY2UuYy0yNjQtXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7WEZSTSBpZl9pZCBpcyBub3Qgc3VwcG9ydGVkIGluIFJYIHBhdGhcJiMzNDspO1xuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMjY3LVxubmV0L3hmcm0veGZybV9kZXZpY2UuYzoyNjg6XHRpc19wYWNrZXRfb2ZmbG9hZCA9IHh1by1cdTAwM2VmbGFncyBcdTAwMjYgWEZSTV9PRkZMT0FEX1BBQ0tFVDtcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMjY5LVxuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMjc5LVxubmV0L3hmcm0veGZybV9kZXZpY2UuYzoyODA6XHRcdGlmICghKHh1by1cdTAwM2VmbGFncyBcdTAwMjYgWEZSTV9PRkZMT0FEX0lOQk9VTkQpKSB7XG5uZXQveGZybS94ZnJtX2RldmljZS5jLTI4MS1cdFx0XHRzYWRkciA9IFx1MDAyNngtXHUwMDNlcHJvcHMuc2FkZHI7XG4tLVxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0zMjYtXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjMyNzpcdGlmICh4dW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fT0ZGTE9BRF9JTkJPVU5EKVxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0zMjgtXHRcdHhzby1cdTAwM2VkaXIgPSBYRlJNX0RFVl9PRkZMT0FEX0lOO1xuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM9MzU5PWludCB4ZnJtX2Rldl9wb2xpY3lfYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHhmcm1fcG9saWN5ICp4cCxcbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTM2Ni1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6MzY3Olx0aWYgKCF4dW8tXHUwMDNlZmxhZ3MgfHwgeHVvLVx1MDAzZWZsYWdzIFx1MDAyNiB+WEZSTV9PRkZMT0FEX1BBQ0tFVCkge1xubmV0L3hmcm0veGZybV9kZXZpY2UuYy0zNjgtXHRcdC8qIFdlIHN1cHBvcnQgb25seSBwYWNrZXQgb2ZmbG9hZCBtb2RlIGFuZCBpdCBtZWFuc1xubmV0L3hmcm0veGZybV9kZXZpY2UuYzozNjk6XHRcdCAqIHRoYXQgdXNlciBtdXN0IHNldCBYRlJNX09GRkxPQURfUEFDS0VUIGJpdC5cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMzcwLVx0XHQgKi9cbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jPTUyNj1zdGF0aWMgaW50IHhmcm1fYXBpX2NoZWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTUyNy17XG5uZXQveGZybS94ZnJtX2RldmljZS5jOjUyODojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01MjktXHRpZiAoKGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19FU1BfVFhfQ1NVTSkgXHUwMDI2XHUwMDI2XG4tLVxubmV0L3hmcm0veGZybV9yZXBsYXkuYz01NTM9c3RhdGljIHZvaWQgeGZybV9yZXBsYXlfYWR2YW5jZV9lc24oc3RydWN0IHhmcm1fc3RhdGUgKngsIF9fYmUzMiBuZXRfc2VxKVxuLS1cbm5ldC94ZnJtL3hmcm1fcmVwbGF5LmMtNjEwLVxubmV0L3hmcm0veGZybV9yZXBsYXkuYzo2MTE6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcbm5ldC94ZnJtL3hmcm1fcmVwbGF5LmMtNjEyLXN0YXRpYyBpbnQgeGZybV9yZXBsYXlfb3ZlcmZsb3dfb2ZmbG9hZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9NzYzPUVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9hbGxvYyk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtNzY0LVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjc2NTojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTc2Ni12b2lkIHhmcm1fZGV2X3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MTEzNj1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKl9feGZybV9zdGF0ZV9sb29rdXBfYWxsKGNvbnN0IHN0cnVjdCB4ZnJtX2hhc2hfc3RhdGVfcHRycyAqc3RhdGVfcHRycyxcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTE0Ni1cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh4LCBzdGF0ZV9wdHJzLVx1MDAzZWJ5c3BpICYjNDM7IGgsIGJ5c3BpKSB7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTE0NzojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTExNDgtXHRcdGlmICh4ZG8tXHUwMDNldHlwZSA9PSBYRlJNX0RFVl9PRkZMT0FEX1BBQ0tFVCkge1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xMzYxPXhmcm1fc3RhdGVfZmluZChjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkcixcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTQzNC1cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh4LCBzdGF0ZV9wdHJzLmJ5ZHN0ICYjNDM7IGgsIGJ5ZHN0KSB7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTQzNTojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE0MzYtXHRcdGlmIChwb2wtXHUwMDNleGRvLnR5cGUgPT0gWEZSTV9ERVZfT0ZGTE9BRF9QQUNLRVQpIHtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTQ2OS1cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh4LCBzdGF0ZV9wdHJzLmJ5ZHN0ICYjNDM7IGhfd2lsZGNhcmQsIGJ5ZHN0KSB7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTQ3MDojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE0NzEtXHRcdGlmIChwb2wtXHUwMDNleGRvLnR5cGUgPT0gWEZSTV9ERVZfT0ZGTE9BRF9QQUNLRVQpIHtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTU0NS1cdFx0fVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE1NDY6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNTQ3LVx0XHRpZiAocG9sLVx1MDAzZXhkby50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUKSB7XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE2MDUtXHRcdH0gZWxzZSB7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTYwNjojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE2MDctXHRcdFx0c3RydWN0IHhmcm1fZGV2X29mZmxvYWQgKnhzbyA9IFx1MDAyNngtXHUwMDNleHNvO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTEyMDQ9c3RhdGljIHZvaWQgeHNvX3RvX3h1b19pZmluZGV4KGNvbnN0IHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkICp4c28sIGludCBpZmluZGV4LFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEyMDgtXHRpZiAoeHNvLVx1MDAzZWRpciA9PSBYRlJNX0RFVl9PRkZMT0FEX0lOKVxubmV0L3hmcm0veGZybV91c2VyLmM6MTIwOTpcdFx0eHVvLVx1MDAzZWZsYWdzID0gWEZSTV9PRkZMT0FEX0lOQk9VTkQ7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMjEwLVx0aWYgKHhzby1cdTAwM2V0eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUKVxubmV0L3hmcm0veGZybV91c2VyLmM6MTIxMTpcdFx0eHVvLVx1MDAzZWZsYWdzIHw9IFhGUk1fT0ZGTE9BRF9QQUNLRVQ7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMjEyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY4MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB0aGlzLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgQ09ORklHX1hGUk1fT0ZGTE9BRGAgRGVwZW5kZW5jeSoqCgpSaWdodCwgc28gSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nIGFib3V0IGBDT05GSUdfWEZSTV9PRkZMT0FEYC4gSXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyBvcHRpb24gaXMgKnJlcXVpcmVkKiBmb3IgdGhlIGZ1bmN0aW9uIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgdG8gd29yayBwcm9wZXJseS4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQgSSYjMzk7bSBoYXZpbmcgYSBxdWljayBjaGVjayB0byBtYWtlIHN1cmUgdGhhdCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgICppdHNlbGYqIGlzIGFjdHVhbGx5IGVuY2xvc2VkIHdpdGhpbiBhIGNvbmRpdGlvbmFsIGJsb2NrIGRlcGVuZGVudCBvbiBgQ09ORklHX1hGUk1fT0ZGTE9BRGAuCgpJIGtub3cgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpcyBkZWZpbmVkIGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgIOKAkyB0aGF0JiMzOTtzIGEgZ2l2ZW4uIE5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCB3aGVyZSB0aGF0IGZ1bmN0aW9uIGRlZmluaXRpb24gc2hvdWxkIGJlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgOTYxIGluIHRoYXQgZmlsZSwgdG8gY29uZmlybS4gTGV0IG1lIGp1c3Qgb3BlbiB0aGF0IGZpbGUgdXAgYW5kIGhhdmUgYSBsb29rLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9zdGF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NTA6XHRcdFx0fVxuIDk1MTpcdFx0fVxuIDk1MjpcdG91dDpcbiA5NTM6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XG4gOTU0Olx0XHRpZiAoY250KVxuIDk1NTpcdFx0XHRlcnIgPSAwO1xuIDk1NjpcdFxuIDk1NzpcdFx0cmV0dXJuIGVycjtcbiA5NTg6XHR9XG4gOTU5Olx0RVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX2ZsdXNoKTtcbiA5NjA6XHRcbiA5NjE6XHRpbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaWQpXG4gOTYyOlx0e1xuIDk2MzpcdFx0c3RydWN0IHhmcm1fc3RhdGUgKng7XG4gOTY0Olx0XHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqdG1wO1xuIDk2NTpcdFx0c3RydWN0IHhmcm1fZGV2X29mZmxvYWQgKnhzbztcbiA5NjY6XHRcdGludCBpLCBlcnIgPSAwLCBjbnQgPSAwO1xuIDk2NzpcdFxuIDk2ODpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XG4gOTY5Olx0XHRlcnIgPSB4ZnJtX2Rldl9zdGF0ZV9mbHVzaF9zZWNjdHhfY2hlY2sobmV0LCBkZXYsIHRhc2tfdmFsaWQpO1xuIDk3MDpcdFx0aWYgKGVycilcbiA5NzE6XHRcdFx0Z290byBvdXQ7XG4gOTcyOlx0XG4gOTczOlx0XHRlcnIgPSAtRVNSQ0g7XG4gOTc0Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gbmV0LVx1MDAzZXhmcm0uc3RhdGVfaG1hc2s7IGkmIzQzOyYjNDM7KSB7XG4gOTc1Olx0cmVzdGFydDpcbiA5NzY6XHRcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnkoeCwgeGZybV9zdGF0ZV9kZXJlZl9wcm90KG5ldC1cdTAwM2V4ZnJtLnN0YXRlX2J5ZHN0LCBuZXQpICYjNDM7IGksIGJ5ZHN0KSB7XG4gOTc3Olx0XHRcdFx0eHNvID0gXHUwMDI2eC1cdTAwM2V4c287XG4gOTc4Olx0XG4gOTc5Olx0XHRcdFx0aWYgKCF4ZnJtX3N0YXRlX2tlcm4oeCkgXHUwMDI2XHUwMDI2IHhzby1cdTAwM2VkZXYgPT0gZGV2KSB7XG4gOTgwOlx0XHRcdFx0XHR4ZnJtX3N0YXRlX2hvbGQoeCk7XG4gOTgxOlx0XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xuIDk4MjpcdFxuIDk4MzpcdFx0XHRcdFx0ZXJyID0geGZybV9zdGF0ZV9kZWxldGUoeCk7XG4gOTg0Olx0XHRcdFx0XHR4ZnJtX2Rldl9zdGF0ZV9mcmVlKHgpO1xuIDk4NTpcdFxuIDk4NjpcdFx0XHRcdFx0eGZybV9hdWRpdF9zdGF0ZV9kZWxldGUoeCwgZXJyID8gMCA6IDEsXG4gOTg3Olx0XHRcdFx0XHRcdFx0XHR0YXNrX3ZhbGlkKTtcbiA5ODg6XHRcdFx0XHRcdHhmcm1fc3RhdGVfcHV0KHgpO1xuIDk4OTpcdFx0XHRcdFx0aWYgKCFlcnIpXG4gOTkwOlx0XHRcdFx0XHRcdGNudCYjNDM7JiM0Mzs7XG4gOTkxOlx0XG4gOTkyOlx0XHRcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcbiA5OTM6XHRcdFx0XHRcdGdvdG8gcmVzdGFydDtcbiA5OTQ6XHRcdFx0XHR9XG4gOTk1Olx0XHRcdH1cbiA5OTY6XHRcdH1cbiA5OTc6XHRcdGlmIChjbnQpXG4gOTk4Olx0XHRcdGVyciA9IDA7XG4gOTk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3NjYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIEZ1bmN0aW9uJiMzOTtzIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCB3YXMgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBgQ09ORklHX1hGUk1fT0ZGTE9BRGAsIGJ1dCBpdCYjMzk7cyBub3Qgd2hlcmUgSSBleHBlY3RlZCBpdCB0byBiZS4gVGhpcyBpcyBpbnRlcmVzdGluZy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHdhcyBjbGVhcmx5IG9mZi4gTGV0JiMzOTtzIHNlZS4uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBwbGFjZW1lbnQgb2YgYCNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEYCB3aXRoaW4gYG5ldC94ZnJtL3hmcm1fc3RhdGUuY2AgdG8gdW5kZXJzdGFuZCB3aHkuIEl0JiMzOTtzIHRpbWUgdG8gZGVsdmUgaW50byB0aGUgY29kZSBhbmQgY2xhcmlmeSB3aGVyZSB0aGlzIG1hY3JvJiMzOTtzIGluZmx1ZW5jZSB0cnVseSBsaWVzLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9uIHRvIGdldCB0aGlzIGNsZWFyIGluIG15IGhlYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19YRlJNX09GRkxPQUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3N0YXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9zdGF0ZS5jPTc2Mz1FWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfYWxsb2MpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTc2NC1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo3NjU6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy03NjYtdm9pZCB4ZnJtX2Rldl9zdGF0ZV9kZWxldGUoc3RydWN0IHhmcm1fc3RhdGUgKngpXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTExMzY9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fc3RhdGVfbG9va3VwX2FsbChjb25zdCBzdHJ1Y3QgeGZybV9oYXNoX3N0YXRlX3B0cnMgKnN0YXRlX3B0cnMsXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTExNDYtXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeCwgc3RhdGVfcHRycy1cdTAwM2VieXNwaSAmIzQzOyBoLCBieXNwaSkge1xubmV0L3hmcm0veGZybV9zdGF0ZS5jOjExNDc6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMTQ4LVx0XHRpZiAoeGRvLVx1MDAzZXR5cGUgPT0gWEZSTV9ERVZfT0ZGTE9BRF9QQUNLRVQpIHtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MTM2MT14ZnJtX3N0YXRlX2ZpbmQoY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE0MzQtXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeCwgc3RhdGVfcHRycy5ieWRzdCAmIzQzOyBoLCBieWRzdCkge1xubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE0MzU6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNDM2LVx0XHRpZiAocG9sLVx1MDAzZXhkby50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUKSB7XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE0NjktXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeCwgc3RhdGVfcHRycy5ieWRzdCAmIzQzOyBoX3dpbGRjYXJkLCBieWRzdCkge1xubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE0NzA6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNDcxLVx0XHRpZiAocG9sLVx1MDAzZXhkby50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUKSB7XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE1NDUtXHRcdH1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxNTQ2OiNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTU0Ny1cdFx0aWYgKHBvbC1cdTAwM2V4ZG8udHlwZSA9PSBYRlJNX0RFVl9PRkZMT0FEX1BBQ0tFVCkge1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjA1LVx0XHR9IGVsc2Uge1xubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE2MDY6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjA3LVx0XHRcdHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkICp4c28gPSBcdTAwMjZ4LVx1MDAzZXhzbztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NzQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB4ZnJtX2Rldl9zdGF0ZSBGdW5jdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGtlcm5lbCYjMzk7cyBYRlJNIChJUHNlYykgc3Vic3lzdGVtIGFuZCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgZGV2aWNlIHN0YXRlLiBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlIGB4ZnJtX2Rldl9zdGF0ZWAgZnVuY3Rpb25zLCBhbmQgYSBsaXR0bGUgbmFnZ2luZyBxdWVzdGlvbiBoYXMgcG9wcGVkIHVwLiBJJiMzOTttIG5vdGluZyB0aGF0IGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgaXMsIGFzIGZhciBhcyBJIGNhbiB0ZWxsIGZyb20gdGhlIGJ1aWxkIGNvbmZpZywgYWx3YXlzIGluY2x1ZGVkLiBObyBzdXJwcmlzZXMgdGhlcmU7IHlvdSYjMzk7ZCB3YW50IGEgY2xlYW51cCBmdW5jdGlvbiBhdmFpbGFibGUuIEJ1dCB3aGF0IGFib3V0IGl0cyBjb3VudGVycGFydCwgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgPyBJcyB0aGF0IGNvbXBpbGVkIGluIGNvbmRpdGlvbmFsbHkgYmFzZWQgb24gc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3IgaXMgaXQgYWx3YXlzIHByZXNlbnQgYWxvbmdzaWRlIGl0cyBmbHVzaGluZyBzaWJsaW5nPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIG1hY3JvcyBhbmQgZGVwZW5kZW5jaWVzIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUgb2YgdGhlIGRldmljZSBzdGF0ZSBsaWZlY3ljbGUgYW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhvc2UgcmVzb3VyY2VzLiBNeSBpbnR1aXRpb24gc2F5cyBpdCAqc2hvdWxkKiBhbHdheXMgYmUgdGhlcmUsIGJ1dCBJJiMzOTt2ZSBiZWVuIHN1cnByaXNlZCBiZWZvcmUuIEkgbmVlZCB0byBnZXQgdGhpcyBjbGVhciBpbiBteSBoZWFkLCBzaW5jZSBpdCBtYXR0ZXJzIHdoZW4gZGVidWdnaW5nIGNlcnRhaW4gaW50ZXJhY3Rpb25zIHdpdGggbmV0d29yayBkZXZpY2VzIHVuZGVyIGhlYXZ5IGxvYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fZGV2X3N0YXRlX2ZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3N0YXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9zdGF0ZS5jPTU5Nj1zdGF0aWMgdm9pZCB4ZnJtX3N0YXRlX2djX2Rlc3Ryb3koc3RydWN0IHhmcm1fc3RhdGUgKngpXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTYxNy1cdFx0cHV0X3BhZ2UoeC1cdTAwM2V4ZnJhZy5wYWdlKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo2MTg6XHR4ZnJtX2Rldl9zdGF0ZV9mcmVlKHgpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTYxOS1cdHNlY3VyaXR5X3hmcm1fc3RhdGVfZnJlZSh4KTtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9Nzc4PUVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fZGV2X3N0YXRlX2RlbGV0ZSk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtNzc5LVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjc4MDp2b2lkIHhmcm1fZGV2X3N0YXRlX2ZyZWUoc3RydWN0IHhmcm1fc3RhdGUgKngpXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtNzgxLXtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9OTYxPWludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpZClcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtOTgzLVx0XHRcdFx0ZXJyID0geGZybV9zdGF0ZV9kZWxldGUoeCk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6OTg0Olx0XHRcdFx0eGZybV9kZXZfc3RhdGVfZnJlZSh4KTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy05ODUtXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEwMTMtXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTAxNDpcdFx0XHR4ZnJtX2Rldl9zdGF0ZV9mcmVlKHgpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEwMTUtXHRcdFx0eGZybV9zdGF0ZV9wdXQoeCk7XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTEzNjE9eGZybV9zdGF0ZV9maW5kKGNvbnN0IHhmcm1fYWRkcmVzc190ICpkYWRkciwgY29uc3QgeGZybV9hZGRyZXNzX3QgKnNhZGRyLFxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjEwLVx0XHRcdFx0eGZybV9kZXZfc3RhdGVfZGVsZXRlKHgpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE2MTE6XHRcdFx0XHR4ZnJtX2Rldl9zdGF0ZV9mcmVlKHgpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE2MTItXHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY3NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgeGZybV9kZXZfc3RhdGVfZnJlZWAgYW5kIGB4ZnJtX3N0YXRlYCoqCgpPa2F5LCBzbyBgeGZybV9kZXZfc3RhdGVfZnJlZWAgaXMgYWx3YXlzIGNvbXBpbGVkLCB0aGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gQnV0IGhvbGQgb24sIHRoZSBjb2RlIHVzZXMgYHgtJmd0O2Rldl9nY2xpc3RgLiBUaGlzIGlzIGEgY3J1Y2lhbCBjbHVlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHN0cnVjdHVyZSBvZiBgeGZybV9zdGF0ZWAg4oCTIHRoYXQmIzM5O3Mgd2hlcmUgSSBzaG91bGQgc3RhcnQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGlzIGNvbm5lY3Rpb24gYW5kIHBvdGVudGlhbCByZXNvdXJjZSBtYW5hZ2VtZW50LiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHhmcm1fc3RhdGVgIHRvIG1ha2Ugc3VyZSBJIGdyYXNwIHRoZSByZWxhdGlvbnNoaXAgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X2djbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3hmcm0uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC94ZnJtLmg9MTkwPXN0cnVjdCB4ZnJtX3N0YXRlIHtcbi0tXG5pbmNsdWRlL25ldC94ZnJtLmgtMTk2LVx0dW5pb24ge1xuaW5jbHVkZS9uZXQveGZybS5oOjE5NzpcdFx0c3RydWN0IGhsaXN0X25vZGVcdGRldl9nY2xpc3Q7XG5pbmNsdWRlL25ldC94ZnJtLmgtMTk4LVx0XHRzdHJ1Y3QgaGxpc3Rfbm9kZVx0YnlzcmM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDAwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSBWdWxuZXJhYmlsaXR5IGluIFhGUk0qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgYXNzdW1wdGlvbiB0aGF0IGBkZXZfZ2NsaXN0YCBpcyBhbHdheXMgcHJlc2VudC4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYWRkcmVzcyBhIHVzZS1hZnRlci1mcmVlIGluIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAuIFNwZWNpZmljYWxseSwgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgIGlzIGNhbGxlZCB3aXRob3V0IGEgaGVsZCByZWZlcmVuY2UgdG8gYHhgLiBJbW1lZGlhdGVseSwgdGhlIGFsYXJtIGJlbGxzIGFyZSBnb2luZyBvZmYuIFRoYXTigJlzIGEgY2xhc3NpYyBtZW1vcnkgc2FmZXR5IGlzc3VlLgoKTm93LCBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGRldGFpbHMuIE15IHVuZGVyc3RhbmRpbmcgaXMgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpdGVyYXRlcyB0aHJvdWdoIHNvbWV0aGluZyBjYWxsZWQgYHhmcm1fc3RhdGVfZGV2X2djX2xpc3RgLiBIbW1tLCBpcyB0aGF0IHRoZSBsaXN0IGluIHF1ZXN0aW9uPyBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGludGVyYWN0cyB3aXRoIHRoaXMgbGlzdC4gTGV0JiMzOTtzIHB1bGwgdXAgdGhlIHNvdXJjZSBjb2RlIGZvciBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aG9zZSBsaXN0IGVudHJpZXMgYW5kIGNvbmZpcm0gdGhpcyBzdXNwZWN0ZWQgZmxvdyBvZiBleGVjdXRpb24uIFRoZW4sIHRoZSBwYXRjaCBzaG91bGQgYmUgdW5kZXJzdGFuZGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9zdGF0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5OTA6XHRcdFx0XHRcdFx0Y250JiM0MzsmIzQzOztcbiA5OTE6XHRcbiA5OTI6XHRcdFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xuIDk5MzpcdFx0XHRcdFx0Z290byByZXN0YXJ0O1xuIDk5NDpcdFx0XHRcdH1cbiA5OTU6XHRcdFx0fVxuIDk5NjpcdFx0fVxuIDk5NzpcdFx0aWYgKGNudClcbiA5OTg6XHRcdFx0ZXJyID0gMDtcbiA5OTk6XHRcbjEwMDA6XHRvdXQ6XG4xMDAxOlx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xuMTAwMjpcdFxuMTAwMzpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuMTAwNDpcdHJlc3RhcnRfZ2M6XG4xMDA1Olx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHgsIHRtcCwgXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbGlzdCwgZGV2X2djbGlzdCkge1xuMTAwNjpcdFx0XHR4c28gPSBcdTAwMjZ4LVx1MDAzZXhzbztcbjEwMDc6XHRcbjEwMDg6XHRcdFx0aWYgKHhzby1cdTAwM2VkZXYgPT0gZGV2KSB7XG4xMDA5Olx0XHRcdFx0LyogVGhlIGRldmljZSBHQyBsaXN0IGRvZXMgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8geC4gKi9cbjEwMTA6XHRcdFx0XHRpZiAoIXhmcm1fc3RhdGVfaG9sZF9yY3UoeCkpXG4xMDExOlx0XHRcdFx0XHRjb250aW51ZTtcbjEwMTI6XHRcbjEwMTM6XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcbjEwMTQ6XHRcdFx0XHR4ZnJtX2Rldl9zdGF0ZV9mcmVlKHgpO1xuMTAxNTpcdFx0XHRcdHhmcm1fc3RhdGVfcHV0KHgpO1xuMTAxNjpcdFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcbjEwMTc6XHRcdFx0XHRnb3RvIHJlc3RhcnRfZ2M7XG4xMDE4Olx0XHRcdH1cbjEwMTk6XHRcbjEwMjA6XHRcdH1cbjEwMjE6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuMTAyMjpcdFxuMTAyMzpcdFx0eGZybV9mbHVzaF9nYygpO1xuMTAyNDpcdFxuMTAyNTpcdFx0cmV0dXJuIGVycjtcbjEwMjY6XHR9XG4xMDI3Olx0RVhQT1JUX1NZTUJPTCh4ZnJtX2Rldl9zdGF0ZV9mbHVzaCk7XG4xMDI4Olx0XG4xMDI5Olx0dm9pZCB4ZnJtX3NhZF9nZXRpbmZvKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHhmcm1rX3NhZGluZm8gKnNpKVxuMTAzMDpcdHtcbjEwMzE6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xuMTAzMjpcdFx0c2ktXHUwMDNlc2FkY250ID0gbmV0LVx1MDAzZXhmcm0uc3RhdGVfbnVtO1xuMTAzMzpcdFx0c2ktXHUwMDNlc2FkaGNudCA9IG5ldC1cdTAwM2V4ZnJtLnN0YXRlX2htYXNrICYjNDM7IDE7XG4xMDM0Olx0XHRzaS1cdTAwM2VzYWRobWNudCA9IHhmcm1fc3RhdGVfaGFzaG1heDtcbjEwMzU6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XG4xMDM2Olx0fVxuMTAzNzpcdEVYUE9SVF9TWU1CT0woeGZybV9zYWRfZ2V0aW5mbyk7XG4xMDM4Olx0XG4xMDM5Olx0c3RhdGljIHZvaWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNDcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqWEZSTSBTdGF0ZSBNYW5hZ2VtZW50IEZpeCBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgb3ZlciB0aGlzIFhGUk0gc3RhdGUgbWFuYWdlbWVudCBmaXguIE15IGluaXRpYWwgdGhvdWdodCBpcywgeWVzLCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGl0ZXJhdGVzIHRocm91Z2ggdGhlIGB4ZnJtX3N0YXRlX2Rldl9nY19saXN0YC4gVGhhdCByaW5ncyBhIGJlbGwuIFRoZSBjb3JlIG9mIHRoaXMgZml4IHNlZW1zIHRvIGJlIGFkZGluZyBgeGZybV9zdGF0ZV9ob2xkX3JjdSh4KWAgYW5kIGB4ZnJtX3N0YXRlX3B1dCh4KWAgY2FsbHMgd2l0aGluIHRoYXQgbG9vcCB0byBtYWtlIHRoZSBwcm9jZXNzaW5nIG9mIGVhY2ggZW50cnkgc2FmZSwgd2hpY2ggaXMgYSBnb29kIGNhbGwsIHByZXZlbnRzIHJhY2VzLgoKSSBhbHNvIHNlZSBhIGNoYW5nZSBpbiBgeGZybV9kZXZfc3RhdGVfZnJlZWA6IHJlcGxhY2luZyBgaGxpc3RfZGVsYCB3aXRoIGBobGlzdF9kZWxfaW5pdGAuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFuZCBhZGRyZXNzZXMgYSBidWcgaW4gaG93IHN0YXRlcyBhcmUgbWFuYWdlZC4gRGVmaW5pdGVseSB3b3J0aCBhIGZ1enppbmcgY2FtcGFpZ24gdG8gdmFsaWRhdGUgdGhpcyBmaXguCgpUaGUga2V5IGZ1bmN0aW9ucyB0byBjb25jZW50cmF0ZSBvbiBmb3IgZnV6emluZyBhcmUsIG9idmlvdXNseSwgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBhbmQgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgLiBXYWl0LCBob2xkIG9uLiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGdldHMgY2FsbGVkIHdoZW4gYW4gWEZSTSBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkIG9yIGdvZXMgZG93bi4gT2theSwgc28gdGhhdCBzdWdnZXN0cyB0aGlzIGNvdWxkIGJlIGludGVyZXN0aW5nIGZyb20gYSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gY2hhbmdlIHBlcnNwZWN0aXZlLiBUaGlzIGlzIGEgdmVyeSBnb29kIGZvY3VzIHBvaW50LgoKRnVydGhlcm1vcmUsIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCBpcyBjYWxsZWQgZnJvbSBib3RoIGB4ZnJtX3N0YXRlX2djX2Rlc3Ryb3lgIGFuZCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgLiBUaGF0IG1ha2VzIHRoZXNlIHR3byBmdW5jdGlvbnMgYSBuYXR1cmFsIHBhaXIgZm9yIGZ1enppbmcuCgpMZXQmIzM5O3MgY2hlY2sgaWYgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpcyBzdGF0aWMgb3Igbm90LiBPa2F5LCBpdCYjMzk7cyBleHBvcnRlZC4gTGV0JiMzOTtzIHNlZSBhYm91dCBgeGZybV9kZXZfc3RhdGVfZnJlZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qeGZybV9kZXZfc3RhdGVfZnJlZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTA3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgU2NvcGUgb2YgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkmIzM5O20gc2VlaW5nIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCwgYW5kIG15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IHNpbmNlIGl0JiMzOTtzIHVzZWQgaW4gdGhpcyBjb250ZXh0LCBpdCBzaG91bGQgZWl0aGVyIGJlIGV4cG9ydGVkIG9yIHN0YXRpYy4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBub3QgZXhwbGljaXRseSBkZWNsYXJlZCBhcyBgc3RhdGljYCBpcyByYWlzaW5nIGEgZmxhZy4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGl0cyB2aXNpYmlsaXR5LiBJcyBpdCBtZWFudCBmb3IgaW50ZXJuYWwgdXNlIG9ubHkgd2l0aGluIGEgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdCwgb3IgaXMgaXQgcG90ZW50aWFsbHkgY2FsbGFibGUgZnJvbSBvdGhlciBtb2R1bGVzPyBUaGlzIHdhcnJhbnRzIGEgZGVlcGVyIGRpdmUgaW50byB0aGUga2VybmVsIHN5bWJvbCB0YWJsZSBvciwgZmFpbGluZyB0aGF0LCBhIGNyb3NzLXJlZmVyZW5jZSBzZWFyY2ggdG8gdW5kZXJzdGFuZCBpdHMgaW50ZW5kZWQgdXNhZ2UgYW5kIGVuc3VyZSBJJiMzOTttIGludGVycHJldGluZyBpdHMgcGxhY2VtZW50IGNvcnJlY3RseS4gSSBzdXNwZWN0IGEgcG90ZW50aWFsIG92ZXJzaWdodCBvciBwZXJoYXBzIGEgc3VidGxlIGRlc2lnbiBhc3BlY3QgSSBoYXZlbiYjMzk7dCBmdWxseSBncmFzcGVkIHlldC4gSSBuZWVkIHRvIGZpZ3VyZSB0aGlzIG91dCBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIHhmcm1fZGV2X3N0YXRlX2ZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9zdGF0ZS5jPTc3OD1FWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX2Rldl9zdGF0ZV9kZWxldGUpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTc3OS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo3ODA6dm9pZCB4ZnJtX2Rldl9zdGF0ZV9mcmVlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTc4MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Mjc1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgZnJhbWVkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczoKCioqQXNzZXNzaW5nIER5bmFtaWMgQmVoYXZpb3IgJmFtcDsgRXhwb3J0IFN0YXR1cyoqCgpBbHJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcy4uLiBhbmQgbXkgaW1tZWRpYXRlIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzbiYjMzk7dCBhIHN0YXRpYyBlbGVtZW50LiBJdCBoYXMgc29tZSBraW5kIG9mIGR5bmFtaWMgYmVoYXZpb3Igb3Igc3RhdGUgdGhhdCBuZWVkcyBleGFtaW5hdGlvbi4gR2l2ZW4gdGhhdCwgdGhlIGNyaXRpY2FsIG5leHQgc3RlcCBpcyB0byBkZXRlcm1pbmUgaWYgaXRzIGN1cnJlbnQgc3RhdGUgb3IgYW55IG9mIGl0cyB0cmFuc2Zvcm1hdGlvbnMgYXJlIGJlaW5nIHN1Y2Nlc3NmdWxseSBleHBvcnRlZCBvciByZW5kZXJlZCBleHRlcm5hbGx5LiBUaGUgZXhwb3J0IHByb2Nlc3MgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgcGljdHVyZSBoZXJlLiBJIGNhbiYjMzk7dCBkZXRlcm1pbmUgaXRzIGNvbXBsZXRlIHV0aWxpdHkgb3IgYmVoYXZpb3Igd2l0aG91dCBrbm93aW5nIHRoZSBzdGF0ZSBvZiBpdHMgb3V0cHV0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnhmcm1fZGV2X3N0YXRlX2ZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ2MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCYjMzk7cyBYRlJNIE9mZmxvYWQgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGtlcm5lbCBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgeGZybWAgc3Vic3lzdGVtIGFuZCBpdHMgb2ZmbG9hZCBjYXBhYmlsaXRpZXMuIEZpcnN0IG9mZiwgSSBzZWUgdGhhdCB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaXNuJiMzOTt0ICpleHBvcnRlZCogZGlyZWN0bHksIHdoaWNoIG1lYW5zIGl0cyBzeW1ib2wgYWRkcmVzcyBzaG91bGQgYmUgZGlzdGluY3Qgc2luY2UgaXQmIzM5O3Mgbm9uLXN0YXRpYy4gVGhlbiwgd2FpdCBhIHNlY29uZCwgaG9sZCBvbiwgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCAqaXMqIGV4cG9ydGVkIOKAkyBpbnRlcmVzdGluZy4gTGV0JiMzOTtzIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgbHVya2luZyBhcm91bmQgaGVyZS4gT2theSwgYHhmcm1fZGV2X2Rvd25gIGFuZCBgeGZybV9kZXZfdW5yZWdpc3RlcmAgYXJlIGJvdGggc3RhdGljLCBzcGVjaWZpY2FsbHkgZGVmaW5lZCB3aXRoaW4gYHhmcm1fZGV2aWNlLmNgLiBMb29raW5nIGZ1cnRoZXIsIGB4ZnJtX2Rldl9zdGF0ZV9hZGRgIGFuZCBgeGZybV9kZXZfc3RhdGVfZGVsZXRlYCBoYXZlIGFwcGVhcmFuY2VzIGFjcm9zcyBib3RoIGB4ZnJtX2RldmljZS5jYCBhbmQgYHhmcm1fc3RhdGUuY2AuCgpHaXZlbiB0aGUgY29udGV4dCwgSSB0aGluayBmb2N1c2luZyBvbiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGFuZCBgeGZybV9kZXZfc3RhdGVfZnJlZWAgaXMgdGhlIHJpZ2h0IG1vdmUuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCBgQ09ORklHX1hGUk1gIGFuZCBgQ09ORklHX1hGUk1fT0ZGTE9BRGAgYXJlIHRoZSBwcmVyZXF1aXNpdGVzIGZvciB0aGlzIGNvZGUgcGF0aC4gSG1tLCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIGFsd2F5cyBjb21waWxlZCBpZiBgQ09ORklHX1hGUk1gIGlzIGVuYWJsZWQsIGJ1dCBpdCB3aWxsIG9ubHkgYWN0dWFsbHkgKmRvKiBhbnl0aGluZyBpZiBgeHNvLSZndDtkZXYgPT0gZGV2YC4gYHhzb2AgaXMgYWN0dWFsbHkgYCZhbXA7eC0mZ3Q7eHNvYCwgd2hpY2ggZ2l2ZXMgdXMgYHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkYC4gSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGdvb2QgbG9vayBhdCBgc3RydWN0IHhmcm1fZGV2X29mZmxvYWRgIG5vdywgdG8gcHJvcGVybHkgdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3hmcm0uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC94ZnJtLmg9MTQ1PWVudW0ge1xuLS1cbmluY2x1ZGUvbmV0L3hmcm0uaC0xNDgtXG5pbmNsdWRlL25ldC94ZnJtLmg6MTQ5OnN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkIHtcbmluY2x1ZGUvbmV0L3hmcm0uaC0xNTAtXHQvKiBUaGUgZGV2aWNlIGZvciB0aGlzIG9mZmxvYWQuXG4tLVxuaW5jbHVkZS9uZXQveGZybS5oPTE5MD1zdHJ1Y3QgeGZybV9zdGF0ZSB7XG4tLVxuaW5jbHVkZS9uZXQveGZybS5oLTI5My1cbmluY2x1ZGUvbmV0L3hmcm0uaDoyOTQ6XHRzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCB4c287XG5pbmNsdWRlL25ldC94ZnJtLmgtMjk1LVxuLS1cbmluY2x1ZGUvbmV0L3hmcm0uaD02MzQ9c3RydWN0IHhmcm1fcG9saWN5IHtcbi0tXG5pbmNsdWRlL25ldC94ZnJtLmgtNjY2LVxuaW5jbHVkZS9uZXQveGZybS5oOjY2NzpcdHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkIHhkbztcbmluY2x1ZGUvbmV0L3hmcm0uaC02NjgtfTtcbi0tXG5pbmNsdWRlL25ldC94ZnJtLmg9MTcyMz1zdGF0aWMgaW5saW5lIHZvaWQgeGZybV9kZXZfc3RhdGVfdXBkYXRlX3N0YXRzKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuaW5jbHVkZS9uZXQveGZybS5oLTE3MjQte1xuaW5jbHVkZS9uZXQveGZybS5oOjE3MjU6XHRzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCAqeGRvID0gXHUwMDI2eC1cdTAwM2V4c287XG5pbmNsdWRlL25ldC94ZnJtLmgtMTcyNi1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBSRUFEX09OQ0UoeGRvLVx1MDAzZWRldik7XG4tLVxuaW5jbHVkZS9uZXQveGZybS5oPTIxMzQ9c3RhdGljIGlubGluZSB2b2lkIHhmcm1fZGV2X3N0YXRlX2FkdmFuY2VfZXNuKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuaW5jbHVkZS9uZXQveGZybS5oLTIxMzUte1xuaW5jbHVkZS9uZXQveGZybS5oOjIxMzY6XHRzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCAqeHNvID0gXHUwMDI2eC1cdTAwM2V4c287XG5pbmNsdWRlL25ldC94ZnJtLmgtMjEzNy1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBSRUFEX09OQ0UoeHNvLVx1MDAzZWRldik7XG4tLVxuaW5jbHVkZS9uZXQveGZybS5oPTIxNjE9c3RhdGljIGlubGluZSB2b2lkIHhmcm1fZGV2X3BvbGljeV9kZWxldGUoc3RydWN0IHhmcm1fcG9saWN5ICp4KVxuaW5jbHVkZS9uZXQveGZybS5oLTIxNjIte1xuaW5jbHVkZS9uZXQveGZybS5oOjIxNjM6XHRzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCAqeGRvID0gXHUwMDI2eC1cdTAwM2V4ZG87XG5pbmNsdWRlL25ldC94ZnJtLmgtMjE2NC1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB4ZG8tXHUwMDNlZGV2O1xuLS1cbmluY2x1ZGUvbmV0L3hmcm0uaD0yMTcwPXN0YXRpYyBpbmxpbmUgdm9pZCB4ZnJtX2Rldl9wb2xpY3lfZnJlZShzdHJ1Y3QgeGZybV9wb2xpY3kgKngpXG5pbmNsdWRlL25ldC94ZnJtLmgtMjE3MS17XG5pbmNsdWRlL25ldC94ZnJtLmg6MjE3MjpcdHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkICp4ZG8gPSBcdTAwMjZ4LVx1MDAzZXhkbztcbmluY2x1ZGUvbmV0L3hmcm0uaC0yMTczLVx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHhkby1cdTAwM2VkZXY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODI1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSB4ZnJtX3N0YXRlIFN0cnVjdHVyZSBhbmQgT2ZmbG9hZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYHhmcm1fc3RhdGVgIHN0cnVjdHVyZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGB4c29gIGFuZCBpdHMgbWVtYmVycy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdGluZyB0aGF0IGB4c29gLCB3aGF0ZXZlciBpdCBpcywgaXMgKmFsd2F5cyogcHJlc2VudCB3aXRoaW4gYHN0cnVjdCB4ZnJtX3N0YXRlYC4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGdpdmVuLiBCdXQgdGhlbiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGB4c28tJmd0O2RldmAsIGFuZCBJJiMzOTttIHJlbWVtYmVyaW5nIHRoYXQgaXQmIzM5O3Mgb25seSBwb3B1bGF0ZWQsIG9ubHkgdmFsaWQsIHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXMuIE15IHJlY29sbGVjdGlvbiBpcyB0aGF0IGB4c28tJmd0O2RldmAgaXMgb25seSBhc3NpZ25lZCB3aGVuIG9mZmxvYWQgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkLiBBbmQsIGZ1cnRoZXIsIGVuYWJsaW5nIHRoYXQgb2ZmbG9hZCBmZWF0dXJlIGhpbmdlcyBvbiB3aGV0aGVyIGBDT05GSUdfWEZSTV9PRkZMT0FEYCBpcyBzZXQgZHVyaW5nIHRoZSBrZXJuZWwgYnVpbGQuIFNvLCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGB4c28tJmd0O2RldmAgSSBuZWVkIHRvIHRyYWNlICp3aGVyZSogdGhpcyBmaWVsZCBpcyBhY3R1YWxseSBzZXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHN1cnJvdW5kaW5nIGl0cyBhc3NpZ25tZW50LiBMZXQmIzM5O3Mgc2VlIHdoZXJlIHRoYXQgaGFwcGVucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eHNvLVx1MDAzZWRldiA9JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fZGV2aWNlLmM9MjM5PWludCB4ZnJtX2Rldl9zdGF0ZV9hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTMwMy1cdGlmICghZGV2LVx1MDAzZXhmcm1kZXZfb3BzIHx8ICFkZXYtXHUwMDNleGZybWRldl9vcHMtXHUwMDNleGRvX2Rldl9zdGF0ZV9hZGQpIHtcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6MzA0Olx0XHR4c28tXHUwMDNlZGV2ID0gTlVMTDtcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMzA1LVx0XHRkZXZfcHV0KGRldik7XG4tLVxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0zMTEtXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RGV2aWNlIGRvZXNuJiMzOTt0IHN1cHBvcnQgb2ZmbG9hZCB3aXRoIEVTTlwmIzM0Oyk7XG5uZXQveGZybS94ZnJtX2RldmljZS5jOjMxMjpcdFx0eHNvLVx1MDAzZWRldiA9IE5VTEw7XG5uZXQveGZybS94ZnJtX2RldmljZS5jLTMxMy1cdFx0ZGV2X3B1dChkZXYpO1xuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMzIyLVxubmV0L3hmcm0veGZybV9kZXZpY2UuYzozMjM6XHR4c28tXHUwMDNlZGV2ID0gZGV2O1xubmV0L3hmcm0veGZybV9kZXZpY2UuYy0zMjQtXHR4c28tXHUwMDNlaWZpbmRleCA9IGRldi1cdTAwM2VpZmluZGV4O1xuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMzM4LVx0aWYgKGVycikge1xubmV0L3hmcm0veGZybV9kZXZpY2UuYzozMzk6XHRcdHhzby1cdTAwM2VkZXYgPSBOVUxMO1xubmV0L3hmcm0veGZybV9kZXZpY2UuYy0zNDAtXHRcdHhzby1cdTAwM2VkaXIgPSAwO1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz04ODY9eGZybV9kZXZfc3RhdGVfZmx1c2hfc2VjY3R4X2NoZWNrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0YXNrX3ZhbGlkKVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04OTYtXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6ODk3Olx0XHRcdGlmICh4c28tXHUwMDNlZGV2ID09IGRldiBcdTAwMjZcdTAwMjZcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04OTgtXHRcdFx0ICAgKGVyciA9IHNlY3VyaXR5X3hmcm1fc3RhdGVfZGVsZXRlKHgpKSAhPSAwKSB7XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTk2MT1pbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaWQpXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTk3OC1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo5Nzk6XHRcdFx0aWYgKCF4ZnJtX3N0YXRlX2tlcm4oeCkgXHUwMDI2XHUwMDI2IHhzby1cdTAwM2VkZXYgPT0gZGV2KSB7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtOTgwLVx0XHRcdFx0eGZybV9zdGF0ZV9ob2xkKHgpO1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMDA3LVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjEwMDg6XHRcdGlmICh4c28tXHUwMDNlZGV2ID09IGRldikge1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEwMDktXHRcdFx0LyogVGhlIGRldmljZSBHQyBsaXN0IGRvZXMgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8geC4gKi9cbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MTM2MT14ZnJtX3N0YXRlX2ZpbmQoY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE1NTMtXHRcdFx0eHNvLVx1MDAzZWRpciA9IHhkby1cdTAwM2VkaXI7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTU1NDpcdFx0XHR4c28tXHUwMDNlZGV2ID0gZGV2O1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE1NTUtXHRcdFx0eHNvLVx1MDAzZWlmaW5kZXggPSBkZXYtXHUwMDNlaWZpbmRleDtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTU2Mi1cdFx0XHRcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZ4c28tXHUwMDNlZGV2X3RyYWNrZXIpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE1NjM6XHRcdFx0XHR4c28tXHUwMDNlZGV2ID0gTlVMTDtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNTY0LVx0XHRcdFx0eHNvLVx1MDAzZXR5cGUgPSBYRlJNX0RFVl9PRkZMT0FEX1VOU1BFQ0lGSUVEO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA5NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaWdnaW5nIGludG8gdGhlIFhGUk0gRGV2aWNlIFN0YXRlKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyBkb3duIHRoaXMgYHhzby0mZ3Q7ZGV2YCBhc3NpZ25tZW50LCBhbmQgaXQgbG9va3MgbGlrZSBgeGZybV9kZXZfc3RhdGVfYWRkYCBpbiBgbmV0L3hmcm0veGZybV9kZXZpY2UuY2AgaXMgdGhlIGN1bHByaXQuIFRoYXQgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhhdCBkZXZpY2UgcG9pbnRlciwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkmIzM5O20gaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nLiAgSSBrbm93IGB4ZnJtX2RldmljZS5jYCBnZXRzIGNvbXBpbGVkIGFzIGxvbmcgYXMgYENPTkZJR19YRlJNYCBpcyBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnLCBzbyB0aGUgZmlsZSBpdHNlbGYgc2hvdWxkIGV4aXN0LiBXYWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nIGNydWNpYWwuIEkgc2VlbSB0byByZWNhbGwgdGhhdCBmdW5jdGlvbiBiZWluZyBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRGAuICBKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlLWV4YW1pbmUgYG5ldC94ZnJtL3hmcm1fZGV2aWNlLmNgIHRvIGNvbmZpcm0gdGhhdCBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gSXQmIzM5O3MgY3JpdGljYWwgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1hGUk1fT0ZGTE9BRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9kZXZpY2UuYy0yMS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6MjI6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMjMtc3RhdGljIHZvaWQgX194ZnJtX3RyYW5zcG9ydF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM9NTI2PXN0YXRpYyBpbnQgeGZybV9hcGlfY2hlY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTI3LXtcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6NTI4OiNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTUyOS1cdGlmICgoZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX0VTUF9UWF9DU1VNKSBcdTAwMjZcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2NDcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgWEZSTSBEZXZpY2UgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB0cmFjZSBkb3duIHdoZXJlIGB4ZnJtX2Rldl9zdGF0ZV9hZGRgIGlzIGRlZmluZWQuIEkga25vdyBpdCYjMzk7cyByZWxhdGVkIHRvIFhGUk0sIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGludm9sdmVkIGluIGRldmljZSBtYW5hZ2VtZW50IHNvbWVob3cuIExldCBtZSBzZWUuLi4gSSYjMzk7bSBwcmV0dHkgc3VyZSBJJiMzOTt2ZSBzZWVuIGl0IGluIGBuZXQveGZybS9gIGJlZm9yZS4gWWVwLCBgeGZybV9kZXZpY2UuY2Agc2VlbXMgbGlrZSB0aGUgbGlrZWx5IHBsYWNlLiBOb3cgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGZ1bmN0aW9uYWxpdHkgY29uZGl0aW9uYWxseSBjb21waWxlZD8gSSBuZWVkIHRvIGNoZWNrIGlmIGB4ZnJtX2Rldl9zdGF0ZV9hZGRgIGlzIGluc2lkZSBhbiBgI2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURgIGJsb2NrLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBkZXRhaWwuIEkgbmVlZCB0byBnZXQgdGhlIGRlZmluaXRpdmUgYW5zd2VyLiBUaW1lIHRvIGNyYWNrIG9wZW4gYG5ldC94ZnJtL3hmcm1fZGV2aWNlLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAyMiDigJMgdGhhdCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9kZXZpY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gICAyOlx0LypcbiAgIDM6XHQgKiB4ZnJtX2RldmljZS5jIC0gSVBzZWMgZGV2aWNlIG9mZmxvYWRpbmcgY29kZS5cbiAgIDQ6XHQgKlxuICAgNTpcdCAqIENvcHlyaWdodCAoYykgMjAxNSBzZWN1bmV0IFNlY3VyaXR5IE5ldHdvcmtzIEFHXG4gICA2Olx0ICpcbiAgIDc6XHQgKiBBdXRob3I6XG4gICA4Olx0ICogU3RlZmZlbiBLbGFzc2VydCBcdTAwM2NzdGVmZmVuLmtsYXNzZXJ0QHNlY3VuZXQuY29tXHUwMDNlXG4gICA5Olx0ICovXG4gIDEwOlx0XG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvZXJybm8uaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiAgMTc6XHQjaW5jbHVkZSBcdTAwM2NuZXQvZHN0LmhcdTAwM2VcbiAgMTg6XHQjaW5jbHVkZSBcdTAwM2NuZXQvZ3NvLmhcdTAwM2VcbiAgMTk6XHQjaW5jbHVkZSBcdTAwM2NuZXQveGZybS5oXHUwMDNlXG4gIDIwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbm90aWZpZXIuaFx1MDAzZVxuICAyMTpcdFxuICAyMjpcdCNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXG4gIDIzOlx0c3RhdGljIHZvaWQgX194ZnJtX3RyYW5zcG9ydF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuICAyNDpcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgaHNpemUpXG4gIDI1Olx0e1xuICAyNjpcdFx0c3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTtcbiAgMjc6XHRcbiAgMjg6XHRcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XG4gIDI5Olx0XHRpZiAoeG8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fR1NPX1NFR01FTlQpXG4gIDMwOlx0XHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyIC09IHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbjtcbiAgMzE6XHRcbiAgMzI6XHRcdHBza2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgJiM0MzsgeC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKTtcbiAgMzM6XHR9XG4gIDM0Olx0XG4gIDM1Olx0c3RhdGljIHZvaWQgX194ZnJtX21vZGVfdHVubmVsX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXG4gIDM2Olx0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IGhzaXplKVxuICAzNzpcdFxuICAzODpcdHtcbiAgMzk6XHRcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XG4gIDQwOlx0XG4gIDQxOlx0XHRpZiAoeG8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fR1NPX1NFR01FTlQpXG4gIDQyOlx0XHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7IGhzaXplO1xuICA0MzpcdFxuICA0NDpcdFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcbiAgNDU6XHRcdHBza2JfcHVsbChza2IsXG4gIDQ2Olx0XHRcdCAgc2tiLVx1MDAzZW1hY19sZW4gJiM0MzsgeC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuIC0geC1cdTAwM2Vwcm9wcy5lbmNfaGRyX2xlbik7XG4gIDQ3Olx0fVxuICA0ODpcdFxuICA0OTpcdHN0YXRpYyB2b2lkIF9feGZybV9tb2RlX2JlZXRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAgNTA6XHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGhzaXplKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODcyOQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBDb25kaXRpb25hbCBDb21waWxhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgYCNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEYCBzdGF0ZW1lbnQuIFJpZ2h0LCB0aGlzIGxvb2tzIGxpa2UgYSBmZWF0dXJlIGdhdGUsIG1lYW5pbmcgYSBjaHVuayBvZiBjb2RlIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIE15IGltbWVkaWF0ZSBxdWVzdGlvbiwgYXMgYWx3YXlzIHdoZW4gZGVhbGluZyB3aXRoIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGxpa2UgdGhpcywgaXM6IHdoZXJlIGRvZXMgdGhpcyBjb25kaXRpb25hbCBibG9jayAqZW5kKj8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGlzIHBhcnRpY3VsYXIgYCNpZmRlZmAuIElzIGl0IGEgc2hvcnQgYmxvY2ssIG9yIGEgbG9uZ2VyIG9uZSB0aGF0IHNwYW5zIG11bHRpcGxlIGZ1bmN0aW9ucyBvciBldmVuIGZpbGVzPyBUaGUgbGVuZ3RoIG9mIGl0IHdpbGwgaW1wYWN0IG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGEgc3BlY2lmaWMgZmVhdHVyZSBpcyBoYW5kbGVkLCBlc3BlY2lhbGx5IHdoZW4gSSYjMzk7bSBkZWJ1Z2dpbmcgb3IgdHJhY2luZyB0aGUgY29udHJvbCBmbG93LiBHb3R0YSBmaW5kIHRoYXQgYCNlbmRpZmAhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2VuZGlmLipDT05GSUdfWEZSTV9PRkZMT0FEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9kZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTczCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIHN1bW1hcml6ZWQsIHRhcmdldGluZyBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBgI2VuZGlmYCBpbiBgbmV0L3hmcm0veGZybV9kZXZpY2UuY2AqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBgbmV0L3hmcm0veGZybV9kZXZpY2UuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYCNlbmRpZmAgZGlyZWN0aXZlcyB3aXRoaW4gdGhhdCBmaWxlLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gZW5zdXJpbmcgcHJvcGVyIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBhdm9pZGluZyBhbnkgcG90ZW50aWFsIHByZXByb2Nlc3NvciBwaXRmYWxscy4gR2l2ZW4gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIFhGUk0gc3Vic3lzdGVtLCBldmVuIHNlZW1pbmdseSBiZW5pZ24gYCNlbmRpZmAgZGlyZWN0aXZlcyBjYW4gaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGRpZmZlcmVudCBidWlsZCBjb25maWd1cmF0aW9ucywga2VybmVsIHZlcnNpb25zLCBvciBlbmFibGVkIGZlYXR1cmVzLgoKSSYjMzk7bSB0aGlua2luZywgYXJlIHRoZXJlIGFueSB1bnVzdWFsIG5lc3Rpbmcgc3RydWN0dXJlcz8gQW0gSSBzZWVpbmcgYW55IHBvdGVudGlhbCBmb3IgbWlzbWF0Y2hlZCBgI2lmZGVmYC9gI2lmbmRlZmAgcGFpcnMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgY29kZSBpbmNsdXNpb24gb3IgZXhjbHVzaW9uPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgYXJlYXMgd2hlcmUgYSBtaXNzaW5nIG9yIG1pc3BsYWNlZCBgI2VuZGlmYCBtaWdodCBiZSBjYXVzaW5nIGlzc3VlcywgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gdGhlIGRldmljZSBtYW5hZ2VtZW50IHNpZGUgb2YgWEZSTS4gQSBjb21tb24gaXNzdWUgbWlnaHQgYmUgZGlmZmVyaW5nIGRlZmluaXRpb25zIGluIHZhcmlvdXMgY29uZmlndXJhdGlvbiBzdGF0ZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBkZXZpY2UgcmVnaXN0cmF0aW9uL2RlcmVnaXN0cmF0aW9uLCBvciBwZXJoYXBzIGV2ZW4gaW4gdGhlIGhhbmRsaW5nIG9mIFhGUk0gZGV2aWNlcyB3aXRoIHZhcnlpbmcgY2FwYWJpbGl0aWVzLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoaXMgc3Vic3lzdGVtLCBJJiMzOTttIG9uIHRoZSBsb29rb3V0IGZvciBhbnl0aGluZyB0aGF0IGNvdWxkIGFmZmVjdCBob3cgWEZSTSBpbnRlcmFjdHMgd2l0aCBuZXR3b3JrIGludGVyZmFjZXMgYW5kIHJvdXRpbmcuIE15IG1haW4gZ29hbCBpcyB0byBzZWUgaWYgYW55IG9idmlvdXMgdnVsbmVyYWJpbGl0aWVzIGV4aXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZW5kaWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fZGV2aWNlLmM9NTAzPXZvaWQgeGZybV9kZXZfYmFja2xvZyhzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZClcbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTUyMy19XG5uZXQveGZybS94ZnJtX2RldmljZS5jOjUyNDojZW5kaWZcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTI1LVxubmV0L3hmcm0veGZybV9kZXZpY2UuYz01MjY9c3RhdGljIGludCB4ZnJtX2FwaV9jaGVjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTQwLVx0XHRyZXR1cm4gTk9USUZZX0JBRDtcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6NTQxOiNlbmRpZlxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NDItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTAyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYENPTkZJR19YRlJNX09GRkxPQURgIERlcGVuZGVuY3kqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQsIHJpZ2h0LCBsaW5lIDUyNCB3aXRoIHRoZSBgI2VuZGlmYCBjbGVhcmx5IGNsb3NlcyB0aGUgYCNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEYCBibG9jay4gTWFrZXMgc2Vuc2UuIE5vdywgYHhmcm1fZGV2X3N0YXRlX2FkZGAgaXMgZGVmaW5lZCBhdCBsaW5lIDIzOS4gVGhhdCYjMzk7cyAqaW5zaWRlKiB0aGUgY29uZGl0aW9uYWwgYmxvY2ssIHNvIGBDT05GSUdfWEZSTV9PRkZMT0FEYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlIGZvciB0aGlzIGZ1bmN0aW9uLiBUaGlzIGFsc28gbWVhbnMgYENPTkZJR19YRlJNX09GRkxPQURgICptdXN0KiBiZSBzZXQgaW4gb3JkZXIgdG8gcmVhY2ggdGhlIGNvZGUgd2hlcmUgYHhzby0mZ3Q7ZGV2YCBpcyBhc3NpZ25lZCwgd2hpY2gsIGluIHR1cm4sIGlzIGEgY3JpdGljYWwgcGllY2UgaW4gdHJpZ2dlcmluZyB0aGUgYnVnIGluIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAuCgpIbW0sIG5vdyBsZXQgbWUganVzdCBjaGVjay4uLiBSaWdodCwgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpcyBjYWxsZWQgZnJvbSBib3RoIGB4ZnJtX2Rldl9kb3duYCBhbmQgYHhmcm1fZGV2X3VucmVnaXN0ZXJgLiBUaG9zZSBhcmUgZGVmaW5lZCBpbiBgbmV0L3hmcm0veGZybV9kZXZpY2UuY2AuIFNvIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGlzc3VlIGFuZCB3aGVuIHRoZSBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIGNhbGxlZCBJIHNob3VsZCBkb3VibGUgY2hlY2sgaWYgYHhmcm1fZGV2X2Rvd25gIGlzIGFsc28gcHJvdGVjdGVkIGJ5IGAjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9kZXZpY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTIwOlx0XHRcdHhmcm1fZGV2X3Jlc3VtZShza2IpO1xuIDUyMTpcdFx0fVxuIDUyMjpcdFxuIDUyMzpcdH1cbiA1MjQ6XHQjZW5kaWZcbiA1MjU6XHRcbiA1MjY6XHRzdGF0aWMgaW50IHhmcm1fYXBpX2NoZWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gNTI3Olx0e1xuIDUyODpcdCNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXG4gNTI5Olx0XHRpZiAoKGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19FU1BfVFhfQ1NVTSkgXHUwMDI2XHUwMDI2XG4gNTMwOlx0XHQgICAgIShkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfRVNQKSlcbiA1MzE6XHRcdFx0cmV0dXJuIE5PVElGWV9CQUQ7XG4gNTMyOlx0XG4gNTMzOlx0XHRpZiAoKGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19FU1ApIFx1MDAyNlx1MDAyNlxuIDUzNDpcdFx0ICAgICghKGRldi1cdTAwM2V4ZnJtZGV2X29wcyBcdTAwMjZcdTAwMjZcbiA1MzU6XHRcdCAgICAgICBkZXYtXHUwMDNleGZybWRldl9vcHMtXHUwMDNleGRvX2Rldl9zdGF0ZV9hZGQgXHUwMDI2XHUwMDI2XG4gNTM2Olx0XHQgICAgICAgZGV2LVx1MDAzZXhmcm1kZXZfb3BzLVx1MDAzZXhkb19kZXZfc3RhdGVfZGVsZXRlKSkpXG4gNTM3Olx0XHRcdHJldHVybiBOT1RJRllfQkFEO1xuIDUzODpcdCNlbHNlXG4gNTM5Olx0XHRpZiAoZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiAoTkVUSUZfRl9IV19FU1AgfCBORVRJRl9GX0hXX0VTUF9UWF9DU1VNKSlcbiA1NDA6XHRcdFx0cmV0dXJuIE5PVElGWV9CQUQ7XG4gNTQxOlx0I2VuZGlmXG4gNTQyOlx0XG4gNTQzOlx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gNTQ0Olx0fVxuIDU0NTpcdFxuIDU0NjpcdHN0YXRpYyBpbnQgeGZybV9kZXZfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDU0NzpcdHtcbiA1NDg6XHRcdGlmIChkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfRVNQKSB7XG4gNTQ5Olx0XHRcdHhmcm1fZGV2X3N0YXRlX2ZsdXNoKGRldl9uZXQoZGV2KSwgZGV2LCB0cnVlKTtcbiA1NTA6XHRcdFx0eGZybV9kZXZfcG9saWN5X2ZsdXNoKGRldl9uZXQoZGV2KSwgZGV2LCB0cnVlKTtcbiA1NTE6XHRcdH1cbiA1NTI6XHRcbiA1NTM6XHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiA1NTQ6XHR9XG4gNTU1Olx0XG4gNTU2Olx0c3RhdGljIGludCB4ZnJtX2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gNTU3Olx0e1xuIDU1ODpcdFx0eGZybV9kZXZfc3RhdGVfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xuIDU1OTpcdFx0eGZybV9kZXZfcG9saWN5X2ZsdXNoKGRldl9uZXQoZGV2KSwgZGV2LCB0cnVlKTtcbiA1NjA6XHRcbiA1NjE6XHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiA1NjI6XHR9XG4gNTYzOlx0XG4gNTY0Olx0c3RhdGljIGludCB4ZnJtX2Rldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcbiA1NjU6XHR7XG4gNTY2Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XG4gNTY3Olx0XG4gNTY4Olx0XHRzd2l0Y2ggKGV2ZW50KSB7XG4gNTY5Olx0XHRjYXNlIE5FVERFVl9SRUdJU1RFUjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3NTYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFhGUk0gRGV2aWNlIFJlZ2lzdHJhdGlvbiBhbmQgU3RhdGUgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgYHhmcm1fZGV2X2Rvd25gIGFuZCBgeGZybV9kZXZfdW5yZWdpc3RlcmAgZnVuY3Rpb25zLiBUaGV5JiMzOTtyZSBkZWZpbmVkIG91dHNpZGUgdGhlIGAjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRGAgYmxvY2ssIHdoaWNoIHNlZW1zIGEgYml0IG1pc2xlYWRpbmcgYXQgZmlyc3QgZ2xhbmNlLiBIb3dldmVyLCBJIHNlZSB0aGF0IHRoZXkgKm9ubHkqIGRvIGFueXRoaW5nIHNpZ25pZmljYW50IHdoZW4gYHhzby0mZ3Q7ZGV2ID09IGRldmAgd2l0aGluIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAuIEFuZCwgaG9sZCBvbiwgYHhzby0mZ3Q7ZGV2YCBpcyAqb25seSogc2V0IGlmIGBDT05GSUdfWEZSTV9PRkZMT0FEYCBpcyBhY3R1YWxseSBlbmFibGVkLiBUaGVyZWZvcmUsIGBDT05GSUdfWEZSTV9PRkZMT0FEYCBpcyBjbGVhcmx5IGEgcmVxdWlyZW1lbnQgZm9yIHRoZXNlIGZ1bmN0aW9ucyB0byBoYXZlIGFueSBwcmFjdGljYWwgaW1wYWN0LCBhbmQgYENPTkZJR19YRlJNYCBpcyByZXF1aXJlZCBhcyB3ZWxsLgoKQnV0LCBoYW5nIG9uLCBsZXQgbWUgcmV2aXNpdCB0aGlzLiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIGFsc28gY2FsbGVkIHVuY29uZGl0aW9uYWxseSBmcm9tIGB4ZnJtX2Rldl91bnJlZ2lzdGVyYC4gRXZlbiB0aGVuLCBJdCBzZWVtcyBhcyB0aG91Z2ggYENPTkZJR19YRlJNX09GRkxPQURgIGlzIG5lZWRlZCB0byBhY3R1YWxseSB1dGlsaXplIHRoZSBtb2RpZmllZCBjb2RlIHBhdGggaW4gYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCB3aGVyZSBgeHNvLSZndDtkZXYgPT0gZGV2YCBpcyB0cnVlLgoKVGhlbiwgSSYjMzk7bSB0cmFjaW5nIGJhY2sgdG8gdGhlIGNhbGwgc3RhY2sgb2YgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgLiBJIHNlZSB0aGF0IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGB4ZnJtX3N0YXRlX2djX2Rlc3Ryb3lgLCB3aGljaCBpdHNlbGYgaXMgY2FsbGVkIGZyb20gYHhmcm1fc3RhdGVfZ2NfdGFza2AuIGB4ZnJtX3N0YXRlX2djX2Rlc3Ryb3lgIGNhbGxzIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlKHgpYCB1bmNvbmRpdGlvbmFsbHkuIEluIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCBJIHNlZSB0aGF0IHRoZXJlIGlzIHRoaXMgY29kZToKCmBgYGMKCWlmIChkZXYgJmFtcDsmYW1wOyBkZXYtJmd0O3hmcm1kZXZfb3BzKSB7CgkJc3Bpbl9sb2NrX2JoKCZhbXA7eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7CgkJaWYgKCFobGlzdF91bmhhc2hlZCgmYW1wO3gtJmd0O2Rldl9nY2xpc3QpKQoJCQlobGlzdF9kZWxfaW5pdCgmYW1wO3gtJmd0O2Rldl9nY2xpc3QpOwoJCXNwaW5fdW5sb2NrX2JoKCZhbXA7eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7CmBgYAoKVGhpcyAqcmVxdWlyZXMqIGBkZXZgIHRvIGJlIG5vbi1OVUxMLCByaWdodD8gV2hpY2ggbWVhbnMgaXQgcmVxdWlyZXMgYHhzby0mZ3Q7ZGV2YC4gVGhlcmVmb3JlLCBgeHNvLSZndDtkZXZgIG11c3QgYmUgbm9uLU5VTEwgaGVyZS4gU28sIGp1c3QgbGlrZSBiZWZvcmUsIGBDT05GSUdfWEZSTV9PRkZMT0FEYCBpcyBlc3NlbnRpYWwgZm9yIHJlYWNoaW5nIHRoZSBtb2RpZmllZCBjb2RlIHdpdGhpbiBgeGZybV9kZXZfc3RhdGVfZnJlZWAgYXMgd2VsbC4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBydW4gdGhyb3VnaCBteSBoZWFkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgQ09ORklHX1hGUk1fVVNFUmAgbWlnaHQgYmUgbmVlZGVkIGlmIHVzZXJzcGFjZSBjb25maWd1cmF0aW9uIG9mIFhGUk0gc3RhdGVzIGlzIGludm9sdmVkLiBMZXQgbWUgZG91YmxlLWNoZWNrIGBuZXQveGZybS9LY29uZmlnYCB0byBjb25maXJtIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFhGUk1fVVNFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnPTIyPWlmIElORVRcbm5ldC94ZnJtL0tjb25maWc6MjM6Y29uZmlnIFhGUk1fVVNFUlxubmV0L3hmcm0vS2NvbmZpZy0yNC1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTMxLVxubmV0L3hmcm0vS2NvbmZpZzozMjpjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cdHRyaXN0YXRlIFwmIzM0O0NvbXBhdGlibGUgQUJJIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE5ODkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipYRlJNIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSBBbmFseXNpcyoqCgpSaWdodCwgc28gdG8gZ2V0IFhGUk0gc3RhdGVzIHByb3Blcmx5IGNvbmZpZ3VyZWQsIEkmIzM5O20gYWJzb2x1dGVseSBnb2luZyB0byBuZWVkIGBDT05GSUdfWEZSTV9VU0VSYC4gVGhhdCBtdWNoIGlzIG9idmlvdXMuIE5vdywgYSBjcnVjaWFsIGZvbGxvdy11cCBxdWVzdGlvbiBhbHdheXMgcG9wcyB1cDogRG9lcyBgQ09ORklHX1hGUk1fT0ZGTE9BRGAgaGF2ZSBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIG9yIHJlbGF0aW9uc2hpcHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBCZXN0IHRvIGNsYXJpZnkgdGhhdCBiZWZvcmUgbW92aW5nIGZvcndhcmQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBjb25maWd1cmF0aW9uIG1hdHJpeC4gTGV0IG1lIGludmVzdGlnYXRlIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBjb25zaWRlciBmb3IgdGhpcyB0byB3b3JrIGFwcHJvcHJpYXRlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNX09GRkxPQUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZz01PWNvbmZpZyBYRlJNXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xMC1cbm5ldC94ZnJtL0tjb25maWc6MTE6Y29uZmlnIFhGUk1fT0ZGTE9BRFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyNzMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgc3VtbWFyeToKCioqQW5hbHl6aW5nIGEgQm9vbGVhbiBEZWNpc2lvbioqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIGBib29sYCB2YXJpYWJsZSBoZXJlLCBhbmQgdGhlcmUmIzM5O3Mgbm8gZXhwbGljaXQgdXNlciBwcm9tcHQgb3IgY29uZmlndXJhdGlvbiBhc3NvY2lhdGVkIHdpdGggaXQuIFRoYXQgbWVhbnMgaXRzIHN0YXRlIOKAkyB0cnVlIG9yIGZhbHNlIOKAkyBpcyBiZWluZyBkZXRlcm1pbmVkIHVwc3RyZWFtLCBsaWtlbHkgdGhyb3VnaCBzb21lIG90aGVyIGNvbmZpZ3VyYXRpb24gb3IgYSBjb25kaXRpb25hbCBjaGVjay4gTXkgcHJpbWFyeSBxdWVzdGlvbiBpcywgd2hhdCYjMzk7cyBkcml2aW5nIHRoaXM/IEkgbmVlZCB0byB0cmFjZSB0aGUgbG9naWMgYW5kIGZpZ3VyZSBvdXQgKndoYXQqIGlzIHNlbGVjdGluZyBgWEZSTV9PRkZMT0FEYC4gVW5kZXJzdGFuZGluZyB0aGF0IHVwc3RyZWFtIGRlcGVuZGVuY3kgaXMgY3J1Y2lhbCB0byBncmFzcGluZyB0aGUgb3ZlcmFsbCBzeXN0ZW0gYmVoYXZpb3IuIFdoZXJlIGlzIHRoaXMgZmxhZyBhY3R1YWxseSBiZWluZyBzZXQ/IExldCYjMzk7cyBkaWcgaW4gYW5kIGZpbmQgdGhlIGRlcGVuZGVuY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBYRlJNX09GRkxPQUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0zNjk9Y29uZmlnIElORVRfRVNQX09GRkxPQURcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM3MS1cdGRlcGVuZHMgb24gSU5FVF9FU1Bcbm5ldC9pcHY0L0tjb25maWc6MzcyOlx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxubmV0L2lwdjQvS2NvbmZpZy0zNzMtXHRkZWZhdWx0IG5cbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTc3PWNvbmZpZyBJTkVUNl9FU1BfT0ZGTE9BRFxuLS1cbm5ldC9pcHY2L0tjb25maWctNzktXHRkZXBlbmRzIG9uIElORVQ2X0VTUFxubmV0L2lwdjYvS2NvbmZpZzo4MDpcdHNlbGVjdCBYRlJNX09GRkxPQURcbm5ldC9pcHY2L0tjb25maWctODEtXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI2NDgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFU1AgT2ZmbG9hZCBDb25maWd1cmF0aW9uIC0gVGhlIFBhdGggRm9yd2FyZCoqCgpSaWdodCwgc28gaXQmIzM5O3MgYmVjb21lIGNsZWFyOiBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUNl9FU1BfT0ZGTE9BRGAgYm90aCBhdXRvbWF0aWNhbGx5IHRyaWdnZXIgYFhGUk1fT0ZGTE9BRGAuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgdGhlIG9mZmxvYWQgZnVuY3Rpb25hbGl0eSBpcyBrZXkuIFRoZXJlZm9yZSwgZW5hYmxpbmcgdGhvc2UgdHdvIG9wdGlvbnMgaXMgdGhlIG9idmlvdXMgbmV4dCBzdGVwLiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhhdCwgdGhvdWdoLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgYW5kIG1ha2Ugc3VyZSBub3RoaW5nIGVsc2UgaXMgYWxzbyBzZWxlY3RpbmcgYFhGUk1fT0ZGTE9BRGAuIFRoZXJlIG1pZ2h0IGJlIG90aGVyIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Ygb3Igb3RoZXIgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZmlndXJhdGlvbiBjaGFuZ2UgdGhhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIEJlc3QgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFhGUk1fT0ZGTE9BRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODkzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRVNQIE9mZmxvYWQgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBob25pbmcgaW4gb24gdGhlIEVTUCBvZmZsb2FkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgdGhlIGtleSBwbGF5ZXJzIGhlcmUgc2VlbSB0byBiZSBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUNl9FU1BfT0ZGTE9BRGAuIEhvd2V2ZXIsIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGluY2x1ZGUgYElORVRfRVNQX09GRkxPQURgLCBgSU5FVDZfRVNQX09GRkxPQURgLCBhbG9uZyB3aXRoIHRoZSBjcnVjaWFsIGBYRlJNX1VTRVJgIGFuZCBgWEZSTWAgb3B0aW9ucywgYXMgdGhleSYjMzk7cmUgZm91bmRhdGlvbmFsIGZvciB0aGUgdHJhbnNmb3JtIGxheWVyLiBXYWl0IGEgbWludXRlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55IGRlcGVuZGVuY2llcyAtIEkgYWxzbyBuZWVkIHRvIGluY2x1ZGUgYElORVRfRVNQYCBhbmQgYElORVQ2X0VTUGAgYXMgd2VsbC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gYW5kIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZSBmb3IgdGhlIGBJTkVUX0VTUF9PRkZMT0FEYCBkZXBlbmRlbmN5LCBqdXN0IHRvIHNvbGlkaWZ5IG15IG1lbnRhbCBtb2RlbC4gVGhpcyB3YXkgSSBjYW4gdmVyaWZ5IG15IHVuZGVyc3RhbmRpbmcgYW5kIGF2b2lkIG1ha2luZyBhbnkgbWlzdGFrZXMgaW4gbXkgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVRfRVNQX09GRkxPQUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0zNTQ9Y29uZmlnIElORVRfRVNQXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zNjgtXG5uZXQvaXB2NC9LY29uZmlnOjM2OTpjb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxubmV0L2lwdjQvS2NvbmZpZy0zNzAtXHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzMzYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2MjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEVTUCBPZmZsb2FkIENvbmZpZ3VyYXRpb24gYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgRVNQIG9mZmxvYWQgaXMgY29uZmlndXJlZC4gSXQgbG9va3MgbGlrZSBgSU5FVF9FU1BfT0ZGTE9BRGAgaXMgYSB0cmlzdGF0ZSB3aXRoIGEgcHJvbXB0LiBJIHNob3VsZCBhZGQgYm90aCBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUNl9FU1BfT0ZGTE9BRGAgdG8gdGhlIEVuYWJsZUNvbmZpZ3MuIFRoYXQgbWFrZXMgc2Vuc2UsIHRob3NlIGFyZSB0aGUga2V5IHRoaW5ncyB0byBlbmFibGUuCgpMZXQmIzM5O3MgZG8gYSBxdWljayByZWNhcCBvZiB0aGUgY29uZmlncyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoOiBgWEZSTWAsIGBYRlJNX1VTRVJgLCBgSU5FVF9FU1BgLCBgSU5FVF9FU1BfT0ZGTE9BRGAsIGBJTkVUNl9FU1BgLCBhbmQgYElORVQ2X0VTUF9PRkZMT0FEYC4KCkhtbSwgd2FpdC4gYFhGUk1fT0ZGTE9BRGAgaXMgYWN0dWFsbHkgc2VsZWN0ZWQgYnkgYElORVRfRVNQX09GRkxPQURgLiBTaG91bGQgSSBib3RoZXIgcHV0dGluZyBpdCBvbiB0aGUgbGlzdD8gTm8sIGl0IGRvZXNuJiMzOTt0IGhhdmUgYSBwcm9tcHQsIHNvIGl0IGNhbiYjMzk7dCBiZSBkaXJlY3RseSBlbmFibGVkIGluIHRoZSBgLmNvbmZpZ2AgZmlsZS4gSXQgKmhhcyogdG8gYmUgc2VsZWN0ZWQgYnkgZWl0aGVyIGBJTkVUX0VTUF9PRkZMT0FEYCBvciBgSU5FVDZfRVNQX09GRkxPQURgLiBPa2F5LCBzbyBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUNl9FU1BfT0ZGTE9BRGAgYXJlIHRoZSByaWdodCBvbmVzIHRvIGZvY3VzIG9uLgoKTm93LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGFuZCBleGFtaW5lIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgYW5kIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYC4gR29vZCwgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpcyBleHBvcnRlZCBhbmQgaXNuJiMzOTt0IHN0YXRpYy4gYHhmcm1fZGV2X3N0YXRlX2ZyZWVgIGlzIGFsc28gbm90IHN0YXRpYy4gU28sIGJvdGggb2YgdGhlc2UgYXJlIHBvdGVudGlhbCBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIGFuYWx5c2lzLgoKV2FpdCBhIHNlY29uZCwgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgIGlzIGNhbGxlZCBmcm9tIGB4ZnJtX3N0YXRlX2djX2Rlc3Ryb3lgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGB4ZnJtX3N0YXRlX2djX3Rhc2tgLiBBbmQgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpcyBjYWxsZWQgZnJvbSBgeGZybV9kZXZfZG93bmAgYW5kIGB4ZnJtX2Rldl91bnJlZ2lzdGVyYC4gT2theS4gQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCB3ZXJlIG1vZGlmaWVkPyBObywganVzdCB0aG9zZSB0d28uCgpPa2F5LCBub3cgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayBpZiBgeGZybV9kZXZfc3RhdGVfZnJlZWAgaXMgaW5saW5lZC4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQmIzM5O3MgZGVmaW5lZCBpbiBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYCBhbmQgaXMgYWxzbyBjYWxsZWQgZnJvbSB0aGVyZS4gSXQmIzM5O3MgYWN0dWFsbHkgY2FsbGVkIGZyb20gYHhmcm1fc3RhdGVfZ2NfZGVzdHJveWAgKmFuZCogYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBzbyB0aGUgZnVuY3Rpb24gaXMgaW4gYHhmcm1fc3RhdGUuY2AuIENhbiB0aGUgY29tcGlsZXIgaW5saW5lIHRoaXM/IEl0JiMzOTtzIG5vdCBtYXJrZWQgYGlubGluZWAuIEl0IGlzIGEgcmVndWxhciBmdW5jdGlvbi4gVGhlIHF1ZXN0aW9uIG5vdyBpcyBpZiBpdCYjMzk7cyBleHBvcnRlZC4gTm9wZSwgaXQmIzM5O3Mgbm90IGV4cG9ydGVkLiBCdXQgaXQmIzM5O3MgYWxzbyAqbm90KiBzdGF0aWMsIHNvIHRoZSBjb21waWxlciBjYW4mIzM5O3QgaW5saW5lIGl0IGFjcm9zcyB0cmFuc2xhdGlvbiB1bml0cy4gSG93ZXZlciwgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBvbmx5IGNhbGxlZCBmcm9tIHdpdGhpbiBgeGZybV9zdGF0ZS5jYC4gV2FpdCwgaXMgdGhhdCB0cnVlPyBMZXQgbWUgdmVyaWZ5LiBJcyBpdCBkZWNsYXJlZCBpbiBhIGhlYWRlcj8gSSBuZWVkIHRvIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX2Rldl9zdGF0ZV9mcmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3hmcm0uaD0yMTMxPXZvaWQgeGZybV9kZXZfc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTtcbmluY2x1ZGUvbmV0L3hmcm0uaDoyMTMyOnZvaWQgeGZybV9kZXZfc3RhdGVfZnJlZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCk7XG5pbmNsdWRlL25ldC94ZnJtLmgtMjEzMy1cbi0tXG5pbmNsdWRlL25ldC94ZnJtLmg9MjIwMz1zdGF0aWMgaW5saW5lIHZvaWQgeGZybV9kZXZfc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuLS1cbmluY2x1ZGUvbmV0L3hmcm0uaC0yMjA2LVxuaW5jbHVkZS9uZXQveGZybS5oOjIyMDc6c3RhdGljIGlubGluZSB2b2lkIHhmcm1fZGV2X3N0YXRlX2ZyZWUoc3RydWN0IHhmcm1fc3RhdGUgKngpXG5pbmNsdWRlL25ldC94ZnJtLmgtMjIwOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODE1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqWEZSTSBLZXkgTGVuZ3RocyBhbmQgSW5saW5lIEZ1bmN0aW9ucyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhlIFhGUk0gY29kZSwgc3BlY2lmaWNhbGx5IGtleSBsZW5ndGhzLiBUaGUgZGVjbGFyYXRpb24gSSBuZWVkIGlzIGluIGBpbmNsdWRlL25ldC94ZnJtLmhgLiBPa2F5LCBnb3QgaXQuIEhtbSwgaW50ZXJlc3RpbmcuLi4gdGhlcmUmIzM5O3MgYSAqc3RhdGljIGlubGluZSogdmVyc2lvbiBkZWZpbmVkIGFzIHdlbGw/IFRoYXQmIzM5O3MgYSBjbGFzc2ljIG9wdGltaXphdGlvbiB0ZWNobmlxdWUsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiBib3RoIHRoZSBtYWluIGRlY2xhcmF0aW9uIGFuZCB0aGUgaW5saW5lIHZhcmlhbnQuIEdvdHRhIHNlZSBob3cgdGhleSBpbnRlcmFjdC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIuIFRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJJiMzOTtsbCBqdW1wIHRvIGFyb3VuZCBsaW5lIDIyMDcgaW4gYGluY2x1ZGUvbmV0L3hmcm0uaGAgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkZXRhaWxzIEkgbmVlZCB0byBldmFsdWF0ZSB0aGUgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBhbmQgZmlndXJlIG91dCBleGFjdGx5IGhvdyB0aGVzZSBrZXkgbGVuZ3RocyBhcmUgaGFuZGxlZCBhbmQgb3B0aW1pemVkIHdpdGhpbiB0aGUgWEZSTSBmcmFtZXdvcmsuIFRoaXMgaXMgYSBjcml0aWNhbCBhcmVhIGZvciBwZXJmb3JtYW5jZSwgc28gdW5kZXJzdGFuZGluZyB0aGUgaW5saW5lIGltcGxpY2F0aW9ucyBpcyBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQveGZybS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTk1Olx0XG4yMTk2Olx0c3RhdGljIGlubGluZSBpbnQgeGZybV9kZXZfc3RhdGVfYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHhmcm1fc3RhdGUgKngsXG4yMTk3Olx0XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCB4ZnJtX3VzZXJfb2ZmbG9hZCAqeHVvLFxuMjE5ODpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4yMTk5Olx0e1xuMjIwMDpcdFx0cmV0dXJuIDA7XG4yMjAxOlx0fVxuMjIwMjpcdFxuMjIwMzpcdHN0YXRpYyBpbmxpbmUgdm9pZCB4ZnJtX2Rldl9zdGF0ZV9kZWxldGUoc3RydWN0IHhmcm1fc3RhdGUgKngpXG4yMjA0Olx0e1xuMjIwNTpcdH1cbjIyMDY6XHRcbjIyMDc6XHRzdGF0aWMgaW5saW5lIHZvaWQgeGZybV9kZXZfc3RhdGVfZnJlZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbjIyMDg6XHR7XG4yMjA5Olx0fVxuMjIxMDpcdFxuMjIxMTpcdHN0YXRpYyBpbmxpbmUgaW50IHhmcm1fZGV2X3BvbGljeV9hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLFxuMjIxMjpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHhmcm1fdXNlcl9vZmZsb2FkICp4dW8sIHU4IGRpcixcbjIyMTM6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjIyMTQ6XHR7XG4yMjE1Olx0XHRyZXR1cm4gMDtcbjIyMTY6XHR9XG4yMjE3Olx0XG4yMjE4Olx0c3RhdGljIGlubGluZSB2b2lkIHhmcm1fZGV2X3BvbGljeV9kZWxldGUoc3RydWN0IHhmcm1fcG9saWN5ICp4KVxuMjIxOTpcdHtcbjIyMjA6XHR9XG4yMjIxOlx0XG4yMjIyOlx0c3RhdGljIGlubGluZSB2b2lkIHhmcm1fZGV2X3BvbGljeV9mcmVlKHN0cnVjdCB4ZnJtX3BvbGljeSAqeClcbjIyMjM6XHR7XG4yMjI0Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTUzNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgeGZybSBPZmZsb2FkIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgYHN0YXRpYyBpbmxpbmVgIHZlcnNpb24gaXMgYmVpbmcgdXNlZCBzcGVjaWZpY2FsbHkgd2hlbiBgQ09ORklHX1hGUk1fT0ZGTE9BRGAgaXNuJiMzOTt0IGRlZmluZWQuIFRoYXQgc3VnZ2VzdHMgdGhhdCB0aGVyZSYjMzk7cyBhbiBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgcHJlc3VtYWJseSBvcHRpbWl6ZWQgZm9yIGhhcmR3YXJlIG9mZmxvYWQsIHRoYXQga2lja3MgaW4gd2hlbiB0aGUgb2ZmbG9hZCBmZWF0dXJlICppcyogZW5hYmxlZC4gVGhpcyBiZWdzIHRoZSBxdWVzdGlvbjogV2hhdCYjMzk7cyB0aGUgZXhhY3QgbmF0dXJlIG9mIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBpbmxpbmUgdmVyc2lvbiBhbmQgdGhlIG9mZmxvYWQgdmVyc2lvbi4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgYCNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEYCBibG9jayBpbiBgaW5jbHVkZS9uZXQveGZybS5oYCB0byBzZWUgaG93IHRoZXNlIGFyZSBoYW5kbGVkIGFuZCBleGFjdGx5IGhvdyB0aGUgY29kZSBicmFuY2hlcy4gVGhlIGhlYWRlciBmaWxlIHNob3VsZCBnaXZlIG1lIHRoZSBmdWxsIHBpY3R1cmUuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgc3BlY2lmaWMgcGllY2UgZml0cyBpbnRvIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfWEZSTV9PRkZMT0FEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQveGZybS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3hmcm0uaD0xNzIxPXZvaWQgeGZybV9zdGF0ZV91cGRhdGVfc3RhdHMoc3RydWN0IG5ldCAqbmV0KTtcbmluY2x1ZGUvbmV0L3hmcm0uaDoxNzIyOiNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXG5pbmNsdWRlL25ldC94ZnJtLmgtMTcyMy1zdGF0aWMgaW5saW5lIHZvaWQgeGZybV9kZXZfc3RhdGVfdXBkYXRlX3N0YXRzKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuLS1cbmluY2x1ZGUvbmV0L3hmcm0uaD0yMTE4PXZvaWQgX19pbml0IHhmcm1fZGV2X2luaXQodm9pZCk7XG5pbmNsdWRlL25ldC94ZnJtLmgtMjExOS1cbmluY2x1ZGUvbmV0L3hmcm0uaDoyMTIwOiNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXG5pbmNsdWRlL25ldC94ZnJtLmgtMjEyMS12b2lkIHhmcm1fZGV2X3Jlc3VtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYwMTEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBpdHMgZGVmaW5pdGlvbiBpcyBjb25kaXRpb25hbC4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIHdhcyB0aGF0IHRoaXMgZnVuY3Rpb24gb25seSBleGlzdGVkIGlmIGBDT05GSUdfWEZSTV9PRkZMT0FEYCB3YXMgZW5hYmxlZC4gQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gSSAqc3dlYXIqIEkgc2F3IGl0IGRlZmluZWQgZWxzZXdoZXJlLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC94ZnJtL3hmcm1fc3RhdGUuY2AsIGFuZCBpdCAqd2FzbiYjMzk7dCogd3JhcHBlZCBpbiBhbiBgI2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURgIGJsb2NrLiBUaGlzIGlzIHRocm93aW5nIG1lIG9mZi4KCkkgbmVlZCB0byBjb25maXJtIHRoaXMgZGlzY3JlcGFuY3kuIExldCBtZSBwdWxsIHVwIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA3ODAuIEkmIzM5O2xsIHNlZSBpZiBJIGNhbiBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIGZ1bmN0aW9uJiMzOTtzIGV4aXN0ZW5jZSBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGhhcyBiZWVuIGRlZmluZWQuIFRoaXMgY291bGQgYmUgYSBjcml0aWNhbCBtaXN1bmRlcnN0YW5kaW5nIG9uIG15IHBhcnQsIG9yIGEgc3VidGxlIG51YW5jZSBpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiB0aGF0IEkmIzM5O20gbWlzc2luZy4gVGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fc3RhdGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzYwOlx0XHR9XG4gNzYxOlx0XHRyZXR1cm4geDtcbiA3NjI6XHR9XG4gNzYzOlx0RVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX2FsbG9jKTtcbiA3NjQ6XHRcbiA3NjU6XHQjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxuIDc2NjpcdHZvaWQgeGZybV9kZXZfc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuIDc2NzpcdHtcbiA3Njg6XHRcdHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkICp4c28gPSBcdTAwMjZ4LVx1MDAzZXhzbztcbiA3Njk6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBSRUFEX09OQ0UoeHNvLVx1MDAzZWRldik7XG4gNzcwOlx0XG4gNzcxOlx0XHRpZiAoZGV2KSB7XG4gNzcyOlx0XHRcdGRldi1cdTAwM2V4ZnJtZGV2X29wcy1cdTAwM2V4ZG9fZGV2X3N0YXRlX2RlbGV0ZShkZXYsIHgpO1xuIDc3MzpcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XG4gNzc0Olx0XHRcdGhsaXN0X2FkZF9oZWFkKFx1MDAyNngtXHUwMDNlZGV2X2djbGlzdCwgXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbGlzdCk7XG4gNzc1Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuIDc3NjpcdFx0fVxuIDc3NzpcdH1cbiA3Nzg6XHRFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX2Rldl9zdGF0ZV9kZWxldGUpO1xuIDc3OTpcdFxuIDc4MDpcdHZvaWQgeGZybV9kZXZfc3RhdGVfZnJlZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbiA3ODE6XHR7XG4gNzgyOlx0XHRzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCAqeHNvID0gXHUwMDI2eC1cdTAwM2V4c287XG4gNzgzOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gUkVBRF9PTkNFKHhzby1cdTAwM2VkZXYpO1xuIDc4NDpcdFxuIDc4NTpcdFx0aWYgKGRldiBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZXhmcm1kZXZfb3BzKSB7XG4gNzg2Olx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcbiA3ODc6XHRcdFx0aWYgKCFobGlzdF91bmhhc2hlZChcdTAwMjZ4LVx1MDAzZWRldl9nY2xpc3QpKVxuIDc4ODpcdFx0XHRcdGhsaXN0X2RlbF9pbml0KFx1MDAyNngtXHUwMDNlZGV2X2djbGlzdCk7XG4gNzg5Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuIDc5MDpcdFxuIDc5MTpcdFx0XHRpZiAoZGV2LVx1MDAzZXhmcm1kZXZfb3BzLVx1MDAzZXhkb19kZXZfc3RhdGVfZnJlZSlcbiA3OTI6XHRcdFx0XHRkZXYtXHUwMDNleGZybWRldl9vcHMtXHUwMDNleGRvX2Rldl9zdGF0ZV9mcmVlKGRldiwgeCk7XG4gNzkzOlx0XHRcdFdSSVRFX09OQ0UoeHNvLVx1MDAzZWRldiwgTlVMTCk7XG4gNzk0Olx0XHRcdHhzby1cdTAwM2V0eXBlID0gWEZSTV9ERVZfT0ZGTE9BRF9VTlNQRUNJRklFRDtcbiA3OTU6XHRcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNnhzby1cdTAwM2VkZXZfdHJhY2tlcik7XG4gNzk2Olx0XHR9XG4gNzk3Olx0fVxuIDc5ODpcdCNlbmRpZlxuIDc5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzA4NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGluIFhGUk0gT2ZmbG9hZCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBwaW5wb2ludGVkIHRoYXQgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgICppcyogaW5kZWVkIHdyYXBwZWQgd2l0aGluIHRoZSBgI2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURgIGJsb2NrLiBDb25maXJtZWQ7IGl0IGNvbmNsdWRlcyBhcm91bmQgbGluZSA3OTguIFRoYXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIEhvd2V2ZXIsIEkmIzM5O3ZlIG5vdGljZWQgc29tZXRoaW5nIHNsaWdodGx5IGRpZmZlcmVudCB3aXRoIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAuIEl0JiMzOTtzICpvdXRzaWRlKiB0aGF0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBUaGF0IGluaXRpYWxseSB0aHJldyBtZSwgYnV0IHRoZW4gSSByZW1lbWJlcmVkIGl0ICpjYWxscyogYHhmcm1fZGV2X3N0YXRlX2ZyZWVgLCB3aGljaCBpcyBhIGBzdGF0aWMgaW5saW5lYCBmdW5jdGlvbi4gQWhhISBTbywgaWYgYENPTkZJR19YRlJNX09GRkxPQURgIGlzbiYjMzk7dCBzZXQsIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCBlZmZlY3RpdmVseSBiZWNvbWVzIGEgbm8tb3AsIHJpZ2h0PwoKQnV0IHRoYXQgc3RpbGwgYmVncyB0aGUgcXVlc3Rpb24uIElmIG9mZmxvYWQgaXMgZGlzYWJsZWQsIGlzIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgYWN0dWFsbHkgbG9vcGluZyB0aHJvdWdoIGFueXRoaW5nPyBEb2VzIGl0IGV2ZW4gaXRlcmF0ZSBvdmVyIGB4ZnJtX3N0YXRlX2Rldl9nY19saXN0YCB3aGVuIGl0ICpzaG91bGRuJiMzOTt0KiBiZSBkb2luZyBhbnl0aGluZz8gSSYjMzk7ZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBiZWhhdmlvciBvZiBgeGZybV9zdGF0ZV9kZXZfZ2NfbGlzdGAgdW5kZXIgdGhhdCBzY2VuYXJpby4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9zdGF0ZV9kZXZfZ2NfbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3N0YXRlLmM9NTM9c3RhdGljIEhMSVNUX0hFQUQoeGZybV9zdGF0ZV9nY19saXN0KTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo1NDpzdGF0aWMgSExJU1RfSEVBRCh4ZnJtX3N0YXRlX2Rldl9nY19saXN0KTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy01NS1cbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9NzY2PXZvaWQgeGZybV9kZXZfc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy03NzMtXHRcdHNwaW5fbG9ja19iaChcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo3NzQ6XHRcdGhsaXN0X2FkZF9oZWFkKFx1MDAyNngtXHUwMDNlZGV2X2djbGlzdCwgXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbGlzdCk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtNzc1LVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9OTYxPWludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpZClcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTAwNC1yZXN0YXJ0X2djOlxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjEwMDU6XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHgsIHRtcCwgXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbGlzdCwgZGV2X2djbGlzdCkge1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEwMDYtXHRcdHhzbyA9IFx1MDAyNngtXHUwMDNleHNvO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk0OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYHhmcm1fc3RhdGVfZGV2X2djX2xpc3RgIFZ1bG5lcmFiaWxpdHkgYW5kIEZpeCoqCgpPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyBgeGZybV9zdGF0ZV9kZXZfZ2NfbGlzdGAgaXMgYWx3YXlzIGRlZmluZWQsIHdoaWNoIGlzIGdvb2QuIEhvd2V2ZXIsIHRoZSBjcml0aWNhbCBgaGxpc3RfYWRkX2hlYWRgIGNhbGwsIGBobGlzdF9hZGRfaGVhZCgmYW1wO3gtJmd0O2Rldl9nY2xpc3QsICZhbXA7eGZybV9zdGF0ZV9kZXZfZ2NfbGlzdClgLCBvbmx5IGhhcHBlbnMgd2l0aGluIGB4ZnJtX2Rldl9zdGF0ZV9kZWxldGVgLiBBbmQgdGhhdCBmdW5jdGlvbiBpcyBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRGAuCgpTbywgaXQmIzM5O3MgcHJldHR5IGNsZWFyOiBpZiBgQ09ORklHX1hGUk1fT0ZGTE9BRGAgaXNuJiMzOTt0IGVuYWJsZWQsIHRoYXQgbGlzdCBpcyAqYWx3YXlzKiBlbXB0eS4gVGhhdOKAmXMgYSBrZXkgb2JzZXJ2YXRpb24uIFRoaXMgbWVhbnMgYENPTkZJR19YRlJNX09GRkxPQURgIGlzIGFic29sdXRlbHkgbmVjZXNzYXJ5IGZvciB0aGUgYnVnIGFuZCwgY29uc2VxdWVudGx5LCB0aGUgZml4LCB0byBldmVuIGNvbWUgaW50byBwbGF5LiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHByZXJlcXVpc2l0ZS4KClRoZXJlZm9yZSwgd2UgaGF2ZSBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2NlbmFyaW8gdG8gdGFyZ2V0IHRvIHJlcHJvZHVjZSB0aGlzLiBXZSBuZWVkIGF0IGEgbWluaW11bToKLSBgWEZSTWAKLSBgWEZSTV9VU0VSYAotIGBJTkVUX0VTUGAKLSBgSU5FVF9FU1BfT0ZGTE9BRGAKLSBgSU5FVDZfRVNQYAotIGBJTkVUNl9FU1BfT0ZGTE9BRGAKCkJ1dCB0aGVuIGEgdGhvdWdodCBjb21lcyB0byBtaW5kLiBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUNl9FU1BfT0ZGTE9BRGAgKnNlbGVjdCogYFhGUk1fT0ZGTE9BRGAsIHNvIHRoZXkgYXJlIGxpbmtlZCBhbmQgdGhhdCBzZWVtcyByZWFzb25hYmxlLiBCdXQgYXJlIHRoZXJlIG90aGVyLCBsZXNzIG9idmlvdXMsIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYWxzbyBzZWxlY3QgYFhGUk1fT0ZGTE9BRGA/IEl0JiMzOTtzIGVzc2VudGlhbCB0byBjb25maXJtIHRoYXQgbm90aGluZyBlbHNlIGluYWR2ZXJ0ZW50bHkgdHJpZ2dlcnMgdGhlIHNhbWUgYmVoYXZpb3IuIE5lZWQgdG8gdmVyaWZ5IHRoYXQgYFhGUk1fT0ZGTE9BRGAgaXNuJiMzOTt0IGluZGlyZWN0bHkgc2VsZWN0ZWQgYnkgc29tZXRoaW5nIGVsc2UuIFRoYXQgY291bGQgb3BlbiB1cCBhIG11Y2ggd2lkZXIgYXR0YWNrIHN1cmZhY2UgdGhhbiBpbml0aWFsbHkgYW50aWNpcGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBYRlJNX09GRkxPQUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0zNjk9Y29uZmlnIElORVRfRVNQX09GRkxPQURcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM3MS1cdGRlcGVuZHMgb24gSU5FVF9FU1Bcbm5ldC9pcHY0L0tjb25maWc6MzcyOlx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxubmV0L2lwdjQvS2NvbmZpZy0zNzMtXHRkZWZhdWx0IG5cbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTc3PWNvbmZpZyBJTkVUNl9FU1BfT0ZGTE9BRFxuLS1cbm5ldC9pcHY2L0tjb25maWctNzktXHRkZXBlbmRzIG9uIElORVQ2X0VTUFxubmV0L2lwdjYvS2NvbmZpZzo4MDpcdHNlbGVjdCBYRlJNX09GRkxPQURcbm5ldC9pcHY2L0tjb25maWctODEtXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3ODgKCQkJCQkJCW91dHB1dDogMTg5CgkJCQkJCQl0aG91Z2h0czogNjc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBYRlJNIE9mZmxvYWQgUGF0Y2gqKgoKT2theSwgc28gdGhlIHByaW1hcnkgZm9jdXMgaGVyZSBpcyBhIGZpeCByZWxhdGVkIHRvIGEgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSB3aXRoaW4gdGhlIFhGUk0gZGV2aWNlIHN0YXRlIGdhcmJhZ2UgY29sbGVjdGlvbi4gIFRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGFyZSBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGFuZCBgeGZybV9kZXZfc3RhdGVfZnJlZWAuICBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IHRhcmdldHMgWEZSTSBvZmZsb2FkIHN0YXRlIGNsZWFudXAsIHNvIHRoYXQgbWVhbnMgYElORVRfRVNQX09GRkxPQURgIGFuZCBgSU5FVDZfRVNQX09GRkxPQURgIG11c3QgYmUgZW5hYmxlZCB0byB0cmlnZ2VyIHRoZSB2dWxuZXJhYmxlIGNvZGUuIFRob3NlIHNlZW0gdG8gYmUgdGhlIGNyaXRpY2FsIGVuYWJsaW5nIGNvbmRpdGlvbnMuCgpJbml0aWFsbHksIEkgemVyb2VkIGluIG9uIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgYW5kIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCBhcyB0aGUgZm9jdXMgc3ltYm9scyBiZWNhdXNlIHRoZXkgYXJlIGRpcmVjdGx5IG1vZGlmaWVkIGJ5IHRoZSBwYXRjaC4gSSB2ZXJpZmllZCBib3RoLiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIGV4cG9ydGVkLCBtYWtpbmcgaXQgZWFzeSB0byByZWZlcmVuY2UuIFdoaWxlIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCBpc24mIzM5O3QgZXhwbGljaXRseSBleHBvcnRlZCwgdGhlIGZhY3QgdGhhdCBpdCBpcyAqbm9uLXN0YXRpYyogbWVhbnMgaXQgd2lsbCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIG1ha2luZyBpdCBhIHZhbGlkIGZvY3VzIHN5bWJvbCB0b28uIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIGl0cyBkZWZpbml0aW9uIHdpdGhpbiBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYCBhbmQgY29uZmlybWVkIGl0JiMzOTtzIG5vdCBpbmxpbmUuCgpMb29raW5nIGF0IHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9ucywgSSByZWFsaXplZCB0aGF0IEkgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlIG1ldC4gU2luY2Ugd2UgbmVlZCBvZmZsb2FkLCB0aGF0IG1lYW5zIHdlIG5lZWQgYElORVRfRVNQYCBhbmQgYElORVQ2X0VTUGAgd2hpY2ggaW4gdHVybiBuZWVkIGBJTkVUYCwgYElORVQ2YCBhbmQgYFhGUk1gLiBgWEZSTV9VU0VSYCBpcyBpbmNsdWRlZCBiZWNhdXNlIGl0JiMzOTtzIHJlcXVpcmVkIGZvciBjb25maWd1cmluZyBYRlJNIHN0YXRlcyBmcm9tIHVzZXJzcGFjZS4gQWxsIG9mIHRoZXNlIGNvbmZpZ3MgbG9vayBjb3JyZWN0LiAgVGhlIG92ZXJhbGwgcmVhc29uaW5nIGluIHRoZSBjb25maWd1cmF0aW9uIGlzIGFjY3VyYXRlOiBlbmFibGluZyBvZmZsb2FkIHN1cHBvcnQgdmlhIGBJTkVUX0VTUF9PRkZMT0FEYCBhbmQgYElORVQ2X0VTUF9PRkZMT0FEYCBpcyBlc3NlbnRpYWwgdG8gcmVhY2ggdGhlIHRhcmdldGVkIGNvZGUuCgpJJiMzOTt2ZSByZXZpZXdlZCB0aGUgY29kZS4gRXZlcnl0aGluZyBjaGVja3Mgb3V0LiAgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpcyBpbmRlZWQgZXhwb3J0ZWQgYW5kIGRlZmluZWQgaW4gYG5ldC94ZnJtL3hmcm1fc3RhdGUuY2AgYW5kIGlzIG5vdCBpbmxpbmUuCgpJJiMzOTttIGNvbmZpZGVudCBpbiB0aGlzIGFuYWx5c2lzLiBJIHdpbGwgbW92ZSB0byBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUF9PRkZMT0FEJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1BfT0ZGTE9BRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fZGV2X3N0YXRlX2ZsdXNoJiMzNDssCiAgICAmIzM0O3hmcm1fZGV2X3N0YXRlX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBpbiBYRlJNIGRldmljZSBzdGF0ZSBnYXJiYWdlIGNvbGxlY3Rpb24uIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgeGZybV9kZXZfc3RhdGVfZmx1c2ggYW5kIHhmcm1fZGV2X3N0YXRlX2ZyZWUgaGFuZGxlIFhGUk0gb2ZmbG9hZCBzdGF0ZSBjbGVhbnVwLiBUbyByZWFjaCB0aGlzIGNvZGUsIFhGUk0gb2ZmbG9hZCBzdXBwb3J0IG11c3QgYmUgZW5hYmxlZCAoQ09ORklHX1hGUk1fT0ZGTE9BRCksIHdoaWNoIGlzIHNlbGVjdGVkIGJ5IElORVRfRVNQX09GRkxPQUQgYW5kIElORVQ2X0VTUF9PRkZMT0FELiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUF9PRkZMT0FEJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1BfT0ZGTE9BRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fZGV2X3N0YXRlX2ZsdXNoJiMzNDssCiAgICAmIzM0O3hmcm1fZGV2X3N0YXRlX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBpbiBYRlJNIGRldmljZSBzdGF0ZSBnYXJiYWdlIGNvbGxlY3Rpb24uIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgeGZybV9kZXZfc3RhdGVfZmx1c2ggYW5kIHhmcm1fZGV2X3N0YXRlX2ZyZWUgaGFuZGxlIFhGUk0gb2ZmbG9hZCBzdGF0ZSBjbGVhbnVwLiBUbyByZWFjaCB0aGlzIGNvZGUsIFhGUk0gb2ZmbG9hZCBzdXBwb3J0IG11c3QgYmUgZW5hYmxlZCAoQ09ORklHX1hGUk1fT0ZGTE9BRCksIHdoaWNoIGlzIHNlbGVjdGVkIGJ5IElORVRfRVNQX09GRkxPQUQgYW5kIElORVQ2X0VTUF9PRkZMT0FELiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDA4OjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbGlmZXRpbWUgaXNzdWUgKHVzZS1hZnRlci1mcmVlKSBpbiB0aGUgWEZSTSBzdGF0ZSBnYXJiYWdlIGNvbGxlY3Rpb24gbG9naWMuIEl0IGNoYW5nZXMgYGhsaXN0X2RlbGAgdG8gYGhsaXN0X2RlbF9pbml0YCB0byBwcmV2ZW50IGlzc3VlcyB3aXRoIG11bHRpcGxlIGRlbGV0aW9ucyBhbmQgYWRkcyByZWZlcmVuY2UgY291bnRpbmcgKGB4ZnJtX3N0YXRlX2hvbGRfcmN1YCBhbmQgYHhmcm1fc3RhdGVfcHV0YCkgYXJvdW5kIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCB0byBlbnN1cmUgdGhlIG9iamVjdCBpcyBub3QgZnJlZWQgd2hpbGUgYmVpbmcgYWNjZXNzZWQuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgdnVsbmVyYWJpbGl0aWVzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcyBiZWluZyByZWFkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MjAzNTA4MzFhM2VjMWZiMDRjMGY0MTdiYTZlYzljYmM2NWIwZWY3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgOSAwODoxOTowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwppbmRleCAzNmE0ZjY3OTNlZGVmLi4wMTEzOGQzZDEwNjczIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3N0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jCkBAIC03ODUsNyAmIzQzOzc4NSw3IEBAIHZvaWQgeGZybV9kZXZfc3RhdGVfZnJlZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCkKIAlpZiAoZGV2ICZhbXA7JmFtcDsgZGV2LSZndDt4ZnJtZGV2X29wcykgewogCQlzcGluX2xvY2tfYmgoJmFtcDt4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTsKIAkJaWYgKCFobGlzdF91bmhhc2hlZCgmYW1wO3gtJmd0O2Rldl9nY2xpc3QpKQotCQkJaGxpc3RfZGVsKCZhbXA7eC0mZ3Q7ZGV2X2djbGlzdCk7CiYjNDM7CQkJaGxpc3RfZGVsX2luaXQoJmFtcDt4LSZndDtkZXZfZ2NsaXN0KTsKIAkJc3Bpbl91bmxvY2tfYmgoJmFtcDt4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTsKIAogCQlpZiAoZGV2LSZndDt4ZnJtZGV2X29wcy0mZ3Q7eGRvX2Rldl9zdGF0ZV9mcmVlKQpAQCAtMTAwNiw4ICYjNDM7MTAwNiwxMyBAQCBpbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaQogCQl4c28gPSAmYW1wO3gtJmd0O3hzbzsKIAogCQlpZiAoeHNvLSZndDtkZXYgPT0gZGV2KSB7CiYjNDM7CQkJLyogVGhlIGRldmljZSBHQyBsaXN0IGRvZXMgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8geC4gKi8KJiM0MzsJCQlpZiAoIXhmcm1fc3RhdGVfaG9sZF9yY3UoeCkpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwogCQkJc3Bpbl91bmxvY2tfYmgoJmFtcDt4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTsKIAkJCXhmcm1fZGV2X3N0YXRlX2ZyZWUoeCk7CiYjNDM7CQkJeGZybV9zdGF0ZV9wdXQoeCk7CiAJCQlzcGluX2xvY2tfYmgoJmFtcDt4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTsKIAkJCWdvdG8gcmVzdGFydF9nYzsKIAkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMDg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyNAoJCQkJCQkJb3V0cHV0OiAxNzcKCQkJCQkJCXRob3VnaHRzOiA2NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBBIExpZmV0aW1lIEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIGlzIGFkZHJlc3NpbmcgYSBsaWZldGltZSBpc3N1ZSwgc3BlY2lmaWNhbGx5IGEgdXNlLWFmdGVyLWZyZWUgb3IgcG90ZW50aWFsIGRvdWJsZS1mcmVlIHNjZW5hcmlvLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGxpZXMgaW4gaG93IGB4ZnJtX3N0YXRlYCBvYmplY3RzIGFyZSBoYW5kbGVkIGluIHRoZSBkZXZpY2UgZ2FyYmFnZSBjb2xsZWN0aW9uLgoKTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIGNvbmZpcm1lZCBieSB0aGUgY29kZSBjaGFuZ2VzLiBJbiBgeGZybV9kZXZfc3RhdGVfZnJlZWAsIHRoZXkmIzM5O3ZlIHJlcGxhY2VkIGEgc2ltcGxlIGBobGlzdF9kZWxgIHdpdGggYGhsaXN0X2RlbF9pbml0YCBmb3IgdGhlIGBkZXZfZ2NsaXN0YC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBpc3N1ZSB3aGVyZSB0aGUgbGlzdCBjb3VsZCBiZSBtYW5pcHVsYXRlZCBhZnRlciBkZWxldGlvbiwgb3IgZG91YmxlIGRlbGV0aW9uIGNvdWxkIG9jY3VyLiBUaGUgYWRkaXRpb24gb2YgYHhmcm1fc3RhdGVfaG9sZF9yY3UoeClgIGFuZCBgeGZybV9zdGF0ZV9wdXQoeClgIHdpdGhpbiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIHRoZSBrZXkuIFRoZSBjb21tZW50IGNvbmZpcm1zIHRoZSBsaXN0IGRvZXNuJiMzOTt0IGhhdmUgYSByZWZlcmVuY2UsIG1lYW5pbmcgdGhlIHJlZmVyZW5jZSBjb3VudCBpcyBiZWluZyBhZGRlZCAqYmVmb3JlKiBjYWxsaW5nIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCwgd2hpY2ggY291bGQgc2xlZXAgb3IgcGVyZm9ybSBvdGhlciBvcGVyYXRpb25zLiBTdWJzZXF1ZW50bHksIHRoZSByZWZlcmVuY2UgaXMgcmVtb3ZlZC4KClRoaXMgbG9va3MgbGlrZSBhIGNsYXNzaWMgcmVmLWNvdW50aW5nIHNjaGVtZSwgd2hpY2ggdGVsbHMgbWUgdGhpcyBwYXRjaCBpcyBhZGRpbmcgYSByZWZlcmVuY2UgY291bnQgdG8gYHhgIGJlZm9yZSB0aGUgYHhmcm1fZGV2X3N0YXRlX2ZyZWUoeClgIGNhbGwgaXMgbWFkZS4gVGhpcyBwcmV2ZW50cyBhIHJhY2Ugb3IgYSBVQUYgYnkgZW5zdXJpbmcgdGhlIG9iamVjdCYjMzk7cyBsaWZldGltZSBpcyBtYW5hZ2VkIGNvcnJlY3RseSB3aGlsZSBpdCYjMzk7cyBiZWluZyBhY2Nlc3NlZCBvciBmbHVzaGVkLgoKQmFzZWQgb24gdGhpcywgS0FTQU4gc2VlbXMgdG8gYmUgdGhlIHJpZ2h0IHRvb2wgZm9yIGlkZW50aWZ5aW5nIFVBRiBpc3N1ZXMsIHNvIEkgZG9uJiMzOTt0IHNlZSBhbnkgcmVhc29uIGZvciBLTVNBTiBoZXJlLiBUaGVyZSYjMzk7cyBubyBpbmRpY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhbmQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHJlbWFpbmluZyBVQUYgYnVncy4gVGhlcmVmb3JlLCBJJiMzOTttIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAwODo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxpZmV0aW1lIGlzc3VlICh1c2UtYWZ0ZXItZnJlZSkgaW4gdGhlIFhGUk0gc3RhdGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGxvZ2ljLiBJdCBjaGFuZ2VzIGBobGlzdF9kZWxgIHRvIGBobGlzdF9kZWxfaW5pdGAgdG8gcHJldmVudCBpc3N1ZXMgd2l0aCBtdWx0aXBsZSBkZWxldGlvbnMgYW5kIGFkZHMgcmVmZXJlbmNlIGNvdW50aW5nIChgeGZybV9zdGF0ZV9ob2xkX3JjdWAgYW5kIGB4ZnJtX3N0YXRlX3B1dGApIGFyb3VuZCBgeGZybV9kZXZfc3RhdGVfZnJlZWAgdG8gZW5zdXJlIHRoZSBvYmplY3QgaXMgbm90IGZyZWVkIHdoaWxlIGJlaW5nIGFjY2Vzc2VkLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgdXNlLWFmdGVyLWZyZWUgYW5kIGRvdWJsZS1mcmVlIHZ1bG5lcmFiaWxpdGllcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMgYmVpbmcgcmVhZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbGlmZXRpbWUgaXNzdWUgKHVzZS1hZnRlci1mcmVlKSBpbiB0aGUgWEZSTSBzdGF0ZSBnYXJiYWdlIGNvbGxlY3Rpb24gbG9naWMuIEl0IGNoYW5nZXMgYGhsaXN0X2RlbGAgdG8gYGhsaXN0X2RlbF9pbml0YCB0byBwcmV2ZW50IGlzc3VlcyB3aXRoIG11bHRpcGxlIGRlbGV0aW9ucyBhbmQgYWRkcyByZWZlcmVuY2UgY291bnRpbmcgKGB4ZnJtX3N0YXRlX2hvbGRfcmN1YCBhbmQgYHhmcm1fc3RhdGVfcHV0YCkgYXJvdW5kIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCB0byBlbnN1cmUgdGhlIG9iamVjdCBpcyBub3QgZnJlZWQgd2hpbGUgYmVpbmcgYWNjZXNzZWQuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgdnVsbmVyYWJpbGl0aWVzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcyBiZWluZyByZWFkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoxOTowNi40MDEyNjY2NzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDI5MzM4MzQ1MTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1cIixcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiSU5FVF9FU1BcIixcbiAgICBcIklORVRfRVNQX09GRkxPQURcIixcbiAgICBcIklORVQ2X0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQX09GRkxPQURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX2Rldl9zdGF0ZV9mbHVzaFwiLFxuICAgIFwieGZybV9kZXZfc3RhdGVfZnJlZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsaWZldGltZSBpc3N1ZSAodXNlLWFmdGVyLWZyZWUpIGluIHRoZSBYRlJNIHN0YXRlIGdhcmJhZ2UgY29sbGVjdGlvbiBsb2dpYy4gSXQgY2hhbmdlcyBgaGxpc3RfZGVsYCB0byBgaGxpc3RfZGVsX2luaXRgIHRvIHByZXZlbnQgaXNzdWVzIHdpdGggbXVsdGlwbGUgZGVsZXRpb25zIGFuZCBhZGRzIHJlZmVyZW5jZSBjb3VudGluZyAoYHhmcm1fc3RhdGVfaG9sZF9yY3VgIGFuZCBgeGZybV9zdGF0ZV9wdXRgKSBhcm91bmQgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgIHRvIGVuc3VyZSB0aGUgb2JqZWN0IGlzIG5vdCBmcmVlZCB3aGlsZSBiZWluZyBhY2Nlc3NlZC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHVzZS1hZnRlci1mcmVlIGFuZCBkb3VibGUtZnJlZSB2dWxuZXJhYmlsaXRpZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzIGJlaW5nIHJlYWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBpbiBYRlJNIGRldmljZSBzdGF0ZSBnYXJiYWdlIGNvbGxlY3Rpb24uIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgeGZybV9kZXZfc3RhdGVfZmx1c2ggYW5kIHhmcm1fZGV2X3N0YXRlX2ZyZWUgaGFuZGxlIFhGUk0gb2ZmbG9hZCBzdGF0ZSBjbGVhbnVwLiBUbyByZWFjaCB0aGlzIGNvZGUsIFhGUk0gb2ZmbG9hZCBzdXBwb3J0IG11c3QgYmUgZW5hYmxlZCAoQ09ORklHX1hGUk1fT0ZGTE9BRCksIHdoaWNoIGlzIHNlbGVjdGVkIGJ5IElORVRfRVNQX09GRkxPQUQgYW5kIElORVQ2X0VTUF9PRkZMT0FELlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoxOTowNi40MDEyNzE0NDJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODY5MTA3NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3MjAzNTA4MzFhM2VjMWZiMDRjMGY0MTdiYTZlYzljYmM2NWIwZWY3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDkgMDg6MTk6MDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jXFxuaW5kZXggMzZhNGY2NzkzZWRlZi4uMDExMzhkM2QxMDY3MyAxMDA2NDRcXG4tLS0gYS9uZXQveGZybS94ZnJtX3N0YXRlLmNcXG4rKysgYi9uZXQveGZybS94ZnJtX3N0YXRlLmNcXG5AQCAtNzg1LDcgKzc4NSw3IEBAIHZvaWQgeGZybV9kZXZfc3RhdGVfZnJlZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4gXFx0aWYgKGRldiBcXHUwMDI2XFx1MDAyNiBkZXYtXFx1MDAzZXhmcm1kZXZfb3BzKSB7XFxuIFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XFxuIFxcdFxcdGlmICghaGxpc3RfdW5oYXNoZWQoXFx1MDAyNngtXFx1MDAzZWRldl9nY2xpc3QpKVxcbi1cXHRcXHRcXHRobGlzdF9kZWwoXFx1MDAyNngtXFx1MDAzZWRldl9nY2xpc3QpO1xcbitcXHRcXHRcXHRobGlzdF9kZWxfaW5pdChcXHUwMDI2eC1cXHUwMDNlZGV2X2djbGlzdCk7XFxuIFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcXG4gXFxuIFxcdFxcdGlmIChkZXYtXFx1MDAzZXhmcm1kZXZfb3BzLVxcdTAwM2V4ZG9fZGV2X3N0YXRlX2ZyZWUpXFxuQEAgLTEwMDYsOCArMTAwNiwxMyBAQCBpbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaVxcbiBcXHRcXHR4c28gPSBcXHUwMDI2eC1cXHUwMDNleHNvO1xcbiBcXG4gXFx0XFx0aWYgKHhzby1cXHUwMDNlZGV2ID09IGRldikge1xcbitcXHRcXHRcXHQvKiBUaGUgZGV2aWNlIEdDIGxpc3QgZG9lcyBub3QgaG9sZCBhIHJlZmVyZW5jZSB0byB4LiAqL1xcbitcXHRcXHRcXHRpZiAoIXhmcm1fc3RhdGVfaG9sZF9yY3UoeCkpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xcbiBcXHRcXHRcXHR4ZnJtX2Rldl9zdGF0ZV9mcmVlKHgpO1xcbitcXHRcXHRcXHR4ZnJtX3N0YXRlX3B1dCh4KTtcXG4gXFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcXG4gXFx0XFx0XFx0Z290byByZXN0YXJ0X2djO1xcbiBcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjE5OjA3Ljc4OTA2MzI5OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIyMjQ1NDU2NDE4ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTVwiLFxuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVF9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJTkVUNl9FU1BfT0ZGTE9BRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fZGV2X3N0YXRlX2ZsdXNoXCIsXG4gICAgXCJ4ZnJtX2Rldl9zdGF0ZV9mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBpbiBYRlJNIGRldmljZSBzdGF0ZSBnYXJiYWdlIGNvbGxlY3Rpb24uIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgeGZybV9kZXZfc3RhdGVfZmx1c2ggYW5kIHhmcm1fZGV2X3N0YXRlX2ZyZWUgaGFuZGxlIFhGUk0gb2ZmbG9hZCBzdGF0ZSBjbGVhbnVwLiBUbyByZWFjaCB0aGlzIGNvZGUsIFhGUk0gb2ZmbG9hZCBzdXBwb3J0IG11c3QgYmUgZW5hYmxlZCAoQ09ORklHX1hGUk1fT0ZGTE9BRCksIHdoaWNoIGlzIHNlbGVjdGVkIGJ5IElORVRfRVNQX09GRkxPQUQgYW5kIElORVQ2X0VTUF9PRkZMT0FELlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MjAzNTA4MzFhM2VjMWZiMDRjMGY0MTdiYTZlYzljYmM2NWIwZWY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgOSAwODoxOTowNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xuaW5kZXggMzZhNGY2NzkzZWRlZi4uMDExMzhkM2QxMDY3MyAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xuKysrIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jXG5AQCAtNzg1LDcgKzc4NSw3IEBAIHZvaWQgeGZybV9kZXZfc3RhdGVfZnJlZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbiBcdGlmIChkZXYgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2V4ZnJtZGV2X29wcykge1xuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XG4gXHRcdGlmICghaGxpc3RfdW5oYXNoZWQoXHUwMDI2eC1cdTAwM2VkZXZfZ2NsaXN0KSlcbi1cdFx0XHRobGlzdF9kZWwoXHUwMDI2eC1cdTAwM2VkZXZfZ2NsaXN0KTtcbitcdFx0XHRobGlzdF9kZWxfaW5pdChcdTAwMjZ4LVx1MDAzZWRldl9nY2xpc3QpO1xuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcbiBcbiBcdFx0aWYgKGRldi1cdTAwM2V4ZnJtZGV2X29wcy1cdTAwM2V4ZG9fZGV2X3N0YXRlX2ZyZWUpXG5AQCAtMTAwNiw4ICsxMDA2LDEzIEBAIGludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpXG4gXHRcdHhzbyA9IFx1MDAyNngtXHUwMDNleHNvO1xuIFxuIFx0XHRpZiAoeHNvLVx1MDAzZWRldiA9PSBkZXYpIHtcbitcdFx0XHQvKiBUaGUgZGV2aWNlIEdDIGxpc3QgZG9lcyBub3QgaG9sZCBhIHJlZmVyZW5jZSB0byB4LiAqL1xuK1x0XHRcdGlmICgheGZybV9zdGF0ZV9ob2xkX3JjdSh4KSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuIFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuIFx0XHRcdHhmcm1fZGV2X3N0YXRlX2ZyZWUoeCk7XG4rXHRcdFx0eGZybV9zdGF0ZV9wdXQoeCk7XG4gXHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuIFx0XHRcdGdvdG8gcmVzdGFydF9nYztcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6MTk6MDcuNzg5MDY0NDE5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjEwMDkwODYzNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWEZSTSBTdGF0ZSBHYXJiYWdlIENvbGxlY3Rpb24gRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYG5ldC94ZnJtL3hmcm1fc3RhdGUuY2AuIEl0IHNlZW1zIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBYRlJNIHN0YXRlIGdhcmJhZ2UgY29sbGVjdGlvbiBtZWNoYW5pc20gZm9yIGRldmljZXMuIFRoZSBwYXRjaCBhbHRlcnMgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgIGFuZCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgLlxuXG5UaGUga2V5IGNoYW5nZSBpbiBgeGZybV9kZXZfc3RhdGVfZnJlZWAgaXMgdGhlIHJlcGxhY2VtZW50IG9mIGBobGlzdF9kZWxgIHdpdGggYGhsaXN0X2RlbF9pbml0YCB3aGVuIHJlbW92aW5nIGFuIGVudHJ5IGZyb20gdGhlIGBkZXZfZ2NsaXN0YC4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBwcmFjdGljZSB0byBoZWxwIGF2b2lkIGRhbmdsaW5nIHBvaW50ZXJzLCBnb29kIGNhdGNoLlxuXG5Ob3csIGluIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAsIHRoZXkndmUgYWRkZWQgdGhpcyBjb25kaXRpb25hbCBibG9jayAqYmVmb3JlKiBjYWxsaW5nIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYDpcblxuYGBgY1xuXHRcdFx0LyogVGhlIGRldmljZSBHQyBsaXN0IGRvZXMgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8geC4gKi9cblx0XHRcdGlmICgheGZybV9zdGF0ZV9ob2xkX3JjdSh4KSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuXHRcdFx0eGZybV9kZXZfc3RhdGVfZnJlZSh4KTtcblx0XHRcdHhmcm1fc3RhdGVfcHV0KHgpO1xuXHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuXHRcdFx0Z290byByZXN0YXJ0X2djO1xuYGBgXG5cbkl0IGxvb2tzIGxpa2UgdGhlIGB4ZnJtX3N0YXRlX2hvbGRfcmN1YCBhbmQgY29ycmVzcG9uZGluZyBgeGZybV9zdGF0ZV9wdXRgIGlzIHRoZXJlIHRvIGVuc3VyZSB0aGF0IGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCBkb2Vzbid0IHJlbGVhc2UgbWVtb3J5IHdoaWxlIHNvbWV0aGluZyBlbHNlIG1pZ2h0IHN0aWxsIGJlIHVzaW5nIGl0LiBUaGlzIGlzIGEgY29tbW9uIGFwcHJvYWNoIHVzaW5nIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSkgdG8gYXZvaWQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBkdXJpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIHdoZXJlIGEgc3RhdGUgZW50cnkgbWlnaHQgYmUgZnJlZWQgYmVmb3JlIGl0J3MgY29tcGxldGVseSB1bnVzZWQuIFRoZSBjb21tZW50IGluZGljYXRlcyB0aGUgYGRldl9nY2xpc3RgIGRvZXNuJ3QgaG9sZCBhIHJlZmVyZW5jZSwgc28gdGhpcyBjb25maXJtcyB0aGUgbmVlZCBmb3IgYW4gZXhwbGljaXQgaG9sZC4gVGhlIGByZXN0YXJ0X2djYCBnb3RvIGxpa2VseSBoYW5kbGVzIHRoZSBmYWN0IHRoYXQgdGhlIEdDIGxpc3QgbWlnaHQgaGF2ZSBjaGFuZ2VkIGR1cmluZyB0aGUgZnJlZWluZyBwcm9jZXNzLCBhbmQgd2UgbmVlZCB0byByZS1ldmFsdWF0ZSBhZnRlciBmcmVlaW5nIHRoZSBlbnRyeS5cblxuSSBzaG91bGQgcHJvYmFibHkgY29uZmlybSB3aGljaCBjb25maWcgb3B0aW9ucyBhcmUgcmVsYXRlZCB0byBYRlJNIHRvIGZ1cnRoZXIgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMuIEl0J3MgaW1wb3J0YW50IHRvIGtub3cgdGhlIGNvbnRleHQgb2YgdGhpcyBwYXRjaCwgbGlrZSB3aGljaCBrZXJuZWwgdmVyc2lvbnMgaXQgYXBwbGllcyB0by4gV2UgbmVlZCB0byBiZSBzdXJlIHRoaXMgZml4ZXMgdGhlIGlzc3VlIGluIGFsbCByZWxldmFudCBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjE5OjI4Ljc5ODE1Mjk3MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTU2ODI4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2Rldl9zdGF0ZV9mbHVzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9kZXZpY2UuYz01NDY9c3RhdGljIGludCB4ZnJtX2Rldl9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU0OC1cXHRpZiAoZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfSFdfRVNQKSB7XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1NDk6XFx0XFx0eGZybV9kZXZfc3RhdGVfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTUwLVxcdFxcdHhmcm1fZGV2X3BvbGljeV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jPTU1Nj1zdGF0aWMgaW50IHhmcm1fZGV2X3VucmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU1Ny17XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1NTg6XFx0eGZybV9kZXZfc3RhdGVfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTU5LVxcdHhmcm1fZGV2X3BvbGljeV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9ODg1PXN0YXRpYyBpbmxpbmUgaW50XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjg4Njp4ZnJtX2Rldl9zdGF0ZV9mbHVzaF9zZWNjdHhfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaWQpXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTg4Ny17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9OTE0PXN0YXRpYyBpbmxpbmUgaW50XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjkxNTp4ZnJtX2Rldl9zdGF0ZV9mbHVzaF9zZWNjdHhfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaWQpXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTkxNi17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9OTU5PUVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9mbHVzaCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTk2MC1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6OTYxOmludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpZClcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtOTYyLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy05NjgtXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6OTY5OlxcdGVyciA9IHhmcm1fZGV2X3N0YXRlX2ZsdXNoX3NlY2N0eF9jaGVjayhuZXQsIGRldiwgdGFza192YWxpZCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTk3MC1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEwMjYtfVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxMDI3OkVYUE9SVF9TWU1CT0woeGZybV9kZXZfc3RhdGVfZmx1c2gpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMDI4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoxOToyOC44NTc3MjU1MDhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjUxMjA5NTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBYRlJNIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBpbnRvIFhGUk0gY29uZmlndXJhdGlvbi4gUmlnaHQsIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBmb3IgdGhlIGNvcmUgWEZSTSBmdW5jdGlvbmFsaXR5IGlzIGBDT05GSUdfWEZSTWAuIEkndmUgZ290IHRvIGNvbmZpcm0gd2hlcmUgdGhpcyBpcyBkZWZpbmVkIGFuZCBob3cgaXQncyBoYW5kbGVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGltZSB0byBjcmFjayBvcGVuIHRoZSByZWxldmFudCBLY29uZmlnIGFuZCBNYWtlZmlsZSBmaWxlcy4gVGhlIGxvZ2ljYWwgcGxhY2VzIHRvIHN0YXJ0IGFyZSBgbmV0L3hmcm0vS2NvbmZpZ2AgYW5kIGBuZXQveGZybS9NYWtlZmlsZWAuIFRob3NlIGZpbGVzIHNob3VsZCBnaXZlIG1lIHRoZSBkZXRhaWxzIG9uIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCB0aGUgYnVpbGQgbG9naWMgcmVsYXRlZCB0byB0aGlzIGZlYXR1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIG9wdGlvbiBpbmZsdWVuY2VzIHRoZSBjb21waWxhdGlvbiBhbmQgbGlua2luZyBvZiB0aGUgWEZSTSBtb2R1bGVzIGFuZCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoaW4gdGhlIHdpZGVyIG5ldHdvcmtpbmcgc3RhY2suIEdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NzcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoxOTozOC41MDg5MzczODRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzMjY4NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9zdGF0ZS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlPTEyPWVuZGlmXFxubmV0L3hmcm0vTWFrZWZpbGUtMTMtXFxubmV0L3hmcm0vTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX1hGUk0pIDo9IHhmcm1fcG9saWN5Lm8geGZybV9zdGF0ZS5vIHhmcm1faGFzaC5vIFxcXFxcXG5uZXQveGZybS9NYWtlZmlsZS0xNS1cXHRcXHQgICAgICB4ZnJtX2lucHV0Lm8geGZybV9vdXRwdXQubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjE5OjM4LjU1ODI2OTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzgzNzQzOTU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqWEZSTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBkaXNjdXNzaW9uIGhhcyBob25lZCBpbiBvbiBgQ09ORklHX1hGUk1gIGJlaW5nIGEgZnVuZGFtZW50YWwgcmVxdWlyZW1lbnQg4oCTIG5vIHN1cnByaXNlIHRoZXJlLiBCdXQgdGhlbiwgdGhlIG1lbnRpb24gb2YgYENPTkZJR19YRlJNX09GRkxPQURgIGFuZCBpdHMgcG90ZW50aWFsIGxpbmsgdG8gYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYC4uLiB0aGF0J3MgZ290IG1lIHRoaW5raW5nLiBJdCdzIGEga2V5IHF1ZXN0aW9uOiBpcyBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkgc3RyaWN0bHkgbmVjZXNzYXJ5IGZvciB0aGF0IGZsdXNoIG9wZXJhdGlvbiB0byBiZSB0cmlnZ2VyZWQ/IEkgbmVlZCB0byBjbGFyaWZ5IHRoZSBkZXBlbmRlbmN5LCBhbmQgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBuZXQveGZybS94ZnJtX2RldmljZS5jYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGFuZCwgY3JpdGljYWxseSwgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRpZWQgdG8gYENPTkZJR19YRlJNX09GRkxPQURgLiBMZXQncyBjb25maXJtIG9yIHJlamVjdCB0aGUgc3VzcGVjdGVkIGRlcGVuZGVuY3ksIHNoYWxsIHdlP1xuXG5cbiIsIklucHV0VG9rZW5zIjo0MjMwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6MjA6MDIuMzk1NzExNTQyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTk5MTA5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9kZXZpY2Uub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9NYWtlZmlsZT0xND1vYmotJChDT05GSUdfWEZSTSkgOj0geGZybV9wb2xpY3kubyB4ZnJtX3N0YXRlLm8geGZybV9oYXNoLm8gXFxcXFxcbm5ldC94ZnJtL01ha2VmaWxlLTE1LVxcdFxcdCAgICAgIHhmcm1faW5wdXQubyB4ZnJtX291dHB1dC5vIFxcXFxcXG5uZXQveGZybS9NYWtlZmlsZToxNjpcXHRcXHQgICAgICB4ZnJtX3N5c2N0bC5vIHhmcm1fcmVwbGF5Lm8geGZybV9kZXZpY2UubyBcXFxcXFxubmV0L3hmcm0vTWFrZWZpbGUtMTctXFx0XFx0ICAgICAgeGZybV9uYXRfa2VlcGFsaXZlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6MjA6MDMuNzU1NjMwNTUyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjIwMzkyMjg0NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gdGhlIFhGUk0gRGV2aWNlIENvZGUqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgeGZybV9kZXZpY2UuY2AgZ2V0cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgd2hlbiBgQ09ORklHX1hGUk1gIGlzIGVuYWJsZWQuIFRoYXQncyB0aGUgZXhwZWN0ZWQgc2V0dXAuIE5vdywgbGV0J3MgdHJhY2Ugc29tZXRoaW5nIHNwZWNpZmljLiBJIHNlZSBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGNhbGxlZCB3aXRoaW4gYHhmcm1fZGV2X2Rvd25gIGFuZCBgeGZybV9kZXZfdW5yZWdpc3RlcmAuIFRoYXQgbWFrZXMgc2Vuc2U7IHdlJ3JlIGxpa2VseSBjbGVhbmluZyB1cCBzdGF0ZSB3aGVuIGEgZGV2aWNlIGlzIGdvaW5nIG9mZmxpbmUgb3IgYmVpbmcgcmVtb3ZlZC4gQnV0IEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqZnVsbCogcGljdHVyZS4gV2hlcmUgZWxzZSBpcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSB3aWRlciBYRlJNIGZyYW1ld29yay4gTGV0IG1lIGNoZWNrIHRoZSBjYWxsIHNpdGVzIG9mIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgdG8gZ2V0IGEgYnJvYWRlciB2aWV3IG9mIGhvdyBpdCBvcGVyYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY1NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjIwOjI1Ljc5NDg2MTYzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTk0ODA4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2Rldl9zdGF0ZV9mbHVzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9kZXZpY2UuYz01NDY9c3RhdGljIGludCB4ZnJtX2Rldl9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU0OC1cXHRpZiAoZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfSFdfRVNQKSB7XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1NDk6XFx0XFx0eGZybV9kZXZfc3RhdGVfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTUwLVxcdFxcdHhmcm1fZGV2X3BvbGljeV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jPTU1Nj1zdGF0aWMgaW50IHhmcm1fZGV2X3VucmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU1Ny17XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1NTg6XFx0eGZybV9kZXZfc3RhdGVfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTU5LVxcdHhmcm1fZGV2X3BvbGljeV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9ODg1PXN0YXRpYyBpbmxpbmUgaW50XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjg4Njp4ZnJtX2Rldl9zdGF0ZV9mbHVzaF9zZWNjdHhfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaWQpXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTg4Ny17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9OTE0PXN0YXRpYyBpbmxpbmUgaW50XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjkxNTp4ZnJtX2Rldl9zdGF0ZV9mbHVzaF9zZWNjdHhfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaWQpXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTkxNi17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9OTU5PUVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9mbHVzaCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTk2MC1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6OTYxOmludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpZClcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtOTYyLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy05NjgtXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6OTY5OlxcdGVyciA9IHhmcm1fZGV2X3N0YXRlX2ZsdXNoX3NlY2N0eF9jaGVjayhuZXQsIGRldiwgdGFza192YWxpZCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTk3MC1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEwMjYtfVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxMDI3OkVYUE9SVF9TWU1CT0woeGZybV9kZXZfc3RhdGVfZmx1c2gpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMDI4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoyMDoyNS44NTA4MTQ2MTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjM4ODIzNDE1MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBYRlJNIERldmljZSBMaWZlY3ljbGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBYRlJNIGRldmljZXMgYXJlIG1hbmFnZWQsIGFuZCB0aGlzIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgZnVuY3Rpb24gaGFzIGNhdWdodCBteSBleWUuIEknbSBub3RpbmcgdGhhdCBpdCdzIGNhbGxlZCBmcm9tIGJvdGggYHhmcm1fZGV2X2Rvd25gIGFuZCBgeGZybV9kZXZfdW5yZWdpc3RlcmAuIFRoYXQncyBpbnRlcmVzdGluZywgYmVjYXVzZSBib3RoIG9mIHRob3NlIGZ1bmN0aW9ucyByZXNpZGUgaW4gYG5ldC94ZnJtL3hmcm1fZGV2aWNlLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zIHRyaWdnZXJlZCBmcm9tP1wiIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGtub3cgaWYgYHhmcm1fZGV2X2Rvd25gIHVzZXMgYSBub3RpZmllci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLCBiZWNhdXNlIHRoYXQncyBrZXkgdG8gaG93IHRoZSBkZXZpY2UncyBzdGF0ZSBpcyBiZWluZyBmbHVzaGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Njc2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6MjA6NDkuNzMzMTU5NTQyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDk4MTg5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2Rldl9kb3duXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2RldmljZS5jPTUyNj1zdGF0aWMgaW50IHhmcm1fYXBpX2NoZWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU0NS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjU0NjpzdGF0aWMgaW50IHhmcm1fZGV2X2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU0Ny17XFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jPTU2ND1zdGF0aWMgaW50IHhmcm1fZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NzUtXFx0Y2FzZSBORVRERVZfRE9XTjpcXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjU3NjpcXHRcXHRyZXR1cm4geGZybV9kZXZfZG93bihkZXYpO1xcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTc3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoyMDo0OS43ODgxNDYyNThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc0MTc5MzAxMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlhGUk0gU3Vic3lzdGVtIEV2ZW50IEhhbmRsaW5nKipcblxuUmlnaHQsIHNvIGB4ZnJtX2Rldl9ldmVudGAgaXMgYSBub3RpZmllci4gVGhhdCdzIHRoZSBrZXkuIFRoYXQgdGVsbHMgbWUgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggYXN5bmNocm9ub3VzIGV2ZW50IGhhbmRsaW5nIHJlbGF0ZWQgdG8gdGhlIFhGUk0gc3Vic3lzdGVtLiBHaXZlbiB0aGF0IGl0J3MgYSBub3RpZmllciwgSSBpbW1lZGlhdGVseSB0aGluayBhYm91dCB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVsZXZhbnQgdG8gaXQuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCB3ZSdyZSBnb2luZyB0byBuZWVkIGBDT05GSUdfWEZSTWAgZW5hYmxlZCwgdGhhdCdzIGFsbW9zdCBndWFyYW50ZWVkLiBOb3csIHRoZSBvZmZsb2FkIGNvbXBvbmVudDsgdGhhdCBtaWdodCBuZWVkIHNvbWUgc3BlY2lmaWMgc2V0dGluZ3MsIHNvIGBDT05GSUdfWEZSTV9PRkZMT0FEYCBpcyB0aGUgbmV4dCBvYnZpb3VzIHRoaW5nIHRvIGNoZWNrLiBUbyBjb25maXJtIHRoYXQgZGVwZW5kZW5jeSwgSSdsbCBxdWlja2x5IGxvb2sgaW50byB0aGUgYG5ldC94ZnJtL0tjb25maWdgIGZpbGUgYW5kIGNvbmZpcm0gdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFhGUk0gb2ZmbG9hZC4gVGhhdCdsbCBsb2NrIGluIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHByZS1yZXF1aXNpdGUgYnVpbGQgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTcxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6MjE6MDcuMjA2MDc5MzE1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE5Mjc1ODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlhGUk1fT0ZGTE9BRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vS2NvbmZpZz01PWNvbmZpZyBYRlJNXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTEwLVxcbm5ldC94ZnJtL0tjb25maWc6MTE6Y29uZmlnIFhGUk1fT0ZGTE9BRFxcbm5ldC94ZnJtL0tjb25maWctMTItXFx0Ym9vbFxcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0yMS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjIyOiNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0yMy1zdGF0aWMgdm9pZCBfX3hmcm1fdHJhbnNwb3J0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jPTIzOT1pbnQgeGZybV9kZXZfc3RhdGVfYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHhmcm1fc3RhdGUgKngsXFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTI1MS1cXHRpZiAoeHVvLVxcdTAwM2VmbGFncyBcXHUwMDI2XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzoyNTI6XFx0ICAgIH4oWEZSTV9PRkZMT0FEX0lQVjYgfCBYRlJNX09GRkxPQURfSU5CT1VORCB8IFhGUk1fT0ZGTE9BRF9QQUNLRVQpKSB7XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0yNTMtXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiVW5yZWNvZ25pemVkIGZsYWdzIGluIG9mZmxvYWQgcmVxdWVzdFxcXCIpO1xcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0yNTYtXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzoyNTc6XFx0aWYgKCh4dW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9PRkZMT0FEX0lOQk9VTkQgXFx1MDAyNlxcdTAwMjYgeC1cXHUwMDNlZGlyID09IFhGUk1fU0FfRElSX09VVCkgfHxcXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjI1ODpcXHQgICAgKCEoeHVvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fT0ZGTE9BRF9JTkJPVU5EKSBcXHUwMDI2XFx1MDAyNiB4LVxcdTAwM2VkaXIgPT0gWEZSTV9TQV9ESVJfSU4pKSB7XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0yNTktXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiTWlzbWF0Y2hlZCBTQSBhbmQgb2ZmbG9hZCBkaXJlY3Rpb25cXFwiKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMjYyLVxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6MjYzOlxcdGlmICh4dW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9PRkZMT0FEX0lOQk9VTkQgXFx1MDAyNlxcdTAwMjYgeC1cXHUwMDNlaWZfaWQpIHtcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTI2NC1cXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJYRlJNIGlmX2lkIGlzIG5vdCBzdXBwb3J0ZWQgaW4gUlggcGF0aFxcXCIpO1xcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0yNjctXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzoyNjg6XFx0aXNfcGFja2V0X29mZmxvYWQgPSB4dW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9PRkZMT0FEX1BBQ0tFVDtcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTI2OS1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMjc5LVxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6MjgwOlxcdFxcdGlmICghKHh1by1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBYRlJNX09GRkxPQURfSU5CT1VORCkpIHtcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTI4MS1cXHRcXHRcXHRzYWRkciA9IFxcdTAwMjZ4LVxcdTAwM2Vwcm9wcy5zYWRkcjtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMzI2LVxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6MzI3OlxcdGlmICh4dW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9PRkZMT0FEX0lOQk9VTkQpXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0zMjgtXFx0XFx0eHNvLVxcdTAwM2VkaXIgPSBYRlJNX0RFVl9PRkZMT0FEX0lOO1xcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYz0zNTk9aW50IHhmcm1fZGV2X3BvbGljeV9hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLFxcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0zNjYtXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzozNjc6XFx0aWYgKCF4dW8tXFx1MDAzZWZsYWdzIHx8IHh1by1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB+WEZSTV9PRkZMT0FEX1BBQ0tFVCkge1xcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMzY4LVxcdFxcdC8qIFdlIHN1cHBvcnQgb25seSBwYWNrZXQgb2ZmbG9hZCBtb2RlIGFuZCBpdCBtZWFuc1xcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6MzY5OlxcdFxcdCAqIHRoYXQgdXNlciBtdXN0IHNldCBYRlJNX09GRkxPQURfUEFDS0VUIGJpdC5cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTM3MC1cXHRcXHQgKi9cXG4tLVxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM9NTI2PXN0YXRpYyBpbnQgeGZybV9hcGlfY2hlY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTUyNy17XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1Mjg6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTUyOS1cXHRpZiAoKGRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0hXX0VTUF9UWF9DU1VNKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L3hmcm0veGZybV9yZXBsYXkuYz01NTM9c3RhdGljIHZvaWQgeGZybV9yZXBsYXlfYWR2YW5jZV9lc24oc3RydWN0IHhmcm1fc3RhdGUgKngsIF9fYmUzMiBuZXRfc2VxKVxcbi0tXFxubmV0L3hmcm0veGZybV9yZXBsYXkuYy02MTAtXFxubmV0L3hmcm0veGZybV9yZXBsYXkuYzo2MTE6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcXG5uZXQveGZybS94ZnJtX3JlcGxheS5jLTYxMi1zdGF0aWMgaW50IHhmcm1fcmVwbGF5X292ZXJmbG93X29mZmxvYWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9NzYzPUVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9hbGxvYyk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTc2NC1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6NzY1OiNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTc2Ni12b2lkIHhmcm1fZGV2X3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xMTM2PXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cF9hbGwoY29uc3Qgc3RydWN0IHhmcm1faGFzaF9zdGF0ZV9wdHJzICpzdGF0ZV9wdHJzLFxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTExNDYtXFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHgsIHN0YXRlX3B0cnMtXFx1MDAzZWJ5c3BpICsgaCwgYnlzcGkpIHtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTE0NzojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMTQ4LVxcdFxcdGlmICh4ZG8tXFx1MDAzZXR5cGUgPT0gWEZSTV9ERVZfT0ZGTE9BRF9QQUNLRVQpIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xMzYxPXhmcm1fc3RhdGVfZmluZChjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkcixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNDM0LVxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh4LCBzdGF0ZV9wdHJzLmJ5ZHN0ICsgaCwgYnlkc3QpIHtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTQzNTojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNDM2LVxcdFxcdGlmIChwb2wtXFx1MDAzZXhkby50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUKSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTQ2OS1cXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeCwgc3RhdGVfcHRycy5ieWRzdCArIGhfd2lsZGNhcmQsIGJ5ZHN0KSB7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE0NzA6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTQ3MS1cXHRcXHRpZiAocG9sLVxcdTAwM2V4ZG8udHlwZSA9PSBYRlJNX0RFVl9PRkZMT0FEX1BBQ0tFVCkge1xcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE1NDUtXFx0XFx0fVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxNTQ2OiNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE1NDctXFx0XFx0aWYgKHBvbC1cXHUwMDNleGRvLnR5cGUgPT0gWEZSTV9ERVZfT0ZGTE9BRF9QQUNLRVQpIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjA1LVxcdFxcdH0gZWxzZSB7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE2MDY6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTYwNy1cXHRcXHRcXHRzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCAqeHNvID0gXFx1MDAyNngtXFx1MDAzZXhzbztcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTEyMDQ9c3RhdGljIHZvaWQgeHNvX3RvX3h1b19pZmluZGV4KGNvbnN0IHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkICp4c28sIGludCBpZmluZGV4LFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTIwOC1cXHRpZiAoeHNvLVxcdTAwM2VkaXIgPT0gWEZSTV9ERVZfT0ZGTE9BRF9JTilcXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMjA5OlxcdFxcdHh1by1cXHUwMDNlZmxhZ3MgPSBYRlJNX09GRkxPQURfSU5CT1VORDtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMjEwLVxcdGlmICh4c28tXFx1MDAzZXR5cGUgPT0gWEZSTV9ERVZfT0ZGTE9BRF9QQUNLRVQpXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTIxMTpcXHRcXHR4dW8tXFx1MDAzZWZsYWdzIHw9IFhGUk1fT0ZGTE9BRF9QQUNLRVQ7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMTIxMi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjIxOjA4LjQyNTM2NDAyNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDk1NTY1MTMzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2YgdGhpcy5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgQ09ORklHX1hGUk1fT0ZGTE9BRGAgRGVwZW5kZW5jeSoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgYWJvdXQgYENPTkZJR19YRlJNX09GRkxPQURgLiBJdCBzZWVtcyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIG9wdGlvbiBpcyAqcmVxdWlyZWQqIGZvciB0aGUgZnVuY3Rpb24gYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCB0byB3b3JrIHByb3Blcmx5LiBObyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCBJJ20gaGF2aW5nIGEgcXVpY2sgY2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCAqaXRzZWxmKiBpcyBhY3R1YWxseSBlbmNsb3NlZCB3aXRoaW4gYSBjb25kaXRpb25hbCBibG9jayBkZXBlbmRlbnQgb24gYENPTkZJR19YRlJNX09GRkxPQURgLlxuXG5JIGtub3cgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpcyBkZWZpbmVkIGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgIOKAkyB0aGF0J3MgYSBnaXZlbi4gTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgYXJvdW5kIHdoZXJlIHRoYXQgZnVuY3Rpb24gZGVmaW5pdGlvbiBzaG91bGQgYmUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA5NjEgaW4gdGhhdCBmaWxlLCB0byBjb25maXJtLiBMZXQgbWUganVzdCBvcGVuIHRoYXQgZmlsZSB1cCBhbmQgaGF2ZSBhIGxvb2suLi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY4MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjI2OjE3Ljk4MTg4MDU3MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV9zdGF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk1MDpcXHRcXHRcXHR9XFxuIDk1MTpcXHRcXHR9XFxuIDk1MjpcXHRvdXQ6XFxuIDk1MzpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XFxuIDk1NDpcXHRcXHRpZiAoY250KVxcbiA5NTU6XFx0XFx0XFx0ZXJyID0gMDtcXG4gOTU2OlxcdFxcbiA5NTc6XFx0XFx0cmV0dXJuIGVycjtcXG4gOTU4OlxcdH1cXG4gOTU5OlxcdEVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9mbHVzaCk7XFxuIDk2MDpcXHRcXG4gOTYxOlxcdGludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpZClcXG4gOTYyOlxcdHtcXG4gOTYzOlxcdFxcdHN0cnVjdCB4ZnJtX3N0YXRlICp4O1xcbiA5NjQ6XFx0XFx0c3RydWN0IGhsaXN0X25vZGUgKnRtcDtcXG4gOTY1OlxcdFxcdHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkICp4c287XFxuIDk2NjpcXHRcXHRpbnQgaSwgZXJyID0gMCwgY250ID0gMDtcXG4gOTY3OlxcdFxcbiA5Njg6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcXG4gOTY5OlxcdFxcdGVyciA9IHhmcm1fZGV2X3N0YXRlX2ZsdXNoX3NlY2N0eF9jaGVjayhuZXQsIGRldiwgdGFza192YWxpZCk7XFxuIDk3MDpcXHRcXHRpZiAoZXJyKVxcbiA5NzE6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDk3MjpcXHRcXG4gOTczOlxcdFxcdGVyciA9IC1FU1JDSDtcXG4gOTc0OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYz0gbmV0LVxcdTAwM2V4ZnJtLnN0YXRlX2htYXNrOyBpKyspIHtcXG4gOTc1OlxcdHJlc3RhcnQ6XFxuIDk3NjpcXHRcXHRcXHRobGlzdF9mb3JfZWFjaF9lbnRyeSh4LCB4ZnJtX3N0YXRlX2RlcmVmX3Byb3QobmV0LVxcdTAwM2V4ZnJtLnN0YXRlX2J5ZHN0LCBuZXQpICsgaSwgYnlkc3QpIHtcXG4gOTc3OlxcdFxcdFxcdFxcdHhzbyA9IFxcdTAwMjZ4LVxcdTAwM2V4c287XFxuIDk3ODpcXHRcXG4gOTc5OlxcdFxcdFxcdFxcdGlmICgheGZybV9zdGF0ZV9rZXJuKHgpIFxcdTAwMjZcXHUwMDI2IHhzby1cXHUwMDNlZGV2ID09IGRldikge1xcbiA5ODA6XFx0XFx0XFx0XFx0XFx0eGZybV9zdGF0ZV9ob2xkKHgpO1xcbiA5ODE6XFx0XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5ldC1cXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xcbiA5ODI6XFx0XFxuIDk4MzpcXHRcXHRcXHRcXHRcXHRlcnIgPSB4ZnJtX3N0YXRlX2RlbGV0ZSh4KTtcXG4gOTg0OlxcdFxcdFxcdFxcdFxcdHhmcm1fZGV2X3N0YXRlX2ZyZWUoeCk7XFxuIDk4NTpcXHRcXG4gOTg2OlxcdFxcdFxcdFxcdFxcdHhmcm1fYXVkaXRfc3RhdGVfZGVsZXRlKHgsIGVyciA/IDAgOiAxLFxcbiA5ODc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0dGFza192YWxpZCk7XFxuIDk4ODpcXHRcXHRcXHRcXHRcXHR4ZnJtX3N0YXRlX3B1dCh4KTtcXG4gOTg5OlxcdFxcdFxcdFxcdFxcdGlmICghZXJyKVxcbiA5OTA6XFx0XFx0XFx0XFx0XFx0XFx0Y250Kys7XFxuIDk5MTpcXHRcXG4gOTkyOlxcdFxcdFxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XFxuIDk5MzpcXHRcXHRcXHRcXHRcXHRnb3RvIHJlc3RhcnQ7XFxuIDk5NDpcXHRcXHRcXHRcXHR9XFxuIDk5NTpcXHRcXHRcXHR9XFxuIDk5NjpcXHRcXHR9XFxuIDk5NzpcXHRcXHRpZiAoY250KVxcbiA5OTg6XFx0XFx0XFx0ZXJyID0gMDtcXG4gOTk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoyNjoxNy45ODIwMzU5NTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgwNzMzODg0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIEZ1bmN0aW9uJ3MgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgd2FzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYENPTkZJR19YRlJNX09GRkxPQURgLCBidXQgaXQncyBub3Qgd2hlcmUgSSBleHBlY3RlZCBpdCB0byBiZS4gVGhpcyBpcyBpbnRlcmVzdGluZy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHdhcyBjbGVhcmx5IG9mZi4gTGV0J3Mgc2VlLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIHBsYWNlbWVudCBvZiBgI2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURgIHdpdGhpbiBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYCB0byB1bmRlcnN0YW5kIHdoeS4gSXQncyB0aW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgYW5kIGNsYXJpZnkgd2hlcmUgdGhpcyBtYWNybydzIGluZmx1ZW5jZSB0cnVseSBsaWVzLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9uIHRvIGdldCB0aGlzIGNsZWFyIGluIG15IGhlYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3NjYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjI2OjIzLjc4OTM3NzM3N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyMDM3MTQ1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfWEZSTV9PRkZMT0FEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fc3RhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3N0YXRlLmM9NzYzPUVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9hbGxvYyk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTc2NC1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6NzY1OiNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTc2Ni12b2lkIHhmcm1fZGV2X3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xMTM2PXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cF9hbGwoY29uc3Qgc3RydWN0IHhmcm1faGFzaF9zdGF0ZV9wdHJzICpzdGF0ZV9wdHJzLFxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTExNDYtXFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHgsIHN0YXRlX3B0cnMtXFx1MDAzZWJ5c3BpICsgaCwgYnlzcGkpIHtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTE0NzojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMTQ4LVxcdFxcdGlmICh4ZG8tXFx1MDAzZXR5cGUgPT0gWEZSTV9ERVZfT0ZGTE9BRF9QQUNLRVQpIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xMzYxPXhmcm1fc3RhdGVfZmluZChjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkcixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNDM0LVxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh4LCBzdGF0ZV9wdHJzLmJ5ZHN0ICsgaCwgYnlkc3QpIHtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTQzNTojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNDM2LVxcdFxcdGlmIChwb2wtXFx1MDAzZXhkby50eXBlID09IFhGUk1fREVWX09GRkxPQURfUEFDS0VUKSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTQ2OS1cXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoeCwgc3RhdGVfcHRycy5ieWRzdCArIGhfd2lsZGNhcmQsIGJ5ZHN0KSB7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE0NzA6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTQ3MS1cXHRcXHRpZiAocG9sLVxcdTAwM2V4ZG8udHlwZSA9PSBYRlJNX0RFVl9PRkZMT0FEX1BBQ0tFVCkge1xcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE1NDUtXFx0XFx0fVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxNTQ2OiNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE1NDctXFx0XFx0aWYgKHBvbC1cXHUwMDNleGRvLnR5cGUgPT0gWEZSTV9ERVZfT0ZGTE9BRF9QQUNLRVQpIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjA1LVxcdFxcdH0gZWxzZSB7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE2MDY6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTYwNy1cXHRcXHRcXHRzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCAqeHNvID0gXFx1MDAyNngtXFx1MDAzZXhzbztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6MjY6MjUuMDA5NzUzNTAzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3Mjk1NDQxMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgeGZybV9kZXZfc3RhdGUgRnVuY3Rpb25zKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUga2VybmVsJ3MgWEZSTSAoSVBzZWMpIHN1YnN5c3RlbSBhbmQgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIGRldmljZSBzdGF0ZS4gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlIGB4ZnJtX2Rldl9zdGF0ZWAgZnVuY3Rpb25zLCBhbmQgYSBsaXR0bGUgbmFnZ2luZyBxdWVzdGlvbiBoYXMgcG9wcGVkIHVwLiBJJ20gbm90aW5nIHRoYXQgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpcywgYXMgZmFyIGFzIEkgY2FuIHRlbGwgZnJvbSB0aGUgYnVpbGQgY29uZmlnLCBhbHdheXMgaW5jbHVkZWQuIE5vIHN1cnByaXNlcyB0aGVyZTsgeW91J2Qgd2FudCBhIGNsZWFudXAgZnVuY3Rpb24gYXZhaWxhYmxlLiBCdXQgd2hhdCBhYm91dCBpdHMgY291bnRlcnBhcnQsIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYD8gSXMgdGhhdCBjb21waWxlZCBpbiBjb25kaXRpb25hbGx5IGJhc2VkIG9uIHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIGlzIGl0IGFsd2F5cyBwcmVzZW50IGFsb25nc2lkZSBpdHMgZmx1c2hpbmcgc2libGluZz8gSSBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBtYWNyb3MgYW5kIGRlcGVuZGVuY2llcyB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIG9mIHRoZSBkZXZpY2Ugc3RhdGUgbGlmZWN5Y2xlIGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRob3NlIHJlc291cmNlcy4gTXkgaW50dWl0aW9uIHNheXMgaXQgKnNob3VsZCogYWx3YXlzIGJlIHRoZXJlLCBidXQgSSd2ZSBiZWVuIHN1cnByaXNlZCBiZWZvcmUuIEkgbmVlZCB0byBnZXQgdGhpcyBjbGVhciBpbiBteSBoZWFkLCBzaW5jZSBpdCBtYXR0ZXJzIHdoZW4gZGVidWdnaW5nIGNlcnRhaW4gaW50ZXJhY3Rpb25zIHdpdGggbmV0d29yayBkZXZpY2VzIHVuZGVyIGhlYXZ5IGxvYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzc0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6MjY6MzEuNzM5MzAwMzQ2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njk4ODMxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2Rldl9zdGF0ZV9mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fc3RhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3N0YXRlLmM9NTk2PXN0YXRpYyB2b2lkIHhmcm1fc3RhdGVfZ2NfZGVzdHJveShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy02MTctXFx0XFx0cHV0X3BhZ2UoeC1cXHUwMDNleGZyYWcucGFnZSk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjYxODpcXHR4ZnJtX2Rldl9zdGF0ZV9mcmVlKHgpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy02MTktXFx0c2VjdXJpdHlfeGZybV9zdGF0ZV9mcmVlKHgpO1xcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTc3OD1FWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX2Rldl9zdGF0ZV9kZWxldGUpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy03NzktXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjc4MDp2b2lkIHhmcm1fZGV2X3N0YXRlX2ZyZWUoc3RydWN0IHhmcm1fc3RhdGUgKngpXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTc4MS17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9OTYxPWludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpZClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy05ODMtXFx0XFx0XFx0XFx0ZXJyID0geGZybV9zdGF0ZV9kZWxldGUoeCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjk4NDpcXHRcXHRcXHRcXHR4ZnJtX2Rldl9zdGF0ZV9mcmVlKHgpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy05ODUtXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTAxMy1cXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjEwMTQ6XFx0XFx0XFx0eGZybV9kZXZfc3RhdGVfZnJlZSh4KTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTAxNS1cXHRcXHRcXHR4ZnJtX3N0YXRlX3B1dCh4KTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xMzYxPXhmcm1fc3RhdGVfZmluZChjb25zdCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIGNvbnN0IHhmcm1fYWRkcmVzc190ICpzYWRkcixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjEwLVxcdFxcdFxcdFxcdHhmcm1fZGV2X3N0YXRlX2RlbGV0ZSh4KTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTYxMTpcXHRcXHRcXHRcXHR4ZnJtX2Rldl9zdGF0ZV9mcmVlKHgpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNjEyLVxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6MjY6MzEuNzg2MjkzOTkzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMzkzNzAyODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCBhbmQgYHhmcm1fc3RhdGVgKipcblxuT2theSwgc28gYHhmcm1fZGV2X3N0YXRlX2ZyZWVgIGlzIGFsd2F5cyBjb21waWxlZCwgdGhhdCdzIGdvb2QgdG8ga25vdy4gQnV0IGhvbGQgb24sIHRoZSBjb2RlIHVzZXMgYHgtXHUwMDNlZGV2X2djbGlzdGAuIFRoaXMgaXMgYSBjcnVjaWFsIGNsdWUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3RydWN0dXJlIG9mIGB4ZnJtX3N0YXRlYCDigJMgdGhhdCdzIHdoZXJlIEkgc2hvdWxkIHN0YXJ0IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcyBjb25uZWN0aW9uIGFuZCBwb3RlbnRpYWwgcmVzb3VyY2UgbWFuYWdlbWVudC4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHhmcm1fc3RhdGVgIHRvIG1ha2Ugc3VyZSBJIGdyYXNwIHRoZSByZWxhdGlvbnNoaXAgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NzYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoyNjozNC44MjU2NjY1MDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTg1Njc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldl9nY2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQveGZybS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3hmcm0uaD0xOTA9c3RydWN0IHhmcm1fc3RhdGUge1xcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oLTE5Ni1cXHR1bmlvbiB7XFxuaW5jbHVkZS9uZXQveGZybS5oOjE5NzpcXHRcXHRzdHJ1Y3QgaGxpc3Rfbm9kZVxcdGRldl9nY2xpc3Q7XFxuaW5jbHVkZS9uZXQveGZybS5oLTE5OC1cXHRcXHRzdHJ1Y3QgaGxpc3Rfbm9kZVxcdGJ5c3JjO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoyNjozNC44NzA2NTYyOTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI3NzU4NTI2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUgVnVsbmVyYWJpbGl0eSBpbiBYRlJNKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBhc3N1bXB0aW9uIHRoYXQgYGRldl9nY2xpc3RgIGlzIGFsd2F5cyBwcmVzZW50LiBUaGF0J3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGFkZHJlc3MgYSB1c2UtYWZ0ZXItZnJlZSBpbiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgLiBTcGVjaWZpY2FsbHksIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCBpcyBjYWxsZWQgd2l0aG91dCBhIGhlbGQgcmVmZXJlbmNlIHRvIGB4YC4gSW1tZWRpYXRlbHksIHRoZSBhbGFybSBiZWxscyBhcmUgZ29pbmcgb2ZmLiBUaGF04oCZcyBhIGNsYXNzaWMgbWVtb3J5IHNhZmV0eSBpc3N1ZS5cblxuTm93LCBsZXQncyBkaWcgaW50byB0aGUgZGV0YWlscy4gTXkgdW5kZXJzdGFuZGluZyBpcyBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGl0ZXJhdGVzIHRocm91Z2ggc29tZXRoaW5nIGNhbGxlZCBgeGZybV9zdGF0ZV9kZXZfZ2NfbGlzdGAuIEhtbW0sIGlzIHRoYXQgdGhlIGxpc3QgaW4gcXVlc3Rpb24/IEkgbmVlZCB0byB2ZXJpZnkgaG93IGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgaW50ZXJhY3RzIHdpdGggdGhpcyBsaXN0LiBMZXQncyBwdWxsIHVwIHRoZSBzb3VyY2UgY29kZSBmb3IgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpbiBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYC4gSSBuZWVkIHRvIHNlZSBleGFjdGx5IGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhvc2UgbGlzdCBlbnRyaWVzIGFuZCBjb25maXJtIHRoaXMgc3VzcGVjdGVkIGZsb3cgb2YgZXhlY3V0aW9uLiBUaGVuLCB0aGUgcGF0Y2ggc2hvdWxkIGJlIHVuZGVyc3RhbmRhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAwMCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoyNjo0MC4xNDgyNDQxOTRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL3hmcm1fc3RhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5OTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5OTA6XFx0XFx0XFx0XFx0XFx0XFx0Y250Kys7XFxuIDk5MTpcXHRcXG4gOTkyOlxcdFxcdFxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XFxuIDk5MzpcXHRcXHRcXHRcXHRcXHRnb3RvIHJlc3RhcnQ7XFxuIDk5NDpcXHRcXHRcXHRcXHR9XFxuIDk5NTpcXHRcXHRcXHR9XFxuIDk5NjpcXHRcXHR9XFxuIDk5NzpcXHRcXHRpZiAoY250KVxcbiA5OTg6XFx0XFx0XFx0ZXJyID0gMDtcXG4gOTk5OlxcdFxcbjEwMDA6XFx0b3V0OlxcbjEwMDE6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5ldC1cXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xcbjEwMDI6XFx0XFxuMTAwMzpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xcbjEwMDQ6XFx0cmVzdGFydF9nYzpcXG4xMDA1OlxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeCwgdG1wLCBcXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbGlzdCwgZGV2X2djbGlzdCkge1xcbjEwMDY6XFx0XFx0XFx0eHNvID0gXFx1MDAyNngtXFx1MDAzZXhzbztcXG4xMDA3OlxcdFxcbjEwMDg6XFx0XFx0XFx0aWYgKHhzby1cXHUwMDNlZGV2ID09IGRldikge1xcbjEwMDk6XFx0XFx0XFx0XFx0LyogVGhlIGRldmljZSBHQyBsaXN0IGRvZXMgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8geC4gKi9cXG4xMDEwOlxcdFxcdFxcdFxcdGlmICgheGZybV9zdGF0ZV9ob2xkX3JjdSh4KSlcXG4xMDExOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEwMTI6XFx0XFxuMTAxMzpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XFxuMTAxNDpcXHRcXHRcXHRcXHR4ZnJtX2Rldl9zdGF0ZV9mcmVlKHgpO1xcbjEwMTU6XFx0XFx0XFx0XFx0eGZybV9zdGF0ZV9wdXQoeCk7XFxuMTAxNjpcXHRcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xcbjEwMTc6XFx0XFx0XFx0XFx0Z290byByZXN0YXJ0X2djO1xcbjEwMTg6XFx0XFx0XFx0fVxcbjEwMTk6XFx0XFxuMTAyMDpcXHRcXHR9XFxuMTAyMTpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XFxuMTAyMjpcXHRcXG4xMDIzOlxcdFxcdHhmcm1fZmx1c2hfZ2MoKTtcXG4xMDI0OlxcdFxcbjEwMjU6XFx0XFx0cmV0dXJuIGVycjtcXG4xMDI2OlxcdH1cXG4xMDI3OlxcdEVYUE9SVF9TWU1CT0woeGZybV9kZXZfc3RhdGVfZmx1c2gpO1xcbjEwMjg6XFx0XFxuMTAyOTpcXHR2b2lkIHhmcm1fc2FkX2dldGluZm8oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybWtfc2FkaW5mbyAqc2kpXFxuMTAzMDpcXHR7XFxuMTAzMTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5ldC1cXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xcbjEwMzI6XFx0XFx0c2ktXFx1MDAzZXNhZGNudCA9IG5ldC1cXHUwMDNleGZybS5zdGF0ZV9udW07XFxuMTAzMzpcXHRcXHRzaS1cXHUwMDNlc2FkaGNudCA9IG5ldC1cXHUwMDNleGZybS5zdGF0ZV9obWFzayArIDE7XFxuMTAzNDpcXHRcXHRzaS1cXHUwMDNlc2FkaG1jbnQgPSB4ZnJtX3N0YXRlX2hhc2htYXg7XFxuMTAzNTpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XFxuMTAzNjpcXHR9XFxuMTAzNzpcXHRFWFBPUlRfU1lNQk9MKHhmcm1fc2FkX2dldGluZm8pO1xcbjEwMzg6XFx0XFxuMTAzOTpcXHRzdGF0aWMgdm9pZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoyNjo0MC4xNDg0NjYzNzRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE4MDQzNTE4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWEZSTSBTdGF0ZSBNYW5hZ2VtZW50IEZpeCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIG92ZXIgdGhpcyBYRlJNIHN0YXRlIG1hbmFnZW1lbnQgZml4LiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHllcywgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBgeGZybV9zdGF0ZV9kZXZfZ2NfbGlzdGAuIFRoYXQgcmluZ3MgYSBiZWxsLiBUaGUgY29yZSBvZiB0aGlzIGZpeCBzZWVtcyB0byBiZSBhZGRpbmcgYHhmcm1fc3RhdGVfaG9sZF9yY3UoeClgIGFuZCBgeGZybV9zdGF0ZV9wdXQoeClgIGNhbGxzIHdpdGhpbiB0aGF0IGxvb3AgdG8gbWFrZSB0aGUgcHJvY2Vzc2luZyBvZiBlYWNoIGVudHJ5IHNhZmUsIHdoaWNoIGlzIGEgZ29vZCBjYWxsLCBwcmV2ZW50cyByYWNlcy5cblxuSSBhbHNvIHNlZSBhIGNoYW5nZSBpbiBgeGZybV9kZXZfc3RhdGVfZnJlZWA6IHJlcGxhY2luZyBgaGxpc3RfZGVsYCB3aXRoIGBobGlzdF9kZWxfaW5pdGAuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFuZCBhZGRyZXNzZXMgYSBidWcgaW4gaG93IHN0YXRlcyBhcmUgbWFuYWdlZC4gRGVmaW5pdGVseSB3b3J0aCBhIGZ1enppbmcgY2FtcGFpZ24gdG8gdmFsaWRhdGUgdGhpcyBmaXguXG5cblRoZSBrZXkgZnVuY3Rpb25zIHRvIGNvbmNlbnRyYXRlIG9uIGZvciBmdXp6aW5nIGFyZSwgb2J2aW91c2x5LCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGFuZCBgeGZybV9kZXZfc3RhdGVfZnJlZWAuIFdhaXQsIGhvbGQgb24uIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgZ2V0cyBjYWxsZWQgd2hlbiBhbiBYRlJNIGRldmljZSBpcyB1bnJlZ2lzdGVyZWQgb3IgZ29lcyBkb3duLiBPa2F5LCBzbyB0aGF0IHN1Z2dlc3RzIHRoaXMgY291bGQgYmUgaW50ZXJlc3RpbmcgZnJvbSBhIG5ldHdvcmsgY29uZmlndXJhdGlvbiBjaGFuZ2UgcGVyc3BlY3RpdmUuIFRoaXMgaXMgYSB2ZXJ5IGdvb2QgZm9jdXMgcG9pbnQuXG5cbkZ1cnRoZXJtb3JlLCBgeGZybV9kZXZfc3RhdGVfZnJlZWAgaXMgY2FsbGVkIGZyb20gYm90aCBgeGZybV9zdGF0ZV9nY19kZXN0cm95YCBhbmQgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYC4gVGhhdCBtYWtlcyB0aGVzZSB0d28gZnVuY3Rpb25zIGEgbmF0dXJhbCBwYWlyIGZvciBmdXp6aW5nLlxuXG5MZXQncyBjaGVjayBpZiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIHN0YXRpYyBvciBub3QuIE9rYXksIGl0J3MgZXhwb3J0ZWQuIExldCdzIHNlZSBhYm91dCBgeGZybV9kZXZfc3RhdGVfZnJlZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTQ3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6Mjc6MDEuOTUyODQyMzk3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzI2OTMwNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qeGZybV9kZXZfc3RhdGVfZnJlZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjI3OjAyLjAwMDExOTYzNFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE1OTc0NzI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgU2NvcGUgb2YgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIHNlZWluZyBgeGZybV9kZXZfc3RhdGVfZnJlZWAsIGFuZCBteSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCBzaW5jZSBpdCdzIHVzZWQgaW4gdGhpcyBjb250ZXh0LCBpdCBzaG91bGQgZWl0aGVyIGJlIGV4cG9ydGVkIG9yIHN0YXRpYy4gVGhlIGZhY3QgdGhhdCBpdCdzIG5vdCBleHBsaWNpdGx5IGRlY2xhcmVkIGFzIGBzdGF0aWNgIGlzIHJhaXNpbmcgYSBmbGFnLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaXRzIHZpc2liaWxpdHkuIElzIGl0IG1lYW50IGZvciBpbnRlcm5hbCB1c2Ugb25seSB3aXRoaW4gYSBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LCBvciBpcyBpdCBwb3RlbnRpYWxseSBjYWxsYWJsZSBmcm9tIG90aGVyIG1vZHVsZXM/IFRoaXMgd2FycmFudHMgYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgc3ltYm9sIHRhYmxlIG9yLCBmYWlsaW5nIHRoYXQsIGEgY3Jvc3MtcmVmZXJlbmNlIHNlYXJjaCB0byB1bmRlcnN0YW5kIGl0cyBpbnRlbmRlZCB1c2FnZSBhbmQgZW5zdXJlIEknbSBpbnRlcnByZXRpbmcgaXRzIHBsYWNlbWVudCBjb3JyZWN0bHkuIEkgc3VzcGVjdCBhIHBvdGVudGlhbCBvdmVyc2lnaHQgb3IgcGVyaGFwcyBhIHN1YnRsZSBkZXNpZ24gYXNwZWN0IEkgaGF2ZW4ndCBmdWxseSBncmFzcGVkIHlldC4gSSBuZWVkIHRvIGZpZ3VyZSB0aGlzIG91dCBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzkwNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjI3OjMzLjE1OTg3MDEyNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3NTMzODkyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIHhmcm1fZGV2X3N0YXRlX2ZyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fc3RhdGUuYz03Nzg9RVhQT1JUX1NZTUJPTF9HUEwoeGZybV9kZXZfc3RhdGVfZGVsZXRlKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtNzc5LVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo3ODA6dm9pZCB4ZnJtX2Rldl9zdGF0ZV9mcmVlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy03ODEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoyNzozNC40MzUyMTQ5NTlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMxMDMyMDQ0OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkFzc2Vzc2luZyBEeW5hbWljIEJlaGF2aW9yIFx1MDAyNiBFeHBvcnQgU3RhdHVzKipcblxuQWxyaWdodCwgSSdtIGxvb2tpbmcgYXQgdGhpcy4uLiBhbmQgbXkgaW1tZWRpYXRlIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzbid0IGEgc3RhdGljIGVsZW1lbnQuIEl0IGhhcyBzb21lIGtpbmQgb2YgZHluYW1pYyBiZWhhdmlvciBvciBzdGF0ZSB0aGF0IG5lZWRzIGV4YW1pbmF0aW9uLiBHaXZlbiB0aGF0LCB0aGUgY3JpdGljYWwgbmV4dCBzdGVwIGlzIHRvIGRldGVybWluZSBpZiBpdHMgY3VycmVudCBzdGF0ZSBvciBhbnkgb2YgaXRzIHRyYW5zZm9ybWF0aW9ucyBhcmUgYmVpbmcgc3VjY2Vzc2Z1bGx5IGV4cG9ydGVkIG9yIHJlbmRlcmVkIGV4dGVybmFsbHkuIFRoZSBleHBvcnQgcHJvY2VzcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBwaWN0dXJlIGhlcmUuIEkgY2FuJ3QgZGV0ZXJtaW5lIGl0cyBjb21wbGV0ZSB1dGlsaXR5IG9yIGJlaGF2aW9yIHdpdGhvdXQga25vd2luZyB0aGUgc3RhdGUgb2YgaXRzIG91dHB1dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyNzUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoyNzo1Ny41Mzg0MjI3ODVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTI0MDU3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLip4ZnJtX2Rldl9zdGF0ZV9mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6Mjc6NTcuNTg1NTU0OTExWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMTU4NDYwODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwncyBYRlJNIE9mZmxvYWQgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBrZXJuZWwgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHhmcm1gIHN1YnN5c3RlbSBhbmQgaXRzIG9mZmxvYWQgY2FwYWJpbGl0aWVzLiBGaXJzdCBvZmYsIEkgc2VlIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzbid0ICpleHBvcnRlZCogZGlyZWN0bHksIHdoaWNoIG1lYW5zIGl0cyBzeW1ib2wgYWRkcmVzcyBzaG91bGQgYmUgZGlzdGluY3Qgc2luY2UgaXQncyBub24tc3RhdGljLiBUaGVuLCB3YWl0IGEgc2Vjb25kLCBob2xkIG9uLCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgICppcyogZXhwb3J0ZWQg4oCTIGludGVyZXN0aW5nLiBMZXQncyBzZWUgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGx1cmtpbmcgYXJvdW5kIGhlcmUuIE9rYXksIGB4ZnJtX2Rldl9kb3duYCBhbmQgYHhmcm1fZGV2X3VucmVnaXN0ZXJgIGFyZSBib3RoIHN0YXRpYywgc3BlY2lmaWNhbGx5IGRlZmluZWQgd2l0aGluIGB4ZnJtX2RldmljZS5jYC4gTG9va2luZyBmdXJ0aGVyLCBgeGZybV9kZXZfc3RhdGVfYWRkYCBhbmQgYHhmcm1fZGV2X3N0YXRlX2RlbGV0ZWAgaGF2ZSBhcHBlYXJhbmNlcyBhY3Jvc3MgYm90aCBgeGZybV9kZXZpY2UuY2AgYW5kIGB4ZnJtX3N0YXRlLmNgLlxuXG5HaXZlbiB0aGUgY29udGV4dCwgSSB0aGluayBmb2N1c2luZyBvbiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGFuZCBgeGZybV9kZXZfc3RhdGVfZnJlZWAgaXMgdGhlIHJpZ2h0IG1vdmUuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCBgQ09ORklHX1hGUk1gIGFuZCBgQ09ORklHX1hGUk1fT0ZGTE9BRGAgYXJlIHRoZSBwcmVyZXF1aXNpdGVzIGZvciB0aGlzIGNvZGUgcGF0aC4gSG1tLCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIGFsd2F5cyBjb21waWxlZCBpZiBgQ09ORklHX1hGUk1gIGlzIGVuYWJsZWQsIGJ1dCBpdCB3aWxsIG9ubHkgYWN0dWFsbHkgKmRvKiBhbnl0aGluZyBpZiBgeHNvLVx1MDAzZWRldiA9PSBkZXZgLiBgeHNvYCBpcyBhY3R1YWxseSBgXHUwMDI2eC1cdTAwM2V4c29gLCB3aGljaCBnaXZlcyB1cyBgc3RydWN0IHhmcm1fZGV2X29mZmxvYWRgLiBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgZ29vZCBsb29rIGF0IGBzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZGAgbm93LCB0byBwcm9wZXJseSB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDYxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjI4OjA0LjYwMTQwMzQ0M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5MTY3MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHhmcm1fZGV2X29mZmxvYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQveGZybS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3hmcm0uaD0xNDU9ZW51bSB7XFxuLS1cXG5pbmNsdWRlL25ldC94ZnJtLmgtMTQ4LVxcbmluY2x1ZGUvbmV0L3hmcm0uaDoxNDk6c3RydWN0IHhmcm1fZGV2X29mZmxvYWQge1xcbmluY2x1ZGUvbmV0L3hmcm0uaC0xNTAtXFx0LyogVGhlIGRldmljZSBmb3IgdGhpcyBvZmZsb2FkLlxcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oPTE5MD1zdHJ1Y3QgeGZybV9zdGF0ZSB7XFxuLS1cXG5pbmNsdWRlL25ldC94ZnJtLmgtMjkzLVxcbmluY2x1ZGUvbmV0L3hmcm0uaDoyOTQ6XFx0c3RydWN0IHhmcm1fZGV2X29mZmxvYWQgeHNvO1xcbmluY2x1ZGUvbmV0L3hmcm0uaC0yOTUtXFxuLS1cXG5pbmNsdWRlL25ldC94ZnJtLmg9NjM0PXN0cnVjdCB4ZnJtX3BvbGljeSB7XFxuLS1cXG5pbmNsdWRlL25ldC94ZnJtLmgtNjY2LVxcbmluY2x1ZGUvbmV0L3hmcm0uaDo2Njc6XFx0c3RydWN0IHhmcm1fZGV2X29mZmxvYWQgeGRvO1xcbmluY2x1ZGUvbmV0L3hmcm0uaC02NjgtfTtcXG4tLVxcbmluY2x1ZGUvbmV0L3hmcm0uaD0xNzIzPXN0YXRpYyBpbmxpbmUgdm9pZCB4ZnJtX2Rldl9zdGF0ZV91cGRhdGVfc3RhdHMoc3RydWN0IHhmcm1fc3RhdGUgKngpXFxuaW5jbHVkZS9uZXQveGZybS5oLTE3MjQte1xcbmluY2x1ZGUvbmV0L3hmcm0uaDoxNzI1OlxcdHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkICp4ZG8gPSBcXHUwMDI2eC1cXHUwMDNleHNvO1xcbmluY2x1ZGUvbmV0L3hmcm0uaC0xNzI2LVxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBSRUFEX09OQ0UoeGRvLVxcdTAwM2VkZXYpO1xcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oPTIxMzQ9c3RhdGljIGlubGluZSB2b2lkIHhmcm1fZGV2X3N0YXRlX2FkdmFuY2VfZXNuKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbmluY2x1ZGUvbmV0L3hmcm0uaC0yMTM1LXtcXG5pbmNsdWRlL25ldC94ZnJtLmg6MjEzNjpcXHRzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCAqeHNvID0gXFx1MDAyNngtXFx1MDAzZXhzbztcXG5pbmNsdWRlL25ldC94ZnJtLmgtMjEzNy1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gUkVBRF9PTkNFKHhzby1cXHUwMDNlZGV2KTtcXG4tLVxcbmluY2x1ZGUvbmV0L3hmcm0uaD0yMTYxPXN0YXRpYyBpbmxpbmUgdm9pZCB4ZnJtX2Rldl9wb2xpY3lfZGVsZXRlKHN0cnVjdCB4ZnJtX3BvbGljeSAqeClcXG5pbmNsdWRlL25ldC94ZnJtLmgtMjE2Mi17XFxuaW5jbHVkZS9uZXQveGZybS5oOjIxNjM6XFx0c3RydWN0IHhmcm1fZGV2X29mZmxvYWQgKnhkbyA9IFxcdTAwMjZ4LVxcdTAwM2V4ZG87XFxuaW5jbHVkZS9uZXQveGZybS5oLTIxNjQtXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHhkby1cXHUwMDNlZGV2O1xcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oPTIxNzA9c3RhdGljIGlubGluZSB2b2lkIHhmcm1fZGV2X3BvbGljeV9mcmVlKHN0cnVjdCB4ZnJtX3BvbGljeSAqeClcXG5pbmNsdWRlL25ldC94ZnJtLmgtMjE3MS17XFxuaW5jbHVkZS9uZXQveGZybS5oOjIxNzI6XFx0c3RydWN0IHhmcm1fZGV2X29mZmxvYWQgKnhkbyA9IFxcdTAwMjZ4LVxcdTAwM2V4ZG87XFxuaW5jbHVkZS9uZXQveGZybS5oLTIxNzMtXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHhkby1cXHUwMDNlZGV2O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoyODowNC42NDczMjIxMVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTcwOTEzNjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgeGZybV9zdGF0ZSBTdHJ1Y3R1cmUgYW5kIE9mZmxvYWQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgeGZybV9zdGF0ZWAgc3RydWN0dXJlIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHhzb2AgYW5kIGl0cyBtZW1iZXJzLiBTcGVjaWZpY2FsbHksIEknbSBub3RpbmcgdGhhdCBgeHNvYCwgd2hhdGV2ZXIgaXQgaXMsIGlzICphbHdheXMqIHByZXNlbnQgd2l0aGluIGBzdHJ1Y3QgeGZybV9zdGF0ZWAuIFRoYXQncyBhIGZ1bmRhbWVudGFsIGdpdmVuLiBCdXQgdGhlbiBJJ20gdGhpbmtpbmcgYWJvdXQgYHhzby1cdTAwM2VkZXZgLCBhbmQgSSdtIHJlbWVtYmVyaW5nIHRoYXQgaXQncyBvbmx5IHBvcHVsYXRlZCwgb25seSB2YWxpZCwgdW5kZXIgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcy4gTXkgcmVjb2xsZWN0aW9uIGlzIHRoYXQgYHhzby1cdTAwM2VkZXZgIGlzIG9ubHkgYXNzaWduZWQgd2hlbiBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZC4gQW5kLCBmdXJ0aGVyLCBlbmFibGluZyB0aGF0IG9mZmxvYWQgZmVhdHVyZSBoaW5nZXMgb24gd2hldGhlciBgQ09ORklHX1hGUk1fT0ZGTE9BRGAgaXMgc2V0IGR1cmluZyB0aGUga2VybmVsIGJ1aWxkLiBTbywgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBgeHNvLVx1MDAzZWRldmAgSSBuZWVkIHRvIHRyYWNlICp3aGVyZSogdGhpcyBmaWVsZCBpcyBhY3R1YWxseSBzZXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHN1cnJvdW5kaW5nIGl0cyBhc3NpZ25tZW50LiBMZXQncyBzZWUgd2hlcmUgdGhhdCBoYXBwZW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgyNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjI4OjA4LjgxODIzODk3N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4NDUwMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieHNvLVxcdTAwM2VkZXYgPVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9kZXZpY2UuYz0yMzk9aW50IHhmcm1fZGV2X3N0YXRlX2FkZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0zMDMtXFx0aWYgKCFkZXYtXFx1MDAzZXhmcm1kZXZfb3BzIHx8ICFkZXYtXFx1MDAzZXhmcm1kZXZfb3BzLVxcdTAwM2V4ZG9fZGV2X3N0YXRlX2FkZCkge1xcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6MzA0OlxcdFxcdHhzby1cXHUwMDNlZGV2ID0gTlVMTDtcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTMwNS1cXHRcXHRkZXZfcHV0KGRldik7XFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTMxMS1cXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJEZXZpY2UgZG9lc24ndCBzdXBwb3J0IG9mZmxvYWQgd2l0aCBFU05cXFwiKTtcXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjMxMjpcXHRcXHR4c28tXFx1MDAzZWRldiA9IE5VTEw7XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0zMTMtXFx0XFx0ZGV2X3B1dChkZXYpO1xcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0zMjItXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzozMjM6XFx0eHNvLVxcdTAwM2VkZXYgPSBkZXY7XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0zMjQtXFx0eHNvLVxcdTAwM2VpZmluZGV4ID0gZGV2LVxcdTAwM2VpZmluZGV4O1xcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0zMzgtXFx0aWYgKGVycikge1xcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6MzM5OlxcdFxcdHhzby1cXHUwMDNlZGV2ID0gTlVMTDtcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTM0MC1cXHRcXHR4c28tXFx1MDAzZWRpciA9IDA7XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9ODg2PXhmcm1fZGV2X3N0YXRlX2ZsdXNoX3NlY2N0eF9jaGVjayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpZClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04OTYtXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjg5NzpcXHRcXHRcXHRpZiAoeHNvLVxcdTAwM2VkZXYgPT0gZGV2IFxcdTAwMjZcXHUwMDI2XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTg5OC1cXHRcXHRcXHQgICAoZXJyID0gc2VjdXJpdHlfeGZybV9zdGF0ZV9kZWxldGUoeCkpICE9IDApIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz05NjE9aW50IHhmcm1fZGV2X3N0YXRlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0YXNrX3ZhbGlkKVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTk3OC1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6OTc5OlxcdFxcdFxcdGlmICgheGZybV9zdGF0ZV9rZXJuKHgpIFxcdTAwMjZcXHUwMDI2IHhzby1cXHUwMDNlZGV2ID09IGRldikge1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy05ODAtXFx0XFx0XFx0XFx0eGZybV9zdGF0ZV9ob2xkKHgpO1xcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEwMDctXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjEwMDg6XFx0XFx0aWYgKHhzby1cXHUwMDNlZGV2ID09IGRldikge1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMDA5LVxcdFxcdFxcdC8qIFRoZSBkZXZpY2UgR0MgbGlzdCBkb2VzIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIHguICovXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MTM2MT14ZnJtX3N0YXRlX2ZpbmQoY29uc3QgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCBjb25zdCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTU1My1cXHRcXHRcXHR4c28tXFx1MDAzZWRpciA9IHhkby1cXHUwMDNlZGlyO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxNTU0OlxcdFxcdFxcdHhzby1cXHUwMDNlZGV2ID0gZGV2O1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNTU1LVxcdFxcdFxcdHhzby1cXHUwMDNlaWZpbmRleCA9IGRldi1cXHUwMDNlaWZpbmRleDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNTYyLVxcdFxcdFxcdFxcdG5ldGRldl9wdXQoZGV2LCBcXHUwMDI2eHNvLVxcdTAwM2VkZXZfdHJhY2tlcik7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjE1NjM6XFx0XFx0XFx0XFx0eHNvLVxcdTAwM2VkZXYgPSBOVUxMO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xNTY0LVxcdFxcdFxcdFxcdHhzby1cXHUwMDNldHlwZSA9IFhGUk1fREVWX09GRkxPQURfVU5TUEVDSUZJRUQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjI4OjA4Ljg2MzA5MDg1NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzA5NTg0OTQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaWdnaW5nIGludG8gdGhlIFhGUk0gRGV2aWNlIFN0YXRlKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgZG93biB0aGlzIGB4c28tXHUwMDNlZGV2YCBhc3NpZ25tZW50LCBhbmQgaXQgbG9va3MgbGlrZSBgeGZybV9kZXZfc3RhdGVfYWRkYCBpbiBgbmV0L3hmcm0veGZybV9kZXZpY2UuY2AgaXMgdGhlIGN1bHByaXQuIFRoYXQgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhhdCBkZXZpY2UgcG9pbnRlciwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEknbSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcuICBJIGtub3cgYHhmcm1fZGV2aWNlLmNgIGdldHMgY29tcGlsZWQgYXMgbG9uZyBhcyBgQ09ORklHX1hGUk1gIGlzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcsIHNvIHRoZSBmaWxlIGl0c2VsZiBzaG91bGQgZXhpc3QuIFdhaXQgYSBtaW51dGUuLi4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcgY3J1Y2lhbC4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IGZ1bmN0aW9uIGJlaW5nIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEYC4gIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ20gZ29pbmcgdG8gcXVpY2tseSByZS1leGFtaW5lIGBuZXQveGZybS94ZnJtX2RldmljZS5jYCB0byBjb25maXJtIHRoYXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIEl0J3MgY3JpdGljYWwgSSBkb24ndCBtaXNzIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA5NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoyODoyMS45NTg5NDM0OTJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDQ1Njk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19YRlJNX09GRkxPQURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2RldmljZS5jLTIxLVxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6MjI6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTIzLXN0YXRpYyB2b2lkIF9feGZybV90cmFuc3BvcnRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM9NTI2PXN0YXRpYyBpbnQgeGZybV9hcGlfY2hlY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTUyNy17XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1Mjg6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTUyOS1cXHRpZiAoKGRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0hXX0VTUF9UWF9DU1VNKSBcXHUwMDI2XFx1MDAyNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoyODoyMi4wMDQ5OTMzMTlaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU2ODM4MTYzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIFhGUk0gRGV2aWNlIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNlIGRvd24gd2hlcmUgYHhmcm1fZGV2X3N0YXRlX2FkZGAgaXMgZGVmaW5lZC4gSSBrbm93IGl0J3MgcmVsYXRlZCB0byBYRlJNLCBhbmQgSSdtIHByZXR0eSBzdXJlIGl0J3MgaW52b2x2ZWQgaW4gZGV2aWNlIG1hbmFnZW1lbnQgc29tZWhvdy4gTGV0IG1lIHNlZS4uLiBJJ20gcHJldHR5IHN1cmUgSSd2ZSBzZWVuIGl0IGluIGBuZXQveGZybS9gIGJlZm9yZS4gWWVwLCBgeGZybV9kZXZpY2UuY2Agc2VlbXMgbGlrZSB0aGUgbGlrZWx5IHBsYWNlLiBOb3cgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGZ1bmN0aW9uYWxpdHkgY29uZGl0aW9uYWxseSBjb21waWxlZD8gSSBuZWVkIHRvIGNoZWNrIGlmIGB4ZnJtX2Rldl9zdGF0ZV9hZGRgIGlzIGluc2lkZSBhbiBgI2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURgIGJsb2NrLiBUaGF0J3MgYSBjcnVjaWFsIGRldGFpbC4gSSBuZWVkIHRvIGdldCB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuIFRpbWUgdG8gY3JhY2sgb3BlbiBgbmV0L3hmcm0veGZybV9kZXZpY2UuY2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDIyIOKAkyB0aGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY0NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjI4OjI2LjU3MzM3NzU3NloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Mzc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS94ZnJtX2RldmljZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiB4ZnJtX2RldmljZS5jIC0gSVBzZWMgZGV2aWNlIG9mZmxvYWRpbmcgY29kZS5cXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKGMpIDIwMTUgc2VjdW5ldCBTZWN1cml0eSBOZXR3b3JrcyBBR1xcbiAgIDY6XFx0ICpcXG4gICA3OlxcdCAqIEF1dGhvcjpcXG4gICA4OlxcdCAqIFN0ZWZmZW4gS2xhc3NlcnQgXFx1MDAzY3N0ZWZmZW4ua2xhc3NlcnRAc2VjdW5ldC5jb21cXHUwMDNlXFxuICAgOTpcXHQgKi9cXG4gIDEwOlxcdFxcbiAgMTE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vycm5vLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuICAxNzpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2RzdC5oXFx1MDAzZVxcbiAgMTg6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9nc28uaFxcdTAwM2VcXG4gIDE5OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQveGZybS5oXFx1MDAzZVxcbiAgMjA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcXHUwMDNlXFxuICAyMTpcXHRcXG4gIDIyOlxcdCNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXFxuICAyMzpcXHRzdGF0aWMgdm9pZCBfX3hmcm1fdHJhbnNwb3J0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXFxuICAyNDpcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBoc2l6ZSlcXG4gIDI1OlxcdHtcXG4gIDI2OlxcdFxcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XFxuICAyNzpcXHRcXG4gIDI4OlxcdFxcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XFxuICAyOTpcXHRcXHRpZiAoeG8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9HU09fU0VHTUVOVClcXG4gIDMwOlxcdFxcdFxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciAtPSB4LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuO1xcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHRwc2tiX3B1bGwoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgeC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbik7XFxuICAzMzpcXHR9XFxuICAzNDpcXHRcXG4gIDM1OlxcdHN0YXRpYyB2b2lkIF9feGZybV9tb2RlX3R1bm5lbF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAgMzY6XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBoc2l6ZSlcXG4gIDM3OlxcdFxcbiAgMzg6XFx0e1xcbiAgMzk6XFx0XFx0c3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTtcXG4gIDQwOlxcdFxcbiAgNDE6XFx0XFx0aWYgKHhvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fR1NPX1NFR01FTlQpXFxuICA0MjpcXHRcXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICsgaHNpemU7XFxuICA0MzpcXHRcXG4gIDQ0OlxcdFxcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XFxuICA0NTpcXHRcXHRwc2tiX3B1bGwoc2tiLFxcbiAgNDY6XFx0XFx0XFx0ICBza2ItXFx1MDAzZW1hY19sZW4gKyB4LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuIC0geC1cXHUwMDNlcHJvcHMuZW5jX2hkcl9sZW4pO1xcbiAgNDc6XFx0fVxcbiAgNDg6XFx0XFxuICA0OTpcXHRzdGF0aWMgdm9pZCBfX3hmcm1fbW9kZV9iZWV0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXFxuICA1MDpcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBoc2l6ZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6Mjg6MjYuNTczNDcyODU2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNjI1MzM1MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb25kaXRpb25hbCBDb21waWxhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSBhIGAjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRGAgc3RhdGVtZW50LiBSaWdodCwgdGhpcyBsb29rcyBsaWtlIGEgZmVhdHVyZSBnYXRlLCBtZWFuaW5nIGEgY2h1bmsgb2YgY29kZSBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGEga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24sIGFzIGFsd2F5cyB3aGVuIGRlYWxpbmcgd2l0aCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBsaWtlIHRoaXMsIGlzOiB3aGVyZSBkb2VzIHRoaXMgY29uZGl0aW9uYWwgYmxvY2sgKmVuZCo/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhpcyBwYXJ0aWN1bGFyIGAjaWZkZWZgLiBJcyBpdCBhIHNob3J0IGJsb2NrLCBvciBhIGxvbmdlciBvbmUgdGhhdCBzcGFucyBtdWx0aXBsZSBmdW5jdGlvbnMgb3IgZXZlbiBmaWxlcz8gVGhlIGxlbmd0aCBvZiBpdCB3aWxsIGltcGFjdCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBhIHNwZWNpZmljIGZlYXR1cmUgaXMgaGFuZGxlZCwgZXNwZWNpYWxseSB3aGVuIEknbSBkZWJ1Z2dpbmcgb3IgdHJhY2luZyB0aGUgY29udHJvbCBmbG93LiBHb3R0YSBmaW5kIHRoYXQgYCNlbmRpZmAhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzI5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoyODozMC45MzYwMDkzNjdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MzkxODM3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZW5kaWYuKkNPTkZJR19YRlJNX09GRkxPQURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6Mjg6MzAuOTg0NDA1Mjk0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDExMzg1NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgc3VtbWFyaXplZCwgdGFyZ2V0aW5nIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgYCNlbmRpZmAgaW4gYG5ldC94ZnJtL3hmcm1fZGV2aWNlLmNgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBuZXQveGZybS94ZnJtX2RldmljZS5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGAjZW5kaWZgIGRpcmVjdGl2ZXMgd2l0aGluIHRoYXQgZmlsZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGVuc3VyaW5nIHByb3BlciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgYXZvaWRpbmcgYW55IHBvdGVudGlhbCBwcmVwcm9jZXNzb3IgcGl0ZmFsbHMuIEdpdmVuIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBYRlJNIHN1YnN5c3RlbSwgZXZlbiBzZWVtaW5nbHkgYmVuaWduIGAjZW5kaWZgIGRpcmVjdGl2ZXMgY2FuIGhhdmUgaW1wbGljYXRpb25zIGZvciBkaWZmZXJlbnQgYnVpbGQgY29uZmlndXJhdGlvbnMsIGtlcm5lbCB2ZXJzaW9ucywgb3IgZW5hYmxlZCBmZWF0dXJlcy5cblxuSSdtIHRoaW5raW5nLCBhcmUgdGhlcmUgYW55IHVudXN1YWwgbmVzdGluZyBzdHJ1Y3R1cmVzPyBBbSBJIHNlZWluZyBhbnkgcG90ZW50aWFsIGZvciBtaXNtYXRjaGVkIGAjaWZkZWZgL2AjaWZuZGVmYCBwYWlycyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBjb2RlIGluY2x1c2lvbiBvciBleGNsdXNpb24/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGFueSBhcmVhcyB3aGVyZSBhIG1pc3Npbmcgb3IgbWlzcGxhY2VkIGAjZW5kaWZgIG1pZ2h0IGJlIGNhdXNpbmcgaXNzdWVzLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byB0aGUgZGV2aWNlIG1hbmFnZW1lbnQgc2lkZSBvZiBYRlJNLiBBIGNvbW1vbiBpc3N1ZSBtaWdodCBiZSBkaWZmZXJpbmcgZGVmaW5pdGlvbnMgaW4gdmFyaW91cyBjb25maWd1cmF0aW9uIHN0YXRlcy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgZGV2aWNlIHJlZ2lzdHJhdGlvbi9kZXJlZ2lzdHJhdGlvbiwgb3IgcGVyaGFwcyBldmVuIGluIHRoZSBoYW5kbGluZyBvZiBYRlJNIGRldmljZXMgd2l0aCB2YXJ5aW5nIGNhcGFiaWxpdGllcy4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzIHN1YnN5c3RlbSwgSSdtIG9uIHRoZSBsb29rb3V0IGZvciBhbnl0aGluZyB0aGF0IGNvdWxkIGFmZmVjdCBob3cgWEZSTSBpbnRlcmFjdHMgd2l0aCBuZXR3b3JrIGludGVyZmFjZXMgYW5kIHJvdXRpbmcuIE15IG1haW4gZ29hbCBpcyB0byBzZWUgaWYgYW55IG9idmlvdXMgdnVsbmVyYWJpbGl0aWVzIGV4aXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODk3MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjI4OjM0LjgyNTU0NzI4MloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3NDA0NzM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZW5kaWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2RldmljZS5jPTUwMz12b2lkIHhmcm1fZGV2X2JhY2tsb2coc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QpXFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTUyMy19XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1MjQ6I2VuZGlmXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01MjUtXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYz01MjY9c3RhdGljIGludCB4ZnJtX2FwaV9jaGVjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NDAtXFx0XFx0cmV0dXJuIE5PVElGWV9CQUQ7XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1NDE6I2VuZGlmXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NDItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjI4OjM1Ljk5OTYwMjIxMloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzI3NzU3NTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYENPTkZJR19YRlJNX09GRkxPQURgIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kLCByaWdodCwgbGluZSA1MjQgd2l0aCB0aGUgYCNlbmRpZmAgY2xlYXJseSBjbG9zZXMgdGhlIGAjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRGAgYmxvY2suIE1ha2VzIHNlbnNlLiBOb3csIGB4ZnJtX2Rldl9zdGF0ZV9hZGRgIGlzIGRlZmluZWQgYXQgbGluZSAyMzkuIFRoYXQncyAqaW5zaWRlKiB0aGUgY29uZGl0aW9uYWwgYmxvY2ssIHNvIGBDT05GSUdfWEZSTV9PRkZMT0FEYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlIGZvciB0aGlzIGZ1bmN0aW9uLiBUaGlzIGFsc28gbWVhbnMgYENPTkZJR19YRlJNX09GRkxPQURgICptdXN0KiBiZSBzZXQgaW4gb3JkZXIgdG8gcmVhY2ggdGhlIGNvZGUgd2hlcmUgYHhzby1cdTAwM2VkZXZgIGlzIGFzc2lnbmVkLCB3aGljaCwgaW4gdHVybiwgaXMgYSBjcml0aWNhbCBwaWVjZSBpbiB0cmlnZ2VyaW5nIHRoZSBidWcgaW4gYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYC5cblxuSG1tLCBub3cgbGV0IG1lIGp1c3QgY2hlY2suLi4gUmlnaHQsIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgaXMgY2FsbGVkIGZyb20gYm90aCBgeGZybV9kZXZfZG93bmAgYW5kIGB4ZnJtX2Rldl91bnJlZ2lzdGVyYC4gVGhvc2UgYXJlIGRlZmluZWQgaW4gYG5ldC94ZnJtL3hmcm1fZGV2aWNlLmNgLiBTbyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpc3N1ZSBhbmQgd2hlbiB0aGUgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpcyBjYWxsZWQgSSBzaG91bGQgZG91YmxlIGNoZWNrIGlmIGB4ZnJtX2Rldl9kb3duYCBpcyBhbHNvIHByb3RlY3RlZCBieSBgI2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTUwMiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODoyODo0Mi43MjczNjIyMjJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV9kZXZpY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MjA6XFx0XFx0XFx0eGZybV9kZXZfcmVzdW1lKHNrYik7XFxuIDUyMTpcXHRcXHR9XFxuIDUyMjpcXHRcXG4gNTIzOlxcdH1cXG4gNTI0OlxcdCNlbmRpZlxcbiA1MjU6XFx0XFxuIDUyNjpcXHRzdGF0aWMgaW50IHhmcm1fYXBpX2NoZWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIDUyNzpcXHR7XFxuIDUyODpcXHQjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxcbiA1Mjk6XFx0XFx0aWYgKChkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9IV19FU1BfVFhfQ1NVTSkgXFx1MDAyNlxcdTAwMjZcXG4gNTMwOlxcdFxcdCAgICAhKGRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0hXX0VTUCkpXFxuIDUzMTpcXHRcXHRcXHRyZXR1cm4gTk9USUZZX0JBRDtcXG4gNTMyOlxcdFxcbiA1MzM6XFx0XFx0aWYgKChkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9IV19FU1ApIFxcdTAwMjZcXHUwMDI2XFxuIDUzNDpcXHRcXHQgICAgKCEoZGV2LVxcdTAwM2V4ZnJtZGV2X29wcyBcXHUwMDI2XFx1MDAyNlxcbiA1MzU6XFx0XFx0ICAgICAgIGRldi1cXHUwMDNleGZybWRldl9vcHMtXFx1MDAzZXhkb19kZXZfc3RhdGVfYWRkIFxcdTAwMjZcXHUwMDI2XFxuIDUzNjpcXHRcXHQgICAgICAgZGV2LVxcdTAwM2V4ZnJtZGV2X29wcy1cXHUwMDNleGRvX2Rldl9zdGF0ZV9kZWxldGUpKSlcXG4gNTM3OlxcdFxcdFxcdHJldHVybiBOT1RJRllfQkFEO1xcbiA1Mzg6XFx0I2Vsc2VcXG4gNTM5OlxcdFxcdGlmIChkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgKE5FVElGX0ZfSFdfRVNQIHwgTkVUSUZfRl9IV19FU1BfVFhfQ1NVTSkpXFxuIDU0MDpcXHRcXHRcXHRyZXR1cm4gTk9USUZZX0JBRDtcXG4gNTQxOlxcdCNlbmRpZlxcbiA1NDI6XFx0XFxuIDU0MzpcXHRcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuIDU0NDpcXHR9XFxuIDU0NTpcXHRcXG4gNTQ2OlxcdHN0YXRpYyBpbnQgeGZybV9kZXZfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiA1NDc6XFx0e1xcbiA1NDg6XFx0XFx0aWYgKGRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0hXX0VTUCkge1xcbiA1NDk6XFx0XFx0XFx0eGZybV9kZXZfc3RhdGVfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xcbiA1NTA6XFx0XFx0XFx0eGZybV9kZXZfcG9saWN5X2ZsdXNoKGRldl9uZXQoZGV2KSwgZGV2LCB0cnVlKTtcXG4gNTUxOlxcdFxcdH1cXG4gNTUyOlxcdFxcbiA1NTM6XFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbiA1NTQ6XFx0fVxcbiA1NTU6XFx0XFxuIDU1NjpcXHRzdGF0aWMgaW50IHhmcm1fZGV2X3VucmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gNTU3OlxcdHtcXG4gNTU4OlxcdFxcdHhmcm1fZGV2X3N0YXRlX2ZsdXNoKGRldl9uZXQoZGV2KSwgZGV2LCB0cnVlKTtcXG4gNTU5OlxcdFxcdHhmcm1fZGV2X3BvbGljeV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XFxuIDU2MDpcXHRcXG4gNTYxOlxcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4gNTYyOlxcdH1cXG4gNTYzOlxcdFxcbiA1NjQ6XFx0c3RhdGljIGludCB4ZnJtX2Rldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcXG4gNTY1OlxcdHtcXG4gNTY2OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcXG4gNTY3OlxcdFxcbiA1Njg6XFx0XFx0c3dpdGNoIChldmVudCkge1xcbiA1Njk6XFx0XFx0Y2FzZSBORVRERVZfUkVHSVNURVI6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjI4OjQyLjcyNzQ0MjI3MloiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTIwOTAwOTc0NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFhGUk0gRGV2aWNlIFJlZ2lzdHJhdGlvbiBhbmQgU3RhdGUgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGB4ZnJtX2Rldl9kb3duYCBhbmQgYHhmcm1fZGV2X3VucmVnaXN0ZXJgIGZ1bmN0aW9ucy4gVGhleSdyZSBkZWZpbmVkIG91dHNpZGUgdGhlIGAjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRGAgYmxvY2ssIHdoaWNoIHNlZW1zIGEgYml0IG1pc2xlYWRpbmcgYXQgZmlyc3QgZ2xhbmNlLiBIb3dldmVyLCBJIHNlZSB0aGF0IHRoZXkgKm9ubHkqIGRvIGFueXRoaW5nIHNpZ25pZmljYW50IHdoZW4gYHhzby1cdTAwM2VkZXYgPT0gZGV2YCB3aXRoaW4gYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYC4gQW5kLCBob2xkIG9uLCBgeHNvLVx1MDAzZWRldmAgaXMgKm9ubHkqIHNldCBpZiBgQ09ORklHX1hGUk1fT0ZGTE9BRGAgaXMgYWN0dWFsbHkgZW5hYmxlZC4gVGhlcmVmb3JlLCBgQ09ORklHX1hGUk1fT0ZGTE9BRGAgaXMgY2xlYXJseSBhIHJlcXVpcmVtZW50IGZvciB0aGVzZSBmdW5jdGlvbnMgdG8gaGF2ZSBhbnkgcHJhY3RpY2FsIGltcGFjdCwgYW5kIGBDT05GSUdfWEZSTWAgaXMgcmVxdWlyZWQgYXMgd2VsbC5cblxuQnV0LCBoYW5nIG9uLCBsZXQgbWUgcmV2aXNpdCB0aGlzLiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIGFsc28gY2FsbGVkIHVuY29uZGl0aW9uYWxseSBmcm9tIGB4ZnJtX2Rldl91bnJlZ2lzdGVyYC4gRXZlbiB0aGVuLCBJdCBzZWVtcyBhcyB0aG91Z2ggYENPTkZJR19YRlJNX09GRkxPQURgIGlzIG5lZWRlZCB0byBhY3R1YWxseSB1dGlsaXplIHRoZSBtb2RpZmllZCBjb2RlIHBhdGggaW4gYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCB3aGVyZSBgeHNvLVx1MDAzZWRldiA9PSBkZXZgIGlzIHRydWUuXG5cblRoZW4sIEknbSB0cmFjaW5nIGJhY2sgdG8gdGhlIGNhbGwgc3RhY2sgb2YgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgLiBJIHNlZSB0aGF0IGl0J3MgY2FsbGVkIGZyb20gYHhmcm1fc3RhdGVfZ2NfZGVzdHJveWAsIHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgZnJvbSBgeGZybV9zdGF0ZV9nY190YXNrYC4gYHhmcm1fc3RhdGVfZ2NfZGVzdHJveWAgY2FsbHMgYHhmcm1fZGV2X3N0YXRlX2ZyZWUoeClgIHVuY29uZGl0aW9uYWxseS4gSW4gYHhmcm1fZGV2X3N0YXRlX2ZyZWVgIEkgc2VlIHRoYXQgdGhlcmUgaXMgdGhpcyBjb2RlOlxuXG5gYGBjXG5cdGlmIChkZXYgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2V4ZnJtZGV2X29wcykge1xuXHRcdHNwaW5fbG9ja19iaChcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcblx0XHRpZiAoIWhsaXN0X3VuaGFzaGVkKFx1MDAyNngtXHUwMDNlZGV2X2djbGlzdCkpXG5cdFx0XHRobGlzdF9kZWxfaW5pdChcdTAwMjZ4LVx1MDAzZWRldl9nY2xpc3QpO1xuXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuYGBgXG5cblRoaXMgKnJlcXVpcmVzKiBgZGV2YCB0byBiZSBub24tTlVMTCwgcmlnaHQ/IFdoaWNoIG1lYW5zIGl0IHJlcXVpcmVzIGB4c28tXHUwMDNlZGV2YC4gVGhlcmVmb3JlLCBgeHNvLVx1MDAzZWRldmAgbXVzdCBiZSBub24tTlVMTCBoZXJlLiBTbywganVzdCBsaWtlIGJlZm9yZSwgYENPTkZJR19YRlJNX09GRkxPQURgIGlzIGVzc2VudGlhbCBmb3IgcmVhY2hpbmcgdGhlIG1vZGlmaWVkIGNvZGUgd2l0aGluIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCBhcyB3ZWxsLlxuXG5Ob3csIGxldCBtZSBqdXN0IHF1aWNrbHkgcnVuIHRocm91Z2ggbXkgaGVhZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYENPTkZJR19YRlJNX1VTRVJgIG1pZ2h0IGJlIG5lZWRlZCBpZiB1c2Vyc3BhY2UgY29uZmlndXJhdGlvbiBvZiBYRlJNIHN0YXRlcyBpcyBpbnZvbHZlZC4gTGV0IG1lIGRvdWJsZS1jaGVjayBgbmV0L3hmcm0vS2NvbmZpZ2AgdG8gY29uZmlybSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgYmUgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzU2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6MzM6MzQuODE3NTQyOTM1WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQzMTA4NjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX1VTRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9MjI9aWYgSU5FVFxcbm5ldC94ZnJtL0tjb25maWc6MjM6Y29uZmlnIFhGUk1fVVNFUlxcbm5ldC94ZnJtL0tjb25maWctMjQtXFx0dHJpc3RhdGUgXFxcIlRyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTMxLVxcbm5ldC94ZnJtL0tjb25maWc6MzI6Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcXG5uZXQveGZybS9LY29uZmlnLTMzLVxcdHRyaXN0YXRlIFxcXCJDb21wYXRpYmxlIEFCSSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODozMzozNi4wNjA2NTYxM1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDE4NjQ3ODY3NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlhGUk0gQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5IEFuYWx5c2lzKipcblxuUmlnaHQsIHNvIHRvIGdldCBYRlJNIHN0YXRlcyBwcm9wZXJseSBjb25maWd1cmVkLCBJJ20gYWJzb2x1dGVseSBnb2luZyB0byBuZWVkIGBDT05GSUdfWEZSTV9VU0VSYC4gVGhhdCBtdWNoIGlzIG9idmlvdXMuIE5vdywgYSBjcnVjaWFsIGZvbGxvdy11cCBxdWVzdGlvbiBhbHdheXMgcG9wcyB1cDogRG9lcyBgQ09ORklHX1hGUk1fT0ZGTE9BRGAgaGF2ZSBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIG9yIHJlbGF0aW9uc2hpcHMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBCZXN0IHRvIGNsYXJpZnkgdGhhdCBiZWZvcmUgbW92aW5nIGZvcndhcmQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBjb25maWd1cmF0aW9uIG1hdHJpeC4gTGV0IG1lIGludmVzdGlnYXRlIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBjb25zaWRlciBmb3IgdGhpcyB0byB3b3JrIGFwcHJvcHJpYXRlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxOTg5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6MzY6NTcuOTI1NDQ2MDg3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI2NjEzMDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX09GRkxPQURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xMC1cXG5uZXQveGZybS9LY29uZmlnOjExOmNvbmZpZyBYRlJNX09GRkxPQURcXG5uZXQveGZybS9LY29uZmlnLTEyLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6MzY6NTkuMTUyMDY2MDAzWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwNzI0Njc3MTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHN1bW1hcnk6XG5cbioqQW5hbHl6aW5nIGEgQm9vbGVhbiBEZWNpc2lvbioqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYSBgYm9vbGAgdmFyaWFibGUgaGVyZSwgYW5kIHRoZXJlJ3Mgbm8gZXhwbGljaXQgdXNlciBwcm9tcHQgb3IgY29uZmlndXJhdGlvbiBhc3NvY2lhdGVkIHdpdGggaXQuIFRoYXQgbWVhbnMgaXRzIHN0YXRlIOKAkyB0cnVlIG9yIGZhbHNlIOKAkyBpcyBiZWluZyBkZXRlcm1pbmVkIHVwc3RyZWFtLCBsaWtlbHkgdGhyb3VnaCBzb21lIG90aGVyIGNvbmZpZ3VyYXRpb24gb3IgYSBjb25kaXRpb25hbCBjaGVjay4gTXkgcHJpbWFyeSBxdWVzdGlvbiBpcywgd2hhdCdzIGRyaXZpbmcgdGhpcz8gSSBuZWVkIHRvIHRyYWNlIHRoZSBsb2dpYyBhbmQgZmlndXJlIG91dCAqd2hhdCogaXMgc2VsZWN0aW5nIGBYRlJNX09GRkxPQURgLiBVbmRlcnN0YW5kaW5nIHRoYXQgdXBzdHJlYW0gZGVwZW5kZW5jeSBpcyBjcnVjaWFsIHRvIGdyYXNwaW5nIHRoZSBvdmVyYWxsIHN5c3RlbSBiZWhhdmlvci4gV2hlcmUgaXMgdGhpcyBmbGFnIGFjdHVhbGx5IGJlaW5nIHNldD8gTGV0J3MgZGlnIGluIGFuZCBmaW5kIHRoZSBkZXBlbmRlbmN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI3MywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjM4OjE5Ljg3Njc0NTY3MVoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg2Nzg1NjU2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgWEZSTV9PRkZMT0FEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTM2OT1jb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zNzEtXFx0ZGVwZW5kcyBvbiBJTkVUX0VTUFxcbm5ldC9pcHY0L0tjb25maWc6MzcyOlxcdHNlbGVjdCBYRlJNX09GRkxPQURcXG5uZXQvaXB2NC9LY29uZmlnLTM3My1cXHRkZWZhdWx0IG5cXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9Nzc9Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTc5LVxcdGRlcGVuZHMgb24gSU5FVDZfRVNQXFxubmV0L2lwdjYvS2NvbmZpZzo4MDpcXHRzZWxlY3QgWEZSTV9PRkZMT0FEXFxubmV0L2lwdjYvS2NvbmZpZy04MS1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6Mzg6MjIuNzQ0NjA4NTk1WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTM2NTI3MjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkVTUCBPZmZsb2FkIENvbmZpZ3VyYXRpb24gLSBUaGUgUGF0aCBGb3J3YXJkKipcblxuUmlnaHQsIHNvIGl0J3MgYmVjb21lIGNsZWFyOiBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUNl9FU1BfT0ZGTE9BRGAgYm90aCBhdXRvbWF0aWNhbGx5IHRyaWdnZXIgYFhGUk1fT0ZGTE9BRGAuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgdGhlIG9mZmxvYWQgZnVuY3Rpb25hbGl0eSBpcyBrZXkuIFRoZXJlZm9yZSwgZW5hYmxpbmcgdGhvc2UgdHdvIG9wdGlvbnMgaXMgdGhlIG9idmlvdXMgbmV4dCBzdGVwLiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhhdCwgdGhvdWdoLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgYW5kIG1ha2Ugc3VyZSBub3RoaW5nIGVsc2UgaXMgYWxzbyBzZWxlY3RpbmcgYFhGUk1fT0ZGTE9BRGAuIFRoZXJlIG1pZ2h0IGJlIG90aGVyIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Ygb3Igb3RoZXIgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZmlndXJhdGlvbiBjaGFuZ2UgdGhhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIEJlc3QgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNjQ4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6Mzg6NTkuODgxMTM5MjM3WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDExMzU5ODEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBYRlJNX09GRkxPQURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODozOTowMC4wMjIyODE5ODhaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzNTE2MzEyNjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkVTUCBPZmZsb2FkIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUgRVNQIG9mZmxvYWQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nLCB0aGUga2V5IHBsYXllcnMgaGVyZSBzZWVtIHRvIGJlIGBJTkVUX0VTUF9PRkZMT0FEYCBhbmQgYElORVQ2X0VTUF9PRkZMT0FEYC4gSG93ZXZlciwgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJJ2xsIG1ha2Ugc3VyZSB0byBpbmNsdWRlIGBJTkVUX0VTUF9PRkZMT0FEYCwgYElORVQ2X0VTUF9PRkZMT0FEYCwgYWxvbmcgd2l0aCB0aGUgY3J1Y2lhbCBgWEZSTV9VU0VSYCBhbmQgYFhGUk1gIG9wdGlvbnMsIGFzIHRoZXkncmUgZm91bmRhdGlvbmFsIGZvciB0aGUgdHJhbnNmb3JtIGxheWVyLiBXYWl0IGEgbWludXRlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnkgZGVwZW5kZW5jaWVzIC0gSSBhbHNvIG5lZWQgdG8gaW5jbHVkZSBgSU5FVF9FU1BgIGFuZCBgSU5FVDZfRVNQYCBhcyB3ZWxsLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBhbmQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucywgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYG5ldC9pcHY0L0tjb25maWdgIGZpbGUgZm9yIHRoZSBgSU5FVF9FU1BfT0ZGTE9BRGAgZGVwZW5kZW5jeSwganVzdCB0byBzb2xpZGlmeSBteSBtZW50YWwgbW9kZWwuIFRoaXMgd2F5IEkgY2FuIHZlcmlmeSBteSB1bmRlcnN0YW5kaW5nIGFuZCBhdm9pZCBtYWtpbmcgYW55IG1pc3Rha2VzIGluIG15IGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODkzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6NDA6NTMuNTM4NTk4NDM3WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY2MDA3NjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTM1ND1jb25maWcgSU5FVF9FU1BcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzY4LVxcbm5ldC9pcHY0L0tjb25maWc6MzY5OmNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxubmV0L2lwdjQvS2NvbmZpZy0zNzAtXFx0dHJpc3RhdGUgXFxcIklQOiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6NDA6NTQuODA0NjEyMzU5WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2Mjc5MDUxNjczNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRVNQIE9mZmxvYWQgQ29uZmlndXJhdGlvbiBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgRVNQIG9mZmxvYWQgaXMgY29uZmlndXJlZC4gSXQgbG9va3MgbGlrZSBgSU5FVF9FU1BfT0ZGTE9BRGAgaXMgYSB0cmlzdGF0ZSB3aXRoIGEgcHJvbXB0LiBJIHNob3VsZCBhZGQgYm90aCBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUNl9FU1BfT0ZGTE9BRGAgdG8gdGhlIEVuYWJsZUNvbmZpZ3MuIFRoYXQgbWFrZXMgc2Vuc2UsIHRob3NlIGFyZSB0aGUga2V5IHRoaW5ncyB0byBlbmFibGUuXG5cbkxldCdzIGRvIGEgcXVpY2sgcmVjYXAgb2YgdGhlIGNvbmZpZ3Mgd2UncmUgZGVhbGluZyB3aXRoOiBgWEZSTWAsIGBYRlJNX1VTRVJgLCBgSU5FVF9FU1BgLCBgSU5FVF9FU1BfT0ZGTE9BRGAsIGBJTkVUNl9FU1BgLCBhbmQgYElORVQ2X0VTUF9PRkZMT0FEYC5cblxuSG1tLCB3YWl0LiBgWEZSTV9PRkZMT0FEYCBpcyBhY3R1YWxseSBzZWxlY3RlZCBieSBgSU5FVF9FU1BfT0ZGTE9BRGAuIFNob3VsZCBJIGJvdGhlciBwdXR0aW5nIGl0IG9uIHRoZSBsaXN0PyBObywgaXQgZG9lc24ndCBoYXZlIGEgcHJvbXB0LCBzbyBpdCBjYW4ndCBiZSBkaXJlY3RseSBlbmFibGVkIGluIHRoZSBgLmNvbmZpZ2AgZmlsZS4gSXQgKmhhcyogdG8gYmUgc2VsZWN0ZWQgYnkgZWl0aGVyIGBJTkVUX0VTUF9PRkZMT0FEYCBvciBgSU5FVDZfRVNQX09GRkxPQURgLiBPa2F5LCBzbyBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUNl9FU1BfT0ZGTE9BRGAgYXJlIHRoZSByaWdodCBvbmVzIHRvIGZvY3VzIG9uLlxuXG5Ob3csIGxldCdzIHN3aXRjaCBnZWFycyBhbmQgZXhhbWluZSBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGFuZCBgeGZybV9kZXZfc3RhdGVfZnJlZWAuIEdvb2QsIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgaXMgZXhwb3J0ZWQgYW5kIGlzbid0IHN0YXRpYy4gYHhmcm1fZGV2X3N0YXRlX2ZyZWVgIGlzIGFsc28gbm90IHN0YXRpYy4gU28sIGJvdGggb2YgdGhlc2UgYXJlIHBvdGVudGlhbCBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIGFuYWx5c2lzLlxuXG5XYWl0IGEgc2Vjb25kLCBgeGZybV9kZXZfc3RhdGVfZnJlZWAgaXMgY2FsbGVkIGZyb20gYHhmcm1fc3RhdGVfZ2NfZGVzdHJveWAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGZyb20gYHhmcm1fc3RhdGVfZ2NfdGFza2AuIEFuZCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIGNhbGxlZCBmcm9tIGB4ZnJtX2Rldl9kb3duYCBhbmQgYHhmcm1fZGV2X3VucmVnaXN0ZXJgLiBPa2F5LiBBcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHdlcmUgbW9kaWZpZWQ/IE5vLCBqdXN0IHRob3NlIHR3by5cblxuT2theSwgbm93IGxldCdzIGRvdWJsZS1jaGVjayBpZiBgeGZybV9kZXZfc3RhdGVfZnJlZWAgaXMgaW5saW5lZC4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQncyBkZWZpbmVkIGluIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgIGFuZCBpcyBhbHNvIGNhbGxlZCBmcm9tIHRoZXJlLiBJdCdzIGFjdHVhbGx5IGNhbGxlZCBmcm9tIGB4ZnJtX3N0YXRlX2djX2Rlc3Ryb3lgICphbmQqIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgc28gdGhlIGZ1bmN0aW9uIGlzIGluIGB4ZnJtX3N0YXRlLmNgLiBDYW4gdGhlIGNvbXBpbGVyIGlubGluZSB0aGlzPyBJdCdzIG5vdCBtYXJrZWQgYGlubGluZWAuIEl0IGlzIGEgcmVndWxhciBmdW5jdGlvbi4gVGhlIHF1ZXN0aW9uIG5vdyBpcyBpZiBpdCdzIGV4cG9ydGVkLiBOb3BlLCBpdCdzIG5vdCBleHBvcnRlZC4gQnV0IGl0J3MgYWxzbyAqbm90KiBzdGF0aWMsIHNvIHRoZSBjb21waWxlciBjYW4ndCBpbmxpbmUgaXQgYWNyb3NzIHRyYW5zbGF0aW9uIHVuaXRzLiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIGl0J3Mgb25seSBjYWxsZWQgZnJvbSB3aXRoaW4gYHhmcm1fc3RhdGUuY2AuIFdhaXQsIGlzIHRoYXQgdHJ1ZT8gTGV0IG1lIHZlcmlmeS4gSXMgaXQgZGVjbGFyZWQgaW4gYSBoZWFkZXI/IEkgbmVlZCB0byBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzMzYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6NDU6MTcuNTk1MTMyMjM3WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ3NjEwMjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fZGV2X3N0YXRlX2ZyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3hmcm0uaD0yMTMxPXZvaWQgeGZybV9kZXZfc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTtcXG5pbmNsdWRlL25ldC94ZnJtLmg6MjEzMjp2b2lkIHhmcm1fZGV2X3N0YXRlX2ZyZWUoc3RydWN0IHhmcm1fc3RhdGUgKngpO1xcbmluY2x1ZGUvbmV0L3hmcm0uaC0yMTMzLVxcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oPTIyMDM9c3RhdGljIGlubGluZSB2b2lkIHhmcm1fZGV2X3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbmluY2x1ZGUvbmV0L3hmcm0uaC0yMjA2LVxcbmluY2x1ZGUvbmV0L3hmcm0uaDoyMjA3OnN0YXRpYyBpbmxpbmUgdm9pZCB4ZnJtX2Rldl9zdGF0ZV9mcmVlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbmluY2x1ZGUvbmV0L3hmcm0uaC0yMjA4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6NDU6MTkuMDQyNzQ3NjI2WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzMzk1NzU4NTg1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqWEZSTSBLZXkgTGVuZ3RocyBhbmQgSW5saW5lIEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoZSBYRlJNIGNvZGUsIHNwZWNpZmljYWxseSBrZXkgbGVuZ3Rocy4gVGhlIGRlY2xhcmF0aW9uIEkgbmVlZCBpcyBpbiBgaW5jbHVkZS9uZXQveGZybS5oYC4gT2theSwgZ290IGl0LiBIbW0sIGludGVyZXN0aW5nLi4uIHRoZXJlJ3MgYSAqc3RhdGljIGlubGluZSogdmVyc2lvbiBkZWZpbmVkIGFzIHdlbGw/IFRoYXQncyBhIGNsYXNzaWMgb3B0aW1pemF0aW9uIHRlY2huaXF1ZSwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGJvdGggdGhlIG1haW4gZGVjbGFyYXRpb24gYW5kIHRoZSBpbmxpbmUgdmFyaWFudC4gR290dGEgc2VlIGhvdyB0aGV5IGludGVyYWN0LiBMZXQncyBkaWcgZGVlcGVyLiBUbyBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSSdsbCBqdW1wIHRvIGFyb3VuZCBsaW5lIDIyMDcgaW4gYGluY2x1ZGUvbmV0L3hmcm0uaGAgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkZXRhaWxzIEkgbmVlZCB0byBldmFsdWF0ZSB0aGUgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBhbmQgZmlndXJlIG91dCBleGFjdGx5IGhvdyB0aGVzZSBrZXkgbGVuZ3RocyBhcmUgaGFuZGxlZCBhbmQgb3B0aW1pemVkIHdpdGhpbiB0aGUgWEZSTSBmcmFtZXdvcmsuIFRoaXMgaXMgYSBjcml0aWNhbCBhcmVhIGZvciBwZXJmb3JtYW5jZSwgc28gdW5kZXJzdGFuZGluZyB0aGUgaW5saW5lIGltcGxpY2F0aW9ucyBpcyBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0ODE1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6NDk6MTMuMDAwMzM3MDc4WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC94ZnJtLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjE5NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE5NTpcXHRcXG4yMTk2OlxcdHN0YXRpYyBpbmxpbmUgaW50IHhmcm1fZGV2X3N0YXRlX2FkZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbjIxOTc6XFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgeGZybV91c2VyX29mZmxvYWQgKnh1byxcXG4yMTk4OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbjIxOTk6XFx0e1xcbjIyMDA6XFx0XFx0cmV0dXJuIDA7XFxuMjIwMTpcXHR9XFxuMjIwMjpcXHRcXG4yMjAzOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCB4ZnJtX2Rldl9zdGF0ZV9kZWxldGUoc3RydWN0IHhmcm1fc3RhdGUgKngpXFxuMjIwNDpcXHR7XFxuMjIwNTpcXHR9XFxuMjIwNjpcXHRcXG4yMjA3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCB4ZnJtX2Rldl9zdGF0ZV9mcmVlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbjIyMDg6XFx0e1xcbjIyMDk6XFx0fVxcbjIyMTA6XFx0XFxuMjIxMTpcXHRzdGF0aWMgaW5saW5lIGludCB4ZnJtX2Rldl9wb2xpY3lfYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHhmcm1fcG9saWN5ICp4cCxcXG4yMjEyOlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB4ZnJtX3VzZXJfb2ZmbG9hZCAqeHVvLCB1OCBkaXIsXFxuMjIxMzpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMjIxNDpcXHR7XFxuMjIxNTpcXHRcXHRyZXR1cm4gMDtcXG4yMjE2OlxcdH1cXG4yMjE3OlxcdFxcbjIyMTg6XFx0c3RhdGljIGlubGluZSB2b2lkIHhmcm1fZGV2X3BvbGljeV9kZWxldGUoc3RydWN0IHhmcm1fcG9saWN5ICp4KVxcbjIyMTk6XFx0e1xcbjIyMjA6XFx0fVxcbjIyMjE6XFx0XFxuMjIyMjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgeGZybV9kZXZfcG9saWN5X2ZyZWUoc3RydWN0IHhmcm1fcG9saWN5ICp4KVxcbjIyMjM6XFx0e1xcbjIyMjQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODo0OToxMy4wMDA0ODU0NjhaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY3MTI1NDU3MTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgeGZybSBPZmZsb2FkIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGBzdGF0aWMgaW5saW5lYCB2ZXJzaW9uIGlzIGJlaW5nIHVzZWQgc3BlY2lmaWNhbGx5IHdoZW4gYENPTkZJR19YRlJNX09GRkxPQURgIGlzbid0IGRlZmluZWQuIFRoYXQgc3VnZ2VzdHMgdGhhdCB0aGVyZSdzIGFuIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uLCBwcmVzdW1hYmx5IG9wdGltaXplZCBmb3IgaGFyZHdhcmUgb2ZmbG9hZCwgdGhhdCBraWNrcyBpbiB3aGVuIHRoZSBvZmZsb2FkIGZlYXR1cmUgKmlzKiBlbmFibGVkLiBUaGlzIGJlZ3MgdGhlIHF1ZXN0aW9uOiBXaGF0J3MgdGhlIGV4YWN0IG5hdHVyZSBvZiB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgaW5saW5lIHZlcnNpb24gYW5kIHRoZSBvZmZsb2FkIHZlcnNpb24uIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGAjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRGAgYmxvY2sgaW4gYGluY2x1ZGUvbmV0L3hmcm0uaGAgdG8gc2VlIGhvdyB0aGVzZSBhcmUgaGFuZGxlZCBhbmQgZXhhY3RseSBob3cgdGhlIGNvZGUgYnJhbmNoZXMuIFRoZSBoZWFkZXIgZmlsZSBzaG91bGQgZ2l2ZSBtZSB0aGUgZnVsbCBwaWN0dXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHNwZWNpZmljIHBpZWNlIGZpdHMgaW50byB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU1MzYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjUyOjAwLjEyNTk0NTNaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTUzNDEzMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1hGUk1fT0ZGTE9BRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC94ZnJtLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQveGZybS5oPTE3MjE9dm9pZCB4ZnJtX3N0YXRlX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgbmV0ICpuZXQpO1xcbmluY2x1ZGUvbmV0L3hmcm0uaDoxNzIyOiNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXFxuaW5jbHVkZS9uZXQveGZybS5oLTE3MjMtc3RhdGljIGlubGluZSB2b2lkIHhmcm1fZGV2X3N0YXRlX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbmluY2x1ZGUvbmV0L3hmcm0uaD0yMTE4PXZvaWQgX19pbml0IHhmcm1fZGV2X2luaXQodm9pZCk7XFxuaW5jbHVkZS9uZXQveGZybS5oLTIxMTktXFxuaW5jbHVkZS9uZXQveGZybS5oOjIxMjA6I2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcXG5pbmNsdWRlL25ldC94ZnJtLmgtMjEyMS12b2lkIHhmcm1fZGV2X3Jlc3VtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6NTI6MDEuNTIxMjk0ODE0WiIsIlNlcSI6NjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMDIzNzU0OTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgeGZybV9kZXZfc3RhdGVfZnJlZWAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIGl0cyBkZWZpbml0aW9uIGlzIGNvbmRpdGlvbmFsLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgd2FzIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IGV4aXN0ZWQgaWYgYENPTkZJR19YRlJNX09GRkxPQURgIHdhcyBlbmFibGVkLiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBJICpzd2VhciogSSBzYXcgaXQgZGVmaW5lZCBlbHNld2hlcmUsIHNwZWNpZmljYWxseSBpbiBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYCwgYW5kIGl0ICp3YXNuJ3QqIHdyYXBwZWQgaW4gYW4gYCNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEYCBibG9jay4gVGhpcyBpcyB0aHJvd2luZyBtZSBvZmYuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoaXMgZGlzY3JlcGFuY3kuIExldCBtZSBwdWxsIHVwIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA3ODAuIEknbGwgc2VlIGlmIEkgY2FuIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBmdW5jdGlvbidzIGV4aXN0ZW5jZSBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGhhcyBiZWVuIGRlZmluZWQuIFRoaXMgY291bGQgYmUgYSBjcml0aWNhbCBtaXN1bmRlcnN0YW5kaW5nIG9uIG15IHBhcnQsIG9yIGEgc3VidGxlIG51YW5jZSBpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiB0aGF0IEknbSBtaXNzaW5nLiBUaW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MDExLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjUzOjIzLjU0NTA1MzAzM1oiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV9zdGF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc2MDpcXHRcXHR9XFxuIDc2MTpcXHRcXHRyZXR1cm4geDtcXG4gNzYyOlxcdH1cXG4gNzYzOlxcdEVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9hbGxvYyk7XFxuIDc2NDpcXHRcXG4gNzY1OlxcdCNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXFxuIDc2NjpcXHR2b2lkIHhmcm1fZGV2X3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4gNzY3OlxcdHtcXG4gNzY4OlxcdFxcdHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkICp4c28gPSBcXHUwMDI2eC1cXHUwMDNleHNvO1xcbiA3Njk6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IFJFQURfT05DRSh4c28tXFx1MDAzZWRldik7XFxuIDc3MDpcXHRcXG4gNzcxOlxcdFxcdGlmIChkZXYpIHtcXG4gNzcyOlxcdFxcdFxcdGRldi1cXHUwMDNleGZybWRldl9vcHMtXFx1MDAzZXhkb19kZXZfc3RhdGVfZGVsZXRlKGRldiwgeCk7XFxuIDc3MzpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xcbiA3NzQ6XFx0XFx0XFx0aGxpc3RfYWRkX2hlYWQoXFx1MDAyNngtXFx1MDAzZWRldl9nY2xpc3QsIFxcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19saXN0KTtcXG4gNzc1OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcXG4gNzc2OlxcdFxcdH1cXG4gNzc3OlxcdH1cXG4gNzc4OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fZGV2X3N0YXRlX2RlbGV0ZSk7XFxuIDc3OTpcXHRcXG4gNzgwOlxcdHZvaWQgeGZybV9kZXZfc3RhdGVfZnJlZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4gNzgxOlxcdHtcXG4gNzgyOlxcdFxcdHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkICp4c28gPSBcXHUwMDI2eC1cXHUwMDNleHNvO1xcbiA3ODM6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IFJFQURfT05DRSh4c28tXFx1MDAzZWRldik7XFxuIDc4NDpcXHRcXG4gNzg1OlxcdFxcdGlmIChkZXYgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2V4ZnJtZGV2X29wcykge1xcbiA3ODY6XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcXG4gNzg3OlxcdFxcdFxcdGlmICghaGxpc3RfdW5oYXNoZWQoXFx1MDAyNngtXFx1MDAzZWRldl9nY2xpc3QpKVxcbiA3ODg6XFx0XFx0XFx0XFx0aGxpc3RfZGVsX2luaXQoXFx1MDAyNngtXFx1MDAzZWRldl9nY2xpc3QpO1xcbiA3ODk6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xcbiA3OTA6XFx0XFxuIDc5MTpcXHRcXHRcXHRpZiAoZGV2LVxcdTAwM2V4ZnJtZGV2X29wcy1cXHUwMDNleGRvX2Rldl9zdGF0ZV9mcmVlKVxcbiA3OTI6XFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2V4ZnJtZGV2X29wcy1cXHUwMDNleGRvX2Rldl9zdGF0ZV9mcmVlKGRldiwgeCk7XFxuIDc5MzpcXHRcXHRcXHRXUklURV9PTkNFKHhzby1cXHUwMDNlZGV2LCBOVUxMKTtcXG4gNzk0OlxcdFxcdFxcdHhzby1cXHUwMDNldHlwZSA9IFhGUk1fREVWX09GRkxPQURfVU5TUEVDSUZJRUQ7XFxuIDc5NTpcXHRcXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNnhzby1cXHUwMDNlZGV2X3RyYWNrZXIpO1xcbiA3OTY6XFx0XFx0fVxcbiA3OTc6XFx0fVxcbiA3OTg6XFx0I2VuZGlmXFxuIDc5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6NTM6MjMuNTQ1MjEwNjAzWiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMTYzNTg1MTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gWEZSTSBPZmZsb2FkKipcblxuT2theSwgc28gSSd2ZSBwaW5wb2ludGVkIHRoYXQgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgICppcyogaW5kZWVkIHdyYXBwZWQgd2l0aGluIHRoZSBgI2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURgIGJsb2NrLiBDb25maXJtZWQ7IGl0IGNvbmNsdWRlcyBhcm91bmQgbGluZSA3OTguIFRoYXQncyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gSG93ZXZlciwgSSd2ZSBub3RpY2VkIHNvbWV0aGluZyBzbGlnaHRseSBkaWZmZXJlbnQgd2l0aCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgLiBJdCdzICpvdXRzaWRlKiB0aGF0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBUaGF0IGluaXRpYWxseSB0aHJldyBtZSwgYnV0IHRoZW4gSSByZW1lbWJlcmVkIGl0ICpjYWxscyogYHhmcm1fZGV2X3N0YXRlX2ZyZWVgLCB3aGljaCBpcyBhIGBzdGF0aWMgaW5saW5lYCBmdW5jdGlvbi4gQWhhISBTbywgaWYgYENPTkZJR19YRlJNX09GRkxPQURgIGlzbid0IHNldCwgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgIGVmZmVjdGl2ZWx5IGJlY29tZXMgYSBuby1vcCwgcmlnaHQ/XG5cbkJ1dCB0aGF0IHN0aWxsIGJlZ3MgdGhlIHF1ZXN0aW9uLiBJZiBvZmZsb2FkIGlzIGRpc2FibGVkLCBpcyBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGFjdHVhbGx5IGxvb3BpbmcgdGhyb3VnaCBhbnl0aGluZz8gRG9lcyBpdCBldmVuIGl0ZXJhdGUgb3ZlciBgeGZybV9zdGF0ZV9kZXZfZ2NfbGlzdGAgd2hlbiBpdCAqc2hvdWxkbid0KiBiZSBkb2luZyBhbnl0aGluZz8gSSdkIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGJlaGF2aW9yIG9mIGB4ZnJtX3N0YXRlX2Rldl9nY19saXN0YCB1bmRlciB0aGF0IHNjZW5hcmlvLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIG9mIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MDg0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6NTQ6MTMuNzA4Nzk4MzY1WiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDEzNzc4ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fc3RhdGVfZGV2X2djX2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fc3RhdGUuYz01Mz1zdGF0aWMgSExJU1RfSEVBRCh4ZnJtX3N0YXRlX2djX2xpc3QpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo1NDpzdGF0aWMgSExJU1RfSEVBRCh4ZnJtX3N0YXRlX2Rldl9nY19saXN0KTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtNTUtXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9NzY2PXZvaWQgeGZybV9kZXZfc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTc3My1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo3NzQ6XFx0XFx0aGxpc3RfYWRkX2hlYWQoXFx1MDAyNngtXFx1MDAzZWRldl9nY2xpc3QsIFxcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19saXN0KTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtNzc1LVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz05NjE9aW50IHhmcm1fZGV2X3N0YXRlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0YXNrX3ZhbGlkKVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEwMDQtcmVzdGFydF9nYzpcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTAwNTpcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHgsIHRtcCwgXFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xpc3QsIGRldl9nY2xpc3QpIHtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTAwNi1cXHRcXHR4c28gPSBcXHUwMDI2eC1cXHUwMDNleHNvO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODo1NDoxNS4xMjI1ODI5MDdaIiwiU2VxIjo2NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk2MjkyMDQ2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGB4ZnJtX3N0YXRlX2Rldl9nY19saXN0YCBWdWxuZXJhYmlsaXR5IGFuZCBGaXgqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyBgeGZybV9zdGF0ZV9kZXZfZ2NfbGlzdGAgaXMgYWx3YXlzIGRlZmluZWQsIHdoaWNoIGlzIGdvb2QuIEhvd2V2ZXIsIHRoZSBjcml0aWNhbCBgaGxpc3RfYWRkX2hlYWRgIGNhbGwsIGBobGlzdF9hZGRfaGVhZChcdTAwMjZ4LVx1MDAzZWRldl9nY2xpc3QsIFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xpc3QpYCwgb25seSBoYXBwZW5zIHdpdGhpbiBgeGZybV9kZXZfc3RhdGVfZGVsZXRlYC4gQW5kIHRoYXQgZnVuY3Rpb24gaXMgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURgLlxuXG5TbywgaXQncyBwcmV0dHkgY2xlYXI6IGlmIGBDT05GSUdfWEZSTV9PRkZMT0FEYCBpc24ndCBlbmFibGVkLCB0aGF0IGxpc3QgaXMgKmFsd2F5cyogZW1wdHkuIFRoYXTigJlzIGEga2V5IG9ic2VydmF0aW9uLiBUaGlzIG1lYW5zIGBDT05GSUdfWEZSTV9PRkZMT0FEYCBpcyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeSBmb3IgdGhlIGJ1ZyBhbmQsIGNvbnNlcXVlbnRseSwgdGhlIGZpeCwgdG8gZXZlbiBjb21lIGludG8gcGxheS4gSXQncyBhIGZ1bmRhbWVudGFsIHByZXJlcXVpc2l0ZS5cblxuVGhlcmVmb3JlLCB3ZSBoYXZlIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzY2VuYXJpbyB0byB0YXJnZXQgdG8gcmVwcm9kdWNlIHRoaXMuIFdlIG5lZWQgYXQgYSBtaW5pbXVtOlxuLSBgWEZSTWBcbi0gYFhGUk1fVVNFUmBcbi0gYElORVRfRVNQYFxuLSBgSU5FVF9FU1BfT0ZGTE9BRGBcbi0gYElORVQ2X0VTUGBcbi0gYElORVQ2X0VTUF9PRkZMT0FEYFxuXG5CdXQgdGhlbiBhIHRob3VnaHQgY29tZXMgdG8gbWluZC4gYElORVRfRVNQX09GRkxPQURgIGFuZCBgSU5FVDZfRVNQX09GRkxPQURgICpzZWxlY3QqIGBYRlJNX09GRkxPQURgLCBzbyB0aGV5IGFyZSBsaW5rZWQgYW5kIHRoYXQgc2VlbXMgcmVhc29uYWJsZS4gQnV0IGFyZSB0aGVyZSBvdGhlciwgbGVzcyBvYnZpb3VzLCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGFsc28gc2VsZWN0IGBYRlJNX09GRkxPQURgPyBJdCdzIGVzc2VudGlhbCB0byBjb25maXJtIHRoYXQgbm90aGluZyBlbHNlIGluYWR2ZXJ0ZW50bHkgdHJpZ2dlcnMgdGhlIHNhbWUgYmVoYXZpb3IuIE5lZWQgdG8gdmVyaWZ5IHRoYXQgYFhGUk1fT0ZGTE9BRGAgaXNuJ3QgaW5kaXJlY3RseSBzZWxlY3RlZCBieSBzb21ldGhpbmcgZWxzZS4gVGhhdCBjb3VsZCBvcGVuIHVwIGEgbXVjaCB3aWRlciBhdHRhY2sgc3VyZmFjZSB0aGFuIGluaXRpYWxseSBhbnRpY2lwYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5NDgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6NTQ6NTQuNzUxNzkwODEyWiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY4OTE0MjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBYRlJNX09GRkxPQURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MzY5PWNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM3MS1cXHRkZXBlbmRzIG9uIElORVRfRVNQXFxubmV0L2lwdjQvS2NvbmZpZzozNzI6XFx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxcbm5ldC9pcHY0L0tjb25maWctMzczLVxcdGRlZmF1bHQgblxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz03Nz1jb25maWcgSU5FVDZfRVNQX09GRkxPQURcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctNzktXFx0ZGVwZW5kcyBvbiBJTkVUNl9FU1BcXG5uZXQvaXB2Ni9LY29uZmlnOjgwOlxcdHNlbGVjdCBYRlJNX09GRkxPQURcXG5uZXQvaXB2Ni9LY29uZmlnLTgxLVxcdGRlZmF1bHQgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODo1NDo1Ni40MjA3MTMzMDVaIiwiU2VxIjo2NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU4Mzg5MDM2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFhGUk0gT2ZmbG9hZCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBwcmltYXJ5IGZvY3VzIGhlcmUgaXMgYSBmaXggcmVsYXRlZCB0byBhIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkgd2l0aGluIHRoZSBYRlJNIGRldmljZSBzdGF0ZSBnYXJiYWdlIGNvbGxlY3Rpb24uICBUaGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBhcmUgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBhbmQgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgLiAgVGhlIHBhdGNoIHNwZWNpZmljYWxseSB0YXJnZXRzIFhGUk0gb2ZmbG9hZCBzdGF0ZSBjbGVhbnVwLCBzbyB0aGF0IG1lYW5zIGBJTkVUX0VTUF9PRkZMT0FEYCBhbmQgYElORVQ2X0VTUF9PRkZMT0FEYCBtdXN0IGJlIGVuYWJsZWQgdG8gdHJpZ2dlciB0aGUgdnVsbmVyYWJsZSBjb2RlLiBUaG9zZSBzZWVtIHRvIGJlIHRoZSBjcml0aWNhbCBlbmFibGluZyBjb25kaXRpb25zLlxuXG5Jbml0aWFsbHksIEkgemVyb2VkIGluIG9uIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgYW5kIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCBhcyB0aGUgZm9jdXMgc3ltYm9scyBiZWNhdXNlIHRoZXkgYXJlIGRpcmVjdGx5IG1vZGlmaWVkIGJ5IHRoZSBwYXRjaC4gSSB2ZXJpZmllZCBib3RoLiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIGV4cG9ydGVkLCBtYWtpbmcgaXQgZWFzeSB0byByZWZlcmVuY2UuIFdoaWxlIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCBpc24ndCBleHBsaWNpdGx5IGV4cG9ydGVkLCB0aGUgZmFjdCB0aGF0IGl0IGlzICpub24tc3RhdGljKiBtZWFucyBpdCB3aWxsIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgbWFraW5nIGl0IGEgdmFsaWQgZm9jdXMgc3ltYm9sIHRvby4gSSd2ZSBkb3VibGUtY2hlY2tlZCBpdHMgZGVmaW5pdGlvbiB3aXRoaW4gYG5ldC94ZnJtL3hmcm1fc3RhdGUuY2AgYW5kIGNvbmZpcm1lZCBpdCdzIG5vdCBpbmxpbmUuXG5cbkxvb2tpbmcgYXQgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zLCBJIHJlYWxpemVkIHRoYXQgSSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUgbWV0LiBTaW5jZSB3ZSBuZWVkIG9mZmxvYWQsIHRoYXQgbWVhbnMgd2UgbmVlZCBgSU5FVF9FU1BgIGFuZCBgSU5FVDZfRVNQYCB3aGljaCBpbiB0dXJuIG5lZWQgYElORVRgLCBgSU5FVDZgIGFuZCBgWEZSTWAuIGBYRlJNX1VTRVJgIGlzIGluY2x1ZGVkIGJlY2F1c2UgaXQncyByZXF1aXJlZCBmb3IgY29uZmlndXJpbmcgWEZSTSBzdGF0ZXMgZnJvbSB1c2Vyc3BhY2UuIEFsbCBvZiB0aGVzZSBjb25maWdzIGxvb2sgY29ycmVjdC4gIFRoZSBvdmVyYWxsIHJlYXNvbmluZyBpbiB0aGUgY29uZmlndXJhdGlvbiBpcyBhY2N1cmF0ZTogZW5hYmxpbmcgb2ZmbG9hZCBzdXBwb3J0IHZpYSBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUNl9FU1BfT0ZGTE9BRGAgaXMgZXNzZW50aWFsIHRvIHJlYWNoIHRoZSB0YXJnZXRlZCBjb2RlLlxuXG5JJ3ZlIHJldmlld2VkIHRoZSBjb2RlLiBFdmVyeXRoaW5nIGNoZWNrcyBvdXQuICBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIGluZGVlZCBleHBvcnRlZCBhbmQgZGVmaW5lZCBpbiBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYCBhbmQgaXMgbm90IGlubGluZS5cblxuSSdtIGNvbmZpZGVudCBpbiB0aGlzIGFuYWx5c2lzLiBJIHdpbGwgbW92ZSB0byBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4Nzg4LCJPdXRwdXRUb2tlbnMiOjE4OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODo1NjoxMi4yNTk2MjAxMzVaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTA4MjU0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTVwiLFxuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVF9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJTkVUNl9FU1BfT0ZGTE9BRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fZGV2X3N0YXRlX2ZsdXNoXCIsXG4gICAgXCJ4ZnJtX2Rldl9zdGF0ZV9mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBpbiBYRlJNIGRldmljZSBzdGF0ZSBnYXJiYWdlIGNvbGxlY3Rpb24uIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgeGZybV9kZXZfc3RhdGVfZmx1c2ggYW5kIHhmcm1fZGV2X3N0YXRlX2ZyZWUgaGFuZGxlIFhGUk0gb2ZmbG9hZCBzdGF0ZSBjbGVhbnVwLiBUbyByZWFjaCB0aGlzIGNvZGUsIFhGUk0gb2ZmbG9hZCBzdXBwb3J0IG11c3QgYmUgZW5hYmxlZCAoQ09ORklHX1hGUk1fT0ZGTE9BRCksIHdoaWNoIGlzIHNlbGVjdGVkIGJ5IElORVRfRVNQX09GRkxPQUQgYW5kIElORVQ2X0VTUF9PRkZMT0FELlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1cIixcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiSU5FVF9FU1BcIixcbiAgICBcIklORVRfRVNQX09GRkxPQURcIixcbiAgICBcIklORVQ2X0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQX09GRkxPQURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX2Rldl9zdGF0ZV9mbHVzaFwiLFxuICAgIFwieGZybV9kZXZfc3RhdGVfZnJlZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgaW4gWEZSTSBkZXZpY2Ugc3RhdGUgZ2FyYmFnZSBjb2xsZWN0aW9uLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIHhmcm1fZGV2X3N0YXRlX2ZsdXNoIGFuZCB4ZnJtX2Rldl9zdGF0ZV9mcmVlIGhhbmRsZSBYRlJNIG9mZmxvYWQgc3RhdGUgY2xlYW51cC4gVG8gcmVhY2ggdGhpcyBjb2RlLCBYRlJNIG9mZmxvYWQgc3VwcG9ydCBtdXN0IGJlIGVuYWJsZWQgKENPTkZJR19YRlJNX09GRkxPQUQpLCB3aGljaCBpcyBzZWxlY3RlZCBieSBJTkVUX0VTUF9PRkZMT0FEIGFuZCBJTkVUNl9FU1BfT0ZGTE9BRC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMDg6NTY6MTIuMzM0NzA5NDdaIiwiU2VxIjo2OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzQwNDg5MjM1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjU2OjEyLjMzNTI0NDA4WiIsIlNlcSI6NzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIwMzQwNDM1MzMzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsaWZldGltZSBpc3N1ZSAodXNlLWFmdGVyLWZyZWUpIGluIHRoZSBYRlJNIHN0YXRlIGdhcmJhZ2UgY29sbGVjdGlvbiBsb2dpYy4gSXQgY2hhbmdlcyBgaGxpc3RfZGVsYCB0byBgaGxpc3RfZGVsX2luaXRgIHRvIHByZXZlbnQgaXNzdWVzIHdpdGggbXVsdGlwbGUgZGVsZXRpb25zIGFuZCBhZGRzIHJlZmVyZW5jZSBjb3VudGluZyAoYHhmcm1fc3RhdGVfaG9sZF9yY3VgIGFuZCBgeGZybV9zdGF0ZV9wdXRgKSBhcm91bmQgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgIHRvIGVuc3VyZSB0aGUgb2JqZWN0IGlzIG5vdCBmcmVlZCB3aGlsZSBiZWluZyBhY2Nlc3NlZC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHVzZS1hZnRlci1mcmVlIGFuZCBkb3VibGUtZnJlZSB2dWxuZXJhYmlsaXRpZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzIGJlaW5nIHJlYWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzIwMzUwODMxYTNlYzFmYjA0YzBmNDE3YmE2ZWM5Y2JjNjViMGVmN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDkgMDg6MTk6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N0YXRlLmMgYi9uZXQveGZybS94ZnJtX3N0YXRlLmNcbmluZGV4IDM2YTRmNjc5M2VkZWYuLjAxMTM4ZDNkMTA2NzMgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX3N0YXRlLmNcbisrKyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xuQEAgLTc4NSw3ICs3ODUsNyBAQCB2b2lkIHhmcm1fZGV2X3N0YXRlX2ZyZWUoc3RydWN0IHhmcm1fc3RhdGUgKngpXG4gXHRpZiAoZGV2IFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNleGZybWRldl9vcHMpIHtcbiBcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuIFx0XHRpZiAoIWhsaXN0X3VuaGFzaGVkKFx1MDAyNngtXHUwMDNlZGV2X2djbGlzdCkpXG4tXHRcdFx0aGxpc3RfZGVsKFx1MDAyNngtXHUwMDNlZGV2X2djbGlzdCk7XG4rXHRcdFx0aGxpc3RfZGVsX2luaXQoXHUwMDI2eC1cdTAwM2VkZXZfZ2NsaXN0KTtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XG4gXG4gXHRcdGlmIChkZXYtXHUwMDNleGZybWRldl9vcHMtXHUwMDNleGRvX2Rldl9zdGF0ZV9mcmVlKVxuQEAgLTEwMDYsOCArMTAwNiwxMyBAQCBpbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaVxuIFx0XHR4c28gPSBcdTAwMjZ4LVx1MDAzZXhzbztcbiBcbiBcdFx0aWYgKHhzby1cdTAwM2VkZXYgPT0gZGV2KSB7XG4rXHRcdFx0LyogVGhlIGRldmljZSBHQyBsaXN0IGRvZXMgbm90IGhvbGQgYSByZWZlcmVuY2UgdG8geC4gKi9cbitcdFx0XHRpZiAoIXhmcm1fc3RhdGVfaG9sZF9yY3UoeCkpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcbiBcdFx0XHR4ZnJtX2Rldl9zdGF0ZV9mcmVlKHgpO1xuK1x0XHRcdHhmcm1fc3RhdGVfcHV0KHgpO1xuIFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcbiBcdFx0XHRnb3RvIHJlc3RhcnRfZ2M7XG4gXHRcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDA4OjU2OjEyLjMzNTI0NTAzWiIsIlNlcSI6NzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwMzQwNDMyODEzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IEEgTGlmZXRpbWUgQnVnIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLiBJdCdzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgaXMgYWRkcmVzc2luZyBhIGxpZmV0aW1lIGlzc3VlLCBzcGVjaWZpY2FsbHkgYSB1c2UtYWZ0ZXItZnJlZSBvciBwb3RlbnRpYWwgZG91YmxlLWZyZWUgc2NlbmFyaW8uIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyBpbiBob3cgYHhmcm1fc3RhdGVgIG9iamVjdHMgYXJlIGhhbmRsZWQgaW4gdGhlIGRldmljZSBnYXJiYWdlIGNvbGxlY3Rpb24uXG5cbk15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyBjb25maXJtZWQgYnkgdGhlIGNvZGUgY2hhbmdlcy4gSW4gYHhmcm1fZGV2X3N0YXRlX2ZyZWVgLCB0aGV5J3ZlIHJlcGxhY2VkIGEgc2ltcGxlIGBobGlzdF9kZWxgIHdpdGggYGhsaXN0X2RlbF9pbml0YCBmb3IgdGhlIGBkZXZfZ2NsaXN0YC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBpc3N1ZSB3aGVyZSB0aGUgbGlzdCBjb3VsZCBiZSBtYW5pcHVsYXRlZCBhZnRlciBkZWxldGlvbiwgb3IgZG91YmxlIGRlbGV0aW9uIGNvdWxkIG9jY3VyLiBUaGUgYWRkaXRpb24gb2YgYHhmcm1fc3RhdGVfaG9sZF9yY3UoeClgIGFuZCBgeGZybV9zdGF0ZV9wdXQoeClgIHdpdGhpbiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIHRoZSBrZXkuIFRoZSBjb21tZW50IGNvbmZpcm1zIHRoZSBsaXN0IGRvZXNuJ3QgaGF2ZSBhIHJlZmVyZW5jZSwgbWVhbmluZyB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIGJlaW5nIGFkZGVkICpiZWZvcmUqIGNhbGxpbmcgYHhmcm1fZGV2X3N0YXRlX2ZyZWVgLCB3aGljaCBjb3VsZCBzbGVlcCBvciBwZXJmb3JtIG90aGVyIG9wZXJhdGlvbnMuIFN1YnNlcXVlbnRseSwgdGhlIHJlZmVyZW5jZSBpcyByZW1vdmVkLlxuXG5UaGlzIGxvb2tzIGxpa2UgYSBjbGFzc2ljIHJlZi1jb3VudGluZyBzY2hlbWUsIHdoaWNoIHRlbGxzIG1lIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIGEgcmVmZXJlbmNlIGNvdW50IHRvIGB4YCBiZWZvcmUgdGhlIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlKHgpYCBjYWxsIGlzIG1hZGUuIFRoaXMgcHJldmVudHMgYSByYWNlIG9yIGEgVUFGIGJ5IGVuc3VyaW5nIHRoZSBvYmplY3QncyBsaWZldGltZSBpcyBtYW5hZ2VkIGNvcnJlY3RseSB3aGlsZSBpdCdzIGJlaW5nIGFjY2Vzc2VkIG9yIGZsdXNoZWQuXG5cbkJhc2VkIG9uIHRoaXMsIEtBU0FOIHNlZW1zIHRvIGJlIHRoZSByaWdodCB0b29sIGZvciBpZGVudGlmeWluZyBVQUYgaXNzdWVzLCBzbyBJIGRvbid0IHNlZSBhbnkgcmVhc29uIGZvciBLTVNBTiBoZXJlLiBUaGVyZSdzIG5vIGluZGljYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGFuZCBLQVNBTiBzaG91bGQgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcmVtYWluaW5nIFVBRiBidWdzLiBUaGVyZWZvcmUsIEknbSBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBmb3IgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyNCwiT3V0cHV0VG9rZW5zIjoxNzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQwODo1OTozNS43Mzk1NzY3NjFaIiwiU2VxIjo3MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbGlmZXRpbWUgaXNzdWUgKHVzZS1hZnRlci1mcmVlKSBpbiB0aGUgWEZSTSBzdGF0ZSBnYXJiYWdlIGNvbGxlY3Rpb24gbG9naWMuIEl0IGNoYW5nZXMgYGhsaXN0X2RlbGAgdG8gYGhsaXN0X2RlbF9pbml0YCB0byBwcmV2ZW50IGlzc3VlcyB3aXRoIG11bHRpcGxlIGRlbGV0aW9ucyBhbmQgYWRkcyByZWZlcmVuY2UgY291bnRpbmcgKGB4ZnJtX3N0YXRlX2hvbGRfcmN1YCBhbmQgYHhmcm1fc3RhdGVfcHV0YCkgYXJvdW5kIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCB0byBlbnN1cmUgdGhlIG9iamVjdCBpcyBub3QgZnJlZWQgd2hpbGUgYmVpbmcgYWNjZXNzZWQuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgdnVsbmVyYWJpbGl0aWVzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcyBiZWluZyByZWFkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbGlmZXRpbWUgaXNzdWUgKHVzZS1hZnRlci1mcmVlKSBpbiB0aGUgWEZSTSBzdGF0ZSBnYXJiYWdlIGNvbGxlY3Rpb24gbG9naWMuIEl0IGNoYW5nZXMgYGhsaXN0X2RlbGAgdG8gYGhsaXN0X2RlbF9pbml0YCB0byBwcmV2ZW50IGlzc3VlcyB3aXRoIG11bHRpcGxlIGRlbGV0aW9ucyBhbmQgYWRkcyByZWZlcmVuY2UgY291bnRpbmcgKGB4ZnJtX3N0YXRlX2hvbGRfcmN1YCBhbmQgYHhmcm1fc3RhdGVfcHV0YCkgYXJvdW5kIGB4ZnJtX2Rldl9zdGF0ZV9mcmVlYCB0byBlbnN1cmUgdGhlIG9iamVjdCBpcyBub3QgZnJlZWQgd2hpbGUgYmVpbmcgYWNjZXNzZWQuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgdnVsbmVyYWJpbGl0aWVzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm8tbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcyBiZWluZyByZWFkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowhfh5q[1] Phase: Succeeded StartedAt: 2026-08-09 08:59:46 +0000 UTC FinishedAt: 2026-08-09 08:59:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfh5q[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-09 08:59:46 +0000 UTC FinishedAt: 2026-08-09 08:59:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfh5q[2] Phase: Succeeded StartedAt: 2026-08-09 08:59:46 +0000 UTC FinishedAt: 2026-08-09 12:41:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-09 08:59:46 +0000 UTC FinishedAt: 2026-08-09 12:41:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-09 08:59:46 +0000 UTC FinishedAt: 2026-08-09 08:59:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-09 08:59:46 +0000 UTC FinishedAt: 2026-08-09 08:59:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhfh5q/series-workflowhfh5q-convert-artifact-118251309/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-09 08:59:56 +0000 UTC FinishedAt: 2026-08-09 09:17:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-09 08:59:56 +0000 UTC FinishedAt: 2026-08-09 09:17:30 +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:*add53b4c-8305-44d1-9882-9e0cf142dde3,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-workflowhfh5q/series-workflowhfh5q-convert-artifact-118251309/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": "cdbc4c89-b2aa-4b0f-8364-acce7f25264d", "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-workflowhfh5q/series-workflowhfh5q-build-action-3540687651/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-09 08:59:56 +0000 UTC FinishedAt: 2026-08-09 09:17:20 +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:*add53b4c-8305-44d1-9882-9e0cf142dde3,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-workflowhfh5q/series-workflowhfh5q-convert-artifact-118251309/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": "cdbc4c89-b2aa-4b0f-8364-acce7f25264d", "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-workflowhfh5q/series-workflowhfh5q-build-action-3540687651/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-09 09:17:30 +0000 UTC FinishedAt: 2026-08-09 09:17:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-09 09:17:30 +0000 UTC FinishedAt: 2026-08-09 09:17:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-09 09:17:30 +0000 UTC FinishedAt: 2026-08-09 09:17:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-09 09:17:30 +0000 UTC FinishedAt: 2026-08-09 09:17:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhfh5q/series-workflowhfh5q-convert-artifact-878802568/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-09 09:17:40 +0000 UTC FinishedAt: 2026-08-09 09:19:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-09 09:17:40 +0000 UTC FinishedAt: 2026-08-09 09:19:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cdbc4c89-b2aa-4b0f-8364-acce7f25264d,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-workflowhfh5q/series-workflowhfh5q-build-action-3540687651/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-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-09 09:19:32 +0000 UTC FinishedAt: 2026-08-09 09:19:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-09 09:19:32 +0000 UTC FinishedAt: 2026-08-09 09:19:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-09 09:19:32 +0000 UTC FinishedAt: 2026-08-09 09:36:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-09 09:19:32 +0000 UTC FinishedAt: 2026-08-09 09:36:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*add53b4c-8305-44d1-9882-9e0cf142dde3,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-workflowhfh5q/series-workflowhfh5q-convert-artifact-878802568/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": "bd15d50b-d1f0-40b3-97f1-d405b97a2ab8", "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-workflowhfh5q/series-workflowhfh5q-build-action-591010356/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-09 09:19:32 +0000 UTC FinishedAt: 2026-08-09 09:36:39 +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:*add53b4c-8305-44d1-9882-9e0cf142dde3,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-workflowhfh5q/series-workflowhfh5q-convert-artifact-878802568/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": "bd15d50b-d1f0-40b3-97f1-d405b97a2ab8", "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-workflowhfh5q/series-workflowhfh5q-build-action-591010356/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-09 09:36:49 +0000 UTC FinishedAt: 2026-08-09 09:36:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-09 09:36:49 +0000 UTC FinishedAt: 2026-08-09 09:36:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-09 09:36:49 +0000 UTC FinishedAt: 2026-08-09 09:39:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-09 09:36:49 +0000 UTC FinishedAt: 2026-08-09 09:39:44 +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:*bd15d50b-d1f0-40b3-97f1-d405b97a2ab8,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-workflowhfh5q/series-workflowhfh5q-build-action-591010356/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-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-09 09:39:53 +0000 UTC FinishedAt: 2026-08-09 12:41:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-09 09:39:53 +0000 UTC FinishedAt: 2026-08-09 12:41:35 +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":["xfrm_dev_state_flush","xfrm_dev_state_free"],"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:*cdbc4c89-b2aa-4b0f-8364-acce7f25264d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bd15d50b-d1f0-40b3-97f1-d405b97a2ab8,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-workflowhfh5q/series-workflowhfh5q-build-action-3540687651/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-workflowhfh5q/series-workflowhfh5q-build-action-591010356/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-09 09:39:53 +0000 UTC FinishedAt: 2026-08-09 09:40:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-09 09:39:53 +0000 UTC FinishedAt: 2026-08-09 09:39:57 +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":["xfrm_dev_state_flush","xfrm_dev_state_free"],"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-workflowhfh5q/series-workflowhfh5q-convert-artifact-391165249/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-09 09:39:53 +0000 UTC FinishedAt: 2026-08-09 09:39:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-09 09:39:53 +0000 UTC FinishedAt: 2026-08-09 09:39:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-09 09:39:53 +0000 UTC FinishedAt: 2026-08-09 09:39:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-09 09:40:03 +0000 UTC FinishedAt: 2026-08-09 12:41:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhfh5q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","xfrm_dev_state_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c12cbf56320fb633484ee0ca1fb7d68d6b64b213","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM","XFRM_USER","INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD"],"series_id":"7fe9bd7a-b1f4-4c55-8ae7-c88fab4d39bd","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-09 09:40:03 +0000 UTC FinishedAt: 2026-08-09 12:41:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cdbc4c89-b2aa-4b0f-8364-acce7f25264d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bd15d50b-d1f0-40b3-97f1-d405b97a2ab8,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-workflowhfh5q/series-workflowhfh5q-build-action-3540687651/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-workflowhfh5q/series-workflowhfh5q-build-action-591010356/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-workflowhfh5q/series-workflowhfh5q-convert-artifact-391165249/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,}