Name: series-workflowqtt8x Phase: Succeeded StartedAt: 2026-08-31 07:40:14 +0000 UTC FinishedAt: 2026-08-31 09:33:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtt8x[0] Phase: Succeeded StartedAt: 2026-08-31 07:40:14 +0000 UTC FinishedAt: 2026-08-31 07:55:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtt8x[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 07:40:14 +0000 UTC FinishedAt: 2026-08-31 07:55:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MOTORCOMM_PHY", "PHYLIB", "NETDEVICES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MOTORCOMM_PHY", "PHYLIB", "NETDEVICES" ], "series_id": "44bebf95-128e-4f98-b843-98f2540ed871" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "yt8531s_config_init", "yt8521_config_init" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01PVE9SQ09NTV9QSFkmIzM0OywKICAgICYjMzQ7UEhZTElCJiMzNDssCiAgICAmIzM0O05FVERFVklDRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt5dDg1MzFzX2NvbmZpZ19pbml0JiMzNDssCiAgICAmIzM0O3l0ODUyMV9jb25maWdfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNb3RvcmNvbW0gUEhZIGRyaXZlciAoZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jKSBieSByZWZhY3RvcmluZyBQSFkgY29uZmlndXJhdGlvbiBsb2dpYyBhbmQgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBZVDg1MzFTIFBIWSBjb25maWcgaW5pdCBjYWxsYmFjayAoeXQ4NTMxc19jb25maWdfaW5pdCksIHdoaWNoIHBlcmZvcm1zIGhhcmR3YXJlIHJlZ2lzdGVyIHJlYWRzL3dyaXRlcyB2aWEgTURJTy4gVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgaGFyZHdhcmUgcmVnaXN0ZXIgYWNjZXNzIGNvbnRyb2wgZmxvdyBhbmQgbG9jYWwgaW50ZWdlciByZXR1cm4gY29kZXM7IHRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVycywgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gU3RhbmRhcmQgS0FTQU4gYW5kIGdlbmVyYWwga2VybmVsIHRlc3RpbmcgYXJlIHN1ZmZpY2llbnQsIGFuZCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyB0aGF0IHdvdWxkIHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZGVkaWNhdGVkIGluaXRpYWxpemF0aW9uIGNhbGxiYWNrIHl0ODUzMXNfY29uZmlnX2luaXQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4NTMxUyBFdGhlcm5ldCBQSFksIGZhY3RvcmluZyBjb21tb24gaW5pdGlhbGl6YXRpb24gaW50byBfX3l0ODUyMV9jb25maWdfaW5pdCBhbmQgYWRkaW5nIHN1cHBvcnQgZm9yIGVuYWJsaW5nIHRoZSBhbmFsb2cgZnJvbnQtZW5kIERBQyBjbG9jayB3aGVuIG9wZXJhdGluZyBpbiBHTUlJIG1vZGUuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgZHJpdmVyIGNvbmZpZ3VyYXRpb24gZmxvdyBhbmQgY2FuIGJlIGV4ZWN1dGVkIHZpYSBNRElPIC8gcGh5bGliIHRocm91Z2ggZW11bGF0ZWQgVVNCIG9yIG5ldHdvcmsgY29udHJvbGxlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6NTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0MTM4MDZmYjRlNjdkMDJiNzgxZTVjNDk1ZGEwOTQ2M2Y3NmU4OGY0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDc6NTQ6MDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG5pbmRleCBjNWEyY2RhOGQzMWJkLi45MGE0Zjg2ZjI3NThiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbkBAIC0xNDQsNiAmIzQzOzE0NCwxMSBAQFxuICNkZWZpbmUgWVQ4NTIxX0NMT0NLX0dBVElOR19SRUdcdFx0XHQweENcbiAjZGVmaW5lIFlUODUyMV9DR1JfUlhfQ0xLX0VOXHRcdFx0QklUKDEyKVxuIFxuJiM0MzsvKiBBbmFsb2cgZnJvbnQtZW5kIGNvbnRyb2wgcmVnaXN0ZXIgMyAqL1xuJiM0MzsjZGVmaW5lIFlUODUzMVNfRVhUX0FGRV9DVFJMM1x0XHRcdDB4MTJcbiYjNDM7LyogQW5hbG9nIGZyb250LWVuZCBEQUMgY2xvY2sgZW5hYmxlICovXG4mIzQzOyNkZWZpbmUgWVQ4NTMxU19BRkVfQ1RSTDNfQ0xLREFDX0FPTlx0XHRCSVQoMTMpXG4mIzQzO1xuICNkZWZpbmUgWVQ4NTIxX0VYVFJFR19TTEVFUF9DT05UUk9MMV9SRUdcdDB4MjdcbiAjZGVmaW5lIFlUODUyMV9FU0MxUl9TTEVFUF9TV1x0XHRcdEJJVCgxNSlcbiAjZGVmaW5lIFlUODUyMV9FU0MxUl9QTExPTl9TTFBcdFx0XHRCSVQoMTQpXG5AQCAtMTY4MCwyNyAmIzQzOzE2ODUsMTYgQEAgc3RhdGljIGludCB5dDg1MjFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRyZXR1cm4geXQ4NTIxX21vZGlmeV91dHBfZmliZXJfYm1jcihwaHlkZXYsIEJNQ1JfUERPV04sIDApO1xuIH1cbiBcbi0vKipcbi0gKiB5dDg1MjFfY29uZmlnX2luaXQoKSAtIGNhbGxlZCB0byBpbml0aWFsaXplIHRoZSBQSFlcbi0gKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuLSAqXG4tICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbi0gKi9cbi1zdGF0aWMgaW50IHl0ODUyMV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0MztzdGF0aWMgaW50IF9feXQ4NTIxX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuLVx0aW50IG9sZF9wYWdlO1xuIFx0aW50IHJldCA9IDA7XG4gXG4tXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODUyMV9SU1NSX1VUUF9TUEFDRSk7XG4tXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4tXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbi1cbiBcdC8qIHNldCByZ21paSBkZWxheSBtb2RlICovXG4gXHRpZiAocGh5ZGV2LVx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHtcbiBcdFx0cmV0ID0geXRwaHlfcmdtaWlfY2xrX2RlbGF5X2NvbmZpZyhwaHlkZXYpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbiBcdGlmIChkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29sKGRldiwgXCYjMzQ7bW90b3Jjb21tLGF1dG8tc2xlZXAtZGlzYWJsZWRcJiMzNDspKSB7XG5AQCAtMTcwOCwyMCAmIzQzOzE3MDIsNTggQEAgc3RhdGljIGludCB5dDg1MjFfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdFx0cmV0ID0geXRwaHlfbW9kaWZ5X2V4dChwaHlkZXYsIFlUODUyMV9FWFRSRUdfU0xFRVBfQ09OVFJPTDFfUkVHLFxuIFx0XHRcdFx0ICAgICAgIFlUODUyMV9FU0MxUl9TTEVFUF9TVywgMCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuLVx0aWYgKGRldmljZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LCBcJiMzNDttb3RvcmNvbW0sa2VlcC1wbGwtZW5hYmxlZFwmIzM0OykpIHtcbiYjNDM7XHRpZiAoZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYsIFwmIzM0O21vdG9yY29tbSxrZWVwLXBsbC1lbmFibGVkXCYjMzQ7KSlcbiBcdFx0LyogZW5hYmxlIFJYQyBjbG9jayB3aGVuIG5vIHdpcmUgcGx1ZyAqL1xuLVx0XHRyZXQgPSB5dHBoeV9tb2RpZnlfZXh0KHBoeWRldiwgWVQ4NTIxX0NMT0NLX0dBVElOR19SRUcsXG4tXHRcdFx0XHQgICAgICAgWVQ4NTIxX0NHUl9SWF9DTEtfRU4sIDApO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHl0cGh5X21vZGlmeV9leHQocGh5ZGV2LCBZVDg1MjFfQ0xPQ0tfR0FUSU5HX1JFRyxcbiYjNDM7XHRcdFx0XHRcdFlUODUyMV9DR1JfUlhfQ0xLX0VOLCAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg1MjFfY29uZmlnX2luaXQoKSAtIGNhbGxlZCB0byBpbml0aWFsaXplIHRoZSBQSFlcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4NTIxX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgb2xkX3BhZ2UsIHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4NTIxX1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9feXQ4NTIxX2NvbmZpZ19pbml0KHBoeWRldik7XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgeXQ4NTMxc19jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9sZF9wYWdlLCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODUyMV9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX3l0ODUyMV9jb25maWdfaW5pdChwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlfaW50ZXJmYWNlX2lzX3JnbWlpKHBoeWRldikpIHtcbiYjNDM7XHRcdHJldCA9IHl0ODUzMV9zZXRfZHMocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQpXG4gXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuIFx0fVxuIFxuLVx0aWYgKHBoeV9pbnRlcmZhY2VfaXNfcmdtaWkocGh5ZGV2KSBcdTAwMjZcdTAwMjZcbi1cdCAgICBwaHlkZXZfaWRfY29tcGFyZShwaHlkZXYsIFBIWV9JRF9ZVDg1MzFTKSlcbi1cdFx0cmV0ID0geXQ4NTMxX3NldF9kcyhwaHlkZXYpO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJKVxuJiM0MztcdFx0cmV0ID0geXRwaHlfbW9kaWZ5X2V4dChwaHlkZXYsIFlUODUzMVNfRVhUX0FGRV9DVFJMMyxcbiYjNDM7XHRcdFx0XHQgICAgICAgMCwgWVQ4NTMxU19BRkVfQ1RSTDNfQ0xLREFDX0FPTik7XG4gXG4gZXJyX3Jlc3RvcmVfcGFnZTpcbiBcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG5AQCAtMzEzNSw3ICYjNDM7MzE2Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcbiBcdFx0LnNldF93b2xcdD0geXRwaHlfc2V0X3dvbCxcbiBcdFx0LmNvbmZpZ19hbmVnXHQ9IHl0ODUyMV9jb25maWdfYW5lZyxcbiBcdFx0LmFuZWdfZG9uZVx0PSB5dDg1MjFfYW5lZ19kb25lLFxuLVx0XHQuY29uZmlnX2luaXRcdD0geXQ4NTIxX2NvbmZpZ19pbml0LFxuJiM0MztcdFx0LmNvbmZpZ19pbml0XHQ9IHl0ODUzMXNfY29uZmlnX2luaXQsXG4gXHRcdC5yZWFkX3N0YXR1c1x0PSB5dDg1MjFfcmVhZF9zdGF0dXMsXG4gXHRcdC5zb2Z0X3Jlc2V0XHQ9IHl0ODUyMV9zb2Z0X3Jlc2V0LFxuIFx0XHQuc3VzcGVuZFx0PSB5dDg1MjFfc3VzcGVuZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNT1RPUkNPTU1fUEhZJiMzNDssCiAgICAmIzM0O1BIWUxJQiYjMzQ7LAogICAgJiMzNDtORVRERVZJQ0VTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eXQ4NTMxc19jb25maWdfaW5pdCYjMzQ7LAogICAgJiMzNDt5dDg1MjFfY29uZmlnX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlZGljYXRlZCBpbml0aWFsaXphdGlvbiBjYWxsYmFjayB5dDg1MzFzX2NvbmZpZ19pbml0IGZvciB0aGUgTW90b3Jjb21tIFlUODUzMVMgRXRoZXJuZXQgUEhZLCBmYWN0b3JpbmcgY29tbW9uIGluaXRpYWxpemF0aW9uIGludG8gX195dDg1MjFfY29uZmlnX2luaXQgYW5kIGFkZGluZyBzdXBwb3J0IGZvciBlbmFibGluZyB0aGUgYW5hbG9nIGZyb250LWVuZCBEQUMgY2xvY2sgd2hlbiBvcGVyYXRpbmcgaW4gR01JSSBtb2RlLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGRyaXZlciBjb25maWd1cmF0aW9uIGZsb3cgYW5kIGNhbiBiZSBleGVjdXRlZCB2aWEgTURJTyAvIHBoeWxpYiB0aHJvdWdoIGVtdWxhdGVkIFVTQiBvciBuZXR3b3JrIGNvbnRyb2xsZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDEzODA2ZmI0ZTY3ZDAyYjc4MWU1YzQ5NWRhMDk0NjNmNzZlODhmNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDA3OjU0OjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jCmluZGV4IGM1YTJjZGE4ZDMxYmQuLjkwYTRmODZmMjc1OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMKQEAgLTE0NCw2ICYjNDM7MTQ0LDExIEBACiAjZGVmaW5lIFlUODUyMV9DTE9DS19HQVRJTkdfUkVHCQkJMHhDCiAjZGVmaW5lIFlUODUyMV9DR1JfUlhfQ0xLX0VOCQkJQklUKDEyKQogCiYjNDM7LyogQW5hbG9nIGZyb250LWVuZCBjb250cm9sIHJlZ2lzdGVyIDMgKi8KJiM0MzsjZGVmaW5lIFlUODUzMVNfRVhUX0FGRV9DVFJMMwkJCTB4MTIKJiM0MzsvKiBBbmFsb2cgZnJvbnQtZW5kIERBQyBjbG9jayBlbmFibGUgKi8KJiM0MzsjZGVmaW5lIFlUODUzMVNfQUZFX0NUUkwzX0NMS0RBQ19BT04JCUJJVCgxMykKJiM0MzsKICNkZWZpbmUgWVQ4NTIxX0VYVFJFR19TTEVFUF9DT05UUk9MMV9SRUcJMHgyNwogI2RlZmluZSBZVDg1MjFfRVNDMVJfU0xFRVBfU1cJCQlCSVQoMTUpCiAjZGVmaW5lIFlUODUyMV9FU0MxUl9QTExPTl9TTFAJCQlCSVQoMTQpCkBAIC0xNjgwLDI3ICYjNDM7MTY4NSwxNiBAQCBzdGF0aWMgaW50IHl0ODUyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAlyZXR1cm4geXQ4NTIxX21vZGlmeV91dHBfZmliZXJfYm1jcihwaHlkZXYsIEJNQ1JfUERPV04sIDApOwogfQogCi0vKioKLSAqIHl0ODUyMV9jb25maWdfaW5pdCgpIC0gY2FsbGVkIHRvIGluaXRpYWxpemUgdGhlIFBIWQotICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQotICoKLSAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCi0gKi8KLXN0YXRpYyBpbnQgeXQ4NTIxX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7c3RhdGljIGludCBfX3l0ODUyMV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGh5ZGV2LSZndDttZGlvLmRldjsKLQlpbnQgb2xkX3BhZ2U7CiAJaW50IHJldCA9IDA7CiAKLQlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODUyMV9SU1NSX1VUUF9TUEFDRSk7Ci0JaWYgKG9sZF9wYWdlICZsdDsgMCkKLQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwotCiAJLyogc2V0IHJnbWlpIGRlbGF5IG1vZGUgKi8KIAlpZiAocGh5ZGV2LSZndDtpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKSB7CiAJCXJldCA9IHl0cGh5X3JnbWlpX2Nsa19kZWxheV9jb25maWcocGh5ZGV2KTsKIAkJaWYgKHJldCAmbHQ7IDApCi0JCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQkJcmV0dXJuIHJldDsKIAl9CiAKIAlpZiAoZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYsICYjMzQ7bW90b3Jjb21tLGF1dG8tc2xlZXAtZGlzYWJsZWQmIzM0OykpIHsKQEAgLTE3MDgsMjAgJiM0MzsxNzAyLDU4IEBAIHN0YXRpYyBpbnQgeXQ4NTIxX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJCXJldCA9IHl0cGh5X21vZGlmeV9leHQocGh5ZGV2LCBZVDg1MjFfRVhUUkVHX1NMRUVQX0NPTlRST0wxX1JFRywKIAkJCQkgICAgICAgWVQ4NTIxX0VTQzFSX1NMRUVQX1NXLCAwKTsKIAkJaWYgKHJldCAmbHQ7IDApCi0JCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQkJcmV0dXJuIHJldDsKIAl9CiAKLQlpZiAoZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYsICYjMzQ7bW90b3Jjb21tLGtlZXAtcGxsLWVuYWJsZWQmIzM0OykpIHsKJiM0MzsJaWYgKGRldmljZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LCAmIzM0O21vdG9yY29tbSxrZWVwLXBsbC1lbmFibGVkJiMzNDspKQogCQkvKiBlbmFibGUgUlhDIGNsb2NrIHdoZW4gbm8gd2lyZSBwbHVnICovCi0JCXJldCA9IHl0cGh5X21vZGlmeV9leHQocGh5ZGV2LCBZVDg1MjFfQ0xPQ0tfR0FUSU5HX1JFRywKLQkJCQkgICAgICAgWVQ4NTIxX0NHUl9SWF9DTEtfRU4sIDApOwotCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiB5dHBoeV9tb2RpZnlfZXh0KHBoeWRldiwgWVQ4NTIxX0NMT0NLX0dBVElOR19SRUcsCiYjNDM7CQkJCQlZVDg1MjFfQ0dSX1JYX0NMS19FTiwgMCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg1MjFfY29uZmlnX2luaXQoKSAtIGNhbGxlZCB0byBpbml0aWFsaXplIHRoZSBQSFkKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiByZXR1cm5zIDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4NTIxX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2UsIHJldCA9IDA7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4NTIxX1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKG9sZF9wYWdlICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0gX195dDg1MjFfY29uZmlnX2luaXQocGh5ZGV2KTsKJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHl0ODUzMXNfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBvbGRfcGFnZSwgcmV0ID0gMDsKJiM0MzsKJiM0MzsJb2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg1MjFfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBfX3l0ODUyMV9jb25maWdfaW5pdChwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlpZiAocGh5X2ludGVyZmFjZV9pc19yZ21paShwaHlkZXYpKSB7CiYjNDM7CQlyZXQgPSB5dDg1MzFfc2V0X2RzKHBoeWRldik7CiYjNDM7CQlpZiAocmV0KQogCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwogCX0KIAotCWlmIChwaHlfaW50ZXJmYWNlX2lzX3JnbWlpKHBoeWRldikgJmFtcDsmYW1wOwotCSAgICBwaHlkZXZfaWRfY29tcGFyZShwaHlkZXYsIFBIWV9JRF9ZVDg1MzFTKSkKLQkJcmV0ID0geXQ4NTMxX3NldF9kcyhwaHlkZXYpOwomIzQzOwlpZiAocGh5ZGV2LSZndDtpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkpCiYjNDM7CQlyZXQgPSB5dHBoeV9tb2RpZnlfZXh0KHBoeWRldiwgWVQ4NTMxU19FWFRfQUZFX0NUUkwzLAomIzQzOwkJCQkgICAgICAgMCwgWVQ4NTMxU19BRkVfQ1RSTDNfQ0xLREFDX0FPTik7CiAKIGVycl9yZXN0b3JlX3BhZ2U6CiAJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKQEAgLTMxMzUsNyAmIzQzOzMxNjcsNyBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7CiAJCS5zZXRfd29sCT0geXRwaHlfc2V0X3dvbCwKIAkJLmNvbmZpZ19hbmVnCT0geXQ4NTIxX2NvbmZpZ19hbmVnLAogCQkuYW5lZ19kb25lCT0geXQ4NTIxX2FuZWdfZG9uZSwKLQkJLmNvbmZpZ19pbml0CT0geXQ4NTIxX2NvbmZpZ19pbml0LAomIzQzOwkJLmNvbmZpZ19pbml0CT0geXQ4NTMxc19jb25maWdfaW5pdCwKIAkJLnJlYWRfc3RhdHVzCT0geXQ4NTIxX3JlYWRfc3RhdHVzLAogCQkuc29mdF9yZXNldAk9IHl0ODUyMV9zb2Z0X3Jlc2V0LAogCQkuc3VzcGVuZAk9IHl0ODUyMV9zdXNwZW5kLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTg4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCYjMzk7cyBldmVuIHdvcnRoIGNvbnNpZGVyaW5nIGZvciBmdXp6aW5nLiBUaGUgY2hhbmdlIGlzIGluIGBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNgLCBzbyBteSBmaXJzdCB0aG91Z2h0IGlzLCAmIzM0O1doYXQmIzM5O3MgdGhhdCBhbGwgYWJvdXQ/JiMzNDsgUmlnaHQsIGl0JiMzOTtzIGEgUEhZIGRyaXZlciDigJMgc3BlY2lmaWNhbGx5LCBmb3IgdGhvc2UgTW90b3Jjb21tIFBIWSBjaGlwcyBsaWtlIHRoZSBZVDg1MTEsIFlUODUyMSwgYW5kIFlUODUzMVMuIE5vdywgdGhlc2UgYXJlIE1ESU8gRXRoZXJuZXQgUEhZIGRyaXZlcnMsIGFuZCB0aGV5IGxpdmUgd2l0aGluIGBkcml2ZXJzL25ldC9waHkvYC4KClRoZSBiaWcgcXVlc3Rpb24sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGNhbiBiZSByZWFjaGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIENhbiBJIGdldCB0byB0aGlzIHN0dWZmIGluIFFFTVUgb3IgR0NFPyBPciBhbSBJIGdvaW5nIHRvIGJlIHN0dWNrIG5lZWRpbmcgc3BlY2lmaWMgcGh5c2ljYWwgRXRoZXJuZXQgaGFyZHdhcmUgYW5kIGFuIE1ESU8gYnVzPwoKSG9sZCBvbiwgbGV0JiMzOTtzIHJldmlldyB0aGUgcnVsZXMuIFdlIGRvbiYjMzk7dCB3YW50IHRvIHdhc3RlIHRpbWUgb24gdGhpbmdzIHRoYXQgYXJlIG9idmlvdXNseSBvZmYtbGltaXRzLiBUaGUgZ3VpZGVsaW5lcyBhcmUgcHJldHR5IGNsZWFyOiBEb2N1bWVudGF0aW9uIGNoYW5nZXMsIGxvZ2dpbmcgdHdlYWtzLCBub24tZnVuY3Rpb25hbCBjb25zdGFudCBjaGFuZ2VzLCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLiBhbmQgc3R1ZmYgdGhhdCBuZWVkcyBzcGVjaWFsaXplZCBoYXJkd2FyZS4gR2l2ZW4gdGhhdCB0aGlzIGlzIGEgUEhZIGRyaXZlciwgaXQmIzM5O3MgcHJldHR5IGxpa2VseSB3ZSBhcmUgZ29pbmcgdG8gbmVlZCB0aGUgaGFyZHdhcmUuCgpTbywgYmFjayB0byBgbW90b3Jjb21tLmNgLiBJdCYjMzk7cyBkZWZpbml0ZWx5IGZvciB0aG9zZSBkaXNjcmV0ZSBQSFkgY2hpcHMsIHJpZ2h0PyBZVDg1MTEsIHRoYXQgc29ydCBvZiB0aGluZywgYWxsIGhhbmdpbmcgb2ZmIGFuIE1ESU8gYnVzLiBDYW4gSSBlbXVsYXRlIHRoYXQ/IElzIHRoZXJlIHNvbWUgdmlydHVhbCBNRElPIG1hZ2ljIG91dCB0aGVyZSwgb3IgYW0gSSBjb21wbGV0ZWx5IGhhcmR3YXJlLWRlcGVuZGVudCBoZXJlPyBJJiMzOTttIGdvaW5nIHRvIGRvIGEgcXVpY2sgc2VhcmNoIGluIHRoZSBjb2RlYmFzZSBmb3IgYG1vdG9yY29tbWAgb3IgYE1PVE9SQ09NTV9QSFlgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgaGludCBvZiB2aXJ0dWFsaXphdGlvbiBzdXBwb3J0LiBIb3BlZnVsbHksIHRoZSByZXN1bHRzIHBvaW50IHRvIHNvbWUgdmlydHVhbCBNRElPIC8gbW9jayBNRElPLiBPdGhlcndpc2UsIEkgd2lsbCBtYXJrIHRoaXMgYXMgKm5vdCogd29ydGggZnV6emluZyBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNT1RPUkNPTU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTM1Mz1jb25maWcgTUlDUk9TRU1JX1BIWVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTM2MS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjM2Mjpjb25maWcgTU9UT1JDT01NX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzYzLVx0dHJpc3RhdGUgXCYjMzQ7TW90b3Jjb21tIFBIWXNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9ODQ9b2JqLSQoQ09ORklHX01JQ1JPU0VNSV9QSFkpXHQmIzQzOz0gbXNjYy9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo4NTpvYmotJChDT05GSUdfTU9UT1JDT01NX1BIWSlcdCYjNDM7PSBtb3RvcmNvbW0ub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTg2LW9iai0kKENPTkZJR19OQVRJT05BTF9QSFkpXHQmIzQzOz0gbmF0aW9uYWwub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NzcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIE1vdG9yY29tbSBQSFkgRHJpdmVyKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNgIHNvdXJjZSBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZHJpdmVyIGlzIGRvaW5nLiBJJiMzOTtsbCBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIHRoZSBgbW90b3Jjb21tX3BoeV9kcnZzYCBkYXRhIHN0cnVjdHVyZS4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBzdGFydGluZyBwb2ludCBmb3IgUEhZIGRyaXZlciBpbXBsZW1lbnRhdGlvbnM7IGl0IGRlZmluZXMgdGhlIHN1cHBvcnRlZCBQSFkgSURzIGFuZCBhc3NvY2lhdGVkIGZ1bmN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgZHJpdmVyJiMzOTtzIHByb2JlIGFuZCBtYXRjaCByb3V0aW5lcyB3b3JrLiBVbmRlcnN0YW5kaW5nIHRoYXQgaW50ZXJhY3Rpb24gaXMga2V5LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIGRyaXZlciBpZGVudGlmaWVzIGEgTW90b3Jjb21tIFBIWSBhbmQgdGhlbiBob3cgaXQgaW5pdGlhbGl6ZXMgYW5kIGNvbmZpZ3VyZXMgaXQuIEkgc3VzcGVjdCB0aGVyZSYjMzk7cyBhIGRldmljZSBJRCBtYXRjaCBpbnZvbHZlZCwgbGlrZWx5IGNoZWNraW5nIGFnYWluc3Qgc29tZSByZWdpc3RlciB2YWx1ZXMuIEkgd2FudCB0byBzZWUgZXhhY3RseSBob3cgdGhlIGRyaXZlciBkZXRlcm1pbmVzIGlmIGl0JiMzOTtzIHRoZSByaWdodCBvbmUgZm9yIGEgZ2l2ZW4gaGFyZHdhcmUgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzE1MDpcdFx0XHQuc3VzcGVuZFx0PSBnZW5waHlfc3VzcGVuZCxcbjMxNTE6XHRcdFx0LnJlc3VtZVx0XHQ9IGdlbnBoeV9yZXN1bWUsXG4zMTUyOlx0XHRcdC5nZXRfd29sXHQ9IHl0cGh5X2dldF93b2wsXG4zMTUzOlx0XHRcdC5zZXRfd29sXHQ9IHl0ODUzMV9zZXRfd29sLFxuMzE1NDpcdFx0XHQubGlua19jaGFuZ2Vfbm90aWZ5ID0geXQ4NTMxX2xpbmtfY2hhbmdlX25vdGlmeSxcbjMxNTU6XHRcdFx0LmxlZF9od19pc19zdXBwb3J0ZWQgPSB5dDg1MjFfbGVkX2h3X2lzX3N1cHBvcnRlZCxcbjMxNTY6XHRcdFx0LmxlZF9od19jb250cm9sX3NldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9zZXQsXG4zMTU3Olx0XHRcdC5sZWRfaHdfY29udHJvbF9nZXQgPSB5dDg1MjFfbGVkX2h3X2NvbnRyb2xfZ2V0LFxuMzE1ODpcdFx0fSxcbjMxNTk6XHRcdHtcbjMxNjA6XHRcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzFTKSxcbjMxNjE6XHRcdFx0Lm5hbWVcdFx0PSBcJiMzNDtZVDg1MzFTIEdpZ2FiaXQgRXRoZXJuZXRcJiMzNDssXG4zMTYyOlx0XHRcdC5nZXRfZmVhdHVyZXNcdD0geXQ4NTIxX2dldF9mZWF0dXJlcyxcbjMxNjM6XHRcdFx0LnByb2JlXHRcdD0geXQ4NTIxX3Byb2JlLFxuMzE2NDpcdFx0XHQucmVhZF9wYWdlXHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXG4zMTY1Olx0XHRcdC53cml0ZV9wYWdlXHQ9IHl0ODUyMV93cml0ZV9wYWdlLFxuMzE2NjpcdFx0XHQuZ2V0X3dvbFx0PSB5dHBoeV9nZXRfd29sLFxuMzE2NzpcdFx0XHQuc2V0X3dvbFx0PSB5dHBoeV9zZXRfd29sLFxuMzE2ODpcdFx0XHQuY29uZmlnX2FuZWdcdD0geXQ4NTIxX2NvbmZpZ19hbmVnLFxuMzE2OTpcdFx0XHQuYW5lZ19kb25lXHQ9IHl0ODUyMV9hbmVnX2RvbmUsXG4zMTcwOlx0XHRcdC5jb25maWdfaW5pdFx0PSB5dDg1MzFzX2NvbmZpZ19pbml0LFxuMzE3MTpcdFx0XHQucmVhZF9zdGF0dXNcdD0geXQ4NTIxX3JlYWRfc3RhdHVzLFxuMzE3MjpcdFx0XHQuc29mdF9yZXNldFx0PSB5dDg1MjFfc29mdF9yZXNldCxcbjMxNzM6XHRcdFx0LnN1c3BlbmRcdD0geXQ4NTIxX3N1c3BlbmQsXG4zMTc0Olx0XHRcdC5yZXN1bWVcdFx0PSB5dDg1MjFfcmVzdW1lLFxuMzE3NTpcdFx0fSxcbjMxNzY6XHRcdHtcbjMxNzc6XHRcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpLFxuMzE3ODpcdFx0XHQubmFtZVx0XHRcdD0gXCYjMzQ7WVQ4ODIxIDIuNUdicHMgUEhZXCYjMzQ7LFxuMzE3OTpcdFx0XHQuZ2V0X2ZlYXR1cmVzXHRcdD0geXQ4ODIxX2dldF9mZWF0dXJlcyxcbjMxODA6XHRcdFx0LnJlYWRfcGFnZVx0XHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXG4zMTgxOlx0XHRcdC53cml0ZV9wYWdlXHRcdD0geXQ4NTIxX3dyaXRlX3BhZ2UsXG4zMTgyOlx0XHRcdC5nZXRfd29sXHRcdD0geXRwaHlfZ2V0X3dvbCxcbjMxODM6XHRcdFx0LnNldF93b2xcdFx0PSB5dHBoeV9zZXRfd29sLFxuMzE4NDpcdFx0XHQuY29uZmlnX2FuZWdcdFx0PSBnZW5waHlfY29uZmlnX2FuZWcsXG4zMTg1Olx0XHRcdC5hbmVnX2RvbmVcdFx0PSB5dDg4MjFfYW5lZ19kb25lLFxuMzE4NjpcdFx0XHQuY29uZmlnX2luaXRcdFx0PSB5dDg4MjFfY29uZmlnX2luaXQsXG4zMTg3Olx0XHRcdC5nZXRfcmF0ZV9tYXRjaGluZ1x0PSB5dDg4MjFfZ2V0X3JhdGVfbWF0Y2hpbmcsXG4zMTg4Olx0XHRcdC5yZWFkX3N0YXR1c1x0XHQ9IHl0ODgyMV9yZWFkX3N0YXR1cyxcbjMxODk6XHRcdFx0LnNvZnRfcmVzZXRcdFx0PSB5dDg4MjFfc29mdF9yZXNldCxcbjMxOTA6XHRcdFx0LnN1c3BlbmRcdFx0PSB5dDg4MjFfc3VzcGVuZCxcbjMxOTE6XHRcdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODIxX3Jlc3VtZSxcbjMxOTI6XHRcdH0sXG4zMTkzOlx0fTtcbjMxOTQ6XHRcbjMxOTU6XHRtb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpO1xuMzE5NjpcdFxuMzE5NzpcdE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyXCYjMzQ7KTtcbjMxOTg6XHRNT0RVTEVfQVVUSE9SKFwmIzM0O1BldGVyIEdlaXNcJiMzNDspO1xuMzE5OTpcdE1PRFVMRV9BVVRIT1IoXCYjMzQ7RnJhbmtcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5ODkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIFBIWSBEcml2ZXIgSW5zdGFudGlhdGlvbiBpbiBWaXJ0dWFsIEVudmlyb25tZW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGhvdyB0aGVzZSBQSFkgZHJpdmVycyBhcmUgdHlwaWNhbGx5IGJyb3VnaHQgdG8gbGlmZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBwcm9iaW5nIG1lY2hhbmlzbTsgSSBiZWxpZXZlIHRoZXkga2V5IG9mZiB0aG9zZSBQSFkgSUQgcmVnaXN0ZXJzLCBgTUlJX1BIWVNJRDFgIGFuZCBgTUlJX1BIWVNJRDJgLCBhY2Nlc3NlZCB0aHJvdWdoIE1ESU8uIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gcGxhdGZvcm1zIGxpa2UgUUVNVSwgR0NFLCBvciB0aGUgbWFpbmxpbmUgTGludXgga2VybmVsIHByb3ZpZGUgYW55IHNvcnQgb2YgTURJTyBidXMgZW11bGF0aW9uIG9yIG1vY2sgZHJpdmVyIEkgY2FuIGxldmVyYWdlLgoKU28sIHRoZSBuZXh0IHN0ZXAgaXMgY2xlYXI6IGxldCYjMzk7cyB2ZXJpZnkgaWYgTURJTyBQSFkgZHJpdmVycyBhcmUgYWNjZXNzaWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRvIGFjaGlldmUgdGhpcywgYSBmb2N1c2VkIHNlYXJjaCBpcyByZXF1aXJlZC4gSSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIHRoZSBjb2RlIHVzaW5nIHNlYXJjaCB0ZXJtcyByZWxhdGVkIHRvIE1ESU8gaW1wbGVtZW50YXRpb24uIFRoYXQgaW5jbHVkZXMgYG1kaW9gLCBgbWRpb19idXNgLCBgbWRpby1ncGlvYCwgYW5kIGBtZGlvLWJpdGJhbmdgLCBhbmQgb3RoZXIgc2ltaWxhciB0ZXJtcyB0aGF0IG1heSBiZSByZWxldmFudC4gVGhpcyBzaG91bGQgaGVscCB0byBkZXRlcm1pbmUgdGhlIGF2YWlsYWJpbGl0eSBvZiBNRElPIHdpdGhpbiB0aGVzZSBlbnZpcm9ubWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAzNjg4IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc9OTA9Y29uZmlnIE1ESU9fR1BJT1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy05Ny1cdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjk4Olx0ICB3aWxsIGJlIGNhbGxlZCBtZGlvLWdwaW8uXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctOTktXG4tLVxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZS0zLVxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19BQ1BJX01ESU8pXHRcdCYjNDM7PSBhY3BpX21kaW8ub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19GV05PREVfTURJTylcdCYjNDM7PSBmd25vZGVfbWRpby5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX09GX01ESU8pXHRcdCYjNDM7PSBvZl9tZGlvLm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGUtNy1cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6ODpvYmotJChDT05GSUdfTURJT19BSVJPSEEpXHRcdCYjNDM7PSBtZGlvLWFpcm9oYS5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX01ESU9fQVNQRUVEKVx0XHQmIzQzOz0gbWRpby1hc3BlZWQub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfTURJT19CQ01fSVBST0MpXHRcdCYjNDM7PSBtZGlvLWJjbS1pcHJvYy5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19NRElPX0JDTV9VTklNQUMpXHRcdCYjNDM7PSBtZGlvLWJjbS11bmltYWMub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfTURJT19CSVRCQU5HKVx0XHQmIzQzOz0gbWRpby1iaXRiYW5nLm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX01ESU9fQ0FWSVVNKVx0XHQmIzQzOz0gbWRpby1jYXZpdW0ub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfTURJT19HUElPKVx0XHRcdCYjNDM7PSBtZGlvLWdwaW8ub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToxNTpvYmotJChDT05GSUdfTURJT19ISVNJX0ZFTUFDKVx0XHQmIzQzOz0gbWRpby1oaXNpLWZlbWFjLm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX01ESU9fSTJDKVx0XHRcdCYjNDM7PSBtZGlvLWkyYy5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjE3Om9iai0kKENPTkZJR19NRElPX0lQUTQwMTkpXHRcdCYjNDM7PSBtZGlvLWlwcTQwMTkub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToxODpvYmotJChDT05GSUdfTURJT19JUFE4MDY0KVx0XHQmIzQzOz0gbWRpby1pcHE4MDY0Lm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MTk6b2JqLSQoQ09ORklHX01ESU9fTU9YQVJUKVx0XHQmIzQzOz0gbWRpby1tb3hhcnQub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfTURJT19NU0NDX01JSU0pXHRcdCYjNDM7PSBtZGlvLW1zY2MtbWlpbS5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjIxOm9iai0kKENPTkZJR19NRElPX01WVVNCKVx0XHQmIzQzOz0gbWRpby1tdnVzYi5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjIyOm9iai0kKENPTkZJR19NRElPX09DVEVPTilcdFx0JiM0Mzs9IG1kaW8tb2N0ZW9uLm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MjM6b2JqLSQoQ09ORklHX01ESU9fUElDNjRIUFNDKVx0XHQmIzQzOz0gbWRpby1waWM2NGhwc2Mub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfTURJT19SRUFMVEVLX1JUTDkzMDApXHQmIzQzOz0gbWRpby1yZWFsdGVrLXJ0bDkzMDAub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfTURJT19SRUdNQVApXHRcdCYjNDM7PSBtZGlvLXJlZ21hcC5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19NRElPX1NVTjRJKVx0XHQmIzQzOz0gbWRpby1zdW40aS5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19NRElPX1RIVU5ERVIpXHRcdCYjNDM7PSBtZGlvLXRodW5kZXIub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToyODpvYmotJChDT05GSUdfTURJT19YR0VORSlcdFx0JiM0Mzs9IG1kaW8teGdlbmUub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZS0yOS1cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MzA6b2JqLSQoQ09ORklHX01ESU9fQlVTX01VWClcdFx0JiM0Mzs9IG1kaW8tbXV4Lm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX01ESU9fQlVTX01VWF9CQ002MzY4KVx0JiM0Mzs9IG1kaW8tbXV4LWJjbTYzNjgub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZTozMjpvYmotJChDT05GSUdfTURJT19CVVNfTVVYX0JDTV9JUFJPQylcdCYjNDM7PSBtZGlvLW11eC1iY20taXByb2Mub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZTozMzpvYmotJChDT05GSUdfTURJT19CVVNfTVVYX0dQSU8pXHRcdCYjNDM7PSBtZGlvLW11eC1ncGlvLm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX01ESU9fQlVTX01VWF9NRVNPTl9HMTJBKVx0JiM0Mzs9IG1kaW8tbXV4LW1lc29uLWcxMmEub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZTozNTpvYmotJChDT05GSUdfTURJT19CVVNfTVVYX01FU09OX0dYTClcdCYjNDM7PSBtZGlvLW11eC1tZXNvbi1neGwub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZTozNjpvYmotJChDT05GSUdfTURJT19CVVNfTVVYX01NSU9SRUcpIFx0JiM0Mzs9IG1kaW8tbXV4LW1taW9yZWcub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfTURJT19CVVNfTVVYX01VTFRJUExFWEVSKSBcdCYjNDM7PSBtZGlvLW11eC1tdWx0aXBsZXhlci5vXG4tLVxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYy05LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2FjcGkuaFx1MDAzZVxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYzoxMDojaW5jbHVkZSBcdTAwM2NsaW51eC9hY3BpX21kaW8uaFx1MDAzZVxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYy0xMS0jaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtMTItI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXHUwMDNlXG5kcml2ZXJzL25ldC9tZGlvL2FjcGlfbWRpby5jOjEzOiNpbmNsdWRlIFx1MDAzY2xpbnV4L2Z3bm9kZV9tZGlvLmhcdTAwM2VcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtMTQtI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL25ldC9tZGlvL2FjcGlfbWRpby5jPTE5PU1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtBQ1BJIE1ESU8gYnVzIChFdGhlcm5ldCBQSFkpIGFjY2Vzc29yc1wmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYy0yMS0vKipcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmM6MjI6ICogX19hY3BpX21kaW9idXNfcmVnaXN0ZXIgLSBSZWdpc3RlciBtaWlfYnVzIGFuZCBjcmVhdGUgUEhZcyBmcm9tIHRoZSBBQ1BJIEFTTC5cbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmM6MjM6ICogQG1kaW86IHBvaW50ZXIgdG8gbWlpX2J1cyBzdHJ1Y3R1cmVcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtMjQtICogQGZ3bm9kZTogcG9pbnRlciB0byBmd25vZGUgb2YgTURJTyBidXMuIFRoaXMgZndub2RlIGlzIGV4cGVjdGVkIHRvIHJlcHJlc2VudFxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYzoyNTogKiBAb3duZXI6IG1vZHVsZSBvd25pbmcgdGhpcyBAbWRpbyBvYmplY3QuXG5kcml2ZXJzL25ldC9tZGlvL2FjcGlfbWRpby5jLTI2LSAqIGFuIEFDUEkgZGV2aWNlIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBNRElPIGJ1cyBhbmQgaXRzIGNoaWxkcmVuIGFyZVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtMzEtICovXG5kcml2ZXJzL25ldC9tZGlvL2FjcGlfbWRpby5jOjMyOmludCBfX2FjcGlfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSxcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtMzMtXHRcdFx0ICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtMzktXHQvKiBNYXNrIG91dCBhbGwgUEhZcyBmcm9tIGF1dG8gcHJvYmluZy4gKi9cbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmM6NDA6XHRtZGlvLVx1MDAzZXBoeV9tYXNrID0gR0VOTUFTSygzMSwgMCk7XG5kcml2ZXJzL25ldC9tZGlvL2FjcGlfbWRpby5jOjQxOlx0cmV0ID0gX19tZGlvYnVzX3JlZ2lzdGVyKG1kaW8sIG93bmVyKTtcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtNDItXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtNDQtXG5kcml2ZXJzL25ldC9tZGlvL2FjcGlfbWRpby5jOjQ1Olx0QUNQSV9DT01QQU5JT05fU0VUKFx1MDAyNm1kaW8tXHUwMDNlZGV2LCB0b19hY3BpX2RldmljZV9ub2RlKGZ3bm9kZSkpO1xuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYy00Ni1cbi0tXG5kcml2ZXJzL25ldC9tZGlvL2FjcGlfbWRpby5jLTUyLVxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYzo1MzpcdFx0cmV0ID0gZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KG1kaW8sIGNoaWxkLCBhZGRyKTtcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtNTQtXHRcdGlmIChyZXQgPT0gLUVOT0RFVilcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmM6NTU6XHRcdFx0ZGV2X2VycihcdTAwMjZtZGlvLVx1MDAzZWRldixcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtNTYtXHRcdFx0XHRcJiMzNDtNRElPIGRldmljZSBhdCBhZGRyZXNzICVkIGlzIG1pc3NpbmcuXFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtNjAtfVxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYzo2MTpFWFBPUlRfU1lNQk9MKF9fYWNwaV9tZGlvYnVzX3JlZ2lzdGVyKTtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXHUwMDNlXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6MTE6I2luY2x1ZGUgXHUwMDNjbGludXgvZndub2RlX21kaW8uaFx1MDAzZVxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTEyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM9NDI9Zndub2RlX2ZpbmRfbWlpX3RpbWVzdGFtcGVyKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTY5LVxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjcwOmludCBmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTcxLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXG4tLVxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTgwLVx0aWYgKHJjID09IC1FUFJPQkVfREVGRVIpXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6ODE6XHRcdHJjID0gZHJpdmVyX2RlZmVycmVkX3Byb2JlX2NoZWNrX3N0YXRlKFx1MDAyNnBoeS1cdTAwM2VtZGlvLmRldik7XG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtODItXHRpZiAocmMgPT0gLUVQUk9CRV9ERUZFUilcbi0tXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtODYtXHRcdHBoeS1cdTAwM2VpcnEgPSByYztcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzo4NzpcdFx0bWRpby1cdTAwM2VpcnFbYWRkcl0gPSByYztcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy04OC1cdH0gZWxzZSB7XG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6ODk6XHRcdHBoeS1cdTAwM2VpcnEgPSBtZGlvLVx1MDAzZWlycVthZGRyXTtcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy05MC1cdH1cbi0tXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtOTItXHRpZiAoZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChjaGlsZCwgXCYjMzQ7YnJva2VuLXR1cm4tYXJvdW5kXCYjMzQ7KSlcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzo5MzpcdFx0bWRpby1cdTAwM2VwaHlfaWdub3JlX3RhX21hc2sgfD0gMSBcdTAwM2NcdTAwM2MgYWRkcjtcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy05NC1cbi0tXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtOTgtXHRmd25vZGVfaGFuZGxlX2dldChjaGlsZCk7XG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6OTk6XHRkZXZpY2Vfc2V0X25vZGUoXHUwMDI2cGh5LVx1MDAzZW1kaW8uZGV2LCBjaGlsZCk7XG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTAwLVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMDUtXHRpZiAocmMpIHtcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzoxMDY6XHRcdGRldmljZV9zZXRfbm9kZShcdTAwMjZwaHktXHUwMDNlbWRpby5kZXYsIE5VTEwpO1xuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTEwNy1cdFx0Zndub2RlX2hhbmRsZV9wdXQoY2hpbGQpO1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMTAtXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6MTExOlx0ZGV2X2RiZyhcdTAwMjZtZGlvLVx1MDAzZWRldiwgXCYjMzQ7cmVnaXN0ZXJlZCBwaHkgZndub2RlICVwZncgYXQgYWRkcmVzcyAlaVxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMTItXHRcdGNoaWxkLCBhZGRyKTtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTE0LX1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzoxMTU6RVhQT1JUX1NZTUJPTChmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMTYtXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6MTE3OmludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cyxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMTgtXHRcdFx0XHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqY2hpbGQsIHUzMiBhZGRyKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xNDYtXHRcdCAqL1xuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjE0NzpcdFx0cGh5LVx1MDAzZW1kaW8uZGV2LmZ3bm9kZSA9IGZ3bm9kZV9oYW5kbGVfZ2V0KGNoaWxkKTtcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xNDgtXG4tLVxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTE1MS1cdFx0aWYgKHJjKSB7XG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6MTUyOlx0XHRcdHBoeS1cdTAwM2VtZGlvLmRldi5md25vZGUgPSBOVUxMO1xuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTE1My1cdFx0XHRmd25vZGVfaGFuZGxlX3B1dChjaGlsZCk7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTE1Ni1cdH0gZWxzZSBpZiAoaXNfb2Zfbm9kZShjaGlsZCkpIHtcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzoxNTc6XHRcdHJjID0gZndub2RlX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihidXMsIHBoeSwgY2hpbGQsIGFkZHIpO1xuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTE1OC1cdFx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xODgtfVxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjE4OTpFWFBPUlRfU1lNQk9MKGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeSk7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTExLSNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MTI6I2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbWRpby5oXHUwMDNlXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTMtI2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfYWRkcmVzcy5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTM5LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjQwOnN0cnVjdCBhaXJvaGFfbWRpb19kYXRhIHtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy00MS1cdHUzMiBiYXNlX2FkZHI7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTQ2LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjQ3OnN0YXRpYyBpbnQgYWlyb2hhX21kaW9fd2FpdF9idXN5KHN0cnVjdCBhaXJvaGFfbWRpb19kYXRhICpwcml2KVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTQ4LXtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtNTYtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6NTc6c3RhdGljIHZvaWQgYWlyb2hhX21kaW9fcmVzZXQoc3RydWN0IGFpcm9oYV9tZGlvX2RhdGEgKnByaXYpXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtNTgte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy03My1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzo3NDpzdGF0aWMgaW50IGFpcm9oYV9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWdudW0pXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtNzUte1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjc2Olx0c3RydWN0IGFpcm9oYV9tZGlvX2RhdGEgKnByaXYgPSBidXMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy03Ny1cdHUzMiB2YWw7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTc5LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjgwOlx0YWlyb2hhX21kaW9fcmVzZXQocHJpdik7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtODEtXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTkwLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjkxOlx0cmV0ID0gYWlyb2hhX21kaW9fd2FpdF9idXN5KHByaXYpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTkyLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTAxLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjEwMjpzdGF0aWMgaW50IGFpcm9oYV9tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtLFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTEwMy1cdFx0XHQgICAgIHUxNiB2YWx1ZSlcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xMDQte1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjEwNTpcdHN0cnVjdCBhaXJvaGFfbWRpb19kYXRhICpwcml2ID0gYnVzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTA2LVx0dTMyIHZhbDtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTE4LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjExOTpcdHJldCA9IGFpcm9oYV9tZGlvX3dhaXRfYnVzeShwcml2KTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xMjAtXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTEyMy1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoxMjQ6c3RhdGljIGludCBhaXJvaGFfbWRpb19jbDQ1X3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXZudW0sXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTI1LVx0XHRcdFx0IGludCByZWdudW0pXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTI2LXtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoxMjc6XHRzdHJ1Y3QgYWlyb2hhX21kaW9fZGF0YSAqcHJpdiA9IGJ1cy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTEyOC1cdHUzMiB2YWw7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTEzMC1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoxMzE6XHRhaXJvaGFfbWRpb19yZXNldChwcml2KTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xMzItXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTE0Mi1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoxNDM6XHRyZXQgPSBhaXJvaGFfbWRpb193YWl0X2J1c3kocHJpdik7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTQ0LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTU1LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjE1NjpcdHJldCA9IGFpcm9oYV9tZGlvX3dhaXRfYnVzeShwcml2KTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xNTctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xNjYtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MTY3OnN0YXRpYyBpbnQgYWlyb2hhX21kaW9fY2w0NV93cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IGRldm51bSxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xNjgtXHRcdFx0XHQgIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xNjkte1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjE3MDpcdHN0cnVjdCBhaXJvaGFfbWRpb19kYXRhICpwcml2ID0gYnVzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTcxLVx0dTMyIHZhbDtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTgzLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjE4NDpcdHJldCA9IGFpcm9oYV9tZGlvX3dhaXRfYnVzeShwcml2KTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xODUtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xOTctXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MTk4Olx0cmV0ID0gYWlyb2hhX21kaW9fd2FpdF9idXN5KHByaXYpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTE5OS1cbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMjAyLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjIwMzpzdGF0aWMgaW50IGFpcm9oYV9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMjA0LXtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0yMDUtXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoyMDY6XHRzdHJ1Y3QgYWlyb2hhX21kaW9fZGF0YSAqcHJpdjtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0yMDctXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0yMTQtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MjE1Olx0YnVzID0gZGV2bV9tZGlvYnVzX2FsbG9jX3NpemUoZGV2LCBzaXplb2YoKnByaXYpKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0yMTYtXHRpZiAoIWJ1cylcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMjM0LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjIzNTpcdGJ1cy1cdTAwM2VuYW1lID0gXCYjMzQ7YWlyb2hhX21kaW9fYnVzXCYjMzQ7O1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTIzNi1cdHNucHJpbnRmKGJ1cy1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcJiMzNDslcy1taWlcJiMzNDssIGRldl9uYW1lKGRldikpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTIzNy1cdGJ1cy1cdTAwM2VwYXJlbnQgPSBkZXY7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MjM4Olx0YnVzLVx1MDAzZXJlYWQgPSBhaXJvaGFfbWRpb19yZWFkO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjIzOTpcdGJ1cy1cdTAwM2V3cml0ZSA9IGFpcm9oYV9tZGlvX3dyaXRlO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjI0MDpcdGJ1cy1cdTAwM2VyZWFkX2M0NSA9IGFpcm9oYV9tZGlvX2NsNDVfcmVhZDtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoyNDE6XHRidXMtXHUwMDNld3JpdGVfYzQ1ID0gYWlyb2hhX21kaW9fY2w0NV93cml0ZTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0yNDItXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTI1MC1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoyNTE6XHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIGRldi1cdTAwM2VvZl9ub2RlKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0yNTItXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTI1OS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoyNjA6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYWlyb2hhX21kaW9fZHRfaWRzW10gPSB7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MjYxOlx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O2Fpcm9oYSxhbjc1ODMtbWRpb1wmIzM0OyB9LFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTI2Mi1cdHsgfVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTI2My19O1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjI2NDpNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhaXJvaGFfbWRpb19kdF9pZHMpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTI2NS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoyNjY6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX21kaW9fZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjI2NzpcdC5wcm9iZSA9IGFpcm9oYV9tZGlvX3Byb2JlLFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTI2OC1cdC5kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MjY5Olx0XHQubmFtZSA9IFwmIzM0O2Fpcm9oYS1tZGlvXCYjMzQ7LFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjI3MDpcdFx0Lm9mX21hdGNoX3RhYmxlID0gYWlyb2hhX21kaW9fZHRfaWRzLFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTI3MS1cdH0sXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTI3My1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoyNzQ6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihhaXJvaGFfbWRpb19kcml2ZXIpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTI3NS1cbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjg6I2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby5oXHUwMDNlXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtOS0jaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTEwLSNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxMTojaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9tZGlvLmhcdTAwM2VcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xNC1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxNTojZGVmaW5lIERSVl9OQU1FIFwmIzM0O21kaW8tYXNwZWVkXCYjMzQ7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTYtXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTQyLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjQzOnN0cnVjdCBhc3BlZWRfbWRpbyB7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtNDQtXHR2b2lkIF9faW9tZW0gKmJhc2U7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTQ3LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjQ4OnN0YXRpYyBpbnQgYXNwZWVkX21kaW9fb3Aoc3RydWN0IG1paV9idXMgKmJ1cywgdTggc3QsIHU4IG9wLCB1OCBwaHlhZCwgdTggcmVnYWQsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtNDktXHRcdFx0ICB1MTYgZGF0YSlcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy01MC17XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6NTE6XHRzdHJ1Y3QgYXNwZWVkX21kaW8gKmN0eCA9IGJ1cy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTUyLVx0dTMyIGN0cmw7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTc4LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjc5OnN0YXRpYyBpbnQgYXNwZWVkX21kaW9fZ2V0X2RhdGEoc3RydWN0IG1paV9idXMgKmJ1cylcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy04MC17XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6ODE6XHRzdHJ1Y3QgYXNwZWVkX21kaW8gKmN0eCA9IGJ1cy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTgyLVx0dTMyIGRhdGE7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTk0LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjk1OnN0YXRpYyBpbnQgYXNwZWVkX21kaW9fcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWdudW0pXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtOTYte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy05OC1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzo5OTpcdHJjID0gYXNwZWVkX21kaW9fb3AoYnVzLCBBU1BFRURfTURJT19DVFJMX1NUX0MyMiwgTURJT19DMjJfT1BfUkVBRCxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xMDAtXHRcdFx0ICAgIGFkZHIsIHJlZ251bSwgMCk7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTEwMy1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxMDQ6XHRyZXR1cm4gYXNwZWVkX21kaW9fZ2V0X2RhdGEoYnVzKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xMDUtfVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTEwNi1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxMDc6c3RhdGljIGludCBhc3BlZWRfbWRpb193cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWdudW0sXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTA4LVx0XHRcdFx0IHUxNiB2YWwpXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTA5LXtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxMTA6XHRyZXR1cm4gYXNwZWVkX21kaW9fb3AoYnVzLCBBU1BFRURfTURJT19DVFJMX1NUX0MyMiwgTURJT19DMjJfT1BfV1JJVEUsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTExLVx0XHRcdCAgICAgIGFkZHIsIHJlZ251bSwgdmFsKTtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTEzLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjExNDpzdGF0aWMgaW50IGFzcGVlZF9tZGlvX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2YWQsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTE1LVx0XHRcdFx0aW50IHJlZ251bSlcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTE4LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjExOTpcdHJjID0gYXNwZWVkX21kaW9fb3AoYnVzLCBBU1BFRURfTURJT19DVFJMX1NUX0M0NSwgTURJT19DNDVfT1BfQUREUixcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xMjAtXHRcdFx0ICAgIGFkZHIsIGRldmFkLCByZWdudW0pO1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xMjMtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MTI0Olx0cmMgPSBhc3BlZWRfbWRpb19vcChidXMsIEFTUEVFRF9NRElPX0NUUkxfU1RfQzQ1LCBNRElPX0M0NV9PUF9SRUFELFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTEyNS1cdFx0XHQgICAgYWRkciwgZGV2YWQsIDApO1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xMjgtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MTI5Olx0cmV0dXJuIGFzcGVlZF9tZGlvX2dldF9kYXRhKGJ1cyk7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTMwLX1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xMzEtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MTMyOnN0YXRpYyBpbnQgYXNwZWVkX21kaW9fd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2YWQsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTMzLVx0XHRcdFx0IGludCByZWdudW0sIHUxNiB2YWwpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTEzNi1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxMzc6XHRyYyA9IGFzcGVlZF9tZGlvX29wKGJ1cywgQVNQRUVEX01ESU9fQ1RSTF9TVF9DNDUsIE1ESU9fQzQ1X09QX0FERFIsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTM4LVx0XHRcdCAgICBhZGRyLCBkZXZhZCwgcmVnbnVtKTtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTQxLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjE0MjpcdHJldHVybiBhc3BlZWRfbWRpb19vcChidXMsIEFTUEVFRF9NRElPX0NUUkxfU1RfQzQ1LCBNRElPX0M0NV9PUF9XUklURSxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xNDMtXHRcdFx0ICAgICAgYWRkciwgZGV2YWQsIHZhbCk7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTE0NS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxNDY6c3RhdGljIGludCBhc3BlZWRfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTE0Ny17XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MTQ4Olx0c3RydWN0IGFzcGVlZF9tZGlvICpjdHg7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTQ5LVx0c3RydWN0IG1paV9idXMgKmJ1cztcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTUxLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjE1MjpcdGJ1cyA9IGRldm1fbWRpb2J1c19hbGxvY19zaXplKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKmN0eCkpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTE1My1cdGlmICghYnVzKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xNjktXHRidXMtXHUwMDNlcGFyZW50ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MTcwOlx0YnVzLVx1MDAzZXJlYWQgPSBhc3BlZWRfbWRpb19yZWFkX2MyMjtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxNzE6XHRidXMtXHUwMDNld3JpdGUgPSBhc3BlZWRfbWRpb193cml0ZV9jMjI7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MTcyOlx0YnVzLVx1MDAzZXJlYWRfYzQ1ID0gYXNwZWVkX21kaW9fcmVhZF9jNDU7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MTczOlx0YnVzLVx1MDAzZXdyaXRlX2M0NSA9IGFzcGVlZF9tZGlvX3dyaXRlX2M0NTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xNzQtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MTc1Olx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgcGRldi1cdTAwM2VkZXYub2Zfbm9kZSk7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTc2LVx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTE4Ni1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxODc6c3RhdGljIHZvaWQgYXNwZWVkX21kaW9fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTg4LXtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xODktXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gKHN0cnVjdCBtaWlfYnVzICopcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MTkwOlx0c3RydWN0IGFzcGVlZF9tZGlvICpjdHggPSBidXMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xOTEtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTkyLVx0cmVzZXRfY29udHJvbF9hc3NlcnQoY3R4LVx1MDAzZXJlc2V0KTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxOTM6XHRtZGlvYnVzX3VucmVnaXN0ZXIoYnVzKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xOTQtfVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTE5NS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxOTY6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXNwZWVkX21kaW9fb2ZfbWF0Y2hbXSA9IHtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxOTc6XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YXNwZWVkLGFzdDI2MDAtbWRpb1wmIzM0OywgfSxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xOTgtXHR7IH0sXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTk5LX07XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MjAwOk1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGFzcGVlZF9tZGlvX29mX21hdGNoKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0yMDEtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MjAyOnN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFzcGVlZF9tZGlvX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0yMDMtXHQuZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTIwNC1cdFx0Lm5hbWUgPSBEUlZfTkFNRSxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoyMDU6XHRcdC5vZl9tYXRjaF90YWJsZSA9IGFzcGVlZF9tZGlvX29mX21hdGNoLFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTIwNi1cdH0sXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MjA3Olx0LnByb2JlID0gYXNwZWVkX21kaW9fcHJvYmUsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MjA4Olx0LnJlbW92ZSA9IGFzcGVlZF9tZGlvX3JlbW92ZSxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0yMDktfTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0yMTAtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MjExOm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYXNwZWVkX21kaW9fZHJpdmVyKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0yMTItXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTExLSNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX3BsYXRmb3JtLmhcdTAwM2VcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoxMjojaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9tZGlvLmhcdTAwM2VcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xMy0jaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0zNS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzozNjpzdHJ1Y3QgaXByb2NfbWRpb19wcml2IHtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0zNy1cdHN0cnVjdCBtaWlfYnVzICptaWlfYnVzO1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy00MC1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzo0MTpzdGF0aWMgaW5saW5lIGludCBpcHJvY19tZGlvX3dhaXRfZm9yX2lkbGUodm9pZCBfX2lvbWVtICpiYXNlKVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTQyLXtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtNTYtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6NTc6c3RhdGljIGlubGluZSB2b2lkIGlwcm9jX21kaW9fY29uZmlnX2Nsayh2b2lkIF9faW9tZW0gKmJhc2UpXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtNTgte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy02NS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzo2NjpzdGF0aWMgaW50IGlwcm9jX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnKVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTY3LXtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzo2ODpcdHN0cnVjdCBpcHJvY19tZGlvX3ByaXYgKnByaXYgPSBidXMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy02OS1cdHUzMiBjbWQ7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTcxLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjcyOlx0cmMgPSBpcHJvY19tZGlvX3dhaXRfZm9yX2lkbGUocHJpdi1cdTAwM2ViYXNlKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy03My1cdGlmIChyYylcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtODQtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6ODU6XHRyYyA9IGlwcm9jX21kaW9fd2FpdF9mb3JfaWRsZShwcml2LVx1MDAzZWJhc2UpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTg2LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy05My1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzo5NDpzdGF0aWMgaW50IGlwcm9jX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy05NS1cdFx0XHQgICAgaW50IHJlZywgdTE2IHZhbClcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy05Ni17XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6OTc6XHRzdHJ1Y3QgaXByb2NfbWRpb19wcml2ICpwcml2ID0gYnVzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtOTgtXHR1MzIgY21kO1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xMDAtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTAxOlx0cmMgPSBpcHJvY19tZGlvX3dhaXRfZm9yX2lkbGUocHJpdi1cdTAwM2ViYXNlKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xMDItXHRpZiAocmMpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTExNC1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoxMTU6XHRyYyA9IGlwcm9jX21kaW9fd2FpdF9mb3JfaWRsZShwcml2LVx1MDAzZWJhc2UpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTExNi1cdGlmIChyYylcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTIxLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjEyMjpzdGF0aWMgaW50IGlwcm9jX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xMjMte1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjEyNDpcdHN0cnVjdCBpcHJvY19tZGlvX3ByaXYgKnByaXY7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTI1LVx0c3RydWN0IG1paV9idXMgKmJ1cztcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTM3LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjEzODpcdHByaXYtXHUwMDNlbWlpX2J1cyA9IG1kaW9idXNfYWxsb2MoKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xMzktXHRpZiAoIXByaXYtXHUwMDNlbWlpX2J1cykge1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xNDgtXHRidXMtXHUwMDNlcGFyZW50ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTQ5Olx0YnVzLVx1MDAzZXJlYWQgPSBpcHJvY19tZGlvX3JlYWQ7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTUwOlx0YnVzLVx1MDAzZXdyaXRlID0gaXByb2NfbWRpb193cml0ZTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xNTEtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTUyOlx0aXByb2NfbWRpb19jb25maWdfY2xrKHByaXYtXHUwMDNlYmFzZSk7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTUzLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE1NDpcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIHBkZXYtXHUwMDNlZGV2Lm9mX25vZGUpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE1NS1cdGlmIChyYykge1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE1Ni1cdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7TURJTyBidXMgcmVnaXN0cmF0aW9uIGZhaWxlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTU3Olx0XHRnb3RvIGVycl9pcHJvY19tZGlvO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE1OC1cdH1cbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTY1LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE2NjplcnJfaXByb2NfbWRpbzpcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoxNjc6XHRtZGlvYnVzX2ZyZWUoYnVzKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xNjgtXHRyZXR1cm4gcmM7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE3MC1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoxNzE6c3RhdGljIHZvaWQgaXByb2NfbWRpb19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xNzIte1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE3MzpcdHN0cnVjdCBpcHJvY19tZGlvX3ByaXYgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xNzQtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTc1Olx0bWRpb2J1c191bnJlZ2lzdGVyKHByaXYtXHUwMDNlbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTc2Olx0bWRpb2J1c19mcmVlKHByaXYtXHUwMDNlbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTc3LX1cbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTc5LSNpZmRlZiBDT05GSUdfUE1fU0xFRVBcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoxODA6c3RhdGljIGludCBpcHJvY19tZGlvX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTgxLXtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xODItXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTgzOlx0c3RydWN0IGlwcm9jX21kaW9fcHJpdiAqcHJpdiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE4NC1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xODUtXHQvKiByZXN0b3JlIHRoZSBtaWkgY2xvY2sgY29uZmlndXJhdGlvbiAqL1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE4NjpcdGlwcm9jX21kaW9fY29uZmlnX2Nsayhwcml2LVx1MDAzZWJhc2UpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE4Ny1cbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTkwLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE5MTpzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgaXByb2NfbWRpb19wbV9vcHMgPSB7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTkyOlx0LnJlc3VtZSA9IGlwcm9jX21kaW9fcmVzdW1lXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTkzLX07XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE5NS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoxOTY6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgaXByb2NfbWRpb19vZl9tYXRjaFtdID0ge1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE5NzpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDticmNtLGlwcm9jLW1kaW9cJiMzNDssIH0sXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTk4LVx0eyAvKiBzZW50aW5lbCAqLyB9LFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE5OS19O1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjIwMDpNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBpcHJvY19tZGlvX29mX21hdGNoKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0yMDEtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MjAyOnN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlwcm9jX21kaW9fZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTIwMy1cdC5kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MjA0Olx0XHQubmFtZSA9IFwmIzM0O2lwcm9jLW1kaW9cJiMzNDssXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MjA1Olx0XHQub2ZfbWF0Y2hfdGFibGUgPSBpcHJvY19tZGlvX29mX21hdGNoLFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTIwNi0jaWZkZWYgQ09ORklHX1BNX1NMRUVQXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MjA3Olx0XHQucG0gPSBcdTAwMjZpcHJvY19tZGlvX3BtX29wcyxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0yMDgtI2VuZGlmXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMjA5LVx0fSxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoyMTA6XHQucHJvYmUgPSBpcHJvY19tZGlvX3Byb2JlLFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjIxMTpcdC5yZW1vdmUgPSBpcHJvY19tZGlvX3JlbW92ZSxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0yMTItfTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0yMTMtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MjE0Om1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoaXByb2NfbWRpb19kcml2ZXIpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTIxNS1cbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM9MjE4PU1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTCB2MlwmIzM0Oyk7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MjE5Ok1PRFVMRV9BTElBUyhcJiMzNDtwbGF0Zm9ybTppcHJvYy1tZGlvXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jLTEzLSNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmM6MTQ6I2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbWRpby5oXHUwMDNlXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jLTE1LSNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX3BsYXRmb3JtLmhcdTAwM2VcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmMtMTYtI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjUyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEludmVzdGlnYXRpb24gaW50byBNb3RvcmNvbW0gUEhZIEVtdWxhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHBvc3NpYmxlIHRvIGluc3RhbnRpYXRlIGEgTW90b3Jjb21tIFBIWSB3aXRoaW4gYW4gZW52aXJvbm1lbnQgbGlrZSBRRU1VLCBHb29nbGUgQ29tcHV0ZSBFbmdpbmUsIG9yIGV2ZW4gc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyLiBUaGUgZmlyc3Qgc3RlcCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBQSFkgZGV2aWNlcyBhcmUgZXZlbiByZWdpc3RlcmVkIGluIHRoZSBMaW51eCBrZXJuZWwuIFJpZ2h0LCB0aGV5JiMzOTtyZSB0aWVkIHRvIHRoZSBNRElPIGJ1cywgdXN1YWxseS4gV2hlbiB0aGUgTURJTyBidXMgc2NhbnMsIGl0IGxvb2tzIGF0IHJlZ2lzdGVycyBNSUlfUEhZU0lEMSBhbmQgTUlJX1BIWVNJRDIsIHNwZWNpZmljYWxseS4gSWYgdGhvc2UgcmVnaXN0ZXJzIG1hdGNoIGEga25vd24gTW90b3Jjb21tIFBIWSBJRCwgbGlrZSBgUEhZX0lEX1lUODUzMVNgIG9yIFlUODUxMSwgdGhlbiB0aGUgTW90b3Jjb21tIGRyaXZlciBzaG91bGQgYmluZCB0byBpdC4gT3IsIG9mIGNvdXJzZSwgdGhyb3VnaCB0aGUgZGV2aWNlIHRyZWUsIEFDUEksIGZ3bm9kZSwgb3IgdGhlIGV0aGVybmV0IGRyaXZlciBjb25uZWN0aW5nIHRvIHRoZSBQSFkuCgpUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBEb2VzIFFFTVUsIGluIGl0cyBlbXVsYXRlZCBoYXJkd2FyZSBvZmZlcmluZ3MsICphbHJlYWR5KiBpbmNsdWRlIHNvbWV0aGluZyB0aGF0IGV4cG9zZXMgYSBNb3RvcmNvbW0gUEhZPyBCYXNlZCBvbiBteSBrbm93bGVkZ2UsIHRoZSBzdGFuZGFyZCBRRU1VIG5ldHdvcmsgZGV2aWNlc+KAlGUxMDAwLCBlMTAwMGUsIHJ0bDgxMzksIHZpcnRpby1uZXQsIHBjbmV0LCBuZTJrLCBpZ2IsIGV0Yy7igJRlaXRoZXIgZG9uJiMzOTt0IHV0aWxpemUgdGhlIExpbnV4IHBoeWxpYiBmcmFtZXdvcmsgd2l0aCBleHRlcm5hbCBQSFkgZHJpdmVycywgdXNlIHRoZWlyIG93biBpbnRlcm5hbCBvciBzdGFuZGFyZCBQSFlzLCBvciBlbXVsYXRlIEludGVsIG9yIFJlYWx0ZWsgUEhZcywgd2hpY2gsIG9mIGNvdXJzZSwgaXNuJiMzOTt0IHdoYXQgSSYjMzk7bSBsb29raW5nIGZvci4gVGhleSYjMzk7cmUgbm90IGdvaW5nIHRvIGJlIG1pbWlja2luZyBNb3RvcmNvbW0mIzM5O3MgaGFyZHdhcmUuCgpOb3csIGxldCBtZSBwaXZvdC4gUGVyaGFwcyBpdCYjMzk7cyB3b3J0aCB0YWtpbmcgYSBsb29rIGF0IFVTQiBldGhlcm5ldCBkb25nbGVzLCBvciBldmVuIFVTQiBNRElPIGFkYXB0ZXJzIHRoZW1zZWx2ZXMuIE1heWJlIHNvbWV0aGluZyBsaWtlIHRoZSBgbWRpby1tdnVzYmAgb3IgYGF4ODgxNzlfMTc4YWAgZHJpdmVycywgb3IgZXZlbiB0aGUgdXNibmV0IC8gY2RjX2V0aGVyIG9wdGlvbnMuIFRoZSBrZXkgaXMgaWYgYW55IG9mIHRoZXNlIGxldmVyYWdlIHRoZSBwaHlsaWIgZnJhbWV3b3JrIGFuZCBwb3RlbnRpYWxseSBob29rIGludG8gYSBNb3RvcmNvbW0gUEhZLiBJJiMzOTtsbCBuZWVkIHRvIGludmVzdGlnYXRlIGlmIGEgVVNCIG5ldHdvcmsgYWRhcHRlciBjb3VsZCB1c2UgYSBgbW90b3Jjb21tYCBkcml2ZXIgb3IgdXNlIGEgZ2VuZXJhbCBQSFkgdmlhIHRoZSBwaHlsaWIgbGlicmFyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UEhZX0lEX1lUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE1LVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjE2OiNkZWZpbmUgUEhZX0lEX1lUODUxMVx0XHQweDAwMDAwMTBhXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTc6I2RlZmluZSBQSFlfSURfWVQ4NTIxXHRcdDB4MDAwMDAxMWFcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxODojZGVmaW5lIFBIWV9JRF9ZVDg1MjJcdFx0MHg0ZjUxZTkyOFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjE5OiNkZWZpbmUgUEhZX0lEX1lUODUzMVx0XHQweDRmNTFlOTFiXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MjA6I2RlZmluZSBQSFlfSURfWVQ4NTMxU1x0XHQweDRmNTFlOTFhXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MjE6I2RlZmluZSBQSFlfSURfWVQ4ODIxXHRcdDB4NGY1MWVhMTlcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0yMi0vKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXdcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9ODk2PXN0YXRpYyBpbnQgeXRwaHlfcmdtaWlfY2xrX2RlbGF5X2NvbmZpZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy05MjctXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJOlxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjkyODpcdFx0aWYgKHBoeWRldi1cdTAwM2VkcnYtXHUwMDNlcGh5X2lkICE9IFBIWV9JRF9ZVDg1MzFTKVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTkyOS1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTEwNjk9c3RhdGljIGludCB5dDg1MjFfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTEyOC1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxMTI5Olx0aWYgKHBoeWRldi1cdTAwM2VkcnYtXHUwMDNlcGh5X2lkID09IFBIWV9JRF9ZVDg1MjEpIHtcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMTMwLVx0XHRzd2l0Y2ggKGZyZXEpIHtcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTE1NS1cdFx0fVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjExNTY6XHR9IGVsc2UgaWYgKHBoeWRldi1cdTAwM2VkcnYtXHUwMDNlcGh5X2lkID09IFBIWV9JRF9ZVDg1MzFTKSB7XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTE1Ny1cdFx0c3dpdGNoIChmcmVxKSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTMxMDc9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxMDgtXHR7XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MzEwOTpcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MTEpLFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxMTAtXHRcdC5uYW1lXHRcdD0gXCYjMzQ7WVQ4NTExIEdpZ2FiaXQgRXRoZXJuZXRcJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxMTctXHR7XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MzExODpcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MjEpLFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxMTktXHRcdC5uYW1lXHRcdD0gXCYjMzQ7WVQ4NTIxIEdpZ2FiaXQgRXRoZXJuZXRcJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxMzctXHR7XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MzEzODpcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MjIpLFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxMzktXHRcdC5uYW1lXHRcdD0gXCYjMzQ7WVQ4NTIyIDEwMCBNZWdhYml0IEV0aGVybmV0XCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0zMTQ1LVx0e1xuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjMxNDY6XHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxKSxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0zMTQ3LVx0XHQubmFtZVx0XHQ9IFwmIzM0O1lUODUzMSBHaWdhYml0IEV0aGVybmV0XCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0zMTU5LVx0e1xuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjMxNjA6XHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUyksXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMzE2MS1cdFx0Lm5hbWVcdFx0PSBcJiMzNDtZVDg1MzFTIEdpZ2FiaXQgRXRoZXJuZXRcJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxNzYtXHR7XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MzE3NzpcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpLFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxNzgtXHRcdC5uYW1lXHRcdFx0PSBcJiMzNDtZVDg4MjEgMi41R2JwcyBQSFlcJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTMyMDI9c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MzIwMzpcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MTEpIH0sXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MzIwNDpcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MjEpIH0sXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MzIwNTpcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MjIpIH0sXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MzIwNjpcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpIH0sXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MzIwNzpcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzFTKSB9LFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjMyMDg6XHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODIxKSB9LFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMyMDktXHR7IC8qIHNlbnRpbmVsICovIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1MjYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIFVTQiBFdGhlcm5ldCBEcml2ZXIgUEhZIENvbm5lY3Rpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIGlmIGFueSBvZiB0aGUgVVNCIEV0aGVybmV0IGRyaXZlcnMgYXJlIGxldmVyYWdpbmcgdGhlIGBwaHlsaWJgIGZyYW1ld29yayB0byBpbnRlcmZhY2Ugd2l0aCBleHRlcm5hbCBQSFlzLiBUaGlzIGlzIGEgY29tbW9uIGFuZCBvZnRlbiBwcmVmZXJyZWQgYXJjaGl0ZWN0dXJlLCBzbyBpdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4KClRoZSBtb3N0IGVmZmljaWVudCBhcHByb2FjaCBoZXJlIGlzIGEgdGFyZ2V0ZWQgY29kZSBzZWFyY2guIEkmIzM5O2xsIHVzZSBgZ3JlcGAgdG8gc2NhbiB0aGUgYGRyaXZlcnMvbmV0L3VzYi9gIGRpcmVjdG9yeS4gSSYjMzk7bGwgc2VhcmNoIGZvciBrZXkgaW5kaWNhdG9ycyBvZiBgcGh5bGliYCB1c2FnZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBsb29rIGZvciBjYWxscyB0byB0aGUgYHBoeV9jb25uZWN0YCBmdW5jdGlvbiBvciByZWZlcmVuY2VzIHRvIGBwaHlsaW5rYC4gVGhlc2UgYXJlIHRoZSBicmVhZGNydW1icyB0aGF04oCZbGwgbGlrZWx5IGxlYWQgbWUgdG8gdGhlIHJlbGV2YW50IGRyaXZlcnMgdXNpbmcgdGhpcyBhcmNoaXRlY3R1cmUsIG9yIGF0IGxlYXN0IHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24uIEl0JiMzOTtzIGEgZm9jdXNlZCBzZWFyY2ggdGhhdCBzaG91bGQgeWllbGQgcXVpY2sgcmVzdWx0cywgZWxpbWluYXRpbmcgdGhlIG5lZWQgdG8gcmVhZCB0aHJvdWdoIHRoZSBlbnRpcmUgY29kZSBiYXNlLiBUaW1lIHRvIHNlZSB3aGF0IHRoYXQgYGdyZXBgIHJldmVhbHMuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X2Nvbm5lY3R8cGh5X2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTcwMz1zdGF0aWMgaW50IGF4ODg3NzJfaW5pdF9waHkoc3RydWN0IHVzYm5ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy03MjItXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6NzIzOlx0cGh5X2F0dGFjaGVkX2luZm8ocHJpdi1cdTAwM2VwaHlkZXYpO1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTcyNC1cbi0tXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz0yNjE9c3RhdGljIGludCBheDg4MTcyYV9yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMzEzLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MzE0Olx0cHJpdi1cdTAwM2VwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYtXHUwMDNlbmV0LCBwcml2LVx1MDAzZXBoeV9uYW1lLFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMzE1LVx0XHRcdFx0ICAgXHUwMDI2YXg4ODE3MmFfYWRqdXN0X2xpbmssXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTE0Nz1zdGF0aWMgaW50IHNtc2M5NXh4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zilcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjg0LVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI4NTpcdHJldCA9IHBoeV9jb25uZWN0X2RpcmVjdChkZXYtXHUwMDNlbmV0LCBwZGF0YS1cdTAwM2VwaHlkZXYsXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjg2LVx0XHRcdFx0IFx1MDAyNnNtc2M5NXh4X2hhbmRsZV9saW5rX2NoYW5nZSxcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjkyLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI5MzpcdHBoeV9hdHRhY2hlZF9pbmZvKGRldi1cdTAwM2VuZXQtXHUwMDNlcGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyOTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzAxCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1ESU8gQnVzIEVtdWxhdGlvbiBhbmQgVVNCIEdhZGdldHM6IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHN5emthbGxlciBjYW4gZW11bGF0ZSBVU0IgZGV2aWNlcyB3aXRoIE1ESU8gYnVzc2VzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhvc2UgbGlrZSBgYXg4ODE3MmFgLCBgc21zYzk1eHhgLCBhbmQgYGxhbjc4eHhgLiBUaGVzZSBoYXZlIE1ESU8gYnVzc2VzLCBidXQgdGhleSYjMzk7cmUgYWNjZXNzZWQgb3ZlciBVU0IuIENhbiBzeXprYWxsZXImIzM5O3MgcmF3LWdhZGdldCAvIHVzYi1mdXp6ZXIgc2V0dXAgaGFuZGxlIHRoYXQ/IFRoZSBhbnN3ZXIgaXMgeWVzLCBzeXprYWxsZXIgZG9lcyBoYXZlIFVTQiBlbXVsYXRpb24gdmlhIHJhdy1nYWRnZXQgYW5kIHRoZSBEdW1teSBIQ0QuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LgoKTm93LCB3aGVuIHN5emthbGxlciBlbXVsYXRlcyBvbmUgb2YgdGhlc2UgVVNCIGRldmljZXMg4oCTIHNheSwgYW55IG9mIHRob3NlIG1lbnRpb25lZCDigJMgdGhyb3VnaCByYXctZ2FkZ2V0IC8gdXNiLWZ1enplciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zIGR1cmluZyB0aGUgTURJTyBidXMgcHJvYmUuIFdoZW4gdGhlIGRldmljZSBnZXRzIHByb2JlZCwgSSBrbm93IHRoYXQgYG1kaW9idXNfcmVnaXN0ZXJgIG9yIGBnZXRfcGh5X2RldmljZWAgaXMgZ29pbmcgdG8gYmUgY2FsbGVkLCBhbmQgaXQmIzM5O3MgZ29pbmcgdG8gYXR0ZW1wdCB0byByZWFkIHJlZ2lzdGVycyAyIGFuZCAzIOKAkyB0aGUgUEhZIElEIOKAkyBvdmVyIFVTQi4gVGhlIGtleSBoZXJlIGlzICpob3cqIHRob3NlIHJlYWRzIGhhcHBlbi4gSXQmIzM5O3Mgbm90IHRocm91Z2ggc3RhbmRhcmQgVVNCIHRyYW5zZmVycywgYnV0IHRocm91Z2ggY29udHJvbCBvciB2ZW5kb3IgcmVxdWVzdHMgdG8gdGhlIGVtdWxhdGVkIFVTQiBnYWRnZXQhCgpXYWl0IGEgc2Vjb25kLCBsZXQmIzM5O3MgY29uY3JldGl6ZSB0aGlzLiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGVzZSBkcml2ZXJzIG9wZXJhdGUuIFRpbWUgdG8gbG9vayBpbnRvIHRoZSBhY3R1YWwgZHJpdmVyIGNvZGUhIEkgc2hvdWxkIGNoZWNrIGBkcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuY2Agb3IgYGxhbjc4eHguY2AgdG8gc2VlIHByZWNpc2VseSBob3cgdGhlIE1ESU8gcmVhZCBmdW5jdGlvbmFsaXR5IGlzIGltcGxlbWVudGVkLiBHb3R0YSBzZWUgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIGhvdyB0aG9zZSBVU0IgY29udHJvbC92ZW5kb3IgcmVxdWVzdHMgYXJlIGNvbnN0cnVjdGVkIGFuZCBoYW5kbGVkIHRvIGdldCB0aGUgUEhZIElELgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTA6XHRcdHJldCA9IGFzaXhfcmVhZF9waHlfYWRkcihkZXYsIHByaXYtXHUwMDNldXNlX2VtYmRwaHkpO1xuIDIxMTpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAyMTI6XHRcdFx0Z290byBmcmVlO1xuIDIxMzpcdFxuIDIxNDpcdFx0cHJpdi1cdTAwM2VwaHlfYWRkciA9IHJldDtcbiAyMTU6XHRcbiAyMTY6XHRcdGF4ODgxNzJhX3Jlc2V0X3BoeShkZXYsIHByaXYtXHUwMDNldXNlX2VtYmRwaHkpO1xuIDIxNzpcdFxuIDIxODpcdFx0LyogQXNpeCBmcmFtaW5nIHBhY2tzIG11bHRpcGxlIGV0aCBmcmFtZXMgaW50byBhIDJLIHVzYiBidWxrIHRyYW5zZmVyICovXG4gMjE5Olx0XHRpZiAoZGV2LVx1MDAzZWRyaXZlcl9pbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBGTEFHX0ZSQU1JTkdfQVgpIHtcbiAyMjA6XHRcdFx0LyogaGFyZF9tdHUgIGlzIHN0aWxsIHRoZSBkZWZhdWx0IC0gdGhlIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0XG4gMjIxOlx0XHRcdCAgIGp1bWJvIGV0aCBmcmFtZXMgKi9cbiAyMjI6XHRcdFx0ZGV2LVx1MDAzZXJ4X3VyYl9zaXplID0gMjA0ODtcbiAyMjM6XHRcdH1cbiAyMjQ6XHRcbiAyMjU6XHRcdC8qIGluaXQgTURJTyBidXMgKi9cbiAyMjY6XHRcdHJldCA9IGF4ODgxNzJhX2luaXRfbWRpbyhkZXYpO1xuIDIyNzpcdFx0aWYgKHJldClcbiAyMjg6XHRcdFx0Z290byBmcmVlO1xuIDIyOTpcdFxuIDIzMDpcdFx0cmV0dXJuIDA7XG4gMjMxOlx0XG4gMjMyOlx0ZnJlZTpcbiAyMzM6XHRcdGtmcmVlKHByaXYpO1xuIDIzNDpcdFx0cmV0dXJuIHJldDtcbiAyMzU6XHR9XG4gMjM2Olx0XG4gMjM3Olx0c3RhdGljIGludCBheDg4MTcyYV9zdG9wKHN0cnVjdCB1c2JuZXQgKmRldilcbiAyMzg6XHR7XG4gMjM5Olx0XHRzdHJ1Y3QgYXg4ODE3MmFfcHJpdmF0ZSAqcHJpdiA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbiAyNDA6XHRcbiAyNDE6XHRcdG5ldGRldl9kYmcoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7U3RvcHBpbmcgaW50ZXJmYWNlXFxuXCYjMzQ7KTtcbiAyNDI6XHRcbiAyNDM6XHRcdGlmIChwcml2LVx1MDAzZXBoeWRldikge1xuIDI0NDpcdFx0XHRuZXRkZXZfaW5mbyhkZXYtXHUwMDNlbmV0LCBcJiMzNDtEaXNjb25uZWN0aW5nIGZyb20gcGh5ICVzXFxuXCYjMzQ7LFxuIDI0NTpcdFx0XHRcdCAgICBwcml2LVx1MDAzZXBoeV9uYW1lKTtcbiAyNDY6XHRcdFx0cGh5X3N0b3AocHJpdi1cdTAwM2VwaHlkZXYpO1xuIDI0NzpcdFx0XHRwaHlfZGlzY29ubmVjdChwcml2LVx1MDAzZXBoeWRldik7XG4gMjQ4Olx0XHR9XG4gMjQ5Olx0XG4gMjUwOlx0XHRyZXR1cm4gMDtcbiAyNTE6XHR9XG4gMjUyOlx0XG4gMjUzOlx0c3RhdGljIHZvaWQgYXg4ODE3MmFfdW5iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gMjU0Olx0e1xuIDI1NTpcdFx0c3RydWN0IGF4ODgxNzJhX3ByaXZhdGUgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4gMjU2Olx0XG4gMjU3Olx0XHRheDg4MTcyYV9yZW1vdmVfbWRpbyhkZXYpO1xuIDI1ODpcdFx0a2ZyZWUocHJpdik7XG4gMjU5Olx0fVxuIDI2MDpcdFxuIDI2MTpcdHN0YXRpYyBpbnQgYXg4ODE3MmFfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxuIDI2MjpcdHtcbiAyNjM6XHRcdHN0cnVjdCBhc2l4X2RhdGEgKmRhdGEgPSAoc3RydWN0IGFzaXhfZGF0YSAqKVx1MDAyNmRldi1cdTAwM2VkYXRhO1xuIDI2NDpcdFx0c3RydWN0IGF4ODgxNzJhX3ByaXZhdGUgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4gMjY1Olx0XHRpbnQgcmV0O1xuIDI2NjpcdFx0dTE2IHJ4X2N0bDtcbiAyNjc6XHRcbiAyNjg6XHRcdGF4ODgxNzJhX3Jlc2V0X3BoeShkZXYsIHByaXYtXHUwMDNldXNlX2VtYmRwaHkpO1xuIDI2OTpcdFxuIDI3MDpcdFx0bXNsZWVwKDE1MCk7XG4gMjcxOlx0XHRyeF9jdGwgPSBhc2l4X3JlYWRfcnhfY3RsKGRldiwgMCk7XG4gMjcyOlx0XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O1JYX0NUTCBpcyAweCUwNHggYWZ0ZXIgc29mdHdhcmUgcmVzZXRcXG5cJiMzNDssIHJ4X2N0bCk7XG4gMjczOlx0XHRyZXQgPSBhc2l4X3dyaXRlX3J4X2N0bChkZXYsIDB4MDAwMCwgMCk7XG4gMjc0Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDI3NTpcdFx0XHRnb3RvIG91dDtcbiAyNzY6XHRcbiAyNzc6XHRcdHJ4X2N0bCA9IGFzaXhfcmVhZF9yeF9jdGwoZGV2LCAwKTtcbiAyNzg6XHRcdG5ldGRldl9kYmcoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7UlhfQ1RMIGlzIDB4JTA0eCBzZXR0aW5nIHRvIDB4MDAwMFxcblwmIzM0OywgcnhfY3RsKTtcbiAyNzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwNDYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBheDg4MTcyYV9pbml0X21kaW9gIGZ1bmN0aW9uLiBNeSBleHBlcnQgZXllIGltbWVkaWF0ZWx5IHdhbnRzIHRvIHVuZGVyc3RhbmQgaXRzIGNvcmUgcHVycG9zZSB3aXRoaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiBFdGhlcm5ldCBkcml2ZXIgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IHJlc3BvbnNpYmxlIGZvci4gRnJvbSB0aGUgbmFtZSwgSSYjMzk7bSBndWVzc2luZyBpdCBoYW5kbGVzIHRoZSBNRElPIGludGVyZmFjZSBzZXR1cCBmb3IgdGhlIEFYODgxNzJBIGNoaXAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIGEgY29tbW9uIHN0ZXAgaW4gYnJpbmdpbmcgdXAgYSBQSFkuIEkgbmVlZCB0byBzZWUgaWYgaXQgc2V0cyB1cCB0aGUgTURJTyBjbG9jaywgY29uZmlndXJlcyBhbnkgbmVjZXNzYXJ5IHJlZ2lzdGVycyBmb3IgTURJTyBjb21tdW5pY2F0aW9uLCBhbmQgcGVyaGFwcyBwZXJmb3JtcyBhbiBpbml0aWFsIHByb2JlIG9yIHJlc2V0IG9mIHRoZSBQSFkgYXR0YWNoZWQgdG8gdGhlIE1ESU8gYnVzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgcmVnaXN0ZXIgYWNjZXNzZXMgYW5kIGJpdCBtYW5pcHVsYXRpb25zIHdpdGhpbiB0aGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBFc3NlbnRpYWxseSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSB0aGUgZmlyc3Qgc3RlcCBpbiBlbmFibGluZyB0aGUgbGluayB3aXRoIHRoZSBQSFkuIFNvIEkgbmVlZCB0byBrbm93IGhvdyBkb2VzIGl0IGluaXRpYWxpemUgdGhlIE1JSSBpbnRlcmZhY2U/IFdoYXQgcmVnaXN0ZXIgc2V0dGluZ3MgZG9lcyBpdCBlbXBsb3k/IERvZXMgaXQgaW50ZXJhY3Qgd2l0aCBhIGhpZ2hlci1sZXZlbCBmcmFtZXdvcms/IFRoaXMgaXMgd2hlcmUgdGhlIHRydWUgdW5kZXJzdGFuZGluZyBiZWdpbnMgdG8gZW1lcmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDU6XHRcbiAxNDY6XHRcdHJldCA9IGFzaXhfc3dfcmVzZXQoZGV2LCBlbWJkX3BoeSA/IEFYX1NXUkVTRVRfSVBSTCA6IEFYX1NXUkVTRVRfSVBQRCxcbiAxNDc6XHRcdFx0XHQgICAgMCk7XG4gMTQ4Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDE0OTpcdFx0XHRnb3RvIGVycjtcbiAxNTA6XHRcbiAxNTE6XHRcdHJldHVybiAwO1xuIDE1MjpcdFxuIDE1MzpcdGVycjpcbiAxNTQ6XHRcdHJldHVybiByZXQ7XG4gMTU1Olx0fVxuIDE1NjpcdFxuIDE1NzpcdFxuIDE1ODpcdHN0YXRpYyBpbnQgYXg4ODE3MmFfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIDE1OTpcdHtcbiAxNjA6XHRcdGludCByZXQ7XG4gMTYxOlx0XHR1OCBidWZbRVRIX0FMRU5dO1xuIDE2MjpcdFx0c3RydWN0IGF4ODgxNzJhX3ByaXZhdGUgKnByaXY7XG4gMTYzOlx0XG4gMTY0Olx0XHRyZXQgPSB1c2JuZXRfZ2V0X2VuZHBvaW50cyhkZXYsIGludGYpO1xuIDE2NTpcdFx0aWYgKHJldClcbiAxNjY6XHRcdFx0cmV0dXJuIHJldDtcbiAxNjc6XHRcbiAxNjg6XHRcdHByaXYgPSBremFsbG9jX29iaigqcHJpdik7XG4gMTY5Olx0XHRpZiAoIXByaXYpXG4gMTcwOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDE3MTpcdFxuIDE3MjpcdFx0ZGV2LVx1MDAzZWRyaXZlcl9wcml2ID0gcHJpdjtcbiAxNzM6XHRcbiAxNzQ6XHRcdC8qIEdldCB0aGUgTUFDIGFkZHJlc3MgKi9cbiAxNzU6XHRcdHJldCA9IGFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9OT0RFX0lELCAwLCAwLCBFVEhfQUxFTiwgYnVmLCAwKTtcbiAxNzY6XHRcdGlmIChyZXQgXHUwMDNjIEVUSF9BTEVOKSB7XG4gMTc3Olx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7RmFpbGVkIHRvIHJlYWQgTUFDIGFkZHJlc3M6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIDE3ODpcdFx0XHRyZXQgPSAtRUlPO1xuIDE3OTpcdFx0XHRnb3RvIGZyZWU7XG4gMTgwOlx0XHR9XG4gMTgxOlx0XHRldGhfaHdfYWRkcl9zZXQoZGV2LVx1MDAzZW5ldCwgYnVmKTtcbiAxODI6XHRcbiAxODM6XHRcdGRldi1cdTAwM2VuZXQtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNmF4ODgxNzJhX25ldGRldl9vcHM7XG4gMTg0Olx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2YXg4ODE3MmFfZXRodG9vbF9vcHM7XG4gMTg1Olx0XG4gMTg2Olx0XHQvKiBhcmUgd2UgdXNpbmcgdGhlIGludGVybmFsIG9yIHRoZSBleHRlcm5hbCBwaHk/ICovXG4gMTg3Olx0XHRyZXQgPSBhc2l4X3JlYWRfY21kKGRldiwgQVhfQ01EX1NXX1BIWV9TVEFUVVMsIDAsIDAsIDEsIGJ1ZiwgMCk7XG4gMTg4Olx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gMTg5Olx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7RmFpbGVkIHRvIHJlYWQgc29mdHdhcmUgaW50ZXJmYWNlIHNlbGVjdGlvbiByZWdpc3RlcjogJWRcXG5cJiMzNDssXG4gMTkwOlx0XHRcdFx0ICAgcmV0KTtcbiAxOTE6XHRcdFx0Z290byBmcmVlO1xuIDE5MjpcdFx0fVxuIDE5MzpcdFxuIDE5NDpcdFx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDtBWF9DTURfU1dfUEhZX1NUQVRVUyA9IDB4JTAyeFxcblwmIzM0OywgYnVmWzBdKTtcbiAxOTU6XHRcdHN3aXRjaCAoYnVmWzBdIFx1MDAyNiBBWF9QSFlfU0VMRUNUX01BU0spIHtcbiAxOTY6XHRcdGNhc2UgQVhfUEhZX1NFTEVDVF9JTlRFUk5BTDpcbiAxOTc6XHRcdFx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDt1c2UgaW50ZXJuYWwgcGh5XFxuXCYjMzQ7KTtcbiAxOTg6XHRcdFx0cHJpdi1cdTAwM2V1c2VfZW1iZHBoeSA9IDE7XG4gMTk5Olx0XHRcdGJyZWFrO1xuIDIwMDpcdFx0Y2FzZSBBWF9QSFlfU0VMRUNUX0VYVEVSTkFMOlxuIDIwMTpcdFx0XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O3VzZSBleHRlcm5hbCBwaHlcXG5cJiMzNDspO1xuIDIwMjpcdFx0XHRwcml2LVx1MDAzZXVzZV9lbWJkcGh5ID0gMDtcbiAyMDM6XHRcdFx0YnJlYWs7XG4gMjA0Olx0XHRkZWZhdWx0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTI4NAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZm9jdXNpbmcgb24gbGluZXMgMTAwLTE0NSBvZiBgZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmNgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGNvZGUgd2l0aGluIHRoaXMgc2VjdGlvbi4KX19fCgoqKkFuYWx5emluZyBheDg4MTcyYS5jIExpbmVzIDEwMC0xNDUqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHNwZWNpZmljIGNodW5rIG9mIGNvZGUgd2l0aGluIHRoZSBsYXJnZXIgZHJpdmVyLiBHaXZlbiBteSBleHBlcmllbmNlLCB0aGUgY29udGV4dCBoZXJlIGxpa2VseSBpbnZvbHZlcyBpbml0aWFsaXphdGlvbiwgZGV2aWNlIHNldHVwLCBvciBwZXJoYXBzIGEgY3JpdGljYWwgaW50ZXJydXB0IGhhbmRsZXIuIFRoZXNlIGxpbmVzIGFyZSBjcnVjaWFsIGJlY2F1c2UgdGhleSB0eXBpY2FsbHkgaGFuZGxlIHRoZSBpbml0aWFsIGNvbW11bmljYXRpb24gd2l0aCB0aGUgQVg4ODE3MkEgY2hpcHNldCwgc2V0dGluZyB1cCB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGZvciBkYXRhIHRyYW5zZmVyLiBCYXNlZCBvbiB0aGUgZmlsZSBwYXRoLCBJIGV4cGVjdCB0byBzZWUgVVNCLXNwZWNpZmljIGFzcGVjdHMsIGxpa2UgZW5kcG9pbnQgY29uZmlndXJhdGlvbiwgc2V0dGluZyB1cCBjb250cm9sIHRyYW5zZmVycywgYW5kIHBvdGVudGlhbGx5IHNvbWUgZGV2aWNlLXNwZWNpZmljIHJlZ2lzdGVycyBiZWluZyBhZGRyZXNzZWQuIEkgbmVlZCB0byBvYnNlcnZlIGFueSBkYXRhIHN0cnVjdHVyZXMgdXNlZCB3aXRoaW4gdGhhdCBjb2RlIHNlZ21lbnQgYmVjYXVzZSB0aGV5IGdpdmUgY29udGV4dCB0byBob3cgY29tbXVuaWNhdGlvbiBoYXBwZW5zLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHRoZXNlIGxpbmVzIHdpbGwgZXN0YWJsaXNoIHRoZSBmb3VuZGF0aW9uIGZvciB0aGlzIFVTQiBuZXR3b3JrIGFkYXB0ZXIgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJZiB0aGVyZSYjMzk7cyBhbiBpbnRlcnJ1cHQgc2V0dXAsIHRoYXQmIzM5O3MgcmVhbGx5IGltcG9ydGFudCB0byBrZWVwIGFuIGV5ZSBvbiBiZWNhdXNlIGl0IGhhcyBhIGxvdCBvZiBlZmZlY3Qgb24gcGVyZm9ybWFuY2UuIEkmIzM5O20gZ29pbmcgdG8gZ2V0IGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgb2NjdXJzIGhlcmUgYmVmb3JlIGp1bXBpbmcgaW50byBhbnkgY29uY2x1c2lvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdFx0bWRpb2J1c19mcmVlKHByaXYtXHUwMDNlbWRpbyk7XG4gMTAxOlx0fVxuIDEwMjpcdFxuIDEwMzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYXg4ODE3MmFfbmV0ZGV2X29wcyA9IHtcbiAxMDQ6XHRcdC5uZG9fb3Blblx0XHQ9IHVzYm5ldF9vcGVuLFxuIDEwNTpcdFx0Lm5kb19zdG9wXHRcdD0gdXNibmV0X3N0b3AsXG4gMTA2Olx0XHQubmRvX3N0YXJ0X3htaXRcdFx0PSB1c2JuZXRfc3RhcnRfeG1pdCxcbiAxMDc6XHRcdC5uZG9fdHhfdGltZW91dFx0XHQ9IHVzYm5ldF90eF90aW1lb3V0LFxuIDEwODpcdFx0Lm5kb19jaGFuZ2VfbXR1XHRcdD0gdXNibmV0X2NoYW5nZV9tdHUsXG4gMTA5Olx0XHQubmRvX2dldF9zdGF0czY0XHQ9IGRldl9nZXRfdHN0YXRzNjQsXG4gMTEwOlx0XHQubmRvX3NldF9tYWNfYWRkcmVzc1x0PSBhc2l4X3NldF9tYWNfYWRkcmVzcyxcbiAxMTE6XHRcdC5uZG9fdmFsaWRhdGVfYWRkclx0PSBldGhfdmFsaWRhdGVfYWRkcixcbiAxMTI6XHRcdC5uZG9fZXRoX2lvY3RsXHRcdD0gcGh5X2RvX2lvY3RsX3J1bm5pbmcsXG4gMTEzOlx0XHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IGFzaXhfc2V0X211bHRpY2FzdCxcbiAxMTQ6XHR9O1xuIDExNTpcdFxuIDExNjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYXg4ODE3MmFfZXRodG9vbF9vcHMgPSB7XG4gMTE3Olx0XHQuZ2V0X2RydmluZm9cdFx0PSB1c2JuZXRfZ2V0X2RydmluZm8sXG4gMTE4Olx0XHQuZ2V0X2xpbmtcdFx0PSB1c2JuZXRfZ2V0X2xpbmssXG4gMTE5Olx0XHQuZ2V0X21zZ2xldmVsXHRcdD0gdXNibmV0X2dldF9tc2dsZXZlbCxcbiAxMjA6XHRcdC5zZXRfbXNnbGV2ZWxcdFx0PSB1c2JuZXRfc2V0X21zZ2xldmVsLFxuIDEyMTpcdFx0LmdldF93b2xcdFx0PSBhc2l4X2dldF93b2wsXG4gMTIyOlx0XHQuc2V0X3dvbFx0XHQ9IGFzaXhfc2V0X3dvbCxcbiAxMjM6XHRcdC5nZXRfZWVwcm9tX2xlblx0XHQ9IGFzaXhfZ2V0X2VlcHJvbV9sZW4sXG4gMTI0Olx0XHQuZ2V0X2VlcHJvbVx0XHQ9IGFzaXhfZ2V0X2VlcHJvbSxcbiAxMjU6XHRcdC5zZXRfZWVwcm9tXHRcdD0gYXNpeF9zZXRfZWVwcm9tLFxuIDEyNjpcdFx0Lm53YXlfcmVzZXRcdFx0PSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LFxuIDEyNzpcdFx0LmdldF9saW5rX2tzZXR0aW5nc1x0PSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsXG4gMTI4Olx0XHQuc2V0X2xpbmtfa3NldHRpbmdzXHQ9IHBoeV9ldGh0b29sX3NldF9saW5rX2tzZXR0aW5ncyxcbiAxMjk6XHR9O1xuIDEzMDpcdFxuIDEzMTpcdHN0YXRpYyBpbnQgYXg4ODE3MmFfcmVzZXRfcGh5KHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IGVtYmRfcGh5KVxuIDEzMjpcdHtcbiAxMzM6XHRcdGludCByZXQ7XG4gMTM0Olx0XG4gMTM1Olx0XHRyZXQgPSBhc2l4X3N3X3Jlc2V0KGRldiwgQVhfU1dSRVNFVF9JUFBELCAwKTtcbiAxMzY6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMTM3Olx0XHRcdGdvdG8gZXJyO1xuIDEzODpcdFxuIDEzOTpcdFx0bXNsZWVwKDE1MCk7XG4gMTQwOlx0XHRyZXQgPSBhc2l4X3N3X3Jlc2V0KGRldiwgQVhfU1dSRVNFVF9DTEVBUiwgMCk7XG4gMTQxOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDE0MjpcdFx0XHRnb3RvIGVycjtcbiAxNDM6XHRcbiAxNDQ6XHRcdG1zbGVlcCgxNTApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQ3NwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGxpbmVzIDUwLTEwMCBvZiBgYXg4ODE3MmEuY2AuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBwYXJzZSB0aGF0IHNlY3Rpb24gYW5kIGNvbnNpZGVyIGl0IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgb3ZlcmFsbCBkcml2ZXIgYXJjaGl0ZWN0dXJlIEkga25vdyBzbyB3ZWxsLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGV5JiMzOTtyZSBoYW5kbGluZ+KApiBwZXJoYXBzIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZT8gT3IgbWF5YmUgaXQmIzM5O3MgdGhlIGludGVycnVwdCBzZXR1cCwgb3IgZXZlbiB0aGUgYmFzaWMgUEhZIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHNpbWlsYXIgbmV0d29yayBjb250cm9sbGVycywgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIHJlZ2lzdGVyIGludGVycnVwdCBoYW5kbGVycywgY29uZmlndXJlIE1BQyBhZGRyZXNzIGZpbHRlcnMsIG9yIGluaXRpYWxpemUgdGhlIFBIWSByZWdpc3RlcnMgaWYgdGhleSBhcmUgcmVzcG9uc2libGUuCgpNeSBmb2N1cyB3aWxsIGJlIG9uIGlkZW50aWZ5aW5nIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IGFyZSBiZWluZyBjYWxsZWQgYW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIHRoZXkgYXJlIG9wZXJhdGluZyBvbi4gQXJlIHRoZXkgdXNpbmcgYSBkZXZpY2Utc3BlY2lmaWMgc3RydWN0dXJlIHRvIHN0b3JlIGhhcmR3YXJlIHN0YXRlPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzPyBBcmUgdGhleSBoYW5kbGluZyBhbnkgZXJyb3IgY29uZGl0aW9ucyBvciBlZGdlIGNhc2VzIHRoYXQgSSBzaG91bGQgdGFrZSBub3RlIG9mPwoKSSB3aWxsIHN0YXJ0IGJ5IHJhcGlkbHkgc2Nhbm5pbmcgdGhlIGNvZGUgdG8gZ2V0IHRoZSBnaXN0LCBhbmQgdGhlbiBmb2N1cyBvbiBpbmRpdmlkdWFsIGxpbmVzIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljLiBJIGFtIGFsc28gbG9va2luZyBmb3IgY29tbW9uIGlkaW9tcyB0aGF0IHRoZSB3cml0ZXIgdXNlZC4gVGhpcyB3aWxsIGhlbHAgbWUgdG8gdW5kZXJzdGFuZCB0aGVpciBwcm9jZXNzLiBJ4oCZbGwgbWFrZSBhIG1lbnRhbCBub3RlIG9mIGFueSBzdXNwaWNpb3VzIGNvZGUgb3IgYW55dGhpbmcgdGhhdCBkZXZpYXRlcyBmcm9tIGJlc3QgcHJhY3RpY2VzLiBJ4oCZbSB0aGlua2luZyBpbiB0ZXJtcyBvZiBwb3RlbnRpYWwgZnV0dXJlIGRlYnVnZ2luZywgbWFpbnRlbmFuY2UsIGFuZCB3aGV0aGVyIHRoaXMgc2VjdGlvbiBpcyB3ZWxsLXdyaXR0ZW4gYW5kIG1haW50YWluYWJsZS4gSSYjMzk7bSBhbHNvIHJlYWR5IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdyBpZiBJIGNvbWUgYWNyb3NzIGFueSB1bmZhbWlsaWFyIGNhbGxzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTA6XHRcdFx0XHQgICBwaHlkZXYtXHUwMDNlc3BlZWQsIHBoeWRldi1cdTAwM2VkdXBsZXgsIG1vZGUpO1xuICA1MTpcdFx0XHRwaHlfcHJpbnRfc3RhdHVzKHBoeWRldik7XG4gIDUyOlx0XHR9XG4gIDUzOlx0fVxuICA1NDpcdFxuICA1NTpcdHN0YXRpYyB2b2lkIGF4ODgxNzJhX3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYilcbiAgNTY6XHR7XG4gIDU3Olx0XHQvKiBsaW5rIGNoYW5nZXMgYXJlIGRldGVjdGVkIGJ5IHBvbGxpbmcgdGhlIHBoeSAqL1xuICA1ODpcdH1cbiAgNTk6XHRcbiAgNjA6XHQvKiB1c2UgcGh5bGliIGluZnJhc3RydWN0dXJlICovXG4gIDYxOlx0c3RhdGljIGludCBheDg4MTcyYV9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxuICA2MjpcdHtcbiAgNjM6XHRcdHN0cnVjdCBheDg4MTcyYV9wcml2YXRlICpwcml2ID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuICA2NDpcdFx0aW50IHJldDtcbiAgNjU6XHRcbiAgNjY6XHRcdHByaXYtXHUwMDNlbWRpbyA9IG1kaW9idXNfYWxsb2MoKTtcbiAgNjc6XHRcdGlmICghcHJpdi1cdTAwM2VtZGlvKSB7XG4gIDY4Olx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7Q291bGQgbm90IGFsbG9jYXRlIE1ESU8gYnVzXFxuXCYjMzQ7KTtcbiAgNjk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gIDcwOlx0XHR9XG4gIDcxOlx0XG4gIDcyOlx0XHRwcml2LVx1MDAzZW1kaW8tXHUwMDNlcHJpdiA9ICh2b2lkICopZGV2O1xuICA3MzpcdFx0cHJpdi1cdTAwM2VtZGlvLVx1MDAzZXJlYWQgPSBcdTAwMjZhc2l4X21kaW9fYnVzX3JlYWQ7XG4gIDc0Olx0XHRwcml2LVx1MDAzZW1kaW8tXHUwMDNld3JpdGUgPSBcdTAwMjZhc2l4X21kaW9fYnVzX3dyaXRlO1xuICA3NTpcdFx0cHJpdi1cdTAwM2VtZGlvLVx1MDAzZW5hbWUgPSBcJiMzNDtBc2l4IE1ESU8gQnVzXCYjMzQ7O1xuICA3NjpcdFx0LyogbWlpIGJ1cyBuYW1lIGlzIHVzYi1cdTAwM2N1c2IgYnVzIG51bWJlclx1MDAzZS1cdTAwM2N1c2IgZGV2aWNlIG51bWJlclx1MDAzZSAqL1xuICA3NzpcdFx0c25wcmludGYocHJpdi1cdTAwM2VtZGlvLVx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsIFwmIzM0O3VzYi0lMDNkOiUwM2RcJiMzNDssXG4gIDc4Olx0XHRcdCBkZXYtXHUwMDNldWRldi1cdTAwM2VidXMtXHUwMDNlYnVzbnVtLCBkZXYtXHUwMDNldWRldi1cdTAwM2VkZXZudW0pO1xuICA3OTpcdFxuICA4MDpcdFx0cmV0ID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZW1kaW8pO1xuICA4MTpcdFx0aWYgKHJldCkge1xuICA4MjpcdFx0XHRuZXRkZXZfZXJyKGRldi1cdTAwM2VuZXQsIFwmIzM0O0NvdWxkIG5vdCByZWdpc3RlciBNRElPIGJ1c1xcblwmIzM0Oyk7XG4gIDgzOlx0XHRcdGdvdG8gbWZyZWU7XG4gIDg0Olx0XHR9XG4gIDg1Olx0XG4gIDg2Olx0XHRuZXRkZXZfaW5mbyhkZXYtXHUwMDNlbmV0LCBcJiMzNDtyZWdpc3RlcmVkIG1kaW8gYnVzICVzXFxuXCYjMzQ7LCBwcml2LVx1MDAzZW1kaW8tXHUwMDNlaWQpO1xuICA4NzpcdFx0cmV0dXJuIDA7XG4gIDg4Olx0XG4gIDg5Olx0bWZyZWU6XG4gIDkwOlx0XHRtZGlvYnVzX2ZyZWUocHJpdi1cdTAwM2VtZGlvKTtcbiAgOTE6XHRcdHJldHVybiByZXQ7XG4gIDkyOlx0fVxuICA5MzpcdFxuICA5NDpcdHN0YXRpYyB2b2lkIGF4ODgxNzJhX3JlbW92ZV9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcbiAgOTU6XHR7XG4gIDk2Olx0XHRzdHJ1Y3QgYXg4ODE3MmFfcHJpdmF0ZSAqcHJpdiA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbiAgOTc6XHRcbiAgOTg6XHRcdG5ldGRldl9pbmZvKGRldi1cdTAwM2VuZXQsIFwmIzM0O2RlcmVnaXN0ZXJpbmcgbWRpbyBidXMgJXNcXG5cJiMzNDssIHByaXYtXHUwMDNlbWRpby1cdTAwM2VpZCk7XG4gIDk5Olx0XHRtZGlvYnVzX3VucmVnaXN0ZXIocHJpdi1cdTAwM2VtZGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc2MDMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyODU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBbmFseXNpczogbW90b3Jjb21tIFBIWSBEcml2ZXIqKgoKT2theSwgc28gaGVyZSYjMzk7cyB0aGUgYnJlYWtkb3duIG9mIG15IHRob3VnaHQgcHJvY2VzcyByZWdhcmRpbmcgdGhpcyBwYXRjaCBhbmQgd2hldGhlciBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYG1vdG9yY29tbWAgUEhZIGRyaXZlciBjYW4gYmUgdHJpZ2dlcmVkIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudCBsaWtlIFFFTVUsIGJlY2F1c2UgdGhlIHBhdGNoIGVkaXRzIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgZHJpdmVyLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhhdCBjb25maWd1cmF0aW9uIGNhbiBiZSByZWFjaGVkIGZyb20gYW4gZW11bGF0aW9uIGNvbnRleHQuCgpGaXJzdCwgSSBzZWUgdGhhdCB0aGUgY29kZSB1c2VzIGBtZGlvYnVzX3JlZ2lzdGVyKClgLiBUaGlzIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW4gTURJTyBidXMsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoZSBrZXJuZWwgc2NhbnMgdGhlIGJ1cyBieSByZWFkaW5nIFBIWSBJRHMuIElmIHRoZSBlbXVsYXRlZCBVU0IgZGV2aWNlIHJldHVybnMgdGhlIGNvcnJlY3QgUEhZIElEcyBmb3IgdGhlIE1vdG9yY29tbSBZVDg1eHggZmFtaWx5IChsaWtlIGBQSFlfSURfWVQ4NTMxU2Agb3Igb3RoZXJzKSwgdGhlIGBtb3RvcmNvbW1gIFBIWSBkcml2ZXIgc2hvdWxkIG1hdGNoLCBwcm9iZSwgYW5kIGNhbGwgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIGxpa2UgYHl0ODUzMXNfY29uZmlnX2luaXRgLgoKTXkgYnJhaW4ganVtcHMgdG8gdGhlIHBvc3NpYmlsaXRpZXMgb2YgVVNCIGVtdWxhdGlvbi4gQ2FuIHdlIGdldCBoZXJlIHZpYSBhbiBlbXVsYXRlZCBVU0IgZGV2aWNlPyBXZSBtaWdodCBiZSBhYmxlIHRvIGNyZWF0ZSBhbiBNRElPIGJ1cyB2aXJ0dWFsbHkgdGhyb3VnaCBVU0IgZW11bGF0aW9uIHVzaW5nIGRldmljZXMgbGlrZSBgdXNibmV0YCwgYGF4ODgxNzJhYCwgYGxhbjc4eHhgLCBvciBgc21zYzk1eHhgLiBUaGUgc3l6a2FsbGVyIGZ1enplciBpcyBrZXkgaGVyZSwgZXNwZWNpYWxseSB3aXRoIHRoZSByYXctZ2FkZ2V0IC8gZHVtbXlfaGNkIGZlYXR1cmVzOyB0aGV5IHNob3VsZCBhbGxvdyBtZSB0byBtaW1pYyB0aGUgYmVoYXZpb3Igb2YgYSBVU0IgZGV2aWNlIGFuZCByZXR1cm4gc3BlY2lmaWMgcmVzcG9uc2VzLCBpbmNsdWRpbmcgdGhvc2UgdGhhdCBpZGVudGlmeSB0aGUgUEhZLgoKSWYgc3l6a2FsbGVyIGNhbiBlbXVsYXRlIGEgVVNCIGRldmljZSAoZS5nLiwgYGF4ODgxNzJhYCBVU0IgdG8gZXRoZXJuZXQgZGV2aWNlKSB0aGF0IHRyaWdnZXJzIHRoZSBNRElPIGJ1cyBzY2FuIGFuZCByZXR1cm5zIHRoZSBjb3JyZWN0IFBIWSBJRHMsIHRoZW4gdGhlIGBtb3RvcmNvbW1gIGRyaXZlciBpcyByZWFjaGFibGUuIFRoaXMgbWVhbnMgdGhhdCBhIFVTQiBkZXZpY2UgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gcmVzcG9uZCB3aXRoIHRoZSByaWdodCBQSFkgSUQgd2hlbiBgbWRpb2J1c19yZWdpc3RlcigpYCBpcyBjYWxsZWQuIFRoZW4gdGhlIGBtb3RvcmNvbW1gIGRyaXZlciBjYW4gYmUgcHJvYmVkIGFuZCBpbml0aWFsaXplZC4KCkkgbmVlZCB0byBjb25maXJtIGlmIGRpc2NyZXRlIEV0aGVybmV0IFBIWSBjaGlwcyBhcmUgcmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUvR0NFLiBUaGUgZG9jdW1lbnRhdGlvbiBhYm91dCBmdXp6aW5nIGZpbHRlcnMgbWVudGlvbnMgdGhhdCBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIChsaWtlIGNlcnRhaW4gUENJZSBkcml2ZXJzIG9yIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSkgYXJlIG5vdCB3b3J0aCBmdXp6aW5nLiBCdXQgSSBkb24mIzM5O3QgdGhpbmsgaXQgaXMgdGhlIGNhc2UgaGVyZS4KCkkgYWxzbyByZXZpZXdlZCB0aGUgcGF0Y2ggaXRzZWxmLCBmb2N1c2luZyBvbiBgbW90b3Jjb21tLmNgLiBUaGUgcGF0Y2ggY2hhbmdlZCB0aGUgZnVuY3Rpb24gdGhhdCBpbml0aWFsaXplcyB0aGUgUEhZLCBgeXQ4NTIxX2NvbmZpZ19pbml0YCB0byBgeXQ4NTMxc19jb25maWdfaW5pdGAgYW5kIGFkZGVkIHNvbWUgcmVnaXN0ZXJzLiBUaGUgYG1vdG9yY29tbS5jYCBpcyB0aGUga2V5IGZpbGUgaGVyZS4KClNvLCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVzZSBVU0IgZW11bGF0aW9ucyBjYW4gdHJpZ2dlciB0aGUgY29kZSBwYXRocy4gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGlmIGBDT05GSUdfTU9UT1JDT01NX1BIWWAgaXMgYSBwaHlsaWIgZHJpdmVyLiBUaGF0JiMzOTtzIGEgcXVpY2sgY2hlY2sgaW4gdGhlIEtjb25maWcgZmlsZXMuCgpCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJiMzOTttIGxlYW5pbmcgdG93YXJkcyAqeWVzKiAtIHRoaXMgaXMgbGlrZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIFVTQiBlbXVsYXRpb24gaW4gUUVNVSwgcGFydGljdWxhcmx5IGlmIHRoZSBzeXprYWxsZXIgZnV6emVyIGNhbiBiZSBjb25maWd1cmVkIHRvIG1pbWljIHRoZSByZXNwb25zZXMgZnJvbSBhIHJlbGV2YW50IFVTQi10by1FdGhlcm5ldCBhZGFwdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNjA6XHRcdCAgQ3VycmVudGx5IHN1cHBvcnRzIFZTQzg1MTQsIFZTQzg1MzAsIFZTQzg1MzEsIFZTQzg1NDAgYW5kIFZTQzg1NDEgUEhZc1xuIDM2MTpcdFxuIDM2MjpcdGNvbmZpZyBNT1RPUkNPTU1fUEhZXG4gMzYzOlx0XHR0cmlzdGF0ZSBcJiMzNDtNb3RvcmNvbW0gUEhZc1wmIzM0O1xuIDM2NDpcdFx0aGVscFxuIDM2NTpcdFx0ICBFbmFibGVzIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBuZXR3b3JrIFBIWXMuXG4gMzY2Olx0XHQgIEN1cnJlbnRseSBzdXBwb3J0cyBZVDg1eHggR2lnYWJpdCBFdGhlcm5ldCBQSFlzLlxuIDM2NzpcdFxuIDM2ODpcdGNvbmZpZyBOQVRJT05BTF9QSFlcbiAzNjk6XHRcdHRyaXN0YXRlIFwmIzM0O05hdGlvbmFsIFNlbWljb25kdWN0b3IgUEhZc1wmIzM0O1xuIDM3MDpcdFx0aGVscFxuIDM3MTpcdFx0ICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIERQODM4NjUgUEhZLlxuIDM3MjpcdFxuIDM3MzpcdGNvbmZpZyBOWFBfQ0JUWF9QSFlcbiAzNzQ6XHRcdHRyaXN0YXRlIFwmIzM0O05YUCAxMDBCQVNFLVRYIFBIWXNcJiMzNDtcbiAzNzU6XHRcdGhlbHBcbiAzNzY6XHRcdCAgU3VwcG9ydCB0aGUgMTAwQkFTRS1UWCBQSFkgaW50ZWdyYXRlZCBvbiB0aGUgU0pBMTExMCBhdXRvbW90aXZlXG4gMzc3Olx0XHQgIHN3aXRjaCBmYW1pbHkuXG4gMzc4Olx0XG4gMzc5Olx0Y29uZmlnIE5YUF9DNDVfVEpBMTFYWF9QSFlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE0ODAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyB0aGUgUEhZIEtjb25maWcgZm9yIENvbnRleHQqKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyBpbnRvIHRoaXMgZHJpdmVyIGNoYW5nZSwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHN1cnJvdW5kaW5nIGxhbmRzY2FwZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIHN0YW5kYXJkIHByYWN0aWNlIGFuZCBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIEkmIzM5O20gaGVhZGluZyBvdmVyIHRvIGBkcml2ZXJzL25ldC9waHkvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgbWVudXMsIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBvZiBob3cgdGhlc2UgUEhZIGRyaXZlcnMgYXJlIG9yZ2FuaXplZCB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbS4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGhlcmUgaXMgY3JpdGljYWw7IEkgbmVlZCB0byBzZWUgKndoYXQqIGVuYWJsZXMgKndoYXQqLCBhbmQgZW5zdXJlIG15IGNoYW5nZXMgZG9uJiMzOTt0IGluYWR2ZXJ0ZW50bHkgYnJlYWsgZXhpc3RpbmcgY29uZmlndXJhdGlvbnMgb3IgaW50cm9kdWNlIGNvbmZsaWN0cy4gVGhpcyBpbml0aWFsIHN0ZXAgd2lsbCBnaXZlIG1lIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byBwcm9jZWVkIHNhZmVseSBhbmQgZWZmZWN0aXZlbHkuIEl0JiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHdoZW4gYXNzZXNzaW5nIHRoZSBpbXBhY3Qgb2YgYSBjaGFuZ2UgaW4gdGhpcyBzcGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFBIWSBMYXllciBDb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBQSFlMSU5LXG4gICA3Olx0XHR0cmlzdGF0ZVxuICAgODpcdFx0c2VsZWN0IFBIWUxJQlxuICAgOTpcdFx0c2VsZWN0IFNXUEhZXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIFBIWWxpbmsgbW9kZWxzIHRoZSBsaW5rIGJldHdlZW4gdGhlIFBIWSBhbmQgTUFDLCBhbGxvd2luZyBmaXhlZFxuICAxMjpcdFx0ICBjb25maWd1cmF0aW9uIGxpbmtzLCBQSFlzLCBhbmQgU2VyZGVzIGxpbmtzIHdpdGggTUFDIGxldmVsXG4gIDEzOlx0XHQgIGF1dG9uZWdvdGlhdGlvbiBtb2Rlcy5cbiAgMTQ6XHRcbiAgMTU6XHRtZW51Y29uZmlnIFBIWUxJQlxuICAxNjpcdFx0dHJpc3RhdGUgXCYjMzQ7UEhZIERldmljZSBzdXBwb3J0IGFuZCBpbmZyYXN0cnVjdHVyZVwmIzM0O1xuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBFdGhlcm5ldCBjb250cm9sbGVycyBhcmUgdXN1YWxseSBhdHRhY2hlZCB0byBQSFlcbiAgMTk6XHRcdCAgZGV2aWNlcy4gIFRoaXMgb3B0aW9uIHByb3ZpZGVzIGluZnJhc3RydWN0dXJlIGZvclxuICAyMDpcdFx0ICBtYW5hZ2luZyBQSFkgZGV2aWNlcy5cbiAgMjE6XHRcbiAgMjI6XHRpZiBQSFlMSUJcbiAgMjM6XHRcbiAgMjQ6XHRjb25maWcgU1dQSFlcbiAgMjU6XHRcdGJvb2xcbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgUEhZX1BBQ0tBR0VcbiAgMjg6XHRcdCB0cmlzdGF0ZVxuICAyOTpcdFxuICAzMDpcdGNvbmZpZyBMRURfVFJJR0dFUl9QSFlcbiAgMzE6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBMRUQgdHJpZ2dlcnMgZm9yIHRyYWNraW5nIGxpbmsgc3RhdGVcJiMzNDtcbiAgMzI6XHRcdGRlcGVuZHMgb24gTEVEU19UUklHR0VSU1xuICAzMzpcdFx0aGVscFxuICAzNDpcdFx0ICBBZGRzIHN1cHBvcnQgZm9yIGEgc2V0IG9mIExFRCB0cmlnZ2VyIGV2ZW50cyBwZXItUEhZLiAgTGlua1xuICAzNTpcdFx0ICBzdGF0ZSBjaGFuZ2Ugd2lsbCB0cmlnZ2VyIHRoZSBldmVudHMsIGZvciBjb25zdW1wdGlvbiBieSBhblxuICAzNjpcdFx0ICBMRUQgY2xhc3MgZHJpdmVyLiAgVGhlcmUgYXJlIHRyaWdnZXJzIGZvciBlYWNoIGxpbmsgc3BlZWQgY3VycmVudGx5XG4gIDM3Olx0XHQgIHN1cHBvcnRlZCBieSB0aGUgUEhZIGFuZCBhbHNvIGEgb25lIGNvbW1vbiBcJiMzNDtsaW5rXCYjMzQ7IHRyaWdnZXIgYXMgYVxuICAzODpcdFx0ICBsb2dpY2FsLW9yIG9mIGFsbCB0aGUgbGluayBzcGVlZCBvbmVzLlxuICAzOTpcdFx0ICBBbGwgdGhlc2UgdHJpZ2dlcnMgYXJlIG5hbWVkIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHBhdHRlcm46XG4gIDQwOlx0XHQgICAgICBcdTAwM2NtaWkgYnVzIGlkXHUwMDNlOlx1MDAzY3BoeVx1MDAzZTpcdTAwM2NzcGVlZFx1MDAzZVxuICA0MTpcdFxuICA0MjpcdFx0ICBXaGVyZSBzcGVlZCBpcyBpbiB0aGUgZm9ybTpcbiAgNDM6XHRcdFx0XHUwMDNjU3BlZWQgaW4gbWVnYWJpdHNcdTAwM2VNYnBzIE9SIFx1MDAzY1NwZWVkIGluIGdpZ2FiaXRzXHUwMDNlR2JwcyBPUiBsaW5rXG4gIDQ0Olx0XHRcdGZvciBhbnkgc3BlZWQga25vd24gdG8gdGhlIFBIWS5cbiAgNDU6XHRcbiAgNDY6XHRjb25maWcgT1BFTl9BTExJQU5DRV9IRUxQRVJTXG4gIDQ3Olx0XHRib29sXG4gIDQ4Olx0XG4gIDQ5Olx0Y29uZmlnIFBIWUxJQl9MRURTXG4gIDUwOlx0XHRkZWZfYm9vbCBPRlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjMxMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2U6CgoqKkludmVzdGlnYXRpbmcgUEhZTElCIEluY2x1c2lvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYFBIWUxJQmAgZ2V0cyBwdWxsZWQgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24sIHNvIEkmIzM5O20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlIGlzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGZvciBuZXR3b3JraW5nLXJlbGF0ZWQgS2NvbmZpZyBvcHRpb25zLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbiB0aGF0IHRoZSBgUEhZTElCYCBvcHRpb24sIG9yIHRoZSBmZWF0dXJlcyBpdCBkZXBlbmRzIG9uLCB3aWxsIGJlIGRlZmluZWQgb3IgaW5jbHVkZWQgc29tZXdoZXJlIHdpdGhpbiB0aGF0IGZpbGUuIFRpbWUgdG8gb3BlbiBpdCB1cCBhbmQgc2VlIHdoYXQgdGhlIGJ1aWxkIHN5c3RlbSBpcyBkb2luZyB3aXRoIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTUxMj1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvaXBhL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWctNTEzLVxuZHJpdmVycy9uZXQvS2NvbmZpZzo1MTQ6c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnLTUxNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI1NjcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIE5ldHdvcmsgRGV2aWNlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWV0aGluZyBuZXR3b3JrLXJlbGF0ZWQsIGxpa2VseSBpbnZvbHZpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgbmV0d29yayBkZXZpY2VzLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRvIGRlbHZlIGludG8gdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSB1c3VhbCBzdGFydGluZyBwb2ludCBmb3IgbWFuYWdpbmcgbmV0d29yayBkZXZpY2Ugb3B0aW9ucyBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byBhcm91bmQgbGluZSA1MTIsIGJlY2F1c2UgSSBoYXZlIGEgaHVuY2ggdGhhdCYjMzk7cyB3aGVyZSB3ZSBtaWdodCBmaW5kIHJlbGV2YW50IGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBORVRERVZJQ0VTYC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGNvbmRpdGlvbmFsIGJsb2NrcyBvciBvcHRpb25zIHRoYXQgY291bGQgaW5mbHVlbmNlIHRoZSBpbmNsdXNpb24gb3IgYmVoYXZpb3Igb2YgbmV0d29yayBkZXZpY2VzIGluIGdlbmVyYWwsIG9yIHBvdGVudGlhbGx5IHNwZWNpZmljIGRldmljZSB0eXBlcy4gSSYjMzk7bGwgbmVlZCB0byByYXBpZGx5IHNjYW4gZm9yIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgb3IgbW9kdWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgTmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIE5FVERFVklDRVNcbiAgIDc6XHRcdGRlZmF1bHQgeSBpZiBVTUxcbiAgIDg6XHRcdGRlcGVuZHMgb24gTkVUXG4gICA5Olx0XHRib29sIFwmIzM0O05ldHdvcmsgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgWW91IGNhbiBzYXkgTiBoZXJlIGlmIHlvdSBkb24mIzM5O3QgaW50ZW5kIHRvIGNvbm5lY3QgeW91ciBMaW51eCBib3ggdG9cbiAgMTI6XHRcdCAgYW55IG90aGVyIGNvbXB1dGVyIGF0IGFsbC5cbiAgMTM6XHRcbiAgMTQ6XHRcdCAgWW91JiMzOTtsbCBoYXZlIHRvIHNheSBZIGlmIHlvdXIgY29tcHV0ZXIgY29udGFpbnMgYSBuZXR3b3JrIGNhcmQgdGhhdFxuICAxNTpcdFx0ICB5b3Ugd2FudCB0byB1c2UgdW5kZXIgTGludXguIElmIHlvdSBhcmUgZ29pbmcgdG8gcnVuIFNMSVAgb3IgUFBQIG92ZXJcbiAgMTY6XHRcdCAgdGVsZXBob25lIGxpbmUgb3IgbnVsbCBtb2RlbSBjYWJsZSB5b3UgbmVlZCBzYXkgWSBoZXJlLiBDb25uZWN0aW5nXG4gIDE3Olx0XHQgIHR3byBtYWNoaW5lcyB3aXRoIHBhcmFsbGVsIHBvcnRzIHVzaW5nIFBMSVAgbmVlZHMgdGhpcywgYXMgd2VsbCBhc1xuICAxODpcdFx0ICBBWC4yNS9LSVNTIGZvciBzZW5kaW5nIEludGVybmV0IHRyYWZmaWMgb3ZlciBhbWF0ZXVyIHJhZGlvIGxpbmtzLlxuICAxOTpcdFxuICAyMDpcdFx0ICBTZWUgYWxzbyBcJiMzNDtUaGUgTGludXggTmV0d29yayBBZG1pbmlzdHJhdG9yJiMzOTtzIEd1aWRlXCYjMzQ7IGJ5IE9sYWYgS2lyY2ggYW5kXG4gIDIxOlx0XHQgIFRlcnJ5IERhd3Nvbi4gQXZhaWxhYmxlIGF0IFx1MDAzY2h0dHA6Ly93d3cudGxkcC5vcmcvZ3VpZGVzLmh0bWxcdTAwM2UuXG4gIDIyOlx0XG4gIDIzOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDI0Olx0XG4gIDI1Olx0IyBBbGwgdGhlIGZvbGxvd2luZyBzeW1ib2xzIGFyZSBkZXBlbmRlbnQgb24gTkVUREVWSUNFUyAtIGRvIG5vdCByZXBlYXRcbiAgMjY6XHQjIHRoYXQgZm9yIGVhY2ggb2YgdGhlIHN5bWJvbHMuXG4gIDI3Olx0aWYgTkVUREVWSUNFU1xuICAyODpcdFxuICAyOTpcdGNvbmZpZyBNSUlcbiAgMzA6XHRcdHRyaXN0YXRlXG4gIDMxOlx0XG4gIDMyOlx0Y29uZmlnIE5FVF9DT1JFXG4gIDMzOlx0XHRkZWZhdWx0IHlcbiAgMzQ6XHRcdGJvb2wgXCYjMzQ7TmV0d29yayBjb3JlIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG4gIDM1Olx0XHRoZWxwXG4gIDM2Olx0XHQgIFlvdSBjYW4gc2F5IE4gaGVyZSBpZiB5b3UgZG8gbm90IGludGVuZCB0byB1c2UgYW55IG9mIHRoZVxuICAzNzpcdFx0ICBuZXR3b3JraW5nIGNvcmUgZHJpdmVycyAoaS5lLiBWTEFOLCBicmlkZ2luZywgYm9uZGluZywgZXRjLilcbiAgMzg6XHRcbiAgMzk6XHRpZiBORVRfQ09SRVxuICA0MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzMxMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1vdG9yY29tbSBQSFkgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGBNT1RPUkNPTU1fUEhZYCBkcml2ZXIgcmVsaWVzIG9uIGJvdGggYFBIWUxJQmAgYW5kIGBORVRERVZJQ0VTYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiBkZXBlbmRlbmNpZXMgSSYjMzk7bSBtaXNzaW5nLiBTbywgbGV0JiMzOTtzIGRpdmUgaW50byBgZHJpdmVycy9uZXQvcGh5L0tjb25maWdgLgoKUmlnaHQsIGZvdW5kIGl0OiBgY29uZmlnIE1PVE9SQ09NTV9QSFlgIGNvbmZpcm1zIHRoZSB0cmlzdGF0ZSBvcHRpb24gZm9yIE1vdG9yY29tbSBQSFlzLiBBaGEsIGFuZCBpdCYjMzk7cyBuZWF0bHkgbmVzdGVkOiBgaWYgUEhZTElCYCBpcyBpdHNlbGYgbmVzdGVkIHdpdGhpbiBgaWYgTkVUREVWSUNFU2AsIGFuZCBgTkVUREVWSUNFU2AgZGVwZW5kcyBvbiBgTkVUYC4gVGhpcyBjb25maXJtcyB0aGUgaW5pdGlhbCBkZXBlbmRlbmNpZXMsIGFuZCBhbHNvIGNsYXJpZmllcyB0aGUgZGVwZW5kZW5jeSBjaGFpbi4KCk5vdywgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGRlZXBlci4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCBkb2VzbiYjMzk7dCB1c2UgYW55IGhpZGRlbiBoZWxwZXJzIG9yIHNwZWNpZmljIGNvbmZpZyBvcHRpb25zIHRoYXQgYXJlbiYjMzk7dCBpbW1lZGlhdGVseSBvYnZpb3VzIGZyb20gdGhlIEtjb25maWcgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYWN0dWFsIGBtb3RvcmNvbW0uY2Agc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBpbmNsdWRlZCBoZWFkZXJzIGFuZCBjb25maWcgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgYmUgc3VidGx5IGJha2VkIGluIHRoZXJlLiBJIHdhbnQgdG8gYnVpbGQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIGl0cyBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7XG4gICAyOlx0LypcbiAgIDM6XHQgKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXIuXG4gICA0Olx0ICpcbiAgIDU6XHQgKiBBdXRob3I6IFBldGVyIEdlaXMgXHUwMDNjcGd3aXBlb3V0QGdtYWlsLmNvbVx1MDAzZVxuICAgNjpcdCAqIEF1dGhvcjogRnJhbmsgXHUwMDNjRnJhbmsuU2FlQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4gICA3Olx0ICovXG4gICA4Olx0XG4gICA5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiAgMTA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuICAxNTpcdFxuICAxNjpcdCNkZWZpbmUgUEhZX0lEX1lUODUxMVx0XHQweDAwMDAwMTBhXG4gIDE3Olx0I2RlZmluZSBQSFlfSURfWVQ4NTIxXHRcdDB4MDAwMDAxMWFcbiAgMTg6XHQjZGVmaW5lIFBIWV9JRF9ZVDg1MjJcdFx0MHg0ZjUxZTkyOFxuICAxOTpcdCNkZWZpbmUgUEhZX0lEX1lUODUzMVx0XHQweDRmNTFlOTFiXG4gIDIwOlx0I2RlZmluZSBQSFlfSURfWVQ4NTMxU1x0XHQweDRmNTFlOTFhXG4gIDIxOlx0I2RlZmluZSBQSFlfSURfWVQ4ODIxXHRcdDB4NGY1MWVhMTlcbiAgMjI6XHQvKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXdcbiAgMjM6XHQgKlx0VVRQIFJlZ2lzdGVyIHNwYWNlXHR8XHRGSUJFUiBSZWdpc3RlciBzcGFjZVxuICAyNDpcdCAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgMjU6XHQgKiB8XHRVVFAgTUlJXHRcdFx0fFx0RklCRVIgTUlJXHRcdHxcbiAgMjY6XHQgKiB8XHRVVFAgTU1EXHRcdFx0fFx0XHRcdFx0fFxuICAyNzpcdCAqIHxcdFVUUCBFeHRlbmRlZFx0XHR8XHRGSUJFUiBFeHRlbmRlZFx0XHR8XG4gIDI4Olx0ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAyOTpcdCAqIHxcdFx0XHRDb21tb24gRXh0ZW5kZWRcdFx0XHRcdHxcbiAgMzA6XHQgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIDMxOlx0ICovXG4gIDMyOlx0XG4gIDMzOlx0LyogMHgxMCB+IDB4MTUgLCAweDFFIGFuZCAweDFGIGFyZSBjb21tb24gTUlJIHJlZ2lzdGVycyBvZiB5dCBwaHkgKi9cbiAgMzQ6XHRcbiAgMzU6XHQvKiBTcGVjaWZpYyBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyICovXG4gIDM2Olx0I2RlZmluZSBZVFBIWV9TUEVDSUZJQ19GVU5DVElPTl9DT05UUk9MX1JFR1x0MHgxMFxuICAzNzpcdFxuICAzODpcdC8qIDJiMDAgTWFudWFsIE1ESSBjb25maWd1cmF0aW9uXG4gIDM5Olx0ICogMmIwMSBNYW51YWwgTURJWCBjb25maWd1cmF0aW9uXG4gIDQwOlx0ICogMmIxMCBSZXNlcnZlZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDQzNQoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiA3NjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgRHJpdmVyIENvbmZpZ3VyYXRpb24gQ2hhbmdlcyBmb3IgRnV6emluZyBGb2N1cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIHNjYW4gZmxhZ2dlZCBzb21lIHN5bWJvbCBjaGFuZ2VzLCBzcGVjaWZpY2FsbHkgYHl0ODUzMXNfY29uZmlnX2luaXRgLCBgX195dDg1MjFfY29uZmlnX2luaXRgLCBhbmQgYHl0ODUyMV9jb25maWdfaW5pdGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IHdhcyB0byBjaGVjayBpZiB0aGVzZSBhcmUgc3RhdGljIG9yIG5vbi1zdGF0aWMgYmVjYXVzZSB0aGUgZnV6emluZyBndWlkZWxpbmVzIGZhdm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGZvciBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBMb29raW5nIGludG8gYG1vdG9yY29tbS5jYCwgSSBzZWUgdGhleSAqYXJlKiBzdGF0aWM6IGBzdGF0aWMgaW50IHl0ODUzMXNfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilgIGFuZCBgc3RhdGljIGludCB5dDg1MjFfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilgLiBCdXQgdGhlbiwgSSByZW1lbWJlcmVkIHRob3NlIGZ1bmN0aW9ucyBhcmUgcmVmZXJlbmNlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gdGhlIGBtb3RvcmNvbW1fcGh5X2RydnNbXWAgc3RydWN0OiAgYC5jb25maWdfaW5pdCA9IHl0ODUzMXNfY29uZmlnX2luaXQsYCBhbmQgYC5jb25maWdfaW5pdCA9IHl0ODUyMV9jb25maWdfaW5pdCxgLgoKQWgtaGEhIEJlY2F1c2UgdGhleSBhcmUgc3RvcmVkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzLCBldmVuIHRob3VnaCB0aGV5JiMzOTtyZSBkZWNsYXJlZCBgc3RhdGljYCwgdGhlaXIgYWRkcmVzc2VzIGFyZSByZXRhaW5lZCBpbiB0aGUgZHJpdmVyJiMzOTtzIHN0cnVjdCB0YWJsZS4gVGhlcmVmb3JlLCB0aGV5IGFyZSBub3QgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIFRoYXQgbWFrZXMgdGhlbSBwZXJmZWN0IGNhbmRpZGF0ZXMgZm9yIGZvY3VzIHN5bWJvbHMuIFNvIGB5dDg1MzFzX2NvbmZpZ19pbml0YCBhbmQgYHl0ODUyMV9jb25maWdfaW5pdGAgYXJlIGRlZmluaXRlbHkgaW4gbXkgc2lnaHRzLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgY29tcGxldGUgcGljdHVyZS4gVGhlIHBhdGNoIG1vZGlmaWVzIGBfX3l0ODUyMV9jb25maWdfaW5pdGAsIGB5dDg1MjFfY29uZmlnX2luaXRgLCBhbmQgYHl0ODUzMXNfY29uZmlnX2luaXRgLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgeXQ4NTMxc19jb25maWdfaW5pdGAgYW5kIGB5dDg1MjFfY29uZmlnX2luaXRgIHdpbGwgaGF2ZSBkaXN0aW5jdCBzeW1ib2xzIHdoZW4gYE1PVE9SQ09NTV9QSFlgIGlzIGVuYWJsZWQuIExUTyAqY291bGQqIG1lcmdlIHRoZW0gaW4gY2VydGFpbiBzaXR1YXRpb25zLCBidXQgaGVyZSwgdGhlIGNvZGUgaXMgZGlzdGluY3QuCgpGdW5jdGlvbmFsbHksIHRoZSBwYXRjaCAqZG9lcyogaW50cm9kdWNlIHNpZ25pZmljYW50IGNoYW5nZXMgdG8gZHJpdmVyIGxvZ2ljLiBJdCBpbnRyb2R1Y2VzIGEgc2VwYXJhdGUgYGNvbmZpZ19pbml0YCBmb3IgWVQ4NTMxUyAoYHl0ODUzMXNfY29uZmlnX2luaXRgKSwgZXh0cmFjdHMgY29tbW9uIGluaXQgaW50byBgX195dDg1MjFfY29uZmlnX2luaXRgLCBhZGRzIEdNSUkgbW9kZSBjb25maWd1cmF0aW9uIGZvciBZVDg1MzFTIGJ5IGVuYWJsaW5nIHRoZSBhbmFsb2cgZnJvbnQtZW5kIERBQyBjbG9jayBhbmQgZml4ZXMgdGhlIFJHTUlJIGRyaXZlIHN0cmVuZ3RoIHNldHRpbmcgcGF0aC4gVGhpcyBpcyBtb3JlIHRoYW4ganVzdCBhIG1pbm9yIHR3ZWFrOyB0aGVyZSBpcyBmdW5jdGlvbmFsIGNoYW5nZSwgc28geWVzLCBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuCgpNeSBDT05GSUcgZGVwZW5kZW5jaWVzIGFyZSBhbHNvIGNvbmZpcm1lZDogYE1PVE9SQ09NTV9QSFlgLCBgUEhZTElCYCwgYW5kIGBORVRERVZJQ0VTYC4gSSBub3cgaGF2ZSBhbGwgdGhlIGluZm9ybWF0aW9uIHJlcXVpcmVkLiBJJiMzOTtsbCBjb25zdHJ1Y3QgdGhlIGBzZXQtcmVzdWx0c2AgYWNjb3JkaW5nbHk6IGBXb3J0aEZ1enppbmdgIHNldCB0byBgdHJ1ZWAsIGEgY2xlYXIgZXhwbGFuYXRpb24gb2YgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhbmQgaG93IHRoZXkgYXJlIHJlYWNoYWJsZSBhcyB0aGUgcmVhc29uaW5nLCB0aGUgYEZvY3VzU3ltYm9sc2AgYXMgYFsmIzM0O3l0ODUzMXNfY29uZmlnX2luaXQmIzM0OywgJiMzNDt5dDg1MjFfY29uZmlnX2luaXQmIzM0O11gLCBhbmQgdGhlIGBFbmFibGVDb25maWdzYCBzZXQgdG8gYFsmIzM0O01PVE9SQ09NTV9QSFkmIzM0OywgJiMzNDtQSFlMSUImIzM0OywgJiMzNDtORVRERVZJQ0VTJiMzNDtdYC4gVGhpcyBzaG91bGQgYmUgYSByb2J1c3QgYW5kIGRlZmVuc2libGUgY2hvaWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TU9UT1JDT01NX1BIWSYjMzQ7LAogICAgJiMzNDtQSFlMSUImIzM0OywKICAgICYjMzQ7TkVUREVWSUNFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3l0ODUzMXNfY29uZmlnX2luaXQmIzM0OywKICAgICYjMzQ7eXQ4NTIxX2NvbmZpZ19pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBkZWRpY2F0ZWQgaW5pdGlhbGl6YXRpb24gY2FsbGJhY2sgeXQ4NTMxc19jb25maWdfaW5pdCBmb3IgdGhlIE1vdG9yY29tbSBZVDg1MzFTIEV0aGVybmV0IFBIWSwgZmFjdG9yaW5nIGNvbW1vbiBpbml0aWFsaXphdGlvbiBpbnRvIF9feXQ4NTIxX2NvbmZpZ19pbml0IGFuZCBhZGRpbmcgc3VwcG9ydCBmb3IgZW5hYmxpbmcgdGhlIGFuYWxvZyBmcm9udC1lbmQgREFDIGNsb2NrIHdoZW4gb3BlcmF0aW5nIGluIEdNSUkgbW9kZS4gVGhlc2UgY2hhbmdlcyBhbHRlciBkcml2ZXIgY29uZmlndXJhdGlvbiBmbG93IGFuZCBjYW4gYmUgZXhlY3V0ZWQgdmlhIE1ESU8gLyBwaHlsaWIgdGhyb3VnaCBlbXVsYXRlZCBVU0Igb3IgbmV0d29yayBjb250cm9sbGVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TU9UT1JDT01NX1BIWSYjMzQ7LAogICAgJiMzNDtQSFlMSUImIzM0OywKICAgICYjMzQ7TkVUREVWSUNFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3l0ODUzMXNfY29uZmlnX2luaXQmIzM0OywKICAgICYjMzQ7eXQ4NTIxX2NvbmZpZ19pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBkZWRpY2F0ZWQgaW5pdGlhbGl6YXRpb24gY2FsbGJhY2sgeXQ4NTMxc19jb25maWdfaW5pdCBmb3IgdGhlIE1vdG9yY29tbSBZVDg1MzFTIEV0aGVybmV0IFBIWSwgZmFjdG9yaW5nIGNvbW1vbiBpbml0aWFsaXphdGlvbiBpbnRvIF9feXQ4NTIxX2NvbmZpZ19pbml0IGFuZCBhZGRpbmcgc3VwcG9ydCBmb3IgZW5hYmxpbmcgdGhlIGFuYWxvZyBmcm9udC1lbmQgREFDIGNsb2NrIHdoZW4gb3BlcmF0aW5nIGluIEdNSUkgbW9kZS4gVGhlc2UgY2hhbmdlcyBhbHRlciBkcml2ZXIgY29uZmlndXJhdGlvbiBmbG93IGFuZCBjYW4gYmUgZXhlY3V0ZWQgdmlhIE1ESU8gLyBwaHlsaWIgdGhyb3VnaCBlbXVsYXRlZCBVU0Igb3IgbmV0d29yayBjb250cm9sbGVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNb3RvcmNvbW0gUEhZIGRyaXZlciAoZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jKSBieSByZWZhY3RvcmluZyBQSFkgY29uZmlndXJhdGlvbiBsb2dpYyBhbmQgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBZVDg1MzFTIFBIWSBjb25maWcgaW5pdCBjYWxsYmFjayAoeXQ4NTMxc19jb25maWdfaW5pdCksIHdoaWNoIHBlcmZvcm1zIGhhcmR3YXJlIHJlZ2lzdGVyIHJlYWRzL3dyaXRlcyB2aWEgTURJTy4gVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgaGFyZHdhcmUgcmVnaXN0ZXIgYWNjZXNzIGNvbnRyb2wgZmxvdyBhbmQgbG9jYWwgaW50ZWdlciByZXR1cm4gY29kZXM7IHRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVycywgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gU3RhbmRhcmQgS0FTQU4gYW5kIGdlbmVyYWwga2VybmVsIHRlc3RpbmcgYXJlIHN1ZmZpY2llbnQsIGFuZCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyB0aGF0IHdvdWxkIHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0MTM4MDZmYjRlNjdkMDJiNzgxZTVjNDk1ZGEwOTQ2M2Y3NmU4OGY0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMDc6NTQ6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMKaW5kZXggYzVhMmNkYThkMzFiZC4uOTBhNGY4NmYyNzU4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYwpAQCAtMTQ0LDYgJiM0MzsxNDQsMTEgQEAKICNkZWZpbmUgWVQ4NTIxX0NMT0NLX0dBVElOR19SRUcJCQkweEMKICNkZWZpbmUgWVQ4NTIxX0NHUl9SWF9DTEtfRU4JCQlCSVQoMTIpCiAKJiM0MzsvKiBBbmFsb2cgZnJvbnQtZW5kIGNvbnRyb2wgcmVnaXN0ZXIgMyAqLwomIzQzOyNkZWZpbmUgWVQ4NTMxU19FWFRfQUZFX0NUUkwzCQkJMHgxMgomIzQzOy8qIEFuYWxvZyBmcm9udC1lbmQgREFDIGNsb2NrIGVuYWJsZSAqLwomIzQzOyNkZWZpbmUgWVQ4NTMxU19BRkVfQ1RSTDNfQ0xLREFDX0FPTgkJQklUKDEzKQomIzQzOwogI2RlZmluZSBZVDg1MjFfRVhUUkVHX1NMRUVQX0NPTlRST0wxX1JFRwkweDI3CiAjZGVmaW5lIFlUODUyMV9FU0MxUl9TTEVFUF9TVwkJCUJJVCgxNSkKICNkZWZpbmUgWVQ4NTIxX0VTQzFSX1BMTE9OX1NMUAkJCUJJVCgxNCkKQEAgLTE2ODAsMjcgJiM0MzsxNjg1LDE2IEBAIHN0YXRpYyBpbnQgeXQ4NTIxX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogCXJldHVybiB5dDg1MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7CiB9CiAKLS8qKgotICogeXQ4NTIxX2NvbmZpZ19pbml0KCkgLSBjYWxsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgUEhZCi0gKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCi0gKgotICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKLSAqLwotc3RhdGljIGludCB5dDg1MjFfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0MztzdGF0aWMgaW50IF9feXQ4NTIxX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwotCWludCBvbGRfcGFnZTsKIAlpbnQgcmV0ID0gMDsKIAotCW9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4NTIxX1JTU1JfVVRQX1NQQUNFKTsKLQlpZiAob2xkX3BhZ2UgJmx0OyAwKQotCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7Ci0KIAkvKiBzZXQgcmdtaWkgZGVsYXkgbW9kZSAqLwogCWlmIChwaHlkZXYtJmd0O2ludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHsKIAkJcmV0ID0geXRwaHlfcmdtaWlfY2xrX2RlbGF5X2NvbmZpZyhwaHlkZXYpOwogCQlpZiAocmV0ICZsdDsgMCkKLQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCQlyZXR1cm4gcmV0OwogCX0KIAogCWlmIChkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29sKGRldiwgJiMzNDttb3RvcmNvbW0sYXV0by1zbGVlcC1kaXNhYmxlZCYjMzQ7KSkgewpAQCAtMTcwOCwyMCAmIzQzOzE3MDIsNTggQEAgc3RhdGljIGludCB5dDg1MjFfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAkJcmV0ID0geXRwaHlfbW9kaWZ5X2V4dChwaHlkZXYsIFlUODUyMV9FWFRSRUdfU0xFRVBfQ09OVFJPTDFfUkVHLAogCQkJCSAgICAgICBZVDg1MjFfRVNDMVJfU0xFRVBfU1csIDApOwogCQlpZiAocmV0ICZsdDsgMCkKLQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmIChkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29sKGRldiwgJiMzNDttb3RvcmNvbW0sa2VlcC1wbGwtZW5hYmxlZCYjMzQ7KSkgewomIzQzOwlpZiAoZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYsICYjMzQ7bW90b3Jjb21tLGtlZXAtcGxsLWVuYWJsZWQmIzM0OykpCiAJCS8qIGVuYWJsZSBSWEMgY2xvY2sgd2hlbiBubyB3aXJlIHBsdWcgKi8KLQkJcmV0ID0geXRwaHlfbW9kaWZ5X2V4dChwaHlkZXYsIFlUODUyMV9DTE9DS19HQVRJTkdfUkVHLAotCQkJCSAgICAgICBZVDg1MjFfQ0dSX1JYX0NMS19FTiwgMCk7Ci0JCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHl0cGh5X21vZGlmeV9leHQocGh5ZGV2LCBZVDg1MjFfQ0xPQ0tfR0FUSU5HX1JFRywKJiM0MzsJCQkJCVlUODUyMV9DR1JfUlhfQ0xLX0VOLCAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODUyMV9jb25maWdfaW5pdCgpIC0gY2FsbGVkIHRvIGluaXRpYWxpemUgdGhlIFBIWQomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg1MjFfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBvbGRfcGFnZSwgcmV0ID0gMDsKJiM0MzsKJiM0MzsJb2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg1MjFfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBfX3l0ODUyMV9jb25maWdfaW5pdChwaHlkZXYpOwomIzQzOwomIzQzO2Vycl9yZXN0b3JlX3BhZ2U6CiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeXQ4NTMxc19jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlLCByZXQgPSAwOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODUyMV9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IF9feXQ4NTIxX2NvbmZpZ19pbml0KHBoeWRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CWlmIChwaHlfaW50ZXJmYWNlX2lzX3JnbWlpKHBoeWRldikpIHsKJiM0MzsJCXJldCA9IHl0ODUzMV9zZXRfZHMocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQpCiAJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiAJfQogCi0JaWYgKHBoeV9pbnRlcmZhY2VfaXNfcmdtaWkocGh5ZGV2KSAmYW1wOyZhbXA7Ci0JICAgIHBoeWRldl9pZF9jb21wYXJlKHBoeWRldiwgUEhZX0lEX1lUODUzMVMpKQotCQlyZXQgPSB5dDg1MzFfc2V0X2RzKHBoeWRldik7CiYjNDM7CWlmIChwaHlkZXYtJmd0O2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfR01JSSkKJiM0MzsJCXJldCA9IHl0cGh5X21vZGlmeV9leHQocGh5ZGV2LCBZVDg1MzFTX0VYVF9BRkVfQ1RSTDMsCiYjNDM7CQkJCSAgICAgICAwLCBZVDg1MzFTX0FGRV9DVFJMM19DTEtEQUNfQU9OKTsKIAogZXJyX3Jlc3RvcmVfcGFnZToKIAlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwpAQCAtMzEzNSw3ICYjNDM7MzE2Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHsKIAkJLnNldF93b2wJPSB5dHBoeV9zZXRfd29sLAogCQkuY29uZmlnX2FuZWcJPSB5dDg1MjFfY29uZmlnX2FuZWcsCiAJCS5hbmVnX2RvbmUJPSB5dDg1MjFfYW5lZ19kb25lLAotCQkuY29uZmlnX2luaXQJPSB5dDg1MjFfY29uZmlnX2luaXQsCiYjNDM7CQkuY29uZmlnX2luaXQJPSB5dDg1MzFzX2NvbmZpZ19pbml0LAogCQkucmVhZF9zdGF0dXMJPSB5dDg1MjFfcmVhZF9zdGF0dXMsCiAJCS5zb2Z0X3Jlc2V0CT0geXQ4NTIxX3NvZnRfcmVzZXQsCiAJCS5zdXNwZW5kCT0geXQ4NTIxX3N1c3BlbmQsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTg1CgkJCQkJCQlvdXRwdXQ6IDE2MQoJCQkJCQkJdGhvdWdodHM6IDQ1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBNb3RvcmNvbW0gUEhZIERyaXZlciBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciB0aGUgTW90b3Jjb21tIFBIWSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB3aGV0aGVyIGl0IHdhcnJhbnRzIGEgS01TQU4gY2hlY2suIEkgc2VlIGl0IHRvdWNoZXMgYGRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY2AuIFRoZSBjaGFuZ2VzIGludm9sdmU6IGFkZGluZyBhIGZldyBtYWNyb3MgKGBZVDg1MzFTX0VYVF9BRkVfQ1RSTDNgLCBgWVQ4NTMxU19BRkVfQ1RSTDNfQ0xLREFDX0FPTmApLCByZWZhY3RvcmluZyB0aGUgYHl0ODUyMV9jb25maWdfaW5pdGAgZnVuY3Rpb24sIGFuZCBpbnRyb2R1Y2luZyBgeXQ4NTMxc19jb25maWdfaW5pdGAgZm9yIHRoZSBZVDg1MzFTIFBIWS4gVGhlIGBjb25maWdfaW5pdGAgY2FsbGJhY2sgaW4gdGhlIGRyaXZlciB0YWJsZSBpcyBiZWluZyB1cGRhdGVkLgoKRXNzZW50aWFsbHksIHRoaXMgaXMgaGFyZHdhcmUgcmVnaXN0ZXIgbWFuaXB1bGF0aW9uIGZvciBhIHNwZWNpZmljIFBIWSwgdGhlIFlUODUzMVMuIEl0JiMzOTtzIGluaXRpYWxpemluZyBhbmQgY29uZmlndXJpbmcgdGhlIGRldmljZS4gSSYjMzk7bSBzZWVpbmcgcmVnaXN0ZXIgd3JpdGVzIGFuZCBwb3RlbnRpYWxseSBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHRoZSBpbnRlcmZhY2UgdHlwZSAoUkdNSUkvR01JSSkgdG8gYWRqdXN0IGRyaXZlIHN0cmVuZ3RoIG9yIG1vZGlmeSBzcGVjaWZpYyByZWdpc3RlcnMuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogZG9lcyB0aGlzIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gTm8gbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBhZGRlZCBhbmQgbm8gZGlyZWN0IGRhdGEgdHJhbnNmZXJzIHRvIHVzZXIgc3BhY2UgZWl0aGVyLiBJdCYjMzk7cyBhbGwgaW50ZXJuYWwgcmVnaXN0ZXIgbWFuaXB1bGF0aW9uLCBubyBgY29weV90b191c2VyYCBvciB0aGUgbGlrZSwgd2hpY2ggbWVhbnMgSSBkb24mIzM5O3QgaGF2ZSB0byB3b3JyeSBhYm91dCB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBWYXJpYWJsZXMgbGlrZSBgZGV2YCwgYHJldGAsIGFuZCBgb2xkX3BhZ2VgIGFyZSBzY2FsYXIgdHlwZXMgYW5kIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgd2hpY2ggbWVhbnMgdGhhdCB1bmluaXRpYWxpemVkIHJlYWQgcmlza3MgYXJlIG1pbmltYWwuIFRoZXJlJiMzOTtzIG5vIGV2aWRlbnQgcmlzayBvZiBpbmZvcm1hdGlvbiBsZWFrcy4KCkkmIzM5O20gY29tZm9ydGFibGUgd2l0aCB0aGF0LCBzbyBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayBldmVyeXRoaW5nLCB1c2luZyBhIGBzZXQtcmVzdWx0c2AgcHJvY2Vzcy4KCkFmdGVyIGEgcmV2aWV3LCBpdCBsb29rcyBjbGVhcjogbm8gc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLCBzbyBubyByaXNrIHRoZXJlLiBUaGVyZSYjMzk7cyBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG5vciBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucy4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gYW55IGJvdW5kcyBjaGVja3MgdGhhdCBJIGhhdmUgdG8gY29uc2lkZXIgdG8gZW5zdXJlIHRoYXQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNuJiMzOTt0IHJldmVhbGVkLgoKU28sICpOZWVkc0tNU0FOKiBpcyBkZWZpbml0aXZlbHkgKmZhbHNlKiBoZXJlLiBObyBLTVNBTiBmbGFncy4gSXQmIzM5O3MgYSBjbGVhbiBwYXRjaC4KCkkmIzM5O2xsIHdyaXRlIHVwIHNvbWUgYnJpZWYgS01TQU4gcmVhc29uaW5nLCBjb250cmFzdGluZyBLTVNBTiB3aXRoIEtBU0FOLCBhcyBhIGNvdXJ0ZXN5LCBhbmQgSSBjYW4gbW92ZSBvbiB0byB0aGUgbmV4dCBvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNb3RvcmNvbW0gUEhZIGRyaXZlciAoZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jKSBieSByZWZhY3RvcmluZyBQSFkgY29uZmlndXJhdGlvbiBsb2dpYyBhbmQgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBZVDg1MzFTIFBIWSBjb25maWcgaW5pdCBjYWxsYmFjayAoeXQ4NTMxc19jb25maWdfaW5pdCksIHdoaWNoIHBlcmZvcm1zIGhhcmR3YXJlIHJlZ2lzdGVyIHJlYWRzL3dyaXRlcyB2aWEgTURJTy4gVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgaGFyZHdhcmUgcmVnaXN0ZXIgYWNjZXNzIGNvbnRyb2wgZmxvdyBhbmQgbG9jYWwgaW50ZWdlciByZXR1cm4gY29kZXM7IHRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVycywgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gU3RhbmRhcmQgS0FTQU4gYW5kIGdlbmVyYWwga2VybmVsIHRlc3RpbmcgYXJlIHN1ZmZpY2llbnQsIGFuZCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyB0aGF0IHdvdWxkIHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1vdG9yY29tbSBQSFkgZHJpdmVyIChkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMpIGJ5IHJlZmFjdG9yaW5nIFBIWSBjb25maWd1cmF0aW9uIGxvZ2ljIGFuZCBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFlUODUzMVMgUEhZIGNvbmZpZyBpbml0IGNhbGxiYWNrICh5dDg1MzFzX2NvbmZpZ19pbml0KSwgd2hpY2ggcGVyZm9ybXMgaGFyZHdhcmUgcmVnaXN0ZXIgcmVhZHMvd3JpdGVzIHZpYSBNRElPLiBUaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBoYXJkd2FyZSByZWdpc3RlciBhY2Nlc3MgY29udHJvbCBmbG93IGFuZCBsb2NhbCBpbnRlZ2VyIHJldHVybiBjb2RlczsgdGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXJzLCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBTdGFuZGFyZCBLQVNBTiBhbmQgZ2VuZXJhbCBrZXJuZWwgdGVzdGluZyBhcmUgc3VmZmljaWVudCwgYW5kIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIHRoYXQgd291bGQgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU0OjAzLjYxMDI0NDY2NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NjM2NjMxNzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1PVE9SQ09NTV9QSFlcIixcbiAgICBcIlBIWUxJQlwiLFxuICAgIFwiTkVUREVWSUNFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInl0ODUzMXNfY29uZmlnX2luaXRcIixcbiAgICBcInl0ODUyMV9jb25maWdfaW5pdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1vdG9yY29tbSBQSFkgZHJpdmVyIChkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMpIGJ5IHJlZmFjdG9yaW5nIFBIWSBjb25maWd1cmF0aW9uIGxvZ2ljIGFuZCBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFlUODUzMVMgUEhZIGNvbmZpZyBpbml0IGNhbGxiYWNrICh5dDg1MzFzX2NvbmZpZ19pbml0KSwgd2hpY2ggcGVyZm9ybXMgaGFyZHdhcmUgcmVnaXN0ZXIgcmVhZHMvd3JpdGVzIHZpYSBNRElPLiBUaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBoYXJkd2FyZSByZWdpc3RlciBhY2Nlc3MgY29udHJvbCBmbG93IGFuZCBsb2NhbCBpbnRlZ2VyIHJldHVybiBjb2RlczsgdGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXJzLCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBTdGFuZGFyZCBLQVNBTiBhbmQgZ2VuZXJhbCBrZXJuZWwgdGVzdGluZyBhcmUgc3VmZmljaWVudCwgYW5kIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIHRoYXQgd291bGQgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlZGljYXRlZCBpbml0aWFsaXphdGlvbiBjYWxsYmFjayB5dDg1MzFzX2NvbmZpZ19pbml0IGZvciB0aGUgTW90b3Jjb21tIFlUODUzMVMgRXRoZXJuZXQgUEhZLCBmYWN0b3JpbmcgY29tbW9uIGluaXRpYWxpemF0aW9uIGludG8gX195dDg1MjFfY29uZmlnX2luaXQgYW5kIGFkZGluZyBzdXBwb3J0IGZvciBlbmFibGluZyB0aGUgYW5hbG9nIGZyb250LWVuZCBEQUMgY2xvY2sgd2hlbiBvcGVyYXRpbmcgaW4gR01JSSBtb2RlLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGRyaXZlciBjb25maWd1cmF0aW9uIGZsb3cgYW5kIGNhbiBiZSBleGVjdXRlZCB2aWEgTURJTyAvIHBoeWxpYiB0aHJvdWdoIGVtdWxhdGVkIFVTQiBvciBuZXR3b3JrIGNvbnRyb2xsZXJzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzo1NDowMy42MTAyNDkyMzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMTQ4NDEzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQxMzgwNmZiNGU2N2QwMmI3ODFlNWM0OTVkYTA5NDYzZjc2ZTg4ZjRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDc6NTQ6MDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXFxuaW5kZXggYzVhMmNkYThkMzFiZC4uOTBhNGY4NmYyNzU4YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcXG5AQCAtMTQ0LDYgKzE0NCwxMSBAQFxcbiAjZGVmaW5lIFlUODUyMV9DTE9DS19HQVRJTkdfUkVHXFx0XFx0XFx0MHhDXFxuICNkZWZpbmUgWVQ4NTIxX0NHUl9SWF9DTEtfRU5cXHRcXHRcXHRCSVQoMTIpXFxuIFxcbisvKiBBbmFsb2cgZnJvbnQtZW5kIGNvbnRyb2wgcmVnaXN0ZXIgMyAqL1xcbisjZGVmaW5lIFlUODUzMVNfRVhUX0FGRV9DVFJMM1xcdFxcdFxcdDB4MTJcXG4rLyogQW5hbG9nIGZyb250LWVuZCBEQUMgY2xvY2sgZW5hYmxlICovXFxuKyNkZWZpbmUgWVQ4NTMxU19BRkVfQ1RSTDNfQ0xLREFDX0FPTlxcdFxcdEJJVCgxMylcXG4rXFxuICNkZWZpbmUgWVQ4NTIxX0VYVFJFR19TTEVFUF9DT05UUk9MMV9SRUdcXHQweDI3XFxuICNkZWZpbmUgWVQ4NTIxX0VTQzFSX1NMRUVQX1NXXFx0XFx0XFx0QklUKDE1KVxcbiAjZGVmaW5lIFlUODUyMV9FU0MxUl9QTExPTl9TTFBcXHRcXHRcXHRCSVQoMTQpXFxuQEAgLTE2ODAsMjcgKzE2ODUsMTYgQEAgc3RhdGljIGludCB5dDg1MjFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdHJldHVybiB5dDg1MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7XFxuIH1cXG4gXFxuLS8qKlxcbi0gKiB5dDg1MjFfY29uZmlnX2luaXQoKSAtIGNhbGxlZCB0byBpbml0aWFsaXplIHRoZSBQSFlcXG4tICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuLSAqXFxuLSAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuLSAqL1xcbi1zdGF0aWMgaW50IHl0ODUyMV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbitzdGF0aWMgaW50IF9feXQ4NTIxX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuLVxcdGludCBvbGRfcGFnZTtcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcbi1cXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODUyMV9SU1NSX1VUUF9TUEFDRSk7XFxuLVxcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuLVxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4tXFxuIFxcdC8qIHNldCByZ21paSBkZWxheSBtb2RlICovXFxuIFxcdGlmIChwaHlkZXYtXFx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHtcXG4gXFx0XFx0cmV0ID0geXRwaHlfcmdtaWlfY2xrX2RlbGF5X2NvbmZpZyhwaHlkZXYpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYsIFxcXCJtb3RvcmNvbW0sYXV0by1zbGVlcC1kaXNhYmxlZFxcXCIpKSB7XFxuQEAgLTE3MDgsMjAgKzE3MDIsNTggQEAgc3RhdGljIGludCB5dDg1MjFfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0XFx0cmV0ID0geXRwaHlfbW9kaWZ5X2V4dChwaHlkZXYsIFlUODUyMV9FWFRSRUdfU0xFRVBfQ09OVFJPTDFfUkVHLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgWVQ4NTIxX0VTQzFSX1NMRUVQX1NXLCAwKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGRldmljZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LCBcXFwibW90b3Jjb21tLGtlZXAtcGxsLWVuYWJsZWRcXFwiKSkge1xcbitcXHRpZiAoZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYsIFxcXCJtb3RvcmNvbW0sa2VlcC1wbGwtZW5hYmxlZFxcXCIpKVxcbiBcXHRcXHQvKiBlbmFibGUgUlhDIGNsb2NrIHdoZW4gbm8gd2lyZSBwbHVnICovXFxuLVxcdFxcdHJldCA9IHl0cGh5X21vZGlmeV9leHQocGh5ZGV2LCBZVDg1MjFfQ0xPQ0tfR0FUSU5HX1JFRyxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIFlUODUyMV9DR1JfUlhfQ0xLX0VOLCAwKTtcXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiB5dHBoeV9tb2RpZnlfZXh0KHBoeWRldiwgWVQ4NTIxX0NMT0NLX0dBVElOR19SRUcsXFxuK1xcdFxcdFxcdFxcdFxcdFlUODUyMV9DR1JfUlhfQ0xLX0VOLCAwKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4NTIxX2NvbmZpZ19pbml0KCkgLSBjYWxsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgUEhZXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiByZXR1cm5zIDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg1MjFfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2UsIHJldCA9IDA7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODUyMV9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IF9feXQ4NTIxX2NvbmZpZ19pbml0KHBoeWRldik7XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHl0ODUzMXNfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2UsIHJldCA9IDA7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODUyMV9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IF9feXQ4NTIxX2NvbmZpZ19pbml0KHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdGlmIChwaHlfaW50ZXJmYWNlX2lzX3JnbWlpKHBoeWRldikpIHtcXG4rXFx0XFx0cmV0ID0geXQ4NTMxX3NldF9kcyhwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChwaHlfaW50ZXJmYWNlX2lzX3JnbWlpKHBoeWRldikgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIHBoeWRldl9pZF9jb21wYXJlKHBoeWRldiwgUEhZX0lEX1lUODUzMVMpKVxcbi1cXHRcXHRyZXQgPSB5dDg1MzFfc2V0X2RzKHBoeWRldik7XFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfR01JSSlcXG4rXFx0XFx0cmV0ID0geXRwaHlfbW9kaWZ5X2V4dChwaHlkZXYsIFlUODUzMVNfRVhUX0FGRV9DVFJMMyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIDAsIFlUODUzMVNfQUZFX0NUUkwzX0NMS0RBQ19BT04pO1xcbiBcXG4gZXJyX3Jlc3RvcmVfcGFnZTpcXG4gXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG5AQCAtMzEzNSw3ICszMTY3LDcgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xcbiBcXHRcXHQuc2V0X3dvbFxcdD0geXRwaHlfc2V0X3dvbCxcXG4gXFx0XFx0LmNvbmZpZ19hbmVnXFx0PSB5dDg1MjFfY29uZmlnX2FuZWcsXFxuIFxcdFxcdC5hbmVnX2RvbmVcXHQ9IHl0ODUyMV9hbmVnX2RvbmUsXFxuLVxcdFxcdC5jb25maWdfaW5pdFxcdD0geXQ4NTIxX2NvbmZpZ19pbml0LFxcbitcXHRcXHQuY29uZmlnX2luaXRcXHQ9IHl0ODUzMXNfY29uZmlnX2luaXQsXFxuIFxcdFxcdC5yZWFkX3N0YXR1c1xcdD0geXQ4NTIxX3JlYWRfc3RhdHVzLFxcbiBcXHRcXHQuc29mdF9yZXNldFxcdD0geXQ4NTIxX3NvZnRfcmVzZXQsXFxuIFxcdFxcdC5zdXNwZW5kXFx0PSB5dDg1MjFfc3VzcGVuZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6NTQ6MDMuOTQyMzk2MDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjgwOTI0MzEzODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1PVE9SQ09NTV9QSFlcIixcbiAgICBcIlBIWUxJQlwiLFxuICAgIFwiTkVUREVWSUNFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInl0ODUzMXNfY29uZmlnX2luaXRcIixcbiAgICBcInl0ODUyMV9jb25maWdfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBkZWRpY2F0ZWQgaW5pdGlhbGl6YXRpb24gY2FsbGJhY2sgeXQ4NTMxc19jb25maWdfaW5pdCBmb3IgdGhlIE1vdG9yY29tbSBZVDg1MzFTIEV0aGVybmV0IFBIWSwgZmFjdG9yaW5nIGNvbW1vbiBpbml0aWFsaXphdGlvbiBpbnRvIF9feXQ4NTIxX2NvbmZpZ19pbml0IGFuZCBhZGRpbmcgc3VwcG9ydCBmb3IgZW5hYmxpbmcgdGhlIGFuYWxvZyBmcm9udC1lbmQgREFDIGNsb2NrIHdoZW4gb3BlcmF0aW5nIGluIEdNSUkgbW9kZS4gVGhlc2UgY2hhbmdlcyBhbHRlciBkcml2ZXIgY29uZmlndXJhdGlvbiBmbG93IGFuZCBjYW4gYmUgZXhlY3V0ZWQgdmlhIE1ESU8gLyBwaHlsaWIgdGhyb3VnaCBlbXVsYXRlZCBVU0Igb3IgbmV0d29yayBjb250cm9sbGVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDEzODA2ZmI0ZTY3ZDAyYjc4MWU1YzQ5NWRhMDk0NjNmNzZlODhmNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDA3OjU0OjAyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG5pbmRleCBjNWEyY2RhOGQzMWJkLi45MGE0Zjg2ZjI3NThiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbkBAIC0xNDQsNiArMTQ0LDExIEBAXG4gI2RlZmluZSBZVDg1MjFfQ0xPQ0tfR0FUSU5HX1JFR1x0XHRcdDB4Q1xuICNkZWZpbmUgWVQ4NTIxX0NHUl9SWF9DTEtfRU5cdFx0XHRCSVQoMTIpXG4gXG4rLyogQW5hbG9nIGZyb250LWVuZCBjb250cm9sIHJlZ2lzdGVyIDMgKi9cbisjZGVmaW5lIFlUODUzMVNfRVhUX0FGRV9DVFJMM1x0XHRcdDB4MTJcbisvKiBBbmFsb2cgZnJvbnQtZW5kIERBQyBjbG9jayBlbmFibGUgKi9cbisjZGVmaW5lIFlUODUzMVNfQUZFX0NUUkwzX0NMS0RBQ19BT05cdFx0QklUKDEzKVxuK1xuICNkZWZpbmUgWVQ4NTIxX0VYVFJFR19TTEVFUF9DT05UUk9MMV9SRUdcdDB4MjdcbiAjZGVmaW5lIFlUODUyMV9FU0MxUl9TTEVFUF9TV1x0XHRcdEJJVCgxNSlcbiAjZGVmaW5lIFlUODUyMV9FU0MxUl9QTExPTl9TTFBcdFx0XHRCSVQoMTQpXG5AQCAtMTY4MCwyNyArMTY4NSwxNiBAQCBzdGF0aWMgaW50IHl0ODUyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdHJldHVybiB5dDg1MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7XG4gfVxuIFxuLS8qKlxuLSAqIHl0ODUyMV9jb25maWdfaW5pdCgpIC0gY2FsbGVkIHRvIGluaXRpYWxpemUgdGhlIFBIWVxuLSAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4tICpcbi0gKiByZXR1cm5zIDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuLSAqL1xuLXN0YXRpYyBpbnQgeXQ4NTIxX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4rc3RhdGljIGludCBfX3l0ODUyMV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbi1cdGludCBvbGRfcGFnZTtcbiBcdGludCByZXQgPSAwO1xuIFxuLVx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg1MjFfUlNTUl9VVFBfU1BBQ0UpO1xuLVx0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4tXG4gXHQvKiBzZXQgcmdtaWkgZGVsYXkgbW9kZSAqL1xuIFx0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKSB7XG4gXHRcdHJldCA9IHl0cGh5X3JnbWlpX2Nsa19kZWxheV9jb25maWcocGh5ZGV2KTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbiBcdGlmIChkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29sKGRldiwgXCJtb3RvcmNvbW0sYXV0by1zbGVlcC1kaXNhYmxlZFwiKSkge1xuQEAgLTE3MDgsMjAgKzE3MDIsNTggQEAgc3RhdGljIGludCB5dDg1MjFfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdFx0cmV0ID0geXRwaHlfbW9kaWZ5X2V4dChwaHlkZXYsIFlUODUyMV9FWFRSRUdfU0xFRVBfQ09OVFJPTDFfUkVHLFxuIFx0XHRcdFx0ICAgICAgIFlUODUyMV9FU0MxUl9TTEVFUF9TVywgMCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0XHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4tXHRpZiAoZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYsIFwibW90b3Jjb21tLGtlZXAtcGxsLWVuYWJsZWRcIikpIHtcbitcdGlmIChkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29sKGRldiwgXCJtb3RvcmNvbW0sa2VlcC1wbGwtZW5hYmxlZFwiKSlcbiBcdFx0LyogZW5hYmxlIFJYQyBjbG9jayB3aGVuIG5vIHdpcmUgcGx1ZyAqL1xuLVx0XHRyZXQgPSB5dHBoeV9tb2RpZnlfZXh0KHBoeWRldiwgWVQ4NTIxX0NMT0NLX0dBVElOR19SRUcsXG4tXHRcdFx0XHQgICAgICAgWVQ4NTIxX0NHUl9SWF9DTEtfRU4sIDApO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4geXRwaHlfbW9kaWZ5X2V4dChwaHlkZXYsIFlUODUyMV9DTE9DS19HQVRJTkdfUkVHLFxuK1x0XHRcdFx0XHRZVDg1MjFfQ0dSX1JYX0NMS19FTiwgMCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogeXQ4NTIxX2NvbmZpZ19pbml0KCkgLSBjYWxsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgUEhZXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg1MjFfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgb2xkX3BhZ2UsIHJldCA9IDA7XG4rXG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODUyMV9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IF9feXQ4NTIxX2NvbmZpZ19pbml0KHBoeWRldik7XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeXQ4NTMxc19jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBvbGRfcGFnZSwgcmV0ID0gMDtcbitcbitcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4NTIxX1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0gX195dDg1MjFfY29uZmlnX2luaXQocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdGlmIChwaHlfaW50ZXJmYWNlX2lzX3JnbWlpKHBoeWRldikpIHtcbitcdFx0cmV0ID0geXQ4NTMxX3NldF9kcyhwaHlkZXYpO1xuK1x0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiBcdH1cbiBcbi1cdGlmIChwaHlfaW50ZXJmYWNlX2lzX3JnbWlpKHBoeWRldikgXHUwMDI2XHUwMDI2XG4tXHQgICAgcGh5ZGV2X2lkX2NvbXBhcmUocGh5ZGV2LCBQSFlfSURfWVQ4NTMxUykpXG4tXHRcdHJldCA9IHl0ODUzMV9zZXRfZHMocGh5ZGV2KTtcbitcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJKVxuK1x0XHRyZXQgPSB5dHBoeV9tb2RpZnlfZXh0KHBoeWRldiwgWVQ4NTMxU19FWFRfQUZFX0NUUkwzLFxuK1x0XHRcdFx0ICAgICAgIDAsIFlUODUzMVNfQUZFX0NUUkwzX0NMS0RBQ19BT04pO1xuIFxuIGVycl9yZXN0b3JlX3BhZ2U6XG4gXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuQEAgLTMxMzUsNyArMzE2Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcbiBcdFx0LnNldF93b2xcdD0geXRwaHlfc2V0X3dvbCxcbiBcdFx0LmNvbmZpZ19hbmVnXHQ9IHl0ODUyMV9jb25maWdfYW5lZyxcbiBcdFx0LmFuZWdfZG9uZVx0PSB5dDg1MjFfYW5lZ19kb25lLFxuLVx0XHQuY29uZmlnX2luaXRcdD0geXQ4NTIxX2NvbmZpZ19pbml0LFxuK1x0XHQuY29uZmlnX2luaXRcdD0geXQ4NTMxc19jb25maWdfaW5pdCxcbiBcdFx0LnJlYWRfc3RhdHVzXHQ9IHl0ODUyMV9yZWFkX3N0YXR1cyxcbiBcdFx0LnNvZnRfcmVzZXRcdD0geXQ4NTIxX3NvZnRfcmVzZXQsXG4gXHRcdC5zdXNwZW5kXHQ9IHl0ODUyMV9zdXNwZW5kLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6NTQ6MDMuOTQyMzk3MjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDI4MDgzODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQncyBldmVuIHdvcnRoIGNvbnNpZGVyaW5nIGZvciBmdXp6aW5nLiBUaGUgY2hhbmdlIGlzIGluIGBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNgLCBzbyBteSBmaXJzdCB0aG91Z2h0IGlzLCBcIldoYXQncyB0aGF0IGFsbCBhYm91dD9cIiBSaWdodCwgaXQncyBhIFBIWSBkcml2ZXIg4oCTIHNwZWNpZmljYWxseSwgZm9yIHRob3NlIE1vdG9yY29tbSBQSFkgY2hpcHMgbGlrZSB0aGUgWVQ4NTExLCBZVDg1MjEsIGFuZCBZVDg1MzFTLiBOb3csIHRoZXNlIGFyZSBNRElPIEV0aGVybmV0IFBIWSBkcml2ZXJzLCBhbmQgdGhleSBsaXZlIHdpdGhpbiBgZHJpdmVycy9uZXQvcGh5L2AuXG5cblRoZSBiaWcgcXVlc3Rpb24sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGNhbiBiZSByZWFjaGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIENhbiBJIGdldCB0byB0aGlzIHN0dWZmIGluIFFFTVUgb3IgR0NFPyBPciBhbSBJIGdvaW5nIHRvIGJlIHN0dWNrIG5lZWRpbmcgc3BlY2lmaWMgcGh5c2ljYWwgRXRoZXJuZXQgaGFyZHdhcmUgYW5kIGFuIE1ESU8gYnVzP1xuXG5Ib2xkIG9uLCBsZXQncyByZXZpZXcgdGhlIHJ1bGVzLiBXZSBkb24ndCB3YW50IHRvIHdhc3RlIHRpbWUgb24gdGhpbmdzIHRoYXQgYXJlIG9idmlvdXNseSBvZmYtbGltaXRzLiBUaGUgZ3VpZGVsaW5lcyBhcmUgcHJldHR5IGNsZWFyOiBEb2N1bWVudGF0aW9uIGNoYW5nZXMsIGxvZ2dpbmcgdHdlYWtzLCBub24tZnVuY3Rpb25hbCBjb25zdGFudCBjaGFuZ2VzLCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLiBhbmQgc3R1ZmYgdGhhdCBuZWVkcyBzcGVjaWFsaXplZCBoYXJkd2FyZS4gR2l2ZW4gdGhhdCB0aGlzIGlzIGEgUEhZIGRyaXZlciwgaXQncyBwcmV0dHkgbGlrZWx5IHdlIGFyZSBnb2luZyB0byBuZWVkIHRoZSBoYXJkd2FyZS5cblxuU28sIGJhY2sgdG8gYG1vdG9yY29tbS5jYC4gSXQncyBkZWZpbml0ZWx5IGZvciB0aG9zZSBkaXNjcmV0ZSBQSFkgY2hpcHMsIHJpZ2h0PyBZVDg1MTEsIHRoYXQgc29ydCBvZiB0aGluZywgYWxsIGhhbmdpbmcgb2ZmIGFuIE1ESU8gYnVzLiBDYW4gSSBlbXVsYXRlIHRoYXQ/IElzIHRoZXJlIHNvbWUgdmlydHVhbCBNRElPIG1hZ2ljIG91dCB0aGVyZSwgb3IgYW0gSSBjb21wbGV0ZWx5IGhhcmR3YXJlLWRlcGVuZGVudCBoZXJlPyBJJ20gZ29pbmcgdG8gZG8gYSBxdWljayBzZWFyY2ggaW4gdGhlIGNvZGViYXNlIGZvciBgbW90b3Jjb21tYCBvciBgTU9UT1JDT01NX1BIWWAgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IGhpbnQgb2YgdmlydHVhbGl6YXRpb24gc3VwcG9ydC4gSG9wZWZ1bGx5LCB0aGUgcmVzdWx0cyBwb2ludCB0byBzb21lIHZpcnR1YWwgTURJTyAvIG1vY2sgTURJTy4gT3RoZXJ3aXNlLCBJIHdpbGwgbWFyayB0aGlzIGFzICpub3QqIHdvcnRoIGZ1enppbmcgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1ODgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzo1NDowOC45NzA0ODM5OTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwMzc5NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTU9UT1JDT01NXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWc9MzUzPWNvbmZpZyBNSUNST1NFTUlfUEhZXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zNjEtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MzYyOmNvbmZpZyBNT1RPUkNPTU1fUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzYzLVxcdHRyaXN0YXRlIFxcXCJNb3RvcmNvbW0gUEhZc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT04ND1vYmotJChDT05GSUdfTUlDUk9TRU1JX1BIWSlcXHQrPSBtc2NjL1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo4NTpvYmotJChDT05GSUdfTU9UT1JDT01NX1BIWSlcXHQrPSBtb3RvcmNvbW0ub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS04Ni1vYmotJChDT05GSUdfTkFUSU9OQUxfUEhZKVxcdCs9IG5hdGlvbmFsLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6NTQ6MDkuMDE4NTI2ODkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk2MTAzODAwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBNb3RvcmNvbW0gUEhZIERyaXZlcioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY2Agc291cmNlIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBkcml2ZXIgaXMgZG9pbmcuIEknbGwgZm9jdXMgbXkgYXR0ZW50aW9uIGFyb3VuZCB0aGUgYG1vdG9yY29tbV9waHlfZHJ2c2AgZGF0YSBzdHJ1Y3R1cmUuIFRoYXQncyB1c3VhbGx5IHRoZSBzdGFydGluZyBwb2ludCBmb3IgUEhZIGRyaXZlciBpbXBsZW1lbnRhdGlvbnM7IGl0IGRlZmluZXMgdGhlIHN1cHBvcnRlZCBQSFkgSURzIGFuZCBhc3NvY2lhdGVkIGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBkcml2ZXIncyBwcm9iZSBhbmQgbWF0Y2ggcm91dGluZXMgd29yay4gVW5kZXJzdGFuZGluZyB0aGF0IGludGVyYWN0aW9uIGlzIGtleS4gSSdsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIGRyaXZlciBpZGVudGlmaWVzIGEgTW90b3Jjb21tIFBIWSBhbmQgdGhlbiBob3cgaXQgaW5pdGlhbGl6ZXMgYW5kIGNvbmZpZ3VyZXMgaXQuIEkgc3VzcGVjdCB0aGVyZSdzIGEgZGV2aWNlIElEIG1hdGNoIGludm9sdmVkLCBsaWtlbHkgY2hlY2tpbmcgYWdhaW5zdCBzb21lIHJlZ2lzdGVyIHZhbHVlcy4gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyB0aGUgZHJpdmVyIGRldGVybWluZXMgaWYgaXQncyB0aGUgcmlnaHQgb25lIGZvciBhIGdpdmVuIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NzcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzo1NDoxMC45Nzk1Njc2NDFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDM0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxNTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMxNTA6XFx0XFx0XFx0LnN1c3BlbmRcXHQ9IGdlbnBoeV9zdXNwZW5kLFxcbjMxNTE6XFx0XFx0XFx0LnJlc3VtZVxcdFxcdD0gZ2VucGh5X3Jlc3VtZSxcXG4zMTUyOlxcdFxcdFxcdC5nZXRfd29sXFx0PSB5dHBoeV9nZXRfd29sLFxcbjMxNTM6XFx0XFx0XFx0LnNldF93b2xcXHQ9IHl0ODUzMV9zZXRfd29sLFxcbjMxNTQ6XFx0XFx0XFx0LmxpbmtfY2hhbmdlX25vdGlmeSA9IHl0ODUzMV9saW5rX2NoYW5nZV9ub3RpZnksXFxuMzE1NTpcXHRcXHRcXHQubGVkX2h3X2lzX3N1cHBvcnRlZCA9IHl0ODUyMV9sZWRfaHdfaXNfc3VwcG9ydGVkLFxcbjMxNTY6XFx0XFx0XFx0LmxlZF9od19jb250cm9sX3NldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9zZXQsXFxuMzE1NzpcXHRcXHRcXHQubGVkX2h3X2NvbnRyb2xfZ2V0ID0geXQ4NTIxX2xlZF9od19jb250cm9sX2dldCxcXG4zMTU4OlxcdFxcdH0sXFxuMzE1OTpcXHRcXHR7XFxuMzE2MDpcXHRcXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMVMpLFxcbjMxNjE6XFx0XFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJZVDg1MzFTIEdpZ2FiaXQgRXRoZXJuZXRcXFwiLFxcbjMxNjI6XFx0XFx0XFx0LmdldF9mZWF0dXJlc1xcdD0geXQ4NTIxX2dldF9mZWF0dXJlcyxcXG4zMTYzOlxcdFxcdFxcdC5wcm9iZVxcdFxcdD0geXQ4NTIxX3Byb2JlLFxcbjMxNjQ6XFx0XFx0XFx0LnJlYWRfcGFnZVxcdD0geXQ4NTIxX3JlYWRfcGFnZSxcXG4zMTY1OlxcdFxcdFxcdC53cml0ZV9wYWdlXFx0PSB5dDg1MjFfd3JpdGVfcGFnZSxcXG4zMTY2OlxcdFxcdFxcdC5nZXRfd29sXFx0PSB5dHBoeV9nZXRfd29sLFxcbjMxNjc6XFx0XFx0XFx0LnNldF93b2xcXHQ9IHl0cGh5X3NldF93b2wsXFxuMzE2ODpcXHRcXHRcXHQuY29uZmlnX2FuZWdcXHQ9IHl0ODUyMV9jb25maWdfYW5lZyxcXG4zMTY5OlxcdFxcdFxcdC5hbmVnX2RvbmVcXHQ9IHl0ODUyMV9hbmVnX2RvbmUsXFxuMzE3MDpcXHRcXHRcXHQuY29uZmlnX2luaXRcXHQ9IHl0ODUzMXNfY29uZmlnX2luaXQsXFxuMzE3MTpcXHRcXHRcXHQucmVhZF9zdGF0dXNcXHQ9IHl0ODUyMV9yZWFkX3N0YXR1cyxcXG4zMTcyOlxcdFxcdFxcdC5zb2Z0X3Jlc2V0XFx0PSB5dDg1MjFfc29mdF9yZXNldCxcXG4zMTczOlxcdFxcdFxcdC5zdXNwZW5kXFx0PSB5dDg1MjFfc3VzcGVuZCxcXG4zMTc0OlxcdFxcdFxcdC5yZXN1bWVcXHRcXHQ9IHl0ODUyMV9yZXN1bWUsXFxuMzE3NTpcXHRcXHR9LFxcbjMxNzY6XFx0XFx0e1xcbjMxNzc6XFx0XFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpLFxcbjMxNzg6XFx0XFx0XFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJZVDg4MjEgMi41R2JwcyBQSFlcXFwiLFxcbjMxNzk6XFx0XFx0XFx0LmdldF9mZWF0dXJlc1xcdFxcdD0geXQ4ODIxX2dldF9mZWF0dXJlcyxcXG4zMTgwOlxcdFxcdFxcdC5yZWFkX3BhZ2VcXHRcXHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXFxuMzE4MTpcXHRcXHRcXHQud3JpdGVfcGFnZVxcdFxcdD0geXQ4NTIxX3dyaXRlX3BhZ2UsXFxuMzE4MjpcXHRcXHRcXHQuZ2V0X3dvbFxcdFxcdD0geXRwaHlfZ2V0X3dvbCxcXG4zMTgzOlxcdFxcdFxcdC5zZXRfd29sXFx0XFx0PSB5dHBoeV9zZXRfd29sLFxcbjMxODQ6XFx0XFx0XFx0LmNvbmZpZ19hbmVnXFx0XFx0PSBnZW5waHlfY29uZmlnX2FuZWcsXFxuMzE4NTpcXHRcXHRcXHQuYW5lZ19kb25lXFx0XFx0PSB5dDg4MjFfYW5lZ19kb25lLFxcbjMxODY6XFx0XFx0XFx0LmNvbmZpZ19pbml0XFx0XFx0PSB5dDg4MjFfY29uZmlnX2luaXQsXFxuMzE4NzpcXHRcXHRcXHQuZ2V0X3JhdGVfbWF0Y2hpbmdcXHQ9IHl0ODgyMV9nZXRfcmF0ZV9tYXRjaGluZyxcXG4zMTg4OlxcdFxcdFxcdC5yZWFkX3N0YXR1c1xcdFxcdD0geXQ4ODIxX3JlYWRfc3RhdHVzLFxcbjMxODk6XFx0XFx0XFx0LnNvZnRfcmVzZXRcXHRcXHQ9IHl0ODgyMV9zb2Z0X3Jlc2V0LFxcbjMxOTA6XFx0XFx0XFx0LnN1c3BlbmRcXHRcXHQ9IHl0ODgyMV9zdXNwZW5kLFxcbjMxOTE6XFx0XFx0XFx0LnJlc3VtZVxcdFxcdFxcdD0geXQ4ODIxX3Jlc3VtZSxcXG4zMTkyOlxcdFxcdH0sXFxuMzE5MzpcXHR9O1xcbjMxOTQ6XFx0XFxuMzE5NTpcXHRtb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpO1xcbjMxOTY6XFx0XFxuMzE5NzpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIk1vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXJcXFwiKTtcXG4zMTk4OlxcdE1PRFVMRV9BVVRIT1IoXFxcIlBldGVyIEdlaXNcXFwiKTtcXG4zMTk5OlxcdE1PRFVMRV9BVVRIT1IoXFxcIkZyYW5rXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU0OjEwLjk3OTkyNDU0MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NjY0ODU3MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIFBIWSBEcml2ZXIgSW5zdGFudGlhdGlvbiBpbiBWaXJ0dWFsIEVudmlyb25tZW50cyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byBob3cgdGhlc2UgUEhZIGRyaXZlcnMgYXJlIHR5cGljYWxseSBicm91Z2h0IHRvIGxpZmUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgcHJvYmluZyBtZWNoYW5pc207IEkgYmVsaWV2ZSB0aGV5IGtleSBvZmYgdGhvc2UgUEhZIElEIHJlZ2lzdGVycywgYE1JSV9QSFlTSUQxYCBhbmQgYE1JSV9QSFlTSUQyYCwgYWNjZXNzZWQgdGhyb3VnaCBNRElPLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uIHBsYXRmb3JtcyBsaWtlIFFFTVUsIEdDRSwgb3IgdGhlIG1haW5saW5lIExpbnV4IGtlcm5lbCBwcm92aWRlIGFueSBzb3J0IG9mIE1ESU8gYnVzIGVtdWxhdGlvbiBvciBtb2NrIGRyaXZlciBJIGNhbiBsZXZlcmFnZS5cblxuU28sIHRoZSBuZXh0IHN0ZXAgaXMgY2xlYXI6IGxldCdzIHZlcmlmeSBpZiBNRElPIFBIWSBkcml2ZXJzIGFyZSBhY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVG8gYWNoaWV2ZSB0aGlzLCBhIGZvY3VzZWQgc2VhcmNoIGlzIHJlcXVpcmVkLiBJJ2xsIG5lZWQgdG8gZXhwbG9yZSB0aGUgY29kZSB1c2luZyBzZWFyY2ggdGVybXMgcmVsYXRlZCB0byBNRElPIGltcGxlbWVudGF0aW9uLiBUaGF0IGluY2x1ZGVzIGBtZGlvYCwgYG1kaW9fYnVzYCwgYG1kaW8tZ3Bpb2AsIGFuZCBgbWRpby1iaXRiYW5nYCwgYW5kIG90aGVyIHNpbWlsYXIgdGVybXMgdGhhdCBtYXkgYmUgcmVsZXZhbnQuIFRoaXMgc2hvdWxkIGhlbHAgdG8gZGV0ZXJtaW5lIHRoZSBhdmFpbGFiaWxpdHkgb2YgTURJTyB3aXRoaW4gdGhlc2UgZW52aXJvbm1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTg5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6NTQ6MTMuNTQ2NDEzNDE1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMDY2ODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWRpby9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAzNjg4IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc9OTA9Y29uZmlnIE1ESU9fR1BJT1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTk3LVxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzo5ODpcXHQgIHdpbGwgYmUgY2FsbGVkIG1kaW8tZ3Bpby5cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctOTktXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlLTMtXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19BQ1BJX01ESU8pXFx0XFx0Kz0gYWNwaV9tZGlvLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0ZXTk9ERV9NRElPKVxcdCs9IGZ3bm9kZV9tZGlvLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX09GX01ESU8pXFx0XFx0Kz0gb2ZfbWRpby5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZS03LVxcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6ODpvYmotJChDT05GSUdfTURJT19BSVJPSEEpXFx0XFx0Kz0gbWRpby1haXJvaGEub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6OTpvYmotJChDT05GSUdfTURJT19BU1BFRUQpXFx0XFx0Kz0gbWRpby1hc3BlZWQub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX01ESU9fQkNNX0lQUk9DKVxcdFxcdCs9IG1kaW8tYmNtLWlwcm9jLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19NRElPX0JDTV9VTklNQUMpXFx0XFx0Kz0gbWRpby1iY20tdW5pbWFjLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19NRElPX0JJVEJBTkcpXFx0XFx0Kz0gbWRpby1iaXRiYW5nLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19NRElPX0NBVklVTSlcXHRcXHQrPSBtZGlvLWNhdml1bS5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfTURJT19HUElPKVxcdFxcdFxcdCs9IG1kaW8tZ3Bpby5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToxNTpvYmotJChDT05GSUdfTURJT19ISVNJX0ZFTUFDKVxcdFxcdCs9IG1kaW8taGlzaS1mZW1hYy5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfTURJT19JMkMpXFx0XFx0XFx0Kz0gbWRpby1pMmMub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX01ESU9fSVBRNDAxOSlcXHRcXHQrPSBtZGlvLWlwcTQwMTkub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX01ESU9fSVBRODA2NClcXHRcXHQrPSBtZGlvLWlwcTgwNjQub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MTk6b2JqLSQoQ09ORklHX01ESU9fTU9YQVJUKVxcdFxcdCs9IG1kaW8tbW94YXJ0Lm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19NRElPX01TQ0NfTUlJTSlcXHRcXHQrPSBtZGlvLW1zY2MtbWlpbS5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfTURJT19NVlVTQilcXHRcXHQrPSBtZGlvLW12dXNiLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjIyOm9iai0kKENPTkZJR19NRElPX09DVEVPTilcXHRcXHQrPSBtZGlvLW9jdGVvbi5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToyMzpvYmotJChDT05GSUdfTURJT19QSUM2NEhQU0MpXFx0XFx0Kz0gbWRpby1waWM2NGhwc2Mub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX01ESU9fUkVBTFRFS19SVEw5MzAwKVxcdCs9IG1kaW8tcmVhbHRlay1ydGw5MzAwLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19NRElPX1JFR01BUClcXHRcXHQrPSBtZGlvLXJlZ21hcC5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfTURJT19TVU40SSlcXHRcXHQrPSBtZGlvLXN1bjRpLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19NRElPX1RIVU5ERVIpXFx0XFx0Kz0gbWRpby10aHVuZGVyLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19NRElPX1hHRU5FKVxcdFxcdCs9IG1kaW8teGdlbmUub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGUtMjktXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZTozMDpvYmotJChDT05GSUdfTURJT19CVVNfTVVYKVxcdFxcdCs9IG1kaW8tbXV4Lm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjMxOm9iai0kKENPTkZJR19NRElPX0JVU19NVVhfQkNNNjM2OClcXHQrPSBtZGlvLW11eC1iY202MzY4Lm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjMyOm9iai0kKENPTkZJR19NRElPX0JVU19NVVhfQkNNX0lQUk9DKVxcdCs9IG1kaW8tbXV4LWJjbS1pcHJvYy5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZTozMzpvYmotJChDT05GSUdfTURJT19CVVNfTVVYX0dQSU8pXFx0XFx0Kz0gbWRpby1tdXgtZ3Bpby5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfTURJT19CVVNfTVVYX01FU09OX0cxMkEpXFx0Kz0gbWRpby1tdXgtbWVzb24tZzEyYS5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZTozNTpvYmotJChDT05GSUdfTURJT19CVVNfTVVYX01FU09OX0dYTClcXHQrPSBtZGlvLW11eC1tZXNvbi1neGwub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MzY6b2JqLSQoQ09ORklHX01ESU9fQlVTX01VWF9NTUlPUkVHKSBcXHQrPSBtZGlvLW11eC1tbWlvcmVnLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjM3Om9iai0kKENPTkZJR19NRElPX0JVU19NVVhfTVVMVElQTEVYRVIpIFxcdCs9IG1kaW8tbXV4LW11bHRpcGxleGVyLm9cXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvYWNwaS5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmM6MTA6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FjcGlfbWRpby5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtMTEtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdHMuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9tZGlvL2FjcGlfbWRpby5jLTEyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYzoxMzojaW5jbHVkZSBcXHUwMDNjbGludXgvZndub2RlX21kaW8uaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9tZGlvL2FjcGlfbWRpby5jLTE0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmM9MTk9TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJBQ1BJIE1ESU8gYnVzIChFdGhlcm5ldCBQSFkpIGFjY2Vzc29yc1xcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYy0yMS0vKipcXG5kcml2ZXJzL25ldC9tZGlvL2FjcGlfbWRpby5jOjIyOiAqIF9fYWNwaV9tZGlvYnVzX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgbWlpX2J1cyBhbmQgY3JlYXRlIFBIWXMgZnJvbSB0aGUgQUNQSSBBU0wuXFxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYzoyMzogKiBAbWRpbzogcG9pbnRlciB0byBtaWlfYnVzIHN0cnVjdHVyZVxcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtMjQtICogQGZ3bm9kZTogcG9pbnRlciB0byBmd25vZGUgb2YgTURJTyBidXMuIFRoaXMgZndub2RlIGlzIGV4cGVjdGVkIHRvIHJlcHJlc2VudFxcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmM6MjU6ICogQG93bmVyOiBtb2R1bGUgb3duaW5nIHRoaXMgQG1kaW8gb2JqZWN0LlxcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtMjYtICogYW4gQUNQSSBkZXZpY2Ugb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIE1ESU8gYnVzIGFuZCBpdHMgY2hpbGRyZW4gYXJlXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2FjcGlfbWRpby5jLTMxLSAqL1xcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmM6MzI6aW50IF9fYWNwaV9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLFxcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtMzMtXFx0XFx0XFx0ICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYy0zOS1cXHQvKiBNYXNrIG91dCBhbGwgUEhZcyBmcm9tIGF1dG8gcHJvYmluZy4gKi9cXG5kcml2ZXJzL25ldC9tZGlvL2FjcGlfbWRpby5jOjQwOlxcdG1kaW8tXFx1MDAzZXBoeV9tYXNrID0gR0VOTUFTSygzMSwgMCk7XFxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYzo0MTpcXHRyZXQgPSBfX21kaW9idXNfcmVnaXN0ZXIobWRpbywgb3duZXIpO1xcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtNDItXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtNDQtXFxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYzo0NTpcXHRBQ1BJX0NPTVBBTklPTl9TRVQoXFx1MDAyNm1kaW8tXFx1MDAzZWRldiwgdG9fYWNwaV9kZXZpY2Vfbm9kZShmd25vZGUpKTtcXG5kcml2ZXJzL25ldC9tZGlvL2FjcGlfbWRpby5jLTQ2LVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYy01Mi1cXG5kcml2ZXJzL25ldC9tZGlvL2FjcGlfbWRpby5jOjUzOlxcdFxcdHJldCA9IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShtZGlvLCBjaGlsZCwgYWRkcik7XFxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYy01NC1cXHRcXHRpZiAocmV0ID09IC1FTk9ERVYpXFxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYzo1NTpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZtZGlvLVxcdTAwM2VkZXYsXFxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYy01Ni1cXHRcXHRcXHRcXHRcXFwiTURJTyBkZXZpY2UgYXQgYWRkcmVzcyAlZCBpcyBtaXNzaW5nLlxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtNjAtfVxcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmM6NjE6RVhQT1JUX1NZTUJPTChfX2FjcGlfbWRpb2J1c19yZWdpc3Rlcik7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6MTE6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Z3bm9kZV9tZGlvLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTEyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jPTQyPWZ3bm9kZV9maW5kX21paV90aW1lc3RhbXBlcihzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTY5LVxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzo3MDppbnQgZndub2RlX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtNzEtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtODAtXFx0aWYgKHJjID09IC1FUFJPQkVfREVGRVIpXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjgxOlxcdFxcdHJjID0gZHJpdmVyX2RlZmVycmVkX3Byb2JlX2NoZWNrX3N0YXRlKFxcdTAwMjZwaHktXFx1MDAzZW1kaW8uZGV2KTtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtODItXFx0aWYgKHJjID09IC1FUFJPQkVfREVGRVIpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtODYtXFx0XFx0cGh5LVxcdTAwM2VpcnEgPSByYztcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6ODc6XFx0XFx0bWRpby1cXHUwMDNlaXJxW2FkZHJdID0gcmM7XFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTg4LVxcdH0gZWxzZSB7XFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjg5OlxcdFxcdHBoeS1cXHUwMDNlaXJxID0gbWRpby1cXHUwMDNlaXJxW2FkZHJdO1xcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy05MC1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtOTItXFx0aWYgKGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woY2hpbGQsIFxcXCJicm9rZW4tdHVybi1hcm91bmRcXFwiKSlcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6OTM6XFx0XFx0bWRpby1cXHUwMDNlcGh5X2lnbm9yZV90YV9tYXNrIHw9IDEgXFx1MDAzY1xcdTAwM2MgYWRkcjtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtOTQtXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtOTgtXFx0Zndub2RlX2hhbmRsZV9nZXQoY2hpbGQpO1xcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzo5OTpcXHRkZXZpY2Vfc2V0X25vZGUoXFx1MDAyNnBoeS1cXHUwMDNlbWRpby5kZXYsIGNoaWxkKTtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTAwLVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTEwNS1cXHRpZiAocmMpIHtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6MTA2OlxcdFxcdGRldmljZV9zZXRfbm9kZShcXHUwMDI2cGh5LVxcdTAwM2VtZGlvLmRldiwgTlVMTCk7XFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTEwNy1cXHRcXHRmd25vZGVfaGFuZGxlX3B1dChjaGlsZCk7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTEwLVxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzoxMTE6XFx0ZGV2X2RiZyhcXHUwMDI2bWRpby1cXHUwMDNlZGV2LCBcXFwicmVnaXN0ZXJlZCBwaHkgZndub2RlICVwZncgYXQgYWRkcmVzcyAlaVxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTEyLVxcdFxcdGNoaWxkLCBhZGRyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMTQtfVxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzoxMTU6RVhQT1JUX1NZTUJPTChmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTE2LVxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzoxMTc6aW50IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLFxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMTgtXFx0XFx0XFx0XFx0c3RydWN0IGZ3bm9kZV9oYW5kbGUgKmNoaWxkLCB1MzIgYWRkcilcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xNDYtXFx0XFx0ICovXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjE0NzpcXHRcXHRwaHktXFx1MDAzZW1kaW8uZGV2LmZ3bm9kZSA9IGZ3bm9kZV9oYW5kbGVfZ2V0KGNoaWxkKTtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTQ4LVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTE1MS1cXHRcXHRpZiAocmMpIHtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6MTUyOlxcdFxcdFxcdHBoeS1cXHUwMDNlbWRpby5kZXYuZndub2RlID0gTlVMTDtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTUzLVxcdFxcdFxcdGZ3bm9kZV9oYW5kbGVfcHV0KGNoaWxkKTtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xNTYtXFx0fSBlbHNlIGlmIChpc19vZl9ub2RlKGNoaWxkKSkge1xcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzoxNTc6XFx0XFx0cmMgPSBmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKGJ1cywgcGh5LCBjaGlsZCwgYWRkcik7XFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTE1OC1cXHRcXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTg4LX1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6MTg5OkVYUE9SVF9TWU1CT0woZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KTtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjEyOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9tZGlvLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTEzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9hZGRyZXNzLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMzktXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjQwOnN0cnVjdCBhaXJvaGFfbWRpb19kYXRhIHtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtNDEtXFx0dTMyIGJhc2VfYWRkcjtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy00Ni1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6NDc6c3RhdGljIGludCBhaXJvaGFfbWRpb193YWl0X2J1c3koc3RydWN0IGFpcm9oYV9tZGlvX2RhdGEgKnByaXYpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTQ4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy01Ni1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6NTc6c3RhdGljIHZvaWQgYWlyb2hhX21kaW9fcmVzZXQoc3RydWN0IGFpcm9oYV9tZGlvX2RhdGEgKnByaXYpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTU4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy03My1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6NzQ6c3RhdGljIGludCBhaXJvaGFfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtKVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy03NS17XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjc2OlxcdHN0cnVjdCBhaXJvaGFfbWRpb19kYXRhICpwcml2ID0gYnVzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy03Ny1cXHR1MzIgdmFsO1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTc5LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzo4MDpcXHRhaXJvaGFfbWRpb19yZXNldChwcml2KTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtODEtXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtOTAtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjkxOlxcdHJldCA9IGFpcm9oYV9tZGlvX3dhaXRfYnVzeShwcml2KTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtOTItXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xMDEtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjEwMjpzdGF0aWMgaW50IGFpcm9oYV9tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtLFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xMDMtXFx0XFx0XFx0ICAgICB1MTYgdmFsdWUpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTEwNC17XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjEwNTpcXHRzdHJ1Y3QgYWlyb2hhX21kaW9fZGF0YSAqcHJpdiA9IGJ1cy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTA2LVxcdHUzMiB2YWw7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTE4LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoxMTk6XFx0cmV0ID0gYWlyb2hhX21kaW9fd2FpdF9idXN5KHByaXYpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xMjAtXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTIzLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoxMjQ6c3RhdGljIGludCBhaXJvaGFfbWRpb19jbDQ1X3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXZudW0sXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTEyNS1cXHRcXHRcXHRcXHQgaW50IHJlZ251bSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTI2LXtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MTI3OlxcdHN0cnVjdCBhaXJvaGFfbWRpb19kYXRhICpwcml2ID0gYnVzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xMjgtXFx0dTMyIHZhbDtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xMzAtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjEzMTpcXHRhaXJvaGFfbWRpb19yZXNldChwcml2KTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTMyLVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTE0Mi1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MTQzOlxcdHJldCA9IGFpcm9oYV9tZGlvX3dhaXRfYnVzeShwcml2KTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTQ0LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTU1LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoxNTY6XFx0cmV0ID0gYWlyb2hhX21kaW9fd2FpdF9idXN5KHByaXYpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xNTctXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xNjYtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjE2NzpzdGF0aWMgaW50IGFpcm9oYV9tZGlvX2NsNDVfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXZudW0sXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTE2OC1cXHRcXHRcXHRcXHQgIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTY5LXtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MTcwOlxcdHN0cnVjdCBhaXJvaGFfbWRpb19kYXRhICpwcml2ID0gYnVzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xNzEtXFx0dTMyIHZhbDtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xODMtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjE4NDpcXHRyZXQgPSBhaXJvaGFfbWRpb193YWl0X2J1c3kocHJpdik7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTE4NS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTE5Ny1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MTk4OlxcdHJldCA9IGFpcm9oYV9tZGlvX3dhaXRfYnVzeShwcml2KTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTk5LVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTIwMi1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MjAzOnN0YXRpYyBpbnQgYWlyb2hhX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMjA0LXtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMjA1LVxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjIwNjpcXHRzdHJ1Y3QgYWlyb2hhX21kaW9fZGF0YSAqcHJpdjtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMjA3LVxcdHN0cnVjdCBtaWlfYnVzICpidXM7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMjE0LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoyMTU6XFx0YnVzID0gZGV2bV9tZGlvYnVzX2FsbG9jX3NpemUoZGV2LCBzaXplb2YoKnByaXYpKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMjE2LVxcdGlmICghYnVzKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTIzNC1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MjM1OlxcdGJ1cy1cXHUwMDNlbmFtZSA9IFxcXCJhaXJvaGFfbWRpb19idXNcXFwiO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0yMzYtXFx0c25wcmludGYoYnVzLVxcdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcXFwiJXMtbWlpXFxcIiwgZGV2X25hbWUoZGV2KSk7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTIzNy1cXHRidXMtXFx1MDAzZXBhcmVudCA9IGRldjtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MjM4OlxcdGJ1cy1cXHUwMDNlcmVhZCA9IGFpcm9oYV9tZGlvX3JlYWQ7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjIzOTpcXHRidXMtXFx1MDAzZXdyaXRlID0gYWlyb2hhX21kaW9fd3JpdGU7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjI0MDpcXHRidXMtXFx1MDAzZXJlYWRfYzQ1ID0gYWlyb2hhX21kaW9fY2w0NV9yZWFkO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoyNDE6XFx0YnVzLVxcdTAwM2V3cml0ZV9jNDUgPSBhaXJvaGFfbWRpb19jbDQ1X3dyaXRlO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0yNDItXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMjUwLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoyNTE6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBkZXYtXFx1MDAzZW9mX25vZGUpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0yNTItXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTI1OS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MjYwOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFpcm9oYV9tZGlvX2R0X2lkc1tdID0ge1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoyNjE6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJhaXJvaGEsYW43NTgzLW1kaW9cXFwiIH0sXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTI2Mi1cXHR7IH1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMjYzLX07XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjI2NDpNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhaXJvaGFfbWRpb19kdF9pZHMpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0yNjUtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjI2NjpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhaXJvaGFfbWRpb19kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjI2NzpcXHQucHJvYmUgPSBhaXJvaGFfbWRpb19wcm9iZSxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMjY4LVxcdC5kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjI2OTpcXHRcXHQubmFtZSA9IFxcXCJhaXJvaGEtbWRpb1xcXCIsXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjI3MDpcXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSBhaXJvaGFfbWRpb19kdF9pZHMsXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTI3MS1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTI3My1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6Mjc0Om1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYWlyb2hhX21kaW9fZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMjc1LVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTctI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvcG9sbC5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzo4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xMC0jaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MTE6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX21kaW8uaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTItI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTE0LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxNTojZGVmaW5lIERSVl9OQU1FIFxcXCJtZGlvLWFzcGVlZFxcXCJcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTYtXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtNDItXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjQzOnN0cnVjdCBhc3BlZWRfbWRpbyB7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTQ0LVxcdHZvaWQgX19pb21lbSAqYmFzZTtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy00Ny1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6NDg6c3RhdGljIGludCBhc3BlZWRfbWRpb19vcChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1OCBzdCwgdTggb3AsIHU4IHBoeWFkLCB1OCByZWdhZCxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtNDktXFx0XFx0XFx0ICB1MTYgZGF0YSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtNTAte1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzo1MTpcXHRzdHJ1Y3QgYXNwZWVkX21kaW8gKmN0eCA9IGJ1cy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtNTItXFx0dTMyIGN0cmw7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtNzgtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjc5OnN0YXRpYyBpbnQgYXNwZWVkX21kaW9fZ2V0X2RhdGEoc3RydWN0IG1paV9idXMgKmJ1cylcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtODAte1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzo4MTpcXHRzdHJ1Y3QgYXNwZWVkX21kaW8gKmN0eCA9IGJ1cy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtODItXFx0dTMyIGRhdGE7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtOTQtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjk1OnN0YXRpYyBpbnQgYXNwZWVkX21kaW9fcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWdudW0pXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTk2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy05OC1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6OTk6XFx0cmMgPSBhc3BlZWRfbWRpb19vcChidXMsIEFTUEVFRF9NRElPX0NUUkxfU1RfQzIyLCBNRElPX0MyMl9PUF9SRUFELFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xMDAtXFx0XFx0XFx0ICAgIGFkZHIsIHJlZ251bSwgMCk7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTAzLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxMDQ6XFx0cmV0dXJuIGFzcGVlZF9tZGlvX2dldF9kYXRhKGJ1cyk7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTEwNS19XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTEwNi1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MTA3OnN0YXRpYyBpbnQgYXNwZWVkX21kaW9fd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtLFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xMDgtXFx0XFx0XFx0XFx0IHUxNiB2YWwpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTEwOS17XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjExMDpcXHRyZXR1cm4gYXNwZWVkX21kaW9fb3AoYnVzLCBBU1BFRURfTURJT19DVFJMX1NUX0MyMiwgTURJT19DMjJfT1BfV1JJVEUsXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTExMS1cXHRcXHRcXHQgICAgICBhZGRyLCByZWdudW0sIHZhbCk7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTEzLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxMTQ6c3RhdGljIGludCBhc3BlZWRfbWRpb19yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IGRldmFkLFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xMTUtXFx0XFx0XFx0XFx0aW50IHJlZ251bSlcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xMTgtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjExOTpcXHRyYyA9IGFzcGVlZF9tZGlvX29wKGJ1cywgQVNQRUVEX01ESU9fQ1RSTF9TVF9DNDUsIE1ESU9fQzQ1X09QX0FERFIsXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTEyMC1cXHRcXHRcXHQgICAgYWRkciwgZGV2YWQsIHJlZ251bSk7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTIzLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxMjQ6XFx0cmMgPSBhc3BlZWRfbWRpb19vcChidXMsIEFTUEVFRF9NRElPX0NUUkxfU1RfQzQ1LCBNRElPX0M0NV9PUF9SRUFELFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xMjUtXFx0XFx0XFx0ICAgIGFkZHIsIGRldmFkLCAwKTtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xMjgtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjEyOTpcXHRyZXR1cm4gYXNwZWVkX21kaW9fZ2V0X2RhdGEoYnVzKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTMwLX1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTMxLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxMzI6c3RhdGljIGludCBhc3BlZWRfbWRpb193cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXZhZCxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTMzLVxcdFxcdFxcdFxcdCBpbnQgcmVnbnVtLCB1MTYgdmFsKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTEzNi1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MTM3OlxcdHJjID0gYXNwZWVkX21kaW9fb3AoYnVzLCBBU1BFRURfTURJT19DVFJMX1NUX0M0NSwgTURJT19DNDVfT1BfQUREUixcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTM4LVxcdFxcdFxcdCAgICBhZGRyLCBkZXZhZCwgcmVnbnVtKTtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xNDEtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjE0MjpcXHRyZXR1cm4gYXNwZWVkX21kaW9fb3AoYnVzLCBBU1BFRURfTURJT19DVFJMX1NUX0M0NSwgTURJT19DNDVfT1BfV1JJVEUsXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTE0My1cXHRcXHRcXHQgICAgICBhZGRyLCBkZXZhZCwgdmFsKTtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xNDUtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjE0NjpzdGF0aWMgaW50IGFzcGVlZF9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTE0Ny17XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjE0ODpcXHRzdHJ1Y3QgYXNwZWVkX21kaW8gKmN0eDtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTQ5LVxcdHN0cnVjdCBtaWlfYnVzICpidXM7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTUxLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxNTI6XFx0YnVzID0gZGV2bV9tZGlvYnVzX2FsbG9jX3NpemUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgc2l6ZW9mKCpjdHgpKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTUzLVxcdGlmICghYnVzKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTE2OS1cXHRidXMtXFx1MDAzZXBhcmVudCA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjE3MDpcXHRidXMtXFx1MDAzZXJlYWQgPSBhc3BlZWRfbWRpb19yZWFkX2MyMjtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MTcxOlxcdGJ1cy1cXHUwMDNld3JpdGUgPSBhc3BlZWRfbWRpb193cml0ZV9jMjI7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjE3MjpcXHRidXMtXFx1MDAzZXJlYWRfYzQ1ID0gYXNwZWVkX21kaW9fcmVhZF9jNDU7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjE3MzpcXHRidXMtXFx1MDAzZXdyaXRlX2M0NSA9IGFzcGVlZF9tZGlvX3dyaXRlX2M0NTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTc0LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxNzU6XFx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgcGRldi1cXHUwMDNlZGV2Lm9mX25vZGUpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xNzYtXFx0aWYgKHJjKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTg2LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxODc6c3RhdGljIHZvaWQgYXNwZWVkX21kaW9fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTE4OC17XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTE4OS1cXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gKHN0cnVjdCBtaWlfYnVzICopcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjE5MDpcXHRzdHJ1Y3QgYXNwZWVkX21kaW8gKmN0eCA9IGJ1cy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTkxLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xOTItXFx0cmVzZXRfY29udHJvbF9hc3NlcnQoY3R4LVxcdTAwM2VyZXNldCk7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjE5MzpcXHRtZGlvYnVzX3VucmVnaXN0ZXIoYnVzKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTk0LX1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTk1LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxOTY6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXNwZWVkX21kaW9fb2ZfbWF0Y2hbXSA9IHtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MTk3OlxcdHsgLmNvbXBhdGlibGUgPSBcXFwiYXNwZWVkLGFzdDI2MDAtbWRpb1xcXCIsIH0sXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTE5OC1cXHR7IH0sXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTE5OS19O1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoyMDA6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYXNwZWVkX21kaW9fb2ZfbWF0Y2gpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0yMDEtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjIwMjpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhc3BlZWRfbWRpb19kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTIwMy1cXHQuZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0yMDQtXFx0XFx0Lm5hbWUgPSBEUlZfTkFNRSxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MjA1OlxcdFxcdC5vZl9tYXRjaF90YWJsZSA9IGFzcGVlZF9tZGlvX29mX21hdGNoLFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0yMDYtXFx0fSxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MjA3OlxcdC5wcm9iZSA9IGFzcGVlZF9tZGlvX3Byb2JlLFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoyMDg6XFx0LnJlbW92ZSA9IGFzcGVlZF9tZGlvX3JlbW92ZSxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMjA5LX07XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTIxMC1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MjExOm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYXNwZWVkX21kaW9fZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMjEyLVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTExLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9wbGF0Zm9ybS5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoxMjojaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfbWRpby5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMzUtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjM2OnN0cnVjdCBpcHJvY19tZGlvX3ByaXYge1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0zNy1cXHRzdHJ1Y3QgbWlpX2J1cyAqbWlpX2J1cztcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy00MC1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6NDE6c3RhdGljIGlubGluZSBpbnQgaXByb2NfbWRpb193YWl0X2Zvcl9pZGxlKHZvaWQgX19pb21lbSAqYmFzZSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtNDIte1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTU2LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzo1NzpzdGF0aWMgaW5saW5lIHZvaWQgaXByb2NfbWRpb19jb25maWdfY2xrKHZvaWQgX19pb21lbSAqYmFzZSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtNTgte1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTY1LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzo2NjpzdGF0aWMgaW50IGlwcm9jX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnKVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy02Ny17XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjY4OlxcdHN0cnVjdCBpcHJvY19tZGlvX3ByaXYgKnByaXYgPSBidXMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTY5LVxcdHUzMiBjbWQ7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtNzEtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjcyOlxcdHJjID0gaXByb2NfbWRpb193YWl0X2Zvcl9pZGxlKHByaXYtXFx1MDAzZWJhc2UpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy03My1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtODQtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjg1OlxcdHJjID0gaXByb2NfbWRpb193YWl0X2Zvcl9pZGxlKHByaXYtXFx1MDAzZWJhc2UpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy04Ni1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtOTMtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjk0OnN0YXRpYyBpbnQgaXByb2NfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy05NS1cXHRcXHRcXHQgICAgaW50IHJlZywgdTE2IHZhbClcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtOTYte1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzo5NzpcXHRzdHJ1Y3QgaXByb2NfbWRpb19wcml2ICpwcml2ID0gYnVzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy05OC1cXHR1MzIgY21kO1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTEwMC1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTAxOlxcdHJjID0gaXByb2NfbWRpb193YWl0X2Zvcl9pZGxlKHByaXYtXFx1MDAzZWJhc2UpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xMDItXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTExNC1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTE1OlxcdHJjID0gaXByb2NfbWRpb193YWl0X2Zvcl9pZGxlKHByaXYtXFx1MDAzZWJhc2UpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xMTYtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTEyMS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTIyOnN0YXRpYyBpbnQgaXByb2NfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xMjMte1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoxMjQ6XFx0c3RydWN0IGlwcm9jX21kaW9fcHJpdiAqcHJpdjtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTI1LVxcdHN0cnVjdCBtaWlfYnVzICpidXM7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTM3LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoxMzg6XFx0cHJpdi1cXHUwMDNlbWlpX2J1cyA9IG1kaW9idXNfYWxsb2MoKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTM5LVxcdGlmICghcHJpdi1cXHUwMDNlbWlpX2J1cykge1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE0OC1cXHRidXMtXFx1MDAzZXBhcmVudCA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE0OTpcXHRidXMtXFx1MDAzZXJlYWQgPSBpcHJvY19tZGlvX3JlYWQ7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE1MDpcXHRidXMtXFx1MDAzZXdyaXRlID0gaXByb2NfbWRpb193cml0ZTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTUxLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoxNTI6XFx0aXByb2NfbWRpb19jb25maWdfY2xrKHByaXYtXFx1MDAzZWJhc2UpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xNTMtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE1NDpcXHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBwZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSk7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE1NS1cXHRpZiAocmMpIHtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTU2LVxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIk1ESU8gYnVzIHJlZ2lzdHJhdGlvbiBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoxNTc6XFx0XFx0Z290byBlcnJfaXByb2NfbWRpbztcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTU4LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xNjUtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE2NjplcnJfaXByb2NfbWRpbzpcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTY3OlxcdG1kaW9idXNfZnJlZShidXMpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xNjgtXFx0cmV0dXJuIHJjO1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE3MC1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTcxOnN0YXRpYyB2b2lkIGlwcm9jX21kaW9fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE3Mi17XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE3MzpcXHRzdHJ1Y3QgaXByb2NfbWRpb19wcml2ICpwcml2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE3NC1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTc1OlxcdG1kaW9idXNfdW5yZWdpc3Rlcihwcml2LVxcdTAwM2VtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTc2OlxcdG1kaW9idXNfZnJlZShwcml2LVxcdTAwM2VtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTc3LX1cXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xNzktI2lmZGVmIENPTkZJR19QTV9TTEVFUFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoxODA6c3RhdGljIGludCBpcHJvY19tZGlvX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE4MS17XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE4Mi1cXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE4MzpcXHRzdHJ1Y3QgaXByb2NfbWRpb19wcml2ICpwcml2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE4NC1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTg1LVxcdC8qIHJlc3RvcmUgdGhlIG1paSBjbG9jayBjb25maWd1cmF0aW9uICovXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE4NjpcXHRpcHJvY19tZGlvX2NvbmZpZ19jbGsocHJpdi1cXHUwMDNlYmFzZSk7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE4Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xOTAtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE5MTpzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgaXByb2NfbWRpb19wbV9vcHMgPSB7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE5MjpcXHQucmVzdW1lID0gaXByb2NfbWRpb19yZXN1bWVcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTkzLX07XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTk1LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoxOTY6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgaXByb2NfbWRpb19vZl9tYXRjaFtdID0ge1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoxOTc6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJicmNtLGlwcm9jLW1kaW9cXFwiLCB9LFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xOTgtXFx0eyAvKiBzZW50aW5lbCAqLyB9LFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xOTktfTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MjAwOk1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGlwcm9jX21kaW9fb2ZfbWF0Y2gpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0yMDEtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjIwMjpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpcHJvY19tZGlvX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMjAzLVxcdC5kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjIwNDpcXHRcXHQubmFtZSA9IFxcXCJpcHJvYy1tZGlvXFxcIixcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MjA1OlxcdFxcdC5vZl9tYXRjaF90YWJsZSA9IGlwcm9jX21kaW9fb2ZfbWF0Y2gsXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTIwNi0jaWZkZWYgQ09ORklHX1BNX1NMRUVQXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjIwNzpcXHRcXHQucG0gPSBcXHUwMDI2aXByb2NfbWRpb19wbV9vcHMsXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTIwOC0jZW5kaWZcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMjA5LVxcdH0sXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjIxMDpcXHQucHJvYmUgPSBpcHJvY19tZGlvX3Byb2JlLFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoyMTE6XFx0LnJlbW92ZSA9IGlwcm9jX21kaW9fcmVtb3ZlLFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0yMTItfTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMjEzLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoyMTQ6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihpcHJvY19tZGlvX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTIxNS1cXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYz0yMTg9TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTCB2MlxcXCIpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoyMTk6TU9EVUxFX0FMSUFTKFxcXCJwbGF0Zm9ybTppcHJvYy1tZGlvXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jLTEzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmM6MTQ6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX21kaW8uaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jLTE1LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9wbGF0Zm9ybS5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmMtMTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzo1NDoxMy41OTg0ODM4NTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NjExMTg5MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEludmVzdGlnYXRpb24gaW50byBNb3RvcmNvbW0gUEhZIEVtdWxhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBpdCdzIHBvc3NpYmxlIHRvIGluc3RhbnRpYXRlIGEgTW90b3Jjb21tIFBIWSB3aXRoaW4gYW4gZW52aXJvbm1lbnQgbGlrZSBRRU1VLCBHb29nbGUgQ29tcHV0ZSBFbmdpbmUsIG9yIGV2ZW4gc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyLiBUaGUgZmlyc3Qgc3RlcCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBQSFkgZGV2aWNlcyBhcmUgZXZlbiByZWdpc3RlcmVkIGluIHRoZSBMaW51eCBrZXJuZWwuIFJpZ2h0LCB0aGV5J3JlIHRpZWQgdG8gdGhlIE1ESU8gYnVzLCB1c3VhbGx5LiBXaGVuIHRoZSBNRElPIGJ1cyBzY2FucywgaXQgbG9va3MgYXQgcmVnaXN0ZXJzIE1JSV9QSFlTSUQxIGFuZCBNSUlfUEhZU0lEMiwgc3BlY2lmaWNhbGx5LiBJZiB0aG9zZSByZWdpc3RlcnMgbWF0Y2ggYSBrbm93biBNb3RvcmNvbW0gUEhZIElELCBsaWtlIGBQSFlfSURfWVQ4NTMxU2Agb3IgWVQ4NTExLCB0aGVuIHRoZSBNb3RvcmNvbW0gZHJpdmVyIHNob3VsZCBiaW5kIHRvIGl0LiBPciwgb2YgY291cnNlLCB0aHJvdWdoIHRoZSBkZXZpY2UgdHJlZSwgQUNQSSwgZndub2RlLCBvciB0aGUgZXRoZXJuZXQgZHJpdmVyIGNvbm5lY3RpbmcgdG8gdGhlIFBIWS5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogRG9lcyBRRU1VLCBpbiBpdHMgZW11bGF0ZWQgaGFyZHdhcmUgb2ZmZXJpbmdzLCAqYWxyZWFkeSogaW5jbHVkZSBzb21ldGhpbmcgdGhhdCBleHBvc2VzIGEgTW90b3Jjb21tIFBIWT8gQmFzZWQgb24gbXkga25vd2xlZGdlLCB0aGUgc3RhbmRhcmQgUUVNVSBuZXR3b3JrIGRldmljZXPigJRlMTAwMCwgZTEwMDBlLCBydGw4MTM5LCB2aXJ0aW8tbmV0LCBwY25ldCwgbmUyaywgaWdiLCBldGMu4oCUZWl0aGVyIGRvbid0IHV0aWxpemUgdGhlIExpbnV4IHBoeWxpYiBmcmFtZXdvcmsgd2l0aCBleHRlcm5hbCBQSFkgZHJpdmVycywgdXNlIHRoZWlyIG93biBpbnRlcm5hbCBvciBzdGFuZGFyZCBQSFlzLCBvciBlbXVsYXRlIEludGVsIG9yIFJlYWx0ZWsgUEhZcywgd2hpY2gsIG9mIGNvdXJzZSwgaXNuJ3Qgd2hhdCBJJ20gbG9va2luZyBmb3IuIFRoZXkncmUgbm90IGdvaW5nIHRvIGJlIG1pbWlja2luZyBNb3RvcmNvbW0ncyBoYXJkd2FyZS5cblxuTm93LCBsZXQgbWUgcGl2b3QuIFBlcmhhcHMgaXQncyB3b3J0aCB0YWtpbmcgYSBsb29rIGF0IFVTQiBldGhlcm5ldCBkb25nbGVzLCBvciBldmVuIFVTQiBNRElPIGFkYXB0ZXJzIHRoZW1zZWx2ZXMuIE1heWJlIHNvbWV0aGluZyBsaWtlIHRoZSBgbWRpby1tdnVzYmAgb3IgYGF4ODgxNzlfMTc4YWAgZHJpdmVycywgb3IgZXZlbiB0aGUgdXNibmV0IC8gY2RjX2V0aGVyIG9wdGlvbnMuIFRoZSBrZXkgaXMgaWYgYW55IG9mIHRoZXNlIGxldmVyYWdlIHRoZSBwaHlsaWIgZnJhbWV3b3JrIGFuZCBwb3RlbnRpYWxseSBob29rIGludG8gYSBNb3RvcmNvbW0gUEhZLiBJJ2xsIG5lZWQgdG8gaW52ZXN0aWdhdGUgaWYgYSBVU0IgbmV0d29yayBhZGFwdGVyIGNvdWxkIHVzZSBhIGBtb3RvcmNvbW1gIGRyaXZlciBvciB1c2UgYSBnZW5lcmFsIFBIWSB2aWEgdGhlIHBoeWxpYiBsaWJyYXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI1MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzo1NDoxOC4yMDk2NzU5NjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MzAyODQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQSFlfSURfWVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE1LVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxNjojZGVmaW5lIFBIWV9JRF9ZVDg1MTFcXHRcXHQweDAwMDAwMTBhXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjE3OiNkZWZpbmUgUEhZX0lEX1lUODUyMVxcdFxcdDB4MDAwMDAxMWFcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTg6I2RlZmluZSBQSFlfSURfWVQ4NTIyXFx0XFx0MHg0ZjUxZTkyOFxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxOTojZGVmaW5lIFBIWV9JRF9ZVDg1MzFcXHRcXHQweDRmNTFlOTFiXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjIwOiNkZWZpbmUgUEhZX0lEX1lUODUzMVNcXHRcXHQweDRmNTFlOTFhXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjIxOiNkZWZpbmUgUEhZX0lEX1lUODgyMVxcdFxcdDB4NGY1MWVhMTlcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMjItLyogWVQ4NTIxL1lUODUzMVMvWVQ4ODIxIFJlZ2lzdGVyIE92ZXJ2aWV3XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9ODk2PXN0YXRpYyBpbnQgeXRwaHlfcmdtaWlfY2xrX2RlbGF5X2NvbmZpZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTkyNy1cXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzo5Mjg6XFx0XFx0aWYgKHBoeWRldi1cXHUwMDNlZHJ2LVxcdTAwM2VwaHlfaWQgIT0gUEhZX0lEX1lUODUzMVMpXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTkyOS1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9MTA2OT1zdGF0aWMgaW50IHl0ODUyMV9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTExMjgtXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjExMjk6XFx0aWYgKHBoeWRldi1cXHUwMDNlZHJ2LVxcdTAwM2VwaHlfaWQgPT0gUEhZX0lEX1lUODUyMSkge1xcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMTMwLVxcdFxcdHN3aXRjaCAoZnJlcSkge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTExNTUtXFx0XFx0fVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxMTU2OlxcdH0gZWxzZSBpZiAocGh5ZGV2LVxcdTAwM2VkcnYtXFx1MDAzZXBoeV9pZCA9PSBQSFlfSURfWVQ4NTMxUykge1xcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMTU3LVxcdFxcdHN3aXRjaCAoZnJlcSkge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTMxMDc9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0zMTA4LVxcdHtcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MzEwOTpcXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUxMSksXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxMTAtXFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJZVDg1MTEgR2lnYWJpdCBFdGhlcm5ldFxcXCIsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMzExNy1cXHR7XFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjMxMTg6XFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MjEpLFxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0zMTE5LVxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiWVQ4NTIxIEdpZ2FiaXQgRXRoZXJuZXRcXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxMzctXFx0e1xcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzozMTM4OlxcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTIyKSxcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMzEzOS1cXHRcXHQubmFtZVxcdFxcdD0gXFxcIllUODUyMiAxMDAgTWVnYWJpdCBFdGhlcm5ldFxcXCIsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMzE0NS1cXHR7XFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjMxNDY6XFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpLFxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0zMTQ3LVxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiWVQ4NTMxIEdpZ2FiaXQgRXRoZXJuZXRcXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxNTktXFx0e1xcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzozMTYwOlxcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUyksXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxNjEtXFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJZVDg1MzFTIEdpZ2FiaXQgRXRoZXJuZXRcXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxNzYtXFx0e1xcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzozMTc3OlxcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODIxKSxcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMzE3OC1cXHRcXHQubmFtZVxcdFxcdFxcdD0gXFxcIllUODgyMSAyLjVHYnBzIFBIWVxcXCIsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9MzIwMj1zdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MzIwMzpcXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSB9LFxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzozMjA0OlxcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MjEpIH0sXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjMyMDU6XFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUyMikgfSxcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MzIwNjpcXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxKSB9LFxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzozMjA3OlxcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzFTKSB9LFxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzozMjA4OlxcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpIH0sXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMyMDktXFx0eyAvKiBzZW50aW5lbCAqLyB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU0OjE4Ljk3MjcxMTIxMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTQxNjYzODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIFVTQiBFdGhlcm5ldCBEcml2ZXIgUEhZIENvbm5lY3Rpb24qKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiBpZiBhbnkgb2YgdGhlIFVTQiBFdGhlcm5ldCBkcml2ZXJzIGFyZSBsZXZlcmFnaW5nIHRoZSBgcGh5bGliYCBmcmFtZXdvcmsgdG8gaW50ZXJmYWNlIHdpdGggZXh0ZXJuYWwgUEhZcy4gVGhpcyBpcyBhIGNvbW1vbiBhbmQgb2Z0ZW4gcHJlZmVycmVkIGFyY2hpdGVjdHVyZSwgc28gaXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi5cblxuVGhlIG1vc3QgZWZmaWNpZW50IGFwcHJvYWNoIGhlcmUgaXMgYSB0YXJnZXRlZCBjb2RlIHNlYXJjaC4gSSdsbCB1c2UgYGdyZXBgIHRvIHNjYW4gdGhlIGBkcml2ZXJzL25ldC91c2IvYCBkaXJlY3RvcnkuIEknbGwgc2VhcmNoIGZvciBrZXkgaW5kaWNhdG9ycyBvZiBgcGh5bGliYCB1c2FnZS4gU3BlY2lmaWNhbGx5LCBJJ2xsIGxvb2sgZm9yIGNhbGxzIHRvIHRoZSBgcGh5X2Nvbm5lY3RgIGZ1bmN0aW9uIG9yIHJlZmVyZW5jZXMgdG8gYHBoeWxpbmtgLiBUaGVzZSBhcmUgdGhlIGJyZWFkY3J1bWJzIHRoYXTigJlsbCBsaWtlbHkgbGVhZCBtZSB0byB0aGUgcmVsZXZhbnQgZHJpdmVycyB1c2luZyB0aGlzIGFyY2hpdGVjdHVyZSwgb3IgYXQgbGVhc3QgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi4gSXQncyBhIGZvY3VzZWQgc2VhcmNoIHRoYXQgc2hvdWxkIHlpZWxkIHF1aWNrIHJlc3VsdHMsIGVsaW1pbmF0aW5nIHRoZSBuZWVkIHRvIHJlYWQgdGhyb3VnaCB0aGUgZW50aXJlIGNvZGUgYmFzZS4gVGltZSB0byBzZWUgd2hhdCB0aGF0IGBncmVwYCByZXZlYWxzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTI2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6NTQ6MjEuOTE0Mzc4MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0NzE1MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2Nvbm5lY3R8cGh5X2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz03MDM9c3RhdGljIGludCBheDg4NzcyX2luaXRfcGh5KHN0cnVjdCB1c2JuZXQgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy03MjItXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjcyMzpcXHRwaHlfYXR0YWNoZWRfaW5mbyhwcml2LVxcdTAwM2VwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy03MjQtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz0yNjE9c3RhdGljIGludCBheDg4MTcyYV9yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0zMTMtXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MzE0OlxcdHByaXYtXFx1MDAzZXBoeWRldiA9IHBoeV9jb25uZWN0KGRldi1cXHUwMDNlbmV0LCBwcml2LVxcdTAwM2VwaHlfbmFtZSxcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0zMTUtXFx0XFx0XFx0XFx0ICAgXFx1MDAyNmF4ODgxNzJhX2FkanVzdF9saW5rLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTE0Nz1zdGF0aWMgaW50IHNtc2M5NXh4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyODQtXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI4NTpcXHRyZXQgPSBwaHlfY29ubmVjdF9kaXJlY3QoZGV2LVxcdTAwM2VuZXQsIHBkYXRhLVxcdTAwM2VwaHlkZXYsXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI4Ni1cXHRcXHRcXHRcXHQgXFx1MDAyNnNtc2M5NXh4X2hhbmRsZV9saW5rX2NoYW5nZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyOTItXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI5MzpcXHRwaHlfYXR0YWNoZWRfaW5mbyhkZXYtXFx1MDAzZW5ldC1cXHUwMDNlcGh5ZGV2KTtcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjk0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzo1NDoyMS45NTk4NTM3MzlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzQ4MDMxOTc5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNRElPIEJ1cyBFbXVsYXRpb24gYW5kIFVTQiBHYWRnZXRzOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgc3l6a2FsbGVyIGNhbiBlbXVsYXRlIFVTQiBkZXZpY2VzIHdpdGggTURJTyBidXNzZXMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aG9zZSBsaWtlIGBheDg4MTcyYWAsIGBzbXNjOTV4eGAsIGFuZCBgbGFuNzh4eGAuIFRoZXNlIGhhdmUgTURJTyBidXNzZXMsIGJ1dCB0aGV5J3JlIGFjY2Vzc2VkIG92ZXIgVVNCLiBDYW4gc3l6a2FsbGVyJ3MgcmF3LWdhZGdldCAvIHVzYi1mdXp6ZXIgc2V0dXAgaGFuZGxlIHRoYXQ/IFRoZSBhbnN3ZXIgaXMgeWVzLCBzeXprYWxsZXIgZG9lcyBoYXZlIFVTQiBlbXVsYXRpb24gdmlhIHJhdy1nYWRnZXQgYW5kIHRoZSBEdW1teSBIQ0QuIFRoYXQncyBhIGdvb2Qgc3RhcnQuXG5cbk5vdywgd2hlbiBzeXprYWxsZXIgZW11bGF0ZXMgb25lIG9mIHRoZXNlIFVTQiBkZXZpY2VzIOKAkyBzYXksIGFueSBvZiB0aG9zZSBtZW50aW9uZWQg4oCTIHRocm91Z2ggcmF3LWdhZGdldCAvIHVzYi1mdXp6ZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyBkdXJpbmcgdGhlIE1ESU8gYnVzIHByb2JlLiBXaGVuIHRoZSBkZXZpY2UgZ2V0cyBwcm9iZWQsIEkga25vdyB0aGF0IGBtZGlvYnVzX3JlZ2lzdGVyYCBvciBgZ2V0X3BoeV9kZXZpY2VgIGlzIGdvaW5nIHRvIGJlIGNhbGxlZCwgYW5kIGl0J3MgZ29pbmcgdG8gYXR0ZW1wdCB0byByZWFkIHJlZ2lzdGVycyAyIGFuZCAzIOKAkyB0aGUgUEhZIElEIOKAkyBvdmVyIFVTQi4gVGhlIGtleSBoZXJlIGlzICpob3cqIHRob3NlIHJlYWRzIGhhcHBlbi4gSXQncyBub3QgdGhyb3VnaCBzdGFuZGFyZCBVU0IgdHJhbnNmZXJzLCBidXQgdGhyb3VnaCBjb250cm9sIG9yIHZlbmRvciByZXF1ZXN0cyB0byB0aGUgZW11bGF0ZWQgVVNCIGdhZGdldCFcblxuV2FpdCBhIHNlY29uZCwgbGV0J3MgY29uY3JldGl6ZSB0aGlzLiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGVzZSBkcml2ZXJzIG9wZXJhdGUuIFRpbWUgdG8gbG9vayBpbnRvIHRoZSBhY3R1YWwgZHJpdmVyIGNvZGUhIEkgc2hvdWxkIGNoZWNrIGBkcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuY2Agb3IgYGxhbjc4eHguY2AgdG8gc2VlIHByZWNpc2VseSBob3cgdGhlIE1ESU8gcmVhZCBmdW5jdGlvbmFsaXR5IGlzIGltcGxlbWVudGVkLiBHb3R0YSBzZWUgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIGhvdyB0aG9zZSBVU0IgY29udHJvbC92ZW5kb3IgcmVxdWVzdHMgYXJlIGNvbnN0cnVjdGVkIGFuZCBoYW5kbGVkIHRvIGdldCB0aGUgUEhZIElELlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjMwMSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzo1NDoyOS40NDAxNzYxMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTA6XFx0XFx0cmV0ID0gYXNpeF9yZWFkX3BoeV9hZGRyKGRldiwgcHJpdi1cXHUwMDNldXNlX2VtYmRwaHkpO1xcbiAyMTE6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDIxMjpcXHRcXHRcXHRnb3RvIGZyZWU7XFxuIDIxMzpcXHRcXG4gMjE0OlxcdFxcdHByaXYtXFx1MDAzZXBoeV9hZGRyID0gcmV0O1xcbiAyMTU6XFx0XFxuIDIxNjpcXHRcXHRheDg4MTcyYV9yZXNldF9waHkoZGV2LCBwcml2LVxcdTAwM2V1c2VfZW1iZHBoeSk7XFxuIDIxNzpcXHRcXG4gMjE4OlxcdFxcdC8qIEFzaXggZnJhbWluZyBwYWNrcyBtdWx0aXBsZSBldGggZnJhbWVzIGludG8gYSAySyB1c2IgYnVsayB0cmFuc2ZlciAqL1xcbiAyMTk6XFx0XFx0aWYgKGRldi1cXHUwMDNlZHJpdmVyX2luZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgRkxBR19GUkFNSU5HX0FYKSB7XFxuIDIyMDpcXHRcXHRcXHQvKiBoYXJkX210dSAgaXMgc3RpbGwgdGhlIGRlZmF1bHQgLSB0aGUgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnRcXG4gMjIxOlxcdFxcdFxcdCAgIGp1bWJvIGV0aCBmcmFtZXMgKi9cXG4gMjIyOlxcdFxcdFxcdGRldi1cXHUwMDNlcnhfdXJiX3NpemUgPSAyMDQ4O1xcbiAyMjM6XFx0XFx0fVxcbiAyMjQ6XFx0XFxuIDIyNTpcXHRcXHQvKiBpbml0IE1ESU8gYnVzICovXFxuIDIyNjpcXHRcXHRyZXQgPSBheDg4MTcyYV9pbml0X21kaW8oZGV2KTtcXG4gMjI3OlxcdFxcdGlmIChyZXQpXFxuIDIyODpcXHRcXHRcXHRnb3RvIGZyZWU7XFxuIDIyOTpcXHRcXG4gMjMwOlxcdFxcdHJldHVybiAwO1xcbiAyMzE6XFx0XFxuIDIzMjpcXHRmcmVlOlxcbiAyMzM6XFx0XFx0a2ZyZWUocHJpdik7XFxuIDIzNDpcXHRcXHRyZXR1cm4gcmV0O1xcbiAyMzU6XFx0fVxcbiAyMzY6XFx0XFxuIDIzNzpcXHRzdGF0aWMgaW50IGF4ODgxNzJhX3N0b3Aoc3RydWN0IHVzYm5ldCAqZGV2KVxcbiAyMzg6XFx0e1xcbiAyMzk6XFx0XFx0c3RydWN0IGF4ODgxNzJhX3ByaXZhdGUgKnByaXYgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbiAyNDA6XFx0XFxuIDI0MTpcXHRcXHRuZXRkZXZfZGJnKGRldi1cXHUwMDNlbmV0LCBcXFwiU3RvcHBpbmcgaW50ZXJmYWNlXFxcXG5cXFwiKTtcXG4gMjQyOlxcdFxcbiAyNDM6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBoeWRldikge1xcbiAyNDQ6XFx0XFx0XFx0bmV0ZGV2X2luZm8oZGV2LVxcdTAwM2VuZXQsIFxcXCJEaXNjb25uZWN0aW5nIGZyb20gcGh5ICVzXFxcXG5cXFwiLFxcbiAyNDU6XFx0XFx0XFx0XFx0ICAgIHByaXYtXFx1MDAzZXBoeV9uYW1lKTtcXG4gMjQ2OlxcdFxcdFxcdHBoeV9zdG9wKHByaXYtXFx1MDAzZXBoeWRldik7XFxuIDI0NzpcXHRcXHRcXHRwaHlfZGlzY29ubmVjdChwcml2LVxcdTAwM2VwaHlkZXYpO1xcbiAyNDg6XFx0XFx0fVxcbiAyNDk6XFx0XFxuIDI1MDpcXHRcXHRyZXR1cm4gMDtcXG4gMjUxOlxcdH1cXG4gMjUyOlxcdFxcbiAyNTM6XFx0c3RhdGljIHZvaWQgYXg4ODE3MmFfdW5iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuIDI1NDpcXHR7XFxuIDI1NTpcXHRcXHRzdHJ1Y3QgYXg4ODE3MmFfcHJpdmF0ZSAqcHJpdiA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuIDI1NjpcXHRcXG4gMjU3OlxcdFxcdGF4ODgxNzJhX3JlbW92ZV9tZGlvKGRldik7XFxuIDI1ODpcXHRcXHRrZnJlZShwcml2KTtcXG4gMjU5OlxcdH1cXG4gMjYwOlxcdFxcbiAyNjE6XFx0c3RhdGljIGludCBheDg4MTcyYV9yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuIDI2MjpcXHR7XFxuIDI2MzpcXHRcXHRzdHJ1Y3QgYXNpeF9kYXRhICpkYXRhID0gKHN0cnVjdCBhc2l4X2RhdGEgKilcXHUwMDI2ZGV2LVxcdTAwM2VkYXRhO1xcbiAyNjQ6XFx0XFx0c3RydWN0IGF4ODgxNzJhX3ByaXZhdGUgKnByaXYgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbiAyNjU6XFx0XFx0aW50IHJldDtcXG4gMjY2OlxcdFxcdHUxNiByeF9jdGw7XFxuIDI2NzpcXHRcXG4gMjY4OlxcdFxcdGF4ODgxNzJhX3Jlc2V0X3BoeShkZXYsIHByaXYtXFx1MDAzZXVzZV9lbWJkcGh5KTtcXG4gMjY5OlxcdFxcbiAyNzA6XFx0XFx0bXNsZWVwKDE1MCk7XFxuIDI3MTpcXHRcXHRyeF9jdGwgPSBhc2l4X3JlYWRfcnhfY3RsKGRldiwgMCk7XFxuIDI3MjpcXHRcXHRuZXRkZXZfZGJnKGRldi1cXHUwMDNlbmV0LCBcXFwiUlhfQ1RMIGlzIDB4JTA0eCBhZnRlciBzb2Z0d2FyZSByZXNldFxcXFxuXFxcIiwgcnhfY3RsKTtcXG4gMjczOlxcdFxcdHJldCA9IGFzaXhfd3JpdGVfcnhfY3RsKGRldiwgMHgwMDAwLCAwKTtcXG4gMjc0OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAyNzU6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDI3NjpcXHRcXG4gMjc3OlxcdFxcdHJ4X2N0bCA9IGFzaXhfcmVhZF9yeF9jdGwoZGV2LCAwKTtcXG4gMjc4OlxcdFxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCJSWF9DVEwgaXMgMHglMDR4IHNldHRpbmcgdG8gMHgwMDAwXFxcXG5cXFwiLCByeF9jdGwpO1xcbiAyNzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU0OjI5LjQ0MDI1ODg3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMDkzNTM1MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBheDg4MTcyYV9pbml0X21kaW9gIGZ1bmN0aW9uLiBNeSBleHBlcnQgZXllIGltbWVkaWF0ZWx5IHdhbnRzIHRvIHVuZGVyc3RhbmQgaXRzIGNvcmUgcHVycG9zZSB3aXRoaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiBFdGhlcm5ldCBkcml2ZXIgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaXQncyBzcGVjaWZpY2FsbHkgcmVzcG9uc2libGUgZm9yLiBGcm9tIHRoZSBuYW1lLCBJJ20gZ3Vlc3NpbmcgaXQgaGFuZGxlcyB0aGUgTURJTyBpbnRlcmZhY2Ugc2V0dXAgZm9yIHRoZSBBWDg4MTcyQSBjaGlwLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIGEgY29tbW9uIHN0ZXAgaW4gYnJpbmdpbmcgdXAgYSBQSFkuIEkgbmVlZCB0byBzZWUgaWYgaXQgc2V0cyB1cCB0aGUgTURJTyBjbG9jaywgY29uZmlndXJlcyBhbnkgbmVjZXNzYXJ5IHJlZ2lzdGVycyBmb3IgTURJTyBjb21tdW5pY2F0aW9uLCBhbmQgcGVyaGFwcyBwZXJmb3JtcyBhbiBpbml0aWFsIHByb2JlIG9yIHJlc2V0IG9mIHRoZSBQSFkgYXR0YWNoZWQgdG8gdGhlIE1ESU8gYnVzLiBJJ2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSByZWdpc3RlciBhY2Nlc3NlcyBhbmQgYml0IG1hbmlwdWxhdGlvbnMgd2l0aGluIHRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIEVzc2VudGlhbGx5LCBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgdGhlIGZpcnN0IHN0ZXAgaW4gZW5hYmxpbmcgdGhlIGxpbmsgd2l0aCB0aGUgUEhZLiBTbyBJIG5lZWQgdG8ga25vdyBob3cgZG9lcyBpdCBpbml0aWFsaXplIHRoZSBNSUkgaW50ZXJmYWNlPyBXaGF0IHJlZ2lzdGVyIHNldHRpbmdzIGRvZXMgaXQgZW1wbG95PyBEb2VzIGl0IGludGVyYWN0IHdpdGggYSBoaWdoZXItbGV2ZWwgZnJhbWV3b3JrPyBUaGlzIGlzIHdoZXJlIHRoZSB0cnVlIHVuZGVyc3RhbmRpbmcgYmVnaW5zIHRvIGVtZXJnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwNDYsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU0OjMxLjY0OTYxNTAyOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDUsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDU6XFx0XFxuIDE0NjpcXHRcXHRyZXQgPSBhc2l4X3N3X3Jlc2V0KGRldiwgZW1iZF9waHkgPyBBWF9TV1JFU0VUX0lQUkwgOiBBWF9TV1JFU0VUX0lQUEQsXFxuIDE0NzpcXHRcXHRcXHRcXHQgICAgMCk7XFxuIDE0ODpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gMTQ5OlxcdFxcdFxcdGdvdG8gZXJyO1xcbiAxNTA6XFx0XFxuIDE1MTpcXHRcXHRyZXR1cm4gMDtcXG4gMTUyOlxcdFxcbiAxNTM6XFx0ZXJyOlxcbiAxNTQ6XFx0XFx0cmV0dXJuIHJldDtcXG4gMTU1OlxcdH1cXG4gMTU2OlxcdFxcbiAxNTc6XFx0XFxuIDE1ODpcXHRzdGF0aWMgaW50IGF4ODgxNzJhX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4gMTU5OlxcdHtcXG4gMTYwOlxcdFxcdGludCByZXQ7XFxuIDE2MTpcXHRcXHR1OCBidWZbRVRIX0FMRU5dO1xcbiAxNjI6XFx0XFx0c3RydWN0IGF4ODgxNzJhX3ByaXZhdGUgKnByaXY7XFxuIDE2MzpcXHRcXG4gMTY0OlxcdFxcdHJldCA9IHVzYm5ldF9nZXRfZW5kcG9pbnRzKGRldiwgaW50Zik7XFxuIDE2NTpcXHRcXHRpZiAocmV0KVxcbiAxNjY6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTY3OlxcdFxcbiAxNjg6XFx0XFx0cHJpdiA9IGt6YWxsb2Nfb2JqKCpwcml2KTtcXG4gMTY5OlxcdFxcdGlmICghcHJpdilcXG4gMTcwOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAxNzE6XFx0XFxuIDE3MjpcXHRcXHRkZXYtXFx1MDAzZWRyaXZlcl9wcml2ID0gcHJpdjtcXG4gMTczOlxcdFxcbiAxNzQ6XFx0XFx0LyogR2V0IHRoZSBNQUMgYWRkcmVzcyAqL1xcbiAxNzU6XFx0XFx0cmV0ID0gYXNpeF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX05PREVfSUQsIDAsIDAsIEVUSF9BTEVOLCBidWYsIDApO1xcbiAxNzY6XFx0XFx0aWYgKHJldCBcXHUwMDNjIEVUSF9BTEVOKSB7XFxuIDE3NzpcXHRcXHRcXHRuZXRkZXZfZXJyKGRldi1cXHUwMDNlbmV0LCBcXFwiRmFpbGVkIHRvIHJlYWQgTUFDIGFkZHJlc3M6ICVkXFxcXG5cXFwiLCByZXQpO1xcbiAxNzg6XFx0XFx0XFx0cmV0ID0gLUVJTztcXG4gMTc5OlxcdFxcdFxcdGdvdG8gZnJlZTtcXG4gMTgwOlxcdFxcdH1cXG4gMTgxOlxcdFxcdGV0aF9od19hZGRyX3NldChkZXYtXFx1MDAzZW5ldCwgYnVmKTtcXG4gMTgyOlxcdFxcbiAxODM6XFx0XFx0ZGV2LVxcdTAwM2VuZXQtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2YXg4ODE3MmFfbmV0ZGV2X29wcztcXG4gMTg0OlxcdFxcdGRldi1cXHUwMDNlbmV0LVxcdTAwM2VldGh0b29sX29wcyA9IFxcdTAwMjZheDg4MTcyYV9ldGh0b29sX29wcztcXG4gMTg1OlxcdFxcbiAxODY6XFx0XFx0LyogYXJlIHdlIHVzaW5nIHRoZSBpbnRlcm5hbCBvciB0aGUgZXh0ZXJuYWwgcGh5PyAqL1xcbiAxODc6XFx0XFx0cmV0ID0gYXNpeF9yZWFkX2NtZChkZXYsIEFYX0NNRF9TV19QSFlfU1RBVFVTLCAwLCAwLCAxLCBidWYsIDApO1xcbiAxODg6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gMTg5OlxcdFxcdFxcdG5ldGRldl9lcnIoZGV2LVxcdTAwM2VuZXQsIFxcXCJGYWlsZWQgdG8gcmVhZCBzb2Z0d2FyZSBpbnRlcmZhY2Ugc2VsZWN0aW9uIHJlZ2lzdGVyOiAlZFxcXFxuXFxcIixcXG4gMTkwOlxcdFxcdFxcdFxcdCAgIHJldCk7XFxuIDE5MTpcXHRcXHRcXHRnb3RvIGZyZWU7XFxuIDE5MjpcXHRcXHR9XFxuIDE5MzpcXHRcXG4gMTk0OlxcdFxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCJBWF9DTURfU1dfUEhZX1NUQVRVUyA9IDB4JTAyeFxcXFxuXFxcIiwgYnVmWzBdKTtcXG4gMTk1OlxcdFxcdHN3aXRjaCAoYnVmWzBdIFxcdTAwMjYgQVhfUEhZX1NFTEVDVF9NQVNLKSB7XFxuIDE5NjpcXHRcXHRjYXNlIEFYX1BIWV9TRUxFQ1RfSU5URVJOQUw6XFxuIDE5NzpcXHRcXHRcXHRuZXRkZXZfZGJnKGRldi1cXHUwMDNlbmV0LCBcXFwidXNlIGludGVybmFsIHBoeVxcXFxuXFxcIik7XFxuIDE5ODpcXHRcXHRcXHRwcml2LVxcdTAwM2V1c2VfZW1iZHBoeSA9IDE7XFxuIDE5OTpcXHRcXHRcXHRicmVhaztcXG4gMjAwOlxcdFxcdGNhc2UgQVhfUEhZX1NFTEVDVF9FWFRFUk5BTDpcXG4gMjAxOlxcdFxcdFxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCJ1c2UgZXh0ZXJuYWwgcGh5XFxcXG5cXFwiKTtcXG4gMjAyOlxcdFxcdFxcdHByaXYtXFx1MDAzZXVzZV9lbWJkcGh5ID0gMDtcXG4gMjAzOlxcdFxcdFxcdGJyZWFrO1xcbiAyMDQ6XFx0XFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6NTQ6MzEuNjQ5NzA2MDY5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyOTkyODM3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZm9jdXNpbmcgb24gbGluZXMgMTAwLTE0NSBvZiBgZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmNgLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgcmVhZGluZyB0aGUgY29kZSB3aXRoaW4gdGhpcyBzZWN0aW9uLlxuX19fXG5cbioqQW5hbHl6aW5nIGF4ODgxNzJhLmMgTGluZXMgMTAwLTE0NSoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHNwZWNpZmljIGNodW5rIG9mIGNvZGUgd2l0aGluIHRoZSBsYXJnZXIgZHJpdmVyLiBHaXZlbiBteSBleHBlcmllbmNlLCB0aGUgY29udGV4dCBoZXJlIGxpa2VseSBpbnZvbHZlcyBpbml0aWFsaXphdGlvbiwgZGV2aWNlIHNldHVwLCBvciBwZXJoYXBzIGEgY3JpdGljYWwgaW50ZXJydXB0IGhhbmRsZXIuIFRoZXNlIGxpbmVzIGFyZSBjcnVjaWFsIGJlY2F1c2UgdGhleSB0eXBpY2FsbHkgaGFuZGxlIHRoZSBpbml0aWFsIGNvbW11bmljYXRpb24gd2l0aCB0aGUgQVg4ODE3MkEgY2hpcHNldCwgc2V0dGluZyB1cCB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGZvciBkYXRhIHRyYW5zZmVyLiBCYXNlZCBvbiB0aGUgZmlsZSBwYXRoLCBJIGV4cGVjdCB0byBzZWUgVVNCLXNwZWNpZmljIGFzcGVjdHMsIGxpa2UgZW5kcG9pbnQgY29uZmlndXJhdGlvbiwgc2V0dGluZyB1cCBjb250cm9sIHRyYW5zZmVycywgYW5kIHBvdGVudGlhbGx5IHNvbWUgZGV2aWNlLXNwZWNpZmljIHJlZ2lzdGVycyBiZWluZyBhZGRyZXNzZWQuIEkgbmVlZCB0byBvYnNlcnZlIGFueSBkYXRhIHN0cnVjdHVyZXMgdXNlZCB3aXRoaW4gdGhhdCBjb2RlIHNlZ21lbnQgYmVjYXVzZSB0aGV5IGdpdmUgY29udGV4dCB0byBob3cgY29tbXVuaWNhdGlvbiBoYXBwZW5zLiBJJ20gYW50aWNpcGF0aW5nIHRoYXQgdGhlc2UgbGluZXMgd2lsbCBlc3RhYmxpc2ggdGhlIGZvdW5kYXRpb24gZm9yIHRoaXMgVVNCIG5ldHdvcmsgYWRhcHRlciB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIElmIHRoZXJlJ3MgYW4gaW50ZXJydXB0IHNldHVwLCB0aGF0J3MgcmVhbGx5IGltcG9ydGFudCB0byBrZWVwIGFuIGV5ZSBvbiBiZWNhdXNlIGl0IGhhcyBhIGxvdCBvZiBlZmZlY3Qgb24gcGVyZm9ybWFuY2UuIEknbSBnb2luZyB0byBnZXQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBvY2N1cnMgaGVyZSBiZWZvcmUganVtcGluZyBpbnRvIGFueSBjb25jbHVzaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUyODQsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU0OjM0Ljk0ODk5MzAyM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0XFx0bWRpb2J1c19mcmVlKHByaXYtXFx1MDAzZW1kaW8pO1xcbiAxMDE6XFx0fVxcbiAxMDI6XFx0XFxuIDEwMzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF4ODgxNzJhX25ldGRldl9vcHMgPSB7XFxuIDEwNDpcXHRcXHQubmRvX29wZW5cXHRcXHQ9IHVzYm5ldF9vcGVuLFxcbiAxMDU6XFx0XFx0Lm5kb19zdG9wXFx0XFx0PSB1c2JuZXRfc3RvcCxcXG4gMTA2OlxcdFxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gdXNibmV0X3N0YXJ0X3htaXQsXFxuIDEwNzpcXHRcXHQubmRvX3R4X3RpbWVvdXRcXHRcXHQ9IHVzYm5ldF90eF90aW1lb3V0LFxcbiAxMDg6XFx0XFx0Lm5kb19jaGFuZ2VfbXR1XFx0XFx0PSB1c2JuZXRfY2hhbmdlX210dSxcXG4gMTA5OlxcdFxcdC5uZG9fZ2V0X3N0YXRzNjRcXHQ9IGRldl9nZXRfdHN0YXRzNjQsXFxuIDExMDpcXHRcXHQubmRvX3NldF9tYWNfYWRkcmVzc1xcdD0gYXNpeF9zZXRfbWFjX2FkZHJlc3MsXFxuIDExMTpcXHRcXHQubmRvX3ZhbGlkYXRlX2FkZHJcXHQ9IGV0aF92YWxpZGF0ZV9hZGRyLFxcbiAxMTI6XFx0XFx0Lm5kb19ldGhfaW9jdGxcXHRcXHQ9IHBoeV9kb19pb2N0bF9ydW5uaW5nLFxcbiAxMTM6XFx0XFx0Lm5kb19zZXRfcnhfbW9kZSAgICAgICAgPSBhc2l4X3NldF9tdWx0aWNhc3QsXFxuIDExNDpcXHR9O1xcbiAxMTU6XFx0XFxuIDExNjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGF4ODgxNzJhX2V0aHRvb2xfb3BzID0ge1xcbiAxMTc6XFx0XFx0LmdldF9kcnZpbmZvXFx0XFx0PSB1c2JuZXRfZ2V0X2RydmluZm8sXFxuIDExODpcXHRcXHQuZ2V0X2xpbmtcXHRcXHQ9IHVzYm5ldF9nZXRfbGluayxcXG4gMTE5OlxcdFxcdC5nZXRfbXNnbGV2ZWxcXHRcXHQ9IHVzYm5ldF9nZXRfbXNnbGV2ZWwsXFxuIDEyMDpcXHRcXHQuc2V0X21zZ2xldmVsXFx0XFx0PSB1c2JuZXRfc2V0X21zZ2xldmVsLFxcbiAxMjE6XFx0XFx0LmdldF93b2xcXHRcXHQ9IGFzaXhfZ2V0X3dvbCxcXG4gMTIyOlxcdFxcdC5zZXRfd29sXFx0XFx0PSBhc2l4X3NldF93b2wsXFxuIDEyMzpcXHRcXHQuZ2V0X2VlcHJvbV9sZW5cXHRcXHQ9IGFzaXhfZ2V0X2VlcHJvbV9sZW4sXFxuIDEyNDpcXHRcXHQuZ2V0X2VlcHJvbVxcdFxcdD0gYXNpeF9nZXRfZWVwcm9tLFxcbiAxMjU6XFx0XFx0LnNldF9lZXByb21cXHRcXHQ9IGFzaXhfc2V0X2VlcHJvbSxcXG4gMTI2OlxcdFxcdC5ud2F5X3Jlc2V0XFx0XFx0PSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LFxcbiAxMjc6XFx0XFx0LmdldF9saW5rX2tzZXR0aW5nc1xcdD0gcGh5X2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzLFxcbiAxMjg6XFx0XFx0LnNldF9saW5rX2tzZXR0aW5nc1xcdD0gcGh5X2V0aHRvb2xfc2V0X2xpbmtfa3NldHRpbmdzLFxcbiAxMjk6XFx0fTtcXG4gMTMwOlxcdFxcbiAxMzE6XFx0c3RhdGljIGludCBheDg4MTcyYV9yZXNldF9waHkoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgZW1iZF9waHkpXFxuIDEzMjpcXHR7XFxuIDEzMzpcXHRcXHRpbnQgcmV0O1xcbiAxMzQ6XFx0XFxuIDEzNTpcXHRcXHRyZXQgPSBhc2l4X3N3X3Jlc2V0KGRldiwgQVhfU1dSRVNFVF9JUFBELCAwKTtcXG4gMTM2OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAxMzc6XFx0XFx0XFx0Z290byBlcnI7XFxuIDEzODpcXHRcXG4gMTM5OlxcdFxcdG1zbGVlcCgxNTApO1xcbiAxNDA6XFx0XFx0cmV0ID0gYXNpeF9zd19yZXNldChkZXYsIEFYX1NXUkVTRVRfQ0xFQVIsIDApO1xcbiAxNDE6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDE0MjpcXHRcXHRcXHRnb3RvIGVycjtcXG4gMTQzOlxcdFxcbiAxNDQ6XFx0XFx0bXNsZWVwKDE1MCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU0OjM0Ljk0OTA3Nzg5M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NDQ5MDE4NjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gbGluZXMgNTAtMTAwIG9mIGBheDg4MTcyYS5jYC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcGFyc2UgdGhhdCBzZWN0aW9uIGFuZCBjb25zaWRlciBpdCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIG92ZXJhbGwgZHJpdmVyIGFyY2hpdGVjdHVyZSBJIGtub3cgc28gd2VsbC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhleSdyZSBoYW5kbGluZ+KApiBwZXJoYXBzIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZT8gT3IgbWF5YmUgaXQncyB0aGUgaW50ZXJydXB0IHNldHVwLCBvciBldmVuIHRoZSBiYXNpYyBQSFkgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LiBHaXZlbiBteSBleHBlcmllbmNlIHdpdGggc2ltaWxhciBuZXR3b3JrIGNvbnRyb2xsZXJzLCBJJ20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byByZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxlcnMsIGNvbmZpZ3VyZSBNQUMgYWRkcmVzcyBmaWx0ZXJzLCBvciBpbml0aWFsaXplIHRoZSBQSFkgcmVnaXN0ZXJzIGlmIHRoZXkgYXJlIHJlc3BvbnNpYmxlLlxuXG5NeSBmb2N1cyB3aWxsIGJlIG9uIGlkZW50aWZ5aW5nIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IGFyZSBiZWluZyBjYWxsZWQgYW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIHRoZXkgYXJlIG9wZXJhdGluZyBvbi4gQXJlIHRoZXkgdXNpbmcgYSBkZXZpY2Utc3BlY2lmaWMgc3RydWN0dXJlIHRvIHN0b3JlIGhhcmR3YXJlIHN0YXRlPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzPyBBcmUgdGhleSBoYW5kbGluZyBhbnkgZXJyb3IgY29uZGl0aW9ucyBvciBlZGdlIGNhc2VzIHRoYXQgSSBzaG91bGQgdGFrZSBub3RlIG9mP1xuXG5JIHdpbGwgc3RhcnQgYnkgcmFwaWRseSBzY2FubmluZyB0aGUgY29kZSB0byBnZXQgdGhlIGdpc3QsIGFuZCB0aGVuIGZvY3VzIG9uIGluZGl2aWR1YWwgbGluZXMgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMuIEkgYW0gYWxzbyBsb29raW5nIGZvciBjb21tb24gaWRpb21zIHRoYXQgdGhlIHdyaXRlciB1c2VkLiBUaGlzIHdpbGwgaGVscCBtZSB0byB1bmRlcnN0YW5kIHRoZWlyIHByb2Nlc3MuIEnigJlsbCBtYWtlIGEgbWVudGFsIG5vdGUgb2YgYW55IHN1c3BpY2lvdXMgY29kZSBvciBhbnl0aGluZyB0aGF0IGRldmlhdGVzIGZyb20gYmVzdCBwcmFjdGljZXMuIEnigJltIHRoaW5raW5nIGluIHRlcm1zIG9mIHBvdGVudGlhbCBmdXR1cmUgZGVidWdnaW5nLCBtYWludGVuYW5jZSwgYW5kIHdoZXRoZXIgdGhpcyBzZWN0aW9uIGlzIHdlbGwtd3JpdHRlbiBhbmQgbWFpbnRhaW5hYmxlLiBJJ20gYWxzbyByZWFkeSB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIGZsb3cgaWYgSSBjb21lIGFjcm9zcyBhbnkgdW5mYW1pbGlhciBjYWxscy4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQ3NywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6NTQ6NDMuMzk4MTAwNDk1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDUwOlxcdFxcdFxcdFxcdCAgIHBoeWRldi1cXHUwMDNlc3BlZWQsIHBoeWRldi1cXHUwMDNlZHVwbGV4LCBtb2RlKTtcXG4gIDUxOlxcdFxcdFxcdHBoeV9wcmludF9zdGF0dXMocGh5ZGV2KTtcXG4gIDUyOlxcdFxcdH1cXG4gIDUzOlxcdH1cXG4gIDU0OlxcdFxcbiAgNTU6XFx0c3RhdGljIHZvaWQgYXg4ODE3MmFfc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVyYiAqdXJiKVxcbiAgNTY6XFx0e1xcbiAgNTc6XFx0XFx0LyogbGluayBjaGFuZ2VzIGFyZSBkZXRlY3RlZCBieSBwb2xsaW5nIHRoZSBwaHkgKi9cXG4gIDU4OlxcdH1cXG4gIDU5OlxcdFxcbiAgNjA6XFx0LyogdXNlIHBoeWxpYiBpbmZyYXN0cnVjdHVyZSAqL1xcbiAgNjE6XFx0c3RhdGljIGludCBheDg4MTcyYV9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxcbiAgNjI6XFx0e1xcbiAgNjM6XFx0XFx0c3RydWN0IGF4ODgxNzJhX3ByaXZhdGUgKnByaXYgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbiAgNjQ6XFx0XFx0aW50IHJldDtcXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0cHJpdi1cXHUwMDNlbWRpbyA9IG1kaW9idXNfYWxsb2MoKTtcXG4gIDY3OlxcdFxcdGlmICghcHJpdi1cXHUwMDNlbWRpbykge1xcbiAgNjg6XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYtXFx1MDAzZW5ldCwgXFxcIkNvdWxkIG5vdCBhbGxvY2F0ZSBNRElPIGJ1c1xcXFxuXFxcIik7XFxuICA2OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gIDcwOlxcdFxcdH1cXG4gIDcxOlxcdFxcbiAgNzI6XFx0XFx0cHJpdi1cXHUwMDNlbWRpby1cXHUwMDNlcHJpdiA9ICh2b2lkICopZGV2O1xcbiAgNzM6XFx0XFx0cHJpdi1cXHUwMDNlbWRpby1cXHUwMDNlcmVhZCA9IFxcdTAwMjZhc2l4X21kaW9fYnVzX3JlYWQ7XFxuICA3NDpcXHRcXHRwcml2LVxcdTAwM2VtZGlvLVxcdTAwM2V3cml0ZSA9IFxcdTAwMjZhc2l4X21kaW9fYnVzX3dyaXRlO1xcbiAgNzU6XFx0XFx0cHJpdi1cXHUwMDNlbWRpby1cXHUwMDNlbmFtZSA9IFxcXCJBc2l4IE1ESU8gQnVzXFxcIjtcXG4gIDc2OlxcdFxcdC8qIG1paSBidXMgbmFtZSBpcyB1c2ItXFx1MDAzY3VzYiBidXMgbnVtYmVyXFx1MDAzZS1cXHUwMDNjdXNiIGRldmljZSBudW1iZXJcXHUwMDNlICovXFxuICA3NzpcXHRcXHRzbnByaW50Zihwcml2LVxcdTAwM2VtZGlvLVxcdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcXFwidXNiLSUwM2Q6JTAzZFxcXCIsXFxuICA3ODpcXHRcXHRcXHQgZGV2LVxcdTAwM2V1ZGV2LVxcdTAwM2VidXMtXFx1MDAzZWJ1c251bSwgZGV2LVxcdTAwM2V1ZGV2LVxcdTAwM2VkZXZudW0pO1xcbiAgNzk6XFx0XFxuICA4MDpcXHRcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZW1kaW8pO1xcbiAgODE6XFx0XFx0aWYgKHJldCkge1xcbiAgODI6XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYtXFx1MDAzZW5ldCwgXFxcIkNvdWxkIG5vdCByZWdpc3RlciBNRElPIGJ1c1xcXFxuXFxcIik7XFxuICA4MzpcXHRcXHRcXHRnb3RvIG1mcmVlO1xcbiAgODQ6XFx0XFx0fVxcbiAgODU6XFx0XFxuICA4NjpcXHRcXHRuZXRkZXZfaW5mbyhkZXYtXFx1MDAzZW5ldCwgXFxcInJlZ2lzdGVyZWQgbWRpbyBidXMgJXNcXFxcblxcXCIsIHByaXYtXFx1MDAzZW1kaW8tXFx1MDAzZWlkKTtcXG4gIDg3OlxcdFxcdHJldHVybiAwO1xcbiAgODg6XFx0XFxuICA4OTpcXHRtZnJlZTpcXG4gIDkwOlxcdFxcdG1kaW9idXNfZnJlZShwcml2LVxcdTAwM2VtZGlvKTtcXG4gIDkxOlxcdFxcdHJldHVybiByZXQ7XFxuICA5MjpcXHR9XFxuICA5MzpcXHRcXG4gIDk0OlxcdHN0YXRpYyB2b2lkIGF4ODgxNzJhX3JlbW92ZV9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcXG4gIDk1OlxcdHtcXG4gIDk2OlxcdFxcdHN0cnVjdCBheDg4MTcyYV9wcml2YXRlICpwcml2ID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4gIDk3OlxcdFxcbiAgOTg6XFx0XFx0bmV0ZGV2X2luZm8oZGV2LVxcdTAwM2VuZXQsIFxcXCJkZXJlZ2lzdGVyaW5nIG1kaW8gYnVzICVzXFxcXG5cXFwiLCBwcml2LVxcdTAwM2VtZGlvLVxcdTAwM2VpZCk7XFxuICA5OTpcXHRcXHRtZGlvYnVzX3VucmVnaXN0ZXIocHJpdi1cXHUwMDNlbWRpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU0OjQzLjM5ODE4MzUwNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODUxMzM4MDY5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQW5hbHlzaXM6IG1vdG9yY29tbSBQSFkgRHJpdmVyKipcblxuT2theSwgc28gaGVyZSdzIHRoZSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzIHJlZ2FyZGluZyB0aGlzIHBhdGNoIGFuZCB3aGV0aGVyIGl0J3Mgd29ydGggZnV6emluZy4gVGhlIGtleSBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBtb3RvcmNvbW1gIFBIWSBkcml2ZXIgY2FuIGJlIHRyaWdnZXJlZCBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQgbGlrZSBRRU1VLCBiZWNhdXNlIHRoZSBwYXRjaCBlZGl0cyB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGRyaXZlciwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoYXQgY29uZmlndXJhdGlvbiBjYW4gYmUgcmVhY2hlZCBmcm9tIGFuIGVtdWxhdGlvbiBjb250ZXh0LlxuXG5GaXJzdCwgSSBzZWUgdGhhdCB0aGUgY29kZSB1c2VzIGBtZGlvYnVzX3JlZ2lzdGVyKClgLiBUaGlzIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBNRElPIGJ1cywgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhlIGtlcm5lbCBzY2FucyB0aGUgYnVzIGJ5IHJlYWRpbmcgUEhZIElEcy4gSWYgdGhlIGVtdWxhdGVkIFVTQiBkZXZpY2UgcmV0dXJucyB0aGUgY29ycmVjdCBQSFkgSURzIGZvciB0aGUgTW90b3Jjb21tIFlUODV4eCBmYW1pbHkgKGxpa2UgYFBIWV9JRF9ZVDg1MzFTYCBvciBvdGhlcnMpLCB0aGUgYG1vdG9yY29tbWAgUEhZIGRyaXZlciBzaG91bGQgbWF0Y2gsIHByb2JlLCBhbmQgY2FsbCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgbGlrZSBgeXQ4NTMxc19jb25maWdfaW5pdGAuXG5cbk15IGJyYWluIGp1bXBzIHRvIHRoZSBwb3NzaWJpbGl0aWVzIG9mIFVTQiBlbXVsYXRpb24uIENhbiB3ZSBnZXQgaGVyZSB2aWEgYW4gZW11bGF0ZWQgVVNCIGRldmljZT8gV2UgbWlnaHQgYmUgYWJsZSB0byBjcmVhdGUgYW4gTURJTyBidXMgdmlydHVhbGx5IHRocm91Z2ggVVNCIGVtdWxhdGlvbiB1c2luZyBkZXZpY2VzIGxpa2UgYHVzYm5ldGAsIGBheDg4MTcyYWAsIGBsYW43OHh4YCwgb3IgYHNtc2M5NXh4YC4gVGhlIHN5emthbGxlciBmdXp6ZXIgaXMga2V5IGhlcmUsIGVzcGVjaWFsbHkgd2l0aCB0aGUgcmF3LWdhZGdldCAvIGR1bW15X2hjZCBmZWF0dXJlczsgdGhleSBzaG91bGQgYWxsb3cgbWUgdG8gbWltaWMgdGhlIGJlaGF2aW9yIG9mIGEgVVNCIGRldmljZSBhbmQgcmV0dXJuIHNwZWNpZmljIHJlc3BvbnNlcywgaW5jbHVkaW5nIHRob3NlIHRoYXQgaWRlbnRpZnkgdGhlIFBIWS5cblxuSWYgc3l6a2FsbGVyIGNhbiBlbXVsYXRlIGEgVVNCIGRldmljZSAoZS5nLiwgYGF4ODgxNzJhYCBVU0IgdG8gZXRoZXJuZXQgZGV2aWNlKSB0aGF0IHRyaWdnZXJzIHRoZSBNRElPIGJ1cyBzY2FuIGFuZCByZXR1cm5zIHRoZSBjb3JyZWN0IFBIWSBJRHMsIHRoZW4gdGhlIGBtb3RvcmNvbW1gIGRyaXZlciBpcyByZWFjaGFibGUuIFRoaXMgbWVhbnMgdGhhdCBhIFVTQiBkZXZpY2UgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gcmVzcG9uZCB3aXRoIHRoZSByaWdodCBQSFkgSUQgd2hlbiBgbWRpb2J1c19yZWdpc3RlcigpYCBpcyBjYWxsZWQuIFRoZW4gdGhlIGBtb3RvcmNvbW1gIGRyaXZlciBjYW4gYmUgcHJvYmVkIGFuZCBpbml0aWFsaXplZC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgZGlzY3JldGUgRXRoZXJuZXQgUEhZIGNoaXBzIGFyZSByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVS9HQ0UuIFRoZSBkb2N1bWVudGF0aW9uIGFib3V0IGZ1enppbmcgZmlsdGVycyBtZW50aW9ucyB0aGF0IHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgKGxpa2UgY2VydGFpbiBQQ0llIGRyaXZlcnMgb3IgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlKSBhcmUgbm90IHdvcnRoIGZ1enppbmcuIEJ1dCBJIGRvbid0IHRoaW5rIGl0IGlzIHRoZSBjYXNlIGhlcmUuXG5cbkkgYWxzbyByZXZpZXdlZCB0aGUgcGF0Y2ggaXRzZWxmLCBmb2N1c2luZyBvbiBgbW90b3Jjb21tLmNgLiBUaGUgcGF0Y2ggY2hhbmdlZCB0aGUgZnVuY3Rpb24gdGhhdCBpbml0aWFsaXplcyB0aGUgUEhZLCBgeXQ4NTIxX2NvbmZpZ19pbml0YCB0byBgeXQ4NTMxc19jb25maWdfaW5pdGAgYW5kIGFkZGVkIHNvbWUgcmVnaXN0ZXJzLiBUaGUgYG1vdG9yY29tbS5jYCBpcyB0aGUga2V5IGZpbGUgaGVyZS5cblxuU28sIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXNlIFVTQiBlbXVsYXRpb25zIGNhbiB0cmlnZ2VyIHRoZSBjb2RlIHBhdGhzLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBhbmQgaWYgYENPTkZJR19NT1RPUkNPTU1fUEhZYCBpcyBhIHBoeWxpYiBkcml2ZXIuIFRoYXQncyBhIHF1aWNrIGNoZWNrIGluIHRoZSBLY29uZmlnIGZpbGVzLlxuXG5CYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJ20gbGVhbmluZyB0b3dhcmRzICp5ZXMqIC0gdGhpcyBpcyBsaWtlbHkgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgVVNCIGVtdWxhdGlvbiBpbiBRRU1VLCBwYXJ0aWN1bGFybHkgaWYgdGhlIHN5emthbGxlciBmdXp6ZXIgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gbWltaWMgdGhlIHJlc3BvbnNlcyBmcm9tIGEgcmVsZXZhbnQgVVNCLXRvLUV0aGVybmV0IGFkYXB0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NjAzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg1NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU1OjAxLjkxMTU2Nzg1MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNjA6XFx0XFx0ICBDdXJyZW50bHkgc3VwcG9ydHMgVlNDODUxNCwgVlNDODUzMCwgVlNDODUzMSwgVlNDODU0MCBhbmQgVlNDODU0MSBQSFlzXFxuIDM2MTpcXHRcXG4gMzYyOlxcdGNvbmZpZyBNT1RPUkNPTU1fUEhZXFxuIDM2MzpcXHRcXHR0cmlzdGF0ZSBcXFwiTW90b3Jjb21tIFBIWXNcXFwiXFxuIDM2NDpcXHRcXHRoZWxwXFxuIDM2NTpcXHRcXHQgIEVuYWJsZXMgc3VwcG9ydCBmb3IgTW90b3Jjb21tIG5ldHdvcmsgUEhZcy5cXG4gMzY2OlxcdFxcdCAgQ3VycmVudGx5IHN1cHBvcnRzIFlUODV4eCBHaWdhYml0IEV0aGVybmV0IFBIWXMuXFxuIDM2NzpcXHRcXG4gMzY4OlxcdGNvbmZpZyBOQVRJT05BTF9QSFlcXG4gMzY5OlxcdFxcdHRyaXN0YXRlIFxcXCJOYXRpb25hbCBTZW1pY29uZHVjdG9yIFBIWXNcXFwiXFxuIDM3MDpcXHRcXHRoZWxwXFxuIDM3MTpcXHRcXHQgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgRFA4Mzg2NSBQSFkuXFxuIDM3MjpcXHRcXG4gMzczOlxcdGNvbmZpZyBOWFBfQ0JUWF9QSFlcXG4gMzc0OlxcdFxcdHRyaXN0YXRlIFxcXCJOWFAgMTAwQkFTRS1UWCBQSFlzXFxcIlxcbiAzNzU6XFx0XFx0aGVscFxcbiAzNzY6XFx0XFx0ICBTdXBwb3J0IHRoZSAxMDBCQVNFLVRYIFBIWSBpbnRlZ3JhdGVkIG9uIHRoZSBTSkExMTEwIGF1dG9tb3RpdmVcXG4gMzc3OlxcdFxcdCAgc3dpdGNoIGZhbWlseS5cXG4gMzc4OlxcdFxcbiAzNzk6XFx0Y29uZmlnIE5YUF9DNDVfVEpBMTFYWF9QSFlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6NTU6MDEuOTExNjQ1OTIyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5NDcyNzAxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBQSFkgS2NvbmZpZyBmb3IgQ29udGV4dCoqXG5cbkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgaW50byB0aGlzIGRyaXZlciBjaGFuZ2UsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBzdXJyb3VuZGluZyBsYW5kc2NhcGUuIExldCdzIHN0YXJ0IHdpdGggdGhlIHN0YW5kYXJkIHByYWN0aWNlIGFuZCBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIEknbSBoZWFkaW5nIG92ZXIgdG8gYGRyaXZlcnMvbmV0L3BoeS9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSBJJ2xsIGZpbmQgdGhlIG1lbnVzLCB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgb2YgaG93IHRoZXNlIFBIWSBkcml2ZXJzIGFyZSBvcmdhbml6ZWQgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0uIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBoZXJlIGlzIGNyaXRpY2FsOyBJIG5lZWQgdG8gc2VlICp3aGF0KiBlbmFibGVzICp3aGF0KiwgYW5kIGVuc3VyZSBteSBjaGFuZ2VzIGRvbid0IGluYWR2ZXJ0ZW50bHkgYnJlYWsgZXhpc3RpbmcgY29uZmlndXJhdGlvbnMgb3IgaW50cm9kdWNlIGNvbmZsaWN0cy4gVGhpcyBpbml0aWFsIHN0ZXAgd2lsbCBnaXZlIG1lIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byBwcm9jZWVkIHNhZmVseSBhbmQgZWZmZWN0aXZlbHkuIEl0J3MgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgd2hlbiBhc3Nlc3NpbmcgdGhlIGltcGFjdCBvZiBhIGNoYW5nZSBpbiB0aGlzIHNwYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTQ4MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6NTU6MDUuODU4OTE5NDJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgUEhZIExheWVyIENvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIFBIWUxJTktcXG4gICA3OlxcdFxcdHRyaXN0YXRlXFxuICAgODpcXHRcXHRzZWxlY3QgUEhZTElCXFxuICAgOTpcXHRcXHRzZWxlY3QgU1dQSFlcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgUEhZbGluayBtb2RlbHMgdGhlIGxpbmsgYmV0d2VlbiB0aGUgUEhZIGFuZCBNQUMsIGFsbG93aW5nIGZpeGVkXFxuICAxMjpcXHRcXHQgIGNvbmZpZ3VyYXRpb24gbGlua3MsIFBIWXMsIGFuZCBTZXJkZXMgbGlua3Mgd2l0aCBNQUMgbGV2ZWxcXG4gIDEzOlxcdFxcdCAgYXV0b25lZ290aWF0aW9uIG1vZGVzLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRtZW51Y29uZmlnIFBIWUxJQlxcbiAgMTY6XFx0XFx0dHJpc3RhdGUgXFxcIlBIWSBEZXZpY2Ugc3VwcG9ydCBhbmQgaW5mcmFzdHJ1Y3R1cmVcXFwiXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIEV0aGVybmV0IGNvbnRyb2xsZXJzIGFyZSB1c3VhbGx5IGF0dGFjaGVkIHRvIFBIWVxcbiAgMTk6XFx0XFx0ICBkZXZpY2VzLiAgVGhpcyBvcHRpb24gcHJvdmlkZXMgaW5mcmFzdHJ1Y3R1cmUgZm9yXFxuICAyMDpcXHRcXHQgIG1hbmFnaW5nIFBIWSBkZXZpY2VzLlxcbiAgMjE6XFx0XFxuICAyMjpcXHRpZiBQSFlMSUJcXG4gIDIzOlxcdFxcbiAgMjQ6XFx0Y29uZmlnIFNXUEhZXFxuICAyNTpcXHRcXHRib29sXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBQSFlfUEFDS0FHRVxcbiAgMjg6XFx0XFx0IHRyaXN0YXRlXFxuICAyOTpcXHRcXG4gIDMwOlxcdGNvbmZpZyBMRURfVFJJR0dFUl9QSFlcXG4gIDMxOlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgTEVEIHRyaWdnZXJzIGZvciB0cmFja2luZyBsaW5rIHN0YXRlXFxcIlxcbiAgMzI6XFx0XFx0ZGVwZW5kcyBvbiBMRURTX1RSSUdHRVJTXFxuICAzMzpcXHRcXHRoZWxwXFxuICAzNDpcXHRcXHQgIEFkZHMgc3VwcG9ydCBmb3IgYSBzZXQgb2YgTEVEIHRyaWdnZXIgZXZlbnRzIHBlci1QSFkuICBMaW5rXFxuICAzNTpcXHRcXHQgIHN0YXRlIGNoYW5nZSB3aWxsIHRyaWdnZXIgdGhlIGV2ZW50cywgZm9yIGNvbnN1bXB0aW9uIGJ5IGFuXFxuICAzNjpcXHRcXHQgIExFRCBjbGFzcyBkcml2ZXIuICBUaGVyZSBhcmUgdHJpZ2dlcnMgZm9yIGVhY2ggbGluayBzcGVlZCBjdXJyZW50bHlcXG4gIDM3OlxcdFxcdCAgc3VwcG9ydGVkIGJ5IHRoZSBQSFkgYW5kIGFsc28gYSBvbmUgY29tbW9uIFxcXCJsaW5rXFxcIiB0cmlnZ2VyIGFzIGFcXG4gIDM4OlxcdFxcdCAgbG9naWNhbC1vciBvZiBhbGwgdGhlIGxpbmsgc3BlZWQgb25lcy5cXG4gIDM5OlxcdFxcdCAgQWxsIHRoZXNlIHRyaWdnZXJzIGFyZSBuYW1lZCBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyBwYXR0ZXJuOlxcbiAgNDA6XFx0XFx0ICAgICAgXFx1MDAzY21paSBidXMgaWRcXHUwMDNlOlxcdTAwM2NwaHlcXHUwMDNlOlxcdTAwM2NzcGVlZFxcdTAwM2VcXG4gIDQxOlxcdFxcbiAgNDI6XFx0XFx0ICBXaGVyZSBzcGVlZCBpcyBpbiB0aGUgZm9ybTpcXG4gIDQzOlxcdFxcdFxcdFxcdTAwM2NTcGVlZCBpbiBtZWdhYml0c1xcdTAwM2VNYnBzIE9SIFxcdTAwM2NTcGVlZCBpbiBnaWdhYml0c1xcdTAwM2VHYnBzIE9SIGxpbmtcXG4gIDQ0OlxcdFxcdFxcdGZvciBhbnkgc3BlZWQga25vd24gdG8gdGhlIFBIWS5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0Y29uZmlnIE9QRU5fQUxMSUFOQ0VfSEVMUEVSU1xcbiAgNDc6XFx0XFx0Ym9vbFxcbiAgNDg6XFx0XFxuICA0OTpcXHRjb25maWcgUEhZTElCX0xFRFNcXG4gIDUwOlxcdFxcdGRlZl9ib29sIE9GXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU1OjA1Ljg1OTAwOTY4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxMDc3ODc1NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkludmVzdGlnYXRpbmcgUEhZTElCIEluY2x1c2lvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBQSFlMSUJgIGdldHMgcHVsbGVkIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCBzbyBJJ20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlIGlzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGZvciBuZXR3b3JraW5nLXJlbGF0ZWQgS2NvbmZpZyBvcHRpb25zLiBJdCdzIGFsbW9zdCBjZXJ0YWluIHRoYXQgdGhlIGBQSFlMSUJgIG9wdGlvbiwgb3IgdGhlIGZlYXR1cmVzIGl0IGRlcGVuZHMgb24sIHdpbGwgYmUgZGVmaW5lZCBvciBpbmNsdWRlZCBzb21ld2hlcmUgd2l0aGluIHRoYXQgZmlsZS4gVGltZSB0byBvcGVuIGl0IHVwIGFuZCBzZWUgd2hhdCB0aGUgYnVpbGQgc3lzdGVtIGlzIGRvaW5nIHdpdGggaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMzExLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzo1NToxMS45NjY4MDAyNDhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTgwODExMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz01MTI9c291cmNlIFxcXCJkcml2ZXJzL25ldC9pcGEvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnLTUxMy1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjUxNDpzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3BoeS9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWctNTE1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzo1NToxMi40MzI2MTM5MjlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIyMDUxNDQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBOZXR3b3JrIERldmljZSBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgc29tZXRoaW5nIG5ldHdvcmstcmVsYXRlZCwgbGlrZWx5IGludm9sdmluZyB0aGUgY29uZmlndXJhdGlvbiBvZiBuZXR3b3JrIGRldmljZXMuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdG8gZGVsdmUgaW50byB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgdXN1YWwgc3RhcnRpbmcgcG9pbnQgZm9yIG1hbmFnaW5nIG5ldHdvcmsgZGV2aWNlIG9wdGlvbnMgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byBhcm91bmQgbGluZSA1MTIsIGJlY2F1c2UgSSBoYXZlIGEgaHVuY2ggdGhhdCdzIHdoZXJlIHdlIG1pZ2h0IGZpbmQgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYE5FVERFVklDRVNgLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBjb25kaXRpb25hbCBibG9ja3Mgb3Igb3B0aW9ucyB0aGF0IGNvdWxkIGluZmx1ZW5jZSB0aGUgaW5jbHVzaW9uIG9yIGJlaGF2aW9yIG9mIG5ldHdvcmsgZGV2aWNlcyBpbiBnZW5lcmFsLCBvciBwb3RlbnRpYWxseSBzcGVjaWZpYyBkZXZpY2UgdHlwZXMuIEknbGwgbmVlZCB0byByYXBpZGx5IHNjYW4gZm9yIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgb3IgbW9kdWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI1NjcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzo1NToxNC42NTMxMzIyOTdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBOZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgTkVUREVWSUNFU1xcbiAgIDc6XFx0XFx0ZGVmYXVsdCB5IGlmIFVNTFxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBORVRcXG4gICA5OlxcdFxcdGJvb2wgXFxcIk5ldHdvcmsgZGV2aWNlIHN1cHBvcnRcXFwiXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIFlvdSBjYW4gc2F5IE4gaGVyZSBpZiB5b3UgZG9uJ3QgaW50ZW5kIHRvIGNvbm5lY3QgeW91ciBMaW51eCBib3ggdG9cXG4gIDEyOlxcdFxcdCAgYW55IG90aGVyIGNvbXB1dGVyIGF0IGFsbC5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0XFx0ICBZb3UnbGwgaGF2ZSB0byBzYXkgWSBpZiB5b3VyIGNvbXB1dGVyIGNvbnRhaW5zIGEgbmV0d29yayBjYXJkIHRoYXRcXG4gIDE1OlxcdFxcdCAgeW91IHdhbnQgdG8gdXNlIHVuZGVyIExpbnV4LiBJZiB5b3UgYXJlIGdvaW5nIHRvIHJ1biBTTElQIG9yIFBQUCBvdmVyXFxuICAxNjpcXHRcXHQgIHRlbGVwaG9uZSBsaW5lIG9yIG51bGwgbW9kZW0gY2FibGUgeW91IG5lZWQgc2F5IFkgaGVyZS4gQ29ubmVjdGluZ1xcbiAgMTc6XFx0XFx0ICB0d28gbWFjaGluZXMgd2l0aCBwYXJhbGxlbCBwb3J0cyB1c2luZyBQTElQIG5lZWRzIHRoaXMsIGFzIHdlbGwgYXNcXG4gIDE4OlxcdFxcdCAgQVguMjUvS0lTUyBmb3Igc2VuZGluZyBJbnRlcm5ldCB0cmFmZmljIG92ZXIgYW1hdGV1ciByYWRpbyBsaW5rcy5cXG4gIDE5OlxcdFxcbiAgMjA6XFx0XFx0ICBTZWUgYWxzbyBcXFwiVGhlIExpbnV4IE5ldHdvcmsgQWRtaW5pc3RyYXRvcidzIEd1aWRlXFxcIiBieSBPbGFmIEtpcmNoIGFuZFxcbiAgMjE6XFx0XFx0ICBUZXJyeSBEYXdzb24uIEF2YWlsYWJsZSBhdCBcXHUwMDNjaHR0cDovL3d3dy50bGRwLm9yZy9ndWlkZXMuaHRtbFxcdTAwM2UuXFxuICAyMjpcXHRcXG4gIDIzOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDI0OlxcdFxcbiAgMjU6XFx0IyBBbGwgdGhlIGZvbGxvd2luZyBzeW1ib2xzIGFyZSBkZXBlbmRlbnQgb24gTkVUREVWSUNFUyAtIGRvIG5vdCByZXBlYXRcXG4gIDI2OlxcdCMgdGhhdCBmb3IgZWFjaCBvZiB0aGUgc3ltYm9scy5cXG4gIDI3OlxcdGlmIE5FVERFVklDRVNcXG4gIDI4OlxcdFxcbiAgMjk6XFx0Y29uZmlnIE1JSVxcbiAgMzA6XFx0XFx0dHJpc3RhdGVcXG4gIDMxOlxcdFxcbiAgMzI6XFx0Y29uZmlnIE5FVF9DT1JFXFxuICAzMzpcXHRcXHRkZWZhdWx0IHlcXG4gIDM0OlxcdFxcdGJvb2wgXFxcIk5ldHdvcmsgY29yZSBkcml2ZXIgc3VwcG9ydFxcXCJcXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgWW91IGNhbiBzYXkgTiBoZXJlIGlmIHlvdSBkbyBub3QgaW50ZW5kIHRvIHVzZSBhbnkgb2YgdGhlXFxuICAzNzpcXHRcXHQgIG5ldHdvcmtpbmcgY29yZSBkcml2ZXJzIChpLmUuIFZMQU4sIGJyaWRnaW5nLCBib25kaW5nLCBldGMuKVxcbiAgMzg6XFx0XFxuICAzOTpcXHRpZiBORVRfQ09SRVxcbiAgNDA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU1OjE0LjY1MzIzNDI3N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjUyNzY4ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTW90b3Jjb21tIFBIWSBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGBNT1RPUkNPTU1fUEhZYCBkcml2ZXIgcmVsaWVzIG9uIGJvdGggYFBIWUxJQmAgYW5kIGBORVRERVZJQ0VTYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiBkZXBlbmRlbmNpZXMgSSdtIG1pc3NpbmcuIFNvLCBsZXQncyBkaXZlIGludG8gYGRyaXZlcnMvbmV0L3BoeS9LY29uZmlnYC5cblxuUmlnaHQsIGZvdW5kIGl0OiBgY29uZmlnIE1PVE9SQ09NTV9QSFlgIGNvbmZpcm1zIHRoZSB0cmlzdGF0ZSBvcHRpb24gZm9yIE1vdG9yY29tbSBQSFlzLiBBaGEsIGFuZCBpdCdzIG5lYXRseSBuZXN0ZWQ6IGBpZiBQSFlMSUJgIGlzIGl0c2VsZiBuZXN0ZWQgd2l0aGluIGBpZiBORVRERVZJQ0VTYCwgYW5kIGBORVRERVZJQ0VTYCBkZXBlbmRzIG9uIGBORVRgLiBUaGlzIGNvbmZpcm1zIHRoZSBpbml0aWFsIGRlcGVuZGVuY2llcywgYW5kIGFsc28gY2xhcmlmaWVzIHRoZSBkZXBlbmRlbmN5IGNoYWluLlxuXG5Ob3csIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gSSdtIGdvaW5nIHRvIGxvb2sgZGVlcGVyLiBMZXQncyBtYWtlIHN1cmUgaXQgZG9lc24ndCB1c2UgYW55IGhpZGRlbiBoZWxwZXJzIG9yIHNwZWNpZmljIGNvbmZpZyBvcHRpb25zIHRoYXQgYXJlbid0IGltbWVkaWF0ZWx5IG9idmlvdXMgZnJvbSB0aGUgS2NvbmZpZyBmaWxlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGFjdHVhbCBgbW90b3Jjb21tLmNgIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgaW5jbHVkZWQgaGVhZGVycyBhbmQgY29uZmlnIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIHN1YnRseSBiYWtlZCBpbiB0aGVyZS4gSSB3YW50IHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMzEwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6NTU6MTcuMzA2MDA1Mzg4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCtcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXIuXFxuICAgNDpcXHQgKlxcbiAgIDU6XFx0ICogQXV0aG9yOiBQZXRlciBHZWlzIFxcdTAwM2NwZ3dpcGVvdXRAZ21haWwuY29tXFx1MDAzZVxcbiAgIDY6XFx0ICogQXV0aG9yOiBGcmFuayBcXHUwMDNjRnJhbmsuU2FlQG1vdG9yLWNvbW0uY29tXFx1MDAzZVxcbiAgIDc6XFx0ICovXFxuICAgODpcXHRcXG4gICA5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGsuaFxcdTAwM2VcXG4gIDEwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXFx1MDAzZVxcbiAgMTE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAgMTI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcXHUwMDNlXFxuICAxNTpcXHRcXG4gIDE2OlxcdCNkZWZpbmUgUEhZX0lEX1lUODUxMVxcdFxcdDB4MDAwMDAxMGFcXG4gIDE3OlxcdCNkZWZpbmUgUEhZX0lEX1lUODUyMVxcdFxcdDB4MDAwMDAxMWFcXG4gIDE4OlxcdCNkZWZpbmUgUEhZX0lEX1lUODUyMlxcdFxcdDB4NGY1MWU5MjhcXG4gIDE5OlxcdCNkZWZpbmUgUEhZX0lEX1lUODUzMVxcdFxcdDB4NGY1MWU5MWJcXG4gIDIwOlxcdCNkZWZpbmUgUEhZX0lEX1lUODUzMVNcXHRcXHQweDRmNTFlOTFhXFxuICAyMTpcXHQjZGVmaW5lIFBIWV9JRF9ZVDg4MjFcXHRcXHQweDRmNTFlYTE5XFxuICAyMjpcXHQvKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXdcXG4gIDIzOlxcdCAqXFx0VVRQIFJlZ2lzdGVyIHNwYWNlXFx0fFxcdEZJQkVSIFJlZ2lzdGVyIHNwYWNlXFxuICAyNDpcXHQgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuICAyNTpcXHQgKiB8XFx0VVRQIE1JSVxcdFxcdFxcdHxcXHRGSUJFUiBNSUlcXHRcXHR8XFxuICAyNjpcXHQgKiB8XFx0VVRQIE1NRFxcdFxcdFxcdHxcXHRcXHRcXHRcXHR8XFxuICAyNzpcXHQgKiB8XFx0VVRQIEV4dGVuZGVkXFx0XFx0fFxcdEZJQkVSIEV4dGVuZGVkXFx0XFx0fFxcbiAgMjg6XFx0ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiAgMjk6XFx0ICogfFxcdFxcdFxcdENvbW1vbiBFeHRlbmRlZFxcdFxcdFxcdFxcdHxcXG4gIDMwOlxcdCAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4gIDMxOlxcdCAqL1xcbiAgMzI6XFx0XFxuICAzMzpcXHQvKiAweDEwIH4gMHgxNSAsIDB4MUUgYW5kIDB4MUYgYXJlIGNvbW1vbiBNSUkgcmVnaXN0ZXJzIG9mIHl0IHBoeSAqL1xcbiAgMzQ6XFx0XFxuICAzNTpcXHQvKiBTcGVjaWZpYyBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyICovXFxuICAzNjpcXHQjZGVmaW5lIFlUUEhZX1NQRUNJRklDX0ZVTkNUSU9OX0NPTlRST0xfUkVHXFx0MHgxMFxcbiAgMzc6XFx0XFxuICAzODpcXHQvKiAyYjAwIE1hbnVhbCBNREkgY29uZmlndXJhdGlvblxcbiAgMzk6XFx0ICogMmIwMSBNYW51YWwgTURJWCBjb25maWd1cmF0aW9uXFxuICA0MDpcXHQgKiAyYjEwIFJlc2VydmVkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU1OjE3LjMwNjE1MDIwOFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NDg5MDM1MDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIERyaXZlciBDb25maWd1cmF0aW9uIENoYW5nZXMgZm9yIEZ1enppbmcgRm9jdXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgc2NhbiBmbGFnZ2VkIHNvbWUgc3ltYm9sIGNoYW5nZXMsIHNwZWNpZmljYWxseSBgeXQ4NTMxc19jb25maWdfaW5pdGAsIGBfX3l0ODUyMV9jb25maWdfaW5pdGAsIGFuZCBgeXQ4NTIxX2NvbmZpZ19pbml0YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgd2FzIHRvIGNoZWNrIGlmIHRoZXNlIGFyZSBzdGF0aWMgb3Igbm9uLXN0YXRpYyBiZWNhdXNlIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMgZmF2b3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMgZm9yIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIExvb2tpbmcgaW50byBgbW90b3Jjb21tLmNgLCBJIHNlZSB0aGV5ICphcmUqIHN0YXRpYzogYHN0YXRpYyBpbnQgeXQ4NTMxc19jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KWAgYW5kIGBzdGF0aWMgaW50IHl0ODUyMV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KWAuIEJ1dCB0aGVuLCBJIHJlbWVtYmVyZWQgdGhvc2UgZnVuY3Rpb25zIGFyZSByZWZlcmVuY2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiB0aGUgYG1vdG9yY29tbV9waHlfZHJ2c1tdYCBzdHJ1Y3Q6ICBgLmNvbmZpZ19pbml0ID0geXQ4NTMxc19jb25maWdfaW5pdCxgIGFuZCBgLmNvbmZpZ19pbml0ID0geXQ4NTIxX2NvbmZpZ19pbml0LGAuXG5cbkFoLWhhISBCZWNhdXNlIHRoZXkgYXJlIHN0b3JlZCBhcyBmdW5jdGlvbiBwb2ludGVycywgZXZlbiB0aG91Z2ggdGhleSdyZSBkZWNsYXJlZCBgc3RhdGljYCwgdGhlaXIgYWRkcmVzc2VzIGFyZSByZXRhaW5lZCBpbiB0aGUgZHJpdmVyJ3Mgc3RydWN0IHRhYmxlLiBUaGVyZWZvcmUsIHRoZXkgYXJlIG5vdCBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gVGhhdCBtYWtlcyB0aGVtIHBlcmZlY3QgY2FuZGlkYXRlcyBmb3IgZm9jdXMgc3ltYm9scy4gU28gYHl0ODUzMXNfY29uZmlnX2luaXRgIGFuZCBgeXQ4NTIxX2NvbmZpZ19pbml0YCBhcmUgZGVmaW5pdGVseSBpbiBteSBzaWdodHMuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgY29tcGxldGUgcGljdHVyZS4gVGhlIHBhdGNoIG1vZGlmaWVzIGBfX3l0ODUyMV9jb25maWdfaW5pdGAsIGB5dDg1MjFfY29uZmlnX2luaXRgLCBhbmQgYHl0ODUzMXNfY29uZmlnX2luaXRgLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGB5dDg1MzFzX2NvbmZpZ19pbml0YCBhbmQgYHl0ODUyMV9jb25maWdfaW5pdGAgd2lsbCBoYXZlIGRpc3RpbmN0IHN5bWJvbHMgd2hlbiBgTU9UT1JDT01NX1BIWWAgaXMgZW5hYmxlZC4gTFRPICpjb3VsZCogbWVyZ2UgdGhlbSBpbiBjZXJ0YWluIHNpdHVhdGlvbnMsIGJ1dCBoZXJlLCB0aGUgY29kZSBpcyBkaXN0aW5jdC5cblxuRnVuY3Rpb25hbGx5LCB0aGUgcGF0Y2ggKmRvZXMqIGludHJvZHVjZSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIGRyaXZlciBsb2dpYy4gSXQgaW50cm9kdWNlcyBhIHNlcGFyYXRlIGBjb25maWdfaW5pdGAgZm9yIFlUODUzMVMgKGB5dDg1MzFzX2NvbmZpZ19pbml0YCksIGV4dHJhY3RzIGNvbW1vbiBpbml0IGludG8gYF9feXQ4NTIxX2NvbmZpZ19pbml0YCwgYWRkcyBHTUlJIG1vZGUgY29uZmlndXJhdGlvbiBmb3IgWVQ4NTMxUyBieSBlbmFibGluZyB0aGUgYW5hbG9nIGZyb250LWVuZCBEQUMgY2xvY2sgYW5kIGZpeGVzIHRoZSBSR01JSSBkcml2ZSBzdHJlbmd0aCBzZXR0aW5nIHBhdGguIFRoaXMgaXMgbW9yZSB0aGFuIGp1c3QgYSBtaW5vciB0d2VhazsgdGhlcmUgaXMgZnVuY3Rpb25hbCBjaGFuZ2UsIHNvIHllcywgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlxuXG5NeSBDT05GSUcgZGVwZW5kZW5jaWVzIGFyZSBhbHNvIGNvbmZpcm1lZDogYE1PVE9SQ09NTV9QSFlgLCBgUEhZTElCYCwgYW5kIGBORVRERVZJQ0VTYC4gSSBub3cgaGF2ZSBhbGwgdGhlIGluZm9ybWF0aW9uIHJlcXVpcmVkLiBJJ2xsIGNvbnN0cnVjdCB0aGUgYHNldC1yZXN1bHRzYCBhY2NvcmRpbmdseTogYFdvcnRoRnV6emluZ2Agc2V0IHRvIGB0cnVlYCwgYSBjbGVhciBleHBsYW5hdGlvbiBvZiB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFuZCBob3cgdGhleSBhcmUgcmVhY2hhYmxlIGFzIHRoZSByZWFzb25pbmcsIHRoZSBgRm9jdXNTeW1ib2xzYCBhcyBgW1wieXQ4NTMxc19jb25maWdfaW5pdFwiLCBcInl0ODUyMV9jb25maWdfaW5pdFwiXWAsIGFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIHNldCB0byBgW1wiTU9UT1JDT01NX1BIWVwiLCBcIlBIWUxJQlwiLCBcIk5FVERFVklDRVNcIl1gLiBUaGlzIHNob3VsZCBiZSBhIHJvYnVzdCBhbmQgZGVmZW5zaWJsZSBjaG9pY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NDM1LCJPdXRwdXRUb2tlbnMiOjE1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU1OjI0Ljc5NTE4ODE3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE1MTkyMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1PVE9SQ09NTV9QSFlcIixcbiAgICBcIlBIWUxJQlwiLFxuICAgIFwiTkVUREVWSUNFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInl0ODUzMXNfY29uZmlnX2luaXRcIixcbiAgICBcInl0ODUyMV9jb25maWdfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBkZWRpY2F0ZWQgaW5pdGlhbGl6YXRpb24gY2FsbGJhY2sgeXQ4NTMxc19jb25maWdfaW5pdCBmb3IgdGhlIE1vdG9yY29tbSBZVDg1MzFTIEV0aGVybmV0IFBIWSwgZmFjdG9yaW5nIGNvbW1vbiBpbml0aWFsaXphdGlvbiBpbnRvIF9feXQ4NTIxX2NvbmZpZ19pbml0IGFuZCBhZGRpbmcgc3VwcG9ydCBmb3IgZW5hYmxpbmcgdGhlIGFuYWxvZyBmcm9udC1lbmQgREFDIGNsb2NrIHdoZW4gb3BlcmF0aW5nIGluIEdNSUkgbW9kZS4gVGhlc2UgY2hhbmdlcyBhbHRlciBkcml2ZXIgY29uZmlndXJhdGlvbiBmbG93IGFuZCBjYW4gYmUgZXhlY3V0ZWQgdmlhIE1ESU8gLyBwaHlsaWIgdGhyb3VnaCBlbXVsYXRlZCBVU0Igb3IgbmV0d29yayBjb250cm9sbGVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNT1RPUkNPTU1fUEhZXCIsXG4gICAgXCJQSFlMSUJcIixcbiAgICBcIk5FVERFVklDRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ5dDg1MzFzX2NvbmZpZ19pbml0XCIsXG4gICAgXCJ5dDg1MjFfY29uZmlnX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZGVkaWNhdGVkIGluaXRpYWxpemF0aW9uIGNhbGxiYWNrIHl0ODUzMXNfY29uZmlnX2luaXQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4NTMxUyBFdGhlcm5ldCBQSFksIGZhY3RvcmluZyBjb21tb24gaW5pdGlhbGl6YXRpb24gaW50byBfX3l0ODUyMV9jb25maWdfaW5pdCBhbmQgYWRkaW5nIHN1cHBvcnQgZm9yIGVuYWJsaW5nIHRoZSBhbmFsb2cgZnJvbnQtZW5kIERBQyBjbG9jayB3aGVuIG9wZXJhdGluZyBpbiBHTUlJIG1vZGUuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgZHJpdmVyIGNvbmZpZ3VyYXRpb24gZmxvdyBhbmQgY2FuIGJlIGV4ZWN1dGVkIHZpYSBNRElPIC8gcGh5bGliIHRocm91Z2ggZW11bGF0ZWQgVVNCIG9yIG5ldHdvcmsgY29udHJvbGxlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU1OjI0Ljg2NjcxMzIzN1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzODAxNTQ0NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzo1NToyNC44NjcxNjE3NDdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxODM3OTcwMTcyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1vdG9yY29tbSBQSFkgZHJpdmVyIChkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMpIGJ5IHJlZmFjdG9yaW5nIFBIWSBjb25maWd1cmF0aW9uIGxvZ2ljIGFuZCBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFlUODUzMVMgUEhZIGNvbmZpZyBpbml0IGNhbGxiYWNrICh5dDg1MzFzX2NvbmZpZ19pbml0KSwgd2hpY2ggcGVyZm9ybXMgaGFyZHdhcmUgcmVnaXN0ZXIgcmVhZHMvd3JpdGVzIHZpYSBNRElPLiBUaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBoYXJkd2FyZSByZWdpc3RlciBhY2Nlc3MgY29udHJvbCBmbG93IGFuZCBsb2NhbCBpbnRlZ2VyIHJldHVybiBjb2RlczsgdGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXJzLCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBTdGFuZGFyZCBLQVNBTiBhbmQgZ2VuZXJhbCBrZXJuZWwgdGVzdGluZyBhcmUgc3VmZmljaWVudCwgYW5kIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIHRoYXQgd291bGQgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDEzODA2ZmI0ZTY3ZDAyYjc4MWU1YzQ5NWRhMDk0NjNmNzZlODhmNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDA3OjU0OjAyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG5pbmRleCBjNWEyY2RhOGQzMWJkLi45MGE0Zjg2ZjI3NThiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbkBAIC0xNDQsNiArMTQ0LDExIEBAXG4gI2RlZmluZSBZVDg1MjFfQ0xPQ0tfR0FUSU5HX1JFR1x0XHRcdDB4Q1xuICNkZWZpbmUgWVQ4NTIxX0NHUl9SWF9DTEtfRU5cdFx0XHRCSVQoMTIpXG4gXG4rLyogQW5hbG9nIGZyb250LWVuZCBjb250cm9sIHJlZ2lzdGVyIDMgKi9cbisjZGVmaW5lIFlUODUzMVNfRVhUX0FGRV9DVFJMM1x0XHRcdDB4MTJcbisvKiBBbmFsb2cgZnJvbnQtZW5kIERBQyBjbG9jayBlbmFibGUgKi9cbisjZGVmaW5lIFlUODUzMVNfQUZFX0NUUkwzX0NMS0RBQ19BT05cdFx0QklUKDEzKVxuK1xuICNkZWZpbmUgWVQ4NTIxX0VYVFJFR19TTEVFUF9DT05UUk9MMV9SRUdcdDB4MjdcbiAjZGVmaW5lIFlUODUyMV9FU0MxUl9TTEVFUF9TV1x0XHRcdEJJVCgxNSlcbiAjZGVmaW5lIFlUODUyMV9FU0MxUl9QTExPTl9TTFBcdFx0XHRCSVQoMTQpXG5AQCAtMTY4MCwyNyArMTY4NSwxNiBAQCBzdGF0aWMgaW50IHl0ODUyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdHJldHVybiB5dDg1MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7XG4gfVxuIFxuLS8qKlxuLSAqIHl0ODUyMV9jb25maWdfaW5pdCgpIC0gY2FsbGVkIHRvIGluaXRpYWxpemUgdGhlIFBIWVxuLSAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4tICpcbi0gKiByZXR1cm5zIDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuLSAqL1xuLXN0YXRpYyBpbnQgeXQ4NTIxX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4rc3RhdGljIGludCBfX3l0ODUyMV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbi1cdGludCBvbGRfcGFnZTtcbiBcdGludCByZXQgPSAwO1xuIFxuLVx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg1MjFfUlNTUl9VVFBfU1BBQ0UpO1xuLVx0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4tXG4gXHQvKiBzZXQgcmdtaWkgZGVsYXkgbW9kZSAqL1xuIFx0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKSB7XG4gXHRcdHJldCA9IHl0cGh5X3JnbWlpX2Nsa19kZWxheV9jb25maWcocGh5ZGV2KTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbiBcdGlmIChkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29sKGRldiwgXCJtb3RvcmNvbW0sYXV0by1zbGVlcC1kaXNhYmxlZFwiKSkge1xuQEAgLTE3MDgsMjAgKzE3MDIsNTggQEAgc3RhdGljIGludCB5dDg1MjFfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdFx0cmV0ID0geXRwaHlfbW9kaWZ5X2V4dChwaHlkZXYsIFlUODUyMV9FWFRSRUdfU0xFRVBfQ09OVFJPTDFfUkVHLFxuIFx0XHRcdFx0ICAgICAgIFlUODUyMV9FU0MxUl9TTEVFUF9TVywgMCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0XHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4tXHRpZiAoZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYsIFwibW90b3Jjb21tLGtlZXAtcGxsLWVuYWJsZWRcIikpIHtcbitcdGlmIChkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29sKGRldiwgXCJtb3RvcmNvbW0sa2VlcC1wbGwtZW5hYmxlZFwiKSlcbiBcdFx0LyogZW5hYmxlIFJYQyBjbG9jayB3aGVuIG5vIHdpcmUgcGx1ZyAqL1xuLVx0XHRyZXQgPSB5dHBoeV9tb2RpZnlfZXh0KHBoeWRldiwgWVQ4NTIxX0NMT0NLX0dBVElOR19SRUcsXG4tXHRcdFx0XHQgICAgICAgWVQ4NTIxX0NHUl9SWF9DTEtfRU4sIDApO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4geXRwaHlfbW9kaWZ5X2V4dChwaHlkZXYsIFlUODUyMV9DTE9DS19HQVRJTkdfUkVHLFxuK1x0XHRcdFx0XHRZVDg1MjFfQ0dSX1JYX0NMS19FTiwgMCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogeXQ4NTIxX2NvbmZpZ19pbml0KCkgLSBjYWxsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgUEhZXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg1MjFfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgb2xkX3BhZ2UsIHJldCA9IDA7XG4rXG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODUyMV9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IF9feXQ4NTIxX2NvbmZpZ19pbml0KHBoeWRldik7XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeXQ4NTMxc19jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBvbGRfcGFnZSwgcmV0ID0gMDtcbitcbitcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4NTIxX1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0gX195dDg1MjFfY29uZmlnX2luaXQocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdGlmIChwaHlfaW50ZXJmYWNlX2lzX3JnbWlpKHBoeWRldikpIHtcbitcdFx0cmV0ID0geXQ4NTMxX3NldF9kcyhwaHlkZXYpO1xuK1x0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiBcdH1cbiBcbi1cdGlmIChwaHlfaW50ZXJmYWNlX2lzX3JnbWlpKHBoeWRldikgXHUwMDI2XHUwMDI2XG4tXHQgICAgcGh5ZGV2X2lkX2NvbXBhcmUocGh5ZGV2LCBQSFlfSURfWVQ4NTMxUykpXG4tXHRcdHJldCA9IHl0ODUzMV9zZXRfZHMocGh5ZGV2KTtcbitcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJKVxuK1x0XHRyZXQgPSB5dHBoeV9tb2RpZnlfZXh0KHBoeWRldiwgWVQ4NTMxU19FWFRfQUZFX0NUUkwzLFxuK1x0XHRcdFx0ICAgICAgIDAsIFlUODUzMVNfQUZFX0NUUkwzX0NMS0RBQ19BT04pO1xuIFxuIGVycl9yZXN0b3JlX3BhZ2U6XG4gXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuQEAgLTMxMzUsNyArMzE2Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcbiBcdFx0LnNldF93b2xcdD0geXRwaHlfc2V0X3dvbCxcbiBcdFx0LmNvbmZpZ19hbmVnXHQ9IHl0ODUyMV9jb25maWdfYW5lZyxcbiBcdFx0LmFuZWdfZG9uZVx0PSB5dDg1MjFfYW5lZ19kb25lLFxuLVx0XHQuY29uZmlnX2luaXRcdD0geXQ4NTIxX2NvbmZpZ19pbml0LFxuK1x0XHQuY29uZmlnX2luaXRcdD0geXQ4NTMxc19jb25maWdfaW5pdCxcbiBcdFx0LnJlYWRfc3RhdHVzXHQ9IHl0ODUyMV9yZWFkX3N0YXR1cyxcbiBcdFx0LnNvZnRfcmVzZXRcdD0geXQ4NTIxX3NvZnRfcmVzZXQsXG4gXHRcdC5zdXNwZW5kXHQ9IHl0ODUyMV9zdXNwZW5kLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6NTU6MjQuODY3MTYyNTQ3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4Mzc5Njc3OTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE1vdG9yY29tbSBQSFkgRHJpdmVyIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciB0aGUgTW90b3Jjb21tIFBIWSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB3aGV0aGVyIGl0IHdhcnJhbnRzIGEgS01TQU4gY2hlY2suIEkgc2VlIGl0IHRvdWNoZXMgYGRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY2AuIFRoZSBjaGFuZ2VzIGludm9sdmU6IGFkZGluZyBhIGZldyBtYWNyb3MgKGBZVDg1MzFTX0VYVF9BRkVfQ1RSTDNgLCBgWVQ4NTMxU19BRkVfQ1RSTDNfQ0xLREFDX0FPTmApLCByZWZhY3RvcmluZyB0aGUgYHl0ODUyMV9jb25maWdfaW5pdGAgZnVuY3Rpb24sIGFuZCBpbnRyb2R1Y2luZyBgeXQ4NTMxc19jb25maWdfaW5pdGAgZm9yIHRoZSBZVDg1MzFTIFBIWS4gVGhlIGBjb25maWdfaW5pdGAgY2FsbGJhY2sgaW4gdGhlIGRyaXZlciB0YWJsZSBpcyBiZWluZyB1cGRhdGVkLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBpcyBoYXJkd2FyZSByZWdpc3RlciBtYW5pcHVsYXRpb24gZm9yIGEgc3BlY2lmaWMgUEhZLCB0aGUgWVQ4NTMxUy4gSXQncyBpbml0aWFsaXppbmcgYW5kIGNvbmZpZ3VyaW5nIHRoZSBkZXZpY2UuIEknbSBzZWVpbmcgcmVnaXN0ZXIgd3JpdGVzIGFuZCBwb3RlbnRpYWxseSBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHRoZSBpbnRlcmZhY2UgdHlwZSAoUkdNSUkvR01JSSkgdG8gYWRqdXN0IGRyaXZlIHN0cmVuZ3RoIG9yIG1vZGlmeSBzcGVjaWZpYyByZWdpc3RlcnMuXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBkb2VzIHRoaXMgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBObyBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGFuZCBubyBkaXJlY3QgZGF0YSB0cmFuc2ZlcnMgdG8gdXNlciBzcGFjZSBlaXRoZXIuIEl0J3MgYWxsIGludGVybmFsIHJlZ2lzdGVyIG1hbmlwdWxhdGlvbiwgbm8gYGNvcHlfdG9fdXNlcmAgb3IgdGhlIGxpa2UsIHdoaWNoIG1lYW5zIEkgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBWYXJpYWJsZXMgbGlrZSBgZGV2YCwgYHJldGAsIGFuZCBgb2xkX3BhZ2VgIGFyZSBzY2FsYXIgdHlwZXMgYW5kIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgd2hpY2ggbWVhbnMgdGhhdCB1bmluaXRpYWxpemVkIHJlYWQgcmlza3MgYXJlIG1pbmltYWwuIFRoZXJlJ3Mgbm8gZXZpZGVudCByaXNrIG9mIGluZm9ybWF0aW9uIGxlYWtzLlxuXG5JJ20gY29tZm9ydGFibGUgd2l0aCB0aGF0LCBzbyBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIGV2ZXJ5dGhpbmcsIHVzaW5nIGEgYHNldC1yZXN1bHRzYCBwcm9jZXNzLlxuXG5BZnRlciBhIHJldmlldywgaXQgbG9va3MgY2xlYXI6IG5vIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSwgc28gbm8gcmlzayB0aGVyZS4gVGhlcmUncyBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG5vciBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucy4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gYW55IGJvdW5kcyBjaGVja3MgdGhhdCBJIGhhdmUgdG8gY29uc2lkZXIgdG8gZW5zdXJlIHRoYXQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNuJ3QgcmV2ZWFsZWQuXG5cblNvLCAqTmVlZHNLTVNBTiogaXMgZGVmaW5pdGl2ZWx5ICpmYWxzZSogaGVyZS4gTm8gS01TQU4gZmxhZ3MuIEl0J3MgYSBjbGVhbiBwYXRjaC5cblxuSSdsbCB3cml0ZSB1cCBzb21lIGJyaWVmIEtNU0FOIHJlYXNvbmluZywgY29udHJhc3RpbmcgS01TQU4gd2l0aCBLQVNBTiwgYXMgYSBjb3VydGVzeSwgYW5kIEkgY2FuIG1vdmUgb24gdG8gdGhlIG5leHQgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTg1LCJPdXRwdXRUb2tlbnMiOjE2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU1OjQzLjI0Njg0MzM1OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1vdG9yY29tbSBQSFkgZHJpdmVyIChkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMpIGJ5IHJlZmFjdG9yaW5nIFBIWSBjb25maWd1cmF0aW9uIGxvZ2ljIGFuZCBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFlUODUzMVMgUEhZIGNvbmZpZyBpbml0IGNhbGxiYWNrICh5dDg1MzFzX2NvbmZpZ19pbml0KSwgd2hpY2ggcGVyZm9ybXMgaGFyZHdhcmUgcmVnaXN0ZXIgcmVhZHMvd3JpdGVzIHZpYSBNRElPLiBUaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBoYXJkd2FyZSByZWdpc3RlciBhY2Nlc3MgY29udHJvbCBmbG93IGFuZCBsb2NhbCBpbnRlZ2VyIHJldHVybiBjb2RlczsgdGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXJzLCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBTdGFuZGFyZCBLQVNBTiBhbmQgZ2VuZXJhbCBrZXJuZWwgdGVzdGluZyBhcmUgc3VmZmljaWVudCwgYW5kIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIHRoYXQgd291bGQgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1vdG9yY29tbSBQSFkgZHJpdmVyIChkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMpIGJ5IHJlZmFjdG9yaW5nIFBIWSBjb25maWd1cmF0aW9uIGxvZ2ljIGFuZCBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFlUODUzMVMgUEhZIGNvbmZpZyBpbml0IGNhbGxiYWNrICh5dDg1MzFzX2NvbmZpZ19pbml0KSwgd2hpY2ggcGVyZm9ybXMgaGFyZHdhcmUgcmVnaXN0ZXIgcmVhZHMvd3JpdGVzIHZpYSBNRElPLiBUaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBoYXJkd2FyZSByZWdpc3RlciBhY2Nlc3MgY29udHJvbCBmbG93IGFuZCBsb2NhbCBpbnRlZ2VyIHJldHVybiBjb2RlczsgdGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXJzLCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBTdGFuZGFyZCBLQVNBTiBhbmQgZ2VuZXJhbCBrZXJuZWwgdGVzdGluZyBhcmUgc3VmZmljaWVudCwgYW5kIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIHRoYXQgd291bGQgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqtt8x[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 07:40:14 +0000 UTC FinishedAt: 2026-08-31 07:55:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MOTORCOMM_PHY", "PHYLIB", "NETDEVICES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MOTORCOMM_PHY", "PHYLIB", "NETDEVICES" ], "series_id": "44bebf95-128e-4f98-b843-98f2540ed871" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "yt8531s_config_init", "yt8521_config_init" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01PVE9SQ09NTV9QSFkmIzM0OywKICAgICYjMzQ7UEhZTElCJiMzNDssCiAgICAmIzM0O05FVERFVklDRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt5dDg1MzFzX2NvbmZpZ19pbml0JiMzNDssCiAgICAmIzM0O3l0ODUyMV9jb25maWdfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNb3RvcmNvbW0gUEhZIGRyaXZlciAoZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jKSBieSByZWZhY3RvcmluZyBQSFkgY29uZmlndXJhdGlvbiBsb2dpYyBhbmQgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBZVDg1MzFTIFBIWSBjb25maWcgaW5pdCBjYWxsYmFjayAoeXQ4NTMxc19jb25maWdfaW5pdCksIHdoaWNoIHBlcmZvcm1zIGhhcmR3YXJlIHJlZ2lzdGVyIHJlYWRzL3dyaXRlcyB2aWEgTURJTy4gVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgaGFyZHdhcmUgcmVnaXN0ZXIgYWNjZXNzIGNvbnRyb2wgZmxvdyBhbmQgbG9jYWwgaW50ZWdlciByZXR1cm4gY29kZXM7IHRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVycywgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gU3RhbmRhcmQgS0FTQU4gYW5kIGdlbmVyYWwga2VybmVsIHRlc3RpbmcgYXJlIHN1ZmZpY2llbnQsIGFuZCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyB0aGF0IHdvdWxkIHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZGVkaWNhdGVkIGluaXRpYWxpemF0aW9uIGNhbGxiYWNrIHl0ODUzMXNfY29uZmlnX2luaXQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4NTMxUyBFdGhlcm5ldCBQSFksIGZhY3RvcmluZyBjb21tb24gaW5pdGlhbGl6YXRpb24gaW50byBfX3l0ODUyMV9jb25maWdfaW5pdCBhbmQgYWRkaW5nIHN1cHBvcnQgZm9yIGVuYWJsaW5nIHRoZSBhbmFsb2cgZnJvbnQtZW5kIERBQyBjbG9jayB3aGVuIG9wZXJhdGluZyBpbiBHTUlJIG1vZGUuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgZHJpdmVyIGNvbmZpZ3VyYXRpb24gZmxvdyBhbmQgY2FuIGJlIGV4ZWN1dGVkIHZpYSBNRElPIC8gcGh5bGliIHRocm91Z2ggZW11bGF0ZWQgVVNCIG9yIG5ldHdvcmsgY29udHJvbGxlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6NTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0MTM4MDZmYjRlNjdkMDJiNzgxZTVjNDk1ZGEwOTQ2M2Y3NmU4OGY0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDc6NTQ6MDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG5pbmRleCBjNWEyY2RhOGQzMWJkLi45MGE0Zjg2ZjI3NThiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbkBAIC0xNDQsNiAmIzQzOzE0NCwxMSBAQFxuICNkZWZpbmUgWVQ4NTIxX0NMT0NLX0dBVElOR19SRUdcdFx0XHQweENcbiAjZGVmaW5lIFlUODUyMV9DR1JfUlhfQ0xLX0VOXHRcdFx0QklUKDEyKVxuIFxuJiM0MzsvKiBBbmFsb2cgZnJvbnQtZW5kIGNvbnRyb2wgcmVnaXN0ZXIgMyAqL1xuJiM0MzsjZGVmaW5lIFlUODUzMVNfRVhUX0FGRV9DVFJMM1x0XHRcdDB4MTJcbiYjNDM7LyogQW5hbG9nIGZyb250LWVuZCBEQUMgY2xvY2sgZW5hYmxlICovXG4mIzQzOyNkZWZpbmUgWVQ4NTMxU19BRkVfQ1RSTDNfQ0xLREFDX0FPTlx0XHRCSVQoMTMpXG4mIzQzO1xuICNkZWZpbmUgWVQ4NTIxX0VYVFJFR19TTEVFUF9DT05UUk9MMV9SRUdcdDB4MjdcbiAjZGVmaW5lIFlUODUyMV9FU0MxUl9TTEVFUF9TV1x0XHRcdEJJVCgxNSlcbiAjZGVmaW5lIFlUODUyMV9FU0MxUl9QTExPTl9TTFBcdFx0XHRCSVQoMTQpXG5AQCAtMTY4MCwyNyAmIzQzOzE2ODUsMTYgQEAgc3RhdGljIGludCB5dDg1MjFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRyZXR1cm4geXQ4NTIxX21vZGlmeV91dHBfZmliZXJfYm1jcihwaHlkZXYsIEJNQ1JfUERPV04sIDApO1xuIH1cbiBcbi0vKipcbi0gKiB5dDg1MjFfY29uZmlnX2luaXQoKSAtIGNhbGxlZCB0byBpbml0aWFsaXplIHRoZSBQSFlcbi0gKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuLSAqXG4tICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbi0gKi9cbi1zdGF0aWMgaW50IHl0ODUyMV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0MztzdGF0aWMgaW50IF9feXQ4NTIxX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuIFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuLVx0aW50IG9sZF9wYWdlO1xuIFx0aW50IHJldCA9IDA7XG4gXG4tXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODUyMV9SU1NSX1VUUF9TUEFDRSk7XG4tXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4tXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbi1cbiBcdC8qIHNldCByZ21paSBkZWxheSBtb2RlICovXG4gXHRpZiAocGh5ZGV2LVx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHtcbiBcdFx0cmV0ID0geXRwaHlfcmdtaWlfY2xrX2RlbGF5X2NvbmZpZyhwaHlkZXYpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbiBcdGlmIChkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29sKGRldiwgXCYjMzQ7bW90b3Jjb21tLGF1dG8tc2xlZXAtZGlzYWJsZWRcJiMzNDspKSB7XG5AQCAtMTcwOCwyMCAmIzQzOzE3MDIsNTggQEAgc3RhdGljIGludCB5dDg1MjFfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdFx0cmV0ID0geXRwaHlfbW9kaWZ5X2V4dChwaHlkZXYsIFlUODUyMV9FWFRSRUdfU0xFRVBfQ09OVFJPTDFfUkVHLFxuIFx0XHRcdFx0ICAgICAgIFlUODUyMV9FU0MxUl9TTEVFUF9TVywgMCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuLVx0aWYgKGRldmljZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LCBcJiMzNDttb3RvcmNvbW0sa2VlcC1wbGwtZW5hYmxlZFwmIzM0OykpIHtcbiYjNDM7XHRpZiAoZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYsIFwmIzM0O21vdG9yY29tbSxrZWVwLXBsbC1lbmFibGVkXCYjMzQ7KSlcbiBcdFx0LyogZW5hYmxlIFJYQyBjbG9jayB3aGVuIG5vIHdpcmUgcGx1ZyAqL1xuLVx0XHRyZXQgPSB5dHBoeV9tb2RpZnlfZXh0KHBoeWRldiwgWVQ4NTIxX0NMT0NLX0dBVElOR19SRUcsXG4tXHRcdFx0XHQgICAgICAgWVQ4NTIxX0NHUl9SWF9DTEtfRU4sIDApO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHl0cGh5X21vZGlmeV9leHQocGh5ZGV2LCBZVDg1MjFfQ0xPQ0tfR0FUSU5HX1JFRyxcbiYjNDM7XHRcdFx0XHRcdFlUODUyMV9DR1JfUlhfQ0xLX0VOLCAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg1MjFfY29uZmlnX2luaXQoKSAtIGNhbGxlZCB0byBpbml0aWFsaXplIHRoZSBQSFlcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4NTIxX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgb2xkX3BhZ2UsIHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4NTIxX1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9feXQ4NTIxX2NvbmZpZ19pbml0KHBoeWRldik7XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgeXQ4NTMxc19jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9sZF9wYWdlLCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODUyMV9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX3l0ODUyMV9jb25maWdfaW5pdChwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlfaW50ZXJmYWNlX2lzX3JnbWlpKHBoeWRldikpIHtcbiYjNDM7XHRcdHJldCA9IHl0ODUzMV9zZXRfZHMocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQpXG4gXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuIFx0fVxuIFxuLVx0aWYgKHBoeV9pbnRlcmZhY2VfaXNfcmdtaWkocGh5ZGV2KSBcdTAwMjZcdTAwMjZcbi1cdCAgICBwaHlkZXZfaWRfY29tcGFyZShwaHlkZXYsIFBIWV9JRF9ZVDg1MzFTKSlcbi1cdFx0cmV0ID0geXQ4NTMxX3NldF9kcyhwaHlkZXYpO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJKVxuJiM0MztcdFx0cmV0ID0geXRwaHlfbW9kaWZ5X2V4dChwaHlkZXYsIFlUODUzMVNfRVhUX0FGRV9DVFJMMyxcbiYjNDM7XHRcdFx0XHQgICAgICAgMCwgWVQ4NTMxU19BRkVfQ1RSTDNfQ0xLREFDX0FPTik7XG4gXG4gZXJyX3Jlc3RvcmVfcGFnZTpcbiBcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG5AQCAtMzEzNSw3ICYjNDM7MzE2Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcbiBcdFx0LnNldF93b2xcdD0geXRwaHlfc2V0X3dvbCxcbiBcdFx0LmNvbmZpZ19hbmVnXHQ9IHl0ODUyMV9jb25maWdfYW5lZyxcbiBcdFx0LmFuZWdfZG9uZVx0PSB5dDg1MjFfYW5lZ19kb25lLFxuLVx0XHQuY29uZmlnX2luaXRcdD0geXQ4NTIxX2NvbmZpZ19pbml0LFxuJiM0MztcdFx0LmNvbmZpZ19pbml0XHQ9IHl0ODUzMXNfY29uZmlnX2luaXQsXG4gXHRcdC5yZWFkX3N0YXR1c1x0PSB5dDg1MjFfcmVhZF9zdGF0dXMsXG4gXHRcdC5zb2Z0X3Jlc2V0XHQ9IHl0ODUyMV9zb2Z0X3Jlc2V0LFxuIFx0XHQuc3VzcGVuZFx0PSB5dDg1MjFfc3VzcGVuZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNT1RPUkNPTU1fUEhZJiMzNDssCiAgICAmIzM0O1BIWUxJQiYjMzQ7LAogICAgJiMzNDtORVRERVZJQ0VTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eXQ4NTMxc19jb25maWdfaW5pdCYjMzQ7LAogICAgJiMzNDt5dDg1MjFfY29uZmlnX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlZGljYXRlZCBpbml0aWFsaXphdGlvbiBjYWxsYmFjayB5dDg1MzFzX2NvbmZpZ19pbml0IGZvciB0aGUgTW90b3Jjb21tIFlUODUzMVMgRXRoZXJuZXQgUEhZLCBmYWN0b3JpbmcgY29tbW9uIGluaXRpYWxpemF0aW9uIGludG8gX195dDg1MjFfY29uZmlnX2luaXQgYW5kIGFkZGluZyBzdXBwb3J0IGZvciBlbmFibGluZyB0aGUgYW5hbG9nIGZyb250LWVuZCBEQUMgY2xvY2sgd2hlbiBvcGVyYXRpbmcgaW4gR01JSSBtb2RlLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGRyaXZlciBjb25maWd1cmF0aW9uIGZsb3cgYW5kIGNhbiBiZSBleGVjdXRlZCB2aWEgTURJTyAvIHBoeWxpYiB0aHJvdWdoIGVtdWxhdGVkIFVTQiBvciBuZXR3b3JrIGNvbnRyb2xsZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDEzODA2ZmI0ZTY3ZDAyYjc4MWU1YzQ5NWRhMDk0NjNmNzZlODhmNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDA3OjU0OjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jCmluZGV4IGM1YTJjZGE4ZDMxYmQuLjkwYTRmODZmMjc1OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMKQEAgLTE0NCw2ICYjNDM7MTQ0LDExIEBACiAjZGVmaW5lIFlUODUyMV9DTE9DS19HQVRJTkdfUkVHCQkJMHhDCiAjZGVmaW5lIFlUODUyMV9DR1JfUlhfQ0xLX0VOCQkJQklUKDEyKQogCiYjNDM7LyogQW5hbG9nIGZyb250LWVuZCBjb250cm9sIHJlZ2lzdGVyIDMgKi8KJiM0MzsjZGVmaW5lIFlUODUzMVNfRVhUX0FGRV9DVFJMMwkJCTB4MTIKJiM0MzsvKiBBbmFsb2cgZnJvbnQtZW5kIERBQyBjbG9jayBlbmFibGUgKi8KJiM0MzsjZGVmaW5lIFlUODUzMVNfQUZFX0NUUkwzX0NMS0RBQ19BT04JCUJJVCgxMykKJiM0MzsKICNkZWZpbmUgWVQ4NTIxX0VYVFJFR19TTEVFUF9DT05UUk9MMV9SRUcJMHgyNwogI2RlZmluZSBZVDg1MjFfRVNDMVJfU0xFRVBfU1cJCQlCSVQoMTUpCiAjZGVmaW5lIFlUODUyMV9FU0MxUl9QTExPTl9TTFAJCQlCSVQoMTQpCkBAIC0xNjgwLDI3ICYjNDM7MTY4NSwxNiBAQCBzdGF0aWMgaW50IHl0ODUyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAlyZXR1cm4geXQ4NTIxX21vZGlmeV91dHBfZmliZXJfYm1jcihwaHlkZXYsIEJNQ1JfUERPV04sIDApOwogfQogCi0vKioKLSAqIHl0ODUyMV9jb25maWdfaW5pdCgpIC0gY2FsbGVkIHRvIGluaXRpYWxpemUgdGhlIFBIWQotICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQotICoKLSAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCi0gKi8KLXN0YXRpYyBpbnQgeXQ4NTIxX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7c3RhdGljIGludCBfX3l0ODUyMV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGh5ZGV2LSZndDttZGlvLmRldjsKLQlpbnQgb2xkX3BhZ2U7CiAJaW50IHJldCA9IDA7CiAKLQlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODUyMV9SU1NSX1VUUF9TUEFDRSk7Ci0JaWYgKG9sZF9wYWdlICZsdDsgMCkKLQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwotCiAJLyogc2V0IHJnbWlpIGRlbGF5IG1vZGUgKi8KIAlpZiAocGh5ZGV2LSZndDtpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKSB7CiAJCXJldCA9IHl0cGh5X3JnbWlpX2Nsa19kZWxheV9jb25maWcocGh5ZGV2KTsKIAkJaWYgKHJldCAmbHQ7IDApCi0JCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQkJcmV0dXJuIHJldDsKIAl9CiAKIAlpZiAoZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYsICYjMzQ7bW90b3Jjb21tLGF1dG8tc2xlZXAtZGlzYWJsZWQmIzM0OykpIHsKQEAgLTE3MDgsMjAgJiM0MzsxNzAyLDU4IEBAIHN0YXRpYyBpbnQgeXQ4NTIxX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJCXJldCA9IHl0cGh5X21vZGlmeV9leHQocGh5ZGV2LCBZVDg1MjFfRVhUUkVHX1NMRUVQX0NPTlRST0wxX1JFRywKIAkJCQkgICAgICAgWVQ4NTIxX0VTQzFSX1NMRUVQX1NXLCAwKTsKIAkJaWYgKHJldCAmbHQ7IDApCi0JCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQkJcmV0dXJuIHJldDsKIAl9CiAKLQlpZiAoZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYsICYjMzQ7bW90b3Jjb21tLGtlZXAtcGxsLWVuYWJsZWQmIzM0OykpIHsKJiM0MzsJaWYgKGRldmljZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LCAmIzM0O21vdG9yY29tbSxrZWVwLXBsbC1lbmFibGVkJiMzNDspKQogCQkvKiBlbmFibGUgUlhDIGNsb2NrIHdoZW4gbm8gd2lyZSBwbHVnICovCi0JCXJldCA9IHl0cGh5X21vZGlmeV9leHQocGh5ZGV2LCBZVDg1MjFfQ0xPQ0tfR0FUSU5HX1JFRywKLQkJCQkgICAgICAgWVQ4NTIxX0NHUl9SWF9DTEtfRU4sIDApOwotCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiB5dHBoeV9tb2RpZnlfZXh0KHBoeWRldiwgWVQ4NTIxX0NMT0NLX0dBVElOR19SRUcsCiYjNDM7CQkJCQlZVDg1MjFfQ0dSX1JYX0NMS19FTiwgMCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg1MjFfY29uZmlnX2luaXQoKSAtIGNhbGxlZCB0byBpbml0aWFsaXplIHRoZSBQSFkKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiByZXR1cm5zIDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4NTIxX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2UsIHJldCA9IDA7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4NTIxX1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKG9sZF9wYWdlICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0gX195dDg1MjFfY29uZmlnX2luaXQocGh5ZGV2KTsKJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHl0ODUzMXNfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBvbGRfcGFnZSwgcmV0ID0gMDsKJiM0MzsKJiM0MzsJb2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg1MjFfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBfX3l0ODUyMV9jb25maWdfaW5pdChwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlpZiAocGh5X2ludGVyZmFjZV9pc19yZ21paShwaHlkZXYpKSB7CiYjNDM7CQlyZXQgPSB5dDg1MzFfc2V0X2RzKHBoeWRldik7CiYjNDM7CQlpZiAocmV0KQogCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwogCX0KIAotCWlmIChwaHlfaW50ZXJmYWNlX2lzX3JnbWlpKHBoeWRldikgJmFtcDsmYW1wOwotCSAgICBwaHlkZXZfaWRfY29tcGFyZShwaHlkZXYsIFBIWV9JRF9ZVDg1MzFTKSkKLQkJcmV0ID0geXQ4NTMxX3NldF9kcyhwaHlkZXYpOwomIzQzOwlpZiAocGh5ZGV2LSZndDtpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkpCiYjNDM7CQlyZXQgPSB5dHBoeV9tb2RpZnlfZXh0KHBoeWRldiwgWVQ4NTMxU19FWFRfQUZFX0NUUkwzLAomIzQzOwkJCQkgICAgICAgMCwgWVQ4NTMxU19BRkVfQ1RSTDNfQ0xLREFDX0FPTik7CiAKIGVycl9yZXN0b3JlX3BhZ2U6CiAJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKQEAgLTMxMzUsNyAmIzQzOzMxNjcsNyBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7CiAJCS5zZXRfd29sCT0geXRwaHlfc2V0X3dvbCwKIAkJLmNvbmZpZ19hbmVnCT0geXQ4NTIxX2NvbmZpZ19hbmVnLAogCQkuYW5lZ19kb25lCT0geXQ4NTIxX2FuZWdfZG9uZSwKLQkJLmNvbmZpZ19pbml0CT0geXQ4NTIxX2NvbmZpZ19pbml0LAomIzQzOwkJLmNvbmZpZ19pbml0CT0geXQ4NTMxc19jb25maWdfaW5pdCwKIAkJLnJlYWRfc3RhdHVzCT0geXQ4NTIxX3JlYWRfc3RhdHVzLAogCQkuc29mdF9yZXNldAk9IHl0ODUyMV9zb2Z0X3Jlc2V0LAogCQkuc3VzcGVuZAk9IHl0ODUyMV9zdXNwZW5kLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTg4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCYjMzk7cyBldmVuIHdvcnRoIGNvbnNpZGVyaW5nIGZvciBmdXp6aW5nLiBUaGUgY2hhbmdlIGlzIGluIGBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNgLCBzbyBteSBmaXJzdCB0aG91Z2h0IGlzLCAmIzM0O1doYXQmIzM5O3MgdGhhdCBhbGwgYWJvdXQ/JiMzNDsgUmlnaHQsIGl0JiMzOTtzIGEgUEhZIGRyaXZlciDigJMgc3BlY2lmaWNhbGx5LCBmb3IgdGhvc2UgTW90b3Jjb21tIFBIWSBjaGlwcyBsaWtlIHRoZSBZVDg1MTEsIFlUODUyMSwgYW5kIFlUODUzMVMuIE5vdywgdGhlc2UgYXJlIE1ESU8gRXRoZXJuZXQgUEhZIGRyaXZlcnMsIGFuZCB0aGV5IGxpdmUgd2l0aGluIGBkcml2ZXJzL25ldC9waHkvYC4KClRoZSBiaWcgcXVlc3Rpb24sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGNhbiBiZSByZWFjaGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIENhbiBJIGdldCB0byB0aGlzIHN0dWZmIGluIFFFTVUgb3IgR0NFPyBPciBhbSBJIGdvaW5nIHRvIGJlIHN0dWNrIG5lZWRpbmcgc3BlY2lmaWMgcGh5c2ljYWwgRXRoZXJuZXQgaGFyZHdhcmUgYW5kIGFuIE1ESU8gYnVzPwoKSG9sZCBvbiwgbGV0JiMzOTtzIHJldmlldyB0aGUgcnVsZXMuIFdlIGRvbiYjMzk7dCB3YW50IHRvIHdhc3RlIHRpbWUgb24gdGhpbmdzIHRoYXQgYXJlIG9idmlvdXNseSBvZmYtbGltaXRzLiBUaGUgZ3VpZGVsaW5lcyBhcmUgcHJldHR5IGNsZWFyOiBEb2N1bWVudGF0aW9uIGNoYW5nZXMsIGxvZ2dpbmcgdHdlYWtzLCBub24tZnVuY3Rpb25hbCBjb25zdGFudCBjaGFuZ2VzLCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLiBhbmQgc3R1ZmYgdGhhdCBuZWVkcyBzcGVjaWFsaXplZCBoYXJkd2FyZS4gR2l2ZW4gdGhhdCB0aGlzIGlzIGEgUEhZIGRyaXZlciwgaXQmIzM5O3MgcHJldHR5IGxpa2VseSB3ZSBhcmUgZ29pbmcgdG8gbmVlZCB0aGUgaGFyZHdhcmUuCgpTbywgYmFjayB0byBgbW90b3Jjb21tLmNgLiBJdCYjMzk7cyBkZWZpbml0ZWx5IGZvciB0aG9zZSBkaXNjcmV0ZSBQSFkgY2hpcHMsIHJpZ2h0PyBZVDg1MTEsIHRoYXQgc29ydCBvZiB0aGluZywgYWxsIGhhbmdpbmcgb2ZmIGFuIE1ESU8gYnVzLiBDYW4gSSBlbXVsYXRlIHRoYXQ/IElzIHRoZXJlIHNvbWUgdmlydHVhbCBNRElPIG1hZ2ljIG91dCB0aGVyZSwgb3IgYW0gSSBjb21wbGV0ZWx5IGhhcmR3YXJlLWRlcGVuZGVudCBoZXJlPyBJJiMzOTttIGdvaW5nIHRvIGRvIGEgcXVpY2sgc2VhcmNoIGluIHRoZSBjb2RlYmFzZSBmb3IgYG1vdG9yY29tbWAgb3IgYE1PVE9SQ09NTV9QSFlgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgaGludCBvZiB2aXJ0dWFsaXphdGlvbiBzdXBwb3J0LiBIb3BlZnVsbHksIHRoZSByZXN1bHRzIHBvaW50IHRvIHNvbWUgdmlydHVhbCBNRElPIC8gbW9jayBNRElPLiBPdGhlcndpc2UsIEkgd2lsbCBtYXJrIHRoaXMgYXMgKm5vdCogd29ydGggZnV6emluZyBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNT1RPUkNPTU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTM1Mz1jb25maWcgTUlDUk9TRU1JX1BIWVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTM2MS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjM2Mjpjb25maWcgTU9UT1JDT01NX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzYzLVx0dHJpc3RhdGUgXCYjMzQ7TW90b3Jjb21tIFBIWXNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9ODQ9b2JqLSQoQ09ORklHX01JQ1JPU0VNSV9QSFkpXHQmIzQzOz0gbXNjYy9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo4NTpvYmotJChDT05GSUdfTU9UT1JDT01NX1BIWSlcdCYjNDM7PSBtb3RvcmNvbW0ub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTg2LW9iai0kKENPTkZJR19OQVRJT05BTF9QSFkpXHQmIzQzOz0gbmF0aW9uYWwub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NzcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIE1vdG9yY29tbSBQSFkgRHJpdmVyKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNgIHNvdXJjZSBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZHJpdmVyIGlzIGRvaW5nLiBJJiMzOTtsbCBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIHRoZSBgbW90b3Jjb21tX3BoeV9kcnZzYCBkYXRhIHN0cnVjdHVyZS4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBzdGFydGluZyBwb2ludCBmb3IgUEhZIGRyaXZlciBpbXBsZW1lbnRhdGlvbnM7IGl0IGRlZmluZXMgdGhlIHN1cHBvcnRlZCBQSFkgSURzIGFuZCBhc3NvY2lhdGVkIGZ1bmN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgZHJpdmVyJiMzOTtzIHByb2JlIGFuZCBtYXRjaCByb3V0aW5lcyB3b3JrLiBVbmRlcnN0YW5kaW5nIHRoYXQgaW50ZXJhY3Rpb24gaXMga2V5LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIGRyaXZlciBpZGVudGlmaWVzIGEgTW90b3Jjb21tIFBIWSBhbmQgdGhlbiBob3cgaXQgaW5pdGlhbGl6ZXMgYW5kIGNvbmZpZ3VyZXMgaXQuIEkgc3VzcGVjdCB0aGVyZSYjMzk7cyBhIGRldmljZSBJRCBtYXRjaCBpbnZvbHZlZCwgbGlrZWx5IGNoZWNraW5nIGFnYWluc3Qgc29tZSByZWdpc3RlciB2YWx1ZXMuIEkgd2FudCB0byBzZWUgZXhhY3RseSBob3cgdGhlIGRyaXZlciBkZXRlcm1pbmVzIGlmIGl0JiMzOTtzIHRoZSByaWdodCBvbmUgZm9yIGEgZ2l2ZW4gaGFyZHdhcmUgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzE1MDpcdFx0XHQuc3VzcGVuZFx0PSBnZW5waHlfc3VzcGVuZCxcbjMxNTE6XHRcdFx0LnJlc3VtZVx0XHQ9IGdlbnBoeV9yZXN1bWUsXG4zMTUyOlx0XHRcdC5nZXRfd29sXHQ9IHl0cGh5X2dldF93b2wsXG4zMTUzOlx0XHRcdC5zZXRfd29sXHQ9IHl0ODUzMV9zZXRfd29sLFxuMzE1NDpcdFx0XHQubGlua19jaGFuZ2Vfbm90aWZ5ID0geXQ4NTMxX2xpbmtfY2hhbmdlX25vdGlmeSxcbjMxNTU6XHRcdFx0LmxlZF9od19pc19zdXBwb3J0ZWQgPSB5dDg1MjFfbGVkX2h3X2lzX3N1cHBvcnRlZCxcbjMxNTY6XHRcdFx0LmxlZF9od19jb250cm9sX3NldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9zZXQsXG4zMTU3Olx0XHRcdC5sZWRfaHdfY29udHJvbF9nZXQgPSB5dDg1MjFfbGVkX2h3X2NvbnRyb2xfZ2V0LFxuMzE1ODpcdFx0fSxcbjMxNTk6XHRcdHtcbjMxNjA6XHRcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzFTKSxcbjMxNjE6XHRcdFx0Lm5hbWVcdFx0PSBcJiMzNDtZVDg1MzFTIEdpZ2FiaXQgRXRoZXJuZXRcJiMzNDssXG4zMTYyOlx0XHRcdC5nZXRfZmVhdHVyZXNcdD0geXQ4NTIxX2dldF9mZWF0dXJlcyxcbjMxNjM6XHRcdFx0LnByb2JlXHRcdD0geXQ4NTIxX3Byb2JlLFxuMzE2NDpcdFx0XHQucmVhZF9wYWdlXHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXG4zMTY1Olx0XHRcdC53cml0ZV9wYWdlXHQ9IHl0ODUyMV93cml0ZV9wYWdlLFxuMzE2NjpcdFx0XHQuZ2V0X3dvbFx0PSB5dHBoeV9nZXRfd29sLFxuMzE2NzpcdFx0XHQuc2V0X3dvbFx0PSB5dHBoeV9zZXRfd29sLFxuMzE2ODpcdFx0XHQuY29uZmlnX2FuZWdcdD0geXQ4NTIxX2NvbmZpZ19hbmVnLFxuMzE2OTpcdFx0XHQuYW5lZ19kb25lXHQ9IHl0ODUyMV9hbmVnX2RvbmUsXG4zMTcwOlx0XHRcdC5jb25maWdfaW5pdFx0PSB5dDg1MzFzX2NvbmZpZ19pbml0LFxuMzE3MTpcdFx0XHQucmVhZF9zdGF0dXNcdD0geXQ4NTIxX3JlYWRfc3RhdHVzLFxuMzE3MjpcdFx0XHQuc29mdF9yZXNldFx0PSB5dDg1MjFfc29mdF9yZXNldCxcbjMxNzM6XHRcdFx0LnN1c3BlbmRcdD0geXQ4NTIxX3N1c3BlbmQsXG4zMTc0Olx0XHRcdC5yZXN1bWVcdFx0PSB5dDg1MjFfcmVzdW1lLFxuMzE3NTpcdFx0fSxcbjMxNzY6XHRcdHtcbjMxNzc6XHRcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpLFxuMzE3ODpcdFx0XHQubmFtZVx0XHRcdD0gXCYjMzQ7WVQ4ODIxIDIuNUdicHMgUEhZXCYjMzQ7LFxuMzE3OTpcdFx0XHQuZ2V0X2ZlYXR1cmVzXHRcdD0geXQ4ODIxX2dldF9mZWF0dXJlcyxcbjMxODA6XHRcdFx0LnJlYWRfcGFnZVx0XHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXG4zMTgxOlx0XHRcdC53cml0ZV9wYWdlXHRcdD0geXQ4NTIxX3dyaXRlX3BhZ2UsXG4zMTgyOlx0XHRcdC5nZXRfd29sXHRcdD0geXRwaHlfZ2V0X3dvbCxcbjMxODM6XHRcdFx0LnNldF93b2xcdFx0PSB5dHBoeV9zZXRfd29sLFxuMzE4NDpcdFx0XHQuY29uZmlnX2FuZWdcdFx0PSBnZW5waHlfY29uZmlnX2FuZWcsXG4zMTg1Olx0XHRcdC5hbmVnX2RvbmVcdFx0PSB5dDg4MjFfYW5lZ19kb25lLFxuMzE4NjpcdFx0XHQuY29uZmlnX2luaXRcdFx0PSB5dDg4MjFfY29uZmlnX2luaXQsXG4zMTg3Olx0XHRcdC5nZXRfcmF0ZV9tYXRjaGluZ1x0PSB5dDg4MjFfZ2V0X3JhdGVfbWF0Y2hpbmcsXG4zMTg4Olx0XHRcdC5yZWFkX3N0YXR1c1x0XHQ9IHl0ODgyMV9yZWFkX3N0YXR1cyxcbjMxODk6XHRcdFx0LnNvZnRfcmVzZXRcdFx0PSB5dDg4MjFfc29mdF9yZXNldCxcbjMxOTA6XHRcdFx0LnN1c3BlbmRcdFx0PSB5dDg4MjFfc3VzcGVuZCxcbjMxOTE6XHRcdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODIxX3Jlc3VtZSxcbjMxOTI6XHRcdH0sXG4zMTkzOlx0fTtcbjMxOTQ6XHRcbjMxOTU6XHRtb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpO1xuMzE5NjpcdFxuMzE5NzpcdE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyXCYjMzQ7KTtcbjMxOTg6XHRNT0RVTEVfQVVUSE9SKFwmIzM0O1BldGVyIEdlaXNcJiMzNDspO1xuMzE5OTpcdE1PRFVMRV9BVVRIT1IoXCYjMzQ7RnJhbmtcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5ODkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIFBIWSBEcml2ZXIgSW5zdGFudGlhdGlvbiBpbiBWaXJ0dWFsIEVudmlyb25tZW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGhvdyB0aGVzZSBQSFkgZHJpdmVycyBhcmUgdHlwaWNhbGx5IGJyb3VnaHQgdG8gbGlmZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBwcm9iaW5nIG1lY2hhbmlzbTsgSSBiZWxpZXZlIHRoZXkga2V5IG9mZiB0aG9zZSBQSFkgSUQgcmVnaXN0ZXJzLCBgTUlJX1BIWVNJRDFgIGFuZCBgTUlJX1BIWVNJRDJgLCBhY2Nlc3NlZCB0aHJvdWdoIE1ESU8uIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gcGxhdGZvcm1zIGxpa2UgUUVNVSwgR0NFLCBvciB0aGUgbWFpbmxpbmUgTGludXgga2VybmVsIHByb3ZpZGUgYW55IHNvcnQgb2YgTURJTyBidXMgZW11bGF0aW9uIG9yIG1vY2sgZHJpdmVyIEkgY2FuIGxldmVyYWdlLgoKU28sIHRoZSBuZXh0IHN0ZXAgaXMgY2xlYXI6IGxldCYjMzk7cyB2ZXJpZnkgaWYgTURJTyBQSFkgZHJpdmVycyBhcmUgYWNjZXNzaWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRvIGFjaGlldmUgdGhpcywgYSBmb2N1c2VkIHNlYXJjaCBpcyByZXF1aXJlZC4gSSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIHRoZSBjb2RlIHVzaW5nIHNlYXJjaCB0ZXJtcyByZWxhdGVkIHRvIE1ESU8gaW1wbGVtZW50YXRpb24uIFRoYXQgaW5jbHVkZXMgYG1kaW9gLCBgbWRpb19idXNgLCBgbWRpby1ncGlvYCwgYW5kIGBtZGlvLWJpdGJhbmdgLCBhbmQgb3RoZXIgc2ltaWxhciB0ZXJtcyB0aGF0IG1heSBiZSByZWxldmFudC4gVGhpcyBzaG91bGQgaGVscCB0byBkZXRlcm1pbmUgdGhlIGF2YWlsYWJpbGl0eSBvZiBNRElPIHdpdGhpbiB0aGVzZSBlbnZpcm9ubWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAzNjg4IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc9OTA9Y29uZmlnIE1ESU9fR1BJT1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy05Ny1cdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjk4Olx0ICB3aWxsIGJlIGNhbGxlZCBtZGlvLWdwaW8uXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctOTktXG4tLVxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZS0zLVxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19BQ1BJX01ESU8pXHRcdCYjNDM7PSBhY3BpX21kaW8ub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19GV05PREVfTURJTylcdCYjNDM7PSBmd25vZGVfbWRpby5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX09GX01ESU8pXHRcdCYjNDM7PSBvZl9tZGlvLm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGUtNy1cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6ODpvYmotJChDT05GSUdfTURJT19BSVJPSEEpXHRcdCYjNDM7PSBtZGlvLWFpcm9oYS5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX01ESU9fQVNQRUVEKVx0XHQmIzQzOz0gbWRpby1hc3BlZWQub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfTURJT19CQ01fSVBST0MpXHRcdCYjNDM7PSBtZGlvLWJjbS1pcHJvYy5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19NRElPX0JDTV9VTklNQUMpXHRcdCYjNDM7PSBtZGlvLWJjbS11bmltYWMub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfTURJT19CSVRCQU5HKVx0XHQmIzQzOz0gbWRpby1iaXRiYW5nLm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX01ESU9fQ0FWSVVNKVx0XHQmIzQzOz0gbWRpby1jYXZpdW0ub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfTURJT19HUElPKVx0XHRcdCYjNDM7PSBtZGlvLWdwaW8ub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToxNTpvYmotJChDT05GSUdfTURJT19ISVNJX0ZFTUFDKVx0XHQmIzQzOz0gbWRpby1oaXNpLWZlbWFjLm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX01ESU9fSTJDKVx0XHRcdCYjNDM7PSBtZGlvLWkyYy5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjE3Om9iai0kKENPTkZJR19NRElPX0lQUTQwMTkpXHRcdCYjNDM7PSBtZGlvLWlwcTQwMTkub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToxODpvYmotJChDT05GSUdfTURJT19JUFE4MDY0KVx0XHQmIzQzOz0gbWRpby1pcHE4MDY0Lm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MTk6b2JqLSQoQ09ORklHX01ESU9fTU9YQVJUKVx0XHQmIzQzOz0gbWRpby1tb3hhcnQub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfTURJT19NU0NDX01JSU0pXHRcdCYjNDM7PSBtZGlvLW1zY2MtbWlpbS5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjIxOm9iai0kKENPTkZJR19NRElPX01WVVNCKVx0XHQmIzQzOz0gbWRpby1tdnVzYi5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjIyOm9iai0kKENPTkZJR19NRElPX09DVEVPTilcdFx0JiM0Mzs9IG1kaW8tb2N0ZW9uLm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MjM6b2JqLSQoQ09ORklHX01ESU9fUElDNjRIUFNDKVx0XHQmIzQzOz0gbWRpby1waWM2NGhwc2Mub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfTURJT19SRUFMVEVLX1JUTDkzMDApXHQmIzQzOz0gbWRpby1yZWFsdGVrLXJ0bDkzMDAub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfTURJT19SRUdNQVApXHRcdCYjNDM7PSBtZGlvLXJlZ21hcC5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19NRElPX1NVTjRJKVx0XHQmIzQzOz0gbWRpby1zdW40aS5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19NRElPX1RIVU5ERVIpXHRcdCYjNDM7PSBtZGlvLXRodW5kZXIub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToyODpvYmotJChDT05GSUdfTURJT19YR0VORSlcdFx0JiM0Mzs9IG1kaW8teGdlbmUub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZS0yOS1cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MzA6b2JqLSQoQ09ORklHX01ESU9fQlVTX01VWClcdFx0JiM0Mzs9IG1kaW8tbXV4Lm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX01ESU9fQlVTX01VWF9CQ002MzY4KVx0JiM0Mzs9IG1kaW8tbXV4LWJjbTYzNjgub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZTozMjpvYmotJChDT05GSUdfTURJT19CVVNfTVVYX0JDTV9JUFJPQylcdCYjNDM7PSBtZGlvLW11eC1iY20taXByb2Mub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZTozMzpvYmotJChDT05GSUdfTURJT19CVVNfTVVYX0dQSU8pXHRcdCYjNDM7PSBtZGlvLW11eC1ncGlvLm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX01ESU9fQlVTX01VWF9NRVNPTl9HMTJBKVx0JiM0Mzs9IG1kaW8tbXV4LW1lc29uLWcxMmEub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZTozNTpvYmotJChDT05GSUdfTURJT19CVVNfTVVYX01FU09OX0dYTClcdCYjNDM7PSBtZGlvLW11eC1tZXNvbi1neGwub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZTozNjpvYmotJChDT05GSUdfTURJT19CVVNfTVVYX01NSU9SRUcpIFx0JiM0Mzs9IG1kaW8tbXV4LW1taW9yZWcub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfTURJT19CVVNfTVVYX01VTFRJUExFWEVSKSBcdCYjNDM7PSBtZGlvLW11eC1tdWx0aXBsZXhlci5vXG4tLVxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYy05LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2FjcGkuaFx1MDAzZVxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYzoxMDojaW5jbHVkZSBcdTAwM2NsaW51eC9hY3BpX21kaW8uaFx1MDAzZVxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYy0xMS0jaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtMTItI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXHUwMDNlXG5kcml2ZXJzL25ldC9tZGlvL2FjcGlfbWRpby5jOjEzOiNpbmNsdWRlIFx1MDAzY2xpbnV4L2Z3bm9kZV9tZGlvLmhcdTAwM2VcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtMTQtI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL25ldC9tZGlvL2FjcGlfbWRpby5jPTE5PU1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtBQ1BJIE1ESU8gYnVzIChFdGhlcm5ldCBQSFkpIGFjY2Vzc29yc1wmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYy0yMS0vKipcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmM6MjI6ICogX19hY3BpX21kaW9idXNfcmVnaXN0ZXIgLSBSZWdpc3RlciBtaWlfYnVzIGFuZCBjcmVhdGUgUEhZcyBmcm9tIHRoZSBBQ1BJIEFTTC5cbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmM6MjM6ICogQG1kaW86IHBvaW50ZXIgdG8gbWlpX2J1cyBzdHJ1Y3R1cmVcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtMjQtICogQGZ3bm9kZTogcG9pbnRlciB0byBmd25vZGUgb2YgTURJTyBidXMuIFRoaXMgZndub2RlIGlzIGV4cGVjdGVkIHRvIHJlcHJlc2VudFxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYzoyNTogKiBAb3duZXI6IG1vZHVsZSBvd25pbmcgdGhpcyBAbWRpbyBvYmplY3QuXG5kcml2ZXJzL25ldC9tZGlvL2FjcGlfbWRpby5jLTI2LSAqIGFuIEFDUEkgZGV2aWNlIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBNRElPIGJ1cyBhbmQgaXRzIGNoaWxkcmVuIGFyZVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtMzEtICovXG5kcml2ZXJzL25ldC9tZGlvL2FjcGlfbWRpby5jOjMyOmludCBfX2FjcGlfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSxcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtMzMtXHRcdFx0ICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtMzktXHQvKiBNYXNrIG91dCBhbGwgUEhZcyBmcm9tIGF1dG8gcHJvYmluZy4gKi9cbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmM6NDA6XHRtZGlvLVx1MDAzZXBoeV9tYXNrID0gR0VOTUFTSygzMSwgMCk7XG5kcml2ZXJzL25ldC9tZGlvL2FjcGlfbWRpby5jOjQxOlx0cmV0ID0gX19tZGlvYnVzX3JlZ2lzdGVyKG1kaW8sIG93bmVyKTtcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtNDItXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtNDQtXG5kcml2ZXJzL25ldC9tZGlvL2FjcGlfbWRpby5jOjQ1Olx0QUNQSV9DT01QQU5JT05fU0VUKFx1MDAyNm1kaW8tXHUwMDNlZGV2LCB0b19hY3BpX2RldmljZV9ub2RlKGZ3bm9kZSkpO1xuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYy00Ni1cbi0tXG5kcml2ZXJzL25ldC9tZGlvL2FjcGlfbWRpby5jLTUyLVxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYzo1MzpcdFx0cmV0ID0gZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KG1kaW8sIGNoaWxkLCBhZGRyKTtcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtNTQtXHRcdGlmIChyZXQgPT0gLUVOT0RFVilcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmM6NTU6XHRcdFx0ZGV2X2VycihcdTAwMjZtZGlvLVx1MDAzZWRldixcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtNTYtXHRcdFx0XHRcJiMzNDtNRElPIGRldmljZSBhdCBhZGRyZXNzICVkIGlzIG1pc3NpbmcuXFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtNjAtfVxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYzo2MTpFWFBPUlRfU1lNQk9MKF9fYWNwaV9tZGlvYnVzX3JlZ2lzdGVyKTtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXHUwMDNlXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6MTE6I2luY2x1ZGUgXHUwMDNjbGludXgvZndub2RlX21kaW8uaFx1MDAzZVxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTEyLSNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM9NDI9Zndub2RlX2ZpbmRfbWlpX3RpbWVzdGFtcGVyKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTY5LVxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjcwOmludCBmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTcxLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXG4tLVxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTgwLVx0aWYgKHJjID09IC1FUFJPQkVfREVGRVIpXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6ODE6XHRcdHJjID0gZHJpdmVyX2RlZmVycmVkX3Byb2JlX2NoZWNrX3N0YXRlKFx1MDAyNnBoeS1cdTAwM2VtZGlvLmRldik7XG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtODItXHRpZiAocmMgPT0gLUVQUk9CRV9ERUZFUilcbi0tXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtODYtXHRcdHBoeS1cdTAwM2VpcnEgPSByYztcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzo4NzpcdFx0bWRpby1cdTAwM2VpcnFbYWRkcl0gPSByYztcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy04OC1cdH0gZWxzZSB7XG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6ODk6XHRcdHBoeS1cdTAwM2VpcnEgPSBtZGlvLVx1MDAzZWlycVthZGRyXTtcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy05MC1cdH1cbi0tXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtOTItXHRpZiAoZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChjaGlsZCwgXCYjMzQ7YnJva2VuLXR1cm4tYXJvdW5kXCYjMzQ7KSlcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzo5MzpcdFx0bWRpby1cdTAwM2VwaHlfaWdub3JlX3RhX21hc2sgfD0gMSBcdTAwM2NcdTAwM2MgYWRkcjtcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy05NC1cbi0tXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtOTgtXHRmd25vZGVfaGFuZGxlX2dldChjaGlsZCk7XG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6OTk6XHRkZXZpY2Vfc2V0X25vZGUoXHUwMDI2cGh5LVx1MDAzZW1kaW8uZGV2LCBjaGlsZCk7XG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTAwLVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMDUtXHRpZiAocmMpIHtcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzoxMDY6XHRcdGRldmljZV9zZXRfbm9kZShcdTAwMjZwaHktXHUwMDNlbWRpby5kZXYsIE5VTEwpO1xuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTEwNy1cdFx0Zndub2RlX2hhbmRsZV9wdXQoY2hpbGQpO1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMTAtXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6MTExOlx0ZGV2X2RiZyhcdTAwMjZtZGlvLVx1MDAzZWRldiwgXCYjMzQ7cmVnaXN0ZXJlZCBwaHkgZndub2RlICVwZncgYXQgYWRkcmVzcyAlaVxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMTItXHRcdGNoaWxkLCBhZGRyKTtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTE0LX1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzoxMTU6RVhQT1JUX1NZTUJPTChmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMTYtXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6MTE3OmludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cyxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMTgtXHRcdFx0XHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqY2hpbGQsIHUzMiBhZGRyKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xNDYtXHRcdCAqL1xuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjE0NzpcdFx0cGh5LVx1MDAzZW1kaW8uZGV2LmZ3bm9kZSA9IGZ3bm9kZV9oYW5kbGVfZ2V0KGNoaWxkKTtcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xNDgtXG4tLVxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTE1MS1cdFx0aWYgKHJjKSB7XG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6MTUyOlx0XHRcdHBoeS1cdTAwM2VtZGlvLmRldi5md25vZGUgPSBOVUxMO1xuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTE1My1cdFx0XHRmd25vZGVfaGFuZGxlX3B1dChjaGlsZCk7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTE1Ni1cdH0gZWxzZSBpZiAoaXNfb2Zfbm9kZShjaGlsZCkpIHtcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzoxNTc6XHRcdHJjID0gZndub2RlX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihidXMsIHBoeSwgY2hpbGQsIGFkZHIpO1xuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTE1OC1cdFx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xODgtfVxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjE4OTpFWFBPUlRfU1lNQk9MKGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeSk7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTExLSNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MTI6I2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbWRpby5oXHUwMDNlXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTMtI2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfYWRkcmVzcy5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTM5LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjQwOnN0cnVjdCBhaXJvaGFfbWRpb19kYXRhIHtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy00MS1cdHUzMiBiYXNlX2FkZHI7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTQ2LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjQ3OnN0YXRpYyBpbnQgYWlyb2hhX21kaW9fd2FpdF9idXN5KHN0cnVjdCBhaXJvaGFfbWRpb19kYXRhICpwcml2KVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTQ4LXtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtNTYtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6NTc6c3RhdGljIHZvaWQgYWlyb2hhX21kaW9fcmVzZXQoc3RydWN0IGFpcm9oYV9tZGlvX2RhdGEgKnByaXYpXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtNTgte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy03My1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzo3NDpzdGF0aWMgaW50IGFpcm9oYV9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWdudW0pXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtNzUte1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjc2Olx0c3RydWN0IGFpcm9oYV9tZGlvX2RhdGEgKnByaXYgPSBidXMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy03Ny1cdHUzMiB2YWw7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTc5LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjgwOlx0YWlyb2hhX21kaW9fcmVzZXQocHJpdik7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtODEtXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTkwLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjkxOlx0cmV0ID0gYWlyb2hhX21kaW9fd2FpdF9idXN5KHByaXYpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTkyLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTAxLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjEwMjpzdGF0aWMgaW50IGFpcm9oYV9tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtLFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTEwMy1cdFx0XHQgICAgIHUxNiB2YWx1ZSlcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xMDQte1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjEwNTpcdHN0cnVjdCBhaXJvaGFfbWRpb19kYXRhICpwcml2ID0gYnVzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTA2LVx0dTMyIHZhbDtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTE4LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjExOTpcdHJldCA9IGFpcm9oYV9tZGlvX3dhaXRfYnVzeShwcml2KTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xMjAtXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTEyMy1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoxMjQ6c3RhdGljIGludCBhaXJvaGFfbWRpb19jbDQ1X3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXZudW0sXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTI1LVx0XHRcdFx0IGludCByZWdudW0pXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTI2LXtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoxMjc6XHRzdHJ1Y3QgYWlyb2hhX21kaW9fZGF0YSAqcHJpdiA9IGJ1cy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTEyOC1cdHUzMiB2YWw7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTEzMC1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoxMzE6XHRhaXJvaGFfbWRpb19yZXNldChwcml2KTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xMzItXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTE0Mi1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoxNDM6XHRyZXQgPSBhaXJvaGFfbWRpb193YWl0X2J1c3kocHJpdik7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTQ0LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTU1LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjE1NjpcdHJldCA9IGFpcm9oYV9tZGlvX3dhaXRfYnVzeShwcml2KTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xNTctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xNjYtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MTY3OnN0YXRpYyBpbnQgYWlyb2hhX21kaW9fY2w0NV93cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IGRldm51bSxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xNjgtXHRcdFx0XHQgIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xNjkte1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjE3MDpcdHN0cnVjdCBhaXJvaGFfbWRpb19kYXRhICpwcml2ID0gYnVzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTcxLVx0dTMyIHZhbDtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTgzLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjE4NDpcdHJldCA9IGFpcm9oYV9tZGlvX3dhaXRfYnVzeShwcml2KTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xODUtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xOTctXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MTk4Olx0cmV0ID0gYWlyb2hhX21kaW9fd2FpdF9idXN5KHByaXYpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTE5OS1cbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMjAyLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjIwMzpzdGF0aWMgaW50IGFpcm9oYV9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMjA0LXtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0yMDUtXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoyMDY6XHRzdHJ1Y3QgYWlyb2hhX21kaW9fZGF0YSAqcHJpdjtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0yMDctXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0yMTQtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MjE1Olx0YnVzID0gZGV2bV9tZGlvYnVzX2FsbG9jX3NpemUoZGV2LCBzaXplb2YoKnByaXYpKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0yMTYtXHRpZiAoIWJ1cylcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMjM0LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjIzNTpcdGJ1cy1cdTAwM2VuYW1lID0gXCYjMzQ7YWlyb2hhX21kaW9fYnVzXCYjMzQ7O1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTIzNi1cdHNucHJpbnRmKGJ1cy1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcJiMzNDslcy1taWlcJiMzNDssIGRldl9uYW1lKGRldikpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTIzNy1cdGJ1cy1cdTAwM2VwYXJlbnQgPSBkZXY7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MjM4Olx0YnVzLVx1MDAzZXJlYWQgPSBhaXJvaGFfbWRpb19yZWFkO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjIzOTpcdGJ1cy1cdTAwM2V3cml0ZSA9IGFpcm9oYV9tZGlvX3dyaXRlO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjI0MDpcdGJ1cy1cdTAwM2VyZWFkX2M0NSA9IGFpcm9oYV9tZGlvX2NsNDVfcmVhZDtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoyNDE6XHRidXMtXHUwMDNld3JpdGVfYzQ1ID0gYWlyb2hhX21kaW9fY2w0NV93cml0ZTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0yNDItXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTI1MC1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoyNTE6XHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIGRldi1cdTAwM2VvZl9ub2RlKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0yNTItXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTI1OS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoyNjA6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYWlyb2hhX21kaW9fZHRfaWRzW10gPSB7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MjYxOlx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O2Fpcm9oYSxhbjc1ODMtbWRpb1wmIzM0OyB9LFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTI2Mi1cdHsgfVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTI2My19O1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjI2NDpNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhaXJvaGFfbWRpb19kdF9pZHMpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTI2NS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoyNjY6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX21kaW9fZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjI2NzpcdC5wcm9iZSA9IGFpcm9oYV9tZGlvX3Byb2JlLFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTI2OC1cdC5kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MjY5Olx0XHQubmFtZSA9IFwmIzM0O2Fpcm9oYS1tZGlvXCYjMzQ7LFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjI3MDpcdFx0Lm9mX21hdGNoX3RhYmxlID0gYWlyb2hhX21kaW9fZHRfaWRzLFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTI3MS1cdH0sXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTI3My1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoyNzQ6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihhaXJvaGFfbWRpb19kcml2ZXIpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTI3NS1cbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjg6I2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby5oXHUwMDNlXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtOS0jaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTEwLSNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxMTojaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9tZGlvLmhcdTAwM2VcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xNC1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxNTojZGVmaW5lIERSVl9OQU1FIFwmIzM0O21kaW8tYXNwZWVkXCYjMzQ7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTYtXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTQyLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjQzOnN0cnVjdCBhc3BlZWRfbWRpbyB7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtNDQtXHR2b2lkIF9faW9tZW0gKmJhc2U7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTQ3LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjQ4OnN0YXRpYyBpbnQgYXNwZWVkX21kaW9fb3Aoc3RydWN0IG1paV9idXMgKmJ1cywgdTggc3QsIHU4IG9wLCB1OCBwaHlhZCwgdTggcmVnYWQsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtNDktXHRcdFx0ICB1MTYgZGF0YSlcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy01MC17XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6NTE6XHRzdHJ1Y3QgYXNwZWVkX21kaW8gKmN0eCA9IGJ1cy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTUyLVx0dTMyIGN0cmw7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTc4LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjc5OnN0YXRpYyBpbnQgYXNwZWVkX21kaW9fZ2V0X2RhdGEoc3RydWN0IG1paV9idXMgKmJ1cylcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy04MC17XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6ODE6XHRzdHJ1Y3QgYXNwZWVkX21kaW8gKmN0eCA9IGJ1cy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTgyLVx0dTMyIGRhdGE7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTk0LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjk1OnN0YXRpYyBpbnQgYXNwZWVkX21kaW9fcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWdudW0pXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtOTYte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy05OC1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzo5OTpcdHJjID0gYXNwZWVkX21kaW9fb3AoYnVzLCBBU1BFRURfTURJT19DVFJMX1NUX0MyMiwgTURJT19DMjJfT1BfUkVBRCxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xMDAtXHRcdFx0ICAgIGFkZHIsIHJlZ251bSwgMCk7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTEwMy1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxMDQ6XHRyZXR1cm4gYXNwZWVkX21kaW9fZ2V0X2RhdGEoYnVzKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xMDUtfVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTEwNi1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxMDc6c3RhdGljIGludCBhc3BlZWRfbWRpb193cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWdudW0sXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTA4LVx0XHRcdFx0IHUxNiB2YWwpXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTA5LXtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxMTA6XHRyZXR1cm4gYXNwZWVkX21kaW9fb3AoYnVzLCBBU1BFRURfTURJT19DVFJMX1NUX0MyMiwgTURJT19DMjJfT1BfV1JJVEUsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTExLVx0XHRcdCAgICAgIGFkZHIsIHJlZ251bSwgdmFsKTtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTEzLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjExNDpzdGF0aWMgaW50IGFzcGVlZF9tZGlvX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2YWQsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTE1LVx0XHRcdFx0aW50IHJlZ251bSlcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTE4LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjExOTpcdHJjID0gYXNwZWVkX21kaW9fb3AoYnVzLCBBU1BFRURfTURJT19DVFJMX1NUX0M0NSwgTURJT19DNDVfT1BfQUREUixcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xMjAtXHRcdFx0ICAgIGFkZHIsIGRldmFkLCByZWdudW0pO1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xMjMtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MTI0Olx0cmMgPSBhc3BlZWRfbWRpb19vcChidXMsIEFTUEVFRF9NRElPX0NUUkxfU1RfQzQ1LCBNRElPX0M0NV9PUF9SRUFELFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTEyNS1cdFx0XHQgICAgYWRkciwgZGV2YWQsIDApO1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xMjgtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MTI5Olx0cmV0dXJuIGFzcGVlZF9tZGlvX2dldF9kYXRhKGJ1cyk7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTMwLX1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xMzEtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MTMyOnN0YXRpYyBpbnQgYXNwZWVkX21kaW9fd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2YWQsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTMzLVx0XHRcdFx0IGludCByZWdudW0sIHUxNiB2YWwpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTEzNi1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxMzc6XHRyYyA9IGFzcGVlZF9tZGlvX29wKGJ1cywgQVNQRUVEX01ESU9fQ1RSTF9TVF9DNDUsIE1ESU9fQzQ1X09QX0FERFIsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTM4LVx0XHRcdCAgICBhZGRyLCBkZXZhZCwgcmVnbnVtKTtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTQxLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjE0MjpcdHJldHVybiBhc3BlZWRfbWRpb19vcChidXMsIEFTUEVFRF9NRElPX0NUUkxfU1RfQzQ1LCBNRElPX0M0NV9PUF9XUklURSxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xNDMtXHRcdFx0ICAgICAgYWRkciwgZGV2YWQsIHZhbCk7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTE0NS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxNDY6c3RhdGljIGludCBhc3BlZWRfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTE0Ny17XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MTQ4Olx0c3RydWN0IGFzcGVlZF9tZGlvICpjdHg7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTQ5LVx0c3RydWN0IG1paV9idXMgKmJ1cztcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTUxLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjE1MjpcdGJ1cyA9IGRldm1fbWRpb2J1c19hbGxvY19zaXplKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKmN0eCkpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTE1My1cdGlmICghYnVzKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xNjktXHRidXMtXHUwMDNlcGFyZW50ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MTcwOlx0YnVzLVx1MDAzZXJlYWQgPSBhc3BlZWRfbWRpb19yZWFkX2MyMjtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxNzE6XHRidXMtXHUwMDNld3JpdGUgPSBhc3BlZWRfbWRpb193cml0ZV9jMjI7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MTcyOlx0YnVzLVx1MDAzZXJlYWRfYzQ1ID0gYXNwZWVkX21kaW9fcmVhZF9jNDU7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MTczOlx0YnVzLVx1MDAzZXdyaXRlX2M0NSA9IGFzcGVlZF9tZGlvX3dyaXRlX2M0NTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xNzQtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MTc1Olx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgcGRldi1cdTAwM2VkZXYub2Zfbm9kZSk7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTc2LVx0aWYgKHJjKSB7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTE4Ni1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxODc6c3RhdGljIHZvaWQgYXNwZWVkX21kaW9fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTg4LXtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xODktXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gKHN0cnVjdCBtaWlfYnVzICopcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MTkwOlx0c3RydWN0IGFzcGVlZF9tZGlvICpjdHggPSBidXMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xOTEtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTkyLVx0cmVzZXRfY29udHJvbF9hc3NlcnQoY3R4LVx1MDAzZXJlc2V0KTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxOTM6XHRtZGlvYnVzX3VucmVnaXN0ZXIoYnVzKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xOTQtfVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTE5NS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxOTY6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXNwZWVkX21kaW9fb2ZfbWF0Y2hbXSA9IHtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxOTc6XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YXNwZWVkLGFzdDI2MDAtbWRpb1wmIzM0OywgfSxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xOTgtXHR7IH0sXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTk5LX07XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MjAwOk1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGFzcGVlZF9tZGlvX29mX21hdGNoKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0yMDEtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MjAyOnN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFzcGVlZF9tZGlvX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0yMDMtXHQuZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTIwNC1cdFx0Lm5hbWUgPSBEUlZfTkFNRSxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoyMDU6XHRcdC5vZl9tYXRjaF90YWJsZSA9IGFzcGVlZF9tZGlvX29mX21hdGNoLFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTIwNi1cdH0sXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MjA3Olx0LnByb2JlID0gYXNwZWVkX21kaW9fcHJvYmUsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MjA4Olx0LnJlbW92ZSA9IGFzcGVlZF9tZGlvX3JlbW92ZSxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0yMDktfTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0yMTAtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MjExOm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYXNwZWVkX21kaW9fZHJpdmVyKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0yMTItXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTExLSNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX3BsYXRmb3JtLmhcdTAwM2VcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoxMjojaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9tZGlvLmhcdTAwM2VcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xMy0jaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0zNS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzozNjpzdHJ1Y3QgaXByb2NfbWRpb19wcml2IHtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0zNy1cdHN0cnVjdCBtaWlfYnVzICptaWlfYnVzO1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy00MC1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzo0MTpzdGF0aWMgaW5saW5lIGludCBpcHJvY19tZGlvX3dhaXRfZm9yX2lkbGUodm9pZCBfX2lvbWVtICpiYXNlKVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTQyLXtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtNTYtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6NTc6c3RhdGljIGlubGluZSB2b2lkIGlwcm9jX21kaW9fY29uZmlnX2Nsayh2b2lkIF9faW9tZW0gKmJhc2UpXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtNTgte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy02NS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzo2NjpzdGF0aWMgaW50IGlwcm9jX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnKVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTY3LXtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzo2ODpcdHN0cnVjdCBpcHJvY19tZGlvX3ByaXYgKnByaXYgPSBidXMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy02OS1cdHUzMiBjbWQ7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTcxLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjcyOlx0cmMgPSBpcHJvY19tZGlvX3dhaXRfZm9yX2lkbGUocHJpdi1cdTAwM2ViYXNlKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy03My1cdGlmIChyYylcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtODQtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6ODU6XHRyYyA9IGlwcm9jX21kaW9fd2FpdF9mb3JfaWRsZShwcml2LVx1MDAzZWJhc2UpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTg2LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy05My1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzo5NDpzdGF0aWMgaW50IGlwcm9jX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy05NS1cdFx0XHQgICAgaW50IHJlZywgdTE2IHZhbClcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy05Ni17XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6OTc6XHRzdHJ1Y3QgaXByb2NfbWRpb19wcml2ICpwcml2ID0gYnVzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtOTgtXHR1MzIgY21kO1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xMDAtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTAxOlx0cmMgPSBpcHJvY19tZGlvX3dhaXRfZm9yX2lkbGUocHJpdi1cdTAwM2ViYXNlKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xMDItXHRpZiAocmMpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTExNC1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoxMTU6XHRyYyA9IGlwcm9jX21kaW9fd2FpdF9mb3JfaWRsZShwcml2LVx1MDAzZWJhc2UpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTExNi1cdGlmIChyYylcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTIxLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjEyMjpzdGF0aWMgaW50IGlwcm9jX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xMjMte1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjEyNDpcdHN0cnVjdCBpcHJvY19tZGlvX3ByaXYgKnByaXY7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTI1LVx0c3RydWN0IG1paV9idXMgKmJ1cztcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTM3LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjEzODpcdHByaXYtXHUwMDNlbWlpX2J1cyA9IG1kaW9idXNfYWxsb2MoKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xMzktXHRpZiAoIXByaXYtXHUwMDNlbWlpX2J1cykge1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xNDgtXHRidXMtXHUwMDNlcGFyZW50ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTQ5Olx0YnVzLVx1MDAzZXJlYWQgPSBpcHJvY19tZGlvX3JlYWQ7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTUwOlx0YnVzLVx1MDAzZXdyaXRlID0gaXByb2NfbWRpb193cml0ZTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xNTEtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTUyOlx0aXByb2NfbWRpb19jb25maWdfY2xrKHByaXYtXHUwMDNlYmFzZSk7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTUzLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE1NDpcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIHBkZXYtXHUwMDNlZGV2Lm9mX25vZGUpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE1NS1cdGlmIChyYykge1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE1Ni1cdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7TURJTyBidXMgcmVnaXN0cmF0aW9uIGZhaWxlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTU3Olx0XHRnb3RvIGVycl9pcHJvY19tZGlvO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE1OC1cdH1cbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTY1LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE2NjplcnJfaXByb2NfbWRpbzpcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoxNjc6XHRtZGlvYnVzX2ZyZWUoYnVzKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xNjgtXHRyZXR1cm4gcmM7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE3MC1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoxNzE6c3RhdGljIHZvaWQgaXByb2NfbWRpb19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xNzIte1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE3MzpcdHN0cnVjdCBpcHJvY19tZGlvX3ByaXYgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xNzQtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTc1Olx0bWRpb2J1c191bnJlZ2lzdGVyKHByaXYtXHUwMDNlbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTc2Olx0bWRpb2J1c19mcmVlKHByaXYtXHUwMDNlbWlpX2J1cyk7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTc3LX1cbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTc5LSNpZmRlZiBDT05GSUdfUE1fU0xFRVBcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoxODA6c3RhdGljIGludCBpcHJvY19tZGlvX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTgxLXtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xODItXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTgzOlx0c3RydWN0IGlwcm9jX21kaW9fcHJpdiAqcHJpdiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE4NC1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xODUtXHQvKiByZXN0b3JlIHRoZSBtaWkgY2xvY2sgY29uZmlndXJhdGlvbiAqL1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE4NjpcdGlwcm9jX21kaW9fY29uZmlnX2Nsayhwcml2LVx1MDAzZWJhc2UpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE4Ny1cbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTkwLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE5MTpzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgaXByb2NfbWRpb19wbV9vcHMgPSB7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTkyOlx0LnJlc3VtZSA9IGlwcm9jX21kaW9fcmVzdW1lXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTkzLX07XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE5NS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoxOTY6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgaXByb2NfbWRpb19vZl9tYXRjaFtdID0ge1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE5NzpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDticmNtLGlwcm9jLW1kaW9cJiMzNDssIH0sXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTk4LVx0eyAvKiBzZW50aW5lbCAqLyB9LFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE5OS19O1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjIwMDpNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBpcHJvY19tZGlvX29mX21hdGNoKTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0yMDEtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MjAyOnN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlwcm9jX21kaW9fZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTIwMy1cdC5kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MjA0Olx0XHQubmFtZSA9IFwmIzM0O2lwcm9jLW1kaW9cJiMzNDssXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MjA1Olx0XHQub2ZfbWF0Y2hfdGFibGUgPSBpcHJvY19tZGlvX29mX21hdGNoLFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTIwNi0jaWZkZWYgQ09ORklHX1BNX1NMRUVQXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MjA3Olx0XHQucG0gPSBcdTAwMjZpcHJvY19tZGlvX3BtX29wcyxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0yMDgtI2VuZGlmXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMjA5LVx0fSxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoyMTA6XHQucHJvYmUgPSBpcHJvY19tZGlvX3Byb2JlLFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjIxMTpcdC5yZW1vdmUgPSBpcHJvY19tZGlvX3JlbW92ZSxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0yMTItfTtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0yMTMtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MjE0Om1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoaXByb2NfbWRpb19kcml2ZXIpO1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTIxNS1cbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM9MjE4PU1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTCB2MlwmIzM0Oyk7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MjE5Ok1PRFVMRV9BTElBUyhcJiMzNDtwbGF0Zm9ybTppcHJvYy1tZGlvXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jLTEzLSNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmM6MTQ6I2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbWRpby5oXHUwMDNlXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jLTE1LSNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX3BsYXRmb3JtLmhcdTAwM2VcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmMtMTYtI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjUyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEludmVzdGlnYXRpb24gaW50byBNb3RvcmNvbW0gUEhZIEVtdWxhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHBvc3NpYmxlIHRvIGluc3RhbnRpYXRlIGEgTW90b3Jjb21tIFBIWSB3aXRoaW4gYW4gZW52aXJvbm1lbnQgbGlrZSBRRU1VLCBHb29nbGUgQ29tcHV0ZSBFbmdpbmUsIG9yIGV2ZW4gc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyLiBUaGUgZmlyc3Qgc3RlcCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBQSFkgZGV2aWNlcyBhcmUgZXZlbiByZWdpc3RlcmVkIGluIHRoZSBMaW51eCBrZXJuZWwuIFJpZ2h0LCB0aGV5JiMzOTtyZSB0aWVkIHRvIHRoZSBNRElPIGJ1cywgdXN1YWxseS4gV2hlbiB0aGUgTURJTyBidXMgc2NhbnMsIGl0IGxvb2tzIGF0IHJlZ2lzdGVycyBNSUlfUEhZU0lEMSBhbmQgTUlJX1BIWVNJRDIsIHNwZWNpZmljYWxseS4gSWYgdGhvc2UgcmVnaXN0ZXJzIG1hdGNoIGEga25vd24gTW90b3Jjb21tIFBIWSBJRCwgbGlrZSBgUEhZX0lEX1lUODUzMVNgIG9yIFlUODUxMSwgdGhlbiB0aGUgTW90b3Jjb21tIGRyaXZlciBzaG91bGQgYmluZCB0byBpdC4gT3IsIG9mIGNvdXJzZSwgdGhyb3VnaCB0aGUgZGV2aWNlIHRyZWUsIEFDUEksIGZ3bm9kZSwgb3IgdGhlIGV0aGVybmV0IGRyaXZlciBjb25uZWN0aW5nIHRvIHRoZSBQSFkuCgpUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBEb2VzIFFFTVUsIGluIGl0cyBlbXVsYXRlZCBoYXJkd2FyZSBvZmZlcmluZ3MsICphbHJlYWR5KiBpbmNsdWRlIHNvbWV0aGluZyB0aGF0IGV4cG9zZXMgYSBNb3RvcmNvbW0gUEhZPyBCYXNlZCBvbiBteSBrbm93bGVkZ2UsIHRoZSBzdGFuZGFyZCBRRU1VIG5ldHdvcmsgZGV2aWNlc+KAlGUxMDAwLCBlMTAwMGUsIHJ0bDgxMzksIHZpcnRpby1uZXQsIHBjbmV0LCBuZTJrLCBpZ2IsIGV0Yy7igJRlaXRoZXIgZG9uJiMzOTt0IHV0aWxpemUgdGhlIExpbnV4IHBoeWxpYiBmcmFtZXdvcmsgd2l0aCBleHRlcm5hbCBQSFkgZHJpdmVycywgdXNlIHRoZWlyIG93biBpbnRlcm5hbCBvciBzdGFuZGFyZCBQSFlzLCBvciBlbXVsYXRlIEludGVsIG9yIFJlYWx0ZWsgUEhZcywgd2hpY2gsIG9mIGNvdXJzZSwgaXNuJiMzOTt0IHdoYXQgSSYjMzk7bSBsb29raW5nIGZvci4gVGhleSYjMzk7cmUgbm90IGdvaW5nIHRvIGJlIG1pbWlja2luZyBNb3RvcmNvbW0mIzM5O3MgaGFyZHdhcmUuCgpOb3csIGxldCBtZSBwaXZvdC4gUGVyaGFwcyBpdCYjMzk7cyB3b3J0aCB0YWtpbmcgYSBsb29rIGF0IFVTQiBldGhlcm5ldCBkb25nbGVzLCBvciBldmVuIFVTQiBNRElPIGFkYXB0ZXJzIHRoZW1zZWx2ZXMuIE1heWJlIHNvbWV0aGluZyBsaWtlIHRoZSBgbWRpby1tdnVzYmAgb3IgYGF4ODgxNzlfMTc4YWAgZHJpdmVycywgb3IgZXZlbiB0aGUgdXNibmV0IC8gY2RjX2V0aGVyIG9wdGlvbnMuIFRoZSBrZXkgaXMgaWYgYW55IG9mIHRoZXNlIGxldmVyYWdlIHRoZSBwaHlsaWIgZnJhbWV3b3JrIGFuZCBwb3RlbnRpYWxseSBob29rIGludG8gYSBNb3RvcmNvbW0gUEhZLiBJJiMzOTtsbCBuZWVkIHRvIGludmVzdGlnYXRlIGlmIGEgVVNCIG5ldHdvcmsgYWRhcHRlciBjb3VsZCB1c2UgYSBgbW90b3Jjb21tYCBkcml2ZXIgb3IgdXNlIGEgZ2VuZXJhbCBQSFkgdmlhIHRoZSBwaHlsaWIgbGlicmFyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UEhZX0lEX1lUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE1LVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjE2OiNkZWZpbmUgUEhZX0lEX1lUODUxMVx0XHQweDAwMDAwMTBhXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTc6I2RlZmluZSBQSFlfSURfWVQ4NTIxXHRcdDB4MDAwMDAxMWFcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxODojZGVmaW5lIFBIWV9JRF9ZVDg1MjJcdFx0MHg0ZjUxZTkyOFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjE5OiNkZWZpbmUgUEhZX0lEX1lUODUzMVx0XHQweDRmNTFlOTFiXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MjA6I2RlZmluZSBQSFlfSURfWVQ4NTMxU1x0XHQweDRmNTFlOTFhXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MjE6I2RlZmluZSBQSFlfSURfWVQ4ODIxXHRcdDB4NGY1MWVhMTlcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0yMi0vKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXdcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9ODk2PXN0YXRpYyBpbnQgeXRwaHlfcmdtaWlfY2xrX2RlbGF5X2NvbmZpZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy05MjctXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJOlxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjkyODpcdFx0aWYgKHBoeWRldi1cdTAwM2VkcnYtXHUwMDNlcGh5X2lkICE9IFBIWV9JRF9ZVDg1MzFTKVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTkyOS1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTEwNjk9c3RhdGljIGludCB5dDg1MjFfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTEyOC1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxMTI5Olx0aWYgKHBoeWRldi1cdTAwM2VkcnYtXHUwMDNlcGh5X2lkID09IFBIWV9JRF9ZVDg1MjEpIHtcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMTMwLVx0XHRzd2l0Y2ggKGZyZXEpIHtcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTE1NS1cdFx0fVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjExNTY6XHR9IGVsc2UgaWYgKHBoeWRldi1cdTAwM2VkcnYtXHUwMDNlcGh5X2lkID09IFBIWV9JRF9ZVDg1MzFTKSB7XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTE1Ny1cdFx0c3dpdGNoIChmcmVxKSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTMxMDc9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxMDgtXHR7XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MzEwOTpcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MTEpLFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxMTAtXHRcdC5uYW1lXHRcdD0gXCYjMzQ7WVQ4NTExIEdpZ2FiaXQgRXRoZXJuZXRcJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxMTctXHR7XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MzExODpcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MjEpLFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxMTktXHRcdC5uYW1lXHRcdD0gXCYjMzQ7WVQ4NTIxIEdpZ2FiaXQgRXRoZXJuZXRcJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxMzctXHR7XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MzEzODpcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MjIpLFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxMzktXHRcdC5uYW1lXHRcdD0gXCYjMzQ7WVQ4NTIyIDEwMCBNZWdhYml0IEV0aGVybmV0XCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0zMTQ1LVx0e1xuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjMxNDY6XHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxKSxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0zMTQ3LVx0XHQubmFtZVx0XHQ9IFwmIzM0O1lUODUzMSBHaWdhYml0IEV0aGVybmV0XCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0zMTU5LVx0e1xuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjMxNjA6XHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUyksXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMzE2MS1cdFx0Lm5hbWVcdFx0PSBcJiMzNDtZVDg1MzFTIEdpZ2FiaXQgRXRoZXJuZXRcJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxNzYtXHR7XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MzE3NzpcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpLFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxNzgtXHRcdC5uYW1lXHRcdFx0PSBcJiMzNDtZVDg4MjEgMi41R2JwcyBQSFlcJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTMyMDI9c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MzIwMzpcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MTEpIH0sXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MzIwNDpcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MjEpIH0sXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MzIwNTpcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MjIpIH0sXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MzIwNjpcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpIH0sXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MzIwNzpcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzFTKSB9LFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjMyMDg6XHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODIxKSB9LFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMyMDktXHR7IC8qIHNlbnRpbmVsICovIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1MjYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIFVTQiBFdGhlcm5ldCBEcml2ZXIgUEhZIENvbm5lY3Rpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIGlmIGFueSBvZiB0aGUgVVNCIEV0aGVybmV0IGRyaXZlcnMgYXJlIGxldmVyYWdpbmcgdGhlIGBwaHlsaWJgIGZyYW1ld29yayB0byBpbnRlcmZhY2Ugd2l0aCBleHRlcm5hbCBQSFlzLiBUaGlzIGlzIGEgY29tbW9uIGFuZCBvZnRlbiBwcmVmZXJyZWQgYXJjaGl0ZWN0dXJlLCBzbyBpdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4KClRoZSBtb3N0IGVmZmljaWVudCBhcHByb2FjaCBoZXJlIGlzIGEgdGFyZ2V0ZWQgY29kZSBzZWFyY2guIEkmIzM5O2xsIHVzZSBgZ3JlcGAgdG8gc2NhbiB0aGUgYGRyaXZlcnMvbmV0L3VzYi9gIGRpcmVjdG9yeS4gSSYjMzk7bGwgc2VhcmNoIGZvciBrZXkgaW5kaWNhdG9ycyBvZiBgcGh5bGliYCB1c2FnZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBsb29rIGZvciBjYWxscyB0byB0aGUgYHBoeV9jb25uZWN0YCBmdW5jdGlvbiBvciByZWZlcmVuY2VzIHRvIGBwaHlsaW5rYC4gVGhlc2UgYXJlIHRoZSBicmVhZGNydW1icyB0aGF04oCZbGwgbGlrZWx5IGxlYWQgbWUgdG8gdGhlIHJlbGV2YW50IGRyaXZlcnMgdXNpbmcgdGhpcyBhcmNoaXRlY3R1cmUsIG9yIGF0IGxlYXN0IHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24uIEl0JiMzOTtzIGEgZm9jdXNlZCBzZWFyY2ggdGhhdCBzaG91bGQgeWllbGQgcXVpY2sgcmVzdWx0cywgZWxpbWluYXRpbmcgdGhlIG5lZWQgdG8gcmVhZCB0aHJvdWdoIHRoZSBlbnRpcmUgY29kZSBiYXNlLiBUaW1lIHRvIHNlZSB3aGF0IHRoYXQgYGdyZXBgIHJldmVhbHMuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X2Nvbm5lY3R8cGh5X2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTcwMz1zdGF0aWMgaW50IGF4ODg3NzJfaW5pdF9waHkoc3RydWN0IHVzYm5ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy03MjItXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6NzIzOlx0cGh5X2F0dGFjaGVkX2luZm8ocHJpdi1cdTAwM2VwaHlkZXYpO1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTcyNC1cbi0tXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz0yNjE9c3RhdGljIGludCBheDg4MTcyYV9yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMzEzLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MzE0Olx0cHJpdi1cdTAwM2VwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYtXHUwMDNlbmV0LCBwcml2LVx1MDAzZXBoeV9uYW1lLFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMzE1LVx0XHRcdFx0ICAgXHUwMDI2YXg4ODE3MmFfYWRqdXN0X2xpbmssXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTE0Nz1zdGF0aWMgaW50IHNtc2M5NXh4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zilcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjg0LVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI4NTpcdHJldCA9IHBoeV9jb25uZWN0X2RpcmVjdChkZXYtXHUwMDNlbmV0LCBwZGF0YS1cdTAwM2VwaHlkZXYsXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjg2LVx0XHRcdFx0IFx1MDAyNnNtc2M5NXh4X2hhbmRsZV9saW5rX2NoYW5nZSxcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjkyLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI5MzpcdHBoeV9hdHRhY2hlZF9pbmZvKGRldi1cdTAwM2VuZXQtXHUwMDNlcGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyOTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzAxCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1ESU8gQnVzIEVtdWxhdGlvbiBhbmQgVVNCIEdhZGdldHM6IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHN5emthbGxlciBjYW4gZW11bGF0ZSBVU0IgZGV2aWNlcyB3aXRoIE1ESU8gYnVzc2VzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhvc2UgbGlrZSBgYXg4ODE3MmFgLCBgc21zYzk1eHhgLCBhbmQgYGxhbjc4eHhgLiBUaGVzZSBoYXZlIE1ESU8gYnVzc2VzLCBidXQgdGhleSYjMzk7cmUgYWNjZXNzZWQgb3ZlciBVU0IuIENhbiBzeXprYWxsZXImIzM5O3MgcmF3LWdhZGdldCAvIHVzYi1mdXp6ZXIgc2V0dXAgaGFuZGxlIHRoYXQ/IFRoZSBhbnN3ZXIgaXMgeWVzLCBzeXprYWxsZXIgZG9lcyBoYXZlIFVTQiBlbXVsYXRpb24gdmlhIHJhdy1nYWRnZXQgYW5kIHRoZSBEdW1teSBIQ0QuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LgoKTm93LCB3aGVuIHN5emthbGxlciBlbXVsYXRlcyBvbmUgb2YgdGhlc2UgVVNCIGRldmljZXMg4oCTIHNheSwgYW55IG9mIHRob3NlIG1lbnRpb25lZCDigJMgdGhyb3VnaCByYXctZ2FkZ2V0IC8gdXNiLWZ1enplciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zIGR1cmluZyB0aGUgTURJTyBidXMgcHJvYmUuIFdoZW4gdGhlIGRldmljZSBnZXRzIHByb2JlZCwgSSBrbm93IHRoYXQgYG1kaW9idXNfcmVnaXN0ZXJgIG9yIGBnZXRfcGh5X2RldmljZWAgaXMgZ29pbmcgdG8gYmUgY2FsbGVkLCBhbmQgaXQmIzM5O3MgZ29pbmcgdG8gYXR0ZW1wdCB0byByZWFkIHJlZ2lzdGVycyAyIGFuZCAzIOKAkyB0aGUgUEhZIElEIOKAkyBvdmVyIFVTQi4gVGhlIGtleSBoZXJlIGlzICpob3cqIHRob3NlIHJlYWRzIGhhcHBlbi4gSXQmIzM5O3Mgbm90IHRocm91Z2ggc3RhbmRhcmQgVVNCIHRyYW5zZmVycywgYnV0IHRocm91Z2ggY29udHJvbCBvciB2ZW5kb3IgcmVxdWVzdHMgdG8gdGhlIGVtdWxhdGVkIFVTQiBnYWRnZXQhCgpXYWl0IGEgc2Vjb25kLCBsZXQmIzM5O3MgY29uY3JldGl6ZSB0aGlzLiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGVzZSBkcml2ZXJzIG9wZXJhdGUuIFRpbWUgdG8gbG9vayBpbnRvIHRoZSBhY3R1YWwgZHJpdmVyIGNvZGUhIEkgc2hvdWxkIGNoZWNrIGBkcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuY2Agb3IgYGxhbjc4eHguY2AgdG8gc2VlIHByZWNpc2VseSBob3cgdGhlIE1ESU8gcmVhZCBmdW5jdGlvbmFsaXR5IGlzIGltcGxlbWVudGVkLiBHb3R0YSBzZWUgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIGhvdyB0aG9zZSBVU0IgY29udHJvbC92ZW5kb3IgcmVxdWVzdHMgYXJlIGNvbnN0cnVjdGVkIGFuZCBoYW5kbGVkIHRvIGdldCB0aGUgUEhZIElELgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTA6XHRcdHJldCA9IGFzaXhfcmVhZF9waHlfYWRkcihkZXYsIHByaXYtXHUwMDNldXNlX2VtYmRwaHkpO1xuIDIxMTpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAyMTI6XHRcdFx0Z290byBmcmVlO1xuIDIxMzpcdFxuIDIxNDpcdFx0cHJpdi1cdTAwM2VwaHlfYWRkciA9IHJldDtcbiAyMTU6XHRcbiAyMTY6XHRcdGF4ODgxNzJhX3Jlc2V0X3BoeShkZXYsIHByaXYtXHUwMDNldXNlX2VtYmRwaHkpO1xuIDIxNzpcdFxuIDIxODpcdFx0LyogQXNpeCBmcmFtaW5nIHBhY2tzIG11bHRpcGxlIGV0aCBmcmFtZXMgaW50byBhIDJLIHVzYiBidWxrIHRyYW5zZmVyICovXG4gMjE5Olx0XHRpZiAoZGV2LVx1MDAzZWRyaXZlcl9pbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBGTEFHX0ZSQU1JTkdfQVgpIHtcbiAyMjA6XHRcdFx0LyogaGFyZF9tdHUgIGlzIHN0aWxsIHRoZSBkZWZhdWx0IC0gdGhlIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0XG4gMjIxOlx0XHRcdCAgIGp1bWJvIGV0aCBmcmFtZXMgKi9cbiAyMjI6XHRcdFx0ZGV2LVx1MDAzZXJ4X3VyYl9zaXplID0gMjA0ODtcbiAyMjM6XHRcdH1cbiAyMjQ6XHRcbiAyMjU6XHRcdC8qIGluaXQgTURJTyBidXMgKi9cbiAyMjY6XHRcdHJldCA9IGF4ODgxNzJhX2luaXRfbWRpbyhkZXYpO1xuIDIyNzpcdFx0aWYgKHJldClcbiAyMjg6XHRcdFx0Z290byBmcmVlO1xuIDIyOTpcdFxuIDIzMDpcdFx0cmV0dXJuIDA7XG4gMjMxOlx0XG4gMjMyOlx0ZnJlZTpcbiAyMzM6XHRcdGtmcmVlKHByaXYpO1xuIDIzNDpcdFx0cmV0dXJuIHJldDtcbiAyMzU6XHR9XG4gMjM2Olx0XG4gMjM3Olx0c3RhdGljIGludCBheDg4MTcyYV9zdG9wKHN0cnVjdCB1c2JuZXQgKmRldilcbiAyMzg6XHR7XG4gMjM5Olx0XHRzdHJ1Y3QgYXg4ODE3MmFfcHJpdmF0ZSAqcHJpdiA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbiAyNDA6XHRcbiAyNDE6XHRcdG5ldGRldl9kYmcoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7U3RvcHBpbmcgaW50ZXJmYWNlXFxuXCYjMzQ7KTtcbiAyNDI6XHRcbiAyNDM6XHRcdGlmIChwcml2LVx1MDAzZXBoeWRldikge1xuIDI0NDpcdFx0XHRuZXRkZXZfaW5mbyhkZXYtXHUwMDNlbmV0LCBcJiMzNDtEaXNjb25uZWN0aW5nIGZyb20gcGh5ICVzXFxuXCYjMzQ7LFxuIDI0NTpcdFx0XHRcdCAgICBwcml2LVx1MDAzZXBoeV9uYW1lKTtcbiAyNDY6XHRcdFx0cGh5X3N0b3AocHJpdi1cdTAwM2VwaHlkZXYpO1xuIDI0NzpcdFx0XHRwaHlfZGlzY29ubmVjdChwcml2LVx1MDAzZXBoeWRldik7XG4gMjQ4Olx0XHR9XG4gMjQ5Olx0XG4gMjUwOlx0XHRyZXR1cm4gMDtcbiAyNTE6XHR9XG4gMjUyOlx0XG4gMjUzOlx0c3RhdGljIHZvaWQgYXg4ODE3MmFfdW5iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4gMjU0Olx0e1xuIDI1NTpcdFx0c3RydWN0IGF4ODgxNzJhX3ByaXZhdGUgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4gMjU2Olx0XG4gMjU3Olx0XHRheDg4MTcyYV9yZW1vdmVfbWRpbyhkZXYpO1xuIDI1ODpcdFx0a2ZyZWUocHJpdik7XG4gMjU5Olx0fVxuIDI2MDpcdFxuIDI2MTpcdHN0YXRpYyBpbnQgYXg4ODE3MmFfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxuIDI2MjpcdHtcbiAyNjM6XHRcdHN0cnVjdCBhc2l4X2RhdGEgKmRhdGEgPSAoc3RydWN0IGFzaXhfZGF0YSAqKVx1MDAyNmRldi1cdTAwM2VkYXRhO1xuIDI2NDpcdFx0c3RydWN0IGF4ODgxNzJhX3ByaXZhdGUgKnByaXYgPSBkZXYtXHUwMDNlZHJpdmVyX3ByaXY7XG4gMjY1Olx0XHRpbnQgcmV0O1xuIDI2NjpcdFx0dTE2IHJ4X2N0bDtcbiAyNjc6XHRcbiAyNjg6XHRcdGF4ODgxNzJhX3Jlc2V0X3BoeShkZXYsIHByaXYtXHUwMDNldXNlX2VtYmRwaHkpO1xuIDI2OTpcdFxuIDI3MDpcdFx0bXNsZWVwKDE1MCk7XG4gMjcxOlx0XHRyeF9jdGwgPSBhc2l4X3JlYWRfcnhfY3RsKGRldiwgMCk7XG4gMjcyOlx0XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O1JYX0NUTCBpcyAweCUwNHggYWZ0ZXIgc29mdHdhcmUgcmVzZXRcXG5cJiMzNDssIHJ4X2N0bCk7XG4gMjczOlx0XHRyZXQgPSBhc2l4X3dyaXRlX3J4X2N0bChkZXYsIDB4MDAwMCwgMCk7XG4gMjc0Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDI3NTpcdFx0XHRnb3RvIG91dDtcbiAyNzY6XHRcbiAyNzc6XHRcdHJ4X2N0bCA9IGFzaXhfcmVhZF9yeF9jdGwoZGV2LCAwKTtcbiAyNzg6XHRcdG5ldGRldl9kYmcoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7UlhfQ1RMIGlzIDB4JTA0eCBzZXR0aW5nIHRvIDB4MDAwMFxcblwmIzM0OywgcnhfY3RsKTtcbiAyNzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwNDYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBheDg4MTcyYV9pbml0X21kaW9gIGZ1bmN0aW9uLiBNeSBleHBlcnQgZXllIGltbWVkaWF0ZWx5IHdhbnRzIHRvIHVuZGVyc3RhbmQgaXRzIGNvcmUgcHVycG9zZSB3aXRoaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiBFdGhlcm5ldCBkcml2ZXIgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IHJlc3BvbnNpYmxlIGZvci4gRnJvbSB0aGUgbmFtZSwgSSYjMzk7bSBndWVzc2luZyBpdCBoYW5kbGVzIHRoZSBNRElPIGludGVyZmFjZSBzZXR1cCBmb3IgdGhlIEFYODgxNzJBIGNoaXAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIGEgY29tbW9uIHN0ZXAgaW4gYnJpbmdpbmcgdXAgYSBQSFkuIEkgbmVlZCB0byBzZWUgaWYgaXQgc2V0cyB1cCB0aGUgTURJTyBjbG9jaywgY29uZmlndXJlcyBhbnkgbmVjZXNzYXJ5IHJlZ2lzdGVycyBmb3IgTURJTyBjb21tdW5pY2F0aW9uLCBhbmQgcGVyaGFwcyBwZXJmb3JtcyBhbiBpbml0aWFsIHByb2JlIG9yIHJlc2V0IG9mIHRoZSBQSFkgYXR0YWNoZWQgdG8gdGhlIE1ESU8gYnVzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgcmVnaXN0ZXIgYWNjZXNzZXMgYW5kIGJpdCBtYW5pcHVsYXRpb25zIHdpdGhpbiB0aGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBFc3NlbnRpYWxseSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSB0aGUgZmlyc3Qgc3RlcCBpbiBlbmFibGluZyB0aGUgbGluayB3aXRoIHRoZSBQSFkuIFNvIEkgbmVlZCB0byBrbm93IGhvdyBkb2VzIGl0IGluaXRpYWxpemUgdGhlIE1JSSBpbnRlcmZhY2U/IFdoYXQgcmVnaXN0ZXIgc2V0dGluZ3MgZG9lcyBpdCBlbXBsb3k/IERvZXMgaXQgaW50ZXJhY3Qgd2l0aCBhIGhpZ2hlci1sZXZlbCBmcmFtZXdvcms/IFRoaXMgaXMgd2hlcmUgdGhlIHRydWUgdW5kZXJzdGFuZGluZyBiZWdpbnMgdG8gZW1lcmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDU6XHRcbiAxNDY6XHRcdHJldCA9IGFzaXhfc3dfcmVzZXQoZGV2LCBlbWJkX3BoeSA/IEFYX1NXUkVTRVRfSVBSTCA6IEFYX1NXUkVTRVRfSVBQRCxcbiAxNDc6XHRcdFx0XHQgICAgMCk7XG4gMTQ4Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDE0OTpcdFx0XHRnb3RvIGVycjtcbiAxNTA6XHRcbiAxNTE6XHRcdHJldHVybiAwO1xuIDE1MjpcdFxuIDE1MzpcdGVycjpcbiAxNTQ6XHRcdHJldHVybiByZXQ7XG4gMTU1Olx0fVxuIDE1NjpcdFxuIDE1NzpcdFxuIDE1ODpcdHN0YXRpYyBpbnQgYXg4ODE3MmFfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIDE1OTpcdHtcbiAxNjA6XHRcdGludCByZXQ7XG4gMTYxOlx0XHR1OCBidWZbRVRIX0FMRU5dO1xuIDE2MjpcdFx0c3RydWN0IGF4ODgxNzJhX3ByaXZhdGUgKnByaXY7XG4gMTYzOlx0XG4gMTY0Olx0XHRyZXQgPSB1c2JuZXRfZ2V0X2VuZHBvaW50cyhkZXYsIGludGYpO1xuIDE2NTpcdFx0aWYgKHJldClcbiAxNjY6XHRcdFx0cmV0dXJuIHJldDtcbiAxNjc6XHRcbiAxNjg6XHRcdHByaXYgPSBremFsbG9jX29iaigqcHJpdik7XG4gMTY5Olx0XHRpZiAoIXByaXYpXG4gMTcwOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDE3MTpcdFxuIDE3MjpcdFx0ZGV2LVx1MDAzZWRyaXZlcl9wcml2ID0gcHJpdjtcbiAxNzM6XHRcbiAxNzQ6XHRcdC8qIEdldCB0aGUgTUFDIGFkZHJlc3MgKi9cbiAxNzU6XHRcdHJldCA9IGFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9OT0RFX0lELCAwLCAwLCBFVEhfQUxFTiwgYnVmLCAwKTtcbiAxNzY6XHRcdGlmIChyZXQgXHUwMDNjIEVUSF9BTEVOKSB7XG4gMTc3Olx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7RmFpbGVkIHRvIHJlYWQgTUFDIGFkZHJlc3M6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIDE3ODpcdFx0XHRyZXQgPSAtRUlPO1xuIDE3OTpcdFx0XHRnb3RvIGZyZWU7XG4gMTgwOlx0XHR9XG4gMTgxOlx0XHRldGhfaHdfYWRkcl9zZXQoZGV2LVx1MDAzZW5ldCwgYnVmKTtcbiAxODI6XHRcbiAxODM6XHRcdGRldi1cdTAwM2VuZXQtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNmF4ODgxNzJhX25ldGRldl9vcHM7XG4gMTg0Olx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2YXg4ODE3MmFfZXRodG9vbF9vcHM7XG4gMTg1Olx0XG4gMTg2Olx0XHQvKiBhcmUgd2UgdXNpbmcgdGhlIGludGVybmFsIG9yIHRoZSBleHRlcm5hbCBwaHk/ICovXG4gMTg3Olx0XHRyZXQgPSBhc2l4X3JlYWRfY21kKGRldiwgQVhfQ01EX1NXX1BIWV9TVEFUVVMsIDAsIDAsIDEsIGJ1ZiwgMCk7XG4gMTg4Olx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gMTg5Olx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7RmFpbGVkIHRvIHJlYWQgc29mdHdhcmUgaW50ZXJmYWNlIHNlbGVjdGlvbiByZWdpc3RlcjogJWRcXG5cJiMzNDssXG4gMTkwOlx0XHRcdFx0ICAgcmV0KTtcbiAxOTE6XHRcdFx0Z290byBmcmVlO1xuIDE5MjpcdFx0fVxuIDE5MzpcdFxuIDE5NDpcdFx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDtBWF9DTURfU1dfUEhZX1NUQVRVUyA9IDB4JTAyeFxcblwmIzM0OywgYnVmWzBdKTtcbiAxOTU6XHRcdHN3aXRjaCAoYnVmWzBdIFx1MDAyNiBBWF9QSFlfU0VMRUNUX01BU0spIHtcbiAxOTY6XHRcdGNhc2UgQVhfUEhZX1NFTEVDVF9JTlRFUk5BTDpcbiAxOTc6XHRcdFx0bmV0ZGV2X2RiZyhkZXYtXHUwMDNlbmV0LCBcJiMzNDt1c2UgaW50ZXJuYWwgcGh5XFxuXCYjMzQ7KTtcbiAxOTg6XHRcdFx0cHJpdi1cdTAwM2V1c2VfZW1iZHBoeSA9IDE7XG4gMTk5Olx0XHRcdGJyZWFrO1xuIDIwMDpcdFx0Y2FzZSBBWF9QSFlfU0VMRUNUX0VYVEVSTkFMOlxuIDIwMTpcdFx0XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O3VzZSBleHRlcm5hbCBwaHlcXG5cJiMzNDspO1xuIDIwMjpcdFx0XHRwcml2LVx1MDAzZXVzZV9lbWJkcGh5ID0gMDtcbiAyMDM6XHRcdFx0YnJlYWs7XG4gMjA0Olx0XHRkZWZhdWx0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTI4NAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZm9jdXNpbmcgb24gbGluZXMgMTAwLTE0NSBvZiBgZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmNgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGNvZGUgd2l0aGluIHRoaXMgc2VjdGlvbi4KX19fCgoqKkFuYWx5emluZyBheDg4MTcyYS5jIExpbmVzIDEwMC0xNDUqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHNwZWNpZmljIGNodW5rIG9mIGNvZGUgd2l0aGluIHRoZSBsYXJnZXIgZHJpdmVyLiBHaXZlbiBteSBleHBlcmllbmNlLCB0aGUgY29udGV4dCBoZXJlIGxpa2VseSBpbnZvbHZlcyBpbml0aWFsaXphdGlvbiwgZGV2aWNlIHNldHVwLCBvciBwZXJoYXBzIGEgY3JpdGljYWwgaW50ZXJydXB0IGhhbmRsZXIuIFRoZXNlIGxpbmVzIGFyZSBjcnVjaWFsIGJlY2F1c2UgdGhleSB0eXBpY2FsbHkgaGFuZGxlIHRoZSBpbml0aWFsIGNvbW11bmljYXRpb24gd2l0aCB0aGUgQVg4ODE3MkEgY2hpcHNldCwgc2V0dGluZyB1cCB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGZvciBkYXRhIHRyYW5zZmVyLiBCYXNlZCBvbiB0aGUgZmlsZSBwYXRoLCBJIGV4cGVjdCB0byBzZWUgVVNCLXNwZWNpZmljIGFzcGVjdHMsIGxpa2UgZW5kcG9pbnQgY29uZmlndXJhdGlvbiwgc2V0dGluZyB1cCBjb250cm9sIHRyYW5zZmVycywgYW5kIHBvdGVudGlhbGx5IHNvbWUgZGV2aWNlLXNwZWNpZmljIHJlZ2lzdGVycyBiZWluZyBhZGRyZXNzZWQuIEkgbmVlZCB0byBvYnNlcnZlIGFueSBkYXRhIHN0cnVjdHVyZXMgdXNlZCB3aXRoaW4gdGhhdCBjb2RlIHNlZ21lbnQgYmVjYXVzZSB0aGV5IGdpdmUgY29udGV4dCB0byBob3cgY29tbXVuaWNhdGlvbiBoYXBwZW5zLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHRoZXNlIGxpbmVzIHdpbGwgZXN0YWJsaXNoIHRoZSBmb3VuZGF0aW9uIGZvciB0aGlzIFVTQiBuZXR3b3JrIGFkYXB0ZXIgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJZiB0aGVyZSYjMzk7cyBhbiBpbnRlcnJ1cHQgc2V0dXAsIHRoYXQmIzM5O3MgcmVhbGx5IGltcG9ydGFudCB0byBrZWVwIGFuIGV5ZSBvbiBiZWNhdXNlIGl0IGhhcyBhIGxvdCBvZiBlZmZlY3Qgb24gcGVyZm9ybWFuY2UuIEkmIzM5O20gZ29pbmcgdG8gZ2V0IGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgb2NjdXJzIGhlcmUgYmVmb3JlIGp1bXBpbmcgaW50byBhbnkgY29uY2x1c2lvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdFx0bWRpb2J1c19mcmVlKHByaXYtXHUwMDNlbWRpbyk7XG4gMTAxOlx0fVxuIDEwMjpcdFxuIDEwMzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYXg4ODE3MmFfbmV0ZGV2X29wcyA9IHtcbiAxMDQ6XHRcdC5uZG9fb3Blblx0XHQ9IHVzYm5ldF9vcGVuLFxuIDEwNTpcdFx0Lm5kb19zdG9wXHRcdD0gdXNibmV0X3N0b3AsXG4gMTA2Olx0XHQubmRvX3N0YXJ0X3htaXRcdFx0PSB1c2JuZXRfc3RhcnRfeG1pdCxcbiAxMDc6XHRcdC5uZG9fdHhfdGltZW91dFx0XHQ9IHVzYm5ldF90eF90aW1lb3V0LFxuIDEwODpcdFx0Lm5kb19jaGFuZ2VfbXR1XHRcdD0gdXNibmV0X2NoYW5nZV9tdHUsXG4gMTA5Olx0XHQubmRvX2dldF9zdGF0czY0XHQ9IGRldl9nZXRfdHN0YXRzNjQsXG4gMTEwOlx0XHQubmRvX3NldF9tYWNfYWRkcmVzc1x0PSBhc2l4X3NldF9tYWNfYWRkcmVzcyxcbiAxMTE6XHRcdC5uZG9fdmFsaWRhdGVfYWRkclx0PSBldGhfdmFsaWRhdGVfYWRkcixcbiAxMTI6XHRcdC5uZG9fZXRoX2lvY3RsXHRcdD0gcGh5X2RvX2lvY3RsX3J1bm5pbmcsXG4gMTEzOlx0XHQubmRvX3NldF9yeF9tb2RlICAgICAgICA9IGFzaXhfc2V0X211bHRpY2FzdCxcbiAxMTQ6XHR9O1xuIDExNTpcdFxuIDExNjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYXg4ODE3MmFfZXRodG9vbF9vcHMgPSB7XG4gMTE3Olx0XHQuZ2V0X2RydmluZm9cdFx0PSB1c2JuZXRfZ2V0X2RydmluZm8sXG4gMTE4Olx0XHQuZ2V0X2xpbmtcdFx0PSB1c2JuZXRfZ2V0X2xpbmssXG4gMTE5Olx0XHQuZ2V0X21zZ2xldmVsXHRcdD0gdXNibmV0X2dldF9tc2dsZXZlbCxcbiAxMjA6XHRcdC5zZXRfbXNnbGV2ZWxcdFx0PSB1c2JuZXRfc2V0X21zZ2xldmVsLFxuIDEyMTpcdFx0LmdldF93b2xcdFx0PSBhc2l4X2dldF93b2wsXG4gMTIyOlx0XHQuc2V0X3dvbFx0XHQ9IGFzaXhfc2V0X3dvbCxcbiAxMjM6XHRcdC5nZXRfZWVwcm9tX2xlblx0XHQ9IGFzaXhfZ2V0X2VlcHJvbV9sZW4sXG4gMTI0Olx0XHQuZ2V0X2VlcHJvbVx0XHQ9IGFzaXhfZ2V0X2VlcHJvbSxcbiAxMjU6XHRcdC5zZXRfZWVwcm9tXHRcdD0gYXNpeF9zZXRfZWVwcm9tLFxuIDEyNjpcdFx0Lm53YXlfcmVzZXRcdFx0PSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LFxuIDEyNzpcdFx0LmdldF9saW5rX2tzZXR0aW5nc1x0PSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsXG4gMTI4Olx0XHQuc2V0X2xpbmtfa3NldHRpbmdzXHQ9IHBoeV9ldGh0b29sX3NldF9saW5rX2tzZXR0aW5ncyxcbiAxMjk6XHR9O1xuIDEzMDpcdFxuIDEzMTpcdHN0YXRpYyBpbnQgYXg4ODE3MmFfcmVzZXRfcGh5KHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IGVtYmRfcGh5KVxuIDEzMjpcdHtcbiAxMzM6XHRcdGludCByZXQ7XG4gMTM0Olx0XG4gMTM1Olx0XHRyZXQgPSBhc2l4X3N3X3Jlc2V0KGRldiwgQVhfU1dSRVNFVF9JUFBELCAwKTtcbiAxMzY6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMTM3Olx0XHRcdGdvdG8gZXJyO1xuIDEzODpcdFxuIDEzOTpcdFx0bXNsZWVwKDE1MCk7XG4gMTQwOlx0XHRyZXQgPSBhc2l4X3N3X3Jlc2V0KGRldiwgQVhfU1dSRVNFVF9DTEVBUiwgMCk7XG4gMTQxOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDE0MjpcdFx0XHRnb3RvIGVycjtcbiAxNDM6XHRcbiAxNDQ6XHRcdG1zbGVlcCgxNTApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQ3NwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGxpbmVzIDUwLTEwMCBvZiBgYXg4ODE3MmEuY2AuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBwYXJzZSB0aGF0IHNlY3Rpb24gYW5kIGNvbnNpZGVyIGl0IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgb3ZlcmFsbCBkcml2ZXIgYXJjaGl0ZWN0dXJlIEkga25vdyBzbyB3ZWxsLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGV5JiMzOTtyZSBoYW5kbGluZ+KApiBwZXJoYXBzIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZT8gT3IgbWF5YmUgaXQmIzM5O3MgdGhlIGludGVycnVwdCBzZXR1cCwgb3IgZXZlbiB0aGUgYmFzaWMgUEhZIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHNpbWlsYXIgbmV0d29yayBjb250cm9sbGVycywgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIHJlZ2lzdGVyIGludGVycnVwdCBoYW5kbGVycywgY29uZmlndXJlIE1BQyBhZGRyZXNzIGZpbHRlcnMsIG9yIGluaXRpYWxpemUgdGhlIFBIWSByZWdpc3RlcnMgaWYgdGhleSBhcmUgcmVzcG9uc2libGUuCgpNeSBmb2N1cyB3aWxsIGJlIG9uIGlkZW50aWZ5aW5nIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IGFyZSBiZWluZyBjYWxsZWQgYW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIHRoZXkgYXJlIG9wZXJhdGluZyBvbi4gQXJlIHRoZXkgdXNpbmcgYSBkZXZpY2Utc3BlY2lmaWMgc3RydWN0dXJlIHRvIHN0b3JlIGhhcmR3YXJlIHN0YXRlPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzPyBBcmUgdGhleSBoYW5kbGluZyBhbnkgZXJyb3IgY29uZGl0aW9ucyBvciBlZGdlIGNhc2VzIHRoYXQgSSBzaG91bGQgdGFrZSBub3RlIG9mPwoKSSB3aWxsIHN0YXJ0IGJ5IHJhcGlkbHkgc2Nhbm5pbmcgdGhlIGNvZGUgdG8gZ2V0IHRoZSBnaXN0LCBhbmQgdGhlbiBmb2N1cyBvbiBpbmRpdmlkdWFsIGxpbmVzIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljLiBJIGFtIGFsc28gbG9va2luZyBmb3IgY29tbW9uIGlkaW9tcyB0aGF0IHRoZSB3cml0ZXIgdXNlZC4gVGhpcyB3aWxsIGhlbHAgbWUgdG8gdW5kZXJzdGFuZCB0aGVpciBwcm9jZXNzLiBJ4oCZbGwgbWFrZSBhIG1lbnRhbCBub3RlIG9mIGFueSBzdXNwaWNpb3VzIGNvZGUgb3IgYW55dGhpbmcgdGhhdCBkZXZpYXRlcyBmcm9tIGJlc3QgcHJhY3RpY2VzLiBJ4oCZbSB0aGlua2luZyBpbiB0ZXJtcyBvZiBwb3RlbnRpYWwgZnV0dXJlIGRlYnVnZ2luZywgbWFpbnRlbmFuY2UsIGFuZCB3aGV0aGVyIHRoaXMgc2VjdGlvbiBpcyB3ZWxsLXdyaXR0ZW4gYW5kIG1haW50YWluYWJsZS4gSSYjMzk7bSBhbHNvIHJlYWR5IHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdyBpZiBJIGNvbWUgYWNyb3NzIGFueSB1bmZhbWlsaWFyIGNhbGxzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTA6XHRcdFx0XHQgICBwaHlkZXYtXHUwMDNlc3BlZWQsIHBoeWRldi1cdTAwM2VkdXBsZXgsIG1vZGUpO1xuICA1MTpcdFx0XHRwaHlfcHJpbnRfc3RhdHVzKHBoeWRldik7XG4gIDUyOlx0XHR9XG4gIDUzOlx0fVxuICA1NDpcdFxuICA1NTpcdHN0YXRpYyB2b2lkIGF4ODgxNzJhX3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYilcbiAgNTY6XHR7XG4gIDU3Olx0XHQvKiBsaW5rIGNoYW5nZXMgYXJlIGRldGVjdGVkIGJ5IHBvbGxpbmcgdGhlIHBoeSAqL1xuICA1ODpcdH1cbiAgNTk6XHRcbiAgNjA6XHQvKiB1c2UgcGh5bGliIGluZnJhc3RydWN0dXJlICovXG4gIDYxOlx0c3RhdGljIGludCBheDg4MTcyYV9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxuICA2MjpcdHtcbiAgNjM6XHRcdHN0cnVjdCBheDg4MTcyYV9wcml2YXRlICpwcml2ID0gZGV2LVx1MDAzZWRyaXZlcl9wcml2O1xuICA2NDpcdFx0aW50IHJldDtcbiAgNjU6XHRcbiAgNjY6XHRcdHByaXYtXHUwMDNlbWRpbyA9IG1kaW9idXNfYWxsb2MoKTtcbiAgNjc6XHRcdGlmICghcHJpdi1cdTAwM2VtZGlvKSB7XG4gIDY4Olx0XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7Q291bGQgbm90IGFsbG9jYXRlIE1ESU8gYnVzXFxuXCYjMzQ7KTtcbiAgNjk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gIDcwOlx0XHR9XG4gIDcxOlx0XG4gIDcyOlx0XHRwcml2LVx1MDAzZW1kaW8tXHUwMDNlcHJpdiA9ICh2b2lkICopZGV2O1xuICA3MzpcdFx0cHJpdi1cdTAwM2VtZGlvLVx1MDAzZXJlYWQgPSBcdTAwMjZhc2l4X21kaW9fYnVzX3JlYWQ7XG4gIDc0Olx0XHRwcml2LVx1MDAzZW1kaW8tXHUwMDNld3JpdGUgPSBcdTAwMjZhc2l4X21kaW9fYnVzX3dyaXRlO1xuICA3NTpcdFx0cHJpdi1cdTAwM2VtZGlvLVx1MDAzZW5hbWUgPSBcJiMzNDtBc2l4IE1ESU8gQnVzXCYjMzQ7O1xuICA3NjpcdFx0LyogbWlpIGJ1cyBuYW1lIGlzIHVzYi1cdTAwM2N1c2IgYnVzIG51bWJlclx1MDAzZS1cdTAwM2N1c2IgZGV2aWNlIG51bWJlclx1MDAzZSAqL1xuICA3NzpcdFx0c25wcmludGYocHJpdi1cdTAwM2VtZGlvLVx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsIFwmIzM0O3VzYi0lMDNkOiUwM2RcJiMzNDssXG4gIDc4Olx0XHRcdCBkZXYtXHUwMDNldWRldi1cdTAwM2VidXMtXHUwMDNlYnVzbnVtLCBkZXYtXHUwMDNldWRldi1cdTAwM2VkZXZudW0pO1xuICA3OTpcdFxuICA4MDpcdFx0cmV0ID0gbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZW1kaW8pO1xuICA4MTpcdFx0aWYgKHJldCkge1xuICA4MjpcdFx0XHRuZXRkZXZfZXJyKGRldi1cdTAwM2VuZXQsIFwmIzM0O0NvdWxkIG5vdCByZWdpc3RlciBNRElPIGJ1c1xcblwmIzM0Oyk7XG4gIDgzOlx0XHRcdGdvdG8gbWZyZWU7XG4gIDg0Olx0XHR9XG4gIDg1Olx0XG4gIDg2Olx0XHRuZXRkZXZfaW5mbyhkZXYtXHUwMDNlbmV0LCBcJiMzNDtyZWdpc3RlcmVkIG1kaW8gYnVzICVzXFxuXCYjMzQ7LCBwcml2LVx1MDAzZW1kaW8tXHUwMDNlaWQpO1xuICA4NzpcdFx0cmV0dXJuIDA7XG4gIDg4Olx0XG4gIDg5Olx0bWZyZWU6XG4gIDkwOlx0XHRtZGlvYnVzX2ZyZWUocHJpdi1cdTAwM2VtZGlvKTtcbiAgOTE6XHRcdHJldHVybiByZXQ7XG4gIDkyOlx0fVxuICA5MzpcdFxuICA5NDpcdHN0YXRpYyB2b2lkIGF4ODgxNzJhX3JlbW92ZV9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcbiAgOTU6XHR7XG4gIDk2Olx0XHRzdHJ1Y3QgYXg4ODE3MmFfcHJpdmF0ZSAqcHJpdiA9IGRldi1cdTAwM2Vkcml2ZXJfcHJpdjtcbiAgOTc6XHRcbiAgOTg6XHRcdG5ldGRldl9pbmZvKGRldi1cdTAwM2VuZXQsIFwmIzM0O2RlcmVnaXN0ZXJpbmcgbWRpbyBidXMgJXNcXG5cJiMzNDssIHByaXYtXHUwMDNlbWRpby1cdTAwM2VpZCk7XG4gIDk5Olx0XHRtZGlvYnVzX3VucmVnaXN0ZXIocHJpdi1cdTAwM2VtZGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc2MDMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyODU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBbmFseXNpczogbW90b3Jjb21tIFBIWSBEcml2ZXIqKgoKT2theSwgc28gaGVyZSYjMzk7cyB0aGUgYnJlYWtkb3duIG9mIG15IHRob3VnaHQgcHJvY2VzcyByZWdhcmRpbmcgdGhpcyBwYXRjaCBhbmQgd2hldGhlciBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYG1vdG9yY29tbWAgUEhZIGRyaXZlciBjYW4gYmUgdHJpZ2dlcmVkIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudCBsaWtlIFFFTVUsIGJlY2F1c2UgdGhlIHBhdGNoIGVkaXRzIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgZHJpdmVyLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhhdCBjb25maWd1cmF0aW9uIGNhbiBiZSByZWFjaGVkIGZyb20gYW4gZW11bGF0aW9uIGNvbnRleHQuCgpGaXJzdCwgSSBzZWUgdGhhdCB0aGUgY29kZSB1c2VzIGBtZGlvYnVzX3JlZ2lzdGVyKClgLiBUaGlzIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW4gTURJTyBidXMsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoZSBrZXJuZWwgc2NhbnMgdGhlIGJ1cyBieSByZWFkaW5nIFBIWSBJRHMuIElmIHRoZSBlbXVsYXRlZCBVU0IgZGV2aWNlIHJldHVybnMgdGhlIGNvcnJlY3QgUEhZIElEcyBmb3IgdGhlIE1vdG9yY29tbSBZVDg1eHggZmFtaWx5IChsaWtlIGBQSFlfSURfWVQ4NTMxU2Agb3Igb3RoZXJzKSwgdGhlIGBtb3RvcmNvbW1gIFBIWSBkcml2ZXIgc2hvdWxkIG1hdGNoLCBwcm9iZSwgYW5kIGNhbGwgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIGxpa2UgYHl0ODUzMXNfY29uZmlnX2luaXRgLgoKTXkgYnJhaW4ganVtcHMgdG8gdGhlIHBvc3NpYmlsaXRpZXMgb2YgVVNCIGVtdWxhdGlvbi4gQ2FuIHdlIGdldCBoZXJlIHZpYSBhbiBlbXVsYXRlZCBVU0IgZGV2aWNlPyBXZSBtaWdodCBiZSBhYmxlIHRvIGNyZWF0ZSBhbiBNRElPIGJ1cyB2aXJ0dWFsbHkgdGhyb3VnaCBVU0IgZW11bGF0aW9uIHVzaW5nIGRldmljZXMgbGlrZSBgdXNibmV0YCwgYGF4ODgxNzJhYCwgYGxhbjc4eHhgLCBvciBgc21zYzk1eHhgLiBUaGUgc3l6a2FsbGVyIGZ1enplciBpcyBrZXkgaGVyZSwgZXNwZWNpYWxseSB3aXRoIHRoZSByYXctZ2FkZ2V0IC8gZHVtbXlfaGNkIGZlYXR1cmVzOyB0aGV5IHNob3VsZCBhbGxvdyBtZSB0byBtaW1pYyB0aGUgYmVoYXZpb3Igb2YgYSBVU0IgZGV2aWNlIGFuZCByZXR1cm4gc3BlY2lmaWMgcmVzcG9uc2VzLCBpbmNsdWRpbmcgdGhvc2UgdGhhdCBpZGVudGlmeSB0aGUgUEhZLgoKSWYgc3l6a2FsbGVyIGNhbiBlbXVsYXRlIGEgVVNCIGRldmljZSAoZS5nLiwgYGF4ODgxNzJhYCBVU0IgdG8gZXRoZXJuZXQgZGV2aWNlKSB0aGF0IHRyaWdnZXJzIHRoZSBNRElPIGJ1cyBzY2FuIGFuZCByZXR1cm5zIHRoZSBjb3JyZWN0IFBIWSBJRHMsIHRoZW4gdGhlIGBtb3RvcmNvbW1gIGRyaXZlciBpcyByZWFjaGFibGUuIFRoaXMgbWVhbnMgdGhhdCBhIFVTQiBkZXZpY2UgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gcmVzcG9uZCB3aXRoIHRoZSByaWdodCBQSFkgSUQgd2hlbiBgbWRpb2J1c19yZWdpc3RlcigpYCBpcyBjYWxsZWQuIFRoZW4gdGhlIGBtb3RvcmNvbW1gIGRyaXZlciBjYW4gYmUgcHJvYmVkIGFuZCBpbml0aWFsaXplZC4KCkkgbmVlZCB0byBjb25maXJtIGlmIGRpc2NyZXRlIEV0aGVybmV0IFBIWSBjaGlwcyBhcmUgcmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUvR0NFLiBUaGUgZG9jdW1lbnRhdGlvbiBhYm91dCBmdXp6aW5nIGZpbHRlcnMgbWVudGlvbnMgdGhhdCBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIChsaWtlIGNlcnRhaW4gUENJZSBkcml2ZXJzIG9yIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSkgYXJlIG5vdCB3b3J0aCBmdXp6aW5nLiBCdXQgSSBkb24mIzM5O3QgdGhpbmsgaXQgaXMgdGhlIGNhc2UgaGVyZS4KCkkgYWxzbyByZXZpZXdlZCB0aGUgcGF0Y2ggaXRzZWxmLCBmb2N1c2luZyBvbiBgbW90b3Jjb21tLmNgLiBUaGUgcGF0Y2ggY2hhbmdlZCB0aGUgZnVuY3Rpb24gdGhhdCBpbml0aWFsaXplcyB0aGUgUEhZLCBgeXQ4NTIxX2NvbmZpZ19pbml0YCB0byBgeXQ4NTMxc19jb25maWdfaW5pdGAgYW5kIGFkZGVkIHNvbWUgcmVnaXN0ZXJzLiBUaGUgYG1vdG9yY29tbS5jYCBpcyB0aGUga2V5IGZpbGUgaGVyZS4KClNvLCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVzZSBVU0IgZW11bGF0aW9ucyBjYW4gdHJpZ2dlciB0aGUgY29kZSBwYXRocy4gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGlmIGBDT05GSUdfTU9UT1JDT01NX1BIWWAgaXMgYSBwaHlsaWIgZHJpdmVyLiBUaGF0JiMzOTtzIGEgcXVpY2sgY2hlY2sgaW4gdGhlIEtjb25maWcgZmlsZXMuCgpCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJiMzOTttIGxlYW5pbmcgdG93YXJkcyAqeWVzKiAtIHRoaXMgaXMgbGlrZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIFVTQiBlbXVsYXRpb24gaW4gUUVNVSwgcGFydGljdWxhcmx5IGlmIHRoZSBzeXprYWxsZXIgZnV6emVyIGNhbiBiZSBjb25maWd1cmVkIHRvIG1pbWljIHRoZSByZXNwb25zZXMgZnJvbSBhIHJlbGV2YW50IFVTQi10by1FdGhlcm5ldCBhZGFwdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNjA6XHRcdCAgQ3VycmVudGx5IHN1cHBvcnRzIFZTQzg1MTQsIFZTQzg1MzAsIFZTQzg1MzEsIFZTQzg1NDAgYW5kIFZTQzg1NDEgUEhZc1xuIDM2MTpcdFxuIDM2MjpcdGNvbmZpZyBNT1RPUkNPTU1fUEhZXG4gMzYzOlx0XHR0cmlzdGF0ZSBcJiMzNDtNb3RvcmNvbW0gUEhZc1wmIzM0O1xuIDM2NDpcdFx0aGVscFxuIDM2NTpcdFx0ICBFbmFibGVzIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBuZXR3b3JrIFBIWXMuXG4gMzY2Olx0XHQgIEN1cnJlbnRseSBzdXBwb3J0cyBZVDg1eHggR2lnYWJpdCBFdGhlcm5ldCBQSFlzLlxuIDM2NzpcdFxuIDM2ODpcdGNvbmZpZyBOQVRJT05BTF9QSFlcbiAzNjk6XHRcdHRyaXN0YXRlIFwmIzM0O05hdGlvbmFsIFNlbWljb25kdWN0b3IgUEhZc1wmIzM0O1xuIDM3MDpcdFx0aGVscFxuIDM3MTpcdFx0ICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIERQODM4NjUgUEhZLlxuIDM3MjpcdFxuIDM3MzpcdGNvbmZpZyBOWFBfQ0JUWF9QSFlcbiAzNzQ6XHRcdHRyaXN0YXRlIFwmIzM0O05YUCAxMDBCQVNFLVRYIFBIWXNcJiMzNDtcbiAzNzU6XHRcdGhlbHBcbiAzNzY6XHRcdCAgU3VwcG9ydCB0aGUgMTAwQkFTRS1UWCBQSFkgaW50ZWdyYXRlZCBvbiB0aGUgU0pBMTExMCBhdXRvbW90aXZlXG4gMzc3Olx0XHQgIHN3aXRjaCBmYW1pbHkuXG4gMzc4Olx0XG4gMzc5Olx0Y29uZmlnIE5YUF9DNDVfVEpBMTFYWF9QSFlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE0ODAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyB0aGUgUEhZIEtjb25maWcgZm9yIENvbnRleHQqKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyBpbnRvIHRoaXMgZHJpdmVyIGNoYW5nZSwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHN1cnJvdW5kaW5nIGxhbmRzY2FwZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIHN0YW5kYXJkIHByYWN0aWNlIGFuZCBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIEkmIzM5O20gaGVhZGluZyBvdmVyIHRvIGBkcml2ZXJzL25ldC9waHkvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgbWVudXMsIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBvZiBob3cgdGhlc2UgUEhZIGRyaXZlcnMgYXJlIG9yZ2FuaXplZCB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbS4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGhlcmUgaXMgY3JpdGljYWw7IEkgbmVlZCB0byBzZWUgKndoYXQqIGVuYWJsZXMgKndoYXQqLCBhbmQgZW5zdXJlIG15IGNoYW5nZXMgZG9uJiMzOTt0IGluYWR2ZXJ0ZW50bHkgYnJlYWsgZXhpc3RpbmcgY29uZmlndXJhdGlvbnMgb3IgaW50cm9kdWNlIGNvbmZsaWN0cy4gVGhpcyBpbml0aWFsIHN0ZXAgd2lsbCBnaXZlIG1lIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byBwcm9jZWVkIHNhZmVseSBhbmQgZWZmZWN0aXZlbHkuIEl0JiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHdoZW4gYXNzZXNzaW5nIHRoZSBpbXBhY3Qgb2YgYSBjaGFuZ2UgaW4gdGhpcyBzcGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFBIWSBMYXllciBDb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBQSFlMSU5LXG4gICA3Olx0XHR0cmlzdGF0ZVxuICAgODpcdFx0c2VsZWN0IFBIWUxJQlxuICAgOTpcdFx0c2VsZWN0IFNXUEhZXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIFBIWWxpbmsgbW9kZWxzIHRoZSBsaW5rIGJldHdlZW4gdGhlIFBIWSBhbmQgTUFDLCBhbGxvd2luZyBmaXhlZFxuICAxMjpcdFx0ICBjb25maWd1cmF0aW9uIGxpbmtzLCBQSFlzLCBhbmQgU2VyZGVzIGxpbmtzIHdpdGggTUFDIGxldmVsXG4gIDEzOlx0XHQgIGF1dG9uZWdvdGlhdGlvbiBtb2Rlcy5cbiAgMTQ6XHRcbiAgMTU6XHRtZW51Y29uZmlnIFBIWUxJQlxuICAxNjpcdFx0dHJpc3RhdGUgXCYjMzQ7UEhZIERldmljZSBzdXBwb3J0IGFuZCBpbmZyYXN0cnVjdHVyZVwmIzM0O1xuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBFdGhlcm5ldCBjb250cm9sbGVycyBhcmUgdXN1YWxseSBhdHRhY2hlZCB0byBQSFlcbiAgMTk6XHRcdCAgZGV2aWNlcy4gIFRoaXMgb3B0aW9uIHByb3ZpZGVzIGluZnJhc3RydWN0dXJlIGZvclxuICAyMDpcdFx0ICBtYW5hZ2luZyBQSFkgZGV2aWNlcy5cbiAgMjE6XHRcbiAgMjI6XHRpZiBQSFlMSUJcbiAgMjM6XHRcbiAgMjQ6XHRjb25maWcgU1dQSFlcbiAgMjU6XHRcdGJvb2xcbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgUEhZX1BBQ0tBR0VcbiAgMjg6XHRcdCB0cmlzdGF0ZVxuICAyOTpcdFxuICAzMDpcdGNvbmZpZyBMRURfVFJJR0dFUl9QSFlcbiAgMzE6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBMRUQgdHJpZ2dlcnMgZm9yIHRyYWNraW5nIGxpbmsgc3RhdGVcJiMzNDtcbiAgMzI6XHRcdGRlcGVuZHMgb24gTEVEU19UUklHR0VSU1xuICAzMzpcdFx0aGVscFxuICAzNDpcdFx0ICBBZGRzIHN1cHBvcnQgZm9yIGEgc2V0IG9mIExFRCB0cmlnZ2VyIGV2ZW50cyBwZXItUEhZLiAgTGlua1xuICAzNTpcdFx0ICBzdGF0ZSBjaGFuZ2Ugd2lsbCB0cmlnZ2VyIHRoZSBldmVudHMsIGZvciBjb25zdW1wdGlvbiBieSBhblxuICAzNjpcdFx0ICBMRUQgY2xhc3MgZHJpdmVyLiAgVGhlcmUgYXJlIHRyaWdnZXJzIGZvciBlYWNoIGxpbmsgc3BlZWQgY3VycmVudGx5XG4gIDM3Olx0XHQgIHN1cHBvcnRlZCBieSB0aGUgUEhZIGFuZCBhbHNvIGEgb25lIGNvbW1vbiBcJiMzNDtsaW5rXCYjMzQ7IHRyaWdnZXIgYXMgYVxuICAzODpcdFx0ICBsb2dpY2FsLW9yIG9mIGFsbCB0aGUgbGluayBzcGVlZCBvbmVzLlxuICAzOTpcdFx0ICBBbGwgdGhlc2UgdHJpZ2dlcnMgYXJlIG5hbWVkIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHBhdHRlcm46XG4gIDQwOlx0XHQgICAgICBcdTAwM2NtaWkgYnVzIGlkXHUwMDNlOlx1MDAzY3BoeVx1MDAzZTpcdTAwM2NzcGVlZFx1MDAzZVxuICA0MTpcdFxuICA0MjpcdFx0ICBXaGVyZSBzcGVlZCBpcyBpbiB0aGUgZm9ybTpcbiAgNDM6XHRcdFx0XHUwMDNjU3BlZWQgaW4gbWVnYWJpdHNcdTAwM2VNYnBzIE9SIFx1MDAzY1NwZWVkIGluIGdpZ2FiaXRzXHUwMDNlR2JwcyBPUiBsaW5rXG4gIDQ0Olx0XHRcdGZvciBhbnkgc3BlZWQga25vd24gdG8gdGhlIFBIWS5cbiAgNDU6XHRcbiAgNDY6XHRjb25maWcgT1BFTl9BTExJQU5DRV9IRUxQRVJTXG4gIDQ3Olx0XHRib29sXG4gIDQ4Olx0XG4gIDQ5Olx0Y29uZmlnIFBIWUxJQl9MRURTXG4gIDUwOlx0XHRkZWZfYm9vbCBPRlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjMxMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2U6CgoqKkludmVzdGlnYXRpbmcgUEhZTElCIEluY2x1c2lvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYFBIWUxJQmAgZ2V0cyBwdWxsZWQgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24sIHNvIEkmIzM5O20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlIGlzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGZvciBuZXR3b3JraW5nLXJlbGF0ZWQgS2NvbmZpZyBvcHRpb25zLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbiB0aGF0IHRoZSBgUEhZTElCYCBvcHRpb24sIG9yIHRoZSBmZWF0dXJlcyBpdCBkZXBlbmRzIG9uLCB3aWxsIGJlIGRlZmluZWQgb3IgaW5jbHVkZWQgc29tZXdoZXJlIHdpdGhpbiB0aGF0IGZpbGUuIFRpbWUgdG8gb3BlbiBpdCB1cCBhbmQgc2VlIHdoYXQgdGhlIGJ1aWxkIHN5c3RlbSBpcyBkb2luZyB3aXRoIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTUxMj1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvaXBhL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWctNTEzLVxuZHJpdmVycy9uZXQvS2NvbmZpZzo1MTQ6c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnLTUxNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI1NjcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIE5ldHdvcmsgRGV2aWNlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWV0aGluZyBuZXR3b3JrLXJlbGF0ZWQsIGxpa2VseSBpbnZvbHZpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgbmV0d29yayBkZXZpY2VzLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRvIGRlbHZlIGludG8gdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSB1c3VhbCBzdGFydGluZyBwb2ludCBmb3IgbWFuYWdpbmcgbmV0d29yayBkZXZpY2Ugb3B0aW9ucyBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byBhcm91bmQgbGluZSA1MTIsIGJlY2F1c2UgSSBoYXZlIGEgaHVuY2ggdGhhdCYjMzk7cyB3aGVyZSB3ZSBtaWdodCBmaW5kIHJlbGV2YW50IGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBORVRERVZJQ0VTYC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGNvbmRpdGlvbmFsIGJsb2NrcyBvciBvcHRpb25zIHRoYXQgY291bGQgaW5mbHVlbmNlIHRoZSBpbmNsdXNpb24gb3IgYmVoYXZpb3Igb2YgbmV0d29yayBkZXZpY2VzIGluIGdlbmVyYWwsIG9yIHBvdGVudGlhbGx5IHNwZWNpZmljIGRldmljZSB0eXBlcy4gSSYjMzk7bGwgbmVlZCB0byByYXBpZGx5IHNjYW4gZm9yIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgb3IgbW9kdWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgTmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIE5FVERFVklDRVNcbiAgIDc6XHRcdGRlZmF1bHQgeSBpZiBVTUxcbiAgIDg6XHRcdGRlcGVuZHMgb24gTkVUXG4gICA5Olx0XHRib29sIFwmIzM0O05ldHdvcmsgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgWW91IGNhbiBzYXkgTiBoZXJlIGlmIHlvdSBkb24mIzM5O3QgaW50ZW5kIHRvIGNvbm5lY3QgeW91ciBMaW51eCBib3ggdG9cbiAgMTI6XHRcdCAgYW55IG90aGVyIGNvbXB1dGVyIGF0IGFsbC5cbiAgMTM6XHRcbiAgMTQ6XHRcdCAgWW91JiMzOTtsbCBoYXZlIHRvIHNheSBZIGlmIHlvdXIgY29tcHV0ZXIgY29udGFpbnMgYSBuZXR3b3JrIGNhcmQgdGhhdFxuICAxNTpcdFx0ICB5b3Ugd2FudCB0byB1c2UgdW5kZXIgTGludXguIElmIHlvdSBhcmUgZ29pbmcgdG8gcnVuIFNMSVAgb3IgUFBQIG92ZXJcbiAgMTY6XHRcdCAgdGVsZXBob25lIGxpbmUgb3IgbnVsbCBtb2RlbSBjYWJsZSB5b3UgbmVlZCBzYXkgWSBoZXJlLiBDb25uZWN0aW5nXG4gIDE3Olx0XHQgIHR3byBtYWNoaW5lcyB3aXRoIHBhcmFsbGVsIHBvcnRzIHVzaW5nIFBMSVAgbmVlZHMgdGhpcywgYXMgd2VsbCBhc1xuICAxODpcdFx0ICBBWC4yNS9LSVNTIGZvciBzZW5kaW5nIEludGVybmV0IHRyYWZmaWMgb3ZlciBhbWF0ZXVyIHJhZGlvIGxpbmtzLlxuICAxOTpcdFxuICAyMDpcdFx0ICBTZWUgYWxzbyBcJiMzNDtUaGUgTGludXggTmV0d29yayBBZG1pbmlzdHJhdG9yJiMzOTtzIEd1aWRlXCYjMzQ7IGJ5IE9sYWYgS2lyY2ggYW5kXG4gIDIxOlx0XHQgIFRlcnJ5IERhd3Nvbi4gQXZhaWxhYmxlIGF0IFx1MDAzY2h0dHA6Ly93d3cudGxkcC5vcmcvZ3VpZGVzLmh0bWxcdTAwM2UuXG4gIDIyOlx0XG4gIDIzOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDI0Olx0XG4gIDI1Olx0IyBBbGwgdGhlIGZvbGxvd2luZyBzeW1ib2xzIGFyZSBkZXBlbmRlbnQgb24gTkVUREVWSUNFUyAtIGRvIG5vdCByZXBlYXRcbiAgMjY6XHQjIHRoYXQgZm9yIGVhY2ggb2YgdGhlIHN5bWJvbHMuXG4gIDI3Olx0aWYgTkVUREVWSUNFU1xuICAyODpcdFxuICAyOTpcdGNvbmZpZyBNSUlcbiAgMzA6XHRcdHRyaXN0YXRlXG4gIDMxOlx0XG4gIDMyOlx0Y29uZmlnIE5FVF9DT1JFXG4gIDMzOlx0XHRkZWZhdWx0IHlcbiAgMzQ6XHRcdGJvb2wgXCYjMzQ7TmV0d29yayBjb3JlIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG4gIDM1Olx0XHRoZWxwXG4gIDM2Olx0XHQgIFlvdSBjYW4gc2F5IE4gaGVyZSBpZiB5b3UgZG8gbm90IGludGVuZCB0byB1c2UgYW55IG9mIHRoZVxuICAzNzpcdFx0ICBuZXR3b3JraW5nIGNvcmUgZHJpdmVycyAoaS5lLiBWTEFOLCBicmlkZ2luZywgYm9uZGluZywgZXRjLilcbiAgMzg6XHRcbiAgMzk6XHRpZiBORVRfQ09SRVxuICA0MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzMxMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1vdG9yY29tbSBQSFkgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGBNT1RPUkNPTU1fUEhZYCBkcml2ZXIgcmVsaWVzIG9uIGJvdGggYFBIWUxJQmAgYW5kIGBORVRERVZJQ0VTYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiBkZXBlbmRlbmNpZXMgSSYjMzk7bSBtaXNzaW5nLiBTbywgbGV0JiMzOTtzIGRpdmUgaW50byBgZHJpdmVycy9uZXQvcGh5L0tjb25maWdgLgoKUmlnaHQsIGZvdW5kIGl0OiBgY29uZmlnIE1PVE9SQ09NTV9QSFlgIGNvbmZpcm1zIHRoZSB0cmlzdGF0ZSBvcHRpb24gZm9yIE1vdG9yY29tbSBQSFlzLiBBaGEsIGFuZCBpdCYjMzk7cyBuZWF0bHkgbmVzdGVkOiBgaWYgUEhZTElCYCBpcyBpdHNlbGYgbmVzdGVkIHdpdGhpbiBgaWYgTkVUREVWSUNFU2AsIGFuZCBgTkVUREVWSUNFU2AgZGVwZW5kcyBvbiBgTkVUYC4gVGhpcyBjb25maXJtcyB0aGUgaW5pdGlhbCBkZXBlbmRlbmNpZXMsIGFuZCBhbHNvIGNsYXJpZmllcyB0aGUgZGVwZW5kZW5jeSBjaGFpbi4KCk5vdywgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGRlZXBlci4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCBkb2VzbiYjMzk7dCB1c2UgYW55IGhpZGRlbiBoZWxwZXJzIG9yIHNwZWNpZmljIGNvbmZpZyBvcHRpb25zIHRoYXQgYXJlbiYjMzk7dCBpbW1lZGlhdGVseSBvYnZpb3VzIGZyb20gdGhlIEtjb25maWcgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYWN0dWFsIGBtb3RvcmNvbW0uY2Agc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBpbmNsdWRlZCBoZWFkZXJzIGFuZCBjb25maWcgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgYmUgc3VidGx5IGJha2VkIGluIHRoZXJlLiBJIHdhbnQgdG8gYnVpbGQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIGl0cyBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7XG4gICAyOlx0LypcbiAgIDM6XHQgKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXIuXG4gICA0Olx0ICpcbiAgIDU6XHQgKiBBdXRob3I6IFBldGVyIEdlaXMgXHUwMDNjcGd3aXBlb3V0QGdtYWlsLmNvbVx1MDAzZVxuICAgNjpcdCAqIEF1dGhvcjogRnJhbmsgXHUwMDNjRnJhbmsuU2FlQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4gICA3Olx0ICovXG4gICA4Olx0XG4gICA5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiAgMTA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuICAxNTpcdFxuICAxNjpcdCNkZWZpbmUgUEhZX0lEX1lUODUxMVx0XHQweDAwMDAwMTBhXG4gIDE3Olx0I2RlZmluZSBQSFlfSURfWVQ4NTIxXHRcdDB4MDAwMDAxMWFcbiAgMTg6XHQjZGVmaW5lIFBIWV9JRF9ZVDg1MjJcdFx0MHg0ZjUxZTkyOFxuICAxOTpcdCNkZWZpbmUgUEhZX0lEX1lUODUzMVx0XHQweDRmNTFlOTFiXG4gIDIwOlx0I2RlZmluZSBQSFlfSURfWVQ4NTMxU1x0XHQweDRmNTFlOTFhXG4gIDIxOlx0I2RlZmluZSBQSFlfSURfWVQ4ODIxXHRcdDB4NGY1MWVhMTlcbiAgMjI6XHQvKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXdcbiAgMjM6XHQgKlx0VVRQIFJlZ2lzdGVyIHNwYWNlXHR8XHRGSUJFUiBSZWdpc3RlciBzcGFjZVxuICAyNDpcdCAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgMjU6XHQgKiB8XHRVVFAgTUlJXHRcdFx0fFx0RklCRVIgTUlJXHRcdHxcbiAgMjY6XHQgKiB8XHRVVFAgTU1EXHRcdFx0fFx0XHRcdFx0fFxuICAyNzpcdCAqIHxcdFVUUCBFeHRlbmRlZFx0XHR8XHRGSUJFUiBFeHRlbmRlZFx0XHR8XG4gIDI4Olx0ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAyOTpcdCAqIHxcdFx0XHRDb21tb24gRXh0ZW5kZWRcdFx0XHRcdHxcbiAgMzA6XHQgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIDMxOlx0ICovXG4gIDMyOlx0XG4gIDMzOlx0LyogMHgxMCB+IDB4MTUgLCAweDFFIGFuZCAweDFGIGFyZSBjb21tb24gTUlJIHJlZ2lzdGVycyBvZiB5dCBwaHkgKi9cbiAgMzQ6XHRcbiAgMzU6XHQvKiBTcGVjaWZpYyBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyICovXG4gIDM2Olx0I2RlZmluZSBZVFBIWV9TUEVDSUZJQ19GVU5DVElPTl9DT05UUk9MX1JFR1x0MHgxMFxuICAzNzpcdFxuICAzODpcdC8qIDJiMDAgTWFudWFsIE1ESSBjb25maWd1cmF0aW9uXG4gIDM5Olx0ICogMmIwMSBNYW51YWwgTURJWCBjb25maWd1cmF0aW9uXG4gIDQwOlx0ICogMmIxMCBSZXNlcnZlZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDQzNQoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiA3NjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgRHJpdmVyIENvbmZpZ3VyYXRpb24gQ2hhbmdlcyBmb3IgRnV6emluZyBGb2N1cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIHNjYW4gZmxhZ2dlZCBzb21lIHN5bWJvbCBjaGFuZ2VzLCBzcGVjaWZpY2FsbHkgYHl0ODUzMXNfY29uZmlnX2luaXRgLCBgX195dDg1MjFfY29uZmlnX2luaXRgLCBhbmQgYHl0ODUyMV9jb25maWdfaW5pdGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IHdhcyB0byBjaGVjayBpZiB0aGVzZSBhcmUgc3RhdGljIG9yIG5vbi1zdGF0aWMgYmVjYXVzZSB0aGUgZnV6emluZyBndWlkZWxpbmVzIGZhdm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGZvciBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBMb29raW5nIGludG8gYG1vdG9yY29tbS5jYCwgSSBzZWUgdGhleSAqYXJlKiBzdGF0aWM6IGBzdGF0aWMgaW50IHl0ODUzMXNfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilgIGFuZCBgc3RhdGljIGludCB5dDg1MjFfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilgLiBCdXQgdGhlbiwgSSByZW1lbWJlcmVkIHRob3NlIGZ1bmN0aW9ucyBhcmUgcmVmZXJlbmNlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gdGhlIGBtb3RvcmNvbW1fcGh5X2RydnNbXWAgc3RydWN0OiAgYC5jb25maWdfaW5pdCA9IHl0ODUzMXNfY29uZmlnX2luaXQsYCBhbmQgYC5jb25maWdfaW5pdCA9IHl0ODUyMV9jb25maWdfaW5pdCxgLgoKQWgtaGEhIEJlY2F1c2UgdGhleSBhcmUgc3RvcmVkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzLCBldmVuIHRob3VnaCB0aGV5JiMzOTtyZSBkZWNsYXJlZCBgc3RhdGljYCwgdGhlaXIgYWRkcmVzc2VzIGFyZSByZXRhaW5lZCBpbiB0aGUgZHJpdmVyJiMzOTtzIHN0cnVjdCB0YWJsZS4gVGhlcmVmb3JlLCB0aGV5IGFyZSBub3QgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIFRoYXQgbWFrZXMgdGhlbSBwZXJmZWN0IGNhbmRpZGF0ZXMgZm9yIGZvY3VzIHN5bWJvbHMuIFNvIGB5dDg1MzFzX2NvbmZpZ19pbml0YCBhbmQgYHl0ODUyMV9jb25maWdfaW5pdGAgYXJlIGRlZmluaXRlbHkgaW4gbXkgc2lnaHRzLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgY29tcGxldGUgcGljdHVyZS4gVGhlIHBhdGNoIG1vZGlmaWVzIGBfX3l0ODUyMV9jb25maWdfaW5pdGAsIGB5dDg1MjFfY29uZmlnX2luaXRgLCBhbmQgYHl0ODUzMXNfY29uZmlnX2luaXRgLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgeXQ4NTMxc19jb25maWdfaW5pdGAgYW5kIGB5dDg1MjFfY29uZmlnX2luaXRgIHdpbGwgaGF2ZSBkaXN0aW5jdCBzeW1ib2xzIHdoZW4gYE1PVE9SQ09NTV9QSFlgIGlzIGVuYWJsZWQuIExUTyAqY291bGQqIG1lcmdlIHRoZW0gaW4gY2VydGFpbiBzaXR1YXRpb25zLCBidXQgaGVyZSwgdGhlIGNvZGUgaXMgZGlzdGluY3QuCgpGdW5jdGlvbmFsbHksIHRoZSBwYXRjaCAqZG9lcyogaW50cm9kdWNlIHNpZ25pZmljYW50IGNoYW5nZXMgdG8gZHJpdmVyIGxvZ2ljLiBJdCBpbnRyb2R1Y2VzIGEgc2VwYXJhdGUgYGNvbmZpZ19pbml0YCBmb3IgWVQ4NTMxUyAoYHl0ODUzMXNfY29uZmlnX2luaXRgKSwgZXh0cmFjdHMgY29tbW9uIGluaXQgaW50byBgX195dDg1MjFfY29uZmlnX2luaXRgLCBhZGRzIEdNSUkgbW9kZSBjb25maWd1cmF0aW9uIGZvciBZVDg1MzFTIGJ5IGVuYWJsaW5nIHRoZSBhbmFsb2cgZnJvbnQtZW5kIERBQyBjbG9jayBhbmQgZml4ZXMgdGhlIFJHTUlJIGRyaXZlIHN0cmVuZ3RoIHNldHRpbmcgcGF0aC4gVGhpcyBpcyBtb3JlIHRoYW4ganVzdCBhIG1pbm9yIHR3ZWFrOyB0aGVyZSBpcyBmdW5jdGlvbmFsIGNoYW5nZSwgc28geWVzLCBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuCgpNeSBDT05GSUcgZGVwZW5kZW5jaWVzIGFyZSBhbHNvIGNvbmZpcm1lZDogYE1PVE9SQ09NTV9QSFlgLCBgUEhZTElCYCwgYW5kIGBORVRERVZJQ0VTYC4gSSBub3cgaGF2ZSBhbGwgdGhlIGluZm9ybWF0aW9uIHJlcXVpcmVkLiBJJiMzOTtsbCBjb25zdHJ1Y3QgdGhlIGBzZXQtcmVzdWx0c2AgYWNjb3JkaW5nbHk6IGBXb3J0aEZ1enppbmdgIHNldCB0byBgdHJ1ZWAsIGEgY2xlYXIgZXhwbGFuYXRpb24gb2YgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhbmQgaG93IHRoZXkgYXJlIHJlYWNoYWJsZSBhcyB0aGUgcmVhc29uaW5nLCB0aGUgYEZvY3VzU3ltYm9sc2AgYXMgYFsmIzM0O3l0ODUzMXNfY29uZmlnX2luaXQmIzM0OywgJiMzNDt5dDg1MjFfY29uZmlnX2luaXQmIzM0O11gLCBhbmQgdGhlIGBFbmFibGVDb25maWdzYCBzZXQgdG8gYFsmIzM0O01PVE9SQ09NTV9QSFkmIzM0OywgJiMzNDtQSFlMSUImIzM0OywgJiMzNDtORVRERVZJQ0VTJiMzNDtdYC4gVGhpcyBzaG91bGQgYmUgYSByb2J1c3QgYW5kIGRlZmVuc2libGUgY2hvaWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TU9UT1JDT01NX1BIWSYjMzQ7LAogICAgJiMzNDtQSFlMSUImIzM0OywKICAgICYjMzQ7TkVUREVWSUNFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3l0ODUzMXNfY29uZmlnX2luaXQmIzM0OywKICAgICYjMzQ7eXQ4NTIxX2NvbmZpZ19pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBkZWRpY2F0ZWQgaW5pdGlhbGl6YXRpb24gY2FsbGJhY2sgeXQ4NTMxc19jb25maWdfaW5pdCBmb3IgdGhlIE1vdG9yY29tbSBZVDg1MzFTIEV0aGVybmV0IFBIWSwgZmFjdG9yaW5nIGNvbW1vbiBpbml0aWFsaXphdGlvbiBpbnRvIF9feXQ4NTIxX2NvbmZpZ19pbml0IGFuZCBhZGRpbmcgc3VwcG9ydCBmb3IgZW5hYmxpbmcgdGhlIGFuYWxvZyBmcm9udC1lbmQgREFDIGNsb2NrIHdoZW4gb3BlcmF0aW5nIGluIEdNSUkgbW9kZS4gVGhlc2UgY2hhbmdlcyBhbHRlciBkcml2ZXIgY29uZmlndXJhdGlvbiBmbG93IGFuZCBjYW4gYmUgZXhlY3V0ZWQgdmlhIE1ESU8gLyBwaHlsaWIgdGhyb3VnaCBlbXVsYXRlZCBVU0Igb3IgbmV0d29yayBjb250cm9sbGVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TU9UT1JDT01NX1BIWSYjMzQ7LAogICAgJiMzNDtQSFlMSUImIzM0OywKICAgICYjMzQ7TkVUREVWSUNFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3l0ODUzMXNfY29uZmlnX2luaXQmIzM0OywKICAgICYjMzQ7eXQ4NTIxX2NvbmZpZ19pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBkZWRpY2F0ZWQgaW5pdGlhbGl6YXRpb24gY2FsbGJhY2sgeXQ4NTMxc19jb25maWdfaW5pdCBmb3IgdGhlIE1vdG9yY29tbSBZVDg1MzFTIEV0aGVybmV0IFBIWSwgZmFjdG9yaW5nIGNvbW1vbiBpbml0aWFsaXphdGlvbiBpbnRvIF9feXQ4NTIxX2NvbmZpZ19pbml0IGFuZCBhZGRpbmcgc3VwcG9ydCBmb3IgZW5hYmxpbmcgdGhlIGFuYWxvZyBmcm9udC1lbmQgREFDIGNsb2NrIHdoZW4gb3BlcmF0aW5nIGluIEdNSUkgbW9kZS4gVGhlc2UgY2hhbmdlcyBhbHRlciBkcml2ZXIgY29uZmlndXJhdGlvbiBmbG93IGFuZCBjYW4gYmUgZXhlY3V0ZWQgdmlhIE1ESU8gLyBwaHlsaWIgdGhyb3VnaCBlbXVsYXRlZCBVU0Igb3IgbmV0d29yayBjb250cm9sbGVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNb3RvcmNvbW0gUEhZIGRyaXZlciAoZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jKSBieSByZWZhY3RvcmluZyBQSFkgY29uZmlndXJhdGlvbiBsb2dpYyBhbmQgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBZVDg1MzFTIFBIWSBjb25maWcgaW5pdCBjYWxsYmFjayAoeXQ4NTMxc19jb25maWdfaW5pdCksIHdoaWNoIHBlcmZvcm1zIGhhcmR3YXJlIHJlZ2lzdGVyIHJlYWRzL3dyaXRlcyB2aWEgTURJTy4gVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgaGFyZHdhcmUgcmVnaXN0ZXIgYWNjZXNzIGNvbnRyb2wgZmxvdyBhbmQgbG9jYWwgaW50ZWdlciByZXR1cm4gY29kZXM7IHRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVycywgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gU3RhbmRhcmQgS0FTQU4gYW5kIGdlbmVyYWwga2VybmVsIHRlc3RpbmcgYXJlIHN1ZmZpY2llbnQsIGFuZCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyB0aGF0IHdvdWxkIHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0MTM4MDZmYjRlNjdkMDJiNzgxZTVjNDk1ZGEwOTQ2M2Y3NmU4OGY0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMDc6NTQ6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMKaW5kZXggYzVhMmNkYThkMzFiZC4uOTBhNGY4NmYyNzU4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYwpAQCAtMTQ0LDYgJiM0MzsxNDQsMTEgQEAKICNkZWZpbmUgWVQ4NTIxX0NMT0NLX0dBVElOR19SRUcJCQkweEMKICNkZWZpbmUgWVQ4NTIxX0NHUl9SWF9DTEtfRU4JCQlCSVQoMTIpCiAKJiM0MzsvKiBBbmFsb2cgZnJvbnQtZW5kIGNvbnRyb2wgcmVnaXN0ZXIgMyAqLwomIzQzOyNkZWZpbmUgWVQ4NTMxU19FWFRfQUZFX0NUUkwzCQkJMHgxMgomIzQzOy8qIEFuYWxvZyBmcm9udC1lbmQgREFDIGNsb2NrIGVuYWJsZSAqLwomIzQzOyNkZWZpbmUgWVQ4NTMxU19BRkVfQ1RSTDNfQ0xLREFDX0FPTgkJQklUKDEzKQomIzQzOwogI2RlZmluZSBZVDg1MjFfRVhUUkVHX1NMRUVQX0NPTlRST0wxX1JFRwkweDI3CiAjZGVmaW5lIFlUODUyMV9FU0MxUl9TTEVFUF9TVwkJCUJJVCgxNSkKICNkZWZpbmUgWVQ4NTIxX0VTQzFSX1BMTE9OX1NMUAkJCUJJVCgxNCkKQEAgLTE2ODAsMjcgJiM0MzsxNjg1LDE2IEBAIHN0YXRpYyBpbnQgeXQ4NTIxX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogCXJldHVybiB5dDg1MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7CiB9CiAKLS8qKgotICogeXQ4NTIxX2NvbmZpZ19pbml0KCkgLSBjYWxsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgUEhZCi0gKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCi0gKgotICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKLSAqLwotc3RhdGljIGludCB5dDg1MjFfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0MztzdGF0aWMgaW50IF9feXQ4NTIxX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwotCWludCBvbGRfcGFnZTsKIAlpbnQgcmV0ID0gMDsKIAotCW9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4NTIxX1JTU1JfVVRQX1NQQUNFKTsKLQlpZiAob2xkX3BhZ2UgJmx0OyAwKQotCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7Ci0KIAkvKiBzZXQgcmdtaWkgZGVsYXkgbW9kZSAqLwogCWlmIChwaHlkZXYtJmd0O2ludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHsKIAkJcmV0ID0geXRwaHlfcmdtaWlfY2xrX2RlbGF5X2NvbmZpZyhwaHlkZXYpOwogCQlpZiAocmV0ICZsdDsgMCkKLQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCQlyZXR1cm4gcmV0OwogCX0KIAogCWlmIChkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29sKGRldiwgJiMzNDttb3RvcmNvbW0sYXV0by1zbGVlcC1kaXNhYmxlZCYjMzQ7KSkgewpAQCAtMTcwOCwyMCAmIzQzOzE3MDIsNTggQEAgc3RhdGljIGludCB5dDg1MjFfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAkJcmV0ID0geXRwaHlfbW9kaWZ5X2V4dChwaHlkZXYsIFlUODUyMV9FWFRSRUdfU0xFRVBfQ09OVFJPTDFfUkVHLAogCQkJCSAgICAgICBZVDg1MjFfRVNDMVJfU0xFRVBfU1csIDApOwogCQlpZiAocmV0ICZsdDsgMCkKLQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmIChkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29sKGRldiwgJiMzNDttb3RvcmNvbW0sa2VlcC1wbGwtZW5hYmxlZCYjMzQ7KSkgewomIzQzOwlpZiAoZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYsICYjMzQ7bW90b3Jjb21tLGtlZXAtcGxsLWVuYWJsZWQmIzM0OykpCiAJCS8qIGVuYWJsZSBSWEMgY2xvY2sgd2hlbiBubyB3aXJlIHBsdWcgKi8KLQkJcmV0ID0geXRwaHlfbW9kaWZ5X2V4dChwaHlkZXYsIFlUODUyMV9DTE9DS19HQVRJTkdfUkVHLAotCQkJCSAgICAgICBZVDg1MjFfQ0dSX1JYX0NMS19FTiwgMCk7Ci0JCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHl0cGh5X21vZGlmeV9leHQocGh5ZGV2LCBZVDg1MjFfQ0xPQ0tfR0FUSU5HX1JFRywKJiM0MzsJCQkJCVlUODUyMV9DR1JfUlhfQ0xLX0VOLCAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODUyMV9jb25maWdfaW5pdCgpIC0gY2FsbGVkIHRvIGluaXRpYWxpemUgdGhlIFBIWQomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg1MjFfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBvbGRfcGFnZSwgcmV0ID0gMDsKJiM0MzsKJiM0MzsJb2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg1MjFfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBfX3l0ODUyMV9jb25maWdfaW5pdChwaHlkZXYpOwomIzQzOwomIzQzO2Vycl9yZXN0b3JlX3BhZ2U6CiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeXQ4NTMxc19jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlLCByZXQgPSAwOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODUyMV9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IF9feXQ4NTIxX2NvbmZpZ19pbml0KHBoeWRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CWlmIChwaHlfaW50ZXJmYWNlX2lzX3JnbWlpKHBoeWRldikpIHsKJiM0MzsJCXJldCA9IHl0ODUzMV9zZXRfZHMocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQpCiAJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiAJfQogCi0JaWYgKHBoeV9pbnRlcmZhY2VfaXNfcmdtaWkocGh5ZGV2KSAmYW1wOyZhbXA7Ci0JICAgIHBoeWRldl9pZF9jb21wYXJlKHBoeWRldiwgUEhZX0lEX1lUODUzMVMpKQotCQlyZXQgPSB5dDg1MzFfc2V0X2RzKHBoeWRldik7CiYjNDM7CWlmIChwaHlkZXYtJmd0O2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfR01JSSkKJiM0MzsJCXJldCA9IHl0cGh5X21vZGlmeV9leHQocGh5ZGV2LCBZVDg1MzFTX0VYVF9BRkVfQ1RSTDMsCiYjNDM7CQkJCSAgICAgICAwLCBZVDg1MzFTX0FGRV9DVFJMM19DTEtEQUNfQU9OKTsKIAogZXJyX3Jlc3RvcmVfcGFnZToKIAlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwpAQCAtMzEzNSw3ICYjNDM7MzE2Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHsKIAkJLnNldF93b2wJPSB5dHBoeV9zZXRfd29sLAogCQkuY29uZmlnX2FuZWcJPSB5dDg1MjFfY29uZmlnX2FuZWcsCiAJCS5hbmVnX2RvbmUJPSB5dDg1MjFfYW5lZ19kb25lLAotCQkuY29uZmlnX2luaXQJPSB5dDg1MjFfY29uZmlnX2luaXQsCiYjNDM7CQkuY29uZmlnX2luaXQJPSB5dDg1MzFzX2NvbmZpZ19pbml0LAogCQkucmVhZF9zdGF0dXMJPSB5dDg1MjFfcmVhZF9zdGF0dXMsCiAJCS5zb2Z0X3Jlc2V0CT0geXQ4NTIxX3NvZnRfcmVzZXQsCiAJCS5zdXNwZW5kCT0geXQ4NTIxX3N1c3BlbmQsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTg1CgkJCQkJCQlvdXRwdXQ6IDE2MQoJCQkJCQkJdGhvdWdodHM6IDQ1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBNb3RvcmNvbW0gUEhZIERyaXZlciBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciB0aGUgTW90b3Jjb21tIFBIWSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB3aGV0aGVyIGl0IHdhcnJhbnRzIGEgS01TQU4gY2hlY2suIEkgc2VlIGl0IHRvdWNoZXMgYGRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY2AuIFRoZSBjaGFuZ2VzIGludm9sdmU6IGFkZGluZyBhIGZldyBtYWNyb3MgKGBZVDg1MzFTX0VYVF9BRkVfQ1RSTDNgLCBgWVQ4NTMxU19BRkVfQ1RSTDNfQ0xLREFDX0FPTmApLCByZWZhY3RvcmluZyB0aGUgYHl0ODUyMV9jb25maWdfaW5pdGAgZnVuY3Rpb24sIGFuZCBpbnRyb2R1Y2luZyBgeXQ4NTMxc19jb25maWdfaW5pdGAgZm9yIHRoZSBZVDg1MzFTIFBIWS4gVGhlIGBjb25maWdfaW5pdGAgY2FsbGJhY2sgaW4gdGhlIGRyaXZlciB0YWJsZSBpcyBiZWluZyB1cGRhdGVkLgoKRXNzZW50aWFsbHksIHRoaXMgaXMgaGFyZHdhcmUgcmVnaXN0ZXIgbWFuaXB1bGF0aW9uIGZvciBhIHNwZWNpZmljIFBIWSwgdGhlIFlUODUzMVMuIEl0JiMzOTtzIGluaXRpYWxpemluZyBhbmQgY29uZmlndXJpbmcgdGhlIGRldmljZS4gSSYjMzk7bSBzZWVpbmcgcmVnaXN0ZXIgd3JpdGVzIGFuZCBwb3RlbnRpYWxseSBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHRoZSBpbnRlcmZhY2UgdHlwZSAoUkdNSUkvR01JSSkgdG8gYWRqdXN0IGRyaXZlIHN0cmVuZ3RoIG9yIG1vZGlmeSBzcGVjaWZpYyByZWdpc3RlcnMuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogZG9lcyB0aGlzIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gTm8gbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBhZGRlZCBhbmQgbm8gZGlyZWN0IGRhdGEgdHJhbnNmZXJzIHRvIHVzZXIgc3BhY2UgZWl0aGVyLiBJdCYjMzk7cyBhbGwgaW50ZXJuYWwgcmVnaXN0ZXIgbWFuaXB1bGF0aW9uLCBubyBgY29weV90b191c2VyYCBvciB0aGUgbGlrZSwgd2hpY2ggbWVhbnMgSSBkb24mIzM5O3QgaGF2ZSB0byB3b3JyeSBhYm91dCB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBWYXJpYWJsZXMgbGlrZSBgZGV2YCwgYHJldGAsIGFuZCBgb2xkX3BhZ2VgIGFyZSBzY2FsYXIgdHlwZXMgYW5kIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgd2hpY2ggbWVhbnMgdGhhdCB1bmluaXRpYWxpemVkIHJlYWQgcmlza3MgYXJlIG1pbmltYWwuIFRoZXJlJiMzOTtzIG5vIGV2aWRlbnQgcmlzayBvZiBpbmZvcm1hdGlvbiBsZWFrcy4KCkkmIzM5O20gY29tZm9ydGFibGUgd2l0aCB0aGF0LCBzbyBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayBldmVyeXRoaW5nLCB1c2luZyBhIGBzZXQtcmVzdWx0c2AgcHJvY2Vzcy4KCkFmdGVyIGEgcmV2aWV3LCBpdCBsb29rcyBjbGVhcjogbm8gc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLCBzbyBubyByaXNrIHRoZXJlLiBUaGVyZSYjMzk7cyBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG5vciBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucy4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gYW55IGJvdW5kcyBjaGVja3MgdGhhdCBJIGhhdmUgdG8gY29uc2lkZXIgdG8gZW5zdXJlIHRoYXQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNuJiMzOTt0IHJldmVhbGVkLgoKU28sICpOZWVkc0tNU0FOKiBpcyBkZWZpbml0aXZlbHkgKmZhbHNlKiBoZXJlLiBObyBLTVNBTiBmbGFncy4gSXQmIzM5O3MgYSBjbGVhbiBwYXRjaC4KCkkmIzM5O2xsIHdyaXRlIHVwIHNvbWUgYnJpZWYgS01TQU4gcmVhc29uaW5nLCBjb250cmFzdGluZyBLTVNBTiB3aXRoIEtBU0FOLCBhcyBhIGNvdXJ0ZXN5LCBhbmQgSSBjYW4gbW92ZSBvbiB0byB0aGUgbmV4dCBvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNb3RvcmNvbW0gUEhZIGRyaXZlciAoZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jKSBieSByZWZhY3RvcmluZyBQSFkgY29uZmlndXJhdGlvbiBsb2dpYyBhbmQgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBZVDg1MzFTIFBIWSBjb25maWcgaW5pdCBjYWxsYmFjayAoeXQ4NTMxc19jb25maWdfaW5pdCksIHdoaWNoIHBlcmZvcm1zIGhhcmR3YXJlIHJlZ2lzdGVyIHJlYWRzL3dyaXRlcyB2aWEgTURJTy4gVGhlIGNoYW5nZXMgb25seSBhZmZlY3QgaGFyZHdhcmUgcmVnaXN0ZXIgYWNjZXNzIGNvbnRyb2wgZmxvdyBhbmQgbG9jYWwgaW50ZWdlciByZXR1cm4gY29kZXM7IHRoZXkgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVycywgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gU3RhbmRhcmQgS0FTQU4gYW5kIGdlbmVyYWwga2VybmVsIHRlc3RpbmcgYXJlIHN1ZmZpY2llbnQsIGFuZCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyB0aGF0IHdvdWxkIHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1vdG9yY29tbSBQSFkgZHJpdmVyIChkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMpIGJ5IHJlZmFjdG9yaW5nIFBIWSBjb25maWd1cmF0aW9uIGxvZ2ljIGFuZCBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFlUODUzMVMgUEhZIGNvbmZpZyBpbml0IGNhbGxiYWNrICh5dDg1MzFzX2NvbmZpZ19pbml0KSwgd2hpY2ggcGVyZm9ybXMgaGFyZHdhcmUgcmVnaXN0ZXIgcmVhZHMvd3JpdGVzIHZpYSBNRElPLiBUaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBoYXJkd2FyZSByZWdpc3RlciBhY2Nlc3MgY29udHJvbCBmbG93IGFuZCBsb2NhbCBpbnRlZ2VyIHJldHVybiBjb2RlczsgdGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXJzLCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBTdGFuZGFyZCBLQVNBTiBhbmQgZ2VuZXJhbCBrZXJuZWwgdGVzdGluZyBhcmUgc3VmZmljaWVudCwgYW5kIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIHRoYXQgd291bGQgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU0OjAzLjYxMDI0NDY2NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NjM2NjMxNzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1PVE9SQ09NTV9QSFlcIixcbiAgICBcIlBIWUxJQlwiLFxuICAgIFwiTkVUREVWSUNFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInl0ODUzMXNfY29uZmlnX2luaXRcIixcbiAgICBcInl0ODUyMV9jb25maWdfaW5pdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1vdG9yY29tbSBQSFkgZHJpdmVyIChkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMpIGJ5IHJlZmFjdG9yaW5nIFBIWSBjb25maWd1cmF0aW9uIGxvZ2ljIGFuZCBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFlUODUzMVMgUEhZIGNvbmZpZyBpbml0IGNhbGxiYWNrICh5dDg1MzFzX2NvbmZpZ19pbml0KSwgd2hpY2ggcGVyZm9ybXMgaGFyZHdhcmUgcmVnaXN0ZXIgcmVhZHMvd3JpdGVzIHZpYSBNRElPLiBUaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBoYXJkd2FyZSByZWdpc3RlciBhY2Nlc3MgY29udHJvbCBmbG93IGFuZCBsb2NhbCBpbnRlZ2VyIHJldHVybiBjb2RlczsgdGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXJzLCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBTdGFuZGFyZCBLQVNBTiBhbmQgZ2VuZXJhbCBrZXJuZWwgdGVzdGluZyBhcmUgc3VmZmljaWVudCwgYW5kIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIHRoYXQgd291bGQgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlZGljYXRlZCBpbml0aWFsaXphdGlvbiBjYWxsYmFjayB5dDg1MzFzX2NvbmZpZ19pbml0IGZvciB0aGUgTW90b3Jjb21tIFlUODUzMVMgRXRoZXJuZXQgUEhZLCBmYWN0b3JpbmcgY29tbW9uIGluaXRpYWxpemF0aW9uIGludG8gX195dDg1MjFfY29uZmlnX2luaXQgYW5kIGFkZGluZyBzdXBwb3J0IGZvciBlbmFibGluZyB0aGUgYW5hbG9nIGZyb250LWVuZCBEQUMgY2xvY2sgd2hlbiBvcGVyYXRpbmcgaW4gR01JSSBtb2RlLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGRyaXZlciBjb25maWd1cmF0aW9uIGZsb3cgYW5kIGNhbiBiZSBleGVjdXRlZCB2aWEgTURJTyAvIHBoeWxpYiB0aHJvdWdoIGVtdWxhdGVkIFVTQiBvciBuZXR3b3JrIGNvbnRyb2xsZXJzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzo1NDowMy42MTAyNDkyMzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMTQ4NDEzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQxMzgwNmZiNGU2N2QwMmI3ODFlNWM0OTVkYTA5NDYzZjc2ZTg4ZjRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDc6NTQ6MDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXFxuaW5kZXggYzVhMmNkYThkMzFiZC4uOTBhNGY4NmYyNzU4YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcXG5AQCAtMTQ0LDYgKzE0NCwxMSBAQFxcbiAjZGVmaW5lIFlUODUyMV9DTE9DS19HQVRJTkdfUkVHXFx0XFx0XFx0MHhDXFxuICNkZWZpbmUgWVQ4NTIxX0NHUl9SWF9DTEtfRU5cXHRcXHRcXHRCSVQoMTIpXFxuIFxcbisvKiBBbmFsb2cgZnJvbnQtZW5kIGNvbnRyb2wgcmVnaXN0ZXIgMyAqL1xcbisjZGVmaW5lIFlUODUzMVNfRVhUX0FGRV9DVFJMM1xcdFxcdFxcdDB4MTJcXG4rLyogQW5hbG9nIGZyb250LWVuZCBEQUMgY2xvY2sgZW5hYmxlICovXFxuKyNkZWZpbmUgWVQ4NTMxU19BRkVfQ1RSTDNfQ0xLREFDX0FPTlxcdFxcdEJJVCgxMylcXG4rXFxuICNkZWZpbmUgWVQ4NTIxX0VYVFJFR19TTEVFUF9DT05UUk9MMV9SRUdcXHQweDI3XFxuICNkZWZpbmUgWVQ4NTIxX0VTQzFSX1NMRUVQX1NXXFx0XFx0XFx0QklUKDE1KVxcbiAjZGVmaW5lIFlUODUyMV9FU0MxUl9QTExPTl9TTFBcXHRcXHRcXHRCSVQoMTQpXFxuQEAgLTE2ODAsMjcgKzE2ODUsMTYgQEAgc3RhdGljIGludCB5dDg1MjFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdHJldHVybiB5dDg1MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7XFxuIH1cXG4gXFxuLS8qKlxcbi0gKiB5dDg1MjFfY29uZmlnX2luaXQoKSAtIGNhbGxlZCB0byBpbml0aWFsaXplIHRoZSBQSFlcXG4tICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuLSAqXFxuLSAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuLSAqL1xcbi1zdGF0aWMgaW50IHl0ODUyMV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbitzdGF0aWMgaW50IF9feXQ4NTIxX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuLVxcdGludCBvbGRfcGFnZTtcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcbi1cXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODUyMV9SU1NSX1VUUF9TUEFDRSk7XFxuLVxcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuLVxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4tXFxuIFxcdC8qIHNldCByZ21paSBkZWxheSBtb2RlICovXFxuIFxcdGlmIChwaHlkZXYtXFx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHtcXG4gXFx0XFx0cmV0ID0geXRwaHlfcmdtaWlfY2xrX2RlbGF5X2NvbmZpZyhwaHlkZXYpO1xcbiBcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYsIFxcXCJtb3RvcmNvbW0sYXV0by1zbGVlcC1kaXNhYmxlZFxcXCIpKSB7XFxuQEAgLTE3MDgsMjAgKzE3MDIsNTggQEAgc3RhdGljIGludCB5dDg1MjFfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0XFx0cmV0ID0geXRwaHlfbW9kaWZ5X2V4dChwaHlkZXYsIFlUODUyMV9FWFRSRUdfU0xFRVBfQ09OVFJPTDFfUkVHLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgWVQ4NTIxX0VTQzFSX1NMRUVQX1NXLCAwKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGRldmljZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LCBcXFwibW90b3Jjb21tLGtlZXAtcGxsLWVuYWJsZWRcXFwiKSkge1xcbitcXHRpZiAoZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYsIFxcXCJtb3RvcmNvbW0sa2VlcC1wbGwtZW5hYmxlZFxcXCIpKVxcbiBcXHRcXHQvKiBlbmFibGUgUlhDIGNsb2NrIHdoZW4gbm8gd2lyZSBwbHVnICovXFxuLVxcdFxcdHJldCA9IHl0cGh5X21vZGlmeV9leHQocGh5ZGV2LCBZVDg1MjFfQ0xPQ0tfR0FUSU5HX1JFRyxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIFlUODUyMV9DR1JfUlhfQ0xLX0VOLCAwKTtcXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiB5dHBoeV9tb2RpZnlfZXh0KHBoeWRldiwgWVQ4NTIxX0NMT0NLX0dBVElOR19SRUcsXFxuK1xcdFxcdFxcdFxcdFxcdFlUODUyMV9DR1JfUlhfQ0xLX0VOLCAwKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4NTIxX2NvbmZpZ19pbml0KCkgLSBjYWxsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgUEhZXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiByZXR1cm5zIDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg1MjFfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2UsIHJldCA9IDA7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODUyMV9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IF9feXQ4NTIxX2NvbmZpZ19pbml0KHBoeWRldik7XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHl0ODUzMXNfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2UsIHJldCA9IDA7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODUyMV9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IF9feXQ4NTIxX2NvbmZpZ19pbml0KHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdGlmIChwaHlfaW50ZXJmYWNlX2lzX3JnbWlpKHBoeWRldikpIHtcXG4rXFx0XFx0cmV0ID0geXQ4NTMxX3NldF9kcyhwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChwaHlfaW50ZXJmYWNlX2lzX3JnbWlpKHBoeWRldikgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIHBoeWRldl9pZF9jb21wYXJlKHBoeWRldiwgUEhZX0lEX1lUODUzMVMpKVxcbi1cXHRcXHRyZXQgPSB5dDg1MzFfc2V0X2RzKHBoeWRldik7XFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfR01JSSlcXG4rXFx0XFx0cmV0ID0geXRwaHlfbW9kaWZ5X2V4dChwaHlkZXYsIFlUODUzMVNfRVhUX0FGRV9DVFJMMyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIDAsIFlUODUzMVNfQUZFX0NUUkwzX0NMS0RBQ19BT04pO1xcbiBcXG4gZXJyX3Jlc3RvcmVfcGFnZTpcXG4gXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG5AQCAtMzEzNSw3ICszMTY3LDcgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xcbiBcXHRcXHQuc2V0X3dvbFxcdD0geXRwaHlfc2V0X3dvbCxcXG4gXFx0XFx0LmNvbmZpZ19hbmVnXFx0PSB5dDg1MjFfY29uZmlnX2FuZWcsXFxuIFxcdFxcdC5hbmVnX2RvbmVcXHQ9IHl0ODUyMV9hbmVnX2RvbmUsXFxuLVxcdFxcdC5jb25maWdfaW5pdFxcdD0geXQ4NTIxX2NvbmZpZ19pbml0LFxcbitcXHRcXHQuY29uZmlnX2luaXRcXHQ9IHl0ODUzMXNfY29uZmlnX2luaXQsXFxuIFxcdFxcdC5yZWFkX3N0YXR1c1xcdD0geXQ4NTIxX3JlYWRfc3RhdHVzLFxcbiBcXHRcXHQuc29mdF9yZXNldFxcdD0geXQ4NTIxX3NvZnRfcmVzZXQsXFxuIFxcdFxcdC5zdXNwZW5kXFx0PSB5dDg1MjFfc3VzcGVuZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6NTQ6MDMuOTQyMzk2MDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjgwOTI0MzEzODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1PVE9SQ09NTV9QSFlcIixcbiAgICBcIlBIWUxJQlwiLFxuICAgIFwiTkVUREVWSUNFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInl0ODUzMXNfY29uZmlnX2luaXRcIixcbiAgICBcInl0ODUyMV9jb25maWdfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBkZWRpY2F0ZWQgaW5pdGlhbGl6YXRpb24gY2FsbGJhY2sgeXQ4NTMxc19jb25maWdfaW5pdCBmb3IgdGhlIE1vdG9yY29tbSBZVDg1MzFTIEV0aGVybmV0IFBIWSwgZmFjdG9yaW5nIGNvbW1vbiBpbml0aWFsaXphdGlvbiBpbnRvIF9feXQ4NTIxX2NvbmZpZ19pbml0IGFuZCBhZGRpbmcgc3VwcG9ydCBmb3IgZW5hYmxpbmcgdGhlIGFuYWxvZyBmcm9udC1lbmQgREFDIGNsb2NrIHdoZW4gb3BlcmF0aW5nIGluIEdNSUkgbW9kZS4gVGhlc2UgY2hhbmdlcyBhbHRlciBkcml2ZXIgY29uZmlndXJhdGlvbiBmbG93IGFuZCBjYW4gYmUgZXhlY3V0ZWQgdmlhIE1ESU8gLyBwaHlsaWIgdGhyb3VnaCBlbXVsYXRlZCBVU0Igb3IgbmV0d29yayBjb250cm9sbGVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDEzODA2ZmI0ZTY3ZDAyYjc4MWU1YzQ5NWRhMDk0NjNmNzZlODhmNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDA3OjU0OjAyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG5pbmRleCBjNWEyY2RhOGQzMWJkLi45MGE0Zjg2ZjI3NThiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbkBAIC0xNDQsNiArMTQ0LDExIEBAXG4gI2RlZmluZSBZVDg1MjFfQ0xPQ0tfR0FUSU5HX1JFR1x0XHRcdDB4Q1xuICNkZWZpbmUgWVQ4NTIxX0NHUl9SWF9DTEtfRU5cdFx0XHRCSVQoMTIpXG4gXG4rLyogQW5hbG9nIGZyb250LWVuZCBjb250cm9sIHJlZ2lzdGVyIDMgKi9cbisjZGVmaW5lIFlUODUzMVNfRVhUX0FGRV9DVFJMM1x0XHRcdDB4MTJcbisvKiBBbmFsb2cgZnJvbnQtZW5kIERBQyBjbG9jayBlbmFibGUgKi9cbisjZGVmaW5lIFlUODUzMVNfQUZFX0NUUkwzX0NMS0RBQ19BT05cdFx0QklUKDEzKVxuK1xuICNkZWZpbmUgWVQ4NTIxX0VYVFJFR19TTEVFUF9DT05UUk9MMV9SRUdcdDB4MjdcbiAjZGVmaW5lIFlUODUyMV9FU0MxUl9TTEVFUF9TV1x0XHRcdEJJVCgxNSlcbiAjZGVmaW5lIFlUODUyMV9FU0MxUl9QTExPTl9TTFBcdFx0XHRCSVQoMTQpXG5AQCAtMTY4MCwyNyArMTY4NSwxNiBAQCBzdGF0aWMgaW50IHl0ODUyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdHJldHVybiB5dDg1MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7XG4gfVxuIFxuLS8qKlxuLSAqIHl0ODUyMV9jb25maWdfaW5pdCgpIC0gY2FsbGVkIHRvIGluaXRpYWxpemUgdGhlIFBIWVxuLSAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4tICpcbi0gKiByZXR1cm5zIDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuLSAqL1xuLXN0YXRpYyBpbnQgeXQ4NTIxX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4rc3RhdGljIGludCBfX3l0ODUyMV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbi1cdGludCBvbGRfcGFnZTtcbiBcdGludCByZXQgPSAwO1xuIFxuLVx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg1MjFfUlNTUl9VVFBfU1BBQ0UpO1xuLVx0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4tXG4gXHQvKiBzZXQgcmdtaWkgZGVsYXkgbW9kZSAqL1xuIFx0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKSB7XG4gXHRcdHJldCA9IHl0cGh5X3JnbWlpX2Nsa19kZWxheV9jb25maWcocGh5ZGV2KTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbiBcdGlmIChkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29sKGRldiwgXCJtb3RvcmNvbW0sYXV0by1zbGVlcC1kaXNhYmxlZFwiKSkge1xuQEAgLTE3MDgsMjAgKzE3MDIsNTggQEAgc3RhdGljIGludCB5dDg1MjFfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdFx0cmV0ID0geXRwaHlfbW9kaWZ5X2V4dChwaHlkZXYsIFlUODUyMV9FWFRSRUdfU0xFRVBfQ09OVFJPTDFfUkVHLFxuIFx0XHRcdFx0ICAgICAgIFlUODUyMV9FU0MxUl9TTEVFUF9TVywgMCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0XHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4tXHRpZiAoZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYsIFwibW90b3Jjb21tLGtlZXAtcGxsLWVuYWJsZWRcIikpIHtcbitcdGlmIChkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29sKGRldiwgXCJtb3RvcmNvbW0sa2VlcC1wbGwtZW5hYmxlZFwiKSlcbiBcdFx0LyogZW5hYmxlIFJYQyBjbG9jayB3aGVuIG5vIHdpcmUgcGx1ZyAqL1xuLVx0XHRyZXQgPSB5dHBoeV9tb2RpZnlfZXh0KHBoeWRldiwgWVQ4NTIxX0NMT0NLX0dBVElOR19SRUcsXG4tXHRcdFx0XHQgICAgICAgWVQ4NTIxX0NHUl9SWF9DTEtfRU4sIDApO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4geXRwaHlfbW9kaWZ5X2V4dChwaHlkZXYsIFlUODUyMV9DTE9DS19HQVRJTkdfUkVHLFxuK1x0XHRcdFx0XHRZVDg1MjFfQ0dSX1JYX0NMS19FTiwgMCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogeXQ4NTIxX2NvbmZpZ19pbml0KCkgLSBjYWxsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgUEhZXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg1MjFfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgb2xkX3BhZ2UsIHJldCA9IDA7XG4rXG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODUyMV9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IF9feXQ4NTIxX2NvbmZpZ19pbml0KHBoeWRldik7XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeXQ4NTMxc19jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBvbGRfcGFnZSwgcmV0ID0gMDtcbitcbitcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4NTIxX1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0gX195dDg1MjFfY29uZmlnX2luaXQocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdGlmIChwaHlfaW50ZXJmYWNlX2lzX3JnbWlpKHBoeWRldikpIHtcbitcdFx0cmV0ID0geXQ4NTMxX3NldF9kcyhwaHlkZXYpO1xuK1x0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiBcdH1cbiBcbi1cdGlmIChwaHlfaW50ZXJmYWNlX2lzX3JnbWlpKHBoeWRldikgXHUwMDI2XHUwMDI2XG4tXHQgICAgcGh5ZGV2X2lkX2NvbXBhcmUocGh5ZGV2LCBQSFlfSURfWVQ4NTMxUykpXG4tXHRcdHJldCA9IHl0ODUzMV9zZXRfZHMocGh5ZGV2KTtcbitcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJKVxuK1x0XHRyZXQgPSB5dHBoeV9tb2RpZnlfZXh0KHBoeWRldiwgWVQ4NTMxU19FWFRfQUZFX0NUUkwzLFxuK1x0XHRcdFx0ICAgICAgIDAsIFlUODUzMVNfQUZFX0NUUkwzX0NMS0RBQ19BT04pO1xuIFxuIGVycl9yZXN0b3JlX3BhZ2U6XG4gXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuQEAgLTMxMzUsNyArMzE2Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcbiBcdFx0LnNldF93b2xcdD0geXRwaHlfc2V0X3dvbCxcbiBcdFx0LmNvbmZpZ19hbmVnXHQ9IHl0ODUyMV9jb25maWdfYW5lZyxcbiBcdFx0LmFuZWdfZG9uZVx0PSB5dDg1MjFfYW5lZ19kb25lLFxuLVx0XHQuY29uZmlnX2luaXRcdD0geXQ4NTIxX2NvbmZpZ19pbml0LFxuK1x0XHQuY29uZmlnX2luaXRcdD0geXQ4NTMxc19jb25maWdfaW5pdCxcbiBcdFx0LnJlYWRfc3RhdHVzXHQ9IHl0ODUyMV9yZWFkX3N0YXR1cyxcbiBcdFx0LnNvZnRfcmVzZXRcdD0geXQ4NTIxX3NvZnRfcmVzZXQsXG4gXHRcdC5zdXNwZW5kXHQ9IHl0ODUyMV9zdXNwZW5kLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6NTQ6MDMuOTQyMzk3MjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDI4MDgzODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQncyBldmVuIHdvcnRoIGNvbnNpZGVyaW5nIGZvciBmdXp6aW5nLiBUaGUgY2hhbmdlIGlzIGluIGBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNgLCBzbyBteSBmaXJzdCB0aG91Z2h0IGlzLCBcIldoYXQncyB0aGF0IGFsbCBhYm91dD9cIiBSaWdodCwgaXQncyBhIFBIWSBkcml2ZXIg4oCTIHNwZWNpZmljYWxseSwgZm9yIHRob3NlIE1vdG9yY29tbSBQSFkgY2hpcHMgbGlrZSB0aGUgWVQ4NTExLCBZVDg1MjEsIGFuZCBZVDg1MzFTLiBOb3csIHRoZXNlIGFyZSBNRElPIEV0aGVybmV0IFBIWSBkcml2ZXJzLCBhbmQgdGhleSBsaXZlIHdpdGhpbiBgZHJpdmVycy9uZXQvcGh5L2AuXG5cblRoZSBiaWcgcXVlc3Rpb24sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGNhbiBiZSByZWFjaGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIENhbiBJIGdldCB0byB0aGlzIHN0dWZmIGluIFFFTVUgb3IgR0NFPyBPciBhbSBJIGdvaW5nIHRvIGJlIHN0dWNrIG5lZWRpbmcgc3BlY2lmaWMgcGh5c2ljYWwgRXRoZXJuZXQgaGFyZHdhcmUgYW5kIGFuIE1ESU8gYnVzP1xuXG5Ib2xkIG9uLCBsZXQncyByZXZpZXcgdGhlIHJ1bGVzLiBXZSBkb24ndCB3YW50IHRvIHdhc3RlIHRpbWUgb24gdGhpbmdzIHRoYXQgYXJlIG9idmlvdXNseSBvZmYtbGltaXRzLiBUaGUgZ3VpZGVsaW5lcyBhcmUgcHJldHR5IGNsZWFyOiBEb2N1bWVudGF0aW9uIGNoYW5nZXMsIGxvZ2dpbmcgdHdlYWtzLCBub24tZnVuY3Rpb25hbCBjb25zdGFudCBjaGFuZ2VzLCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLiBhbmQgc3R1ZmYgdGhhdCBuZWVkcyBzcGVjaWFsaXplZCBoYXJkd2FyZS4gR2l2ZW4gdGhhdCB0aGlzIGlzIGEgUEhZIGRyaXZlciwgaXQncyBwcmV0dHkgbGlrZWx5IHdlIGFyZSBnb2luZyB0byBuZWVkIHRoZSBoYXJkd2FyZS5cblxuU28sIGJhY2sgdG8gYG1vdG9yY29tbS5jYC4gSXQncyBkZWZpbml0ZWx5IGZvciB0aG9zZSBkaXNjcmV0ZSBQSFkgY2hpcHMsIHJpZ2h0PyBZVDg1MTEsIHRoYXQgc29ydCBvZiB0aGluZywgYWxsIGhhbmdpbmcgb2ZmIGFuIE1ESU8gYnVzLiBDYW4gSSBlbXVsYXRlIHRoYXQ/IElzIHRoZXJlIHNvbWUgdmlydHVhbCBNRElPIG1hZ2ljIG91dCB0aGVyZSwgb3IgYW0gSSBjb21wbGV0ZWx5IGhhcmR3YXJlLWRlcGVuZGVudCBoZXJlPyBJJ20gZ29pbmcgdG8gZG8gYSBxdWljayBzZWFyY2ggaW4gdGhlIGNvZGViYXNlIGZvciBgbW90b3Jjb21tYCBvciBgTU9UT1JDT01NX1BIWWAgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IGhpbnQgb2YgdmlydHVhbGl6YXRpb24gc3VwcG9ydC4gSG9wZWZ1bGx5LCB0aGUgcmVzdWx0cyBwb2ludCB0byBzb21lIHZpcnR1YWwgTURJTyAvIG1vY2sgTURJTy4gT3RoZXJ3aXNlLCBJIHdpbGwgbWFyayB0aGlzIGFzICpub3QqIHdvcnRoIGZ1enppbmcgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1ODgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzo1NDowOC45NzA0ODM5OTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwMzc5NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTU9UT1JDT01NXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWc9MzUzPWNvbmZpZyBNSUNST1NFTUlfUEhZXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zNjEtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MzYyOmNvbmZpZyBNT1RPUkNPTU1fUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzYzLVxcdHRyaXN0YXRlIFxcXCJNb3RvcmNvbW0gUEhZc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT04ND1vYmotJChDT05GSUdfTUlDUk9TRU1JX1BIWSlcXHQrPSBtc2NjL1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo4NTpvYmotJChDT05GSUdfTU9UT1JDT01NX1BIWSlcXHQrPSBtb3RvcmNvbW0ub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS04Ni1vYmotJChDT05GSUdfTkFUSU9OQUxfUEhZKVxcdCs9IG5hdGlvbmFsLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6NTQ6MDkuMDE4NTI2ODkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk2MTAzODAwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBNb3RvcmNvbW0gUEhZIERyaXZlcioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY2Agc291cmNlIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBkcml2ZXIgaXMgZG9pbmcuIEknbGwgZm9jdXMgbXkgYXR0ZW50aW9uIGFyb3VuZCB0aGUgYG1vdG9yY29tbV9waHlfZHJ2c2AgZGF0YSBzdHJ1Y3R1cmUuIFRoYXQncyB1c3VhbGx5IHRoZSBzdGFydGluZyBwb2ludCBmb3IgUEhZIGRyaXZlciBpbXBsZW1lbnRhdGlvbnM7IGl0IGRlZmluZXMgdGhlIHN1cHBvcnRlZCBQSFkgSURzIGFuZCBhc3NvY2lhdGVkIGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBkcml2ZXIncyBwcm9iZSBhbmQgbWF0Y2ggcm91dGluZXMgd29yay4gVW5kZXJzdGFuZGluZyB0aGF0IGludGVyYWN0aW9uIGlzIGtleS4gSSdsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIGRyaXZlciBpZGVudGlmaWVzIGEgTW90b3Jjb21tIFBIWSBhbmQgdGhlbiBob3cgaXQgaW5pdGlhbGl6ZXMgYW5kIGNvbmZpZ3VyZXMgaXQuIEkgc3VzcGVjdCB0aGVyZSdzIGEgZGV2aWNlIElEIG1hdGNoIGludm9sdmVkLCBsaWtlbHkgY2hlY2tpbmcgYWdhaW5zdCBzb21lIHJlZ2lzdGVyIHZhbHVlcy4gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyB0aGUgZHJpdmVyIGRldGVybWluZXMgaWYgaXQncyB0aGUgcmlnaHQgb25lIGZvciBhIGdpdmVuIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NzcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzo1NDoxMC45Nzk1Njc2NDFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDM0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxNTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMxNTA6XFx0XFx0XFx0LnN1c3BlbmRcXHQ9IGdlbnBoeV9zdXNwZW5kLFxcbjMxNTE6XFx0XFx0XFx0LnJlc3VtZVxcdFxcdD0gZ2VucGh5X3Jlc3VtZSxcXG4zMTUyOlxcdFxcdFxcdC5nZXRfd29sXFx0PSB5dHBoeV9nZXRfd29sLFxcbjMxNTM6XFx0XFx0XFx0LnNldF93b2xcXHQ9IHl0ODUzMV9zZXRfd29sLFxcbjMxNTQ6XFx0XFx0XFx0LmxpbmtfY2hhbmdlX25vdGlmeSA9IHl0ODUzMV9saW5rX2NoYW5nZV9ub3RpZnksXFxuMzE1NTpcXHRcXHRcXHQubGVkX2h3X2lzX3N1cHBvcnRlZCA9IHl0ODUyMV9sZWRfaHdfaXNfc3VwcG9ydGVkLFxcbjMxNTY6XFx0XFx0XFx0LmxlZF9od19jb250cm9sX3NldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9zZXQsXFxuMzE1NzpcXHRcXHRcXHQubGVkX2h3X2NvbnRyb2xfZ2V0ID0geXQ4NTIxX2xlZF9od19jb250cm9sX2dldCxcXG4zMTU4OlxcdFxcdH0sXFxuMzE1OTpcXHRcXHR7XFxuMzE2MDpcXHRcXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMVMpLFxcbjMxNjE6XFx0XFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJZVDg1MzFTIEdpZ2FiaXQgRXRoZXJuZXRcXFwiLFxcbjMxNjI6XFx0XFx0XFx0LmdldF9mZWF0dXJlc1xcdD0geXQ4NTIxX2dldF9mZWF0dXJlcyxcXG4zMTYzOlxcdFxcdFxcdC5wcm9iZVxcdFxcdD0geXQ4NTIxX3Byb2JlLFxcbjMxNjQ6XFx0XFx0XFx0LnJlYWRfcGFnZVxcdD0geXQ4NTIxX3JlYWRfcGFnZSxcXG4zMTY1OlxcdFxcdFxcdC53cml0ZV9wYWdlXFx0PSB5dDg1MjFfd3JpdGVfcGFnZSxcXG4zMTY2OlxcdFxcdFxcdC5nZXRfd29sXFx0PSB5dHBoeV9nZXRfd29sLFxcbjMxNjc6XFx0XFx0XFx0LnNldF93b2xcXHQ9IHl0cGh5X3NldF93b2wsXFxuMzE2ODpcXHRcXHRcXHQuY29uZmlnX2FuZWdcXHQ9IHl0ODUyMV9jb25maWdfYW5lZyxcXG4zMTY5OlxcdFxcdFxcdC5hbmVnX2RvbmVcXHQ9IHl0ODUyMV9hbmVnX2RvbmUsXFxuMzE3MDpcXHRcXHRcXHQuY29uZmlnX2luaXRcXHQ9IHl0ODUzMXNfY29uZmlnX2luaXQsXFxuMzE3MTpcXHRcXHRcXHQucmVhZF9zdGF0dXNcXHQ9IHl0ODUyMV9yZWFkX3N0YXR1cyxcXG4zMTcyOlxcdFxcdFxcdC5zb2Z0X3Jlc2V0XFx0PSB5dDg1MjFfc29mdF9yZXNldCxcXG4zMTczOlxcdFxcdFxcdC5zdXNwZW5kXFx0PSB5dDg1MjFfc3VzcGVuZCxcXG4zMTc0OlxcdFxcdFxcdC5yZXN1bWVcXHRcXHQ9IHl0ODUyMV9yZXN1bWUsXFxuMzE3NTpcXHRcXHR9LFxcbjMxNzY6XFx0XFx0e1xcbjMxNzc6XFx0XFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpLFxcbjMxNzg6XFx0XFx0XFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJZVDg4MjEgMi41R2JwcyBQSFlcXFwiLFxcbjMxNzk6XFx0XFx0XFx0LmdldF9mZWF0dXJlc1xcdFxcdD0geXQ4ODIxX2dldF9mZWF0dXJlcyxcXG4zMTgwOlxcdFxcdFxcdC5yZWFkX3BhZ2VcXHRcXHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXFxuMzE4MTpcXHRcXHRcXHQud3JpdGVfcGFnZVxcdFxcdD0geXQ4NTIxX3dyaXRlX3BhZ2UsXFxuMzE4MjpcXHRcXHRcXHQuZ2V0X3dvbFxcdFxcdD0geXRwaHlfZ2V0X3dvbCxcXG4zMTgzOlxcdFxcdFxcdC5zZXRfd29sXFx0XFx0PSB5dHBoeV9zZXRfd29sLFxcbjMxODQ6XFx0XFx0XFx0LmNvbmZpZ19hbmVnXFx0XFx0PSBnZW5waHlfY29uZmlnX2FuZWcsXFxuMzE4NTpcXHRcXHRcXHQuYW5lZ19kb25lXFx0XFx0PSB5dDg4MjFfYW5lZ19kb25lLFxcbjMxODY6XFx0XFx0XFx0LmNvbmZpZ19pbml0XFx0XFx0PSB5dDg4MjFfY29uZmlnX2luaXQsXFxuMzE4NzpcXHRcXHRcXHQuZ2V0X3JhdGVfbWF0Y2hpbmdcXHQ9IHl0ODgyMV9nZXRfcmF0ZV9tYXRjaGluZyxcXG4zMTg4OlxcdFxcdFxcdC5yZWFkX3N0YXR1c1xcdFxcdD0geXQ4ODIxX3JlYWRfc3RhdHVzLFxcbjMxODk6XFx0XFx0XFx0LnNvZnRfcmVzZXRcXHRcXHQ9IHl0ODgyMV9zb2Z0X3Jlc2V0LFxcbjMxOTA6XFx0XFx0XFx0LnN1c3BlbmRcXHRcXHQ9IHl0ODgyMV9zdXNwZW5kLFxcbjMxOTE6XFx0XFx0XFx0LnJlc3VtZVxcdFxcdFxcdD0geXQ4ODIxX3Jlc3VtZSxcXG4zMTkyOlxcdFxcdH0sXFxuMzE5MzpcXHR9O1xcbjMxOTQ6XFx0XFxuMzE5NTpcXHRtb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpO1xcbjMxOTY6XFx0XFxuMzE5NzpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIk1vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXJcXFwiKTtcXG4zMTk4OlxcdE1PRFVMRV9BVVRIT1IoXFxcIlBldGVyIEdlaXNcXFwiKTtcXG4zMTk5OlxcdE1PRFVMRV9BVVRIT1IoXFxcIkZyYW5rXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU0OjEwLjk3OTkyNDU0MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NjY0ODU3MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW52ZXN0aWdhdGlvbiBpbnRvIFBIWSBEcml2ZXIgSW5zdGFudGlhdGlvbiBpbiBWaXJ0dWFsIEVudmlyb25tZW50cyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byBob3cgdGhlc2UgUEhZIGRyaXZlcnMgYXJlIHR5cGljYWxseSBicm91Z2h0IHRvIGxpZmUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgcHJvYmluZyBtZWNoYW5pc207IEkgYmVsaWV2ZSB0aGV5IGtleSBvZmYgdGhvc2UgUEhZIElEIHJlZ2lzdGVycywgYE1JSV9QSFlTSUQxYCBhbmQgYE1JSV9QSFlTSUQyYCwgYWNjZXNzZWQgdGhyb3VnaCBNRElPLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uIHBsYXRmb3JtcyBsaWtlIFFFTVUsIEdDRSwgb3IgdGhlIG1haW5saW5lIExpbnV4IGtlcm5lbCBwcm92aWRlIGFueSBzb3J0IG9mIE1ESU8gYnVzIGVtdWxhdGlvbiBvciBtb2NrIGRyaXZlciBJIGNhbiBsZXZlcmFnZS5cblxuU28sIHRoZSBuZXh0IHN0ZXAgaXMgY2xlYXI6IGxldCdzIHZlcmlmeSBpZiBNRElPIFBIWSBkcml2ZXJzIGFyZSBhY2Nlc3NpYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVG8gYWNoaWV2ZSB0aGlzLCBhIGZvY3VzZWQgc2VhcmNoIGlzIHJlcXVpcmVkLiBJJ2xsIG5lZWQgdG8gZXhwbG9yZSB0aGUgY29kZSB1c2luZyBzZWFyY2ggdGVybXMgcmVsYXRlZCB0byBNRElPIGltcGxlbWVudGF0aW9uLiBUaGF0IGluY2x1ZGVzIGBtZGlvYCwgYG1kaW9fYnVzYCwgYG1kaW8tZ3Bpb2AsIGFuZCBgbWRpby1iaXRiYW5nYCwgYW5kIG90aGVyIHNpbWlsYXIgdGVybXMgdGhhdCBtYXkgYmUgcmVsZXZhbnQuIFRoaXMgc2hvdWxkIGhlbHAgdG8gZGV0ZXJtaW5lIHRoZSBhdmFpbGFiaWxpdHkgb2YgTURJTyB3aXRoaW4gdGhlc2UgZW52aXJvbm1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTg5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6NTQ6MTMuNTQ2NDEzNDE1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMDY2ODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWRpby9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAzNjg4IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc9OTA9Y29uZmlnIE1ESU9fR1BJT1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTk3LVxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzo5ODpcXHQgIHdpbGwgYmUgY2FsbGVkIG1kaW8tZ3Bpby5cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctOTktXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlLTMtXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19BQ1BJX01ESU8pXFx0XFx0Kz0gYWNwaV9tZGlvLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0ZXTk9ERV9NRElPKVxcdCs9IGZ3bm9kZV9tZGlvLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX09GX01ESU8pXFx0XFx0Kz0gb2ZfbWRpby5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZS03LVxcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6ODpvYmotJChDT05GSUdfTURJT19BSVJPSEEpXFx0XFx0Kz0gbWRpby1haXJvaGEub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6OTpvYmotJChDT05GSUdfTURJT19BU1BFRUQpXFx0XFx0Kz0gbWRpby1hc3BlZWQub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX01ESU9fQkNNX0lQUk9DKVxcdFxcdCs9IG1kaW8tYmNtLWlwcm9jLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19NRElPX0JDTV9VTklNQUMpXFx0XFx0Kz0gbWRpby1iY20tdW5pbWFjLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjEyOm9iai0kKENPTkZJR19NRElPX0JJVEJBTkcpXFx0XFx0Kz0gbWRpby1iaXRiYW5nLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19NRElPX0NBVklVTSlcXHRcXHQrPSBtZGlvLWNhdml1bS5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfTURJT19HUElPKVxcdFxcdFxcdCs9IG1kaW8tZ3Bpby5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToxNTpvYmotJChDT05GSUdfTURJT19ISVNJX0ZFTUFDKVxcdFxcdCs9IG1kaW8taGlzaS1mZW1hYy5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfTURJT19JMkMpXFx0XFx0XFx0Kz0gbWRpby1pMmMub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX01ESU9fSVBRNDAxOSlcXHRcXHQrPSBtZGlvLWlwcTQwMTkub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX01ESU9fSVBRODA2NClcXHRcXHQrPSBtZGlvLWlwcTgwNjQub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MTk6b2JqLSQoQ09ORklHX01ESU9fTU9YQVJUKVxcdFxcdCs9IG1kaW8tbW94YXJ0Lm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19NRElPX01TQ0NfTUlJTSlcXHRcXHQrPSBtZGlvLW1zY2MtbWlpbS5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfTURJT19NVlVTQilcXHRcXHQrPSBtZGlvLW12dXNiLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjIyOm9iai0kKENPTkZJR19NRElPX09DVEVPTilcXHRcXHQrPSBtZGlvLW9jdGVvbi5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToyMzpvYmotJChDT05GSUdfTURJT19QSUM2NEhQU0MpXFx0XFx0Kz0gbWRpby1waWM2NGhwc2Mub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX01ESU9fUkVBTFRFS19SVEw5MzAwKVxcdCs9IG1kaW8tcmVhbHRlay1ydGw5MzAwLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19NRElPX1JFR01BUClcXHRcXHQrPSBtZGlvLXJlZ21hcC5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfTURJT19TVU40SSlcXHRcXHQrPSBtZGlvLXN1bjRpLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjI3Om9iai0kKENPTkZJR19NRElPX1RIVU5ERVIpXFx0XFx0Kz0gbWRpby10aHVuZGVyLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjI4Om9iai0kKENPTkZJR19NRElPX1hHRU5FKVxcdFxcdCs9IG1kaW8teGdlbmUub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGUtMjktXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZTozMDpvYmotJChDT05GSUdfTURJT19CVVNfTVVYKVxcdFxcdCs9IG1kaW8tbXV4Lm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjMxOm9iai0kKENPTkZJR19NRElPX0JVU19NVVhfQkNNNjM2OClcXHQrPSBtZGlvLW11eC1iY202MzY4Lm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjMyOm9iai0kKENPTkZJR19NRElPX0JVU19NVVhfQkNNX0lQUk9DKVxcdCs9IG1kaW8tbXV4LWJjbS1pcHJvYy5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZTozMzpvYmotJChDT05GSUdfTURJT19CVVNfTVVYX0dQSU8pXFx0XFx0Kz0gbWRpby1tdXgtZ3Bpby5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfTURJT19CVVNfTVVYX01FU09OX0cxMkEpXFx0Kz0gbWRpby1tdXgtbWVzb24tZzEyYS5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZTozNTpvYmotJChDT05GSUdfTURJT19CVVNfTVVYX01FU09OX0dYTClcXHQrPSBtZGlvLW11eC1tZXNvbi1neGwub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6MzY6b2JqLSQoQ09ORklHX01ESU9fQlVTX01VWF9NTUlPUkVHKSBcXHQrPSBtZGlvLW11eC1tbWlvcmVnLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjM3Om9iai0kKENPTkZJR19NRElPX0JVU19NVVhfTVVMVElQTEVYRVIpIFxcdCs9IG1kaW8tbXV4LW11bHRpcGxleGVyLm9cXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvYWNwaS5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmM6MTA6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FjcGlfbWRpby5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtMTEtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdHMuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9tZGlvL2FjcGlfbWRpby5jLTEyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZXZfcHJpbnRrLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYzoxMzojaW5jbHVkZSBcXHUwMDNjbGludXgvZndub2RlX21kaW8uaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9tZGlvL2FjcGlfbWRpby5jLTE0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmM9MTk9TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJBQ1BJIE1ESU8gYnVzIChFdGhlcm5ldCBQSFkpIGFjY2Vzc29yc1xcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYy0yMS0vKipcXG5kcml2ZXJzL25ldC9tZGlvL2FjcGlfbWRpby5jOjIyOiAqIF9fYWNwaV9tZGlvYnVzX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgbWlpX2J1cyBhbmQgY3JlYXRlIFBIWXMgZnJvbSB0aGUgQUNQSSBBU0wuXFxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYzoyMzogKiBAbWRpbzogcG9pbnRlciB0byBtaWlfYnVzIHN0cnVjdHVyZVxcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtMjQtICogQGZ3bm9kZTogcG9pbnRlciB0byBmd25vZGUgb2YgTURJTyBidXMuIFRoaXMgZndub2RlIGlzIGV4cGVjdGVkIHRvIHJlcHJlc2VudFxcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmM6MjU6ICogQG93bmVyOiBtb2R1bGUgb3duaW5nIHRoaXMgQG1kaW8gb2JqZWN0LlxcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtMjYtICogYW4gQUNQSSBkZXZpY2Ugb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIE1ESU8gYnVzIGFuZCBpdHMgY2hpbGRyZW4gYXJlXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2FjcGlfbWRpby5jLTMxLSAqL1xcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmM6MzI6aW50IF9fYWNwaV9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLFxcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtMzMtXFx0XFx0XFx0ICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYy0zOS1cXHQvKiBNYXNrIG91dCBhbGwgUEhZcyBmcm9tIGF1dG8gcHJvYmluZy4gKi9cXG5kcml2ZXJzL25ldC9tZGlvL2FjcGlfbWRpby5jOjQwOlxcdG1kaW8tXFx1MDAzZXBoeV9tYXNrID0gR0VOTUFTSygzMSwgMCk7XFxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYzo0MTpcXHRyZXQgPSBfX21kaW9idXNfcmVnaXN0ZXIobWRpbywgb3duZXIpO1xcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtNDItXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtNDQtXFxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYzo0NTpcXHRBQ1BJX0NPTVBBTklPTl9TRVQoXFx1MDAyNm1kaW8tXFx1MDAzZWRldiwgdG9fYWNwaV9kZXZpY2Vfbm9kZShmd25vZGUpKTtcXG5kcml2ZXJzL25ldC9tZGlvL2FjcGlfbWRpby5jLTQ2LVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYy01Mi1cXG5kcml2ZXJzL25ldC9tZGlvL2FjcGlfbWRpby5jOjUzOlxcdFxcdHJldCA9IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShtZGlvLCBjaGlsZCwgYWRkcik7XFxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYy01NC1cXHRcXHRpZiAocmV0ID09IC1FTk9ERVYpXFxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYzo1NTpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZtZGlvLVxcdTAwM2VkZXYsXFxuZHJpdmVycy9uZXQvbWRpby9hY3BpX21kaW8uYy01Ni1cXHRcXHRcXHRcXHRcXFwiTURJTyBkZXZpY2UgYXQgYWRkcmVzcyAlZCBpcyBtaXNzaW5nLlxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmMtNjAtfVxcbmRyaXZlcnMvbmV0L21kaW8vYWNwaV9tZGlvLmM6NjE6RVhQT1JUX1NZTUJPTChfX2FjcGlfbWRpb2J1c19yZWdpc3Rlcik7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6MTE6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Z3bm9kZV9tZGlvLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTEyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jPTQyPWZ3bm9kZV9maW5kX21paV90aW1lc3RhbXBlcihzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTY5LVxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzo3MDppbnQgZndub2RlX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtNzEtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtODAtXFx0aWYgKHJjID09IC1FUFJPQkVfREVGRVIpXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjgxOlxcdFxcdHJjID0gZHJpdmVyX2RlZmVycmVkX3Byb2JlX2NoZWNrX3N0YXRlKFxcdTAwMjZwaHktXFx1MDAzZW1kaW8uZGV2KTtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtODItXFx0aWYgKHJjID09IC1FUFJPQkVfREVGRVIpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtODYtXFx0XFx0cGh5LVxcdTAwM2VpcnEgPSByYztcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6ODc6XFx0XFx0bWRpby1cXHUwMDNlaXJxW2FkZHJdID0gcmM7XFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTg4LVxcdH0gZWxzZSB7XFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjg5OlxcdFxcdHBoeS1cXHUwMDNlaXJxID0gbWRpby1cXHUwMDNlaXJxW2FkZHJdO1xcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy05MC1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtOTItXFx0aWYgKGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woY2hpbGQsIFxcXCJicm9rZW4tdHVybi1hcm91bmRcXFwiKSlcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6OTM6XFx0XFx0bWRpby1cXHUwMDNlcGh5X2lnbm9yZV90YV9tYXNrIHw9IDEgXFx1MDAzY1xcdTAwM2MgYWRkcjtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtOTQtXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtOTgtXFx0Zndub2RlX2hhbmRsZV9nZXQoY2hpbGQpO1xcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzo5OTpcXHRkZXZpY2Vfc2V0X25vZGUoXFx1MDAyNnBoeS1cXHUwMDNlbWRpby5kZXYsIGNoaWxkKTtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTAwLVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTEwNS1cXHRpZiAocmMpIHtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6MTA2OlxcdFxcdGRldmljZV9zZXRfbm9kZShcXHUwMDI2cGh5LVxcdTAwM2VtZGlvLmRldiwgTlVMTCk7XFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTEwNy1cXHRcXHRmd25vZGVfaGFuZGxlX3B1dChjaGlsZCk7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTEwLVxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzoxMTE6XFx0ZGV2X2RiZyhcXHUwMDI2bWRpby1cXHUwMDNlZGV2LCBcXFwicmVnaXN0ZXJlZCBwaHkgZndub2RlICVwZncgYXQgYWRkcmVzcyAlaVxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTEyLVxcdFxcdGNoaWxkLCBhZGRyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMTQtfVxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzoxMTU6RVhQT1JUX1NZTUJPTChmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTE2LVxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzoxMTc6aW50IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLFxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMTgtXFx0XFx0XFx0XFx0c3RydWN0IGZ3bm9kZV9oYW5kbGUgKmNoaWxkLCB1MzIgYWRkcilcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xNDYtXFx0XFx0ICovXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjE0NzpcXHRcXHRwaHktXFx1MDAzZW1kaW8uZGV2LmZ3bm9kZSA9IGZ3bm9kZV9oYW5kbGVfZ2V0KGNoaWxkKTtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTQ4LVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTE1MS1cXHRcXHRpZiAocmMpIHtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6MTUyOlxcdFxcdFxcdHBoeS1cXHUwMDNlbWRpby5kZXYuZndub2RlID0gTlVMTDtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTUzLVxcdFxcdFxcdGZ3bm9kZV9oYW5kbGVfcHV0KGNoaWxkKTtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xNTYtXFx0fSBlbHNlIGlmIChpc19vZl9ub2RlKGNoaWxkKSkge1xcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzoxNTc6XFx0XFx0cmMgPSBmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKGJ1cywgcGh5LCBjaGlsZCwgYWRkcik7XFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTE1OC1cXHRcXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTg4LX1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM6MTg5OkVYUE9SVF9TWU1CT0woZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KTtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjEyOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9tZGlvLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTEzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9hZGRyZXNzLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMzktXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjQwOnN0cnVjdCBhaXJvaGFfbWRpb19kYXRhIHtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtNDEtXFx0dTMyIGJhc2VfYWRkcjtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy00Ni1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6NDc6c3RhdGljIGludCBhaXJvaGFfbWRpb193YWl0X2J1c3koc3RydWN0IGFpcm9oYV9tZGlvX2RhdGEgKnByaXYpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTQ4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy01Ni1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6NTc6c3RhdGljIHZvaWQgYWlyb2hhX21kaW9fcmVzZXQoc3RydWN0IGFpcm9oYV9tZGlvX2RhdGEgKnByaXYpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTU4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy03My1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6NzQ6c3RhdGljIGludCBhaXJvaGFfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtKVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy03NS17XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjc2OlxcdHN0cnVjdCBhaXJvaGFfbWRpb19kYXRhICpwcml2ID0gYnVzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy03Ny1cXHR1MzIgdmFsO1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTc5LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzo4MDpcXHRhaXJvaGFfbWRpb19yZXNldChwcml2KTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtODEtXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtOTAtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjkxOlxcdHJldCA9IGFpcm9oYV9tZGlvX3dhaXRfYnVzeShwcml2KTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtOTItXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xMDEtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjEwMjpzdGF0aWMgaW50IGFpcm9oYV9tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtLFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xMDMtXFx0XFx0XFx0ICAgICB1MTYgdmFsdWUpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTEwNC17XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjEwNTpcXHRzdHJ1Y3QgYWlyb2hhX21kaW9fZGF0YSAqcHJpdiA9IGJ1cy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTA2LVxcdHUzMiB2YWw7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTE4LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoxMTk6XFx0cmV0ID0gYWlyb2hhX21kaW9fd2FpdF9idXN5KHByaXYpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xMjAtXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTIzLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoxMjQ6c3RhdGljIGludCBhaXJvaGFfbWRpb19jbDQ1X3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXZudW0sXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTEyNS1cXHRcXHRcXHRcXHQgaW50IHJlZ251bSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTI2LXtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MTI3OlxcdHN0cnVjdCBhaXJvaGFfbWRpb19kYXRhICpwcml2ID0gYnVzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xMjgtXFx0dTMyIHZhbDtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xMzAtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjEzMTpcXHRhaXJvaGFfbWRpb19yZXNldChwcml2KTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTMyLVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTE0Mi1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MTQzOlxcdHJldCA9IGFpcm9oYV9tZGlvX3dhaXRfYnVzeShwcml2KTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTQ0LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTU1LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoxNTY6XFx0cmV0ID0gYWlyb2hhX21kaW9fd2FpdF9idXN5KHByaXYpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xNTctXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xNjYtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjE2NzpzdGF0aWMgaW50IGFpcm9oYV9tZGlvX2NsNDVfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXZudW0sXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTE2OC1cXHRcXHRcXHRcXHQgIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTY5LXtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MTcwOlxcdHN0cnVjdCBhaXJvaGFfbWRpb19kYXRhICpwcml2ID0gYnVzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xNzEtXFx0dTMyIHZhbDtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0xODMtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjE4NDpcXHRyZXQgPSBhaXJvaGFfbWRpb193YWl0X2J1c3kocHJpdik7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTE4NS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTE5Ny1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MTk4OlxcdHJldCA9IGFpcm9oYV9tZGlvX3dhaXRfYnVzeShwcml2KTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMTk5LVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTIwMi1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MjAzOnN0YXRpYyBpbnQgYWlyb2hhX21kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMjA0LXtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMjA1LVxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjIwNjpcXHRzdHJ1Y3QgYWlyb2hhX21kaW9fZGF0YSAqcHJpdjtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMjA3LVxcdHN0cnVjdCBtaWlfYnVzICpidXM7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMjE0LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoyMTU6XFx0YnVzID0gZGV2bV9tZGlvYnVzX2FsbG9jX3NpemUoZGV2LCBzaXplb2YoKnByaXYpKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMjE2LVxcdGlmICghYnVzKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTIzNC1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MjM1OlxcdGJ1cy1cXHUwMDNlbmFtZSA9IFxcXCJhaXJvaGFfbWRpb19idXNcXFwiO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0yMzYtXFx0c25wcmludGYoYnVzLVxcdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcXFwiJXMtbWlpXFxcIiwgZGV2X25hbWUoZGV2KSk7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTIzNy1cXHRidXMtXFx1MDAzZXBhcmVudCA9IGRldjtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MjM4OlxcdGJ1cy1cXHUwMDNlcmVhZCA9IGFpcm9oYV9tZGlvX3JlYWQ7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjIzOTpcXHRidXMtXFx1MDAzZXdyaXRlID0gYWlyb2hhX21kaW9fd3JpdGU7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjI0MDpcXHRidXMtXFx1MDAzZXJlYWRfYzQ1ID0gYWlyb2hhX21kaW9fY2w0NV9yZWFkO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoyNDE6XFx0YnVzLVxcdTAwM2V3cml0ZV9jNDUgPSBhaXJvaGFfbWRpb19jbDQ1X3dyaXRlO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0yNDItXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMjUwLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoyNTE6XFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBkZXYtXFx1MDAzZW9mX25vZGUpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0yNTItXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTI1OS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6MjYwOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFpcm9oYV9tZGlvX2R0X2lkc1tdID0ge1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYzoyNjE6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJhaXJvaGEsYW43NTgzLW1kaW9cXFwiIH0sXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTI2Mi1cXHR7IH1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMjYzLX07XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjI2NDpNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhaXJvaGFfbWRpb19kdF9pZHMpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1haXJvaGEuYy0yNjUtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjI2NjpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhaXJvaGFfbWRpb19kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjI2NzpcXHQucHJvYmUgPSBhaXJvaGFfbWRpb19wcm9iZSxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMjY4LVxcdC5kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjI2OTpcXHRcXHQubmFtZSA9IFxcXCJhaXJvaGEtbWRpb1xcXCIsXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jOjI3MDpcXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSBhaXJvaGFfbWRpb19kdF9pZHMsXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTI3MS1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFpcm9oYS5jLTI3My1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmM6Mjc0Om1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYWlyb2hhX21kaW9fZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYWlyb2hhLmMtMjc1LVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTctI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvcG9sbC5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzo4OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xMC0jaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MTE6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX21kaW8uaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTItI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTE0LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxNTojZGVmaW5lIERSVl9OQU1FIFxcXCJtZGlvLWFzcGVlZFxcXCJcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTYtXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtNDItXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjQzOnN0cnVjdCBhc3BlZWRfbWRpbyB7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTQ0LVxcdHZvaWQgX19pb21lbSAqYmFzZTtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy00Ny1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6NDg6c3RhdGljIGludCBhc3BlZWRfbWRpb19vcChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1OCBzdCwgdTggb3AsIHU4IHBoeWFkLCB1OCByZWdhZCxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtNDktXFx0XFx0XFx0ICB1MTYgZGF0YSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtNTAte1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzo1MTpcXHRzdHJ1Y3QgYXNwZWVkX21kaW8gKmN0eCA9IGJ1cy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtNTItXFx0dTMyIGN0cmw7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtNzgtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjc5OnN0YXRpYyBpbnQgYXNwZWVkX21kaW9fZ2V0X2RhdGEoc3RydWN0IG1paV9idXMgKmJ1cylcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtODAte1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzo4MTpcXHRzdHJ1Y3QgYXNwZWVkX21kaW8gKmN0eCA9IGJ1cy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtODItXFx0dTMyIGRhdGE7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtOTQtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjk1OnN0YXRpYyBpbnQgYXNwZWVkX21kaW9fcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWdudW0pXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTk2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy05OC1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6OTk6XFx0cmMgPSBhc3BlZWRfbWRpb19vcChidXMsIEFTUEVFRF9NRElPX0NUUkxfU1RfQzIyLCBNRElPX0MyMl9PUF9SRUFELFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xMDAtXFx0XFx0XFx0ICAgIGFkZHIsIHJlZ251bSwgMCk7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTAzLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxMDQ6XFx0cmV0dXJuIGFzcGVlZF9tZGlvX2dldF9kYXRhKGJ1cyk7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTEwNS19XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTEwNi1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MTA3OnN0YXRpYyBpbnQgYXNwZWVkX21kaW9fd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtLFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xMDgtXFx0XFx0XFx0XFx0IHUxNiB2YWwpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTEwOS17XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjExMDpcXHRyZXR1cm4gYXNwZWVkX21kaW9fb3AoYnVzLCBBU1BFRURfTURJT19DVFJMX1NUX0MyMiwgTURJT19DMjJfT1BfV1JJVEUsXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTExMS1cXHRcXHRcXHQgICAgICBhZGRyLCByZWdudW0sIHZhbCk7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTEzLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxMTQ6c3RhdGljIGludCBhc3BlZWRfbWRpb19yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IGRldmFkLFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xMTUtXFx0XFx0XFx0XFx0aW50IHJlZ251bSlcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xMTgtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjExOTpcXHRyYyA9IGFzcGVlZF9tZGlvX29wKGJ1cywgQVNQRUVEX01ESU9fQ1RSTF9TVF9DNDUsIE1ESU9fQzQ1X09QX0FERFIsXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTEyMC1cXHRcXHRcXHQgICAgYWRkciwgZGV2YWQsIHJlZ251bSk7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTIzLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxMjQ6XFx0cmMgPSBhc3BlZWRfbWRpb19vcChidXMsIEFTUEVFRF9NRElPX0NUUkxfU1RfQzQ1LCBNRElPX0M0NV9PUF9SRUFELFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xMjUtXFx0XFx0XFx0ICAgIGFkZHIsIGRldmFkLCAwKTtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xMjgtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjEyOTpcXHRyZXR1cm4gYXNwZWVkX21kaW9fZ2V0X2RhdGEoYnVzKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTMwLX1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTMxLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxMzI6c3RhdGljIGludCBhc3BlZWRfbWRpb193cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXZhZCxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTMzLVxcdFxcdFxcdFxcdCBpbnQgcmVnbnVtLCB1MTYgdmFsKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTEzNi1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MTM3OlxcdHJjID0gYXNwZWVkX21kaW9fb3AoYnVzLCBBU1BFRURfTURJT19DVFJMX1NUX0M0NSwgTURJT19DNDVfT1BfQUREUixcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTM4LVxcdFxcdFxcdCAgICBhZGRyLCBkZXZhZCwgcmVnbnVtKTtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xNDEtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjE0MjpcXHRyZXR1cm4gYXNwZWVkX21kaW9fb3AoYnVzLCBBU1BFRURfTURJT19DVFJMX1NUX0M0NSwgTURJT19DNDVfT1BfV1JJVEUsXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTE0My1cXHRcXHRcXHQgICAgICBhZGRyLCBkZXZhZCwgdmFsKTtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xNDUtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjE0NjpzdGF0aWMgaW50IGFzcGVlZF9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTE0Ny17XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjE0ODpcXHRzdHJ1Y3QgYXNwZWVkX21kaW8gKmN0eDtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTQ5LVxcdHN0cnVjdCBtaWlfYnVzICpidXM7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTUxLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxNTI6XFx0YnVzID0gZGV2bV9tZGlvYnVzX2FsbG9jX3NpemUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgc2l6ZW9mKCpjdHgpKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTUzLVxcdGlmICghYnVzKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTE2OS1cXHRidXMtXFx1MDAzZXBhcmVudCA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjE3MDpcXHRidXMtXFx1MDAzZXJlYWQgPSBhc3BlZWRfbWRpb19yZWFkX2MyMjtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MTcxOlxcdGJ1cy1cXHUwMDNld3JpdGUgPSBhc3BlZWRfbWRpb193cml0ZV9jMjI7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjE3MjpcXHRidXMtXFx1MDAzZXJlYWRfYzQ1ID0gYXNwZWVkX21kaW9fcmVhZF9jNDU7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjE3MzpcXHRidXMtXFx1MDAzZXdyaXRlX2M0NSA9IGFzcGVlZF9tZGlvX3dyaXRlX2M0NTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTc0LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxNzU6XFx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGJ1cywgcGRldi1cXHUwMDNlZGV2Lm9mX25vZGUpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xNzYtXFx0aWYgKHJjKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTg2LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxODc6c3RhdGljIHZvaWQgYXNwZWVkX21kaW9fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTE4OC17XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTE4OS1cXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gKHN0cnVjdCBtaWlfYnVzICopcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjE5MDpcXHRzdHJ1Y3QgYXNwZWVkX21kaW8gKmN0eCA9IGJ1cy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTkxLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0xOTItXFx0cmVzZXRfY29udHJvbF9hc3NlcnQoY3R4LVxcdTAwM2VyZXNldCk7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjE5MzpcXHRtZGlvYnVzX3VucmVnaXN0ZXIoYnVzKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTk0LX1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMTk1LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoxOTY6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXNwZWVkX21kaW9fb2ZfbWF0Y2hbXSA9IHtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MTk3OlxcdHsgLmNvbXBhdGlibGUgPSBcXFwiYXNwZWVkLGFzdDI2MDAtbWRpb1xcXCIsIH0sXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTE5OC1cXHR7IH0sXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTE5OS19O1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoyMDA6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYXNwZWVkX21kaW9fb2ZfbWF0Y2gpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0yMDEtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jOjIwMjpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhc3BlZWRfbWRpb19kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTIwMy1cXHQuZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0yMDQtXFx0XFx0Lm5hbWUgPSBEUlZfTkFNRSxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MjA1OlxcdFxcdC5vZl9tYXRjaF90YWJsZSA9IGFzcGVlZF9tZGlvX29mX21hdGNoLFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYy0yMDYtXFx0fSxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MjA3OlxcdC5wcm9iZSA9IGFzcGVlZF9tZGlvX3Byb2JlLFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1hc3BlZWQuYzoyMDg6XFx0LnJlbW92ZSA9IGFzcGVlZF9tZGlvX3JlbW92ZSxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMjA5LX07XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWFzcGVlZC5jLTIxMC1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmM6MjExOm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYXNwZWVkX21kaW9fZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYXNwZWVkLmMtMjEyLVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTExLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9wbGF0Zm9ybS5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoxMjojaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfbWRpby5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMzUtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjM2OnN0cnVjdCBpcHJvY19tZGlvX3ByaXYge1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0zNy1cXHRzdHJ1Y3QgbWlpX2J1cyAqbWlpX2J1cztcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy00MC1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6NDE6c3RhdGljIGlubGluZSBpbnQgaXByb2NfbWRpb193YWl0X2Zvcl9pZGxlKHZvaWQgX19pb21lbSAqYmFzZSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtNDIte1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTU2LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzo1NzpzdGF0aWMgaW5saW5lIHZvaWQgaXByb2NfbWRpb19jb25maWdfY2xrKHZvaWQgX19pb21lbSAqYmFzZSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtNTgte1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTY1LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzo2NjpzdGF0aWMgaW50IGlwcm9jX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnKVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy02Ny17XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjY4OlxcdHN0cnVjdCBpcHJvY19tZGlvX3ByaXYgKnByaXYgPSBidXMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTY5LVxcdHUzMiBjbWQ7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtNzEtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjcyOlxcdHJjID0gaXByb2NfbWRpb193YWl0X2Zvcl9pZGxlKHByaXYtXFx1MDAzZWJhc2UpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy03My1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtODQtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjg1OlxcdHJjID0gaXByb2NfbWRpb193YWl0X2Zvcl9pZGxlKHByaXYtXFx1MDAzZWJhc2UpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy04Ni1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtOTMtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjk0OnN0YXRpYyBpbnQgaXByb2NfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy05NS1cXHRcXHRcXHQgICAgaW50IHJlZywgdTE2IHZhbClcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtOTYte1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzo5NzpcXHRzdHJ1Y3QgaXByb2NfbWRpb19wcml2ICpwcml2ID0gYnVzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy05OC1cXHR1MzIgY21kO1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTEwMC1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTAxOlxcdHJjID0gaXByb2NfbWRpb193YWl0X2Zvcl9pZGxlKHByaXYtXFx1MDAzZWJhc2UpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xMDItXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTExNC1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTE1OlxcdHJjID0gaXByb2NfbWRpb193YWl0X2Zvcl9pZGxlKHByaXYtXFx1MDAzZWJhc2UpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xMTYtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTEyMS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTIyOnN0YXRpYyBpbnQgaXByb2NfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xMjMte1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoxMjQ6XFx0c3RydWN0IGlwcm9jX21kaW9fcHJpdiAqcHJpdjtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTI1LVxcdHN0cnVjdCBtaWlfYnVzICpidXM7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTM3LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoxMzg6XFx0cHJpdi1cXHUwMDNlbWlpX2J1cyA9IG1kaW9idXNfYWxsb2MoKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTM5LVxcdGlmICghcHJpdi1cXHUwMDNlbWlpX2J1cykge1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE0OC1cXHRidXMtXFx1MDAzZXBhcmVudCA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE0OTpcXHRidXMtXFx1MDAzZXJlYWQgPSBpcHJvY19tZGlvX3JlYWQ7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE1MDpcXHRidXMtXFx1MDAzZXdyaXRlID0gaXByb2NfbWRpb193cml0ZTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTUxLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoxNTI6XFx0aXByb2NfbWRpb19jb25maWdfY2xrKHByaXYtXFx1MDAzZWJhc2UpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xNTMtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE1NDpcXHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBwZGV2LVxcdTAwM2VkZXYub2Zfbm9kZSk7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE1NS1cXHRpZiAocmMpIHtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTU2LVxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIk1ESU8gYnVzIHJlZ2lzdHJhdGlvbiBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoxNTc6XFx0XFx0Z290byBlcnJfaXByb2NfbWRpbztcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTU4LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xNjUtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE2NjplcnJfaXByb2NfbWRpbzpcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTY3OlxcdG1kaW9idXNfZnJlZShidXMpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xNjgtXFx0cmV0dXJuIHJjO1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE3MC1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTcxOnN0YXRpYyB2b2lkIGlwcm9jX21kaW9fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE3Mi17XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE3MzpcXHRzdHJ1Y3QgaXByb2NfbWRpb19wcml2ICpwcml2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE3NC1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTc1OlxcdG1kaW9idXNfdW5yZWdpc3Rlcihwcml2LVxcdTAwM2VtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MTc2OlxcdG1kaW9idXNfZnJlZShwcml2LVxcdTAwM2VtaWlfYnVzKTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTc3LX1cXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xNzktI2lmZGVmIENPTkZJR19QTV9TTEVFUFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoxODA6c3RhdGljIGludCBpcHJvY19tZGlvX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE4MS17XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE4Mi1cXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE4MzpcXHRzdHJ1Y3QgaXByb2NfbWRpb19wcml2ICpwcml2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE4NC1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTg1LVxcdC8qIHJlc3RvcmUgdGhlIG1paSBjbG9jayBjb25maWd1cmF0aW9uICovXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE4NjpcXHRpcHJvY19tZGlvX2NvbmZpZ19jbGsocHJpdi1cXHUwMDNlYmFzZSk7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTE4Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xOTAtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE5MTpzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgaXByb2NfbWRpb19wbV9vcHMgPSB7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjE5MjpcXHQucmVzdW1lID0gaXByb2NfbWRpb19yZXN1bWVcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTkzLX07XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMTk1LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoxOTY6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgaXByb2NfbWRpb19vZl9tYXRjaFtdID0ge1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoxOTc6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJicmNtLGlwcm9jLW1kaW9cXFwiLCB9LFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xOTgtXFx0eyAvKiBzZW50aW5lbCAqLyB9LFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0xOTktfTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MjAwOk1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGlwcm9jX21kaW9fb2ZfbWF0Y2gpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0yMDEtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjIwMjpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpcHJvY19tZGlvX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMjAzLVxcdC5kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjIwNDpcXHRcXHQubmFtZSA9IFxcXCJpcHJvYy1tZGlvXFxcIixcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmM6MjA1OlxcdFxcdC5vZl9tYXRjaF90YWJsZSA9IGlwcm9jX21kaW9fb2ZfbWF0Y2gsXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTIwNi0jaWZkZWYgQ09ORklHX1BNX1NMRUVQXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjIwNzpcXHRcXHQucG0gPSBcXHUwMDI2aXByb2NfbWRpb19wbV9vcHMsXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTIwOC0jZW5kaWZcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMjA5LVxcdH0sXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jOjIxMDpcXHQucHJvYmUgPSBpcHJvY19tZGlvX3Byb2JlLFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoyMTE6XFx0LnJlbW92ZSA9IGlwcm9jX21kaW9fcmVtb3ZlLFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYy0yMTItfTtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLWlwcm9jLmMtMjEzLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoyMTQ6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihpcHJvY19tZGlvX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWJjbS1pcHJvYy5jLTIxNS1cXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYz0yMTg9TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTCB2MlxcXCIpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20taXByb2MuYzoyMTk6TU9EVUxFX0FMSUFTKFxcXCJwbGF0Zm9ybTppcHJvYy1tZGlvXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jLTEzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmM6MTQ6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX21kaW8uaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tYmNtLXVuaW1hYy5jLTE1LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9wbGF0Zm9ybS5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1iY20tdW5pbWFjLmMtMTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzo1NDoxMy41OTg0ODM4NTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NjExMTg5MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEludmVzdGlnYXRpb24gaW50byBNb3RvcmNvbW0gUEhZIEVtdWxhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBpdCdzIHBvc3NpYmxlIHRvIGluc3RhbnRpYXRlIGEgTW90b3Jjb21tIFBIWSB3aXRoaW4gYW4gZW52aXJvbm1lbnQgbGlrZSBRRU1VLCBHb29nbGUgQ29tcHV0ZSBFbmdpbmUsIG9yIGV2ZW4gc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyLiBUaGUgZmlyc3Qgc3RlcCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBQSFkgZGV2aWNlcyBhcmUgZXZlbiByZWdpc3RlcmVkIGluIHRoZSBMaW51eCBrZXJuZWwuIFJpZ2h0LCB0aGV5J3JlIHRpZWQgdG8gdGhlIE1ESU8gYnVzLCB1c3VhbGx5LiBXaGVuIHRoZSBNRElPIGJ1cyBzY2FucywgaXQgbG9va3MgYXQgcmVnaXN0ZXJzIE1JSV9QSFlTSUQxIGFuZCBNSUlfUEhZU0lEMiwgc3BlY2lmaWNhbGx5LiBJZiB0aG9zZSByZWdpc3RlcnMgbWF0Y2ggYSBrbm93biBNb3RvcmNvbW0gUEhZIElELCBsaWtlIGBQSFlfSURfWVQ4NTMxU2Agb3IgWVQ4NTExLCB0aGVuIHRoZSBNb3RvcmNvbW0gZHJpdmVyIHNob3VsZCBiaW5kIHRvIGl0LiBPciwgb2YgY291cnNlLCB0aHJvdWdoIHRoZSBkZXZpY2UgdHJlZSwgQUNQSSwgZndub2RlLCBvciB0aGUgZXRoZXJuZXQgZHJpdmVyIGNvbm5lY3RpbmcgdG8gdGhlIFBIWS5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogRG9lcyBRRU1VLCBpbiBpdHMgZW11bGF0ZWQgaGFyZHdhcmUgb2ZmZXJpbmdzLCAqYWxyZWFkeSogaW5jbHVkZSBzb21ldGhpbmcgdGhhdCBleHBvc2VzIGEgTW90b3Jjb21tIFBIWT8gQmFzZWQgb24gbXkga25vd2xlZGdlLCB0aGUgc3RhbmRhcmQgUUVNVSBuZXR3b3JrIGRldmljZXPigJRlMTAwMCwgZTEwMDBlLCBydGw4MTM5LCB2aXJ0aW8tbmV0LCBwY25ldCwgbmUyaywgaWdiLCBldGMu4oCUZWl0aGVyIGRvbid0IHV0aWxpemUgdGhlIExpbnV4IHBoeWxpYiBmcmFtZXdvcmsgd2l0aCBleHRlcm5hbCBQSFkgZHJpdmVycywgdXNlIHRoZWlyIG93biBpbnRlcm5hbCBvciBzdGFuZGFyZCBQSFlzLCBvciBlbXVsYXRlIEludGVsIG9yIFJlYWx0ZWsgUEhZcywgd2hpY2gsIG9mIGNvdXJzZSwgaXNuJ3Qgd2hhdCBJJ20gbG9va2luZyBmb3IuIFRoZXkncmUgbm90IGdvaW5nIHRvIGJlIG1pbWlja2luZyBNb3RvcmNvbW0ncyBoYXJkd2FyZS5cblxuTm93LCBsZXQgbWUgcGl2b3QuIFBlcmhhcHMgaXQncyB3b3J0aCB0YWtpbmcgYSBsb29rIGF0IFVTQiBldGhlcm5ldCBkb25nbGVzLCBvciBldmVuIFVTQiBNRElPIGFkYXB0ZXJzIHRoZW1zZWx2ZXMuIE1heWJlIHNvbWV0aGluZyBsaWtlIHRoZSBgbWRpby1tdnVzYmAgb3IgYGF4ODgxNzlfMTc4YWAgZHJpdmVycywgb3IgZXZlbiB0aGUgdXNibmV0IC8gY2RjX2V0aGVyIG9wdGlvbnMuIFRoZSBrZXkgaXMgaWYgYW55IG9mIHRoZXNlIGxldmVyYWdlIHRoZSBwaHlsaWIgZnJhbWV3b3JrIGFuZCBwb3RlbnRpYWxseSBob29rIGludG8gYSBNb3RvcmNvbW0gUEhZLiBJJ2xsIG5lZWQgdG8gaW52ZXN0aWdhdGUgaWYgYSBVU0IgbmV0d29yayBhZGFwdGVyIGNvdWxkIHVzZSBhIGBtb3RvcmNvbW1gIGRyaXZlciBvciB1c2UgYSBnZW5lcmFsIFBIWSB2aWEgdGhlIHBoeWxpYiBsaWJyYXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI1MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzo1NDoxOC4yMDk2NzU5NjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MzAyODQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQSFlfSURfWVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE1LVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxNjojZGVmaW5lIFBIWV9JRF9ZVDg1MTFcXHRcXHQweDAwMDAwMTBhXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjE3OiNkZWZpbmUgUEhZX0lEX1lUODUyMVxcdFxcdDB4MDAwMDAxMWFcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTg6I2RlZmluZSBQSFlfSURfWVQ4NTIyXFx0XFx0MHg0ZjUxZTkyOFxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxOTojZGVmaW5lIFBIWV9JRF9ZVDg1MzFcXHRcXHQweDRmNTFlOTFiXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjIwOiNkZWZpbmUgUEhZX0lEX1lUODUzMVNcXHRcXHQweDRmNTFlOTFhXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjIxOiNkZWZpbmUgUEhZX0lEX1lUODgyMVxcdFxcdDB4NGY1MWVhMTlcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMjItLyogWVQ4NTIxL1lUODUzMVMvWVQ4ODIxIFJlZ2lzdGVyIE92ZXJ2aWV3XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9ODk2PXN0YXRpYyBpbnQgeXRwaHlfcmdtaWlfY2xrX2RlbGF5X2NvbmZpZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTkyNy1cXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJOlxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzo5Mjg6XFx0XFx0aWYgKHBoeWRldi1cXHUwMDNlZHJ2LVxcdTAwM2VwaHlfaWQgIT0gUEhZX0lEX1lUODUzMVMpXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTkyOS1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9MTA2OT1zdGF0aWMgaW50IHl0ODUyMV9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTExMjgtXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjExMjk6XFx0aWYgKHBoeWRldi1cXHUwMDNlZHJ2LVxcdTAwM2VwaHlfaWQgPT0gUEhZX0lEX1lUODUyMSkge1xcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMTMwLVxcdFxcdHN3aXRjaCAoZnJlcSkge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTExNTUtXFx0XFx0fVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxMTU2OlxcdH0gZWxzZSBpZiAocGh5ZGV2LVxcdTAwM2VkcnYtXFx1MDAzZXBoeV9pZCA9PSBQSFlfSURfWVQ4NTMxUykge1xcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMTU3LVxcdFxcdHN3aXRjaCAoZnJlcSkge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTMxMDc9c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0zMTA4LVxcdHtcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MzEwOTpcXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUxMSksXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxMTAtXFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJZVDg1MTEgR2lnYWJpdCBFdGhlcm5ldFxcXCIsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMzExNy1cXHR7XFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjMxMTg6XFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MjEpLFxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0zMTE5LVxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiWVQ4NTIxIEdpZ2FiaXQgRXRoZXJuZXRcXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxMzctXFx0e1xcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzozMTM4OlxcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTIyKSxcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMzEzOS1cXHRcXHQubmFtZVxcdFxcdD0gXFxcIllUODUyMiAxMDAgTWVnYWJpdCBFdGhlcm5ldFxcXCIsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMzE0NS1cXHR7XFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjMxNDY6XFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpLFxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0zMTQ3LVxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiWVQ4NTMxIEdpZ2FiaXQgRXRoZXJuZXRcXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxNTktXFx0e1xcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzozMTYwOlxcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUyksXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxNjEtXFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJZVDg1MzFTIEdpZ2FiaXQgRXRoZXJuZXRcXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMxNzYtXFx0e1xcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzozMTc3OlxcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODIxKSxcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMzE3OC1cXHRcXHQubmFtZVxcdFxcdFxcdD0gXFxcIllUODgyMSAyLjVHYnBzIFBIWVxcXCIsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9MzIwMj1zdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MzIwMzpcXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSB9LFxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzozMjA0OlxcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MjEpIH0sXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjMyMDU6XFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUyMikgfSxcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MzIwNjpcXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxKSB9LFxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzozMjA3OlxcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzFTKSB9LFxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzozMjA4OlxcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpIH0sXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTMyMDktXFx0eyAvKiBzZW50aW5lbCAqLyB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU0OjE4Ljk3MjcxMTIxMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTQxNjYzODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIFVTQiBFdGhlcm5ldCBEcml2ZXIgUEhZIENvbm5lY3Rpb24qKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiBpZiBhbnkgb2YgdGhlIFVTQiBFdGhlcm5ldCBkcml2ZXJzIGFyZSBsZXZlcmFnaW5nIHRoZSBgcGh5bGliYCBmcmFtZXdvcmsgdG8gaW50ZXJmYWNlIHdpdGggZXh0ZXJuYWwgUEhZcy4gVGhpcyBpcyBhIGNvbW1vbiBhbmQgb2Z0ZW4gcHJlZmVycmVkIGFyY2hpdGVjdHVyZSwgc28gaXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi5cblxuVGhlIG1vc3QgZWZmaWNpZW50IGFwcHJvYWNoIGhlcmUgaXMgYSB0YXJnZXRlZCBjb2RlIHNlYXJjaC4gSSdsbCB1c2UgYGdyZXBgIHRvIHNjYW4gdGhlIGBkcml2ZXJzL25ldC91c2IvYCBkaXJlY3RvcnkuIEknbGwgc2VhcmNoIGZvciBrZXkgaW5kaWNhdG9ycyBvZiBgcGh5bGliYCB1c2FnZS4gU3BlY2lmaWNhbGx5LCBJJ2xsIGxvb2sgZm9yIGNhbGxzIHRvIHRoZSBgcGh5X2Nvbm5lY3RgIGZ1bmN0aW9uIG9yIHJlZmVyZW5jZXMgdG8gYHBoeWxpbmtgLiBUaGVzZSBhcmUgdGhlIGJyZWFkY3J1bWJzIHRoYXTigJlsbCBsaWtlbHkgbGVhZCBtZSB0byB0aGUgcmVsZXZhbnQgZHJpdmVycyB1c2luZyB0aGlzIGFyY2hpdGVjdHVyZSwgb3IgYXQgbGVhc3QgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi4gSXQncyBhIGZvY3VzZWQgc2VhcmNoIHRoYXQgc2hvdWxkIHlpZWxkIHF1aWNrIHJlc3VsdHMsIGVsaW1pbmF0aW5nIHRoZSBuZWVkIHRvIHJlYWQgdGhyb3VnaCB0aGUgZW50aXJlIGNvZGUgYmFzZS4gVGltZSB0byBzZWUgd2hhdCB0aGF0IGBncmVwYCByZXZlYWxzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTI2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6NTQ6MjEuOTE0Mzc4MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0NzE1MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2Nvbm5lY3R8cGh5X2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz03MDM9c3RhdGljIGludCBheDg4NzcyX2luaXRfcGh5KHN0cnVjdCB1c2JuZXQgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy03MjItXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjcyMzpcXHRwaHlfYXR0YWNoZWRfaW5mbyhwcml2LVxcdTAwM2VwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy03MjQtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz0yNjE9c3RhdGljIGludCBheDg4MTcyYV9yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0zMTMtXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MzE0OlxcdHByaXYtXFx1MDAzZXBoeWRldiA9IHBoeV9jb25uZWN0KGRldi1cXHUwMDNlbmV0LCBwcml2LVxcdTAwM2VwaHlfbmFtZSxcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0zMTUtXFx0XFx0XFx0XFx0ICAgXFx1MDAyNmF4ODgxNzJhX2FkanVzdF9saW5rLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTE0Nz1zdGF0aWMgaW50IHNtc2M5NXh4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyODQtXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI4NTpcXHRyZXQgPSBwaHlfY29ubmVjdF9kaXJlY3QoZGV2LVxcdTAwM2VuZXQsIHBkYXRhLVxcdTAwM2VwaHlkZXYsXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI4Ni1cXHRcXHRcXHRcXHQgXFx1MDAyNnNtc2M5NXh4X2hhbmRsZV9saW5rX2NoYW5nZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyOTItXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI5MzpcXHRwaHlfYXR0YWNoZWRfaW5mbyhkZXYtXFx1MDAzZW5ldC1cXHUwMDNlcGh5ZGV2KTtcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjk0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzo1NDoyMS45NTk4NTM3MzlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzQ4MDMxOTc5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNRElPIEJ1cyBFbXVsYXRpb24gYW5kIFVTQiBHYWRnZXRzOiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgc3l6a2FsbGVyIGNhbiBlbXVsYXRlIFVTQiBkZXZpY2VzIHdpdGggTURJTyBidXNzZXMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aG9zZSBsaWtlIGBheDg4MTcyYWAsIGBzbXNjOTV4eGAsIGFuZCBgbGFuNzh4eGAuIFRoZXNlIGhhdmUgTURJTyBidXNzZXMsIGJ1dCB0aGV5J3JlIGFjY2Vzc2VkIG92ZXIgVVNCLiBDYW4gc3l6a2FsbGVyJ3MgcmF3LWdhZGdldCAvIHVzYi1mdXp6ZXIgc2V0dXAgaGFuZGxlIHRoYXQ/IFRoZSBhbnN3ZXIgaXMgeWVzLCBzeXprYWxsZXIgZG9lcyBoYXZlIFVTQiBlbXVsYXRpb24gdmlhIHJhdy1nYWRnZXQgYW5kIHRoZSBEdW1teSBIQ0QuIFRoYXQncyBhIGdvb2Qgc3RhcnQuXG5cbk5vdywgd2hlbiBzeXprYWxsZXIgZW11bGF0ZXMgb25lIG9mIHRoZXNlIFVTQiBkZXZpY2VzIOKAkyBzYXksIGFueSBvZiB0aG9zZSBtZW50aW9uZWQg4oCTIHRocm91Z2ggcmF3LWdhZGdldCAvIHVzYi1mdXp6ZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyBkdXJpbmcgdGhlIE1ESU8gYnVzIHByb2JlLiBXaGVuIHRoZSBkZXZpY2UgZ2V0cyBwcm9iZWQsIEkga25vdyB0aGF0IGBtZGlvYnVzX3JlZ2lzdGVyYCBvciBgZ2V0X3BoeV9kZXZpY2VgIGlzIGdvaW5nIHRvIGJlIGNhbGxlZCwgYW5kIGl0J3MgZ29pbmcgdG8gYXR0ZW1wdCB0byByZWFkIHJlZ2lzdGVycyAyIGFuZCAzIOKAkyB0aGUgUEhZIElEIOKAkyBvdmVyIFVTQi4gVGhlIGtleSBoZXJlIGlzICpob3cqIHRob3NlIHJlYWRzIGhhcHBlbi4gSXQncyBub3QgdGhyb3VnaCBzdGFuZGFyZCBVU0IgdHJhbnNmZXJzLCBidXQgdGhyb3VnaCBjb250cm9sIG9yIHZlbmRvciByZXF1ZXN0cyB0byB0aGUgZW11bGF0ZWQgVVNCIGdhZGdldCFcblxuV2FpdCBhIHNlY29uZCwgbGV0J3MgY29uY3JldGl6ZSB0aGlzLiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGVzZSBkcml2ZXJzIG9wZXJhdGUuIFRpbWUgdG8gbG9vayBpbnRvIHRoZSBhY3R1YWwgZHJpdmVyIGNvZGUhIEkgc2hvdWxkIGNoZWNrIGBkcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuY2Agb3IgYGxhbjc4eHguY2AgdG8gc2VlIHByZWNpc2VseSBob3cgdGhlIE1ESU8gcmVhZCBmdW5jdGlvbmFsaXR5IGlzIGltcGxlbWVudGVkLiBHb3R0YSBzZWUgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIGhvdyB0aG9zZSBVU0IgY29udHJvbC92ZW5kb3IgcmVxdWVzdHMgYXJlIGNvbnN0cnVjdGVkIGFuZCBoYW5kbGVkIHRvIGdldCB0aGUgUEhZIElELlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjMwMSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzo1NDoyOS40NDAxNzYxMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTA6XFx0XFx0cmV0ID0gYXNpeF9yZWFkX3BoeV9hZGRyKGRldiwgcHJpdi1cXHUwMDNldXNlX2VtYmRwaHkpO1xcbiAyMTE6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDIxMjpcXHRcXHRcXHRnb3RvIGZyZWU7XFxuIDIxMzpcXHRcXG4gMjE0OlxcdFxcdHByaXYtXFx1MDAzZXBoeV9hZGRyID0gcmV0O1xcbiAyMTU6XFx0XFxuIDIxNjpcXHRcXHRheDg4MTcyYV9yZXNldF9waHkoZGV2LCBwcml2LVxcdTAwM2V1c2VfZW1iZHBoeSk7XFxuIDIxNzpcXHRcXG4gMjE4OlxcdFxcdC8qIEFzaXggZnJhbWluZyBwYWNrcyBtdWx0aXBsZSBldGggZnJhbWVzIGludG8gYSAySyB1c2IgYnVsayB0cmFuc2ZlciAqL1xcbiAyMTk6XFx0XFx0aWYgKGRldi1cXHUwMDNlZHJpdmVyX2luZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgRkxBR19GUkFNSU5HX0FYKSB7XFxuIDIyMDpcXHRcXHRcXHQvKiBoYXJkX210dSAgaXMgc3RpbGwgdGhlIGRlZmF1bHQgLSB0aGUgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnRcXG4gMjIxOlxcdFxcdFxcdCAgIGp1bWJvIGV0aCBmcmFtZXMgKi9cXG4gMjIyOlxcdFxcdFxcdGRldi1cXHUwMDNlcnhfdXJiX3NpemUgPSAyMDQ4O1xcbiAyMjM6XFx0XFx0fVxcbiAyMjQ6XFx0XFxuIDIyNTpcXHRcXHQvKiBpbml0IE1ESU8gYnVzICovXFxuIDIyNjpcXHRcXHRyZXQgPSBheDg4MTcyYV9pbml0X21kaW8oZGV2KTtcXG4gMjI3OlxcdFxcdGlmIChyZXQpXFxuIDIyODpcXHRcXHRcXHRnb3RvIGZyZWU7XFxuIDIyOTpcXHRcXG4gMjMwOlxcdFxcdHJldHVybiAwO1xcbiAyMzE6XFx0XFxuIDIzMjpcXHRmcmVlOlxcbiAyMzM6XFx0XFx0a2ZyZWUocHJpdik7XFxuIDIzNDpcXHRcXHRyZXR1cm4gcmV0O1xcbiAyMzU6XFx0fVxcbiAyMzY6XFx0XFxuIDIzNzpcXHRzdGF0aWMgaW50IGF4ODgxNzJhX3N0b3Aoc3RydWN0IHVzYm5ldCAqZGV2KVxcbiAyMzg6XFx0e1xcbiAyMzk6XFx0XFx0c3RydWN0IGF4ODgxNzJhX3ByaXZhdGUgKnByaXYgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbiAyNDA6XFx0XFxuIDI0MTpcXHRcXHRuZXRkZXZfZGJnKGRldi1cXHUwMDNlbmV0LCBcXFwiU3RvcHBpbmcgaW50ZXJmYWNlXFxcXG5cXFwiKTtcXG4gMjQyOlxcdFxcbiAyNDM6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBoeWRldikge1xcbiAyNDQ6XFx0XFx0XFx0bmV0ZGV2X2luZm8oZGV2LVxcdTAwM2VuZXQsIFxcXCJEaXNjb25uZWN0aW5nIGZyb20gcGh5ICVzXFxcXG5cXFwiLFxcbiAyNDU6XFx0XFx0XFx0XFx0ICAgIHByaXYtXFx1MDAzZXBoeV9uYW1lKTtcXG4gMjQ2OlxcdFxcdFxcdHBoeV9zdG9wKHByaXYtXFx1MDAzZXBoeWRldik7XFxuIDI0NzpcXHRcXHRcXHRwaHlfZGlzY29ubmVjdChwcml2LVxcdTAwM2VwaHlkZXYpO1xcbiAyNDg6XFx0XFx0fVxcbiAyNDk6XFx0XFxuIDI1MDpcXHRcXHRyZXR1cm4gMDtcXG4gMjUxOlxcdH1cXG4gMjUyOlxcdFxcbiAyNTM6XFx0c3RhdGljIHZvaWQgYXg4ODE3MmFfdW5iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuIDI1NDpcXHR7XFxuIDI1NTpcXHRcXHRzdHJ1Y3QgYXg4ODE3MmFfcHJpdmF0ZSAqcHJpdiA9IGRldi1cXHUwMDNlZHJpdmVyX3ByaXY7XFxuIDI1NjpcXHRcXG4gMjU3OlxcdFxcdGF4ODgxNzJhX3JlbW92ZV9tZGlvKGRldik7XFxuIDI1ODpcXHRcXHRrZnJlZShwcml2KTtcXG4gMjU5OlxcdH1cXG4gMjYwOlxcdFxcbiAyNjE6XFx0c3RhdGljIGludCBheDg4MTcyYV9yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuIDI2MjpcXHR7XFxuIDI2MzpcXHRcXHRzdHJ1Y3QgYXNpeF9kYXRhICpkYXRhID0gKHN0cnVjdCBhc2l4X2RhdGEgKilcXHUwMDI2ZGV2LVxcdTAwM2VkYXRhO1xcbiAyNjQ6XFx0XFx0c3RydWN0IGF4ODgxNzJhX3ByaXZhdGUgKnByaXYgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbiAyNjU6XFx0XFx0aW50IHJldDtcXG4gMjY2OlxcdFxcdHUxNiByeF9jdGw7XFxuIDI2NzpcXHRcXG4gMjY4OlxcdFxcdGF4ODgxNzJhX3Jlc2V0X3BoeShkZXYsIHByaXYtXFx1MDAzZXVzZV9lbWJkcGh5KTtcXG4gMjY5OlxcdFxcbiAyNzA6XFx0XFx0bXNsZWVwKDE1MCk7XFxuIDI3MTpcXHRcXHRyeF9jdGwgPSBhc2l4X3JlYWRfcnhfY3RsKGRldiwgMCk7XFxuIDI3MjpcXHRcXHRuZXRkZXZfZGJnKGRldi1cXHUwMDNlbmV0LCBcXFwiUlhfQ1RMIGlzIDB4JTA0eCBhZnRlciBzb2Z0d2FyZSByZXNldFxcXFxuXFxcIiwgcnhfY3RsKTtcXG4gMjczOlxcdFxcdHJldCA9IGFzaXhfd3JpdGVfcnhfY3RsKGRldiwgMHgwMDAwLCAwKTtcXG4gMjc0OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAyNzU6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDI3NjpcXHRcXG4gMjc3OlxcdFxcdHJ4X2N0bCA9IGFzaXhfcmVhZF9yeF9jdGwoZGV2LCAwKTtcXG4gMjc4OlxcdFxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCJSWF9DVEwgaXMgMHglMDR4IHNldHRpbmcgdG8gMHgwMDAwXFxcXG5cXFwiLCByeF9jdGwpO1xcbiAyNzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU0OjI5LjQ0MDI1ODg3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMDkzNTM1MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBheDg4MTcyYV9pbml0X21kaW9gIGZ1bmN0aW9uLiBNeSBleHBlcnQgZXllIGltbWVkaWF0ZWx5IHdhbnRzIHRvIHVuZGVyc3RhbmQgaXRzIGNvcmUgcHVycG9zZSB3aXRoaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiBFdGhlcm5ldCBkcml2ZXIgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaXQncyBzcGVjaWZpY2FsbHkgcmVzcG9uc2libGUgZm9yLiBGcm9tIHRoZSBuYW1lLCBJJ20gZ3Vlc3NpbmcgaXQgaGFuZGxlcyB0aGUgTURJTyBpbnRlcmZhY2Ugc2V0dXAgZm9yIHRoZSBBWDg4MTcyQSBjaGlwLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIGEgY29tbW9uIHN0ZXAgaW4gYnJpbmdpbmcgdXAgYSBQSFkuIEkgbmVlZCB0byBzZWUgaWYgaXQgc2V0cyB1cCB0aGUgTURJTyBjbG9jaywgY29uZmlndXJlcyBhbnkgbmVjZXNzYXJ5IHJlZ2lzdGVycyBmb3IgTURJTyBjb21tdW5pY2F0aW9uLCBhbmQgcGVyaGFwcyBwZXJmb3JtcyBhbiBpbml0aWFsIHByb2JlIG9yIHJlc2V0IG9mIHRoZSBQSFkgYXR0YWNoZWQgdG8gdGhlIE1ESU8gYnVzLiBJJ2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSByZWdpc3RlciBhY2Nlc3NlcyBhbmQgYml0IG1hbmlwdWxhdGlvbnMgd2l0aGluIHRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIEVzc2VudGlhbGx5LCBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgdGhlIGZpcnN0IHN0ZXAgaW4gZW5hYmxpbmcgdGhlIGxpbmsgd2l0aCB0aGUgUEhZLiBTbyBJIG5lZWQgdG8ga25vdyBob3cgZG9lcyBpdCBpbml0aWFsaXplIHRoZSBNSUkgaW50ZXJmYWNlPyBXaGF0IHJlZ2lzdGVyIHNldHRpbmdzIGRvZXMgaXQgZW1wbG95PyBEb2VzIGl0IGludGVyYWN0IHdpdGggYSBoaWdoZXItbGV2ZWwgZnJhbWV3b3JrPyBUaGlzIGlzIHdoZXJlIHRoZSB0cnVlIHVuZGVyc3RhbmRpbmcgYmVnaW5zIHRvIGVtZXJnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwNDYsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU0OjMxLjY0OTYxNTAyOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDUsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDU6XFx0XFxuIDE0NjpcXHRcXHRyZXQgPSBhc2l4X3N3X3Jlc2V0KGRldiwgZW1iZF9waHkgPyBBWF9TV1JFU0VUX0lQUkwgOiBBWF9TV1JFU0VUX0lQUEQsXFxuIDE0NzpcXHRcXHRcXHRcXHQgICAgMCk7XFxuIDE0ODpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gMTQ5OlxcdFxcdFxcdGdvdG8gZXJyO1xcbiAxNTA6XFx0XFxuIDE1MTpcXHRcXHRyZXR1cm4gMDtcXG4gMTUyOlxcdFxcbiAxNTM6XFx0ZXJyOlxcbiAxNTQ6XFx0XFx0cmV0dXJuIHJldDtcXG4gMTU1OlxcdH1cXG4gMTU2OlxcdFxcbiAxNTc6XFx0XFxuIDE1ODpcXHRzdGF0aWMgaW50IGF4ODgxNzJhX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4gMTU5OlxcdHtcXG4gMTYwOlxcdFxcdGludCByZXQ7XFxuIDE2MTpcXHRcXHR1OCBidWZbRVRIX0FMRU5dO1xcbiAxNjI6XFx0XFx0c3RydWN0IGF4ODgxNzJhX3ByaXZhdGUgKnByaXY7XFxuIDE2MzpcXHRcXG4gMTY0OlxcdFxcdHJldCA9IHVzYm5ldF9nZXRfZW5kcG9pbnRzKGRldiwgaW50Zik7XFxuIDE2NTpcXHRcXHRpZiAocmV0KVxcbiAxNjY6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTY3OlxcdFxcbiAxNjg6XFx0XFx0cHJpdiA9IGt6YWxsb2Nfb2JqKCpwcml2KTtcXG4gMTY5OlxcdFxcdGlmICghcHJpdilcXG4gMTcwOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAxNzE6XFx0XFxuIDE3MjpcXHRcXHRkZXYtXFx1MDAzZWRyaXZlcl9wcml2ID0gcHJpdjtcXG4gMTczOlxcdFxcbiAxNzQ6XFx0XFx0LyogR2V0IHRoZSBNQUMgYWRkcmVzcyAqL1xcbiAxNzU6XFx0XFx0cmV0ID0gYXNpeF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX05PREVfSUQsIDAsIDAsIEVUSF9BTEVOLCBidWYsIDApO1xcbiAxNzY6XFx0XFx0aWYgKHJldCBcXHUwMDNjIEVUSF9BTEVOKSB7XFxuIDE3NzpcXHRcXHRcXHRuZXRkZXZfZXJyKGRldi1cXHUwMDNlbmV0LCBcXFwiRmFpbGVkIHRvIHJlYWQgTUFDIGFkZHJlc3M6ICVkXFxcXG5cXFwiLCByZXQpO1xcbiAxNzg6XFx0XFx0XFx0cmV0ID0gLUVJTztcXG4gMTc5OlxcdFxcdFxcdGdvdG8gZnJlZTtcXG4gMTgwOlxcdFxcdH1cXG4gMTgxOlxcdFxcdGV0aF9od19hZGRyX3NldChkZXYtXFx1MDAzZW5ldCwgYnVmKTtcXG4gMTgyOlxcdFxcbiAxODM6XFx0XFx0ZGV2LVxcdTAwM2VuZXQtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2YXg4ODE3MmFfbmV0ZGV2X29wcztcXG4gMTg0OlxcdFxcdGRldi1cXHUwMDNlbmV0LVxcdTAwM2VldGh0b29sX29wcyA9IFxcdTAwMjZheDg4MTcyYV9ldGh0b29sX29wcztcXG4gMTg1OlxcdFxcbiAxODY6XFx0XFx0LyogYXJlIHdlIHVzaW5nIHRoZSBpbnRlcm5hbCBvciB0aGUgZXh0ZXJuYWwgcGh5PyAqL1xcbiAxODc6XFx0XFx0cmV0ID0gYXNpeF9yZWFkX2NtZChkZXYsIEFYX0NNRF9TV19QSFlfU1RBVFVTLCAwLCAwLCAxLCBidWYsIDApO1xcbiAxODg6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gMTg5OlxcdFxcdFxcdG5ldGRldl9lcnIoZGV2LVxcdTAwM2VuZXQsIFxcXCJGYWlsZWQgdG8gcmVhZCBzb2Z0d2FyZSBpbnRlcmZhY2Ugc2VsZWN0aW9uIHJlZ2lzdGVyOiAlZFxcXFxuXFxcIixcXG4gMTkwOlxcdFxcdFxcdFxcdCAgIHJldCk7XFxuIDE5MTpcXHRcXHRcXHRnb3RvIGZyZWU7XFxuIDE5MjpcXHRcXHR9XFxuIDE5MzpcXHRcXG4gMTk0OlxcdFxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCJBWF9DTURfU1dfUEhZX1NUQVRVUyA9IDB4JTAyeFxcXFxuXFxcIiwgYnVmWzBdKTtcXG4gMTk1OlxcdFxcdHN3aXRjaCAoYnVmWzBdIFxcdTAwMjYgQVhfUEhZX1NFTEVDVF9NQVNLKSB7XFxuIDE5NjpcXHRcXHRjYXNlIEFYX1BIWV9TRUxFQ1RfSU5URVJOQUw6XFxuIDE5NzpcXHRcXHRcXHRuZXRkZXZfZGJnKGRldi1cXHUwMDNlbmV0LCBcXFwidXNlIGludGVybmFsIHBoeVxcXFxuXFxcIik7XFxuIDE5ODpcXHRcXHRcXHRwcml2LVxcdTAwM2V1c2VfZW1iZHBoeSA9IDE7XFxuIDE5OTpcXHRcXHRcXHRicmVhaztcXG4gMjAwOlxcdFxcdGNhc2UgQVhfUEhZX1NFTEVDVF9FWFRFUk5BTDpcXG4gMjAxOlxcdFxcdFxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCJ1c2UgZXh0ZXJuYWwgcGh5XFxcXG5cXFwiKTtcXG4gMjAyOlxcdFxcdFxcdHByaXYtXFx1MDAzZXVzZV9lbWJkcGh5ID0gMDtcXG4gMjAzOlxcdFxcdFxcdGJyZWFrO1xcbiAyMDQ6XFx0XFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6NTQ6MzEuNjQ5NzA2MDY5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyOTkyODM3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZm9jdXNpbmcgb24gbGluZXMgMTAwLTE0NSBvZiBgZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmNgLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgcmVhZGluZyB0aGUgY29kZSB3aXRoaW4gdGhpcyBzZWN0aW9uLlxuX19fXG5cbioqQW5hbHl6aW5nIGF4ODgxNzJhLmMgTGluZXMgMTAwLTE0NSoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHNwZWNpZmljIGNodW5rIG9mIGNvZGUgd2l0aGluIHRoZSBsYXJnZXIgZHJpdmVyLiBHaXZlbiBteSBleHBlcmllbmNlLCB0aGUgY29udGV4dCBoZXJlIGxpa2VseSBpbnZvbHZlcyBpbml0aWFsaXphdGlvbiwgZGV2aWNlIHNldHVwLCBvciBwZXJoYXBzIGEgY3JpdGljYWwgaW50ZXJydXB0IGhhbmRsZXIuIFRoZXNlIGxpbmVzIGFyZSBjcnVjaWFsIGJlY2F1c2UgdGhleSB0eXBpY2FsbHkgaGFuZGxlIHRoZSBpbml0aWFsIGNvbW11bmljYXRpb24gd2l0aCB0aGUgQVg4ODE3MkEgY2hpcHNldCwgc2V0dGluZyB1cCB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGZvciBkYXRhIHRyYW5zZmVyLiBCYXNlZCBvbiB0aGUgZmlsZSBwYXRoLCBJIGV4cGVjdCB0byBzZWUgVVNCLXNwZWNpZmljIGFzcGVjdHMsIGxpa2UgZW5kcG9pbnQgY29uZmlndXJhdGlvbiwgc2V0dGluZyB1cCBjb250cm9sIHRyYW5zZmVycywgYW5kIHBvdGVudGlhbGx5IHNvbWUgZGV2aWNlLXNwZWNpZmljIHJlZ2lzdGVycyBiZWluZyBhZGRyZXNzZWQuIEkgbmVlZCB0byBvYnNlcnZlIGFueSBkYXRhIHN0cnVjdHVyZXMgdXNlZCB3aXRoaW4gdGhhdCBjb2RlIHNlZ21lbnQgYmVjYXVzZSB0aGV5IGdpdmUgY29udGV4dCB0byBob3cgY29tbXVuaWNhdGlvbiBoYXBwZW5zLiBJJ20gYW50aWNpcGF0aW5nIHRoYXQgdGhlc2UgbGluZXMgd2lsbCBlc3RhYmxpc2ggdGhlIGZvdW5kYXRpb24gZm9yIHRoaXMgVVNCIG5ldHdvcmsgYWRhcHRlciB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIElmIHRoZXJlJ3MgYW4gaW50ZXJydXB0IHNldHVwLCB0aGF0J3MgcmVhbGx5IGltcG9ydGFudCB0byBrZWVwIGFuIGV5ZSBvbiBiZWNhdXNlIGl0IGhhcyBhIGxvdCBvZiBlZmZlY3Qgb24gcGVyZm9ybWFuY2UuIEknbSBnb2luZyB0byBnZXQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBvY2N1cnMgaGVyZSBiZWZvcmUganVtcGluZyBpbnRvIGFueSBjb25jbHVzaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUyODQsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU0OjM0Ljk0ODk5MzAyM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0XFx0bWRpb2J1c19mcmVlKHByaXYtXFx1MDAzZW1kaW8pO1xcbiAxMDE6XFx0fVxcbiAxMDI6XFx0XFxuIDEwMzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF4ODgxNzJhX25ldGRldl9vcHMgPSB7XFxuIDEwNDpcXHRcXHQubmRvX29wZW5cXHRcXHQ9IHVzYm5ldF9vcGVuLFxcbiAxMDU6XFx0XFx0Lm5kb19zdG9wXFx0XFx0PSB1c2JuZXRfc3RvcCxcXG4gMTA2OlxcdFxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gdXNibmV0X3N0YXJ0X3htaXQsXFxuIDEwNzpcXHRcXHQubmRvX3R4X3RpbWVvdXRcXHRcXHQ9IHVzYm5ldF90eF90aW1lb3V0LFxcbiAxMDg6XFx0XFx0Lm5kb19jaGFuZ2VfbXR1XFx0XFx0PSB1c2JuZXRfY2hhbmdlX210dSxcXG4gMTA5OlxcdFxcdC5uZG9fZ2V0X3N0YXRzNjRcXHQ9IGRldl9nZXRfdHN0YXRzNjQsXFxuIDExMDpcXHRcXHQubmRvX3NldF9tYWNfYWRkcmVzc1xcdD0gYXNpeF9zZXRfbWFjX2FkZHJlc3MsXFxuIDExMTpcXHRcXHQubmRvX3ZhbGlkYXRlX2FkZHJcXHQ9IGV0aF92YWxpZGF0ZV9hZGRyLFxcbiAxMTI6XFx0XFx0Lm5kb19ldGhfaW9jdGxcXHRcXHQ9IHBoeV9kb19pb2N0bF9ydW5uaW5nLFxcbiAxMTM6XFx0XFx0Lm5kb19zZXRfcnhfbW9kZSAgICAgICAgPSBhc2l4X3NldF9tdWx0aWNhc3QsXFxuIDExNDpcXHR9O1xcbiAxMTU6XFx0XFxuIDExNjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGF4ODgxNzJhX2V0aHRvb2xfb3BzID0ge1xcbiAxMTc6XFx0XFx0LmdldF9kcnZpbmZvXFx0XFx0PSB1c2JuZXRfZ2V0X2RydmluZm8sXFxuIDExODpcXHRcXHQuZ2V0X2xpbmtcXHRcXHQ9IHVzYm5ldF9nZXRfbGluayxcXG4gMTE5OlxcdFxcdC5nZXRfbXNnbGV2ZWxcXHRcXHQ9IHVzYm5ldF9nZXRfbXNnbGV2ZWwsXFxuIDEyMDpcXHRcXHQuc2V0X21zZ2xldmVsXFx0XFx0PSB1c2JuZXRfc2V0X21zZ2xldmVsLFxcbiAxMjE6XFx0XFx0LmdldF93b2xcXHRcXHQ9IGFzaXhfZ2V0X3dvbCxcXG4gMTIyOlxcdFxcdC5zZXRfd29sXFx0XFx0PSBhc2l4X3NldF93b2wsXFxuIDEyMzpcXHRcXHQuZ2V0X2VlcHJvbV9sZW5cXHRcXHQ9IGFzaXhfZ2V0X2VlcHJvbV9sZW4sXFxuIDEyNDpcXHRcXHQuZ2V0X2VlcHJvbVxcdFxcdD0gYXNpeF9nZXRfZWVwcm9tLFxcbiAxMjU6XFx0XFx0LnNldF9lZXByb21cXHRcXHQ9IGFzaXhfc2V0X2VlcHJvbSxcXG4gMTI2OlxcdFxcdC5ud2F5X3Jlc2V0XFx0XFx0PSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LFxcbiAxMjc6XFx0XFx0LmdldF9saW5rX2tzZXR0aW5nc1xcdD0gcGh5X2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzLFxcbiAxMjg6XFx0XFx0LnNldF9saW5rX2tzZXR0aW5nc1xcdD0gcGh5X2V0aHRvb2xfc2V0X2xpbmtfa3NldHRpbmdzLFxcbiAxMjk6XFx0fTtcXG4gMTMwOlxcdFxcbiAxMzE6XFx0c3RhdGljIGludCBheDg4MTcyYV9yZXNldF9waHkoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgZW1iZF9waHkpXFxuIDEzMjpcXHR7XFxuIDEzMzpcXHRcXHRpbnQgcmV0O1xcbiAxMzQ6XFx0XFxuIDEzNTpcXHRcXHRyZXQgPSBhc2l4X3N3X3Jlc2V0KGRldiwgQVhfU1dSRVNFVF9JUFBELCAwKTtcXG4gMTM2OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAxMzc6XFx0XFx0XFx0Z290byBlcnI7XFxuIDEzODpcXHRcXG4gMTM5OlxcdFxcdG1zbGVlcCgxNTApO1xcbiAxNDA6XFx0XFx0cmV0ID0gYXNpeF9zd19yZXNldChkZXYsIEFYX1NXUkVTRVRfQ0xFQVIsIDApO1xcbiAxNDE6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDE0MjpcXHRcXHRcXHRnb3RvIGVycjtcXG4gMTQzOlxcdFxcbiAxNDQ6XFx0XFx0bXNsZWVwKDE1MCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU0OjM0Ljk0OTA3Nzg5M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NDQ5MDE4NjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gbGluZXMgNTAtMTAwIG9mIGBheDg4MTcyYS5jYC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcGFyc2UgdGhhdCBzZWN0aW9uIGFuZCBjb25zaWRlciBpdCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIG92ZXJhbGwgZHJpdmVyIGFyY2hpdGVjdHVyZSBJIGtub3cgc28gd2VsbC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhleSdyZSBoYW5kbGluZ+KApiBwZXJoYXBzIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZT8gT3IgbWF5YmUgaXQncyB0aGUgaW50ZXJydXB0IHNldHVwLCBvciBldmVuIHRoZSBiYXNpYyBQSFkgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LiBHaXZlbiBteSBleHBlcmllbmNlIHdpdGggc2ltaWxhciBuZXR3b3JrIGNvbnRyb2xsZXJzLCBJJ20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byByZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxlcnMsIGNvbmZpZ3VyZSBNQUMgYWRkcmVzcyBmaWx0ZXJzLCBvciBpbml0aWFsaXplIHRoZSBQSFkgcmVnaXN0ZXJzIGlmIHRoZXkgYXJlIHJlc3BvbnNpYmxlLlxuXG5NeSBmb2N1cyB3aWxsIGJlIG9uIGlkZW50aWZ5aW5nIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IGFyZSBiZWluZyBjYWxsZWQgYW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIHRoZXkgYXJlIG9wZXJhdGluZyBvbi4gQXJlIHRoZXkgdXNpbmcgYSBkZXZpY2Utc3BlY2lmaWMgc3RydWN0dXJlIHRvIHN0b3JlIGhhcmR3YXJlIHN0YXRlPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzPyBBcmUgdGhleSBoYW5kbGluZyBhbnkgZXJyb3IgY29uZGl0aW9ucyBvciBlZGdlIGNhc2VzIHRoYXQgSSBzaG91bGQgdGFrZSBub3RlIG9mP1xuXG5JIHdpbGwgc3RhcnQgYnkgcmFwaWRseSBzY2FubmluZyB0aGUgY29kZSB0byBnZXQgdGhlIGdpc3QsIGFuZCB0aGVuIGZvY3VzIG9uIGluZGl2aWR1YWwgbGluZXMgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMuIEkgYW0gYWxzbyBsb29raW5nIGZvciBjb21tb24gaWRpb21zIHRoYXQgdGhlIHdyaXRlciB1c2VkLiBUaGlzIHdpbGwgaGVscCBtZSB0byB1bmRlcnN0YW5kIHRoZWlyIHByb2Nlc3MuIEnigJlsbCBtYWtlIGEgbWVudGFsIG5vdGUgb2YgYW55IHN1c3BpY2lvdXMgY29kZSBvciBhbnl0aGluZyB0aGF0IGRldmlhdGVzIGZyb20gYmVzdCBwcmFjdGljZXMuIEnigJltIHRoaW5raW5nIGluIHRlcm1zIG9mIHBvdGVudGlhbCBmdXR1cmUgZGVidWdnaW5nLCBtYWludGVuYW5jZSwgYW5kIHdoZXRoZXIgdGhpcyBzZWN0aW9uIGlzIHdlbGwtd3JpdHRlbiBhbmQgbWFpbnRhaW5hYmxlLiBJJ20gYWxzbyByZWFkeSB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIGZsb3cgaWYgSSBjb21lIGFjcm9zcyBhbnkgdW5mYW1pbGlhciBjYWxscy4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQ3NywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6NTQ6NDMuMzk4MTAwNDk1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDUwOlxcdFxcdFxcdFxcdCAgIHBoeWRldi1cXHUwMDNlc3BlZWQsIHBoeWRldi1cXHUwMDNlZHVwbGV4LCBtb2RlKTtcXG4gIDUxOlxcdFxcdFxcdHBoeV9wcmludF9zdGF0dXMocGh5ZGV2KTtcXG4gIDUyOlxcdFxcdH1cXG4gIDUzOlxcdH1cXG4gIDU0OlxcdFxcbiAgNTU6XFx0c3RhdGljIHZvaWQgYXg4ODE3MmFfc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVyYiAqdXJiKVxcbiAgNTY6XFx0e1xcbiAgNTc6XFx0XFx0LyogbGluayBjaGFuZ2VzIGFyZSBkZXRlY3RlZCBieSBwb2xsaW5nIHRoZSBwaHkgKi9cXG4gIDU4OlxcdH1cXG4gIDU5OlxcdFxcbiAgNjA6XFx0LyogdXNlIHBoeWxpYiBpbmZyYXN0cnVjdHVyZSAqL1xcbiAgNjE6XFx0c3RhdGljIGludCBheDg4MTcyYV9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxcbiAgNjI6XFx0e1xcbiAgNjM6XFx0XFx0c3RydWN0IGF4ODgxNzJhX3ByaXZhdGUgKnByaXYgPSBkZXYtXFx1MDAzZWRyaXZlcl9wcml2O1xcbiAgNjQ6XFx0XFx0aW50IHJldDtcXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0cHJpdi1cXHUwMDNlbWRpbyA9IG1kaW9idXNfYWxsb2MoKTtcXG4gIDY3OlxcdFxcdGlmICghcHJpdi1cXHUwMDNlbWRpbykge1xcbiAgNjg6XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYtXFx1MDAzZW5ldCwgXFxcIkNvdWxkIG5vdCBhbGxvY2F0ZSBNRElPIGJ1c1xcXFxuXFxcIik7XFxuICA2OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gIDcwOlxcdFxcdH1cXG4gIDcxOlxcdFxcbiAgNzI6XFx0XFx0cHJpdi1cXHUwMDNlbWRpby1cXHUwMDNlcHJpdiA9ICh2b2lkICopZGV2O1xcbiAgNzM6XFx0XFx0cHJpdi1cXHUwMDNlbWRpby1cXHUwMDNlcmVhZCA9IFxcdTAwMjZhc2l4X21kaW9fYnVzX3JlYWQ7XFxuICA3NDpcXHRcXHRwcml2LVxcdTAwM2VtZGlvLVxcdTAwM2V3cml0ZSA9IFxcdTAwMjZhc2l4X21kaW9fYnVzX3dyaXRlO1xcbiAgNzU6XFx0XFx0cHJpdi1cXHUwMDNlbWRpby1cXHUwMDNlbmFtZSA9IFxcXCJBc2l4IE1ESU8gQnVzXFxcIjtcXG4gIDc2OlxcdFxcdC8qIG1paSBidXMgbmFtZSBpcyB1c2ItXFx1MDAzY3VzYiBidXMgbnVtYmVyXFx1MDAzZS1cXHUwMDNjdXNiIGRldmljZSBudW1iZXJcXHUwMDNlICovXFxuICA3NzpcXHRcXHRzbnByaW50Zihwcml2LVxcdTAwM2VtZGlvLVxcdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcXFwidXNiLSUwM2Q6JTAzZFxcXCIsXFxuICA3ODpcXHRcXHRcXHQgZGV2LVxcdTAwM2V1ZGV2LVxcdTAwM2VidXMtXFx1MDAzZWJ1c251bSwgZGV2LVxcdTAwM2V1ZGV2LVxcdTAwM2VkZXZudW0pO1xcbiAgNzk6XFx0XFxuICA4MDpcXHRcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZW1kaW8pO1xcbiAgODE6XFx0XFx0aWYgKHJldCkge1xcbiAgODI6XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYtXFx1MDAzZW5ldCwgXFxcIkNvdWxkIG5vdCByZWdpc3RlciBNRElPIGJ1c1xcXFxuXFxcIik7XFxuICA4MzpcXHRcXHRcXHRnb3RvIG1mcmVlO1xcbiAgODQ6XFx0XFx0fVxcbiAgODU6XFx0XFxuICA4NjpcXHRcXHRuZXRkZXZfaW5mbyhkZXYtXFx1MDAzZW5ldCwgXFxcInJlZ2lzdGVyZWQgbWRpbyBidXMgJXNcXFxcblxcXCIsIHByaXYtXFx1MDAzZW1kaW8tXFx1MDAzZWlkKTtcXG4gIDg3OlxcdFxcdHJldHVybiAwO1xcbiAgODg6XFx0XFxuICA4OTpcXHRtZnJlZTpcXG4gIDkwOlxcdFxcdG1kaW9idXNfZnJlZShwcml2LVxcdTAwM2VtZGlvKTtcXG4gIDkxOlxcdFxcdHJldHVybiByZXQ7XFxuICA5MjpcXHR9XFxuICA5MzpcXHRcXG4gIDk0OlxcdHN0YXRpYyB2b2lkIGF4ODgxNzJhX3JlbW92ZV9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcXG4gIDk1OlxcdHtcXG4gIDk2OlxcdFxcdHN0cnVjdCBheDg4MTcyYV9wcml2YXRlICpwcml2ID0gZGV2LVxcdTAwM2Vkcml2ZXJfcHJpdjtcXG4gIDk3OlxcdFxcbiAgOTg6XFx0XFx0bmV0ZGV2X2luZm8oZGV2LVxcdTAwM2VuZXQsIFxcXCJkZXJlZ2lzdGVyaW5nIG1kaW8gYnVzICVzXFxcXG5cXFwiLCBwcml2LVxcdTAwM2VtZGlvLVxcdTAwM2VpZCk7XFxuICA5OTpcXHRcXHRtZGlvYnVzX3VucmVnaXN0ZXIocHJpdi1cXHUwMDNlbWRpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU0OjQzLjM5ODE4MzUwNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODUxMzM4MDY5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQW5hbHlzaXM6IG1vdG9yY29tbSBQSFkgRHJpdmVyKipcblxuT2theSwgc28gaGVyZSdzIHRoZSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzIHJlZ2FyZGluZyB0aGlzIHBhdGNoIGFuZCB3aGV0aGVyIGl0J3Mgd29ydGggZnV6emluZy4gVGhlIGtleSBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBtb3RvcmNvbW1gIFBIWSBkcml2ZXIgY2FuIGJlIHRyaWdnZXJlZCBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQgbGlrZSBRRU1VLCBiZWNhdXNlIHRoZSBwYXRjaCBlZGl0cyB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGRyaXZlciwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoYXQgY29uZmlndXJhdGlvbiBjYW4gYmUgcmVhY2hlZCBmcm9tIGFuIGVtdWxhdGlvbiBjb250ZXh0LlxuXG5GaXJzdCwgSSBzZWUgdGhhdCB0aGUgY29kZSB1c2VzIGBtZGlvYnVzX3JlZ2lzdGVyKClgLiBUaGlzIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBNRElPIGJ1cywgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhlIGtlcm5lbCBzY2FucyB0aGUgYnVzIGJ5IHJlYWRpbmcgUEhZIElEcy4gSWYgdGhlIGVtdWxhdGVkIFVTQiBkZXZpY2UgcmV0dXJucyB0aGUgY29ycmVjdCBQSFkgSURzIGZvciB0aGUgTW90b3Jjb21tIFlUODV4eCBmYW1pbHkgKGxpa2UgYFBIWV9JRF9ZVDg1MzFTYCBvciBvdGhlcnMpLCB0aGUgYG1vdG9yY29tbWAgUEhZIGRyaXZlciBzaG91bGQgbWF0Y2gsIHByb2JlLCBhbmQgY2FsbCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgbGlrZSBgeXQ4NTMxc19jb25maWdfaW5pdGAuXG5cbk15IGJyYWluIGp1bXBzIHRvIHRoZSBwb3NzaWJpbGl0aWVzIG9mIFVTQiBlbXVsYXRpb24uIENhbiB3ZSBnZXQgaGVyZSB2aWEgYW4gZW11bGF0ZWQgVVNCIGRldmljZT8gV2UgbWlnaHQgYmUgYWJsZSB0byBjcmVhdGUgYW4gTURJTyBidXMgdmlydHVhbGx5IHRocm91Z2ggVVNCIGVtdWxhdGlvbiB1c2luZyBkZXZpY2VzIGxpa2UgYHVzYm5ldGAsIGBheDg4MTcyYWAsIGBsYW43OHh4YCwgb3IgYHNtc2M5NXh4YC4gVGhlIHN5emthbGxlciBmdXp6ZXIgaXMga2V5IGhlcmUsIGVzcGVjaWFsbHkgd2l0aCB0aGUgcmF3LWdhZGdldCAvIGR1bW15X2hjZCBmZWF0dXJlczsgdGhleSBzaG91bGQgYWxsb3cgbWUgdG8gbWltaWMgdGhlIGJlaGF2aW9yIG9mIGEgVVNCIGRldmljZSBhbmQgcmV0dXJuIHNwZWNpZmljIHJlc3BvbnNlcywgaW5jbHVkaW5nIHRob3NlIHRoYXQgaWRlbnRpZnkgdGhlIFBIWS5cblxuSWYgc3l6a2FsbGVyIGNhbiBlbXVsYXRlIGEgVVNCIGRldmljZSAoZS5nLiwgYGF4ODgxNzJhYCBVU0IgdG8gZXRoZXJuZXQgZGV2aWNlKSB0aGF0IHRyaWdnZXJzIHRoZSBNRElPIGJ1cyBzY2FuIGFuZCByZXR1cm5zIHRoZSBjb3JyZWN0IFBIWSBJRHMsIHRoZW4gdGhlIGBtb3RvcmNvbW1gIGRyaXZlciBpcyByZWFjaGFibGUuIFRoaXMgbWVhbnMgdGhhdCBhIFVTQiBkZXZpY2UgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gcmVzcG9uZCB3aXRoIHRoZSByaWdodCBQSFkgSUQgd2hlbiBgbWRpb2J1c19yZWdpc3RlcigpYCBpcyBjYWxsZWQuIFRoZW4gdGhlIGBtb3RvcmNvbW1gIGRyaXZlciBjYW4gYmUgcHJvYmVkIGFuZCBpbml0aWFsaXplZC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgZGlzY3JldGUgRXRoZXJuZXQgUEhZIGNoaXBzIGFyZSByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVS9HQ0UuIFRoZSBkb2N1bWVudGF0aW9uIGFib3V0IGZ1enppbmcgZmlsdGVycyBtZW50aW9ucyB0aGF0IHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgKGxpa2UgY2VydGFpbiBQQ0llIGRyaXZlcnMgb3IgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlKSBhcmUgbm90IHdvcnRoIGZ1enppbmcuIEJ1dCBJIGRvbid0IHRoaW5rIGl0IGlzIHRoZSBjYXNlIGhlcmUuXG5cbkkgYWxzbyByZXZpZXdlZCB0aGUgcGF0Y2ggaXRzZWxmLCBmb2N1c2luZyBvbiBgbW90b3Jjb21tLmNgLiBUaGUgcGF0Y2ggY2hhbmdlZCB0aGUgZnVuY3Rpb24gdGhhdCBpbml0aWFsaXplcyB0aGUgUEhZLCBgeXQ4NTIxX2NvbmZpZ19pbml0YCB0byBgeXQ4NTMxc19jb25maWdfaW5pdGAgYW5kIGFkZGVkIHNvbWUgcmVnaXN0ZXJzLiBUaGUgYG1vdG9yY29tbS5jYCBpcyB0aGUga2V5IGZpbGUgaGVyZS5cblxuU28sIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXNlIFVTQiBlbXVsYXRpb25zIGNhbiB0cmlnZ2VyIHRoZSBjb2RlIHBhdGhzLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBhbmQgaWYgYENPTkZJR19NT1RPUkNPTU1fUEhZYCBpcyBhIHBoeWxpYiBkcml2ZXIuIFRoYXQncyBhIHF1aWNrIGNoZWNrIGluIHRoZSBLY29uZmlnIGZpbGVzLlxuXG5CYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJ20gbGVhbmluZyB0b3dhcmRzICp5ZXMqIC0gdGhpcyBpcyBsaWtlbHkgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgVVNCIGVtdWxhdGlvbiBpbiBRRU1VLCBwYXJ0aWN1bGFybHkgaWYgdGhlIHN5emthbGxlciBmdXp6ZXIgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gbWltaWMgdGhlIHJlc3BvbnNlcyBmcm9tIGEgcmVsZXZhbnQgVVNCLXRvLUV0aGVybmV0IGFkYXB0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NjAzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg1NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU1OjAxLjkxMTU2Nzg1MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNjA6XFx0XFx0ICBDdXJyZW50bHkgc3VwcG9ydHMgVlNDODUxNCwgVlNDODUzMCwgVlNDODUzMSwgVlNDODU0MCBhbmQgVlNDODU0MSBQSFlzXFxuIDM2MTpcXHRcXG4gMzYyOlxcdGNvbmZpZyBNT1RPUkNPTU1fUEhZXFxuIDM2MzpcXHRcXHR0cmlzdGF0ZSBcXFwiTW90b3Jjb21tIFBIWXNcXFwiXFxuIDM2NDpcXHRcXHRoZWxwXFxuIDM2NTpcXHRcXHQgIEVuYWJsZXMgc3VwcG9ydCBmb3IgTW90b3Jjb21tIG5ldHdvcmsgUEhZcy5cXG4gMzY2OlxcdFxcdCAgQ3VycmVudGx5IHN1cHBvcnRzIFlUODV4eCBHaWdhYml0IEV0aGVybmV0IFBIWXMuXFxuIDM2NzpcXHRcXG4gMzY4OlxcdGNvbmZpZyBOQVRJT05BTF9QSFlcXG4gMzY5OlxcdFxcdHRyaXN0YXRlIFxcXCJOYXRpb25hbCBTZW1pY29uZHVjdG9yIFBIWXNcXFwiXFxuIDM3MDpcXHRcXHRoZWxwXFxuIDM3MTpcXHRcXHQgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgRFA4Mzg2NSBQSFkuXFxuIDM3MjpcXHRcXG4gMzczOlxcdGNvbmZpZyBOWFBfQ0JUWF9QSFlcXG4gMzc0OlxcdFxcdHRyaXN0YXRlIFxcXCJOWFAgMTAwQkFTRS1UWCBQSFlzXFxcIlxcbiAzNzU6XFx0XFx0aGVscFxcbiAzNzY6XFx0XFx0ICBTdXBwb3J0IHRoZSAxMDBCQVNFLVRYIFBIWSBpbnRlZ3JhdGVkIG9uIHRoZSBTSkExMTEwIGF1dG9tb3RpdmVcXG4gMzc3OlxcdFxcdCAgc3dpdGNoIGZhbWlseS5cXG4gMzc4OlxcdFxcbiAzNzk6XFx0Y29uZmlnIE5YUF9DNDVfVEpBMTFYWF9QSFlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6NTU6MDEuOTExNjQ1OTIyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5NDcyNzAxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBQSFkgS2NvbmZpZyBmb3IgQ29udGV4dCoqXG5cbkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgaW50byB0aGlzIGRyaXZlciBjaGFuZ2UsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBzdXJyb3VuZGluZyBsYW5kc2NhcGUuIExldCdzIHN0YXJ0IHdpdGggdGhlIHN0YW5kYXJkIHByYWN0aWNlIGFuZCBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIEknbSBoZWFkaW5nIG92ZXIgdG8gYGRyaXZlcnMvbmV0L3BoeS9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSBJJ2xsIGZpbmQgdGhlIG1lbnVzLCB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgb2YgaG93IHRoZXNlIFBIWSBkcml2ZXJzIGFyZSBvcmdhbml6ZWQgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0uIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBoZXJlIGlzIGNyaXRpY2FsOyBJIG5lZWQgdG8gc2VlICp3aGF0KiBlbmFibGVzICp3aGF0KiwgYW5kIGVuc3VyZSBteSBjaGFuZ2VzIGRvbid0IGluYWR2ZXJ0ZW50bHkgYnJlYWsgZXhpc3RpbmcgY29uZmlndXJhdGlvbnMgb3IgaW50cm9kdWNlIGNvbmZsaWN0cy4gVGhpcyBpbml0aWFsIHN0ZXAgd2lsbCBnaXZlIG1lIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byBwcm9jZWVkIHNhZmVseSBhbmQgZWZmZWN0aXZlbHkuIEl0J3MgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgd2hlbiBhc3Nlc3NpbmcgdGhlIGltcGFjdCBvZiBhIGNoYW5nZSBpbiB0aGlzIHNwYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTQ4MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6NTU6MDUuODU4OTE5NDJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgUEhZIExheWVyIENvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIFBIWUxJTktcXG4gICA3OlxcdFxcdHRyaXN0YXRlXFxuICAgODpcXHRcXHRzZWxlY3QgUEhZTElCXFxuICAgOTpcXHRcXHRzZWxlY3QgU1dQSFlcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgUEhZbGluayBtb2RlbHMgdGhlIGxpbmsgYmV0d2VlbiB0aGUgUEhZIGFuZCBNQUMsIGFsbG93aW5nIGZpeGVkXFxuICAxMjpcXHRcXHQgIGNvbmZpZ3VyYXRpb24gbGlua3MsIFBIWXMsIGFuZCBTZXJkZXMgbGlua3Mgd2l0aCBNQUMgbGV2ZWxcXG4gIDEzOlxcdFxcdCAgYXV0b25lZ290aWF0aW9uIG1vZGVzLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRtZW51Y29uZmlnIFBIWUxJQlxcbiAgMTY6XFx0XFx0dHJpc3RhdGUgXFxcIlBIWSBEZXZpY2Ugc3VwcG9ydCBhbmQgaW5mcmFzdHJ1Y3R1cmVcXFwiXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIEV0aGVybmV0IGNvbnRyb2xsZXJzIGFyZSB1c3VhbGx5IGF0dGFjaGVkIHRvIFBIWVxcbiAgMTk6XFx0XFx0ICBkZXZpY2VzLiAgVGhpcyBvcHRpb24gcHJvdmlkZXMgaW5mcmFzdHJ1Y3R1cmUgZm9yXFxuICAyMDpcXHRcXHQgIG1hbmFnaW5nIFBIWSBkZXZpY2VzLlxcbiAgMjE6XFx0XFxuICAyMjpcXHRpZiBQSFlMSUJcXG4gIDIzOlxcdFxcbiAgMjQ6XFx0Y29uZmlnIFNXUEhZXFxuICAyNTpcXHRcXHRib29sXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBQSFlfUEFDS0FHRVxcbiAgMjg6XFx0XFx0IHRyaXN0YXRlXFxuICAyOTpcXHRcXG4gIDMwOlxcdGNvbmZpZyBMRURfVFJJR0dFUl9QSFlcXG4gIDMxOlxcdFxcdGJvb2wgXFxcIlN1cHBvcnQgTEVEIHRyaWdnZXJzIGZvciB0cmFja2luZyBsaW5rIHN0YXRlXFxcIlxcbiAgMzI6XFx0XFx0ZGVwZW5kcyBvbiBMRURTX1RSSUdHRVJTXFxuICAzMzpcXHRcXHRoZWxwXFxuICAzNDpcXHRcXHQgIEFkZHMgc3VwcG9ydCBmb3IgYSBzZXQgb2YgTEVEIHRyaWdnZXIgZXZlbnRzIHBlci1QSFkuICBMaW5rXFxuICAzNTpcXHRcXHQgIHN0YXRlIGNoYW5nZSB3aWxsIHRyaWdnZXIgdGhlIGV2ZW50cywgZm9yIGNvbnN1bXB0aW9uIGJ5IGFuXFxuICAzNjpcXHRcXHQgIExFRCBjbGFzcyBkcml2ZXIuICBUaGVyZSBhcmUgdHJpZ2dlcnMgZm9yIGVhY2ggbGluayBzcGVlZCBjdXJyZW50bHlcXG4gIDM3OlxcdFxcdCAgc3VwcG9ydGVkIGJ5IHRoZSBQSFkgYW5kIGFsc28gYSBvbmUgY29tbW9uIFxcXCJsaW5rXFxcIiB0cmlnZ2VyIGFzIGFcXG4gIDM4OlxcdFxcdCAgbG9naWNhbC1vciBvZiBhbGwgdGhlIGxpbmsgc3BlZWQgb25lcy5cXG4gIDM5OlxcdFxcdCAgQWxsIHRoZXNlIHRyaWdnZXJzIGFyZSBuYW1lZCBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyBwYXR0ZXJuOlxcbiAgNDA6XFx0XFx0ICAgICAgXFx1MDAzY21paSBidXMgaWRcXHUwMDNlOlxcdTAwM2NwaHlcXHUwMDNlOlxcdTAwM2NzcGVlZFxcdTAwM2VcXG4gIDQxOlxcdFxcbiAgNDI6XFx0XFx0ICBXaGVyZSBzcGVlZCBpcyBpbiB0aGUgZm9ybTpcXG4gIDQzOlxcdFxcdFxcdFxcdTAwM2NTcGVlZCBpbiBtZWdhYml0c1xcdTAwM2VNYnBzIE9SIFxcdTAwM2NTcGVlZCBpbiBnaWdhYml0c1xcdTAwM2VHYnBzIE9SIGxpbmtcXG4gIDQ0OlxcdFxcdFxcdGZvciBhbnkgc3BlZWQga25vd24gdG8gdGhlIFBIWS5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0Y29uZmlnIE9QRU5fQUxMSUFOQ0VfSEVMUEVSU1xcbiAgNDc6XFx0XFx0Ym9vbFxcbiAgNDg6XFx0XFxuICA0OTpcXHRjb25maWcgUEhZTElCX0xFRFNcXG4gIDUwOlxcdFxcdGRlZl9ib29sIE9GXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU1OjA1Ljg1OTAwOTY4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxMDc3ODc1NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkludmVzdGlnYXRpbmcgUEhZTElCIEluY2x1c2lvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBQSFlMSUJgIGdldHMgcHVsbGVkIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCBzbyBJJ20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlIGlzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGZvciBuZXR3b3JraW5nLXJlbGF0ZWQgS2NvbmZpZyBvcHRpb25zLiBJdCdzIGFsbW9zdCBjZXJ0YWluIHRoYXQgdGhlIGBQSFlMSUJgIG9wdGlvbiwgb3IgdGhlIGZlYXR1cmVzIGl0IGRlcGVuZHMgb24sIHdpbGwgYmUgZGVmaW5lZCBvciBpbmNsdWRlZCBzb21ld2hlcmUgd2l0aGluIHRoYXQgZmlsZS4gVGltZSB0byBvcGVuIGl0IHVwIGFuZCBzZWUgd2hhdCB0aGUgYnVpbGQgc3lzdGVtIGlzIGRvaW5nIHdpdGggaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMzExLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzo1NToxMS45NjY4MDAyNDhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTgwODExMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz01MTI9c291cmNlIFxcXCJkcml2ZXJzL25ldC9pcGEvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnLTUxMy1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjUxNDpzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3BoeS9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWctNTE1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzo1NToxMi40MzI2MTM5MjlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIyMDUxNDQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBOZXR3b3JrIERldmljZSBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgc29tZXRoaW5nIG5ldHdvcmstcmVsYXRlZCwgbGlrZWx5IGludm9sdmluZyB0aGUgY29uZmlndXJhdGlvbiBvZiBuZXR3b3JrIGRldmljZXMuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdG8gZGVsdmUgaW50byB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgdXN1YWwgc3RhcnRpbmcgcG9pbnQgZm9yIG1hbmFnaW5nIG5ldHdvcmsgZGV2aWNlIG9wdGlvbnMgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byBhcm91bmQgbGluZSA1MTIsIGJlY2F1c2UgSSBoYXZlIGEgaHVuY2ggdGhhdCdzIHdoZXJlIHdlIG1pZ2h0IGZpbmQgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYE5FVERFVklDRVNgLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBjb25kaXRpb25hbCBibG9ja3Mgb3Igb3B0aW9ucyB0aGF0IGNvdWxkIGluZmx1ZW5jZSB0aGUgaW5jbHVzaW9uIG9yIGJlaGF2aW9yIG9mIG5ldHdvcmsgZGV2aWNlcyBpbiBnZW5lcmFsLCBvciBwb3RlbnRpYWxseSBzcGVjaWZpYyBkZXZpY2UgdHlwZXMuIEknbGwgbmVlZCB0byByYXBpZGx5IHNjYW4gZm9yIHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgb3IgbW9kdWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI1NjcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzo1NToxNC42NTMxMzIyOTdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBOZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgTkVUREVWSUNFU1xcbiAgIDc6XFx0XFx0ZGVmYXVsdCB5IGlmIFVNTFxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBORVRcXG4gICA5OlxcdFxcdGJvb2wgXFxcIk5ldHdvcmsgZGV2aWNlIHN1cHBvcnRcXFwiXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIFlvdSBjYW4gc2F5IE4gaGVyZSBpZiB5b3UgZG9uJ3QgaW50ZW5kIHRvIGNvbm5lY3QgeW91ciBMaW51eCBib3ggdG9cXG4gIDEyOlxcdFxcdCAgYW55IG90aGVyIGNvbXB1dGVyIGF0IGFsbC5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0XFx0ICBZb3UnbGwgaGF2ZSB0byBzYXkgWSBpZiB5b3VyIGNvbXB1dGVyIGNvbnRhaW5zIGEgbmV0d29yayBjYXJkIHRoYXRcXG4gIDE1OlxcdFxcdCAgeW91IHdhbnQgdG8gdXNlIHVuZGVyIExpbnV4LiBJZiB5b3UgYXJlIGdvaW5nIHRvIHJ1biBTTElQIG9yIFBQUCBvdmVyXFxuICAxNjpcXHRcXHQgIHRlbGVwaG9uZSBsaW5lIG9yIG51bGwgbW9kZW0gY2FibGUgeW91IG5lZWQgc2F5IFkgaGVyZS4gQ29ubmVjdGluZ1xcbiAgMTc6XFx0XFx0ICB0d28gbWFjaGluZXMgd2l0aCBwYXJhbGxlbCBwb3J0cyB1c2luZyBQTElQIG5lZWRzIHRoaXMsIGFzIHdlbGwgYXNcXG4gIDE4OlxcdFxcdCAgQVguMjUvS0lTUyBmb3Igc2VuZGluZyBJbnRlcm5ldCB0cmFmZmljIG92ZXIgYW1hdGV1ciByYWRpbyBsaW5rcy5cXG4gIDE5OlxcdFxcbiAgMjA6XFx0XFx0ICBTZWUgYWxzbyBcXFwiVGhlIExpbnV4IE5ldHdvcmsgQWRtaW5pc3RyYXRvcidzIEd1aWRlXFxcIiBieSBPbGFmIEtpcmNoIGFuZFxcbiAgMjE6XFx0XFx0ICBUZXJyeSBEYXdzb24uIEF2YWlsYWJsZSBhdCBcXHUwMDNjaHR0cDovL3d3dy50bGRwLm9yZy9ndWlkZXMuaHRtbFxcdTAwM2UuXFxuICAyMjpcXHRcXG4gIDIzOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDI0OlxcdFxcbiAgMjU6XFx0IyBBbGwgdGhlIGZvbGxvd2luZyBzeW1ib2xzIGFyZSBkZXBlbmRlbnQgb24gTkVUREVWSUNFUyAtIGRvIG5vdCByZXBlYXRcXG4gIDI2OlxcdCMgdGhhdCBmb3IgZWFjaCBvZiB0aGUgc3ltYm9scy5cXG4gIDI3OlxcdGlmIE5FVERFVklDRVNcXG4gIDI4OlxcdFxcbiAgMjk6XFx0Y29uZmlnIE1JSVxcbiAgMzA6XFx0XFx0dHJpc3RhdGVcXG4gIDMxOlxcdFxcbiAgMzI6XFx0Y29uZmlnIE5FVF9DT1JFXFxuICAzMzpcXHRcXHRkZWZhdWx0IHlcXG4gIDM0OlxcdFxcdGJvb2wgXFxcIk5ldHdvcmsgY29yZSBkcml2ZXIgc3VwcG9ydFxcXCJcXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgWW91IGNhbiBzYXkgTiBoZXJlIGlmIHlvdSBkbyBub3QgaW50ZW5kIHRvIHVzZSBhbnkgb2YgdGhlXFxuICAzNzpcXHRcXHQgIG5ldHdvcmtpbmcgY29yZSBkcml2ZXJzIChpLmUuIFZMQU4sIGJyaWRnaW5nLCBib25kaW5nLCBldGMuKVxcbiAgMzg6XFx0XFxuICAzOTpcXHRpZiBORVRfQ09SRVxcbiAgNDA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU1OjE0LjY1MzIzNDI3N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjUyNzY4ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTW90b3Jjb21tIFBIWSBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGBNT1RPUkNPTU1fUEhZYCBkcml2ZXIgcmVsaWVzIG9uIGJvdGggYFBIWUxJQmAgYW5kIGBORVRERVZJQ0VTYC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiBkZXBlbmRlbmNpZXMgSSdtIG1pc3NpbmcuIFNvLCBsZXQncyBkaXZlIGludG8gYGRyaXZlcnMvbmV0L3BoeS9LY29uZmlnYC5cblxuUmlnaHQsIGZvdW5kIGl0OiBgY29uZmlnIE1PVE9SQ09NTV9QSFlgIGNvbmZpcm1zIHRoZSB0cmlzdGF0ZSBvcHRpb24gZm9yIE1vdG9yY29tbSBQSFlzLiBBaGEsIGFuZCBpdCdzIG5lYXRseSBuZXN0ZWQ6IGBpZiBQSFlMSUJgIGlzIGl0c2VsZiBuZXN0ZWQgd2l0aGluIGBpZiBORVRERVZJQ0VTYCwgYW5kIGBORVRERVZJQ0VTYCBkZXBlbmRzIG9uIGBORVRgLiBUaGlzIGNvbmZpcm1zIHRoZSBpbml0aWFsIGRlcGVuZGVuY2llcywgYW5kIGFsc28gY2xhcmlmaWVzIHRoZSBkZXBlbmRlbmN5IGNoYWluLlxuXG5Ob3csIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gSSdtIGdvaW5nIHRvIGxvb2sgZGVlcGVyLiBMZXQncyBtYWtlIHN1cmUgaXQgZG9lc24ndCB1c2UgYW55IGhpZGRlbiBoZWxwZXJzIG9yIHNwZWNpZmljIGNvbmZpZyBvcHRpb25zIHRoYXQgYXJlbid0IGltbWVkaWF0ZWx5IG9idmlvdXMgZnJvbSB0aGUgS2NvbmZpZyBmaWxlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGFjdHVhbCBgbW90b3Jjb21tLmNgIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgaW5jbHVkZWQgaGVhZGVycyBhbmQgY29uZmlnIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIHN1YnRseSBiYWtlZCBpbiB0aGVyZS4gSSB3YW50IHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMzEwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6NTU6MTcuMzA2MDA1Mzg4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCtcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXIuXFxuICAgNDpcXHQgKlxcbiAgIDU6XFx0ICogQXV0aG9yOiBQZXRlciBHZWlzIFxcdTAwM2NwZ3dpcGVvdXRAZ21haWwuY29tXFx1MDAzZVxcbiAgIDY6XFx0ICogQXV0aG9yOiBGcmFuayBcXHUwMDNjRnJhbmsuU2FlQG1vdG9yLWNvbW0uY29tXFx1MDAzZVxcbiAgIDc6XFx0ICovXFxuICAgODpcXHRcXG4gICA5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGsuaFxcdTAwM2VcXG4gIDEwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXFx1MDAzZVxcbiAgMTE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAgMTI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcXHUwMDNlXFxuICAxNTpcXHRcXG4gIDE2OlxcdCNkZWZpbmUgUEhZX0lEX1lUODUxMVxcdFxcdDB4MDAwMDAxMGFcXG4gIDE3OlxcdCNkZWZpbmUgUEhZX0lEX1lUODUyMVxcdFxcdDB4MDAwMDAxMWFcXG4gIDE4OlxcdCNkZWZpbmUgUEhZX0lEX1lUODUyMlxcdFxcdDB4NGY1MWU5MjhcXG4gIDE5OlxcdCNkZWZpbmUgUEhZX0lEX1lUODUzMVxcdFxcdDB4NGY1MWU5MWJcXG4gIDIwOlxcdCNkZWZpbmUgUEhZX0lEX1lUODUzMVNcXHRcXHQweDRmNTFlOTFhXFxuICAyMTpcXHQjZGVmaW5lIFBIWV9JRF9ZVDg4MjFcXHRcXHQweDRmNTFlYTE5XFxuICAyMjpcXHQvKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXdcXG4gIDIzOlxcdCAqXFx0VVRQIFJlZ2lzdGVyIHNwYWNlXFx0fFxcdEZJQkVSIFJlZ2lzdGVyIHNwYWNlXFxuICAyNDpcXHQgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuICAyNTpcXHQgKiB8XFx0VVRQIE1JSVxcdFxcdFxcdHxcXHRGSUJFUiBNSUlcXHRcXHR8XFxuICAyNjpcXHQgKiB8XFx0VVRQIE1NRFxcdFxcdFxcdHxcXHRcXHRcXHRcXHR8XFxuICAyNzpcXHQgKiB8XFx0VVRQIEV4dGVuZGVkXFx0XFx0fFxcdEZJQkVSIEV4dGVuZGVkXFx0XFx0fFxcbiAgMjg6XFx0ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiAgMjk6XFx0ICogfFxcdFxcdFxcdENvbW1vbiBFeHRlbmRlZFxcdFxcdFxcdFxcdHxcXG4gIDMwOlxcdCAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4gIDMxOlxcdCAqL1xcbiAgMzI6XFx0XFxuICAzMzpcXHQvKiAweDEwIH4gMHgxNSAsIDB4MUUgYW5kIDB4MUYgYXJlIGNvbW1vbiBNSUkgcmVnaXN0ZXJzIG9mIHl0IHBoeSAqL1xcbiAgMzQ6XFx0XFxuICAzNTpcXHQvKiBTcGVjaWZpYyBGdW5jdGlvbiBDb250cm9sIFJlZ2lzdGVyICovXFxuICAzNjpcXHQjZGVmaW5lIFlUUEhZX1NQRUNJRklDX0ZVTkNUSU9OX0NPTlRST0xfUkVHXFx0MHgxMFxcbiAgMzc6XFx0XFxuICAzODpcXHQvKiAyYjAwIE1hbnVhbCBNREkgY29uZmlndXJhdGlvblxcbiAgMzk6XFx0ICogMmIwMSBNYW51YWwgTURJWCBjb25maWd1cmF0aW9uXFxuICA0MDpcXHQgKiAyYjEwIFJlc2VydmVkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU1OjE3LjMwNjE1MDIwOFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NDg5MDM1MDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIERyaXZlciBDb25maWd1cmF0aW9uIENoYW5nZXMgZm9yIEZ1enppbmcgRm9jdXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgc2NhbiBmbGFnZ2VkIHNvbWUgc3ltYm9sIGNoYW5nZXMsIHNwZWNpZmljYWxseSBgeXQ4NTMxc19jb25maWdfaW5pdGAsIGBfX3l0ODUyMV9jb25maWdfaW5pdGAsIGFuZCBgeXQ4NTIxX2NvbmZpZ19pbml0YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgd2FzIHRvIGNoZWNrIGlmIHRoZXNlIGFyZSBzdGF0aWMgb3Igbm9uLXN0YXRpYyBiZWNhdXNlIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMgZmF2b3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMgZm9yIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIExvb2tpbmcgaW50byBgbW90b3Jjb21tLmNgLCBJIHNlZSB0aGV5ICphcmUqIHN0YXRpYzogYHN0YXRpYyBpbnQgeXQ4NTMxc19jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KWAgYW5kIGBzdGF0aWMgaW50IHl0ODUyMV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KWAuIEJ1dCB0aGVuLCBJIHJlbWVtYmVyZWQgdGhvc2UgZnVuY3Rpb25zIGFyZSByZWZlcmVuY2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiB0aGUgYG1vdG9yY29tbV9waHlfZHJ2c1tdYCBzdHJ1Y3Q6ICBgLmNvbmZpZ19pbml0ID0geXQ4NTMxc19jb25maWdfaW5pdCxgIGFuZCBgLmNvbmZpZ19pbml0ID0geXQ4NTIxX2NvbmZpZ19pbml0LGAuXG5cbkFoLWhhISBCZWNhdXNlIHRoZXkgYXJlIHN0b3JlZCBhcyBmdW5jdGlvbiBwb2ludGVycywgZXZlbiB0aG91Z2ggdGhleSdyZSBkZWNsYXJlZCBgc3RhdGljYCwgdGhlaXIgYWRkcmVzc2VzIGFyZSByZXRhaW5lZCBpbiB0aGUgZHJpdmVyJ3Mgc3RydWN0IHRhYmxlLiBUaGVyZWZvcmUsIHRoZXkgYXJlIG5vdCBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gVGhhdCBtYWtlcyB0aGVtIHBlcmZlY3QgY2FuZGlkYXRlcyBmb3IgZm9jdXMgc3ltYm9scy4gU28gYHl0ODUzMXNfY29uZmlnX2luaXRgIGFuZCBgeXQ4NTIxX2NvbmZpZ19pbml0YCBhcmUgZGVmaW5pdGVseSBpbiBteSBzaWdodHMuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgY29tcGxldGUgcGljdHVyZS4gVGhlIHBhdGNoIG1vZGlmaWVzIGBfX3l0ODUyMV9jb25maWdfaW5pdGAsIGB5dDg1MjFfY29uZmlnX2luaXRgLCBhbmQgYHl0ODUzMXNfY29uZmlnX2luaXRgLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGB5dDg1MzFzX2NvbmZpZ19pbml0YCBhbmQgYHl0ODUyMV9jb25maWdfaW5pdGAgd2lsbCBoYXZlIGRpc3RpbmN0IHN5bWJvbHMgd2hlbiBgTU9UT1JDT01NX1BIWWAgaXMgZW5hYmxlZC4gTFRPICpjb3VsZCogbWVyZ2UgdGhlbSBpbiBjZXJ0YWluIHNpdHVhdGlvbnMsIGJ1dCBoZXJlLCB0aGUgY29kZSBpcyBkaXN0aW5jdC5cblxuRnVuY3Rpb25hbGx5LCB0aGUgcGF0Y2ggKmRvZXMqIGludHJvZHVjZSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIGRyaXZlciBsb2dpYy4gSXQgaW50cm9kdWNlcyBhIHNlcGFyYXRlIGBjb25maWdfaW5pdGAgZm9yIFlUODUzMVMgKGB5dDg1MzFzX2NvbmZpZ19pbml0YCksIGV4dHJhY3RzIGNvbW1vbiBpbml0IGludG8gYF9feXQ4NTIxX2NvbmZpZ19pbml0YCwgYWRkcyBHTUlJIG1vZGUgY29uZmlndXJhdGlvbiBmb3IgWVQ4NTMxUyBieSBlbmFibGluZyB0aGUgYW5hbG9nIGZyb250LWVuZCBEQUMgY2xvY2sgYW5kIGZpeGVzIHRoZSBSR01JSSBkcml2ZSBzdHJlbmd0aCBzZXR0aW5nIHBhdGguIFRoaXMgaXMgbW9yZSB0aGFuIGp1c3QgYSBtaW5vciB0d2VhazsgdGhlcmUgaXMgZnVuY3Rpb25hbCBjaGFuZ2UsIHNvIHllcywgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlxuXG5NeSBDT05GSUcgZGVwZW5kZW5jaWVzIGFyZSBhbHNvIGNvbmZpcm1lZDogYE1PVE9SQ09NTV9QSFlgLCBgUEhZTElCYCwgYW5kIGBORVRERVZJQ0VTYC4gSSBub3cgaGF2ZSBhbGwgdGhlIGluZm9ybWF0aW9uIHJlcXVpcmVkLiBJJ2xsIGNvbnN0cnVjdCB0aGUgYHNldC1yZXN1bHRzYCBhY2NvcmRpbmdseTogYFdvcnRoRnV6emluZ2Agc2V0IHRvIGB0cnVlYCwgYSBjbGVhciBleHBsYW5hdGlvbiBvZiB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFuZCBob3cgdGhleSBhcmUgcmVhY2hhYmxlIGFzIHRoZSByZWFzb25pbmcsIHRoZSBgRm9jdXNTeW1ib2xzYCBhcyBgW1wieXQ4NTMxc19jb25maWdfaW5pdFwiLCBcInl0ODUyMV9jb25maWdfaW5pdFwiXWAsIGFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIHNldCB0byBgW1wiTU9UT1JDT01NX1BIWVwiLCBcIlBIWUxJQlwiLCBcIk5FVERFVklDRVNcIl1gLiBUaGlzIHNob3VsZCBiZSBhIHJvYnVzdCBhbmQgZGVmZW5zaWJsZSBjaG9pY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NDM1LCJPdXRwdXRUb2tlbnMiOjE1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU1OjI0Ljc5NTE4ODE3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE1MTkyMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1PVE9SQ09NTV9QSFlcIixcbiAgICBcIlBIWUxJQlwiLFxuICAgIFwiTkVUREVWSUNFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInl0ODUzMXNfY29uZmlnX2luaXRcIixcbiAgICBcInl0ODUyMV9jb25maWdfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBkZWRpY2F0ZWQgaW5pdGlhbGl6YXRpb24gY2FsbGJhY2sgeXQ4NTMxc19jb25maWdfaW5pdCBmb3IgdGhlIE1vdG9yY29tbSBZVDg1MzFTIEV0aGVybmV0IFBIWSwgZmFjdG9yaW5nIGNvbW1vbiBpbml0aWFsaXphdGlvbiBpbnRvIF9feXQ4NTIxX2NvbmZpZ19pbml0IGFuZCBhZGRpbmcgc3VwcG9ydCBmb3IgZW5hYmxpbmcgdGhlIGFuYWxvZyBmcm9udC1lbmQgREFDIGNsb2NrIHdoZW4gb3BlcmF0aW5nIGluIEdNSUkgbW9kZS4gVGhlc2UgY2hhbmdlcyBhbHRlciBkcml2ZXIgY29uZmlndXJhdGlvbiBmbG93IGFuZCBjYW4gYmUgZXhlY3V0ZWQgdmlhIE1ESU8gLyBwaHlsaWIgdGhyb3VnaCBlbXVsYXRlZCBVU0Igb3IgbmV0d29yayBjb250cm9sbGVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNT1RPUkNPTU1fUEhZXCIsXG4gICAgXCJQSFlMSUJcIixcbiAgICBcIk5FVERFVklDRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ5dDg1MzFzX2NvbmZpZ19pbml0XCIsXG4gICAgXCJ5dDg1MjFfY29uZmlnX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZGVkaWNhdGVkIGluaXRpYWxpemF0aW9uIGNhbGxiYWNrIHl0ODUzMXNfY29uZmlnX2luaXQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4NTMxUyBFdGhlcm5ldCBQSFksIGZhY3RvcmluZyBjb21tb24gaW5pdGlhbGl6YXRpb24gaW50byBfX3l0ODUyMV9jb25maWdfaW5pdCBhbmQgYWRkaW5nIHN1cHBvcnQgZm9yIGVuYWJsaW5nIHRoZSBhbmFsb2cgZnJvbnQtZW5kIERBQyBjbG9jayB3aGVuIG9wZXJhdGluZyBpbiBHTUlJIG1vZGUuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgZHJpdmVyIGNvbmZpZ3VyYXRpb24gZmxvdyBhbmQgY2FuIGJlIGV4ZWN1dGVkIHZpYSBNRElPIC8gcGh5bGliIHRocm91Z2ggZW11bGF0ZWQgVVNCIG9yIG5ldHdvcmsgY29udHJvbGxlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU1OjI0Ljg2NjcxMzIzN1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzODAxNTQ0NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzo1NToyNC44NjcxNjE3NDdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxODM3OTcwMTcyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1vdG9yY29tbSBQSFkgZHJpdmVyIChkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMpIGJ5IHJlZmFjdG9yaW5nIFBIWSBjb25maWd1cmF0aW9uIGxvZ2ljIGFuZCBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFlUODUzMVMgUEhZIGNvbmZpZyBpbml0IGNhbGxiYWNrICh5dDg1MzFzX2NvbmZpZ19pbml0KSwgd2hpY2ggcGVyZm9ybXMgaGFyZHdhcmUgcmVnaXN0ZXIgcmVhZHMvd3JpdGVzIHZpYSBNRElPLiBUaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBoYXJkd2FyZSByZWdpc3RlciBhY2Nlc3MgY29udHJvbCBmbG93IGFuZCBsb2NhbCBpbnRlZ2VyIHJldHVybiBjb2RlczsgdGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXJzLCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBTdGFuZGFyZCBLQVNBTiBhbmQgZ2VuZXJhbCBrZXJuZWwgdGVzdGluZyBhcmUgc3VmZmljaWVudCwgYW5kIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIHRoYXQgd291bGQgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDEzODA2ZmI0ZTY3ZDAyYjc4MWU1YzQ5NWRhMDk0NjNmNzZlODhmNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDA3OjU0OjAyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG5pbmRleCBjNWEyY2RhOGQzMWJkLi45MGE0Zjg2ZjI3NThiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbkBAIC0xNDQsNiArMTQ0LDExIEBAXG4gI2RlZmluZSBZVDg1MjFfQ0xPQ0tfR0FUSU5HX1JFR1x0XHRcdDB4Q1xuICNkZWZpbmUgWVQ4NTIxX0NHUl9SWF9DTEtfRU5cdFx0XHRCSVQoMTIpXG4gXG4rLyogQW5hbG9nIGZyb250LWVuZCBjb250cm9sIHJlZ2lzdGVyIDMgKi9cbisjZGVmaW5lIFlUODUzMVNfRVhUX0FGRV9DVFJMM1x0XHRcdDB4MTJcbisvKiBBbmFsb2cgZnJvbnQtZW5kIERBQyBjbG9jayBlbmFibGUgKi9cbisjZGVmaW5lIFlUODUzMVNfQUZFX0NUUkwzX0NMS0RBQ19BT05cdFx0QklUKDEzKVxuK1xuICNkZWZpbmUgWVQ4NTIxX0VYVFJFR19TTEVFUF9DT05UUk9MMV9SRUdcdDB4MjdcbiAjZGVmaW5lIFlUODUyMV9FU0MxUl9TTEVFUF9TV1x0XHRcdEJJVCgxNSlcbiAjZGVmaW5lIFlUODUyMV9FU0MxUl9QTExPTl9TTFBcdFx0XHRCSVQoMTQpXG5AQCAtMTY4MCwyNyArMTY4NSwxNiBAQCBzdGF0aWMgaW50IHl0ODUyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdHJldHVybiB5dDg1MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7XG4gfVxuIFxuLS8qKlxuLSAqIHl0ODUyMV9jb25maWdfaW5pdCgpIC0gY2FsbGVkIHRvIGluaXRpYWxpemUgdGhlIFBIWVxuLSAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4tICpcbi0gKiByZXR1cm5zIDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuLSAqL1xuLXN0YXRpYyBpbnQgeXQ4NTIxX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4rc3RhdGljIGludCBfX3l0ODUyMV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbi1cdGludCBvbGRfcGFnZTtcbiBcdGludCByZXQgPSAwO1xuIFxuLVx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg1MjFfUlNTUl9VVFBfU1BBQ0UpO1xuLVx0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4tXG4gXHQvKiBzZXQgcmdtaWkgZGVsYXkgbW9kZSAqL1xuIFx0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKSB7XG4gXHRcdHJldCA9IHl0cGh5X3JnbWlpX2Nsa19kZWxheV9jb25maWcocGh5ZGV2KTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbiBcdGlmIChkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29sKGRldiwgXCJtb3RvcmNvbW0sYXV0by1zbGVlcC1kaXNhYmxlZFwiKSkge1xuQEAgLTE3MDgsMjAgKzE3MDIsNTggQEAgc3RhdGljIGludCB5dDg1MjFfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdFx0cmV0ID0geXRwaHlfbW9kaWZ5X2V4dChwaHlkZXYsIFlUODUyMV9FWFRSRUdfU0xFRVBfQ09OVFJPTDFfUkVHLFxuIFx0XHRcdFx0ICAgICAgIFlUODUyMV9FU0MxUl9TTEVFUF9TVywgMCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0XHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4tXHRpZiAoZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYsIFwibW90b3Jjb21tLGtlZXAtcGxsLWVuYWJsZWRcIikpIHtcbitcdGlmIChkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29sKGRldiwgXCJtb3RvcmNvbW0sa2VlcC1wbGwtZW5hYmxlZFwiKSlcbiBcdFx0LyogZW5hYmxlIFJYQyBjbG9jayB3aGVuIG5vIHdpcmUgcGx1ZyAqL1xuLVx0XHRyZXQgPSB5dHBoeV9tb2RpZnlfZXh0KHBoeWRldiwgWVQ4NTIxX0NMT0NLX0dBVElOR19SRUcsXG4tXHRcdFx0XHQgICAgICAgWVQ4NTIxX0NHUl9SWF9DTEtfRU4sIDApO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4geXRwaHlfbW9kaWZ5X2V4dChwaHlkZXYsIFlUODUyMV9DTE9DS19HQVRJTkdfUkVHLFxuK1x0XHRcdFx0XHRZVDg1MjFfQ0dSX1JYX0NMS19FTiwgMCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogeXQ4NTIxX2NvbmZpZ19pbml0KCkgLSBjYWxsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgUEhZXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg1MjFfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgb2xkX3BhZ2UsIHJldCA9IDA7XG4rXG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODUyMV9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IF9feXQ4NTIxX2NvbmZpZ19pbml0KHBoeWRldik7XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeXQ4NTMxc19jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBvbGRfcGFnZSwgcmV0ID0gMDtcbitcbitcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4NTIxX1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0gX195dDg1MjFfY29uZmlnX2luaXQocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdGlmIChwaHlfaW50ZXJmYWNlX2lzX3JnbWlpKHBoeWRldikpIHtcbitcdFx0cmV0ID0geXQ4NTMxX3NldF9kcyhwaHlkZXYpO1xuK1x0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiBcdH1cbiBcbi1cdGlmIChwaHlfaW50ZXJmYWNlX2lzX3JnbWlpKHBoeWRldikgXHUwMDI2XHUwMDI2XG4tXHQgICAgcGh5ZGV2X2lkX2NvbXBhcmUocGh5ZGV2LCBQSFlfSURfWVQ4NTMxUykpXG4tXHRcdHJldCA9IHl0ODUzMV9zZXRfZHMocGh5ZGV2KTtcbitcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJKVxuK1x0XHRyZXQgPSB5dHBoeV9tb2RpZnlfZXh0KHBoeWRldiwgWVQ4NTMxU19FWFRfQUZFX0NUUkwzLFxuK1x0XHRcdFx0ICAgICAgIDAsIFlUODUzMVNfQUZFX0NUUkwzX0NMS0RBQ19BT04pO1xuIFxuIGVycl9yZXN0b3JlX3BhZ2U6XG4gXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuQEAgLTMxMzUsNyArMzE2Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcbiBcdFx0LnNldF93b2xcdD0geXRwaHlfc2V0X3dvbCxcbiBcdFx0LmNvbmZpZ19hbmVnXHQ9IHl0ODUyMV9jb25maWdfYW5lZyxcbiBcdFx0LmFuZWdfZG9uZVx0PSB5dDg1MjFfYW5lZ19kb25lLFxuLVx0XHQuY29uZmlnX2luaXRcdD0geXQ4NTIxX2NvbmZpZ19pbml0LFxuK1x0XHQuY29uZmlnX2luaXRcdD0geXQ4NTMxc19jb25maWdfaW5pdCxcbiBcdFx0LnJlYWRfc3RhdHVzXHQ9IHl0ODUyMV9yZWFkX3N0YXR1cyxcbiBcdFx0LnNvZnRfcmVzZXRcdD0geXQ4NTIxX3NvZnRfcmVzZXQsXG4gXHRcdC5zdXNwZW5kXHQ9IHl0ODUyMV9zdXNwZW5kLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6NTU6MjQuODY3MTYyNTQ3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4Mzc5Njc3OTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE1vdG9yY29tbSBQSFkgRHJpdmVyIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciB0aGUgTW90b3Jjb21tIFBIWSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB3aGV0aGVyIGl0IHdhcnJhbnRzIGEgS01TQU4gY2hlY2suIEkgc2VlIGl0IHRvdWNoZXMgYGRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY2AuIFRoZSBjaGFuZ2VzIGludm9sdmU6IGFkZGluZyBhIGZldyBtYWNyb3MgKGBZVDg1MzFTX0VYVF9BRkVfQ1RSTDNgLCBgWVQ4NTMxU19BRkVfQ1RSTDNfQ0xLREFDX0FPTmApLCByZWZhY3RvcmluZyB0aGUgYHl0ODUyMV9jb25maWdfaW5pdGAgZnVuY3Rpb24sIGFuZCBpbnRyb2R1Y2luZyBgeXQ4NTMxc19jb25maWdfaW5pdGAgZm9yIHRoZSBZVDg1MzFTIFBIWS4gVGhlIGBjb25maWdfaW5pdGAgY2FsbGJhY2sgaW4gdGhlIGRyaXZlciB0YWJsZSBpcyBiZWluZyB1cGRhdGVkLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBpcyBoYXJkd2FyZSByZWdpc3RlciBtYW5pcHVsYXRpb24gZm9yIGEgc3BlY2lmaWMgUEhZLCB0aGUgWVQ4NTMxUy4gSXQncyBpbml0aWFsaXppbmcgYW5kIGNvbmZpZ3VyaW5nIHRoZSBkZXZpY2UuIEknbSBzZWVpbmcgcmVnaXN0ZXIgd3JpdGVzIGFuZCBwb3RlbnRpYWxseSBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHRoZSBpbnRlcmZhY2UgdHlwZSAoUkdNSUkvR01JSSkgdG8gYWRqdXN0IGRyaXZlIHN0cmVuZ3RoIG9yIG1vZGlmeSBzcGVjaWZpYyByZWdpc3RlcnMuXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBkb2VzIHRoaXMgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBObyBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGFuZCBubyBkaXJlY3QgZGF0YSB0cmFuc2ZlcnMgdG8gdXNlciBzcGFjZSBlaXRoZXIuIEl0J3MgYWxsIGludGVybmFsIHJlZ2lzdGVyIG1hbmlwdWxhdGlvbiwgbm8gYGNvcHlfdG9fdXNlcmAgb3IgdGhlIGxpa2UsIHdoaWNoIG1lYW5zIEkgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBWYXJpYWJsZXMgbGlrZSBgZGV2YCwgYHJldGAsIGFuZCBgb2xkX3BhZ2VgIGFyZSBzY2FsYXIgdHlwZXMgYW5kIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgd2hpY2ggbWVhbnMgdGhhdCB1bmluaXRpYWxpemVkIHJlYWQgcmlza3MgYXJlIG1pbmltYWwuIFRoZXJlJ3Mgbm8gZXZpZGVudCByaXNrIG9mIGluZm9ybWF0aW9uIGxlYWtzLlxuXG5JJ20gY29tZm9ydGFibGUgd2l0aCB0aGF0LCBzbyBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIGV2ZXJ5dGhpbmcsIHVzaW5nIGEgYHNldC1yZXN1bHRzYCBwcm9jZXNzLlxuXG5BZnRlciBhIHJldmlldywgaXQgbG9va3MgY2xlYXI6IG5vIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSwgc28gbm8gcmlzayB0aGVyZS4gVGhlcmUncyBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG5vciBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucy4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gYW55IGJvdW5kcyBjaGVja3MgdGhhdCBJIGhhdmUgdG8gY29uc2lkZXIgdG8gZW5zdXJlIHRoYXQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNuJ3QgcmV2ZWFsZWQuXG5cblNvLCAqTmVlZHNLTVNBTiogaXMgZGVmaW5pdGl2ZWx5ICpmYWxzZSogaGVyZS4gTm8gS01TQU4gZmxhZ3MuIEl0J3MgYSBjbGVhbiBwYXRjaC5cblxuSSdsbCB3cml0ZSB1cCBzb21lIGJyaWVmIEtNU0FOIHJlYXNvbmluZywgY29udHJhc3RpbmcgS01TQU4gd2l0aCBLQVNBTiwgYXMgYSBjb3VydGVzeSwgYW5kIEkgY2FuIG1vdmUgb24gdG8gdGhlIG5leHQgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTg1LCJPdXRwdXRUb2tlbnMiOjE2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjU1OjQzLjI0Njg0MzM1OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1vdG9yY29tbSBQSFkgZHJpdmVyIChkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMpIGJ5IHJlZmFjdG9yaW5nIFBIWSBjb25maWd1cmF0aW9uIGxvZ2ljIGFuZCBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFlUODUzMVMgUEhZIGNvbmZpZyBpbml0IGNhbGxiYWNrICh5dDg1MzFzX2NvbmZpZ19pbml0KSwgd2hpY2ggcGVyZm9ybXMgaGFyZHdhcmUgcmVnaXN0ZXIgcmVhZHMvd3JpdGVzIHZpYSBNRElPLiBUaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBoYXJkd2FyZSByZWdpc3RlciBhY2Nlc3MgY29udHJvbCBmbG93IGFuZCBsb2NhbCBpbnRlZ2VyIHJldHVybiBjb2RlczsgdGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXJzLCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBTdGFuZGFyZCBLQVNBTiBhbmQgZ2VuZXJhbCBrZXJuZWwgdGVzdGluZyBhcmUgc3VmZmljaWVudCwgYW5kIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIHRoYXQgd291bGQgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1vdG9yY29tbSBQSFkgZHJpdmVyIChkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMpIGJ5IHJlZmFjdG9yaW5nIFBIWSBjb25maWd1cmF0aW9uIGxvZ2ljIGFuZCBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIFlUODUzMVMgUEhZIGNvbmZpZyBpbml0IGNhbGxiYWNrICh5dDg1MzFzX2NvbmZpZ19pbml0KSwgd2hpY2ggcGVyZm9ybXMgaGFyZHdhcmUgcmVnaXN0ZXIgcmVhZHMvd3JpdGVzIHZpYSBNRElPLiBUaGUgY2hhbmdlcyBvbmx5IGFmZmVjdCBoYXJkd2FyZSByZWdpc3RlciBhY2Nlc3MgY29udHJvbCBmbG93IGFuZCBsb2NhbCBpbnRlZ2VyIHJldHVybiBjb2RlczsgdGhleSBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXJzLCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBTdGFuZGFyZCBLQVNBTiBhbmQgZ2VuZXJhbCBrZXJuZWwgdGVzdGluZyBhcmUgc3VmZmljaWVudCwgYW5kIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIHRoYXQgd291bGQgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqtt8x[1] Phase: Succeeded StartedAt: 2026-08-31 07:55:55 +0000 UTC FinishedAt: 2026-08-31 07:55:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtt8x[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 07:55:55 +0000 UTC FinishedAt: 2026-08-31 07:55:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtt8x[2] Phase: Succeeded StartedAt: 2026-08-31 07:55:55 +0000 UTC FinishedAt: 2026-08-31 09:33:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-31 07:55:55 +0000 UTC FinishedAt: 2026-08-31 09:33:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-31 07:55:55 +0000 UTC FinishedAt: 2026-08-31 07:56:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-31 07:55:55 +0000 UTC FinishedAt: 2026-08-31 07:55:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqtt8x/series-workflowqtt8x-convert-artifact-1879434370/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-31 07:56:05 +0000 UTC FinishedAt: 2026-08-31 08:13:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-31 07:56:05 +0000 UTC FinishedAt: 2026-08-31 08:13:00 +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:*61a3a05a-5835-4600-af5b-227acaf75ef2,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-workflowqtt8x/series-workflowqtt8x-convert-artifact-1879434370/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": "72390978-6691-49ff-a25a-530ca261ccd1", "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-workflowqtt8x/series-workflowqtt8x-build-action-3555029824/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-31 07:56:05 +0000 UTC FinishedAt: 2026-08-31 08:12:50 +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:*61a3a05a-5835-4600-af5b-227acaf75ef2,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-workflowqtt8x/series-workflowqtt8x-convert-artifact-1879434370/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": "72390978-6691-49ff-a25a-530ca261ccd1", "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-workflowqtt8x/series-workflowqtt8x-build-action-3555029824/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-31 08:13:00 +0000 UTC FinishedAt: 2026-08-31 08:13:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-31 08:13:00 +0000 UTC FinishedAt: 2026-08-31 08:13:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-31 08:13:00 +0000 UTC FinishedAt: 2026-08-31 08:13:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-31 08:13:00 +0000 UTC FinishedAt: 2026-08-31 08:13:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqtt8x/series-workflowqtt8x-convert-artifact-1962236381/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-31 08:13:10 +0000 UTC FinishedAt: 2026-08-31 08:14:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-31 08:13:10 +0000 UTC FinishedAt: 2026-08-31 08:14:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*72390978-6691-49ff-a25a-530ca261ccd1,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-workflowqtt8x/series-workflowqtt8x-build-action-3555029824/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-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-31 08:14:49 +0000 UTC FinishedAt: 2026-08-31 08:14:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-31 08:14:49 +0000 UTC FinishedAt: 2026-08-31 08:14:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-31 08:14:49 +0000 UTC FinishedAt: 2026-08-31 08:35:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-31 08:14:49 +0000 UTC FinishedAt: 2026-08-31 08:35:36 +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:*61a3a05a-5835-4600-af5b-227acaf75ef2,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-workflowqtt8x/series-workflowqtt8x-convert-artifact-1962236381/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": "66e40169-db18-4143-8ca0-1cef808283a7", "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-workflowqtt8x/series-workflowqtt8x-build-action-2689243833/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-31 08:14:49 +0000 UTC FinishedAt: 2026-08-31 08:35:25 +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:*61a3a05a-5835-4600-af5b-227acaf75ef2,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-workflowqtt8x/series-workflowqtt8x-convert-artifact-1962236381/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": "66e40169-db18-4143-8ca0-1cef808283a7", "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-workflowqtt8x/series-workflowqtt8x-build-action-2689243833/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-31 08:35:36 +0000 UTC FinishedAt: 2026-08-31 08:35:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-31 08:35:36 +0000 UTC FinishedAt: 2026-08-31 08:35:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-31 08:35:36 +0000 UTC FinishedAt: 2026-08-31 08:37:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-31 08:35:36 +0000 UTC FinishedAt: 2026-08-31 08:37:39 +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:*66e40169-db18-4143-8ca0-1cef808283a7,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-workflowqtt8x/series-workflowqtt8x-build-action-2689243833/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-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-31 08:37:50 +0000 UTC FinishedAt: 2026-08-31 09:33:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-31 08:37:50 +0000 UTC FinishedAt: 2026-08-31 09:33:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"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:*72390978-6691-49ff-a25a-530ca261ccd1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*66e40169-db18-4143-8ca0-1cef808283a7,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-workflowqtt8x/series-workflowqtt8x-build-action-3555029824/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-workflowqtt8x/series-workflowqtt8x-build-action-2689243833/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-31 08:37:50 +0000 UTC FinishedAt: 2026-08-31 08:38:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-31 08:37:50 +0000 UTC FinishedAt: 2026-08-31 08:37:55 +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":["yt8531s_config_init","yt8521_config_init"],"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-workflowqtt8x/series-workflowqtt8x-convert-artifact-410934114/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-31 08:37:50 +0000 UTC FinishedAt: 2026-08-31 08:37:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-31 08:37:50 +0000 UTC FinishedAt: 2026-08-31 08:37:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-31 08:37:50 +0000 UTC FinishedAt: 2026-08-31 08:37:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-31 08:38:01 +0000 UTC FinishedAt: 2026-08-31 09:33:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtt8x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8531s_config_init","yt8521_config_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY","PHYLIB","NETDEVICES"],"series_id":"44bebf95-128e-4f98-b843-98f2540ed871","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-31 08:38:01 +0000 UTC FinishedAt: 2026-08-31 09:33:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*72390978-6691-49ff-a25a-530ca261ccd1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*66e40169-db18-4143-8ca0-1cef808283a7,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-workflowqtt8x/series-workflowqtt8x-build-action-3555029824/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-workflowqtt8x/series-workflowqtt8x-build-action-2689243833/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-workflowqtt8x/series-workflowqtt8x-convert-artifact-410934114/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,}