Name: series-workflow5rtjp Phase: Succeeded StartedAt: 2026-07-31 14:49:34 +0000 UTC FinishedAt: 2026-07-31 16:37:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rtjp[0] Phase: Succeeded StartedAt: 2026-07-31 14:49:34 +0000 UTC FinishedAt: 2026-07-31 15:12:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rtjp[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 14:49:34 +0000 UTC FinishedAt: 2026-07-31 15:12:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "10e04ab3f0bf481bc01982e4301b9f7475a7f7d3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_ZONED_LOOP", "BLK_DEV_ZONED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "10e04ab3f0bf481bc01982e4301b9f7475a7f7d3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_ZONED_LOOP", "BLK_DEV_ZONED" ], "series_id": "0ed3f0cc-9976-4845-b89a-c27b2ebca587" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "zloop_complete_rq", "zloop_queue_rq", "zloop_ctl_write" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfWk9ORURfTE9PUCYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1pPTkVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emxvb3BfY29tcGxldGVfcnEmIzM0OywKICAgICYjMzQ7emxvb3BfcXVldWVfcnEmIzM0OywKICAgICYjMzQ7emxvb3BfY3RsX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBgemxvb3BfY29tcGxldGVfcnFgIHRvIGNvcnJlY3RseSB6ZXJvIG91dCB0aGUgdW5yZWFkIHRhaWwgb2YgYSByZXF1ZXN0IGJleW9uZCBgY21kLVx1MDAzZXJldGAgZm9yIHNob3J0IHJlYWRzLCByZXBsYWNpbmcgdGhlIHByZXZpb3VzIGB6ZXJvX2ZpbGxfYmlvYCBhcHByb2FjaC4gVGhlIGB6bG9vcGAgZHJpdmVyIGlzIGEgc29mdHdhcmUtZW11bGF0ZWQgem9uZWQgYmxvY2sgZGV2aWNlIHRoYXQgY2FuIGJlIGZ1bGx5IGV4ZXJjaXNlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBGdXp6aW5nIHRoaXMgcmVxdWlyZXMgZW5hYmxpbmcgYEJMS19ERVZfWk9ORURfTE9PUGAgYW5kIGl0cyBkZXBlbmRlbmN5IGBCTEtfREVWX1pPTkVEYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNToxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDY2ODA5NWYyZTUxZWFhODZlY2VkNjc1YWU5NGFmZmM4MjYxYjdkOWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAxNToxMTowOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3psb29wLmMgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmNcbmluZGV4IDU1ZWViNmFhYzBlYTMuLjQyOTY3ZTdhZWE1OGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3psb29wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuQEAgLTc5OCw2ICYjNDM7Nzk4LDI2IEBAIHN0YXRpYyB2b2lkIHpsb29wX2NtZF93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0Y3VycmVudC1cdTAwM2VmbGFncyA9IG9yaWdfZmxhZ3M7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB6bG9vcF9maWxsX3plcm9fcnEoc3RydWN0IHJlcXVlc3QgKnJxLCB1bnNpZ25lZCBpbnQgemVyb19mcm9tKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJlcV9pdGVyYXRvciBpdGVyO1xuJiM0MztcdHN0cnVjdCBiaW9fdmVjIGJ2O1xuJiM0MztcdHVuc2lnbmVkIGludCBwb3MgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGludCBlbmQsIG9mZjtcbiYjNDM7XG4mIzQzO1x0cnFfZm9yX2VhY2hfc2VnbWVudChidiwgcnEsIGl0ZXIpIHtcbiYjNDM7XHRcdGVuZCA9IHBvcyAmIzQzOyBidi5idl9sZW47XG4mIzQzO1x0XHRpZiAoZW5kIFx1MDAzZSB6ZXJvX2Zyb20pIHtcbiYjNDM7XHRcdFx0b2ZmID0gMDtcbiYjNDM7XHRcdFx0aWYgKHBvcyBcdTAwM2MgemVyb19mcm9tKVxuJiM0MztcdFx0XHRcdG9mZiA9IHplcm9fZnJvbSAtIHBvcztcbiYjNDM7XHRcdFx0bWVtemVyb19wYWdlKGJ2LmJ2X3BhZ2UsIGJ2LmJ2X29mZnNldCAmIzQzOyBvZmYsXG4mIzQzO1x0XHRcdFx0ICAgICBidi5idl9sZW4gLSBvZmYpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cG9zID0gZW5kO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB6bG9vcF9jb21wbGV0ZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4ge1xuIFx0c3RydWN0IHpsb29wX2NtZCAqY21kID0gYmxrX21xX3JxX3RvX3BkdShycSk7XG5AQCAtODEyLDEzICYjNDM7ODMyLDkgQEAgc3RhdGljIHZvaWQgemxvb3BfY29tcGxldGVfcnEoc3RydWN0IHJlcXVlc3QgKnJxKVxuIFx0XHRcdHByX2VycihcJiMzNDtab25lICV1OiBmYWlsZWQgcmVhZCBzZWN0b3IgJWxsdSwgJWxsdSBzZWN0b3JzXFxuXCYjMzQ7LFxuIFx0XHRcdCAgICAgICB6b25lX25vLCBjbWQtXHUwMDNlc2VjdG9yLCBjbWQtXHUwMDNlbnJfc2VjdG9ycyk7XG4gXG4tXHRcdGlmIChjbWQtXHUwMDNlcmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgY21kLVx1MDAzZXJldCAhPSBibGtfcnFfYnl0ZXMocnEpKSB7XG4tXHRcdFx0Lyogc2hvcnQgcmVhZCAqL1xuLVx0XHRcdHN0cnVjdCBiaW8gKmJpbztcbi1cbi1cdFx0XHRfX3JxX2Zvcl9lYWNoX2JpbyhiaW8sIHJxKVxuLVx0XHRcdFx0emVyb19maWxsX2JpbyhiaW8pO1xuLVx0XHR9XG4mIzQzO1x0XHQvKiBTaG9ydCByZWFkLiBaZXJvIG91dCB0aGUgdW5yZWFkIHRhaWwgYmV5b25kIGNtZC1cdTAwM2VyZXQuICovXG4mIzQzO1x0XHRpZiAoY21kLVx1MDAzZXJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGNtZC1cdTAwM2VyZXQgIT0gYmxrX3JxX2J5dGVzKHJxKSlcbiYjNDM7XHRcdFx0emxvb3BfZmlsbF96ZXJvX3JxKHJxLCBjbWQtXHUwMDNlcmV0KTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFJFUV9PUF9XUklURTpcbiBcdGNhc2UgUkVRX09QX1pPTkVfQVBQRU5EOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX1pPTkVEX0xPT1AmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9aT05FRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3psb29wX2NvbXBsZXRlX3JxJiMzNDssCiAgICAmIzM0O3psb29wX3F1ZXVlX3JxJiMzNDssCiAgICAmIzM0O3psb29wX2N0bF93cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYHpsb29wX2NvbXBsZXRlX3JxYCB0byBjb3JyZWN0bHkgemVybyBvdXQgdGhlIHVucmVhZCB0YWlsIG9mIGEgcmVxdWVzdCBiZXlvbmQgYGNtZC1cdTAwM2VyZXRgIGZvciBzaG9ydCByZWFkcywgcmVwbGFjaW5nIHRoZSBwcmV2aW91cyBgemVyb19maWxsX2Jpb2AgYXBwcm9hY2guIFRoZSBgemxvb3BgIGRyaXZlciBpcyBhIHNvZnR3YXJlLWVtdWxhdGVkIHpvbmVkIGJsb2NrIGRldmljZSB0aGF0IGNhbiBiZSBmdWxseSBleGVyY2lzZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gRnV6emluZyB0aGlzIHJlcXVpcmVzIGVuYWJsaW5nIGBCTEtfREVWX1pPTkVEX0xPT1BgIGFuZCBpdHMgZGVwZW5kZW5jeSBgQkxLX0RFVl9aT05FRGAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2NjgwOTVmMmU1MWVhYTg2ZWNlZDY3NWFlOTRhZmZjODI2MWI3ZDlmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMzEgMTU6MTE6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3psb29wLmMgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmMKaW5kZXggNTVlZWI2YWFjMGVhMy4uNDI5NjdlN2FlYTU4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96bG9vcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svemxvb3AuYwpAQCAtNzk4LDYgJiM0Mzs3OTgsMjYgQEAgc3RhdGljIHZvaWQgemxvb3BfY21kX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJY3VycmVudC0mZ3Q7ZmxhZ3MgPSBvcmlnX2ZsYWdzOwogfQogCiYjNDM7c3RhdGljIHZvaWQgemxvb3BfZmlsbF96ZXJvX3JxKHN0cnVjdCByZXF1ZXN0ICpycSwgdW5zaWduZWQgaW50IHplcm9fZnJvbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByZXFfaXRlcmF0b3IgaXRlcjsKJiM0MzsJc3RydWN0IGJpb192ZWMgYnY7CiYjNDM7CXVuc2lnbmVkIGludCBwb3MgPSAwOwomIzQzOwl1bnNpZ25lZCBpbnQgZW5kLCBvZmY7CiYjNDM7CiYjNDM7CXJxX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIHJxLCBpdGVyKSB7CiYjNDM7CQllbmQgPSBwb3MgJiM0MzsgYnYuYnZfbGVuOwomIzQzOwkJaWYgKGVuZCAmZ3Q7IHplcm9fZnJvbSkgewomIzQzOwkJCW9mZiA9IDA7CiYjNDM7CQkJaWYgKHBvcyAmbHQ7IHplcm9fZnJvbSkKJiM0MzsJCQkJb2ZmID0gemVyb19mcm9tIC0gcG9zOwomIzQzOwkJCW1lbXplcm9fcGFnZShidi5idl9wYWdlLCBidi5idl9vZmZzZXQgJiM0Mzsgb2ZmLAomIzQzOwkJCQkgICAgIGJ2LmJ2X2xlbiAtIG9mZik7CiYjNDM7CQl9CiYjNDM7CQlwb3MgPSBlbmQ7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB6bG9vcF9jb21wbGV0ZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJc3RydWN0IHpsb29wX2NtZCAqY21kID0gYmxrX21xX3JxX3RvX3BkdShycSk7CkBAIC04MTIsMTMgJiM0Mzs4MzIsOSBAQCBzdGF0aWMgdm9pZCB6bG9vcF9jb21wbGV0ZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpCiAJCQlwcl9lcnIoJiMzNDtab25lICV1OiBmYWlsZWQgcmVhZCBzZWN0b3IgJWxsdSwgJWxsdSBzZWN0b3JzXG4mIzM0OywKIAkJCSAgICAgICB6b25lX25vLCBjbWQtJmd0O3NlY3RvciwgY21kLSZndDtucl9zZWN0b3JzKTsKIAotCQlpZiAoY21kLSZndDtyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IGNtZC0mZ3Q7cmV0ICE9IGJsa19ycV9ieXRlcyhycSkpIHsKLQkJCS8qIHNob3J0IHJlYWQgKi8KLQkJCXN0cnVjdCBiaW8gKmJpbzsKLQotCQkJX19ycV9mb3JfZWFjaF9iaW8oYmlvLCBycSkKLQkJCQl6ZXJvX2ZpbGxfYmlvKGJpbyk7Ci0JCX0KJiM0MzsJCS8qIFNob3J0IHJlYWQuIFplcm8gb3V0IHRoZSB1bnJlYWQgdGFpbCBiZXlvbmQgY21kLSZndDtyZXQuICovCiYjNDM7CQlpZiAoY21kLSZndDtyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IGNtZC0mZ3Q7cmV0ICE9IGJsa19ycV9ieXRlcyhycSkpCiYjNDM7CQkJemxvb3BfZmlsbF96ZXJvX3JxKHJxLCBjbWQtJmd0O3JldCk7CiAJCWJyZWFrOwogCWNhc2UgUkVRX09QX1dSSVRFOgogCWNhc2UgUkVRX09QX1pPTkVfQVBQRU5EOgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDM2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyBhIFpsb29wIEJsb2NrIERyaXZlciBQYXRjaCoqCgpBbHJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIGNsZWFybHkgZm9jdXNlZCBvbiBvcHRpbWl6aW5nIHplcm8tZmlsbGluZyBpbiB0aGUgYHpsb29wYCBibG9jayBkcml2ZXIuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgY2VudGVyZWQgYXJvdW5kIGBkcml2ZXJzL2Jsb2NrL3psb29wLmNgLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiwgYHpsb29wX2ZpbGxfemVyb19ycWAsIGFuZCBtb2RpZmllcyB0aGUgZXhpc3RpbmcgYHpsb29wX2NvbXBsZXRlX3JxYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgYXBwZWFycyB0byBpbnZvbHZlIHJlcGxhY2luZyB0aGUgbW9yZSBnZW5lcmljIGB6ZXJvX2ZpbGxfYmlvKGJpbylgIGNhbGwgd2l0aCBhIG1vcmUgdGFyZ2V0ZWQgYHpsb29wX2ZpbGxfemVyb19ycShycSwgY21kLSZndDtyZXQpYCB3aGVuIGRlYWxpbmcgd2l0aCBzaG9ydCByZWFkcy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgbGlrZWx5IGltcHJvdmVzIHRoZSBlZmZpY2llbmN5IG9mIGhhbmRsaW5nIHplcm8tZmlsbGVkIGJsb2NrcyB3aXRoaW4gdGhlIGB6bG9vcGAgZHJpdmVyLiBUaGlzIGNvdWxkIG1lYW4gYSBwZXJmb3JtYW5jZSBib29zdCBmb3Igb3BlcmF0aW9ucyB0aGF0IGFyZSBjb21tb25seSB6ZXJvLWZpbGxlZCwgcGVyaGFwcyBkdXJpbmcgY3JlYXRpb24gb3IgZGF0YSBzY3J1YmJpbmcuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUgb2YgYGRyaXZlcnMvYmxvY2svemxvb3AuY2AgaXRzZWxmIG5vdyB0byB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIGNvbnRleHQgYW5kIHdoYXQgY29uZGl0aW9ucywgbGlrZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFjdHVhbGx5IGVuYWJsZSB0aGlzIG9wdGltaXphdGlvbi4gVGhpcyBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgcGF0Y2gmIzM5O3MgaW1wYWN0IGFuZCBpdHMgcmVsZXZhbmNlIHRvIHRoZSBvdmVyYWxsIHN5c3RlbSBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3psb29wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0zNTY9Y29uZmlnIEJMS19ERVZfWk9ORURfTE9PUFxuLS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNjctXHQgIGVjaG8gXCYjMzQ7YWRkIGlkPTAsem9uZV9zaXplX21iPTI1NixjYXBhY2l0eV9tYj0xNjM4NCxjb252X3pvbmVzPTExXCYjMzQ7IFx1MDAzZSBcXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjM2ODpcdFx0L2Rldi96bG9vcC1jb250cm9sXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzY5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MjcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBab25lZCBMb29wYmFjayBCbG9jayBEZXZpY2UgRHJpdmVyKioKCk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIEkmIzM5O20gbG9va2luZyBhdCBwb2ludHMgdG8gYEJMS19ERVZfWk9ORURfTE9PUGAuICBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGlzIGB6bG9vcF9jb21wbGV0ZV9ycWAgYWN0dWFsbHkgcmVhY2hhYmxlPyBSaWdodCwgaXTigJlzIGEgYmxvY2sgZHJpdmVyLCBzbyB5ZXMsIGl0ICpzaG91bGQqIGJlLiBBaCwgd2FpdCBhIG1pbnV0ZSwgYHpsb29wX2NvbXBsZXRlX3JxYCBpcyBjYWxsZWQgd2hlbiBhIHJlcXVlc3QgY29tcGxldGVzLCBzbyB0aGF0IG1ha2VzIHNlbnNlLiBUaGUgZHJpdmVyIGluIHF1ZXN0aW9uIGlzIGB6bG9vcGAsIHdoaWNoLCBpZiBtZW1vcnkgc2VydmVzLCBpcyB0aGF0IHpvbmVkIGxvb3BiYWNrIGRldmljZS4gTm93LCBpcyBgemxvb3BgIGEgcmVhbCBkcml2ZXIgb3Igb25lIG9mIHRob3NlIHRlc3QgZHJpdmVycz8gSSB0aGluayBJIGNhbiBnZXQgYSBiZXR0ZXIgcGljdHVyZSBoZXJlOiBsZXQgbWUgY2hlY2suLi4gWWVwLiBGcm9tIHRoYXQgY29tbWFuZCwgaXQgaXM6ICBgZWNobyAmIzM0O2FkZCBpZD0wLHpvbmVfc2l6ZV9tYj0yNTYsY2FwYWNpdHlfbWI9MTYzODQsY29udl96b25lcz0xMSYjMzQ7ICZndDsgL2Rldi96bG9vcC1jb250cm9sYC4gSSByZW1lbWJlciBzZWVpbmcgdGhpcyBhIHdoaWxlIGJhY2suIEl0JiMzOTtzIGEgc29mdHdhcmUtZW11bGF0ZWQsIHpvbmVkIGJsb2NrIGRldmljZSwgcGVyZmVjdCBmb3IgdGVzdGluZy4gRXhjZWxsZW50LiBJdCYjMzk7cyBhbHNvIGZ1enphYmxlIGJ5IHN5emthbGxlci4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLCBzdGFydGluZyB3aXRoIGB6bG9vcF9jb21wbGV0ZV9ycWAgYW5kIGB6bG9vcF9maWxsX3plcm9fcnFgLiBIbW0sIGB6bG9vcF9maWxsX3plcm9fcnFgIGlzIG1hcmtlZCBhcyBzdGF0aWMuIGB6bG9vcF9jb21wbGV0ZV9ycWAgaXMgYWxzbyBzdGF0aWMuIFJpZ2h0LiBOZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIGB6bG9vcGAgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3psb29wX2NvbXBsZXRlX3JxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svemxvb3AuYz04MDE9c3RhdGljIHZvaWQgemxvb3BfZmlsbF96ZXJvX3JxKHN0cnVjdCByZXF1ZXN0ICpycSwgdW5zaWduZWQgaW50IHplcm9fZnJvbSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODIwLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjgyMTpzdGF0aWMgdm9pZCB6bG9vcF9jb21wbGV0ZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODIyLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9OTMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyB6bG9vcF9tcV9vcHMgPSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTMyLVx0LnF1ZXVlX3JxICAgICAgID0gemxvb3BfcXVldWVfcnEsXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTMzOlx0LmNvbXBsZXRlXHQ9IHpsb29wX2NvbXBsZXRlX3JxLFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkzNC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MTIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgWkZTIFJlcXVlc3QgUXVldWUqKgoKT2theSwgc28gYHpsb29wX3F1ZXVlX3JxYCBpcyB0aGUgY29yZSBmdW5jdGlvbiBmb3IgYWN0dWFsbHkgZ2V0dGluZyByZXF1ZXN0cyBpbnRvIHRoZSBzeXN0ZW0uIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBCdXQgSSBuZWVkIG1vcmUgY29udGV4dCwgYSBiaWdnZXIgcGljdHVyZS4gV2hlcmUgZG9lcyB0aGlzIGZpdCBpbiB0aGUgb3ZlcmFsbCBmbG93PyBJIHNob3VsZCByZWFsbHkgZ2V0IGEgZmVlbCBmb3IgaG93IGV2ZXJ5dGhpbmcgaXMgb3JnYW5pemVkIGluIGB6bG9vcC5jYC4gTGV0JiMzOTtzIHNlZSB3aGF0IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBoYW5naW5nIG91dCBpbiB0aGVyZS4gVW5kZXJzdGFuZGluZyB0aGUgbmVpZ2hib3JzIG9mIGB6bG9vcF9xdWV1ZV9ycWAgaXMga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3psb29wXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svemxvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjU5IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MjU9ZW51bSB7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQxLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjQyOnN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHpsb29wX29wdF90b2tlbnMgPSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDMtXHR7IFpMT09QX09QVF9JRCxcdFx0XHRcJiMzNDtpZD0lZFwmIzM0O1x0fSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzQtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzU6c3RydWN0IHpsb29wX29wdGlvbnMge1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc2LVx0dW5zaWduZWQgaW50XHRcdG1hc2s7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTk1PWVudW0ge1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDAtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAxOmVudW0gemxvb3Bfem9uZV9mbGFncyB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAyLVx0WkxPT1BfWk9ORV9DT05WID0gMCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTA5LSAqL1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjExMDpzdHJ1Y3Qgemxvb3Bfem9uZSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTExLVx0c3RydWN0IGxpc3RfaGVhZFx0b3Blbl96b25lX2VudHJ5O1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjMtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTI0OnN0cnVjdCB6bG9vcF9kZXZpY2Uge1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyNS1cdHVuc2lnbmVkIGludFx0XHRpZDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTUxLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE1MjpcdHN0cnVjdCB6bG9vcF96b25lXHR6b25lc1tdIF9fY291bnRlZF9ieShucl96b25lcyk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTUzLX07XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTU0LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE1NTpzdHJ1Y3Qgemxvb3BfY21kIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNTYtXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHdvcms7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE2NC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNjU6c3RhdGljIERFRklORV9JRFIoemxvb3BfaW5kZXhfaWRyKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNjY6c3RhdGljIERFRklORV9NVVRFWCh6bG9vcF9jdGxfbXV0ZXgpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTE2Ny1cbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xNjg9c3RhdGljIHVuc2lnbmVkIGludCBycV96b25lX25vKHN0cnVjdCByZXF1ZXN0ICpycSlcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNjkte1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjE3MDpcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IHJxLVx1MDAzZXEtXHUwMDNlcXVldWVkYXRhO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3MS1cbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTgwLSAqL1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjE4MTpzdGF0aWMgaW5saW5lIHZvaWQgemxvb3BfbHJ1X3JvdGF0ZV9vcGVuX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE4MjpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHpsb29wX3pvbmUgKnpvbmUpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTgzLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTkxLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE5MjpzdGF0aWMgaW5saW5lIHZvaWQgemxvb3BfbHJ1X3JlbW92ZV9vcGVuX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE5MzpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHpsb29wX3pvbmUgKnpvbmUpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTk0LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjAzLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjIwNDpzdGF0aWMgaW5saW5lIGJvb2wgemxvb3BfY2FuX29wZW5fem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8pXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjA1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjEzLSAqL1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjIxNDpzdGF0aWMgYm9vbCB6bG9vcF9jbG9zZV9pbXBfb3Blbl96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbylcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yMTUte1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjIxNjpcdHN0cnVjdCB6bG9vcF96b25lICp6b25lO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTIxNy1cbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjE5LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjIyMDpcdGlmICh6bG9vcF9jYW5fb3Blbl96b25lKHpsbykpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjIxLVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjM0LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjIzNTpzdGF0aWMgYm9vbCB6bG9vcF9vcGVuX2Nsb3NlZF9vcl9lbXB0eV96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyMzY6XHRcdFx0XHRcdCAgICBzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yMzctXHRcdFx0XHRcdCAgICBib29sIGV4cGxpY2l0KVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yNDUtXHRcdCAqL1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjI0NjpcdFx0aWYgKCF6bG9vcF9jYW5fb3Blbl96b25lKHpsbykpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjQ3LVx0XHRcdGdvdG8gZmFpbDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjUzLVx0XHQgKi9cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyNTQ6XHRcdGlmICghemxvb3BfY2xvc2VfaW1wX29wZW5fem9uZSh6bG8pKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI1NS1cdFx0XHRnb3RvIGZhaWw7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI3Mi1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyNzM6c3RhdGljIGJvb2wgemxvb3BfZG9fb3Blbl96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyNzQ6XHRcdFx0ICAgICAgIHN0cnVjdCB6bG9vcF96b25lICp6b25lLCBib29sIGV4cGxpY2l0KVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI3NS17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI4MC1cdFx0XHR6b25lLVx1MDAzZWNvbmQgPSBCTEtfWk9ORV9DT05EX0VYUF9PUEVOO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjI4MTpcdFx0emxvb3BfbHJ1X3JvdGF0ZV9vcGVuX3pvbmUoemxvLCB6b25lKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yODItXHRcdHJldHVybiB0cnVlO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yODQtXHRjYXNlIEJMS19aT05FX0NPTkRfQ0xPU0VEOlxuZHJpdmVycy9ibG9jay96bG9vcC5jOjI4NTpcdFx0cmV0dXJuIHpsb29wX29wZW5fY2xvc2VkX29yX2VtcHR5X3pvbmUoemxvLCB6b25lLCBleHBsaWNpdCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjg2LVx0ZGVmYXVsdDpcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjkwLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjI5MTpzdGF0aWMgdm9pZCB6bG9vcF9tYXJrX2Z1bGwoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCBzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSlcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yOTIte1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yOTQtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Mjk1Olx0emxvb3BfbHJ1X3JlbW92ZV9vcGVuX3pvbmUoemxvLCB6b25lKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yOTYtXHR6b25lLVx1MDAzZWNvbmQgPSBCTEtfWk9ORV9DT05EX0ZVTEw7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI5OS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzozMDA6c3RhdGljIHZvaWQgemxvb3BfbWFya19lbXB0eShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHN0cnVjdCB6bG9vcF96b25lICp6b25lKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTMwMS17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTMwMy1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzozMDQ6XHR6bG9vcF9scnVfcmVtb3ZlX29wZW5fem9uZSh6bG8sIHpvbmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTMwNS1cdHpvbmUtXHUwMDNlY29uZCA9IEJMS19aT05FX0NPTkRfRU1QVFk7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTMwOC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzozMDk6c3RhdGljIGludCB6bG9vcF91cGRhdGVfc2VxX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zMTAte1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjMxMTpcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXHUwMDI2emxvLVx1MDAzZXpvbmVzW3pvbmVfbm9dO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTMxMi1cdHN0cnVjdCBrc3RhdCBzdGF0O1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNDAtXHRpZiAoIWZpbGVfc2VjdG9ycykge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjM0MTpcdFx0emxvb3BfbWFya19lbXB0eSh6bG8sIHpvbmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTM0Mi1cdH0gZWxzZSBpZiAoZmlsZV9zZWN0b3JzID09IHpsby1cdTAwM2V6b25lX2NhcGFjaXR5KSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzQzOlx0XHR6bG9vcF9tYXJrX2Z1bGwoemxvLCB6b25lKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNDQtXHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNTQtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzU1OnN0YXRpYyBpbnQgemxvb3Bfb3Blbl96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzU2LXtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozNTc6XHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSA9IFx1MDAyNnpsby1cdTAwM2V6b25lc1t6b25lX25vXTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNTgtXHRpbnQgcmV0ID0gMDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzY1LVx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChaTE9PUF9aT05FX1NFUV9FUlJPUiwgXHUwMDI2em9uZS1cdTAwM2VmbGFncykpIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozNjY6XHRcdHJldCA9IHpsb29wX3VwZGF0ZV9zZXFfem9uZSh6bG8sIHpvbmVfbm8pO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTM2Ny1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzcwLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjM3MTpcdGlmICghemxvb3BfZG9fb3Blbl96b25lKHpsbywgem9uZSwgdHJ1ZSkpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzcyLVx0XHRyZXQgPSAtRUlPO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNzktXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzgwOnN0YXRpYyBpbnQgemxvb3BfY2xvc2Vfem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHVuc2lnbmVkIGludCB6b25lX25vKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM4MS17XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzgyOlx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcdTAwMjZ6bG8tXHUwMDNlem9uZXNbem9uZV9ub107XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzgzLVx0aW50IHJldCA9IDA7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM5MC1cdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoWkxPT1BfWk9ORV9TRVFfRVJST1IsIFx1MDAyNnpvbmUtXHUwMDNlZmxhZ3MpKSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzkxOlx0XHRyZXQgPSB6bG9vcF91cGRhdGVfc2VxX3pvbmUoemxvLCB6b25lX25vKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zOTItXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQwMS1cdFx0c3Bpbl9sb2NrKFx1MDAyNnpvbmUtXHUwMDNld3BfbG9jayk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NDAyOlx0XHR6bG9vcF9scnVfcmVtb3ZlX29wZW5fem9uZSh6bG8sIHpvbmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTQwMy1cdFx0aWYgKHpvbmUtXHUwMDNld3AgPT0gem9uZS1cdTAwM2VzdGFydClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDIxLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjQyMjpzdGF0aWMgaW50IHpsb29wX3Jlc2V0X3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00MjMte1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjQyNDpcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXHUwMDI2emxvLVx1MDAzZXpvbmVzW3pvbmVfbm9dO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTQyNS1cdGludCByZXQgPSAwO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy00NDItXHRzcGluX2xvY2soXHUwMDI2em9uZS1cdTAwM2V3cF9sb2NrKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo0NDM6XHR6bG9vcF9tYXJrX2VtcHR5KHpsbywgem9uZSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDQ0LVx0Y2xlYXJfYml0KFpMT09QX1pPTkVfU0VRX0VSUk9SLCBcdTAwMjZ6b25lLVx1MDAzZWZsYWdzKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDUyLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjQ1MzpzdGF0aWMgaW50IHpsb29wX3Jlc2V0X2FsbF96b25lcyhzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8pXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDU0LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDU4LVx0Zm9yIChpID0gemxvLVx1MDAzZW5yX2NvbnZfem9uZXM7IGkgXHUwMDNjIHpsby1cdTAwM2Vucl96b25lczsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo0NTk6XHRcdHJldCA9IHpsb29wX3Jlc2V0X3pvbmUoemxvLCBpKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00NjAtXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ2Ni1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo0Njc6c3RhdGljIGludCB6bG9vcF9maW5pc2hfem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHVuc2lnbmVkIGludCB6b25lX25vKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ2OC17XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NDY5Olx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcdTAwMjZ6bG8tXHUwMDNlem9uZXNbem9uZV9ub107XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDcwLVx0aW50IHJldCA9IDA7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ4Ny1cdHNwaW5fbG9jayhcdTAwMjZ6b25lLVx1MDAzZXdwX2xvY2spO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjQ4ODpcdHpsb29wX21hcmtfZnVsbCh6bG8sIHpvbmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ4OS1cdGNsZWFyX2JpdChaTE9PUF9aT05FX1NFUV9FUlJPUiwgXHUwMDI2em9uZS1cdTAwM2VmbGFncyk7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ5Ny1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo0OTg6c3RhdGljIHZvaWQgemxvb3BfcHV0X2NtZChzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDk5LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTA5LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjUxMDpzdGF0aWMgdm9pZCB6bG9vcF9yd19jb21wbGV0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGxvbmcgcmV0KVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTUxMS17XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTEyOlx0c3RydWN0IHpsb29wX2NtZCAqY21kID0gY29udGFpbmVyX29mKGlvY2IsIHN0cnVjdCB6bG9vcF9jbWQsIGlvY2IpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTUxMy1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MTQtXHRjbWQtXHUwMDNlcmV0ID0gcmV0O1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjUxNTpcdHpsb29wX3B1dF9jbWQoY21kKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MTYtfVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTUxNy1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1MTg6c3RhdGljIGludCB6bG9vcF9kb19ydyhzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTE5LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTIyLVx0dW5zaWduZWQgaW50IG5yX2J2ZWMgPSBibGtfcnFfbnJfYnZlYyhycSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTIzOlx0c3RydWN0IHpsb29wX2RldmljZSAqemxvID0gcnEtXHUwMDNlcS1cdTAwM2VxdWV1ZWRhdGE7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTI0Olx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcdTAwMjZ6bG8tXHUwMDNlem9uZXNbcnFfem9uZV9ubyhycSldO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTUyNS1cdHN0cnVjdCByZXFfaXRlcmF0b3IgcnFfaXRlcjtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTYwLVx0Y21kLVx1MDAzZWlvY2Iua2lfZmlscCA9IHpvbmUtXHUwMDNlZmlsZTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1NjE6XHRjbWQtXHUwMDNlaW9jYi5raV9jb21wbGV0ZSA9IHpsb29wX3J3X2NvbXBsZXRlO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTU2Mi1cdGlmICghemxvLVx1MDAzZWJ1ZmZlcmVkX2lvKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy01NzAtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTcxOnN0YXRpYyBpbnQgemxvb3Bfc2VxX3dyaXRlX3ByZXAoc3RydWN0IHpsb29wX2NtZCAqY21kKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTU3Mi17XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTczLVx0c3RydWN0IHJlcXVlc3QgKnJxID0gYmxrX21xX3JxX2Zyb21fcGR1KGNtZCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTc0Olx0c3RydWN0IHpsb29wX2RldmljZSAqemxvID0gcnEtXHUwMDNlcS1cdTAwM2VxdWV1ZWRhdGE7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTc1LVx0dW5zaWduZWQgaW50IHpvbmVfbm8gPSBycV96b25lX25vKHJxKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTc3LVx0Ym9vbCBpc19hcHBlbmQgPSByZXFfb3AocnEpID09IFJFUV9PUF9aT05FX0FQUEVORDtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1Nzg6XHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSA9IFx1MDAyNnpsby1cdTAwM2V6b25lc1t6b25lX25vXTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01NzktXHRzZWN0b3JfdCB6b25lX2VuZCA9IHpvbmUtXHUwMDNlc3RhcnQgJiM0MzsgemxvLVx1MDAzZXpvbmVfY2FwYWNpdHk7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTU5MS1cdFx0ICogSWYgb3JkZXJlZCB6b25lIGFwcGVuZCBpcyBpbiB1c2UsIHdlIGFscmVhZHkgY2hlY2tlZCBhbmQgc2V0XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTkyOlx0XHQgKiB0aGUgdGFyZ2V0IHNlY3RvciBpbiB6bG9vcF9xdWV1ZV9ycSgpLlxuZHJpdmVycy9ibG9jay96bG9vcC5jLTU5My1cdFx0ICovXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTYxMS1cdC8qIEltcGxpY2l0bHkgb3BlbiB0aGUgdGFyZ2V0IHpvbmUuICovXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NjEyOlx0aWYgKCF6bG9vcF9kb19vcGVuX3pvbmUoemxvLCB6b25lLCBmYWxzZSkpIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MTMtXHRcdHJldCA9IC1FSU87XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTYyNC1cdFx0aWYgKHpvbmUtXHUwMDNld3AgPT0gem9uZV9lbmQpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NjI1Olx0XHRcdHpsb29wX21hcmtfZnVsbCh6bG8sIHpvbmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTYyNi1cdH1cbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjMxLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjYzMjpzdGF0aWMgdm9pZCB6bG9vcF9ydyhzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjMzLXtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MzQtXHRzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBibGtfbXFfcnFfZnJvbV9wZHUoY21kKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2MzU6XHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBycS1cdTAwM2VxLVx1MDAzZXF1ZXVlZGF0YTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MzYtXHR1bnNpZ25lZCBpbnQgem9uZV9ubyA9IHJxX3pvbmVfbm8ocnEpO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MzktXHRib29sIGlzX3dyaXRlID0gcmVxX29wKHJxKSA9PSBSRVFfT1BfV1JJVEUgfHwgaXNfYXBwZW5kO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjY0MDpcdHN0cnVjdCB6bG9vcF96b25lICp6b25lO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTY0MS1cdGludCByZXQgPSAtRUlPO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy02NjYtXHRcdG11dGV4X2xvY2soXHUwMDI2em9uZS1cdTAwM2Vsb2NrKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2Njc6XHRcdHJldCA9IHpsb29wX3VwZGF0ZV9zZXFfem9uZSh6bG8sIHpvbmVfbm8pO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTY2OC1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpvbmUtXHUwMDNlbG9jayk7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY3NC1cdFx0bXV0ZXhfbG9jayhcdTAwMjZ6b25lLVx1MDAzZWxvY2spO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjY3NTpcdFx0cmV0ID0gemxvb3Bfc2VxX3dyaXRlX3ByZXAoY21kKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02NzYtXHRcdGlmICghcmV0KVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjY3NzpcdFx0XHRyZXQgPSB6bG9vcF9kb19ydyhjbWQpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTY3OC1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpvbmUtXHUwMDNlbG9jayk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjc5LVx0fSBlbHNlIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2ODA6XHRcdHJldCA9IHpsb29wX2RvX3J3KGNtZCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjgxLVx0fVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy02ODMtXHRpZiAocmV0ICE9IC1FSU9DQlFVRVVFRClcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2ODQ6XHRcdHpsb29wX3J3X2NvbXBsZXRlKFx1MDAyNmNtZC1cdTAwM2Vpb2NiLCByZXQpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjY4NTpcdHpsb29wX3B1dF9jbWQoY21kKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02ODYtfVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY4Ny1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2ODg6c3RhdGljIGlubGluZSBib29sIHpsb29wX3pvbmVfaXNfYWN0aXZlKHN0cnVjdCB6bG9vcF96b25lICp6b25lKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY4OS17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY5OS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3MDA6c3RhdGljIGludCB6bG9vcF9yZWNvcmRfc2FmZV93cHMoc3RydWN0IHpsb29wX2RldmljZSAqemxvKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTcwMS17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTcwNS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHpsby1cdTAwM2Vucl96b25lczsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3MDY6XHRcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXHUwMDI2emxvLVx1MDAzZXpvbmVzW2ldO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTcwNy1cdFx0c3RydWN0IGZpbGUgKmZpbGUgPSB6b25lLVx1MDAzZWZpbGU7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzA4LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjcwOTpcdFx0aWYgKCF6bG9vcF96b25lX2lzX2FjdGl2ZSh6b25lKSlcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03MTAtXHRcdFx0Y29udGludWU7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTcyNS0gKi9cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3MjY6c3RhdGljIGludCB6bG9vcF9mbHVzaChzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8pXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzI3LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzMxLVx0aWYgKHpsby1cdTAwM2VkaXNjYXJkX3dyaXRlX2NhY2hlKSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzMyOlx0XHRyZXQgPSB6bG9vcF9yZWNvcmRfc2FmZV93cHMoemxvKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03MzMtXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc0My1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3NDQ6c3RhdGljIHZvaWQgemxvb3BfaGFuZGxlX2NtZChzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzQ1LXtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NDYtXHRzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBibGtfbXFfcnFfZnJvbV9wZHUoY21kKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3NDc6XHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBycS1cdTAwM2VxLVx1MDAzZXF1ZXVlZGF0YTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NDgtXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc1Ny1cdFx0LypcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3NTg6XHRcdCAqIHpsb29wX3J3KCkgYWx3YXlzIGV4ZWN1dGVzIGFzeW5jaHJvbm91c2x5IG9yIGNvbXBsZXRlc1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc1OS1cdFx0ICogZGlyZWN0bHkuXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzYwLVx0XHQgKi9cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3NjE6XHRcdHpsb29wX3J3KGNtZCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzYyLVx0XHRyZXR1cm47XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzYzLVx0Y2FzZSBSRVFfT1BfRkxVU0g6XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzY0Olx0XHRjbWQtXHUwMDNlcmV0ID0gemxvb3BfZmx1c2goemxvKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NjUtXHRcdGJyZWFrO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc2Ni1cdGNhc2UgUkVRX09QX1pPTkVfUkVTRVQ6XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzY3Olx0XHRjbWQtXHUwMDNlcmV0ID0gemxvb3BfcmVzZXRfem9uZSh6bG8sIHJxX3pvbmVfbm8ocnEpKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NjgtXHRcdGJyZWFrO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc2OS1cdGNhc2UgUkVRX09QX1pPTkVfUkVTRVRfQUxMOlxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc3MDpcdFx0Y21kLVx1MDAzZXJldCA9IHpsb29wX3Jlc2V0X2FsbF96b25lcyh6bG8pO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc3MS1cdFx0YnJlYWs7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzcyLVx0Y2FzZSBSRVFfT1BfWk9ORV9GSU5JU0g6XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzczOlx0XHRjbWQtXHUwMDNlcmV0ID0gemxvb3BfZmluaXNoX3pvbmUoemxvLCBycV96b25lX25vKHJxKSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzc0LVx0XHRicmVhaztcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NzUtXHRjYXNlIFJFUV9PUF9aT05FX09QRU46XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Nzc2Olx0XHRjbWQtXHUwMDNlcmV0ID0gemxvb3Bfb3Blbl96b25lKHpsbywgcnFfem9uZV9ubyhycSkpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc3Ny1cdFx0YnJlYWs7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzc4LVx0Y2FzZSBSRVFfT1BfWk9ORV9DTE9TRTpcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3Nzk6XHRcdGNtZC1cdTAwM2VyZXQgPSB6bG9vcF9jbG9zZV96b25lKHpsbywgcnFfem9uZV9ubyhycSkpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc4MC1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc5MC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3OTE6c3RhdGljIHZvaWQgemxvb3BfY21kX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzkyLXtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3OTM6XHRzdHJ1Y3Qgemxvb3BfY21kICpjbWQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHpsb29wX2NtZCwgd29yayk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzk0LVx0aW50IG9yaWdfZmxhZ3MgPSBjdXJyZW50LVx1MDAzZWZsYWdzO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy03OTYtXHRjdXJyZW50LVx1MDAzZWZsYWdzIHw9IFBGX0xPQ0FMX1RIUk9UVExFIHwgUEZfTUVNQUxMT0NfTk9JTztcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3OTc6XHR6bG9vcF9oYW5kbGVfY21kKGNtZCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzk4LVx0Y3VycmVudC1cdTAwM2VmbGFncyA9IG9yaWdfZmxhZ3M7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTgwMC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo4MDE6c3RhdGljIHZvaWQgemxvb3BfZmlsbF96ZXJvX3JxKHN0cnVjdCByZXF1ZXN0ICpycSwgdW5zaWduZWQgaW50IHplcm9fZnJvbSlcbmRyaXZlcnMvYmxvY2svemxvb3AuYy04MDIte1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy04MjAtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODIxOnN0YXRpYyB2b2lkIHpsb29wX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcbmRyaXZlcnMvYmxvY2svemxvb3AuYy04MjIte1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjgyMzpcdHN0cnVjdCB6bG9vcF9jbWQgKmNtZCA9IGJsa19tcV9ycV90b19wZHUocnEpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjgyNDpcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IHJxLVx1MDAzZXEtXHUwMDNlcXVldWVkYXRhO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTgyNS1cdHVuc2lnbmVkIGludCB6b25lX25vID0gY21kLVx1MDAzZXNlY3RvciBcdTAwM2VcdTAwM2UgemxvLVx1MDAzZXpvbmVfc2hpZnQ7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODI2Olx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcdTAwMjZ6bG8tXHUwMDNlem9uZXNbem9uZV9ub107XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODI3LVx0YmxrX3N0YXR1c190IHN0cyA9IEJMS19TVFNfT0s7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTgzNi1cdFx0aWYgKGNtZC1cdTAwM2VyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBjbWQtXHUwMDNlcmV0ICE9IGJsa19ycV9ieXRlcyhycSkpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODM3Olx0XHRcdHpsb29wX2ZpbGxfemVyb19ycShycSwgY21kLVx1MDAzZXJldCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODM4LVx0XHRicmVhaztcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODc0LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjg3NTpzdGF0aWMgYm9vbCB6bG9vcF9zZXRfem9uZV9hcHBlbmRfc2VjdG9yKHN0cnVjdCByZXF1ZXN0ICpycSlcbmRyaXZlcnMvYmxvY2svemxvb3AuYy04NzYte1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjg3NzpcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IHJxLVx1MDAzZXEtXHUwMDNlcXVldWVkYXRhO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTg3OC1cdHVuc2lnbmVkIGludCB6b25lX25vID0gcnFfem9uZV9ubyhycSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODc5Olx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcdTAwMjZ6bG8tXHUwMDNlem9uZXNbem9uZV9ub107XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODgwLVx0c2VjdG9yX3Qgem9uZV9lbmQgPSB6b25lLVx1MDAzZXN0YXJ0ICYjNDM7IHpsby1cdTAwM2V6b25lX2NhcGFjaXR5O1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy04OTMtXHRpZiAoem9uZS1cdTAwM2V3cCBcdTAwM2U9IHpvbmVfZW5kKVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjg5NDpcdFx0emxvb3BfbWFya19mdWxsKHpsbywgem9uZSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODk1LVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy05MDAtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTAxOnN0YXRpYyBibGtfc3RhdHVzX3Qgemxvb3BfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTAyLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJsa19tcV9xdWV1ZV9kYXRhICpiZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTA0LVx0c3RydWN0IHJlcXVlc3QgKnJxID0gYmQtXHUwMDNlcnE7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTA1Olx0c3RydWN0IHpsb29wX2NtZCAqY21kID0gYmxrX21xX3JxX3RvX3BkdShycSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTA2Olx0c3RydWN0IHpsb29wX2RldmljZSAqemxvID0gcnEtXHUwMDNlcS1cdTAwM2VxdWV1ZWRhdGE7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTA3LVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy05MTgtXHRpZiAoemxvLVx1MDAzZW9yZGVyZWRfem9uZV9hcHBlbmQgXHUwMDI2XHUwMDI2IHJlcV9vcChycSkgPT0gUkVRX09QX1pPTkVfQVBQRU5EKSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTE5Olx0XHRpZiAoIXpsb29wX3NldF96b25lX2FwcGVuZF9zZWN0b3IocnEpKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkyMC1cdFx0XHRyZXR1cm4gQkxLX1NUU19JT0VSUjtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTI0LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjkyNTpcdElOSVRfV09SSyhcdTAwMjZjbWQtXHUwMDNld29yaywgemxvb3BfY21kX3dvcmtmbik7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTI2LVx0cXVldWVfd29yayh6bG8tXHUwMDNld29ya3F1ZXVlLCBcdTAwMjZjbWQtXHUwMDNld29yayk7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkzMC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5MzE6c3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIHpsb29wX21xX29wcyA9IHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5MzI6XHQucXVldWVfcnEgICAgICAgPSB6bG9vcF9xdWV1ZV9ycSxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5MzM6XHQuY29tcGxldGVcdD0gemxvb3BfY29tcGxldGVfcnEsXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTM0LX07XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTM1LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjkzNjpzdGF0aWMgaW50IHpsb29wX29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05Mzcte1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjkzODpcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IGRpc2stXHUwMDNlcHJpdmF0ZV9kYXRhO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTkzOS1cdGludCByZXQ7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTQwLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjk0MTpcdHJldCA9IG11dGV4X2xvY2tfa2lsbGFibGUoXHUwMDI2emxvb3BfY3RsX211dGV4KTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05NDItXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy05NDYtXHRcdHJldCA9IC1FTlhJTztcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5NDc6XHRtdXRleF91bmxvY2soXHUwMDI2emxvb3BfY3RsX211dGV4KTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05NDgtXHRyZXR1cm4gcmV0O1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy05NTAtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTUxOnN0YXRpYyBpbnQgemxvb3BfcmVwb3J0X3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IsXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTUyLVx0XHR1bnNpZ25lZCBpbnQgbnJfem9uZXMsIHN0cnVjdCBibGtfcmVwb3J0X3pvbmVzX2FyZ3MgKmFyZ3MpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTUzLXtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5NTQ6XHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBkaXNrLVx1MDAzZXByaXZhdGVfZGF0YTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05NTUtXHRzdHJ1Y3QgYmxrX3pvbmUgYmxreiA9IHt9O1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy05NjUtXHRcdHVuc2lnbmVkIGludCB6b25lX25vID0gZmlyc3QgJiM0MzsgaTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5NjY6XHRcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXHUwMDI2emxvLVx1MDAzZXpvbmVzW3pvbmVfbm9dO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTk2Ny1cbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTcwLVx0XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KFpMT09QX1pPTkVfU0VRX0VSUk9SLCBcdTAwMjZ6b25lLVx1MDAzZWZsYWdzKSkge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjk3MTpcdFx0XHRyZXQgPSB6bG9vcF91cGRhdGVfc2VxX3pvbmUoemxvLCB6b25lX25vKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05NzItXHRcdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDAxLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwMDI6c3RhdGljIHZvaWQgemxvb3BfZnJlZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMDMte1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwMDQ6XHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBkaXNrLVx1MDAzZXByaXZhdGVfZGF0YTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDA1LVx0dW5zaWduZWQgaW50IGk7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMDktXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB6bG8tXHUwMDNlbnJfem9uZXM7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAxMDpcdFx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcdTAwMjZ6bG8tXHUwMDNlem9uZXNbaV07XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAxMS1cbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAyMi1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDIzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgemxvb3BfZm9wcyA9IHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDI0LVx0Lm93bmVyXHRcdFx0PSBUSElTX01PRFVMRSxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDI1Olx0Lm9wZW5cdFx0XHQ9IHpsb29wX29wZW4sXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAyNjpcdC5yZXBvcnRfem9uZXNcdFx0PSB6bG9vcF9yZXBvcnRfem9uZXMsXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAyNzpcdC5mcmVlX2Rpc2tcdFx0PSB6bG9vcF9mcmVlX2Rpc2ssXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAyOC19O1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xMDMwPV9fcHJpbnRmKDMsIDQpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAzMTpzdGF0aWMgc3RydWN0IGZpbGUgKnpsb29wX2ZpbHBfb3Blbl9mbXQoaW50IG9mbGFncywgdW1vZGVfdCBtb2RlLFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMzItXHRcdGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDQ4LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwNDk6c3RhdGljIGludCB6bG9vcF9nZXRfYmxvY2tfc2l6ZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTA1MDpcdFx0XHRcdHN0cnVjdCB6bG9vcF96b25lICp6b25lKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwNTEte1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDc5LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwODA6c3RhdGljIGludCB6bG9vcF9pbml0X3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCBzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDgxLVx0XHRcdCAgIHVuc2lnbmVkIGludCB6b25lX25vLCBib29sIHJlc3RvcmUpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTA4Mi17XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTA4MzpcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXHUwMDI2emxvLVx1MDAzZXpvbmVzW3pvbmVfbm9dO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwODQtXHRpbnQgb2ZsYWdzID0gT19SRFdSO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTA1LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExMDY6XHRcdHpvbmUtXHUwMDNlZmlsZSA9IHpsb29wX2ZpbHBfb3Blbl9mbXQob2ZsYWdzLCAwNjAwLCBcJiMzNDslcy8ldS9jbnYtJTA2dVwmIzM0OyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTA3LVx0XHRcdFx0XHR6bG8tXHUwMDNlYmFzZV9kaXIsIHpsby1cdTAwM2VpZCwgem9uZV9ubyk7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMTUtXHRcdGlmICghemxvLVx1MDAzZWJsb2NrX3NpemUpIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTE2Olx0XHRcdHJldCA9IHpsb29wX2dldF9ibG9ja19zaXplKHpsbywgem9uZSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTExNy1cdFx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTQ1LVx0LyogU2VxdWVudGlhbCB6b25lIGZpbGUuICovXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE0NjpcdHpvbmUtXHUwMDNlZmlsZSA9IHpsb29wX2ZpbHBfb3Blbl9mbXQob2ZsYWdzLCAwNjAwLCBcJiMzNDslcy8ldS9zZXEtJTA2dVwmIzM0OyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTQ3LVx0XHRcdFx0XHQgemxvLVx1MDAzZWJhc2VfZGlyLCB6bG8tXHUwMDNlaWQsIHpvbmVfbm8pO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTU1LVx0aWYgKCF6bG8tXHUwMDNlYmxvY2tfc2l6ZSkge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjExNTY6XHRcdHJldCA9IHpsb29wX2dldF9ibG9ja19zaXplKHpsbywgem9uZSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE1Ny1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE2MC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTYxOlx0emxvb3BfZ2V0X2Jsb2NrX3NpemUoemxvLCB6b25lKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTYyLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNjMtXHRtdXRleF9sb2NrKFx1MDAyNnpvbmUtXHUwMDNlbG9jayk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE2NDpcdHJldCA9IHpsb29wX3VwZGF0ZV9zZXFfem9uZSh6bG8sIHpvbmVfbm8pO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNjUtXHRtdXRleF91bmxvY2soXHUwMDI2em9uZS1cdTAwM2Vsb2NrKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE2OS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTcwOnN0YXRpYyBib29sIHpsb29wX2Rldl9leGlzdHMoc3RydWN0IHpsb29wX2RldmljZSAqemxvKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNzEte1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTc0LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExNzU6XHRjbnYgPSB6bG9vcF9maWxwX29wZW5fZm10KE9fUkRPTkxZLCAwNjAwLCBcJiMzNDslcy8ldS9jbnYtJTA2dVwmIzM0OyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTc2LVx0XHRcdFx0ICB6bG8tXHUwMDNlYmFzZV9kaXIsIHpsby1cdTAwM2VpZCwgMCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE3NzpcdHNlcSA9IHpsb29wX2ZpbHBfb3Blbl9mbXQoT19SRE9OTFksIDA2MDAsIFwmIzM0OyVzLyV1L3NlcS0lMDZ1XCYjMzQ7LFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNzgtXHRcdFx0XHQgIHpsby1cdTAwM2ViYXNlX2RpciwgemxvLVx1MDAzZWlkLCAwKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE4OC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTg5OnN0YXRpYyBpbnQgemxvb3BfY3RsX2FkZChzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cylcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTkwLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE5Ny1cdHVuc2lnbmVkIGludCBucl96b25lcywgaSwgajtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTk4Olx0c3RydWN0IHpsb29wX2RldmljZSAqemxvO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTExOTktXHRpbnQgcmV0ID0gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTIyNS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjI2Olx0cmV0ID0gbXV0ZXhfbG9ja19raWxsYWJsZShcdTAwMjZ6bG9vcF9jdGxfbXV0ZXgpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyMjctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjMxLVx0aWYgKG9wdHMtXHUwMDNlaWQgXHUwMDNlPSAwKSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTIzMjpcdFx0cmV0ID0gaWRyX2FsbG9jKFx1MDAyNnpsb29wX2luZGV4X2lkciwgemxvLFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyMzMtXHRcdFx0XHQgIG9wdHMtXHUwMDNlaWQsIG9wdHMtXHUwMDNlaWQgJiM0MzsgMSwgR0ZQX0tFUk5FTCk7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyMzYtXHR9IGVsc2Uge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyMzc6XHRcdHJldCA9IGlkcl9hbGxvYyhcdTAwMjZ6bG9vcF9pbmRleF9pZHIsIHpsbywgMCwgMCwgR0ZQX0tFUk5FTCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTIzOC1cdH1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjM5Olx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpsb29wX2N0bF9tdXRleCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI0MC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyNzQtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTI3NTpcdHpsby1cdTAwM2VkYXRhX2RpciA9IHpsb29wX2ZpbHBfb3Blbl9mbXQoT19SRE9OTFkgfCBPX0RJUkVDVE9SWSwgMCwgXCYjMzQ7JXMvJXVcJiMzNDssXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI3Ni1cdFx0XHRcdFx0ICAgIHpsby1cdTAwM2ViYXNlX2RpciwgemxvLVx1MDAzZWlkKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI4NS1cdCAqIElmIHdlIGFscmVhZHkgaGF2ZSB6b25lIGZpbGVzLCB3ZSBhcmUgcmVzdG9yaW5nIGEgZGV2aWNlIGNyZWF0ZWQgYnkgYVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyODY6XHQgKiBwcmV2aW91cyBhZGQgb3BlcmF0aW9uLiBJbiB0aGlzIGNhc2UsIHpsb29wX2luaXRfem9uZSgpIHdpbGwgY2hlY2tcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjg3LVx0ICogdGhhdCB0aGUgem9uZSBmaWxlcyBhcmUgY29uc2lzdGVudCB3aXRoIHRoZSB6b25lIGNvbmZpZ3VyYXRpb24gZ2l2ZW4uXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI4OC1cdCAqL1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyODk6XHRyZXN0b3JlID0gemxvb3BfZGV2X2V4aXN0cyh6bG8pO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyOTAtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl96b25lczsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjkxOlx0XHRyZXQgPSB6bG9vcF9pbml0X3pvbmUoemxvLCBvcHRzLCBpLCByZXN0b3JlKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjkyLVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMzAxLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEzMDI6XHR6bG8tXHUwMDNldGFnX3NldC5vcHMgPSBcdTAwMjZ6bG9vcF9tcV9vcHM7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTMwMy1cdHpsby1cdTAwM2V0YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IG9wdHMtXHUwMDNlbnJfcXVldWVzO1xuLS1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDcyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWm9uZWQgQmxvY2sgTG9vcCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIHRoZSBgemxvb3BgIGRyaXZlciwgYW5kIGl0IHNlZW1zIGxpa2Ugd2UmIzM5O3JlIGdldHRpbmcgc29tZSB1cGRhdGVzLiBUaGUgZHJpdmVyIGl0c2VsZiBpcyBjbGVhcmx5IGlkZW50aWZpZWQgYXMgYHpsb29wYCwgYW5kIHRoZSBhdXRob3IgaGFzIGxpc3RlZCBvdXQgYWxsIHRoZSBmdW5jdGlvbnMgd2l0aGluIHRoZSBkcml2ZXIuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gSSYjMzk7bSBzZWVpbmcgZnVuY3Rpb25zIGxpa2UgYHpsb29wX3F1ZXVlX3JxYCwgYHpsb29wX2NvbXBsZXRlX3JxYCwgYHpsb29wX3J3YCwgYW5kIGEgd2hvbGUgaG9zdCBvZiB6b25lIG1hbmFnZW1lbnQgZnVuY3Rpb25zIC0gYHpsb29wX29wZW5fem9uZWAsIGB6bG9vcF9jbG9zZV96b25lYCwgZXRjLiBTZWVtcyBwcmV0dHkgc3RhbmRhcmQgZm9yIGEgWm9uZWQgQmxvY2sgRGV2aWNlIChaQkQpIGRyaXZlci4KClRoZSBjb3JlIG9mIHRoaXMgcGF0Y2gsIGFzIGZhciBhcyBJIGNhbiBzZWUsIGlzIG1vZGlmeWluZyBgemxvb3BfY29tcGxldGVfcnFgIGFuZCBhZGRpbmcgYHpsb29wX2ZpbGxfemVyb19ycWAuIFRoZSBjaGFuZ2UgdG8gYHpsb29wX2NvbXBsZXRlX3JxYCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuIFNpbmNlIGl0JiMzOTtzIGNhbGxlZCBieSB0aGUgYmxvY2sgbGF5ZXIgdXBvbiByZXF1ZXN0IGNvbXBsZXRpb24sIHRoaXMgcHJvYmFibHkgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIGhhbmRsaW5nIHpvbmVkIHNlbWFudGljcyBhZnRlciBJL08uIEFzIGZvciB0aGUgYHpsb29wX2ZpbGxfemVyb19ycWAgYWRkaXRpb24gLSB0aGF0JiMzOTtzIGFsc28gaW50ZXJlc3RpbmcuIEkgd29uZGVyIGlmIHRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIGZvciBjbGVhcmluZyB6b25lcyBvciBwZXJoYXBzIHBhcnQgb2YgYSBnYXJiYWdlIGNvbGxlY3Rpb24gc3RyYXRlZ3kuCgpOb3csIGdpdmVuIHRoZSBgQkxLX0RFVl9aT05FRF9MT09QYCBjb25maWcsIEkgc2hvdWxkIGNoZWNrIHRoZSBgZHJpdmVycy9ibG9jay9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQkxLX0RFVl9aT05FRF9MT09QYC4gS25vd2luZyB3aGF0IG90aGVyIGZlYXR1cmVzIG9yIGNvbmZpZ3MgZW5hYmxlIG9yIGRpc2FibGUgdGhpcyB3aWxsIGdpdmUgbWUgbW9yZSBjb250ZXh0LiBUaGlzIHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBjb3VsZCBpbXBhY3Qgb3IgYmUgaW1wYWN0ZWQgYnkgYW55IG90aGVyIGNoYW5nZXMgaW4gdGhlIGJsb2NrIGxheWVyLCBlc3BlY2lhbGx5IGlmIGl0IHJlbGF0ZXMgdG8gb3RoZXIgWkJEIGRyaXZlcnMgb3IgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBkZXBlbmRlbmNpZXMgbWlnaHQgZXhpc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTM1ND1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNTUtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzU2OmNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNTctXHR0cmlzdGF0ZSBcJiMzNDtab25lZCBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg1NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggaXQ6CgoqKkRpdmluZyBpbnRvIEJsb2NrIERldmljZSBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGJsb2NrIGRldmljZSBvcHRpb25zIGFyZSBjb25maWd1cmVkIGluIHRoZSBrZXJuZWwuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBsb29rIGludG8gdGhlIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIGZpbGUuIEkmIzM5O2xsIG5lZWQgdG8ganVtcCBkaXJlY3RseSB0byBsaW5lIDM1NiwgYXMgSSBoYXZlIGEgZ29vZCBmZWVsaW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNydWNpYWwgYml0cyBJJiMzOTttIGludGVyZXN0ZWQgaW4gcmVzaWRlLiBIb3BlZnVsbHksIHRoYXQgbG9jYXRpb24gd2lsbCBwcm92aWRlIHRoZSByZWxldmFudCBjb250ZXh0LiBJIGV4cGVjdCB0byBiZSBhYmxlIHRvIGZvbGxvdyB0aGUgbG9naWMgYW5kIHVuZGVyc3RhbmQgdGhlIGludGVyZGVwZW5kZW5jaWVzIHRoZXJlLiBUaGlzIHNob3VsZCBjbGFyaWZ5IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM1MDpcdFx0ICBTYXkgTiBpZiB5b3UgZG9uJiMzOTt0IHdhbnQgdG8gc3VwcG9ydCBsZWdhY3kgY29tbWFuZCBvcGNvZGUuIEl0IGlzXG4gMzUxOlx0XHQgIHN1Z2dlc3RlZCB0byBlbmFibGUgTiBpZiB5b3VyIGFwcGxpY2F0aW9uKHVibGsgc2VydmVyKSBzd2l0Y2hlcyB0b1xuIDM1MjpcdFx0ICBpb2N0bCBjb21tYW5kIGVuY29kaW5nLlxuIDM1MzpcdFxuIDM1NDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZ1wmIzM0O1xuIDM1NTpcdFxuIDM1NjpcdGNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcbiAzNTc6XHRcdHRyaXN0YXRlIFwmIzM0O1pvbmVkIGxvb3BiYWNrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gMzU4Olx0XHRkZXBlbmRzIG9uIEJMS19ERVZfWk9ORURcbiAzNTk6XHRcdGhlbHBcbiAzNjA6XHRcdCAgU2F5aW5nIFkgaGVyZSB3aWxsIGFsbG93IHlvdSB0byB1c2UgY3JlYXRlIGEgem9uZWQgYmxvY2sgZGV2aWNlIHVzaW5nXG4gMzYxOlx0XHQgIHJlZ3VsYXIgZmlsZXMgZm9yIHpvbmVzIChvbmUgZmlsZSBwZXIgem9uZXMpLiBUaGlzIGlzIHVzZWZ1bCB0byB0ZXN0XG4gMzYyOlx0XHQgIGZpbGUgc3lzdGVtcywgZGV2aWNlIG1hcHBlciBhbmQgYXBwbGljYXRpb25zIHRoYXQgc3VwcG9ydCB6b25lZCBibG9ja1xuIDM2MzpcdFx0ICBkZXZpY2VzLiBUbyBjcmVhdGUgYSB6b25lZCBsb29wIGRldmljZSwgbm8gdXNlciB1dGlsaXR5IGlzIG5lZWRlZCwgYVxuIDM2NDpcdFx0ICB6b25lZCBsb29wIGRldmljZSBjYW4gYmUgY3JlYXRlZCAob3IgcmUtc3RhcnRlZCkgdXNpbmcgYSBjb21tYW5kXG4gMzY1Olx0XHQgIGxpa2U6XG4gMzY2Olx0XG4gMzY3Olx0XHQgIGVjaG8gXCYjMzQ7YWRkIGlkPTAsem9uZV9zaXplX21iPTI1NixjYXBhY2l0eV9tYj0xNjM4NCxjb252X3pvbmVzPTExXCYjMzQ7IFx1MDAzZSBcXFxuIDM2ODpcdFx0XHQvZGV2L3psb29wLWNvbnRyb2xcbiAzNjk6XHRcbiAzNzA6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmxvY2tkZXYvem9uZWRfbG9vcC5yc3QgZm9yIHVzYWdlXG4gMzcxOlx0XHQgIGRldGFpbHMuXG4gMzcyOlx0XG4gMzczOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMzc0Olx0XG4gMzc1Olx0ZW5kaWYgIyBCTEtfREVWXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDg5CgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogNDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBab25lZCBMb29wIERldmljZSBDb25maWd1cmF0aW9uIGFuZCBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgYEJMS19ERVZfWk9ORURfTE9PUGAgaGFzIGEgY2xlYXIgZGVwZW5kZW5jeSBvbiBgQkxLX0RFVl9aT05FRGAuIEkgbmVlZCB0byBtYWtlIHN1cmUgYm90aCBhcmUgZW5hYmxlZCBpbiB0aGUgZnV6emluZyBzZXR1cCwgc28gSSYjMzk7bGwgYWRkIHRoZW0gdG8gYEVuYWJsZUNvbmZpZ3NgIGltbWVkaWF0ZWx5LiBNYWtlcyBzZW5zZTsgeW91IGNhbiYjMzk7dCBoYXZlIHRoZSBsb29wLXNwZWNpZmljIHN0dWZmIHdpdGhvdXQgdGhlIGNvcmUgem9uZWQgYmxvY2sgZGV2aWNlIHN1cHBvcnQuCgpOb3csIHRoZSBwYXRjaCBpdHNlbGYuLi4gaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBzaG9ydCByZWFkcyBhbmQgemVyb2luZyB0aGUgdW5yZWFkIHBvcnRpb24uIEl0JiMzOTtzIHJlcGxhY2luZyBgemVyb19maWxsX2Jpb2Agd2l0aCBgemxvb3BfZmlsbF96ZXJvX3JxYC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgemVyb2luZyBiZWhhdmlvciwgZXNwZWNpYWxseSB3aXRoIHpvbmVkIGRldmljZXMsIGFsd2F5cyBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIERlZmluaXRlbHkgd29ydGggaW52ZXN0aWdhdGluZy4KCkxldCYjMzk7cyBzZWUsIHdoYXQgYXJlIHRoZSBrZXkgc3ltYm9scyBoZXJlPyBJJiMzOTttIHRoaW5raW5nOiBgemxvb3BfY29tcGxldGVfcnFgLCBgemxvb3BfZmlsbF96ZXJvX3JxYCAodGhvdWdoIGl0JiMzOTtzIHN0YXRpYywgc28gdGhhdCBtaWdodCBjb21wbGljYXRlIHRoaW5ncyksIGB6bG9vcF9yd2AsIGB6bG9vcF9xdWV1ZV9ycWAsIGFuZCBgemxvb3BfY3RsX2FkZGAuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZG91YmxlIGNoZWNrIGlmIGB6bG9vcF9maWxsX3plcm9fcnFgIGlzIHN0YXRpYy4gWXVwLCBpdCBpcy4gSG1tLCBzdGF0aWMgZnVuY3Rpb25zIGFyZSBhIGxpdHRsZSB0cmlja3kuIE9rYXksIGB6bG9vcF9jb21wbGV0ZV9ycWAgaXMgb3VyIG1haW4gZm9jdXMgc2luY2UgaXQmIzM5O3MgdGhlIG1vc3QgY29tbW9uIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gdGhhdCB0YXNrLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGhvdyBzeXprYWxsZXIgaGFuZGxlcyBzdGF0aWMgZnVuY3Rpb25zLiBgemxvb3BfcXVldWVfcnFgIGFuZCBgemxvb3BfcndgIGFyZSBhbHNvIGltcG9ydGFudCBzeW1ib2xzLiBXYWl0LCBgemxvb3BfY29tcGxldGVfcnFgIGlzIHN0YXRpYyB0b28hIFRoYXQmIzM5O3Mgd2VpcmQuCgpPa2F5LCBjaGVja2luZyBpZiBgemxvb3BfY29tcGxldGVfcnFgIGlzIHN0YXRpYy4gWXVwLiBCdXQgd2FpdCwgaXQmIzM5O3MgYXNzaWduZWQgdG8gYHpsb29wX21xX29wcy5jb21wbGV0ZWAuIEFoYSEgSXQmIzM5O3Mgbm90IGlubGluZWQgYmVjYXVzZSBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIuIFNvIHN5emthbGxlciAqY2FuKiB1c2Ugc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5JiMzOTtyZSBub3QgaW5saW5lZC4gVGhhdCYjMzk7cyBhIGdvb2QgcGllY2Ugb2YgaW5mb3JtYXRpb24uIGB6bG9vcF9maWxsX3plcm9fcnFgIGlzIHN0YXRpYywgc28gaXQgKm1pZ2h0KiBiZSBpbmxpbmVkIGFuZCB0aGVyZWZvcmUgbGVzcyB1c2VmdWwgYXMgYSBmdXp6IHRhcmdldC4KCkkgbmVlZCB0byBjb25maXJtIGlmIGB6bG9vcF9xdWV1ZV9ycWAgaXMgc3RhdGljLiBZZXMsIGl0IGlzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGFib3V0IGB6bG9vcF9jdGxfYWRkYC4gWXVwLCBpdCYjMzk7cyBzdGF0aWMgYXMgd2VsbC4gT2theSwgbGV0JiMzOTtzIHN0ZXAgYmFjaywgYW5kIGZvY3VzIG9uIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgemxvb3AuY2AgdG8gc2VlIGlmIHRob3NlIHdvdWxkIG9mZmVyIGJldHRlciBjb3ZlcmFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXVthLXpBLVowLTlfXSogemxvb3BfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svemxvb3AuYz00Mj1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB6bG9vcF9vcHRfdG9rZW5zID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3NTpzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzYtXHR1bnNpZ25lZCBpbnRcdFx0bWFzaztcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9OTU9ZW51bSB7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDE6ZW51bSB6bG9vcF96b25lX2ZsYWdzIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDItXHRaTE9PUF9aT05FX0NPTlYgPSAwLFxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDktICovXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTEwOnN0cnVjdCB6bG9vcF96b25lIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTEtXHRzdHJ1Y3QgbGlzdF9oZWFkXHRvcGVuX3pvbmVfZW50cnk7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyMy1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjQ6c3RydWN0IHpsb29wX2RldmljZSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI1LVx0dW5zaWduZWQgaW50XHRcdGlkO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNTQtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTU1OnN0cnVjdCB6bG9vcF9jbWQge1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTE1Ni1cdHN0cnVjdCB3b3JrX3N0cnVjdFx0d29yaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4ODIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2U6IEluaXRpYWwgU3VzcGVjdHMqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCB0aGlzIHByb2JsZW0sIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZywgbmF0dXJhbGx5LCBpcyB0aGlua2luZyBhYm91dCBpbml0aWFsaXphdGlvbi4gV2hlcmUgZG9lcyB0aGlzIHdob2xlIHRoaW5nICpzdGFydCo/IFdlIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgcmVsZXZhbnQgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2V0IHVwIG9yIHdoZXJlIHNvbWUgY3JpdGljYWwgZmxhZ3MgYXJlIGJlaW5nIGZsaXBwZWQuIEkmIzM5O20gaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhlIGNsYXNzaWM6IGBtb2R1bGVfaW5pdGAsIG9yIGFueXRoaW5nIGFuYWxvZ291cyB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIGZyYW1ld29yay4gVGhhdCBraW5kIG9mIGZ1bmN0aW9uIG9yIG1hY3JvIGlzIGFsbW9zdCBhbHdheXMgdGhlIGtleSBlbnRyeSBwb2ludCBmb3IgZ2V0dGluZyB0aGluZ3MgZ29pbmcsIGVzcGVjaWFsbHkgaW4gYSBtb2R1bGFyIGRlc2lnbi4gSXTigJlzIHRoZSB1c3VhbCBzdXNwZWN0IGZvciBob29raW5nIGludG8gdGhlIHN5c3RlbSYjMzk7cyBzdGFydHVwIHNlcXVlbmNlLiBMZXTigJlzIHNlZSBpZiB0aGF0JiMzOTtzIHdoZXJlIHRoZSByZWxldmFudCBkYXRhIG9yIGZ1bmN0aW9uYWxpdHkgcmVzaWRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jPTE3Nzg9c3RhdGljIHZvaWQgX19leGl0IHpsb29wX2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc4My1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNzg0Om1vZHVsZV9pbml0KHpsb29wX2luaXQpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3ODUtbW9kdWxlX2V4aXQoemxvb3BfZXhpdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTkxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgemxvb3BfaW5pdGAgZnVuY3Rpb24gYW5kIHNlZSB3aGF0IGl0JiMzOTtzIGFsbCBhYm91dC4KKioqCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIGB6bG9vcF9pbml0YCoqCgpBbHJpZ2h0LCBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhpcyBgemxvb3BfaW5pdGAgZnVuY3Rpb24uIEdpdmVuIG15IGJhY2tncm91bmQsIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaXRzIHJvbGUgaW4gZXZlbnQgbG9vcCBpbml0aWFsaXphdGlvbi4gUHJvYmFibHkgc2V0dGluZyB1cCB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIHBlcmhhcHMgYWxsb2NhdGluZyBzb21lIHJlc291cmNlcy4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyBwYXJ0IG9mIGEgWmVyb01RIG9yIHNpbWlsYXIgYXN5bmNocm9ub3VzIG5ldHdvcmtpbmcgbGlicmFyeSwgYmFzZWQgb24gdGhlIG5hbWluZyBjb252ZW50aW9uLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCBleGFjdGx5IGlzIGl0IGluaXRpYWxpemluZz8gSXMgaXQgdGhyZWFkLXNhZmU/IERvZXMgaXQgaGFuZGxlIGFueSByZXNvdXJjZSBsaW1pdHMgb3IgY29uZmlndXJhdGlvbnM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MgaXQgZXN0YWJsaXNoZXMgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBmcmFtZXdvcmsgYW5kIGhvdyBpdCB3aWxsIGJlaGF2ZSB1bmRlciBsb2FkLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIGl0IHByb3ZpZGVzIGFueSBob29rcyBmb3IgY3VzdG9taXphdGlvbiBvciBleHRlbnNpb24uIFRoZSBsZXZlbCBvZiBlcnJvciBoYW5kbGluZyBhbmQgYW55IHBvc3NpYmxlIGFzc2VydGlvbnMgd291bGQgYmUgYW4gaW1wb3J0YW50IGVsZW1lbnQgdG8gYXNzZXNzIGFzIHdlbGwuIEZpbmFsbHksIEkmIzM5O2xsIHBheSBhdHRlbnRpb24gdG8gcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IGNvdWxkIGNvbWUgaW50byBwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6bG9vcF9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svemxvb3AuYz0xMDQ5PXN0YXRpYyBpbnQgemxvb3BfZ2V0X2Jsb2NrX3NpemUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDc5LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwODA6c3RhdGljIGludCB6bG9vcF9pbml0X3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCBzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDgxLVx0XHRcdCAgIHVuc2lnbmVkIGludCB6b25lX25vLCBib29sIHJlc3RvcmUpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTExODk9c3RhdGljIGludCB6bG9vcF9jdGxfYWRkKHN0cnVjdCB6bG9vcF9vcHRpb25zICpvcHRzKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjg1LVx0ICogSWYgd2UgYWxyZWFkeSBoYXZlIHpvbmUgZmlsZXMsIHdlIGFyZSByZXN0b3JpbmcgYSBkZXZpY2UgY3JlYXRlZCBieSBhXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTI4NjpcdCAqIHByZXZpb3VzIGFkZCBvcGVyYXRpb24uIEluIHRoaXMgY2FzZSwgemxvb3BfaW5pdF96b25lKCkgd2lsbCBjaGVja1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyODctXHQgKiB0aGF0IHRoZSB6b25lIGZpbGVzIGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIHpvbmUgY29uZmlndXJhdGlvbiBnaXZlbi5cbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI5MC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3pvbmVzOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyOTE6XHRcdHJldCA9IHpsb29wX2luaXRfem9uZSh6bG8sIG9wdHMsIGksIHJlc3RvcmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyOTItXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTE3NTg9c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHpsb29wX21pc2MgPSB7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3NjMtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTc2NDpzdGF0aWMgaW50IF9faW5pdCB6bG9vcF9pbml0KHZvaWQpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc2NS17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTE3Nzg9c3RhdGljIHZvaWQgX19leGl0IHpsb29wX2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc4My1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNzg0Om1vZHVsZV9pbml0KHpsb29wX2luaXQpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3ODUtbW9kdWxlX2V4aXQoemxvb3BfZXhpdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTc0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBgemxvb3BfbWlzY2AgRGV2aWNlIERyaXZlcioqCgpPa2F5LCBzbyB0aGUgZHJpdmVyIGhhcyByZWdpc3RlcmVkIGEgbWlzY2RldmljZSwgc3BlY2lmaWNhbGx5IG5hbWVkIGB6bG9vcF9taXNjYC4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBOb3csIHdoYXQmIzM5O3MgY3J1Y2lhbCBpcyB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGRldmljZSBhY3R1YWxseSAqZnVuY3Rpb25zKi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGVsdmUgaW50byB0aGUgb3BlcmF0aW9ucyB0aGF0IGFyZSBkZWZpbmVkIGZvciBgemxvb3BfbWlzY2AuIEkgbmVlZCB0byBpbnNwZWN0IHRob3NlIG9wZXJhdGlvbnMg4oCTIHRoZSByZWFkLCB3cml0ZSwgaW9jdGwsIG9wZW4sIHJlbGVhc2UgZnVuY3Rpb25zLCB3aGF0ZXZlciBpdCBtYXkgYmUuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGJlaGF2aW9yLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBhbnkgaW50ZXJhY3Rpb25zIHdpdGggaGFyZHdhcmUgb3Igb3RoZXIga2VybmVsIHN1YnN5c3RlbXMuIFdoYXQgYXJlIHRoZSBrZXkgaW50ZXJhY3Rpb25zIGZvciB0aGlzIGRldmljZSwgd2hpY2ggbWlnaHQgcmV2ZWFsIGhvdyB0aGUgZGV2aWNlIGhhcyBiZWVuIGRlc2lnbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6bG9vcF9taXNjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svemxvb3AuYz0xNzUwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHpsb29wX2N0bF9mb3BzID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNzU3LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE3NTg6c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHpsb29wX21pc2MgPSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc1OS1cdC5taW5vclx0XHQ9IE1JU0NfRFlOQU1JQ19NSU5PUixcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MTc2ND1zdGF0aWMgaW50IF9faW5pdCB6bG9vcF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3NjctXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTc2ODpcdHJldCA9IG1pc2NfcmVnaXN0ZXIoXHUwMDI2emxvb3BfbWlzYyk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc2OS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MTc3OD1zdGF0aWMgdm9pZCBfX2V4aXQgemxvb3BfZXhpdCh2b2lkKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3Nzkte1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjE3ODA6XHRtaXNjX2RlcmVnaXN0ZXIoXHUwMDI2emxvb3BfbWlzYyk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc4MS1cdGlkcl9kZXN0cm95KFx1MDAyNnpsb29wX2luZGV4X2lkcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDk1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIGB6bG9vcF9jdGxfZm9wc2AgU3RydWN0dXJlKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYHpsb29wX2N0bF9mb3BzYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb250cm9sIGZpbGUgb3BlcmF0aW9ucyB3aXRoaW4gdGhlIGB6bG9vcGAgY29udGV4dC4gSSB3YW50IHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSByZWdpc3RlcmVkIGZpbGUgb3BlcmF0aW9ucyB3aXRoaW4gdGhpcyBzdHJ1Y3R1cmUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBhbnkgcmVjZW50IGNoYW5nZXMgaW4gaG93IHdlIG1hbmFnZSBkZXZpY2UgY29udHJvbC4gQXJlIHRoZSB1c3VhbCBzdXNwZWN0cyBsaWtlIGBvcGVuYCwgYHJlbGVhc2VgLCBgcmVhZGAsIGB3cml0ZWAsIGFuZCBtYXliZSBldmVuIGBpb2N0bGAgYWxsIHByb3Blcmx5IGRlZmluZWQgYW5kIGhhbmRsaW5nIHRoZSBpbnRlcmFjdGlvbnMgSSBleHBlY3Q/IEl0JiMzOTtzIGFsd2F5cyBhIGdvb2QgaWRlYSB0byBkb3VibGUtY2hlY2sgdGhlIGZ1bmRhbWVudGFscyB3aGVuIGRlYnVnZ2luZyBhbnl0aGluZyBhdCB0aGlzIGxvdyBsZXZlbC4gQSBxdWljayBsb29rIHdpbGwgaGVscCBtZSBjb25maXJtIHRoZSBzZXR1cCBhbmQgZW5zdXJlIHRoYXQgdGhlIHJpZ2h0IGZ1bmN0aW9uIHBvaW50ZXJzIGFyZSBpbiBwbGFjZSBmb3IgZWFjaCBvcGVyYXRpb24uIFRoaXMmIzM5O2xsIHNhdmUgbWUgZnJvbSBjaGFzaW5nIGdob3N0cyBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emxvb3BfY3RsX2ZvcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jPTE3NDU9c3RhdGljIGludCB6bG9vcF9jdGxfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc0OS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNzUwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHpsb29wX2N0bF9mb3BzID0ge1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3NTEtXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MTc1OD1zdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Ugemxvb3BfbWlzYyA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc2MC1cdC5uYW1lXHRcdD0gXCYjMzQ7emxvb3AtY29udHJvbFwmIzM0OyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNzYxOlx0LmZvcHNcdFx0PSBcdTAwMjZ6bG9vcF9jdGxfZm9wcyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNzYyLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTY0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHpsb29wX2N0bF9mb3BzYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHpsb29wX2N0bF9mb3BzYCBzdHJ1Y3R1cmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBmdW5jdGlvbmFsIGJyZWFrZG93biDigJMgd2hhdCBleGFjdGx5IGRvZXMgdGhpcyB0aGluZyAqZG8qPyBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIGEgc3RydWN0dXJlIGNvbnRhaW5pbmcgZmlsZSBvcGVyYXRpb25zLCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgY29udHJvbCBpbnRlcmZhY2UgZm9yIHRoZSBaRlMgbG9vcGJhY2sgZGV2aWNlLiBTbywgdGhlIGtleSBpcyB0byB1bmRlcnN0YW5kIHdoaWNoIGZpbGUgb3BlcmF0aW9ucyBhcmUgZGVmaW5lZCB3aXRoaW4uIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBgcmVhZGAsIGB3cml0ZWAsIGBpb2N0bGAsIGBvcGVuYCwgYHJlbGVhc2VgLCBhbmQgcG90ZW50aWFsbHkgYW55IG90aGVyIHJlbGV2YW50IGZ1bmN0aW9uIHBvaW50ZXJzLiBLbm93aW5nIHRoZXNlIHdpbGwgcXVpY2tseSBjbHVlIG1lIGluIG9uIGhvdyB1c2Vyc3BhY2UgaW50ZXJhY3RzIHdpdGgsIGFuZCBjb250cm9scywgdGhpcyBaRlMgbG9vcCBkZXZpY2UgYXQgYSBsb3cgbGV2ZWwuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGJhc2ljIEkvTywgY29uZmlndXJhdGlvbiwgb3IgbW9yZSBjb21wbGV4IG1hbmFnZW1lbnQgYWN0aW9ucz8gSSYjMzk7bGwgcHJvYmFibHkgYmUgbG9va2luZyBmb3IgY2x1ZXMgcmVsYXRpbmcgdG8gdGhpbmdzIGxpa2Ugdm9sdW1lIG1hbmFnZW1lbnQsIGJsb2NrIGRldmljZSBjcmVhdGlvbiwgb3IgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBmaWxlIG9wZXJhdGlvbiBkZWZpbml0aW9ucy4gRGVwZW5kaW5nIG9uIHRoZSBzb3BoaXN0aWNhdGlvbiBvZiB0aGUgaW1wbGVtZW50YXRpb24sIHRoZXJlIG1pZ2h0IGJlIGludGVyZXN0aW5nIGxvY2svc3luY2hyb25pemF0aW9uIGNvbnN0cnVjdHMgaW52b2x2ZWQgYXMgd2VsbCB0aGF0IHdhcnJhbnQgYSBjbG9zZXIgbG9vayBvbmNlIHRoZSBmdW5jdGlvbnMgYXJlIG1hcHBlZCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzQ1Olx0c3RhdGljIGludCB6bG9vcF9jdGxfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbjE3NDY6XHR7XG4xNzQ3Olx0XHRyZXR1cm4gc2luZ2xlX3JlbGVhc2UoaW5vZGUsIGZpbGUpO1xuMTc0ODpcdH1cbjE3NDk6XHRcbjE3NTA6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6bG9vcF9jdGxfZm9wcyA9IHtcbjE3NTE6XHRcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuMTc1MjpcdFx0Lm9wZW5cdFx0PSB6bG9vcF9jdGxfb3BlbixcbjE3NTM6XHRcdC5yZWxlYXNlXHQ9IHpsb29wX2N0bF9yZWxlYXNlLFxuMTc1NDpcdFx0LndyaXRlXHRcdD0gemxvb3BfY3RsX3dyaXRlLFxuMTc1NTpcdFx0LnJlYWRcdFx0PSBzZXFfcmVhZCxcbjE3NTY6XHR9O1xuMTc1NzpcdFxuMTc1ODpcdHN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB6bG9vcF9taXNjID0ge1xuMTc1OTpcdFx0Lm1pbm9yXHRcdD0gTUlTQ19EWU5BTUlDX01JTk9SLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ5NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIFpsb29wIENvbnRyb2wgSW50ZXJmYWNlKioKCkFscmlnaHQsIHNvIHRoZSBjb250cm9sIGludGVyZmFjZSBmb3IgdGhpcyBgemxvb3BgIHRoaW5nIGlzIHNpdHRpbmcgYXQgYC9kZXYvemxvb3AtY29udHJvbGAuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgZGV2aWNlIGZpbGUgd2UmIzM5O3JlIGludGVyYWN0aW5nIHdpdGguIFdyaXRpbmcgdG8gKnRoYXQqIHBhdGgsIHRyaWdnZXJzIGEgZnVuY3Rpb24gY2FsbGVkIGB6bG9vcF9jdGxfd3JpdGVgLiAgVGhhdCYjMzk7cyB0aGUga2V5IHJpZ2h0IHRoZXJlLCB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSBoYW5kbGVzIGFueSB3cml0ZXMgdG8gdGhlIGNvbnRyb2wgZGV2aWNlLiAgTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcyB3aGF0IHRoYXQgZnVuY3Rpb24gYWN0dWFsbHkgKmRvZXMqLiBUaW1lIHRvIGRpZyBpbnRvIGB6bG9vcF9jdGxfd3JpdGVgIGFuZCBzZWUgZXhhY3RseSB3aGF0IG9wZXJhdGlvbnMgYXJlIHRha2luZyBwbGFjZSB0aGVyZS4gV2hhdCBkYXRhIGlzIGl0IGV4cGVjdGluZz8gV2hhdCBzaWRlIGVmZmVjdHMgZG9lcyBpdCBwcm9kdWNlPyBOZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3csIHVuZGVyc3RhbmQgdGhlIHdyaXRlIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6bG9vcF9jdGxfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jPTE2NTA9c3RhdGljIHN0cnVjdCB6bG9vcF9jdGxfb3Age1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNjU4LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE2NTk6c3RhdGljIHNzaXplX3Qgemxvb3BfY3RsX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZixcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNjYwLVx0XHRcdCAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xNzUwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHpsb29wX2N0bF9mb3BzID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNzUzLVx0LnJlbGVhc2VcdD0gemxvb3BfY3RsX3JlbGVhc2UsXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTc1NDpcdC53cml0ZVx0XHQ9IHpsb29wX2N0bF93cml0ZSxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNzU1LVx0LnJlYWRcdFx0PSBzZXFfcmVhZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5NzAKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAyMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBabG9vcCBJL08gUGF0aCBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIGluc3RpbmN0IHdhcyB0byBsb29rIGF0IGB6bG9vcF9jdGxfd3JpdGVgIGFzIHRoZSBlbnRyeSBwb2ludCBiZWNhdXNlIGl0JiMzOTtzIHRoZSBjb21tYW5kIHBhcnNlciBhbmQgY2FsbHMgdGhlIGFkZC9kZWxldGUgZnVuY3Rpb25zLiBIb3dldmVyLCB0aGUgcmVhbCBhY3Rpb24sIHRoZSBhY3R1YWwgcG9pbnQgd2hlcmUgb3VyIGNoYW5nZXMgYXJlIHJlZmxlY3RlZCwgc2VlbXMgdG8gYmUgaGFwcGVuaW5nIGluIGB6bG9vcF9jb21wbGV0ZV9ycWAsIHRyaWdnZXJlZCBieSB0aGUgYmxvY2sgbGF5ZXIgd2hlbiBhIHJlcXVlc3QgY29tcGxldGVzLiBUaGF0IHBvaW50cyB0byBgemxvb3BfcXVldWVfcnFgIGFzIGl0cyBsaWtlbHkgY291bnRlcnBhcnQgaW4gcXVldWluZyB0aGUgcmVxdWVzdHMgdG8gYmVnaW4gd2l0aC4KClNvLCBJIG5lZWQgdG8gZm9jdXMgb24gYm90aCBgemxvb3BfcXVldWVfcnFgIGFuZCBgemxvb3BfY29tcGxldGVfcnFgLiBTaW5jZSBgemxvb3BfY29tcGxldGVfcnFgIGlzIHN0YXRpYywgbXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGl0IG1pZ2h0IGJlIGEgcHJvYmxlbSBmb3Igc3l6a2FsbGVyLiBIb3dldmVyLCBJIHJlY2FsbCB0aGF0IHN5emthbGxlciAqY2FuKiBoYW5kbGUgc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5IGFyZW4mIzM5O3QgaW5saW5lZCwgYW5kIHNpbmNlIGl0IGlzIGFzc2lnbmVkIHRvIGB6bG9vcF9tcV9vcHMuY29tcGxldGVgLCBpdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IG5vdCBpbmxpbmVkLiBHb29kLCBvbmUgbGVzcyB3b3JyeS4KCkJ1dCBzeXprYWxsZXIgcHJlZmVycyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMsIGlkZWFsbHkuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBgemxvb3BfcXVldWVfcnFgIGlzIGFsc28gYXNzaWduZWQgdG8gYHpsb29wX21xX29wcy5xdWV1ZV9ycWAsIGl0IHNlZW1zIHRoYXQgaXMgdGhlIGNhc2UuCgpPa2F5LCBpcyB0aGVyZSAqYW55KiBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgbWlnaHQgZml0IHRoZSBiaWxsIGhlcmUsIEkgc2hvdWxkIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKiB6bG9vcF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jPTQyPXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHpsb29wX29wdF90b2tlbnMgPSB7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc0LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc1OnN0cnVjdCB6bG9vcF9vcHRpb25zIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03Ni1cdHVuc2lnbmVkIGludFx0XHRtYXNrO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYz05NT1lbnVtIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAwLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwMTplbnVtIHpsb29wX3pvbmVfZmxhZ3Mge1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMi1cdFpMT09QX1pPTkVfQ09OViA9IDAsXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwOS0gKi9cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTA6c3RydWN0IHpsb29wX3pvbmUge1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMS1cdHN0cnVjdCBsaXN0X2hlYWRcdG9wZW5fem9uZV9lbnRyeTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTIzLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyNDpzdHJ1Y3Qgemxvb3BfZGV2aWNlIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjUtXHR1bnNpZ25lZCBpbnRcdFx0aWQ7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE1NC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNTU6c3RydWN0IHpsb29wX2NtZCB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTU2LVx0c3RydWN0IHdvcmtfc3RydWN0XHR3b3JrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDkxMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYHpsb29wLmNgIFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYHpsb29wLmNgLCBpdCYjMzk7cyBhbGwgYWJvdXQgbW9kaWZ5aW5nIGhvdyB0aGUgem9uZWQgbG9vcCBkZXZpY2Ugd29ya3MuIEZpcnN0LCBJIG5vdGljZSBpbW1lZGlhdGVseSB0aGF0IGFsbCB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBhcmUgKnN0YXRpYyouIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsIOKAkyBpdCBtZWFucyB3ZSBoYXZlIHRvIHJlc3RyaWN0IG91ciBmb2N1cyB0byB0aG9zZSBzcGVjaWZpYyBpbnRlcm5hbCBmdW5jdGlvbnMgZm9yIGZ1enppbmcuCgpJIHNlZSB0aGF0IGB6bG9vcF9jb21wbGV0ZV9ycWAgaXMgdGhlIG9uZSBiZWluZyBkaXJlY3RseSBtb2RpZmllZC4gSW50ZXJlc3RpbmcuIGB6bG9vcF9xdWV1ZV9ycWAgYXBwZWFycyB0byBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIGJsb2NrIEkvTywgYW5kIGB6bG9vcF9jdGxfd3JpdGVgIHNlZW1zIHRvIGJlIGhvdyBjb250cm9sIGNvbW1hbmRzIGFyZSBwcm9jZXNzZWQuICBHaXZlbiB0aG9zZSBlbnRyeSBwb2ludHMgYW5kIHRoZSBtb2RpZmllZCBmdW5jdGlvbiwgYHpsb29wX2NvbXBsZXRlX3JxYCwgYHpsb29wX3F1ZXVlX3JxYCwgYW5kIGB6bG9vcF9jdGxfd3JpdGVgIGFyZSB0aGUgb2J2aW91cyB0YXJnZXRzIGZvciBmdXp6aW5nLgoKQWgsIGJ1dCB0aGUgY3J1Y2lhbCBjaGFuZ2UgaGVyZSBpcyB0aGUgcmVwbGFjZW1lbnQgb2YgYHplcm9fZmlsbF9iaW8oYmlvKWAgd2l0aCBgemxvb3BfZmlsbF96ZXJvX3JxKHJxLCBjbWQtJmd0O3JldClgLiBUaGF0JiMzOTtzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSDigJMgbm90IGp1c3QgYSByZWZhY3RvcmluZy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgc3BvdCB0aGF0IHdhcnJhbnRzIGZ1enppbmcsIGxpa2VseSB0byB1bmNvdmVyIGEgc3VidGxlIGVkZ2UgY2FzZS4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkZXNlcnZlcyB0aGUgYFdvcnRoRnV6emluZz10cnVlYCBmbGFnLiAgTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYHpsb29wX2NvbXBsZXRlX3JxYCwgYHpsb29wX3F1ZXVlX3JxYCwgYW5kIGB6bG9vcF9jdGxfd3JpdGVgLgoKQW5kIGZpbmFsbHksIGxldCYjMzk7cyBtYWtlIHN1cmUgb3VyIGZ1enppbmcgY29uZmlndXJhdGlvbnMgYXJlIGNvcnJlY3QuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGBCTEtfREVWX1pPTkVEX0xPT1BgIGFuZCwgc2luY2UgaXQgZGVwZW5kcyBvbiBpdCwgYWxzbyBgQkxLX0RFVl9aT05FRGAuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGF0IGBCTEtfREVWX1pPTkVEX0xPT1BgIGRvZXNuJiMzOTt0IGhhdmUgYW55ICpvdGhlciogZGVwZW5kZW5jaWVzLCBqdXN0IHRvIGJlIHN1cmUuLi4gTGV0JiMzOTtzIGNoZWNrIGBCTEtfREVWX1pPTkVEYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTU6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfWk9ORUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9Nzc9Y29uZmlnIEJMS19ERVZfV1JJVEVfTU9VTlRFRFxuLS1cbmJsb2NrL0tjb25maWctOTYtXG5ibG9jay9LY29uZmlnOjk3OmNvbmZpZyBCTEtfREVWX1pPTkVEXG5ibG9jay9LY29uZmlnLTk4LVx0Ym9vbCBcJiMzNDtab25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTY4NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBab25lZCBCbG9jayBEZXZpY2UgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBCTEtfREVWX1pPTkVEYC4gSSBrbm93IGl0JiMzOTtzIHJlbGF0ZWQgdG8gem9uZWQgYmxvY2sgZGV2aWNlcywgd2hpY2ggYXJlIGJlY29taW5nIGluY3JlYXNpbmdseSBpbXBvcnRhbnQuIFdoZXJlJiMzOTtzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbj8gUmlnaHQsIGl0JiMzOTtzIHR5cGljYWxseSBpbiB0aGUgYGJsb2NrL0tjb25maWdgIGZpbGUuIExldCYjMzk7cyBnbyBhaGVhZCBhbmQgb3BlbiB0aGF0IHVwLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbiBhcm91bmQgbGluZSA5NyBvZiBgYmxvY2svS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGVzZSBtb3JlIGRldmljZS1zcGVjaWZpYyBvcHRpb25zIGFyZSBncm91cGVkLCBzbyB0aGF0JiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcsIGdpdmVuIG15IGV4cGVyaWVuY2UuIEkmIzM5O20gc3VyZSBpdCYjMzk7cyBuZWFyYnksIGFuZCBJJiMzOTtsbCBzZWUgd2hhdCBvcHRpb25zIG9yIGRlcGVuZGVuY2llcyBhcmUgYXJvdW5kIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0XHRwcml2aWxlZ2VkIHByb2Nlc3NlcyBhbmQgZ2VuZXJhbGx5IG1ha2VzIGl0IG11Y2ggaGFyZGVyIHRvIGNyYXNoXG4gIDkxOlx0XHRmaWxlc3lzdGVtIGRyaXZlcnMuIE5vdGUgaG93ZXZlciB0aGF0IHRoaXMgZG9lcyBub3QgcHJldmVudFxuICA5MjpcdFx0dW5kZXJseWluZyBkZXZpY2UocykgZnJvbSBiZWluZyBtb2RpZmllZCBieSBvdGhlciBtZWFucywgZS5nLiBieVxuICA5MzpcdFx0ZGlyZWN0bHkgc3VibWl0dGluZyBTQ1NJIGNvbW1hbmRzIG9yIHRocm91Z2ggYWNjZXNzIHRvIGxvd2VyIGxheWVycyBvZlxuICA5NDpcdFx0c3RvcmFnZSBzdGFjay4gSWYgaW4gZG91YnQsIHNheSBZLiBUaGUgY29uZmlndXJhdGlvbiBjYW4gYmUgb3ZlcnJpZGRlblxuICA5NTpcdFx0d2l0aCB0aGUgYmRldl9hbGxvd193cml0ZV9tb3VudGVkIGJvb3Qgb3B0aW9uLlxuICA5NjpcdFxuICA5NzpcdGNvbmZpZyBCTEtfREVWX1pPTkVEXG4gIDk4Olx0XHRib29sIFwmIzM0O1pvbmVkIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gIDk5Olx0XHRoZWxwXG4gMTAwOlx0XHRCbG9jayBsYXllciB6b25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydC4gVGhpcyBvcHRpb24gZW5hYmxlc1xuIDEwMTpcdFx0c3VwcG9ydCBmb3IgWkFDL1pCQy9aTlMgaG9zdC1tYW5hZ2VkIGFuZCBob3N0LWF3YXJlIHpvbmVkIGJsb2NrXG4gMTAyOlx0XHRkZXZpY2VzLlxuIDEwMzpcdFxuIDEwNDpcdFx0U2F5IHllcyBoZXJlIGlmIHlvdSBoYXZlIGEgWkFDLCBaQkMsIG9yIFpOUyBzdG9yYWdlIGRldmljZS5cbiAxMDU6XHRcbiAxMDY6XHRjb25maWcgQkxLX0RFVl9USFJPVFRMSU5HXG4gMTA3Olx0XHRib29sIFwmIzM0O0Jsb2NrIGxheWVyIGJpbyB0aHJvdHRsaW5nIHN1cHBvcnRcJiMzNDtcbiAxMDg6XHRcdGRlcGVuZHMgb24gQkxLX0NHUk9VUFxuIDEwOTpcdFx0c2VsZWN0IEJMS19DR1JPVVBfUldTVEFUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjM2CgkJCQkJCQlvdXRwdXQ6IDE4NAoJCQkJCQkJdGhvdWdodHM6IDQ3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciBab25lZCBCbG9jayBEZXZpY2UgTG9vcGJhY2sqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBgQkxLX0RFVl9aT05FRGAgaGFzIG5vIG90aGVyIGRlcGVuZGVuY2llcywgd2hpY2ggbWVhbnMgZW5hYmxpbmcganVzdCBgQkxLX0RFVl9aT05FRF9MT09QYCBhbmQgYEJMS19ERVZfWk9ORURgIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciB0ZXN0aW5nLiBMZXQmIzM5O3MgcmV2aWV3IHRoZSBwYXRjaCBhZ2Fpbiwgc3BlY2lmaWNhbGx5IHRoaXMgYHpsb29wX2ZpbGxfemVyb19ycWAgZnVuY3Rpb246CgpgYGBjCiYjNDM7c3RhdGljIHZvaWQgemxvb3BfZmlsbF96ZXJvX3JxKHN0cnVjdCByZXF1ZXN0ICpycSwgdW5zaWduZWQgaW50IHplcm9fZnJvbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByZXFfaXRlcmF0b3IgaXRlcjsKJiM0MzsJc3RydWN0IGJpb192ZWMgYnY7CiYjNDM7CXVuc2lnbmVkIGludCBwb3MgPSAwOwomIzQzOwl1bnNpZ25lZCBpbnQgZW5kLCBvZmY7CiYjNDM7CiYjNDM7CXJxX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIHJxLCBpdGVyKSB7CiYjNDM7CQllbmQgPSBwb3MgJiM0MzsgYnYuYnZfbGVuOwomIzQzOwkJaWYgKGVuZCAmZ3Q7IHplcm9fZnJvbSkgewomIzQzOwkJCW9mZiA9IDA7CiYjNDM7CQkJaWYgKHBvcyAmbHQ7IHplcm9fZnJvbSkKJiM0MzsJCQkJb2ZmID0gemVyb19mcm9tIC0gcG9zOwomIzQzOwkJCW1lbXplcm9fcGFnZShidi5idl9wYWdlLCBidi5idl9vZmZzZXQgJiM0Mzsgb2ZmLAomIzQzOwkJCQkgICAgIGJ2LmJ2X2xlbiAtIG9mZik7CiYjNDM7CQl9CiYjNDM7CQlwb3MgPSBlbmQ7CiYjNDM7CX0KJiM0Mzt9CmBgYAoKVGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGVuc3VyZSBzaG9ydCByZWFkcyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuIEl04oCZcyByZWFjaGVkIHRocm91Z2ggYmxvY2sgSS9PIG9uIHRoZSBgemxvb3BgIGRldmljZS4gVGhlIGJlYXV0eSBvZiBgemxvb3BgIGlzIHRoYXQgaXQmIzM5O3MgYSBzb2Z0d2FyZS1lbXVsYXRlZCB6b25lZCBibG9jayBkZXZpY2UuIFRoaXMgbWFrZXMgaXQgaWRlYWwgZm9yIGZ1enppbmcsIGVzcGVjaWFsbHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gQmVjYXVzZSB0aGUgY2hhbmdlIGlzIGZ1bmN0aW9uYWwsIEkgd2lsbCBzZXQgYFdvcnRoRnV6emluZz10cnVlYC4KClNwZWNpZmljYWxseSwgSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb246CgoqICAgYHpsb29wX2NvbXBsZXRlX3JxYAoqICAgYHpsb29wX3F1ZXVlX3JxYAoqICAgYHpsb29wX2N0bF93cml0ZWAKCkVuYWJsaW5nIGBCTEtfREVWX1pPTkVEX0xPT1BgIGFuZCBpdHMgZGVwZW5kZW5jeSBgQkxLX0RFVl9aT05FRGAgd2lsbCBiZSBteSBzdGFydGluZyBwb2ludC4gVGhlIG5ldyBjb2RlIGluIGB6bG9vcF9maWxsX3plcm9fcnFgIGFkZHJlc3NlcyB0aGUgcHJvYmxlbSBvZiBjb3JyZWN0bHkgemVyb2luZyBvdXQgdGhlIHVucmVhZCB0YWlsIG9mIGEgcmVxdWVzdCBiZXlvbmQgYGNtZC0mZ3Q7cmV0YCBhZnRlciBzaG9ydCByZWFkcywgcmVwbGFjaW5nIHRoZSBwb3RlbnRpYWxseSBsZXNzIHJlbGlhYmxlIGB6ZXJvX2ZpbGxfYmlvYCBhcHByb2FjaC4gR2l2ZW4gdGhhdCBgemxvb3BgIGlzIGVmZmVjdGl2ZWx5IGEgdmlydHVhbCB6b25lZCBibG9jayBkZXZpY2UgYW5kIGZ1bGx5IGFjY2Vzc2libGUgdmlhIHNvZnR3YXJlLCBmdXp6aW5nIG9mZmVycyBhIGNsZWFyIHBhdGggdG8gZGlzY292ZXIgYW55IHBvdGVudGlhbCBpc3N1ZXMgaW4gdGhlc2UgY3JpdGljYWwgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9aT05FRF9MT09QJiMzNDssCiAgICAmIzM0O0JMS19ERVZfWk9ORUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6bG9vcF9jb21wbGV0ZV9ycSYjMzQ7LAogICAgJiMzNDt6bG9vcF9xdWV1ZV9ycSYjMzQ7LAogICAgJiMzNDt6bG9vcF9jdGxfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGB6bG9vcF9jb21wbGV0ZV9ycWAgdG8gY29ycmVjdGx5IHplcm8gb3V0IHRoZSB1bnJlYWQgdGFpbCBvZiBhIHJlcXVlc3QgYmV5b25kIGBjbWQtXHUwMDNlcmV0YCBmb3Igc2hvcnQgcmVhZHMsIHJlcGxhY2luZyB0aGUgcHJldmlvdXMgYHplcm9fZmlsbF9iaW9gIGFwcHJvYWNoLiBUaGUgYHpsb29wYCBkcml2ZXIgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCB6b25lZCBibG9jayBkZXZpY2UgdGhhdCBjYW4gYmUgZnVsbHkgZXhlcmNpc2VkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIEZ1enppbmcgdGhpcyByZXF1aXJlcyBlbmFibGluZyBgQkxLX0RFVl9aT05FRF9MT09QYCBhbmQgaXRzIGRlcGVuZGVuY3kgYEJMS19ERVZfWk9ORURgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX1pPTkVEX0xPT1AmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9aT05FRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3psb29wX2NvbXBsZXRlX3JxJiMzNDssCiAgICAmIzM0O3psb29wX3F1ZXVlX3JxJiMzNDssCiAgICAmIzM0O3psb29wX2N0bF93cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYHpsb29wX2NvbXBsZXRlX3JxYCB0byBjb3JyZWN0bHkgemVybyBvdXQgdGhlIHVucmVhZCB0YWlsIG9mIGEgcmVxdWVzdCBiZXlvbmQgYGNtZC1cdTAwM2VyZXRgIGZvciBzaG9ydCByZWFkcywgcmVwbGFjaW5nIHRoZSBwcmV2aW91cyBgemVyb19maWxsX2Jpb2AgYXBwcm9hY2guIFRoZSBgemxvb3BgIGRyaXZlciBpcyBhIHNvZnR3YXJlLWVtdWxhdGVkIHpvbmVkIGJsb2NrIGRldmljZSB0aGF0IGNhbiBiZSBmdWxseSBleGVyY2lzZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gRnV6emluZyB0aGlzIHJlcXVpcmVzIGVuYWJsaW5nIGBCTEtfREVWX1pPTkVEX0xPT1BgIGFuZCBpdHMgZGVwZW5kZW5jeSBgQkxLX0RFVl9aT05FRGAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNToxMTowOC45ODIxOTQzNjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTEwMDI3MzIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1pPTkVEX0xPT1BcIixcbiAgICBcIkJMS19ERVZfWk9ORURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6bG9vcF9jb21wbGV0ZV9ycVwiLFxuICAgIFwiemxvb3BfcXVldWVfcnFcIixcbiAgICBcInpsb29wX2N0bF93cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBgemxvb3BfY29tcGxldGVfcnFgIHRvIGNvcnJlY3RseSB6ZXJvIG91dCB0aGUgdW5yZWFkIHRhaWwgb2YgYSByZXF1ZXN0IGJleW9uZCBgY21kLVxcdTAwM2VyZXRgIGZvciBzaG9ydCByZWFkcywgcmVwbGFjaW5nIHRoZSBwcmV2aW91cyBgemVyb19maWxsX2Jpb2AgYXBwcm9hY2guIFRoZSBgemxvb3BgIGRyaXZlciBpcyBhIHNvZnR3YXJlLWVtdWxhdGVkIHpvbmVkIGJsb2NrIGRldmljZSB0aGF0IGNhbiBiZSBmdWxseSBleGVyY2lzZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gRnV6emluZyB0aGlzIHJlcXVpcmVzIGVuYWJsaW5nIGBCTEtfREVWX1pPTkVEX0xPT1BgIGFuZCBpdHMgZGVwZW5kZW5jeSBgQkxLX0RFVl9aT05FRGAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE1OjExOjA4Ljk4MjIwMTI4NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA3MjUzNzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjY4MDk1ZjJlNTFlYWE4NmVjZWQ2NzVhZTk0YWZmYzgyNjFiN2Q5ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAzMSAxNToxMTowOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3psb29wLmMgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmNcXG5pbmRleCA1NWVlYjZhYWMwZWEzLi40Mjk2N2U3YWVhNThhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svemxvb3AuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xcbkBAIC03OTgsNiArNzk4LDI2IEBAIHN0YXRpYyB2b2lkIHpsb29wX2NtZF93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRjdXJyZW50LVxcdTAwM2VmbGFncyA9IG9yaWdfZmxhZ3M7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHpsb29wX2ZpbGxfemVyb19ycShzdHJ1Y3QgcmVxdWVzdCAqcnEsIHVuc2lnbmVkIGludCB6ZXJvX2Zyb20pXFxuK3tcXG4rXFx0c3RydWN0IHJlcV9pdGVyYXRvciBpdGVyO1xcbitcXHRzdHJ1Y3QgYmlvX3ZlYyBidjtcXG4rXFx0dW5zaWduZWQgaW50IHBvcyA9IDA7XFxuK1xcdHVuc2lnbmVkIGludCBlbmQsIG9mZjtcXG4rXFxuK1xcdHJxX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIHJxLCBpdGVyKSB7XFxuK1xcdFxcdGVuZCA9IHBvcyArIGJ2LmJ2X2xlbjtcXG4rXFx0XFx0aWYgKGVuZCBcXHUwMDNlIHplcm9fZnJvbSkge1xcbitcXHRcXHRcXHRvZmYgPSAwO1xcbitcXHRcXHRcXHRpZiAocG9zIFxcdTAwM2MgemVyb19mcm9tKVxcbitcXHRcXHRcXHRcXHRvZmYgPSB6ZXJvX2Zyb20gLSBwb3M7XFxuK1xcdFxcdFxcdG1lbXplcm9fcGFnZShidi5idl9wYWdlLCBidi5idl9vZmZzZXQgKyBvZmYsXFxuK1xcdFxcdFxcdFxcdCAgICAgYnYuYnZfbGVuIC0gb2ZmKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRwb3MgPSBlbmQ7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgemxvb3BfY29tcGxldGVfcnEoc3RydWN0IHJlcXVlc3QgKnJxKVxcbiB7XFxuIFxcdHN0cnVjdCB6bG9vcF9jbWQgKmNtZCA9IGJsa19tcV9ycV90b19wZHUocnEpO1xcbkBAIC04MTIsMTMgKzgzMiw5IEBAIHN0YXRpYyB2b2lkIHpsb29wX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcXG4gXFx0XFx0XFx0cHJfZXJyKFxcXCJab25lICV1OiBmYWlsZWQgcmVhZCBzZWN0b3IgJWxsdSwgJWxsdSBzZWN0b3JzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICAgICAgem9uZV9ubywgY21kLVxcdTAwM2VzZWN0b3IsIGNtZC1cXHUwMDNlbnJfc2VjdG9ycyk7XFxuIFxcbi1cXHRcXHRpZiAoY21kLVxcdTAwM2VyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBjbWQtXFx1MDAzZXJldCAhPSBibGtfcnFfYnl0ZXMocnEpKSB7XFxuLVxcdFxcdFxcdC8qIHNob3J0IHJlYWQgKi9cXG4tXFx0XFx0XFx0c3RydWN0IGJpbyAqYmlvO1xcbi1cXG4tXFx0XFx0XFx0X19ycV9mb3JfZWFjaF9iaW8oYmlvLCBycSlcXG4tXFx0XFx0XFx0XFx0emVyb19maWxsX2JpbyhiaW8pO1xcbi1cXHRcXHR9XFxuK1xcdFxcdC8qIFNob3J0IHJlYWQuIFplcm8gb3V0IHRoZSB1bnJlYWQgdGFpbCBiZXlvbmQgY21kLVxcdTAwM2VyZXQuICovXFxuK1xcdFxcdGlmIChjbWQtXFx1MDAzZXJldCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IGNtZC1cXHUwMDNlcmV0ICE9IGJsa19ycV9ieXRlcyhycSkpXFxuK1xcdFxcdFxcdHpsb29wX2ZpbGxfemVyb19ycShycSwgY21kLVxcdTAwM2VyZXQpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBSRVFfT1BfV1JJVEU6XFxuIFxcdGNhc2UgUkVRX09QX1pPTkVfQVBQRU5EOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNToxMTowOS4zOTAxNTY1OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjgwNjkyMzAyOTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfWk9ORURfTE9PUFwiLFxuICAgIFwiQkxLX0RFVl9aT05FRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpsb29wX2NvbXBsZXRlX3JxXCIsXG4gICAgXCJ6bG9vcF9xdWV1ZV9ycVwiLFxuICAgIFwiemxvb3BfY3RsX3dyaXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGB6bG9vcF9jb21wbGV0ZV9ycWAgdG8gY29ycmVjdGx5IHplcm8gb3V0IHRoZSB1bnJlYWQgdGFpbCBvZiBhIHJlcXVlc3QgYmV5b25kIGBjbWQtXFx1MDAzZXJldGAgZm9yIHNob3J0IHJlYWRzLCByZXBsYWNpbmcgdGhlIHByZXZpb3VzIGB6ZXJvX2ZpbGxfYmlvYCBhcHByb2FjaC4gVGhlIGB6bG9vcGAgZHJpdmVyIGlzIGEgc29mdHdhcmUtZW11bGF0ZWQgem9uZWQgYmxvY2sgZGV2aWNlIHRoYXQgY2FuIGJlIGZ1bGx5IGV4ZXJjaXNlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBGdXp6aW5nIHRoaXMgcmVxdWlyZXMgZW5hYmxpbmcgYEJMS19ERVZfWk9ORURfTE9PUGAgYW5kIGl0cyBkZXBlbmRlbmN5IGBCTEtfREVWX1pPTkVEYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjY4MDk1ZjJlNTFlYWE4NmVjZWQ2NzVhZTk0YWZmYzgyNjFiN2Q5ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDE1OjExOjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96bG9vcC5jIGIvZHJpdmVycy9ibG9jay96bG9vcC5jXG5pbmRleCA1NWVlYjZhYWMwZWEzLi40Mjk2N2U3YWVhNThhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96bG9vcC5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmNcbkBAIC03OTgsNiArNzk4LDI2IEBAIHN0YXRpYyB2b2lkIHpsb29wX2NtZF93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0Y3VycmVudC1cdTAwM2VmbGFncyA9IG9yaWdfZmxhZ3M7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHpsb29wX2ZpbGxfemVyb19ycShzdHJ1Y3QgcmVxdWVzdCAqcnEsIHVuc2lnbmVkIGludCB6ZXJvX2Zyb20pXG4re1xuK1x0c3RydWN0IHJlcV9pdGVyYXRvciBpdGVyO1xuK1x0c3RydWN0IGJpb192ZWMgYnY7XG4rXHR1bnNpZ25lZCBpbnQgcG9zID0gMDtcbitcdHVuc2lnbmVkIGludCBlbmQsIG9mZjtcbitcbitcdHJxX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIHJxLCBpdGVyKSB7XG4rXHRcdGVuZCA9IHBvcyArIGJ2LmJ2X2xlbjtcbitcdFx0aWYgKGVuZCBcdTAwM2UgemVyb19mcm9tKSB7XG4rXHRcdFx0b2ZmID0gMDtcbitcdFx0XHRpZiAocG9zIFx1MDAzYyB6ZXJvX2Zyb20pXG4rXHRcdFx0XHRvZmYgPSB6ZXJvX2Zyb20gLSBwb3M7XG4rXHRcdFx0bWVtemVyb19wYWdlKGJ2LmJ2X3BhZ2UsIGJ2LmJ2X29mZnNldCArIG9mZixcbitcdFx0XHRcdCAgICAgYnYuYnZfbGVuIC0gb2ZmKTtcbitcdFx0fVxuK1x0XHRwb3MgPSBlbmQ7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHpsb29wX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcbiB7XG4gXHRzdHJ1Y3Qgemxvb3BfY21kICpjbWQgPSBibGtfbXFfcnFfdG9fcGR1KHJxKTtcbkBAIC04MTIsMTMgKzgzMiw5IEBAIHN0YXRpYyB2b2lkIHpsb29wX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcbiBcdFx0XHRwcl9lcnIoXCJab25lICV1OiBmYWlsZWQgcmVhZCBzZWN0b3IgJWxsdSwgJWxsdSBzZWN0b3JzXFxuXCIsXG4gXHRcdFx0ICAgICAgIHpvbmVfbm8sIGNtZC1cdTAwM2VzZWN0b3IsIGNtZC1cdTAwM2Vucl9zZWN0b3JzKTtcbiBcbi1cdFx0aWYgKGNtZC1cdTAwM2VyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBjbWQtXHUwMDNlcmV0ICE9IGJsa19ycV9ieXRlcyhycSkpIHtcbi1cdFx0XHQvKiBzaG9ydCByZWFkICovXG4tXHRcdFx0c3RydWN0IGJpbyAqYmlvO1xuLVxuLVx0XHRcdF9fcnFfZm9yX2VhY2hfYmlvKGJpbywgcnEpXG4tXHRcdFx0XHR6ZXJvX2ZpbGxfYmlvKGJpbyk7XG4tXHRcdH1cbitcdFx0LyogU2hvcnQgcmVhZC4gWmVybyBvdXQgdGhlIHVucmVhZCB0YWlsIGJleW9uZCBjbWQtXHUwMDNlcmV0LiAqL1xuK1x0XHRpZiAoY21kLVx1MDAzZXJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGNtZC1cdTAwM2VyZXQgIT0gYmxrX3JxX2J5dGVzKHJxKSlcbitcdFx0XHR6bG9vcF9maWxsX3plcm9fcnEocnEsIGNtZC1cdTAwM2VyZXQpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgUkVRX09QX1dSSVRFOlxuIFx0Y2FzZSBSRVFfT1BfWk9ORV9BUFBFTkQ6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNToxMTowOS4zOTAxNTgyNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzYyOTc4OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgYSBabG9vcCBCbG9jayBEcml2ZXIgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyBjbGVhcmx5IGZvY3VzZWQgb24gb3B0aW1pemluZyB6ZXJvLWZpbGxpbmcgaW4gdGhlIGB6bG9vcGAgYmxvY2sgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBgZHJpdmVycy9ibG9jay96bG9vcC5jYC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24sIGB6bG9vcF9maWxsX3plcm9fcnFgLCBhbmQgbW9kaWZpZXMgdGhlIGV4aXN0aW5nIGB6bG9vcF9jb21wbGV0ZV9ycWAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGFwcGVhcnMgdG8gaW52b2x2ZSByZXBsYWNpbmcgdGhlIG1vcmUgZ2VuZXJpYyBgemVyb19maWxsX2JpbyhiaW8pYCBjYWxsIHdpdGggYSBtb3JlIHRhcmdldGVkIGB6bG9vcF9maWxsX3plcm9fcnEocnEsIGNtZC1cdTAwM2VyZXQpYCB3aGVuIGRlYWxpbmcgd2l0aCBzaG9ydCByZWFkcy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBsaWtlbHkgaW1wcm92ZXMgdGhlIGVmZmljaWVuY3kgb2YgaGFuZGxpbmcgemVyby1maWxsZWQgYmxvY2tzIHdpdGhpbiB0aGUgYHpsb29wYCBkcml2ZXIuIFRoaXMgY291bGQgbWVhbiBhIHBlcmZvcm1hbmNlIGJvb3N0IGZvciBvcGVyYXRpb25zIHRoYXQgYXJlIGNvbW1vbmx5IHplcm8tZmlsbGVkLCBwZXJoYXBzIGR1cmluZyBjcmVhdGlvbiBvciBkYXRhIHNjcnViYmluZy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSBvZiBgZHJpdmVycy9ibG9jay96bG9vcC5jYCBpdHNlbGYgbm93IHRvIHVuZGVyc3RhbmQgdGhlIHByZWNpc2UgY29udGV4dCBhbmQgd2hhdCBjb25kaXRpb25zLCBsaWtlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYWN0dWFsbHkgZW5hYmxlIHRoaXMgb3B0aW1pemF0aW9uLiBUaGlzIGlzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBwYXRjaCdzIGltcGFjdCBhbmQgaXRzIHJlbGV2YW5jZSB0byB0aGUgb3ZlcmFsbCBzeXN0ZW0gY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzNiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTU6MTE6MTMuOTI2NDU4NzkyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MTIxMTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsb29wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWc9MzU2PWNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNjctXFx0ICBlY2hvIFxcXCJhZGQgaWQ9MCx6b25lX3NpemVfbWI9MjU2LGNhcGFjaXR5X21iPTE2Mzg0LGNvbnZfem9uZXM9MTFcXFwiIFxcdTAwM2UgXFxcXFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzozNjg6XFx0XFx0L2Rldi96bG9vcC1jb250cm9sXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM2OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTU6MTE6MTMuOTcwNTg1NjZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzcwMjkyNjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWm9uZWQgTG9vcGJhY2sgQmxvY2sgRGV2aWNlIERyaXZlcioqXG5cbk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIEknbSBsb29raW5nIGF0IHBvaW50cyB0byBgQkxLX0RFVl9aT05FRF9MT09QYC4gIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogaXMgYHpsb29wX2NvbXBsZXRlX3JxYCBhY3R1YWxseSByZWFjaGFibGU/IFJpZ2h0LCBpdOKAmXMgYSBibG9jayBkcml2ZXIsIHNvIHllcywgaXQgKnNob3VsZCogYmUuIEFoLCB3YWl0IGEgbWludXRlLCBgemxvb3BfY29tcGxldGVfcnFgIGlzIGNhbGxlZCB3aGVuIGEgcmVxdWVzdCBjb21wbGV0ZXMsIHNvIHRoYXQgbWFrZXMgc2Vuc2UuIFRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgYHpsb29wYCwgd2hpY2gsIGlmIG1lbW9yeSBzZXJ2ZXMsIGlzIHRoYXQgem9uZWQgbG9vcGJhY2sgZGV2aWNlLiBOb3csIGlzIGB6bG9vcGAgYSByZWFsIGRyaXZlciBvciBvbmUgb2YgdGhvc2UgdGVzdCBkcml2ZXJzPyBJIHRoaW5rIEkgY2FuIGdldCBhIGJldHRlciBwaWN0dXJlIGhlcmU6IGxldCBtZSBjaGVjay4uLiBZZXAuIEZyb20gdGhhdCBjb21tYW5kLCBpdCBpczogIGBlY2hvIFwiYWRkIGlkPTAsem9uZV9zaXplX21iPTI1NixjYXBhY2l0eV9tYj0xNjM4NCxjb252X3pvbmVzPTExXCIgXHUwMDNlIC9kZXYvemxvb3AtY29udHJvbGAuIEkgcmVtZW1iZXIgc2VlaW5nIHRoaXMgYSB3aGlsZSBiYWNrLiBJdCdzIGEgc29mdHdhcmUtZW11bGF0ZWQsIHpvbmVkIGJsb2NrIGRldmljZSwgcGVyZmVjdCBmb3IgdGVzdGluZy4gRXhjZWxsZW50LiBJdCdzIGFsc28gZnV6emFibGUgYnkgc3l6a2FsbGVyLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLCBzdGFydGluZyB3aXRoIGB6bG9vcF9jb21wbGV0ZV9ycWAgYW5kIGB6bG9vcF9maWxsX3plcm9fcnFgLiBIbW0sIGB6bG9vcF9maWxsX3plcm9fcnFgIGlzIG1hcmtlZCBhcyBzdGF0aWMuIGB6bG9vcF9jb21wbGV0ZV9ycWAgaXMgYWxzbyBzdGF0aWMuIFJpZ2h0LiBOZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIGB6bG9vcGAgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTI3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE1OjExOjE5LjM0MDg4MTEzM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY4MjcwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bG9vcF9jb21wbGV0ZV9ycVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jPTgwMT1zdGF0aWMgdm9pZCB6bG9vcF9maWxsX3plcm9fcnEoc3RydWN0IHJlcXVlc3QgKnJxLCB1bnNpZ25lZCBpbnQgemVyb19mcm9tKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTgyMC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODIxOnN0YXRpYyB2b2lkIHpsb29wX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODIyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz05MzE9c3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIHpsb29wX21xX29wcyA9IHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTMyLVxcdC5xdWV1ZV9ycSAgICAgICA9IHpsb29wX3F1ZXVlX3JxLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5MzM6XFx0LmNvbXBsZXRlXFx0PSB6bG9vcF9jb21wbGV0ZV9ycSxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTM0LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE1OjExOjE5LjM4NzU3MDA2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY3NDM1OTA2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFpGUyBSZXF1ZXN0IFF1ZXVlKipcblxuT2theSwgc28gYHpsb29wX3F1ZXVlX3JxYCBpcyB0aGUgY29yZSBmdW5jdGlvbiBmb3IgYWN0dWFsbHkgZ2V0dGluZyByZXF1ZXN0cyBpbnRvIHRoZSBzeXN0ZW0uIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEJ1dCBJIG5lZWQgbW9yZSBjb250ZXh0LCBhIGJpZ2dlciBwaWN0dXJlLiBXaGVyZSBkb2VzIHRoaXMgZml0IGluIHRoZSBvdmVyYWxsIGZsb3c/IEkgc2hvdWxkIHJlYWxseSBnZXQgYSBmZWVsIGZvciBob3cgZXZlcnl0aGluZyBpcyBvcmdhbml6ZWQgaW4gYHpsb29wLmNgLiBMZXQncyBzZWUgd2hhdCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgaGFuZ2luZyBvdXQgaW4gdGhlcmUuIFVuZGVyc3RhbmRpbmcgdGhlIG5laWdoYm9ycyBvZiBgemxvb3BfcXVldWVfcnFgIGlzIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcxMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE1OjExOjIyLjA2MTkzMjE2MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzU5OTIzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bG9vcF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjU5IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MjU9ZW51bSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDEtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjQyOnN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHpsb29wX29wdF90b2tlbnMgPSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQzLVxcdHsgWkxPT1BfT1BUX0lELFxcdFxcdFxcdFxcXCJpZD0lZFxcXCJcXHR9LFxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc0LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3NTpzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc2LVxcdHVuc2lnbmVkIGludFxcdFxcdG1hc2s7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9OTU9ZW51bSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAwLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDE6ZW51bSB6bG9vcF96b25lX2ZsYWdzIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAyLVxcdFpMT09QX1pPTkVfQ09OViA9IDAsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTA5LSAqL1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTA6c3RydWN0IHpsb29wX3pvbmUge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTEtXFx0c3RydWN0IGxpc3RfaGVhZFxcdG9wZW5fem9uZV9lbnRyeTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjMtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyNDpzdHJ1Y3Qgemxvb3BfZGV2aWNlIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI1LVxcdHVuc2lnbmVkIGludFxcdFxcdGlkO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE1MS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTUyOlxcdHN0cnVjdCB6bG9vcF96b25lXFx0em9uZXNbXSBfX2NvdW50ZWRfYnkobnJfem9uZXMpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNTMtfTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTU0LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNTU6c3RydWN0IHpsb29wX2NtZCB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE1Ni1cXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHR3b3JrO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE2NC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTY1OnN0YXRpYyBERUZJTkVfSURSKHpsb29wX2luZGV4X2lkcik7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE2NjpzdGF0aWMgREVGSU5FX01VVEVYKHpsb29wX2N0bF9tdXRleCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE2Ny1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MTY4PXN0YXRpYyB1bnNpZ25lZCBpbnQgcnFfem9uZV9ubyhzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE2OS17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE3MDpcXHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBycS1cXHUwMDNlcS1cXHUwMDNlcXVldWVkYXRhO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNzEtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTgwLSAqL1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxODE6c3RhdGljIGlubGluZSB2b2lkIHpsb29wX2xydV9yb3RhdGVfb3Blbl96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTgyOlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB6bG9vcF96b25lICp6b25lKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xODMte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE5MS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTkyOnN0YXRpYyBpbmxpbmUgdm9pZCB6bG9vcF9scnVfcmVtb3ZlX29wZW5fem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE5MzpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSlcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTk0LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yMDMtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjIwNDpzdGF0aWMgaW5saW5lIGJvb2wgemxvb3BfY2FuX29wZW5fem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8pXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTIwNS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjEzLSAqL1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyMTQ6c3RhdGljIGJvb2wgemxvb3BfY2xvc2VfaW1wX29wZW5fem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8pXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTIxNS17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjIxNjpcXHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjE3LVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTIxOS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MjIwOlxcdGlmICh6bG9vcF9jYW5fb3Blbl96b25lKHpsbykpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTIyMS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yMzQtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjIzNTpzdGF0aWMgYm9vbCB6bG9vcF9vcGVuX2Nsb3NlZF9vcl9lbXB0eV96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MjM2OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjM3LVxcdFxcdFxcdFxcdFxcdCAgICBib29sIGV4cGxpY2l0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI0NS1cXHRcXHQgKi9cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MjQ2OlxcdFxcdGlmICghemxvb3BfY2FuX29wZW5fem9uZSh6bG8pKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yNDctXFx0XFx0XFx0Z290byBmYWlsO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI1My1cXHRcXHQgKi9cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MjU0OlxcdFxcdGlmICghemxvb3BfY2xvc2VfaW1wX29wZW5fem9uZSh6bG8pKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yNTUtXFx0XFx0XFx0Z290byBmYWlsO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI3Mi1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MjczOnN0YXRpYyBib29sIHpsb29wX2RvX29wZW5fem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjI3NDpcXHRcXHRcXHQgICAgICAgc3RydWN0IHpsb29wX3pvbmUgKnpvbmUsIGJvb2wgZXhwbGljaXQpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI3NS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjgwLVxcdFxcdFxcdHpvbmUtXFx1MDAzZWNvbmQgPSBCTEtfWk9ORV9DT05EX0VYUF9PUEVOO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyODE6XFx0XFx0emxvb3BfbHJ1X3JvdGF0ZV9vcGVuX3pvbmUoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjgyLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI4NC1cXHRjYXNlIEJMS19aT05FX0NPTkRfQ0xPU0VEOlxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyODU6XFx0XFx0cmV0dXJuIHpsb29wX29wZW5fY2xvc2VkX29yX2VtcHR5X3pvbmUoemxvLCB6b25lLCBleHBsaWNpdCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI4Ni1cXHRkZWZhdWx0Olxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI5MC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MjkxOnN0YXRpYyB2b2lkIHpsb29wX21hcmtfZnVsbChzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHN0cnVjdCB6bG9vcF96b25lICp6b25lKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yOTIte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI5NC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Mjk1OlxcdHpsb29wX2xydV9yZW1vdmVfb3Blbl96b25lKHpsbywgem9uZSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI5Ni1cXHR6b25lLVxcdTAwM2Vjb25kID0gQkxLX1pPTkVfQ09ORF9GVUxMO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI5OS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzAwOnN0YXRpYyB2b2lkIHpsb29wX21hcmtfZW1wdHkoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCBzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSlcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzAxLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zMDMtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjMwNDpcXHR6bG9vcF9scnVfcmVtb3ZlX29wZW5fem9uZSh6bG8sIHpvbmUpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zMDUtXFx0em9uZS1cXHUwMDNlY29uZCA9IEJMS19aT05FX0NPTkRfRU1QVFk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzA4LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozMDk6c3RhdGljIGludCB6bG9vcF91cGRhdGVfc2VxX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzEwLXtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzExOlxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXFx1MDAyNnpsby1cXHUwMDNlem9uZXNbem9uZV9ub107XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTMxMi1cXHRzdHJ1Y3Qga3N0YXQgc3RhdDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNDAtXFx0aWYgKCFmaWxlX3NlY3RvcnMpIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzQxOlxcdFxcdHpsb29wX21hcmtfZW1wdHkoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzQyLVxcdH0gZWxzZSBpZiAoZmlsZV9zZWN0b3JzID09IHpsby1cXHUwMDNlem9uZV9jYXBhY2l0eSkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozNDM6XFx0XFx0emxvb3BfbWFya19mdWxsKHpsbywgem9uZSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM0NC1cXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM1NC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzU1OnN0YXRpYyBpbnQgemxvb3Bfb3Blbl96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM1Ni17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjM1NzpcXHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSA9IFxcdTAwMjZ6bG8tXFx1MDAzZXpvbmVzW3pvbmVfbm9dO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNTgtXFx0aW50IHJldCA9IDA7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzY1LVxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoWkxPT1BfWk9ORV9TRVFfRVJST1IsIFxcdTAwMjZ6b25lLVxcdTAwM2VmbGFncykpIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzY2OlxcdFxcdHJldCA9IHpsb29wX3VwZGF0ZV9zZXFfem9uZSh6bG8sIHpvbmVfbm8pO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNjctXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNzAtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjM3MTpcXHRpZiAoIXpsb29wX2RvX29wZW5fem9uZSh6bG8sIHpvbmUsIHRydWUpKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNzItXFx0XFx0cmV0ID0gLUVJTztcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNzktXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjM4MDpzdGF0aWMgaW50IHpsb29wX2Nsb3NlX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzgxLXtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzgyOlxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXFx1MDAyNnpsby1cXHUwMDNlem9uZXNbem9uZV9ub107XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM4My1cXHRpbnQgcmV0ID0gMDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zOTAtXFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChaTE9PUF9aT05FX1NFUV9FUlJPUiwgXFx1MDAyNnpvbmUtXFx1MDAzZWZsYWdzKSkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozOTE6XFx0XFx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM5Mi1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQwMS1cXHRcXHRzcGluX2xvY2soXFx1MDAyNnpvbmUtXFx1MDAzZXdwX2xvY2spO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo0MDI6XFx0XFx0emxvb3BfbHJ1X3JlbW92ZV9vcGVuX3pvbmUoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDAzLVxcdFxcdGlmICh6b25lLVxcdTAwM2V3cCA9PSB6b25lLVxcdTAwM2VzdGFydClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00MjEtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjQyMjpzdGF0aWMgaW50IHpsb29wX3Jlc2V0X3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDIzLXtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NDI0OlxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXFx1MDAyNnpsby1cXHUwMDNlem9uZXNbem9uZV9ub107XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQyNS1cXHRpbnQgcmV0ID0gMDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00NDItXFx0c3Bpbl9sb2NrKFxcdTAwMjZ6b25lLVxcdTAwM2V3cF9sb2NrKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NDQzOlxcdHpsb29wX21hcmtfZW1wdHkoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDQ0LVxcdGNsZWFyX2JpdChaTE9PUF9aT05FX1NFUV9FUlJPUiwgXFx1MDAyNnpvbmUtXFx1MDAzZWZsYWdzKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00NTItXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjQ1MzpzdGF0aWMgaW50IHpsb29wX3Jlc2V0X2FsbF96b25lcyhzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8pXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ1NC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDU4LVxcdGZvciAoaSA9IHpsby1cXHUwMDNlbnJfY29udl96b25lczsgaSBcXHUwMDNjIHpsby1cXHUwMDNlbnJfem9uZXM7IGkrKykge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo0NTk6XFx0XFx0cmV0ID0gemxvb3BfcmVzZXRfem9uZSh6bG8sIGkpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00NjAtXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00NjYtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjQ2NzpzdGF0aWMgaW50IHpsb29wX2ZpbmlzaF96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ2OC17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjQ2OTpcXHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSA9IFxcdTAwMjZ6bG8tXFx1MDAzZXpvbmVzW3pvbmVfbm9dO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00NzAtXFx0aW50IHJldCA9IDA7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDg3LVxcdHNwaW5fbG9jayhcXHUwMDI2em9uZS1cXHUwMDNld3BfbG9jayk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjQ4ODpcXHR6bG9vcF9tYXJrX2Z1bGwoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDg5LVxcdGNsZWFyX2JpdChaTE9PUF9aT05FX1NFUV9FUlJPUiwgXFx1MDAyNnpvbmUtXFx1MDAzZWZsYWdzKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00OTctXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjQ5ODpzdGF0aWMgdm9pZCB6bG9vcF9wdXRfY21kKHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDk5LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MDktXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjUxMDpzdGF0aWMgdm9pZCB6bG9vcF9yd19jb21wbGV0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGxvbmcgcmV0KVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MTEte1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1MTI6XFx0c3RydWN0IHpsb29wX2NtZCAqY21kID0gY29udGFpbmVyX29mKGlvY2IsIHN0cnVjdCB6bG9vcF9jbWQsIGlvY2IpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MTMtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTUxNC1cXHRjbWQtXFx1MDAzZXJldCA9IHJldDtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTE1OlxcdHpsb29wX3B1dF9jbWQoY21kKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTE2LX1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTE3LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1MTg6c3RhdGljIGludCB6bG9vcF9kb19ydyhzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTUxOS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTIyLVxcdHVuc2lnbmVkIGludCBucl9idmVjID0gYmxrX3JxX25yX2J2ZWMocnEpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1MjM6XFx0c3RydWN0IHpsb29wX2RldmljZSAqemxvID0gcnEtXFx1MDAzZXEtXFx1MDAzZXF1ZXVlZGF0YTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTI0OlxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXFx1MDAyNnpsby1cXHUwMDNlem9uZXNbcnFfem9uZV9ubyhycSldO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MjUtXFx0c3RydWN0IHJlcV9pdGVyYXRvciBycV9pdGVyO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTU2MC1cXHRjbWQtXFx1MDAzZWlvY2Iua2lfZmlscCA9IHpvbmUtXFx1MDAzZWZpbGU7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjU2MTpcXHRjbWQtXFx1MDAzZWlvY2Iua2lfY29tcGxldGUgPSB6bG9vcF9yd19jb21wbGV0ZTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTYyLVxcdGlmICghemxvLVxcdTAwM2VidWZmZXJlZF9pbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01NzAtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjU3MTpzdGF0aWMgaW50IHpsb29wX3NlcV93cml0ZV9wcmVwKHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTcyLXtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTczLVxcdHN0cnVjdCByZXF1ZXN0ICpycSA9IGJsa19tcV9ycV9mcm9tX3BkdShjbWQpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1NzQ6XFx0c3RydWN0IHpsb29wX2RldmljZSAqemxvID0gcnEtXFx1MDAzZXEtXFx1MDAzZXF1ZXVlZGF0YTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTc1LVxcdHVuc2lnbmVkIGludCB6b25lX25vID0gcnFfem9uZV9ubyhycSk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTc3LVxcdGJvb2wgaXNfYXBwZW5kID0gcmVxX29wKHJxKSA9PSBSRVFfT1BfWk9ORV9BUFBFTkQ7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjU3ODpcXHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSA9IFxcdTAwMjZ6bG8tXFx1MDAzZXpvbmVzW3pvbmVfbm9dO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01NzktXFx0c2VjdG9yX3Qgem9uZV9lbmQgPSB6b25lLVxcdTAwM2VzdGFydCArIHpsby1cXHUwMDNlem9uZV9jYXBhY2l0eTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01OTEtXFx0XFx0ICogSWYgb3JkZXJlZCB6b25lIGFwcGVuZCBpcyBpbiB1c2UsIHdlIGFscmVhZHkgY2hlY2tlZCBhbmQgc2V0XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjU5MjpcXHRcXHQgKiB0aGUgdGFyZ2V0IHNlY3RvciBpbiB6bG9vcF9xdWV1ZV9ycSgpLlxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01OTMtXFx0XFx0ICovXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjExLVxcdC8qIEltcGxpY2l0bHkgb3BlbiB0aGUgdGFyZ2V0IHpvbmUuICovXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjYxMjpcXHRpZiAoIXpsb29wX2RvX29wZW5fem9uZSh6bG8sIHpvbmUsIGZhbHNlKSkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MTMtXFx0XFx0cmV0ID0gLUVJTztcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MjQtXFx0XFx0aWYgKHpvbmUtXFx1MDAzZXdwID09IHpvbmVfZW5kKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2MjU6XFx0XFx0XFx0emxvb3BfbWFya19mdWxsKHpsbywgem9uZSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTYyNi1cXHR9XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjMxLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2MzI6c3RhdGljIHZvaWQgemxvb3Bfcncoc3RydWN0IHpsb29wX2NtZCAqY21kKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MzMte1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MzQtXFx0c3RydWN0IHJlcXVlc3QgKnJxID0gYmxrX21xX3JxX2Zyb21fcGR1KGNtZCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjYzNTpcXHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBycS1cXHUwMDNlcS1cXHUwMDNlcXVldWVkYXRhO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MzYtXFx0dW5zaWduZWQgaW50IHpvbmVfbm8gPSBycV96b25lX25vKHJxKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MzktXFx0Ym9vbCBpc193cml0ZSA9IHJlcV9vcChycSkgPT0gUkVRX09QX1dSSVRFIHx8IGlzX2FwcGVuZDtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NjQwOlxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02NDEtXFx0aW50IHJldCA9IC1FSU87XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjY2LVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnpvbmUtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2Njc6XFx0XFx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY2OC1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnpvbmUtXFx1MDAzZWxvY2spO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY3NC1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ6b25lLVxcdTAwM2Vsb2NrKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Njc1OlxcdFxcdHJldCA9IHpsb29wX3NlcV93cml0ZV9wcmVwKGNtZCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY3Ni1cXHRcXHRpZiAoIXJldClcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Njc3OlxcdFxcdFxcdHJldCA9IHpsb29wX2RvX3J3KGNtZCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY3OC1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnpvbmUtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02NzktXFx0fSBlbHNlIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NjgwOlxcdFxcdHJldCA9IHpsb29wX2RvX3J3KGNtZCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY4MS1cXHR9XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjgzLVxcdGlmIChyZXQgIT0gLUVJT0NCUVVFVUVEKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2ODQ6XFx0XFx0emxvb3BfcndfY29tcGxldGUoXFx1MDAyNmNtZC1cXHUwMDNlaW9jYiwgcmV0KTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Njg1OlxcdHpsb29wX3B1dF9jbWQoY21kKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjg2LX1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjg3LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2ODg6c3RhdGljIGlubGluZSBib29sIHpsb29wX3pvbmVfaXNfYWN0aXZlKHN0cnVjdCB6bG9vcF96b25lICp6b25lKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02ODkte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY5OS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzAwOnN0YXRpYyBpbnQgemxvb3BfcmVjb3JkX3NhZmVfd3BzKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbylcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzAxLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03MDUtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHpsby1cXHUwMDNlbnJfem9uZXM7IGkrKykge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3MDY6XFx0XFx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcXHUwMDI2emxvLVxcdTAwM2V6b25lc1tpXTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzA3LVxcdFxcdHN0cnVjdCBmaWxlICpmaWxlID0gem9uZS1cXHUwMDNlZmlsZTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzA4LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3MDk6XFx0XFx0aWYgKCF6bG9vcF96b25lX2lzX2FjdGl2ZSh6b25lKSlcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzEwLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTcyNS0gKi9cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzI2OnN0YXRpYyBpbnQgemxvb3BfZmx1c2goc3RydWN0IHpsb29wX2RldmljZSAqemxvKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03Mjcte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTczMS1cXHRpZiAoemxvLVxcdTAwM2VkaXNjYXJkX3dyaXRlX2NhY2hlKSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjczMjpcXHRcXHRyZXQgPSB6bG9vcF9yZWNvcmRfc2FmZV93cHMoemxvKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzMzLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzQzLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3NDQ6c3RhdGljIHZvaWQgemxvb3BfaGFuZGxlX2NtZChzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc0NS17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc0Ni1cXHRzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBibGtfbXFfcnFfZnJvbV9wZHUoY21kKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzQ3OlxcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IHJxLVxcdTAwM2VxLVxcdTAwM2VxdWV1ZWRhdGE7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc0OC1cXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NTctXFx0XFx0LypcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzU4OlxcdFxcdCAqIHpsb29wX3J3KCkgYWx3YXlzIGV4ZWN1dGVzIGFzeW5jaHJvbm91c2x5IG9yIGNvbXBsZXRlc1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NTktXFx0XFx0ICogZGlyZWN0bHkuXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc2MC1cXHRcXHQgKi9cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzYxOlxcdFxcdHpsb29wX3J3KGNtZCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc2Mi1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc2My1cXHRjYXNlIFJFUV9PUF9GTFVTSDpcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzY0OlxcdFxcdGNtZC1cXHUwMDNlcmV0ID0gemxvb3BfZmx1c2goemxvKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzY1LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NjYtXFx0Y2FzZSBSRVFfT1BfWk9ORV9SRVNFVDpcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzY3OlxcdFxcdGNtZC1cXHUwMDNlcmV0ID0gemxvb3BfcmVzZXRfem9uZSh6bG8sIHJxX3pvbmVfbm8ocnEpKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzY4LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NjktXFx0Y2FzZSBSRVFfT1BfWk9ORV9SRVNFVF9BTEw6XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc3MDpcXHRcXHRjbWQtXFx1MDAzZXJldCA9IHpsb29wX3Jlc2V0X2FsbF96b25lcyh6bG8pO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NzEtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc3Mi1cXHRjYXNlIFJFUV9PUF9aT05FX0ZJTklTSDpcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzczOlxcdFxcdGNtZC1cXHUwMDNlcmV0ID0gemxvb3BfZmluaXNoX3pvbmUoemxvLCBycV96b25lX25vKHJxKSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc3NC1cXHRcXHRicmVhaztcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzc1LVxcdGNhc2UgUkVRX09QX1pPTkVfT1BFTjpcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Nzc2OlxcdFxcdGNtZC1cXHUwMDNlcmV0ID0gemxvb3Bfb3Blbl96b25lKHpsbywgcnFfem9uZV9ubyhycSkpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NzctXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc3OC1cXHRjYXNlIFJFUV9PUF9aT05FX0NMT1NFOlxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3Nzk6XFx0XFx0Y21kLVxcdTAwM2VyZXQgPSB6bG9vcF9jbG9zZV96b25lKHpsbywgcnFfem9uZV9ubyhycSkpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03ODAtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzkwLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3OTE6c3RhdGljIHZvaWQgemxvb3BfY21kX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc5Mi17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc5MzpcXHRzdHJ1Y3Qgemxvb3BfY21kICpjbWQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHpsb29wX2NtZCwgd29yayk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc5NC1cXHRpbnQgb3JpZ19mbGFncyA9IGN1cnJlbnQtXFx1MDAzZWZsYWdzO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc5Ni1cXHRjdXJyZW50LVxcdTAwM2VmbGFncyB8PSBQRl9MT0NBTF9USFJPVFRMRSB8IFBGX01FTUFMTE9DX05PSU87XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc5NzpcXHR6bG9vcF9oYW5kbGVfY21kKGNtZCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc5OC1cXHRjdXJyZW50LVxcdTAwM2VmbGFncyA9IG9yaWdfZmxhZ3M7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODAwLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo4MDE6c3RhdGljIHZvaWQgemxvb3BfZmlsbF96ZXJvX3JxKHN0cnVjdCByZXF1ZXN0ICpycSwgdW5zaWduZWQgaW50IHplcm9fZnJvbSlcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODAyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy04MjAtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjgyMTpzdGF0aWMgdm9pZCB6bG9vcF9jb21wbGV0ZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTgyMi17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjgyMzpcXHRzdHJ1Y3Qgemxvb3BfY21kICpjbWQgPSBibGtfbXFfcnFfdG9fcGR1KHJxKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODI0OlxcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IHJxLVxcdTAwM2VxLVxcdTAwM2VxdWV1ZWRhdGE7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTgyNS1cXHR1bnNpZ25lZCBpbnQgem9uZV9ubyA9IGNtZC1cXHUwMDNlc2VjdG9yIFxcdTAwM2VcXHUwMDNlIHpsby1cXHUwMDNlem9uZV9zaGlmdDtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODI2OlxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXFx1MDAyNnpsby1cXHUwMDNlem9uZXNbem9uZV9ub107XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTgyNy1cXHRibGtfc3RhdHVzX3Qgc3RzID0gQkxLX1NUU19PSztcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy04MzYtXFx0XFx0aWYgKGNtZC1cXHUwMDNlcmV0IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgY21kLVxcdTAwM2VyZXQgIT0gYmxrX3JxX2J5dGVzKHJxKSlcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODM3OlxcdFxcdFxcdHpsb29wX2ZpbGxfemVyb19ycShycSwgY21kLVxcdTAwM2VyZXQpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy04MzgtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODc0LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo4NzU6c3RhdGljIGJvb2wgemxvb3Bfc2V0X3pvbmVfYXBwZW5kX3NlY3RvcihzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg3Ni17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjg3NzpcXHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBycS1cXHUwMDNlcS1cXHUwMDNlcXVldWVkYXRhO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy04NzgtXFx0dW5zaWduZWQgaW50IHpvbmVfbm8gPSBycV96b25lX25vKHJxKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODc5OlxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXFx1MDAyNnpsby1cXHUwMDNlem9uZXNbem9uZV9ub107XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg4MC1cXHRzZWN0b3JfdCB6b25lX2VuZCA9IHpvbmUtXFx1MDAzZXN0YXJ0ICsgemxvLVxcdTAwM2V6b25lX2NhcGFjaXR5O1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg5My1cXHRpZiAoem9uZS1cXHUwMDNld3AgXFx1MDAzZT0gem9uZV9lbmQpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjg5NDpcXHRcXHR6bG9vcF9tYXJrX2Z1bGwoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODk1LVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkwMC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTAxOnN0YXRpYyBibGtfc3RhdHVzX3Qgemxvb3BfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkwMi1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgYmxrX21xX3F1ZXVlX2RhdGEgKmJkKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkwNC1cXHRzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBiZC1cXHUwMDNlcnE7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjkwNTpcXHRzdHJ1Y3Qgemxvb3BfY21kICpjbWQgPSBibGtfbXFfcnFfdG9fcGR1KHJxKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTA2OlxcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IHJxLVxcdTAwM2VxLVxcdTAwM2VxdWV1ZWRhdGE7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkwNy1cXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05MTgtXFx0aWYgKHpsby1cXHUwMDNlb3JkZXJlZF96b25lX2FwcGVuZCBcXHUwMDI2XFx1MDAyNiByZXFfb3AocnEpID09IFJFUV9PUF9aT05FX0FQUEVORCkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5MTk6XFx0XFx0aWYgKCF6bG9vcF9zZXRfem9uZV9hcHBlbmRfc2VjdG9yKHJxKSlcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTIwLVxcdFxcdFxcdHJldHVybiBCTEtfU1RTX0lPRVJSO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkyNC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTI1OlxcdElOSVRfV09SSyhcXHUwMDI2Y21kLVxcdTAwM2V3b3JrLCB6bG9vcF9jbWRfd29ya2ZuKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTI2LVxcdHF1ZXVlX3dvcmsoemxvLVxcdTAwM2V3b3JrcXVldWUsIFxcdTAwMjZjbWQtXFx1MDAzZXdvcmspO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkzMC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTMxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyB6bG9vcF9tcV9vcHMgPSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjkzMjpcXHQucXVldWVfcnEgICAgICAgPSB6bG9vcF9xdWV1ZV9ycSxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTMzOlxcdC5jb21wbGV0ZVxcdD0gemxvb3BfY29tcGxldGVfcnEsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkzNC19O1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05MzUtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjkzNjpzdGF0aWMgaW50IHpsb29wX29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTM3LXtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTM4OlxcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IGRpc2stXFx1MDAzZXByaXZhdGVfZGF0YTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTM5LVxcdGludCByZXQ7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk0MC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTQxOlxcdHJldCA9IG11dGV4X2xvY2tfa2lsbGFibGUoXFx1MDAyNnpsb29wX2N0bF9tdXRleCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk0Mi1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk0Ni1cXHRcXHRyZXQgPSAtRU5YSU87XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjk0NzpcXHRtdXRleF91bmxvY2soXFx1MDAyNnpsb29wX2N0bF9tdXRleCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk0OC1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk1MC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTUxOnN0YXRpYyBpbnQgemxvb3BfcmVwb3J0X3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk1Mi1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfem9uZXMsIHN0cnVjdCBibGtfcmVwb3J0X3pvbmVzX2FyZ3MgKmFyZ3MpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk1My17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjk1NDpcXHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBkaXNrLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk1NS1cXHRzdHJ1Y3QgYmxrX3pvbmUgYmxreiA9IHt9O1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk2NS1cXHRcXHR1bnNpZ25lZCBpbnQgem9uZV9ubyA9IGZpcnN0ICsgaTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTY2OlxcdFxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXFx1MDAyNnpsby1cXHUwMDNlem9uZXNbem9uZV9ub107XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk2Ny1cXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05NzAtXFx0XFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChaTE9PUF9aT05FX1NFUV9FUlJPUiwgXFx1MDAyNnpvbmUtXFx1MDAzZWZsYWdzKSkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5NzE6XFx0XFx0XFx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk3Mi1cXHRcXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAwMS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAwMjpzdGF0aWMgdm9pZCB6bG9vcF9mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMDMte1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDA0OlxcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IGRpc2stXFx1MDAzZXByaXZhdGVfZGF0YTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAwNS1cXHR1bnNpZ25lZCBpbnQgaTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDA5LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB6bG8tXFx1MDAzZW5yX3pvbmVzOyBpKyspIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAxMDpcXHRcXHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSA9IFxcdTAwMjZ6bG8tXFx1MDAzZXpvbmVzW2ldO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDExLVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMjItXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwMjM6c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB6bG9vcF9mb3BzID0ge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDI0LVxcdC5vd25lclxcdFxcdFxcdD0gVEhJU19NT0RVTEUsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwMjU6XFx0Lm9wZW5cXHRcXHRcXHQ9IHpsb29wX29wZW4sXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwMjY6XFx0LnJlcG9ydF96b25lc1xcdFxcdD0gemxvb3BfcmVwb3J0X3pvbmVzLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDI3OlxcdC5mcmVlX2Rpc2tcXHRcXHQ9IHpsb29wX2ZyZWVfZGlzayxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAyOC19O1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTEwMzA9X19wcmludGYoMywgNClcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAzMTpzdGF0aWMgc3RydWN0IGZpbGUgKnpsb29wX2ZpbHBfb3Blbl9mbXQoaW50IG9mbGFncywgdW1vZGVfdCBtb2RlLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDMyLVxcdFxcdGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwNDgtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwNDk6c3RhdGljIGludCB6bG9vcF9nZXRfYmxvY2tfc2l6ZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwNTA6XFx0XFx0XFx0XFx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwNTEte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwNzktXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwODA6c3RhdGljIGludCB6bG9vcF9pbml0X3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCBzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cyxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTA4MS1cXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgem9uZV9ubywgYm9vbCByZXN0b3JlKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDgyLXtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTA4MzpcXHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSA9IFxcdTAwMjZ6bG8tXFx1MDAzZXpvbmVzW3pvbmVfbm9dO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDg0LVxcdGludCBvZmxhZ3MgPSBPX1JEV1I7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTEwNS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTEwNjpcXHRcXHR6b25lLVxcdTAwM2VmaWxlID0gemxvb3BfZmlscF9vcGVuX2ZtdChvZmxhZ3MsIDA2MDAsIFxcXCIlcy8ldS9jbnYtJTA2dVxcXCIsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMDctXFx0XFx0XFx0XFx0XFx0emxvLVxcdTAwM2ViYXNlX2RpciwgemxvLVxcdTAwM2VpZCwgem9uZV9ubyk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTExNS1cXHRcXHRpZiAoIXpsby1cXHUwMDNlYmxvY2tfc2l6ZSkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTE2OlxcdFxcdFxcdHJldCA9IHpsb29wX2dldF9ibG9ja19zaXplKHpsbywgem9uZSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMTctXFx0XFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTQ1LVxcdC8qIFNlcXVlbnRpYWwgem9uZSBmaWxlLiAqL1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTQ2OlxcdHpvbmUtXFx1MDAzZWZpbGUgPSB6bG9vcF9maWxwX29wZW5fZm10KG9mbGFncywgMDYwMCwgXFxcIiVzLyV1L3NlcS0lMDZ1XFxcIixcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE0Ny1cXHRcXHRcXHRcXHRcXHQgemxvLVxcdTAwM2ViYXNlX2RpciwgemxvLVxcdTAwM2VpZCwgem9uZV9ubyk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE1NS1cXHRpZiAoIXpsby1cXHUwMDNlYmxvY2tfc2l6ZSkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTU2OlxcdFxcdHJldCA9IHpsb29wX2dldF9ibG9ja19zaXplKHpsbywgem9uZSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNTctXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTYwLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTYxOlxcdHpsb29wX2dldF9ibG9ja19zaXplKHpsbywgem9uZSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNjItXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNjMtXFx0bXV0ZXhfbG9jayhcXHUwMDI2em9uZS1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExNjQ6XFx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNjUtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ6b25lLVxcdTAwM2Vsb2NrKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTY5LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTcwOnN0YXRpYyBib29sIHpsb29wX2Rldl9leGlzdHMoc3RydWN0IHpsb29wX2RldmljZSAqemxvKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTcxLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTc0LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTc1OlxcdGNudiA9IHpsb29wX2ZpbHBfb3Blbl9mbXQoT19SRE9OTFksIDA2MDAsIFxcXCIlcy8ldS9jbnYtJTA2dVxcXCIsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNzYtXFx0XFx0XFx0XFx0ICB6bG8tXFx1MDAzZWJhc2VfZGlyLCB6bG8tXFx1MDAzZWlkLCAwKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE3NzpcXHRzZXEgPSB6bG9vcF9maWxwX29wZW5fZm10KE9fUkRPTkxZLCAwNjAwLCBcXFwiJXMvJXUvc2VxLSUwNnVcXFwiLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTc4LVxcdFxcdFxcdFxcdCAgemxvLVxcdTAwM2ViYXNlX2RpciwgemxvLVxcdTAwM2VpZCwgMCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE4OC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE4OTpzdGF0aWMgaW50IHpsb29wX2N0bF9hZGQoc3RydWN0IHpsb29wX29wdGlvbnMgKm9wdHMpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExOTAte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExOTctXFx0dW5zaWduZWQgaW50IG5yX3pvbmVzLCBpLCBqO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTk4OlxcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbztcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE5OS1cXHRpbnQgcmV0ID0gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjI1LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjI2OlxcdHJldCA9IG11dGV4X2xvY2tfa2lsbGFibGUoXFx1MDAyNnpsb29wX2N0bF9tdXRleCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyMjctXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjMxLVxcdGlmIChvcHRzLVxcdTAwM2VpZCBcXHUwMDNlPSAwKSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyMzI6XFx0XFx0cmV0ID0gaWRyX2FsbG9jKFxcdTAwMjZ6bG9vcF9pbmRleF9pZHIsIHpsbyxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTIzMy1cXHRcXHRcXHRcXHQgIG9wdHMtXFx1MDAzZWlkLCBvcHRzLVxcdTAwM2VpZCArIDEsIEdGUF9LRVJORUwpO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyMzYtXFx0fSBlbHNlIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTIzNzpcXHRcXHRyZXQgPSBpZHJfYWxsb2MoXFx1MDAyNnpsb29wX2luZGV4X2lkciwgemxvLCAwLCAwLCBHRlBfS0VSTkVMKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTIzOC1cXHR9XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyMzk6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ6bG9vcF9jdGxfbXV0ZXgpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjQwLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyNzQtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyNzU6XFx0emxvLVxcdTAwM2VkYXRhX2RpciA9IHpsb29wX2ZpbHBfb3Blbl9mbXQoT19SRE9OTFkgfCBPX0RJUkVDVE9SWSwgMCwgXFxcIiVzLyV1XFxcIixcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI3Ni1cXHRcXHRcXHRcXHRcXHQgICAgemxvLVxcdTAwM2ViYXNlX2RpciwgemxvLVxcdTAwM2VpZCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI4NS1cXHQgKiBJZiB3ZSBhbHJlYWR5IGhhdmUgem9uZSBmaWxlcywgd2UgYXJlIHJlc3RvcmluZyBhIGRldmljZSBjcmVhdGVkIGJ5IGFcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTI4NjpcXHQgKiBwcmV2aW91cyBhZGQgb3BlcmF0aW9uLiBJbiB0aGlzIGNhc2UsIHpsb29wX2luaXRfem9uZSgpIHdpbGwgY2hlY2tcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI4Ny1cXHQgKiB0aGF0IHRoZSB6b25lIGZpbGVzIGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIHpvbmUgY29uZmlndXJhdGlvbiBnaXZlbi5cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI4OC1cXHQgKi9cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTI4OTpcXHRyZXN0b3JlID0gemxvb3BfZGV2X2V4aXN0cyh6bG8pO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjkwLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl96b25lczsgaSsrKSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyOTE6XFx0XFx0cmV0ID0gemxvb3BfaW5pdF96b25lKHpsbywgb3B0cywgaSwgcmVzdG9yZSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyOTItXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMzAxLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMzAyOlxcdHpsby1cXHUwMDNldGFnX3NldC5vcHMgPSBcXHUwMDI2emxvb3BfbXFfb3BzO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMzAzLVxcdHpsby1cXHUwMDNldGFnX3NldC5ucl9od19xdWV1ZXMgPSBvcHRzLVxcdTAwM2Vucl9xdWV1ZXM7XFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTU6MTE6MjIuMTA1NTQyMDRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTI1NTIyMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWm9uZWQgQmxvY2sgTG9vcCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGZvciB0aGUgYHpsb29wYCBkcml2ZXIsIGFuZCBpdCBzZWVtcyBsaWtlIHdlJ3JlIGdldHRpbmcgc29tZSB1cGRhdGVzLiBUaGUgZHJpdmVyIGl0c2VsZiBpcyBjbGVhcmx5IGlkZW50aWZpZWQgYXMgYHpsb29wYCwgYW5kIHRoZSBhdXRob3IgaGFzIGxpc3RlZCBvdXQgYWxsIHRoZSBmdW5jdGlvbnMgd2l0aGluIHRoZSBkcml2ZXIuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBJJ20gc2VlaW5nIGZ1bmN0aW9ucyBsaWtlIGB6bG9vcF9xdWV1ZV9ycWAsIGB6bG9vcF9jb21wbGV0ZV9ycWAsIGB6bG9vcF9yd2AsIGFuZCBhIHdob2xlIGhvc3Qgb2Ygem9uZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyAtIGB6bG9vcF9vcGVuX3pvbmVgLCBgemxvb3BfY2xvc2Vfem9uZWAsIGV0Yy4gU2VlbXMgcHJldHR5IHN0YW5kYXJkIGZvciBhIFpvbmVkIEJsb2NrIERldmljZSAoWkJEKSBkcml2ZXIuXG5cblRoZSBjb3JlIG9mIHRoaXMgcGF0Y2gsIGFzIGZhciBhcyBJIGNhbiBzZWUsIGlzIG1vZGlmeWluZyBgemxvb3BfY29tcGxldGVfcnFgIGFuZCBhZGRpbmcgYHpsb29wX2ZpbGxfemVyb19ycWAuIFRoZSBjaGFuZ2UgdG8gYHpsb29wX2NvbXBsZXRlX3JxYCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuIFNpbmNlIGl0J3MgY2FsbGVkIGJ5IHRoZSBibG9jayBsYXllciB1cG9uIHJlcXVlc3QgY29tcGxldGlvbiwgdGhpcyBwcm9iYWJseSBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggaGFuZGxpbmcgem9uZWQgc2VtYW50aWNzIGFmdGVyIEkvTy4gQXMgZm9yIHRoZSBgemxvb3BfZmlsbF96ZXJvX3JxYCBhZGRpdGlvbiAtIHRoYXQncyBhbHNvIGludGVyZXN0aW5nLiBJIHdvbmRlciBpZiB0aGlzIGlzIGFuIG9wdGltaXphdGlvbiBmb3IgY2xlYXJpbmcgem9uZXMgb3IgcGVyaGFwcyBwYXJ0IG9mIGEgZ2FyYmFnZSBjb2xsZWN0aW9uIHN0cmF0ZWd5LlxuXG5Ob3csIGdpdmVuIHRoZSBgQkxLX0RFVl9aT05FRF9MT09QYCBjb25maWcsIEkgc2hvdWxkIGNoZWNrIHRoZSBgZHJpdmVycy9ibG9jay9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQkxLX0RFVl9aT05FRF9MT09QYC4gS25vd2luZyB3aGF0IG90aGVyIGZlYXR1cmVzIG9yIGNvbmZpZ3MgZW5hYmxlIG9yIGRpc2FibGUgdGhpcyB3aWxsIGdpdmUgbWUgbW9yZSBjb250ZXh0LiBUaGlzIHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBjb3VsZCBpbXBhY3Qgb3IgYmUgaW1wYWN0ZWQgYnkgYW55IG90aGVyIGNoYW5nZXMgaW4gdGhlIGJsb2NrIGxheWVyLCBlc3BlY2lhbGx5IGlmIGl0IHJlbGF0ZXMgdG8gb3RoZXIgWkJEIGRyaXZlcnMgb3IgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG90aGVyIGRlcGVuZGVuY2llcyBtaWdodCBleGlzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwNzIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTU6MTE6MjguMDMxMDY3NzhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjQ2NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZz0zNTQ9c291cmNlIFxcXCJkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzU1LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzozNTY6Y29uZmlnIEJMS19ERVZfWk9ORURfTE9PUFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNTctXFx0dHJpc3RhdGUgXFxcIlpvbmVkIGxvb3BiYWNrIGRldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNToxMToyOC4wNzQ3MjE5MDhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3Nzc5MDk4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCBpdDpcblxuKipEaXZpbmcgaW50byBCbG9jayBEZXZpY2UgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgYmxvY2sgZGV2aWNlIG9wdGlvbnMgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBpbnRvIHRoZSBgZHJpdmVycy9ibG9jay9LY29uZmlnYCBmaWxlLiBJJ2xsIG5lZWQgdG8ganVtcCBkaXJlY3RseSB0byBsaW5lIDM1NiwgYXMgSSBoYXZlIGEgZ29vZCBmZWVsaW5nIHRoYXQncyB3aGVyZSB0aGUgY3J1Y2lhbCBiaXRzIEknbSBpbnRlcmVzdGVkIGluIHJlc2lkZS4gSG9wZWZ1bGx5LCB0aGF0IGxvY2F0aW9uIHdpbGwgcHJvdmlkZSB0aGUgcmVsZXZhbnQgY29udGV4dC4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBmb2xsb3cgdGhlIGxvZ2ljIGFuZCB1bmRlcnN0YW5kIHRoZSBpbnRlcmRlcGVuZGVuY2llcyB0aGVyZS4gVGhpcyBzaG91bGQgY2xhcmlmeSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGVpciBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODU2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTU6MTE6MzEuMTUyNTE2Njk2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNTA6XFx0XFx0ICBTYXkgTiBpZiB5b3UgZG9uJ3Qgd2FudCB0byBzdXBwb3J0IGxlZ2FjeSBjb21tYW5kIG9wY29kZS4gSXQgaXNcXG4gMzUxOlxcdFxcdCAgc3VnZ2VzdGVkIHRvIGVuYWJsZSBOIGlmIHlvdXIgYXBwbGljYXRpb24odWJsayBzZXJ2ZXIpIHN3aXRjaGVzIHRvXFxuIDM1MjpcXHRcXHQgIGlvY3RsIGNvbW1hbmQgZW5jb2RpbmcuXFxuIDM1MzpcXHRcXG4gMzU0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWdcXFwiXFxuIDM1NTpcXHRcXG4gMzU2OlxcdGNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcXG4gMzU3OlxcdFxcdHRyaXN0YXRlIFxcXCJab25lZCBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gMzU4OlxcdFxcdGRlcGVuZHMgb24gQkxLX0RFVl9aT05FRFxcbiAzNTk6XFx0XFx0aGVscFxcbiAzNjA6XFx0XFx0ICBTYXlpbmcgWSBoZXJlIHdpbGwgYWxsb3cgeW91IHRvIHVzZSBjcmVhdGUgYSB6b25lZCBibG9jayBkZXZpY2UgdXNpbmdcXG4gMzYxOlxcdFxcdCAgcmVndWxhciBmaWxlcyBmb3Igem9uZXMgKG9uZSBmaWxlIHBlciB6b25lcykuIFRoaXMgaXMgdXNlZnVsIHRvIHRlc3RcXG4gMzYyOlxcdFxcdCAgZmlsZSBzeXN0ZW1zLCBkZXZpY2UgbWFwcGVyIGFuZCBhcHBsaWNhdGlvbnMgdGhhdCBzdXBwb3J0IHpvbmVkIGJsb2NrXFxuIDM2MzpcXHRcXHQgIGRldmljZXMuIFRvIGNyZWF0ZSBhIHpvbmVkIGxvb3AgZGV2aWNlLCBubyB1c2VyIHV0aWxpdHkgaXMgbmVlZGVkLCBhXFxuIDM2NDpcXHRcXHQgIHpvbmVkIGxvb3AgZGV2aWNlIGNhbiBiZSBjcmVhdGVkIChvciByZS1zdGFydGVkKSB1c2luZyBhIGNvbW1hbmRcXG4gMzY1OlxcdFxcdCAgbGlrZTpcXG4gMzY2OlxcdFxcbiAzNjc6XFx0XFx0ICBlY2hvIFxcXCJhZGQgaWQ9MCx6b25lX3NpemVfbWI9MjU2LGNhcGFjaXR5X21iPTE2Mzg0LGNvbnZfem9uZXM9MTFcXFwiIFxcdTAwM2UgXFxcXFxcbiAzNjg6XFx0XFx0XFx0L2Rldi96bG9vcC1jb250cm9sXFxuIDM2OTpcXHRcXG4gMzcwOlxcdFxcdCAgU2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmxvY2tkZXYvem9uZWRfbG9vcC5yc3QgZm9yIHVzYWdlXFxuIDM3MTpcXHRcXHQgIGRldGFpbHMuXFxuIDM3MjpcXHRcXG4gMzczOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMzc0OlxcdFxcbiAzNzU6XFx0ZW5kaWYgIyBCTEtfREVWXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE1OjExOjMxLjE1MjU5MDMyNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODQ3NDQyNzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBab25lZCBMb29wIERldmljZSBDb25maWd1cmF0aW9uIGFuZCBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBgQkxLX0RFVl9aT05FRF9MT09QYCBoYXMgYSBjbGVhciBkZXBlbmRlbmN5IG9uIGBCTEtfREVWX1pPTkVEYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBib3RoIGFyZSBlbmFibGVkIGluIHRoZSBmdXp6aW5nIHNldHVwLCBzbyBJJ2xsIGFkZCB0aGVtIHRvIGBFbmFibGVDb25maWdzYCBpbW1lZGlhdGVseS4gTWFrZXMgc2Vuc2U7IHlvdSBjYW4ndCBoYXZlIHRoZSBsb29wLXNwZWNpZmljIHN0dWZmIHdpdGhvdXQgdGhlIGNvcmUgem9uZWQgYmxvY2sgZGV2aWNlIHN1cHBvcnQuXG5cbk5vdywgdGhlIHBhdGNoIGl0c2VsZi4uLiBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggc2hvcnQgcmVhZHMgYW5kIHplcm9pbmcgdGhlIHVucmVhZCBwb3J0aW9uLiBJdCdzIHJlcGxhY2luZyBgemVyb19maWxsX2Jpb2Agd2l0aCBgemxvb3BfZmlsbF96ZXJvX3JxYC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgemVyb2luZyBiZWhhdmlvciwgZXNwZWNpYWxseSB3aXRoIHpvbmVkIGRldmljZXMsIGFsd2F5cyBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIERlZmluaXRlbHkgd29ydGggaW52ZXN0aWdhdGluZy5cblxuTGV0J3Mgc2VlLCB3aGF0IGFyZSB0aGUga2V5IHN5bWJvbHMgaGVyZT8gSSdtIHRoaW5raW5nOiBgemxvb3BfY29tcGxldGVfcnFgLCBgemxvb3BfZmlsbF96ZXJvX3JxYCAodGhvdWdoIGl0J3Mgc3RhdGljLCBzbyB0aGF0IG1pZ2h0IGNvbXBsaWNhdGUgdGhpbmdzKSwgYHpsb29wX3J3YCwgYHpsb29wX3F1ZXVlX3JxYCwgYW5kIGB6bG9vcF9jdGxfYWRkYC5cblxuQWxyaWdodCwgbGV0J3MgZG91YmxlIGNoZWNrIGlmIGB6bG9vcF9maWxsX3plcm9fcnFgIGlzIHN0YXRpYy4gWXVwLCBpdCBpcy4gSG1tLCBzdGF0aWMgZnVuY3Rpb25zIGFyZSBhIGxpdHRsZSB0cmlja3kuIE9rYXksIGB6bG9vcF9jb21wbGV0ZV9ycWAgaXMgb3VyIG1haW4gZm9jdXMgc2luY2UgaXQncyB0aGUgbW9zdCBjb21tb24gZnVuY3Rpb24gcmVsYXRlZCB0byB0aGF0IHRhc2suIEknbGwgbmVlZCB0byBjaGVjayBob3cgc3l6a2FsbGVyIGhhbmRsZXMgc3RhdGljIGZ1bmN0aW9ucy4gYHpsb29wX3F1ZXVlX3JxYCBhbmQgYHpsb29wX3J3YCBhcmUgYWxzbyBpbXBvcnRhbnQgc3ltYm9scy4gV2FpdCwgYHpsb29wX2NvbXBsZXRlX3JxYCBpcyBzdGF0aWMgdG9vISBUaGF0J3Mgd2VpcmQuXG5cbk9rYXksIGNoZWNraW5nIGlmIGB6bG9vcF9jb21wbGV0ZV9ycWAgaXMgc3RhdGljLiBZdXAuIEJ1dCB3YWl0LCBpdCdzIGFzc2lnbmVkIHRvIGB6bG9vcF9tcV9vcHMuY29tcGxldGVgLiBBaGEhIEl0J3Mgbm90IGlubGluZWQgYmVjYXVzZSBpdCdzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlci4gU28gc3l6a2FsbGVyICpjYW4qIHVzZSBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkncmUgbm90IGlubGluZWQuIFRoYXQncyBhIGdvb2QgcGllY2Ugb2YgaW5mb3JtYXRpb24uIGB6bG9vcF9maWxsX3plcm9fcnFgIGlzIHN0YXRpYywgc28gaXQgKm1pZ2h0KiBiZSBpbmxpbmVkIGFuZCB0aGVyZWZvcmUgbGVzcyB1c2VmdWwgYXMgYSBmdXp6IHRhcmdldC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgYHpsb29wX3F1ZXVlX3JxYCBpcyBzdGF0aWMuIFllcywgaXQgaXMuIExldCdzIG1ha2Ugc3VyZSBhYm91dCBgemxvb3BfY3RsX2FkZGAuIFl1cCwgaXQncyBzdGF0aWMgYXMgd2VsbC4gT2theSwgbGV0J3Mgc3RlcCBiYWNrLCBhbmQgZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGB6bG9vcC5jYCB0byBzZWUgaWYgdGhvc2Ugd291bGQgb2ZmZXIgYmV0dGVyIGNvdmVyYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ4OSwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE1OjExOjM5LjAwMDAzNTY0M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2Nzk0ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSogemxvb3BfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmM9NDI9c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3Qgemxvb3Bfb3B0X3Rva2VucyA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzU6c3RydWN0IHpsb29wX29wdGlvbnMge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03Ni1cXHR1bnNpZ25lZCBpbnRcXHRcXHRtYXNrO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTk1PWVudW0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAxOmVudW0gemxvb3Bfem9uZV9mbGFncyB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMi1cXHRaTE9PUF9aT05FX0NPTlYgPSAwLFxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwOS0gKi9cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTEwOnN0cnVjdCB6bG9vcF96b25lIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTExLVxcdHN0cnVjdCBsaXN0X2hlYWRcXHRvcGVuX3pvbmVfZW50cnk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTIzLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjQ6c3RydWN0IHpsb29wX2RldmljZSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyNS1cXHR1bnNpZ25lZCBpbnRcXHRcXHRpZDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNTQtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE1NTpzdHJ1Y3Qgemxvb3BfY21kIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTU2LVxcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdHdvcms7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE1OjExOjM5LjA0NjcyMzU2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTg4NTcxNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZTogSW5pdGlhbCBTdXNwZWN0cyoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCB0aGlzIHByb2JsZW0sIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nLCBuYXR1cmFsbHksIGlzIHRoaW5raW5nIGFib3V0IGluaXRpYWxpemF0aW9uLiBXaGVyZSBkb2VzIHRoaXMgd2hvbGUgdGhpbmcgKnN0YXJ0Kj8gV2UgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSByZWxldmFudCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZXQgdXAgb3Igd2hlcmUgc29tZSBjcml0aWNhbCBmbGFncyBhcmUgYmVpbmcgZmxpcHBlZC4gSSdtIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoZSBjbGFzc2ljOiBgbW9kdWxlX2luaXRgLCBvciBhbnl0aGluZyBhbmFsb2dvdXMgd2l0aGluIHRoaXMgcGFydGljdWxhciBmcmFtZXdvcmsuIFRoYXQga2luZCBvZiBmdW5jdGlvbiBvciBtYWNybyBpcyBhbG1vc3QgYWx3YXlzIHRoZSBrZXkgZW50cnkgcG9pbnQgZm9yIGdldHRpbmcgdGhpbmdzIGdvaW5nLCBlc3BlY2lhbGx5IGluIGEgbW9kdWxhciBkZXNpZ24uIEl04oCZcyB0aGUgdXN1YWwgc3VzcGVjdCBmb3IgaG9va2luZyBpbnRvIHRoZSBzeXN0ZW0ncyBzdGFydHVwIHNlcXVlbmNlLiBMZXTigJlzIHNlZSBpZiB0aGF0J3Mgd2hlcmUgdGhlIHJlbGV2YW50IGRhdGEgb3IgZnVuY3Rpb25hbGl0eSByZXNpZGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjg4MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE1OjExOjQyLjE0NTU4MzYwN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI1OTc4MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuYz0xNzc4PXN0YXRpYyB2b2lkIF9fZXhpdCB6bG9vcF9leGl0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc4My1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTc4NDptb2R1bGVfaW5pdCh6bG9vcF9pbml0KTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc4NS1tb2R1bGVfZXhpdCh6bG9vcF9leGl0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTU6MTE6NDIuMTg4MTg2OTc1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTQ2Mzk3MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGB6bG9vcF9pbml0YCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQgaXQncyBhbGwgYWJvdXQuXG4qKipcbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIGB6bG9vcF9pbml0YCoqXG5cbkFscmlnaHQsIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgYHpsb29wX2luaXRgIGZ1bmN0aW9uLiBHaXZlbiBteSBiYWNrZ3JvdW5kLCBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaXRzIHJvbGUgaW4gZXZlbnQgbG9vcCBpbml0aWFsaXphdGlvbi4gUHJvYmFibHkgc2V0dGluZyB1cCB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIHBlcmhhcHMgYWxsb2NhdGluZyBzb21lIHJlc291cmNlcy4gSSdtIGFzc3VtaW5nIGl0J3MgcGFydCBvZiBhIFplcm9NUSBvciBzaW1pbGFyIGFzeW5jaHJvbm91cyBuZXR3b3JraW5nIGxpYnJhcnksIGJhc2VkIG9uIHRoZSBuYW1pbmcgY29udmVudGlvbi4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmU6IFdoYXQgZXhhY3RseSBpcyBpdCBpbml0aWFsaXppbmc/IElzIGl0IHRocmVhZC1zYWZlPyBEb2VzIGl0IGhhbmRsZSBhbnkgcmVzb3VyY2UgbGltaXRzIG9yIGNvbmZpZ3VyYXRpb25zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIGl0IGVzdGFibGlzaGVzIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZnJhbWV3b3JrIGFuZCBob3cgaXQgd2lsbCBiZWhhdmUgdW5kZXIgbG9hZC4gSSdtIGtlZW4gdG8gc2VlIGlmIGl0IHByb3ZpZGVzIGFueSBob29rcyBmb3IgY3VzdG9taXphdGlvbiBvciBleHRlbnNpb24uIFRoZSBsZXZlbCBvZiBlcnJvciBoYW5kbGluZyBhbmQgYW55IHBvc3NpYmxlIGFzc2VydGlvbnMgd291bGQgYmUgYW4gaW1wb3J0YW50IGVsZW1lbnQgdG8gYXNzZXNzIGFzIHdlbGwuIEZpbmFsbHksIEknbGwgcGF5IGF0dGVudGlvbiB0byBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgY291bGQgY29tZSBpbnRvIHBsYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTkxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTU6MTE6NDUuODAyODI5NDkxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzI3ODg4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bG9vcF9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmM9MTA0OT1zdGF0aWMgaW50IHpsb29wX2dldF9ibG9ja19zaXplKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDc5LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDgwOnN0YXRpYyBpbnQgemxvb3BfaW5pdF96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgc3RydWN0IHpsb29wX29wdGlvbnMgKm9wdHMsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwODEtXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IHpvbmVfbm8sIGJvb2wgcmVzdG9yZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xMTg5PXN0YXRpYyBpbnQgemxvb3BfY3RsX2FkZChzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cylcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjg1LVxcdCAqIElmIHdlIGFscmVhZHkgaGF2ZSB6b25lIGZpbGVzLCB3ZSBhcmUgcmVzdG9yaW5nIGEgZGV2aWNlIGNyZWF0ZWQgYnkgYVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjg2OlxcdCAqIHByZXZpb3VzIGFkZCBvcGVyYXRpb24uIEluIHRoaXMgY2FzZSwgemxvb3BfaW5pdF96b25lKCkgd2lsbCBjaGVja1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjg3LVxcdCAqIHRoYXQgdGhlIHpvbmUgZmlsZXMgYXJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgem9uZSBjb25maWd1cmF0aW9uIGdpdmVuLlxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyOTAtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3pvbmVzOyBpKyspIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTI5MTpcXHRcXHRyZXQgPSB6bG9vcF9pbml0X3pvbmUoemxvLCBvcHRzLCBpLCByZXN0b3JlKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI5Mi1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTE3NTg9c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHpsb29wX21pc2MgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc2My1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTc2NDpzdGF0aWMgaW50IF9faW5pdCB6bG9vcF9pbml0KHZvaWQpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3NjUte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTE3Nzg9c3RhdGljIHZvaWQgX19leGl0IHpsb29wX2V4aXQodm9pZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNzgzLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNzg0Om1vZHVsZV9pbml0KHpsb29wX2luaXQpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNzg1LW1vZHVsZV9leGl0KHpsb29wX2V4aXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNToxMTo0NS44NDYxMTgwNTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1NTk3NDM2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBgemxvb3BfbWlzY2AgRGV2aWNlIERyaXZlcioqXG5cbk9rYXksIHNvIHRoZSBkcml2ZXIgaGFzIHJlZ2lzdGVyZWQgYSBtaXNjZGV2aWNlLCBzcGVjaWZpY2FsbHkgbmFtZWQgYHpsb29wX21pc2NgLiBSaWdodCwgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gTm93LCB3aGF0J3MgY3J1Y2lhbCBpcyB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGRldmljZSBhY3R1YWxseSAqZnVuY3Rpb25zKi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGVsdmUgaW50byB0aGUgb3BlcmF0aW9ucyB0aGF0IGFyZSBkZWZpbmVkIGZvciBgemxvb3BfbWlzY2AuIEkgbmVlZCB0byBpbnNwZWN0IHRob3NlIG9wZXJhdGlvbnMg4oCTIHRoZSByZWFkLCB3cml0ZSwgaW9jdGwsIG9wZW4sIHJlbGVhc2UgZnVuY3Rpb25zLCB3aGF0ZXZlciBpdCBtYXkgYmUuIEknbSBsb29raW5nIGZvciB0aGUgYmVoYXZpb3IsIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXMsIGFueSBpbnRlcmFjdGlvbnMgd2l0aCBoYXJkd2FyZSBvciBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gV2hhdCBhcmUgdGhlIGtleSBpbnRlcmFjdGlvbnMgZm9yIHRoaXMgZGV2aWNlLCB3aGljaCBtaWdodCByZXZlYWwgaG93IHRoZSBkZXZpY2UgaGFzIGJlZW4gZGVzaWduZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTc0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTU6MTE6NDkuMzAyMDk1NDA1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzcyNjU1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bG9vcF9taXNjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmM9MTc1MD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6bG9vcF9jdGxfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNzU3LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNzU4OnN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB6bG9vcF9taXNjID0ge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNzU5LVxcdC5taW5vclxcdFxcdD0gTUlTQ19EWU5BTUlDX01JTk9SLFxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTE3NjQ9c3RhdGljIGludCBfX2luaXQgemxvb3BfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3NjctXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE3Njg6XFx0cmV0ID0gbWlzY19yZWdpc3RlcihcXHUwMDI2emxvb3BfbWlzYyk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3NjktXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTE3Nzg9c3RhdGljIHZvaWQgX19leGl0IHpsb29wX2V4aXQodm9pZClcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc3OS17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE3ODA6XFx0bWlzY19kZXJlZ2lzdGVyKFxcdTAwMjZ6bG9vcF9taXNjKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc4MS1cXHRpZHJfZGVzdHJveShcXHUwMDI2emxvb3BfaW5kZXhfaWRyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTU6MTE6NDkuMzQ1ODI4MjIyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MjI0NTg5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBgemxvb3BfY3RsX2ZvcHNgIFN0cnVjdHVyZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgemxvb3BfY3RsX2ZvcHNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbnRyb2wgZmlsZSBvcGVyYXRpb25zIHdpdGhpbiB0aGUgYHpsb29wYCBjb250ZXh0LiBJIHdhbnQgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIHJlZ2lzdGVyZWQgZmlsZSBvcGVyYXRpb25zIHdpdGhpbiB0aGlzIHN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgYW55IHJlY2VudCBjaGFuZ2VzIGluIGhvdyB3ZSBtYW5hZ2UgZGV2aWNlIGNvbnRyb2wuIEFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgbGlrZSBgb3BlbmAsIGByZWxlYXNlYCwgYHJlYWRgLCBgd3JpdGVgLCBhbmQgbWF5YmUgZXZlbiBgaW9jdGxgIGFsbCBwcm9wZXJseSBkZWZpbmVkIGFuZCBoYW5kbGluZyB0aGUgaW50ZXJhY3Rpb25zIEkgZXhwZWN0PyBJdCdzIGFsd2F5cyBhIGdvb2QgaWRlYSB0byBkb3VibGUtY2hlY2sgdGhlIGZ1bmRhbWVudGFscyB3aGVuIGRlYnVnZ2luZyBhbnl0aGluZyBhdCB0aGlzIGxvdyBsZXZlbC4gQSBxdWljayBsb29rIHdpbGwgaGVscCBtZSBjb25maXJtIHRoZSBzZXR1cCBhbmQgZW5zdXJlIHRoYXQgdGhlIHJpZ2h0IGZ1bmN0aW9uIHBvaW50ZXJzIGFyZSBpbiBwbGFjZSBmb3IgZWFjaCBvcGVyYXRpb24uIFRoaXMnbGwgc2F2ZSBtZSBmcm9tIGNoYXNpbmcgZ2hvc3RzIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODQ5NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE1OjExOjU1LjE2ODI4OTYwOFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0MTg2NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemxvb3BfY3RsX2ZvcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuYz0xNzQ1PXN0YXRpYyBpbnQgemxvb3BfY3RsX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc0OS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTc1MDpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6bG9vcF9jdGxfZm9wcyA9IHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc1MS1cXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTE3NTg9c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHpsb29wX21pc2MgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc2MC1cXHQubmFtZVxcdFxcdD0gXFxcInpsb29wLWNvbnRyb2xcXFwiLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNzYxOlxcdC5mb3BzXFx0XFx0PSBcXHUwMDI2emxvb3BfY3RsX2ZvcHMsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3NjItfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTU6MTE6NTUuMjEzNzE0MzU2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MjIwNTYzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGB6bG9vcF9jdGxfZm9wc2AqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgemxvb3BfY3RsX2ZvcHNgIHN0cnVjdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGZ1bmN0aW9uYWwgYnJlYWtkb3duIOKAkyB3aGF0IGV4YWN0bHkgZG9lcyB0aGlzIHRoaW5nICpkbyo/IEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIHN0cnVjdHVyZSBjb250YWluaW5nIGZpbGUgb3BlcmF0aW9ucywgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIGNvbnRyb2wgaW50ZXJmYWNlIGZvciB0aGUgWkZTIGxvb3BiYWNrIGRldmljZS4gU28sIHRoZSBrZXkgaXMgdG8gdW5kZXJzdGFuZCB3aGljaCBmaWxlIG9wZXJhdGlvbnMgYXJlIGRlZmluZWQgd2l0aGluLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgYHJlYWRgLCBgd3JpdGVgLCBgaW9jdGxgLCBgb3BlbmAsIGByZWxlYXNlYCwgYW5kIHBvdGVudGlhbGx5IGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbiBwb2ludGVycy4gS25vd2luZyB0aGVzZSB3aWxsIHF1aWNrbHkgY2x1ZSBtZSBpbiBvbiBob3cgdXNlcnNwYWNlIGludGVyYWN0cyB3aXRoLCBhbmQgY29udHJvbHMsIHRoaXMgWkZTIGxvb3AgZGV2aWNlIGF0IGEgbG93IGxldmVsLiBBcmUgd2UgdGFsa2luZyBhYm91dCBiYXNpYyBJL08sIGNvbmZpZ3VyYXRpb24sIG9yIG1vcmUgY29tcGxleCBtYW5hZ2VtZW50IGFjdGlvbnM/IEknbGwgcHJvYmFibHkgYmUgbG9va2luZyBmb3IgY2x1ZXMgcmVsYXRpbmcgdG8gdGhpbmdzIGxpa2Ugdm9sdW1lIG1hbmFnZW1lbnQsIGJsb2NrIGRldmljZSBjcmVhdGlvbiwgb3IgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBmaWxlIG9wZXJhdGlvbiBkZWZpbml0aW9ucy4gRGVwZW5kaW5nIG9uIHRoZSBzb3BoaXN0aWNhdGlvbiBvZiB0aGUgaW1wbGVtZW50YXRpb24sIHRoZXJlIG1pZ2h0IGJlIGludGVyZXN0aW5nIGxvY2svc3luY2hyb25pemF0aW9uIGNvbnN0cnVjdHMgaW52b2x2ZWQgYXMgd2VsbCB0aGF0IHdhcnJhbnQgYSBjbG9zZXIgbG9vayBvbmNlIHRoZSBmdW5jdGlvbnMgYXJlIG1hcHBlZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTY0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTU6MTE6NTguNzM1Nzc0MDk4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTc0NSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc0NTpcXHRzdGF0aWMgaW50IHpsb29wX2N0bF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbjE3NDY6XFx0e1xcbjE3NDc6XFx0XFx0cmV0dXJuIHNpbmdsZV9yZWxlYXNlKGlub2RlLCBmaWxlKTtcXG4xNzQ4OlxcdH1cXG4xNzQ5OlxcdFxcbjE3NTA6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgemxvb3BfY3RsX2ZvcHMgPSB7XFxuMTc1MTpcXHRcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbjE3NTI6XFx0XFx0Lm9wZW5cXHRcXHQ9IHpsb29wX2N0bF9vcGVuLFxcbjE3NTM6XFx0XFx0LnJlbGVhc2VcXHQ9IHpsb29wX2N0bF9yZWxlYXNlLFxcbjE3NTQ6XFx0XFx0LndyaXRlXFx0XFx0PSB6bG9vcF9jdGxfd3JpdGUsXFxuMTc1NTpcXHRcXHQucmVhZFxcdFxcdD0gc2VxX3JlYWQsXFxuMTc1NjpcXHR9O1xcbjE3NTc6XFx0XFxuMTc1ODpcXHRzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Ugemxvb3BfbWlzYyA9IHtcXG4xNzU5OlxcdFxcdC5taW5vclxcdFxcdD0gTUlTQ19EWU5BTUlDX01JTk9SLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNToxMTo1OC43MzU4NzgxODhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzMjU5NjcwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgWmxvb3AgQ29udHJvbCBJbnRlcmZhY2UqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29udHJvbCBpbnRlcmZhY2UgZm9yIHRoaXMgYHpsb29wYCB0aGluZyBpcyBzaXR0aW5nIGF0IGAvZGV2L3psb29wLWNvbnRyb2xgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgZGV2aWNlIGZpbGUgd2UncmUgaW50ZXJhY3Rpbmcgd2l0aC4gV3JpdGluZyB0byAqdGhhdCogcGF0aCwgdHJpZ2dlcnMgYSBmdW5jdGlvbiBjYWxsZWQgYHpsb29wX2N0bF93cml0ZWAuICBUaGF0J3MgdGhlIGtleSByaWdodCB0aGVyZSwgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgaGFuZGxlcyBhbnkgd3JpdGVzIHRvIHRoZSBjb250cm9sIGRldmljZS4gIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgd2hhdCB0aGF0IGZ1bmN0aW9uIGFjdHVhbGx5ICpkb2VzKi4gVGltZSB0byBkaWcgaW50byBgemxvb3BfY3RsX3dyaXRlYCBhbmQgc2VlIGV4YWN0bHkgd2hhdCBvcGVyYXRpb25zIGFyZSB0YWtpbmcgcGxhY2UgdGhlcmUuIFdoYXQgZGF0YSBpcyBpdCBleHBlY3Rpbmc/IFdoYXQgc2lkZSBlZmZlY3RzIGRvZXMgaXQgcHJvZHVjZT8gTmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93LCB1bmRlcnN0YW5kIHRoZSB3cml0ZSBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0OTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE1OjEyOjAyLjA2ODQ3Nzc1MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwODU0MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemxvb3BfY3RsX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmM9MTY1MD1zdGF0aWMgc3RydWN0IHpsb29wX2N0bF9vcCB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTY1OC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTY1OTpzdGF0aWMgc3NpemVfdCB6bG9vcF9jdGxfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNjYwLVxcdFxcdFxcdCAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTE3NTA9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgemxvb3BfY3RsX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc1My1cXHQucmVsZWFzZVxcdD0gemxvb3BfY3RsX3JlbGVhc2UsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE3NTQ6XFx0LndyaXRlXFx0XFx0PSB6bG9vcF9jdGxfd3JpdGUsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3NTUtXFx0LnJlYWRcXHRcXHQ9IHNlcV9yZWFkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNToxMjowMi4xMTc1Njk0OThaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU2NzEwNTM0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpsb29wIEkvTyBQYXRoIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIGluc3RpbmN0IHdhcyB0byBsb29rIGF0IGB6bG9vcF9jdGxfd3JpdGVgIGFzIHRoZSBlbnRyeSBwb2ludCBiZWNhdXNlIGl0J3MgdGhlIGNvbW1hbmQgcGFyc2VyIGFuZCBjYWxscyB0aGUgYWRkL2RlbGV0ZSBmdW5jdGlvbnMuIEhvd2V2ZXIsIHRoZSByZWFsIGFjdGlvbiwgdGhlIGFjdHVhbCBwb2ludCB3aGVyZSBvdXIgY2hhbmdlcyBhcmUgcmVmbGVjdGVkLCBzZWVtcyB0byBiZSBoYXBwZW5pbmcgaW4gYHpsb29wX2NvbXBsZXRlX3JxYCwgdHJpZ2dlcmVkIGJ5IHRoZSBibG9jayBsYXllciB3aGVuIGEgcmVxdWVzdCBjb21wbGV0ZXMuIFRoYXQgcG9pbnRzIHRvIGB6bG9vcF9xdWV1ZV9ycWAgYXMgaXRzIGxpa2VseSBjb3VudGVycGFydCBpbiBxdWV1aW5nIHRoZSByZXF1ZXN0cyB0byBiZWdpbiB3aXRoLlxuXG5TbywgSSBuZWVkIHRvIGZvY3VzIG9uIGJvdGggYHpsb29wX3F1ZXVlX3JxYCBhbmQgYHpsb29wX2NvbXBsZXRlX3JxYC4gU2luY2UgYHpsb29wX2NvbXBsZXRlX3JxYCBpcyBzdGF0aWMsIG15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpdCBtaWdodCBiZSBhIHByb2JsZW0gZm9yIHN5emthbGxlci4gSG93ZXZlciwgSSByZWNhbGwgdGhhdCBzeXprYWxsZXIgKmNhbiogaGFuZGxlIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSBhcmVuJ3QgaW5saW5lZCwgYW5kIHNpbmNlIGl0IGlzIGFzc2lnbmVkIHRvIGB6bG9vcF9tcV9vcHMuY29tcGxldGVgLCBpdCdzIGFsbW9zdCBjZXJ0YWlubHkgbm90IGlubGluZWQuIEdvb2QsIG9uZSBsZXNzIHdvcnJ5LlxuXG5CdXQgc3l6a2FsbGVyIHByZWZlcnMgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLCBpZGVhbGx5LiBMZXQncyBtYWtlIHN1cmUgdGhhdCBgemxvb3BfcXVldWVfcnFgIGlzIGFsc28gYXNzaWduZWQgdG8gYHpsb29wX21xX29wcy5xdWV1ZV9ycWAsIGl0IHNlZW1zIHRoYXQgaXMgdGhlIGNhc2UuXG5cbk9rYXksIGlzIHRoZXJlICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBtaWdodCBmaXQgdGhlIGJpbGwgaGVyZSwgSSBzaG91bGQgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTcwLCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE1OjEyOjA4LjY4NDY3ODM5MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5MDQ0NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSogemxvb3BfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmM9NDI9c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3Qgemxvb3Bfb3B0X3Rva2VucyA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzU6c3RydWN0IHpsb29wX29wdGlvbnMge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03Ni1cXHR1bnNpZ25lZCBpbnRcXHRcXHRtYXNrO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTk1PWVudW0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAxOmVudW0gemxvb3Bfem9uZV9mbGFncyB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMi1cXHRaTE9PUF9aT05FX0NPTlYgPSAwLFxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwOS0gKi9cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTEwOnN0cnVjdCB6bG9vcF96b25lIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTExLVxcdHN0cnVjdCBsaXN0X2hlYWRcXHRvcGVuX3pvbmVfZW50cnk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTIzLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjQ6c3RydWN0IHpsb29wX2RldmljZSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyNS1cXHR1bnNpZ25lZCBpbnRcXHRcXHRpZDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNTQtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE1NTpzdHJ1Y3Qgemxvb3BfY21kIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTU2LVxcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdHdvcms7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE1OjEyOjA4LjczMTU4ODE0OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzU5MzUzNDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgemxvb3AuY2AgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGB6bG9vcC5jYCwgaXQncyBhbGwgYWJvdXQgbW9kaWZ5aW5nIGhvdyB0aGUgem9uZWQgbG9vcCBkZXZpY2Ugd29ya3MuIEZpcnN0LCBJIG5vdGljZSBpbW1lZGlhdGVseSB0aGF0IGFsbCB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBhcmUgKnN0YXRpYyouIFRoYXQncyBhIGtleSBkZXRhaWwg4oCTIGl0IG1lYW5zIHdlIGhhdmUgdG8gcmVzdHJpY3Qgb3VyIGZvY3VzIHRvIHRob3NlIHNwZWNpZmljIGludGVybmFsIGZ1bmN0aW9ucyBmb3IgZnV6emluZy5cblxuSSBzZWUgdGhhdCBgemxvb3BfY29tcGxldGVfcnFgIGlzIHRoZSBvbmUgYmVpbmcgZGlyZWN0bHkgbW9kaWZpZWQuIEludGVyZXN0aW5nLiBgemxvb3BfcXVldWVfcnFgIGFwcGVhcnMgdG8gYmUgdGhlIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBibG9jayBJL08sIGFuZCBgemxvb3BfY3RsX3dyaXRlYCBzZWVtcyB0byBiZSBob3cgY29udHJvbCBjb21tYW5kcyBhcmUgcHJvY2Vzc2VkLiAgR2l2ZW4gdGhvc2UgZW50cnkgcG9pbnRzIGFuZCB0aGUgbW9kaWZpZWQgZnVuY3Rpb24sIGB6bG9vcF9jb21wbGV0ZV9ycWAsIGB6bG9vcF9xdWV1ZV9ycWAsIGFuZCBgemxvb3BfY3RsX3dyaXRlYCBhcmUgdGhlIG9idmlvdXMgdGFyZ2V0cyBmb3IgZnV6emluZy5cblxuQWgsIGJ1dCB0aGUgY3J1Y2lhbCBjaGFuZ2UgaGVyZSBpcyB0aGUgcmVwbGFjZW1lbnQgb2YgYHplcm9fZmlsbF9iaW8oYmlvKWAgd2l0aCBgemxvb3BfZmlsbF96ZXJvX3JxKHJxLCBjbWQtXHUwMDNlcmV0KWAuIFRoYXQncyBhICpmdW5jdGlvbmFsKiBjaGFuZ2Ug4oCTIG5vdCBqdXN0IGEgcmVmYWN0b3JpbmcuIFRoaXMgaXMgZGVmaW5pdGVseSBhIHNwb3QgdGhhdCB3YXJyYW50cyBmdXp6aW5nLCBsaWtlbHkgdG8gdW5jb3ZlciBhIHN1YnRsZSBlZGdlIGNhc2UuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkZXNlcnZlcyB0aGUgYFdvcnRoRnV6emluZz10cnVlYCBmbGFnLiAgTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYHpsb29wX2NvbXBsZXRlX3JxYCwgYHpsb29wX3F1ZXVlX3JxYCwgYW5kIGB6bG9vcF9jdGxfd3JpdGVgLlxuXG5BbmQgZmluYWxseSwgbGV0J3MgbWFrZSBzdXJlIG91ciBmdXp6aW5nIGNvbmZpZ3VyYXRpb25zIGFyZSBjb3JyZWN0LiBJdCBsb29rcyBsaWtlIHdlJ2xsIG5lZWQgdG8gZW5hYmxlIGBCTEtfREVWX1pPTkVEX0xPT1BgIGFuZCwgc2luY2UgaXQgZGVwZW5kcyBvbiBpdCwgYWxzbyBgQkxLX0RFVl9aT05FRGAuIEknbGwgZG91YmxlLWNoZWNrIHRoYXQgYEJMS19ERVZfWk9ORURfTE9PUGAgZG9lc24ndCBoYXZlIGFueSAqb3RoZXIqIGRlcGVuZGVuY2llcywganVzdCB0byBiZSBzdXJlLi4uIExldCdzIGNoZWNrIGBCTEtfREVWX1pPTkVEYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5MTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTU6MTI6MTQuNDkwOTQ0ODI4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDI0MzgwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9aT05FRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9Nzc9Y29uZmlnIEJMS19ERVZfV1JJVEVfTU9VTlRFRFxcbi0tXFxuYmxvY2svS2NvbmZpZy05Ni1cXG5ibG9jay9LY29uZmlnOjk3OmNvbmZpZyBCTEtfREVWX1pPTkVEXFxuYmxvY2svS2NvbmZpZy05OC1cXHRib29sIFxcXCJab25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTU6MTI6MTQuNTM1MTk0NTg1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MTMxNDE0MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBab25lZCBCbG9jayBEZXZpY2UgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBgQkxLX0RFVl9aT05FRGAuIEkga25vdyBpdCdzIHJlbGF0ZWQgdG8gem9uZWQgYmxvY2sgZGV2aWNlcywgd2hpY2ggYXJlIGJlY29taW5nIGluY3JlYXNpbmdseSBpbXBvcnRhbnQuIFdoZXJlJ3MgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBSaWdodCwgaXQncyB0eXBpY2FsbHkgaW4gdGhlIGBibG9jay9LY29uZmlnYCBmaWxlLiBMZXQncyBnbyBhaGVhZCBhbmQgb3BlbiB0aGF0IHVwLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBqdW1wIGluIGFyb3VuZCBsaW5lIDk3IG9mIGBibG9jay9LY29uZmlnYC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlc2UgbW9yZSBkZXZpY2Utc3BlY2lmaWMgb3B0aW9ucyBhcmUgZ3JvdXBlZCwgc28gdGhhdCdzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcsIGdpdmVuIG15IGV4cGVyaWVuY2UuIEknbSBzdXJlIGl0J3MgbmVhcmJ5LCBhbmQgSSdsbCBzZWUgd2hhdCBvcHRpb25zIG9yIGRlcGVuZGVuY2llcyBhcmUgYXJvdW5kIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY4NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE1OjEyOjIwLjk0ODMzODczN1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDkwOlxcdFxcdHByaXZpbGVnZWQgcHJvY2Vzc2VzIGFuZCBnZW5lcmFsbHkgbWFrZXMgaXQgbXVjaCBoYXJkZXIgdG8gY3Jhc2hcXG4gIDkxOlxcdFxcdGZpbGVzeXN0ZW0gZHJpdmVycy4gTm90ZSBob3dldmVyIHRoYXQgdGhpcyBkb2VzIG5vdCBwcmV2ZW50XFxuICA5MjpcXHRcXHR1bmRlcmx5aW5nIGRldmljZShzKSBmcm9tIGJlaW5nIG1vZGlmaWVkIGJ5IG90aGVyIG1lYW5zLCBlLmcuIGJ5XFxuICA5MzpcXHRcXHRkaXJlY3RseSBzdWJtaXR0aW5nIFNDU0kgY29tbWFuZHMgb3IgdGhyb3VnaCBhY2Nlc3MgdG8gbG93ZXIgbGF5ZXJzIG9mXFxuICA5NDpcXHRcXHRzdG9yYWdlIHN0YWNrLiBJZiBpbiBkb3VidCwgc2F5IFkuIFRoZSBjb25maWd1cmF0aW9uIGNhbiBiZSBvdmVycmlkZGVuXFxuICA5NTpcXHRcXHR3aXRoIHRoZSBiZGV2X2FsbG93X3dyaXRlX21vdW50ZWQgYm9vdCBvcHRpb24uXFxuICA5NjpcXHRcXG4gIDk3OlxcdGNvbmZpZyBCTEtfREVWX1pPTkVEXFxuICA5ODpcXHRcXHRib29sIFxcXCJab25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gIDk5OlxcdFxcdGhlbHBcXG4gMTAwOlxcdFxcdEJsb2NrIGxheWVyIHpvbmVkIGJsb2NrIGRldmljZSBzdXBwb3J0LiBUaGlzIG9wdGlvbiBlbmFibGVzXFxuIDEwMTpcXHRcXHRzdXBwb3J0IGZvciBaQUMvWkJDL1pOUyBob3N0LW1hbmFnZWQgYW5kIGhvc3QtYXdhcmUgem9uZWQgYmxvY2tcXG4gMTAyOlxcdFxcdGRldmljZXMuXFxuIDEwMzpcXHRcXG4gMTA0OlxcdFxcdFNheSB5ZXMgaGVyZSBpZiB5b3UgaGF2ZSBhIFpBQywgWkJDLCBvciBaTlMgc3RvcmFnZSBkZXZpY2UuXFxuIDEwNTpcXHRcXG4gMTA2OlxcdGNvbmZpZyBCTEtfREVWX1RIUk9UVExJTkdcXG4gMTA3OlxcdFxcdGJvb2wgXFxcIkJsb2NrIGxheWVyIGJpbyB0aHJvdHRsaW5nIHN1cHBvcnRcXFwiXFxuIDEwODpcXHRcXHRkZXBlbmRzIG9uIEJMS19DR1JPVVBcXG4gMTA5OlxcdFxcdHNlbGVjdCBCTEtfQ0dST1VQX1JXU1RBVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNToxMjoyMC45NDg0MDcxNjdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA1NTg0NDMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciBab25lZCBCbG9jayBEZXZpY2UgTG9vcGJhY2sqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGBCTEtfREVWX1pPTkVEYCBoYXMgbm8gb3RoZXIgZGVwZW5kZW5jaWVzLCB3aGljaCBtZWFucyBlbmFibGluZyBqdXN0IGBCTEtfREVWX1pPTkVEX0xPT1BgIGFuZCBgQkxLX0RFVl9aT05FRGAgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHRlc3RpbmcuIExldCdzIHJldmlldyB0aGUgcGF0Y2ggYWdhaW4sIHNwZWNpZmljYWxseSB0aGlzIGB6bG9vcF9maWxsX3plcm9fcnFgIGZ1bmN0aW9uOlxuXG5gYGBjXG4rc3RhdGljIHZvaWQgemxvb3BfZmlsbF96ZXJvX3JxKHN0cnVjdCByZXF1ZXN0ICpycSwgdW5zaWduZWQgaW50IHplcm9fZnJvbSlcbit7XG4rXHRzdHJ1Y3QgcmVxX2l0ZXJhdG9yIGl0ZXI7XG4rXHRzdHJ1Y3QgYmlvX3ZlYyBidjtcbitcdHVuc2lnbmVkIGludCBwb3MgPSAwO1xuK1x0dW5zaWduZWQgaW50IGVuZCwgb2ZmO1xuK1xuK1x0cnFfZm9yX2VhY2hfc2VnbWVudChidiwgcnEsIGl0ZXIpIHtcbitcdFx0ZW5kID0gcG9zICsgYnYuYnZfbGVuO1xuK1x0XHRpZiAoZW5kIFx1MDAzZSB6ZXJvX2Zyb20pIHtcbitcdFx0XHRvZmYgPSAwO1xuK1x0XHRcdGlmIChwb3MgXHUwMDNjIHplcm9fZnJvbSlcbitcdFx0XHRcdG9mZiA9IHplcm9fZnJvbSAtIHBvcztcbitcdFx0XHRtZW16ZXJvX3BhZ2UoYnYuYnZfcGFnZSwgYnYuYnZfb2Zmc2V0ICsgb2ZmLFxuK1x0XHRcdFx0ICAgICBidi5idl9sZW4gLSBvZmYpO1xuK1x0XHR9XG4rXHRcdHBvcyA9IGVuZDtcbitcdH1cbit9XG5gYGBcblxuVGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGVuc3VyZSBzaG9ydCByZWFkcyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuIEl04oCZcyByZWFjaGVkIHRocm91Z2ggYmxvY2sgSS9PIG9uIHRoZSBgemxvb3BgIGRldmljZS4gVGhlIGJlYXV0eSBvZiBgemxvb3BgIGlzIHRoYXQgaXQncyBhIHNvZnR3YXJlLWVtdWxhdGVkIHpvbmVkIGJsb2NrIGRldmljZS4gVGhpcyBtYWtlcyBpdCBpZGVhbCBmb3IgZnV6emluZywgZXNwZWNpYWxseSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBCZWNhdXNlIHRoZSBjaGFuZ2UgaXMgZnVuY3Rpb25hbCwgSSB3aWxsIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5TcGVjaWZpY2FsbHksIEknbGwgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb246XG5cbiogICBgemxvb3BfY29tcGxldGVfcnFgXG4qICAgYHpsb29wX3F1ZXVlX3JxYFxuKiAgIGB6bG9vcF9jdGxfd3JpdGVgXG5cbkVuYWJsaW5nIGBCTEtfREVWX1pPTkVEX0xPT1BgIGFuZCBpdHMgZGVwZW5kZW5jeSBgQkxLX0RFVl9aT05FRGAgd2lsbCBiZSBteSBzdGFydGluZyBwb2ludC4gVGhlIG5ldyBjb2RlIGluIGB6bG9vcF9maWxsX3plcm9fcnFgIGFkZHJlc3NlcyB0aGUgcHJvYmxlbSBvZiBjb3JyZWN0bHkgemVyb2luZyBvdXQgdGhlIHVucmVhZCB0YWlsIG9mIGEgcmVxdWVzdCBiZXlvbmQgYGNtZC1cdTAwM2VyZXRgIGFmdGVyIHNob3J0IHJlYWRzLCByZXBsYWNpbmcgdGhlIHBvdGVudGlhbGx5IGxlc3MgcmVsaWFibGUgYHplcm9fZmlsbF9iaW9gIGFwcHJvYWNoLiBHaXZlbiB0aGF0IGB6bG9vcGAgaXMgZWZmZWN0aXZlbHkgYSB2aXJ0dWFsIHpvbmVkIGJsb2NrIGRldmljZSBhbmQgZnVsbHkgYWNjZXNzaWJsZSB2aWEgc29mdHdhcmUsIGZ1enppbmcgb2ZmZXJzIGEgY2xlYXIgcGF0aCB0byBkaXNjb3ZlciBhbnkgcG90ZW50aWFsIGlzc3VlcyBpbiB0aGVzZSBjcml0aWNhbCBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjM2LCJPdXRwdXRUb2tlbnMiOjE4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE1OjEyOjMwLjAwNDI1NjAzM1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MTk5NjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1pPTkVEX0xPT1BcIixcbiAgICBcIkJMS19ERVZfWk9ORURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6bG9vcF9jb21wbGV0ZV9ycVwiLFxuICAgIFwiemxvb3BfcXVldWVfcnFcIixcbiAgICBcInpsb29wX2N0bF93cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBgemxvb3BfY29tcGxldGVfcnFgIHRvIGNvcnJlY3RseSB6ZXJvIG91dCB0aGUgdW5yZWFkIHRhaWwgb2YgYSByZXF1ZXN0IGJleW9uZCBgY21kLVxcdTAwM2VyZXRgIGZvciBzaG9ydCByZWFkcywgcmVwbGFjaW5nIHRoZSBwcmV2aW91cyBgemVyb19maWxsX2Jpb2AgYXBwcm9hY2guIFRoZSBgemxvb3BgIGRyaXZlciBpcyBhIHNvZnR3YXJlLWVtdWxhdGVkIHpvbmVkIGJsb2NrIGRldmljZSB0aGF0IGNhbiBiZSBmdWxseSBleGVyY2lzZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gRnV6emluZyB0aGlzIHJlcXVpcmVzIGVuYWJsaW5nIGBCTEtfREVWX1pPTkVEX0xPT1BgIGFuZCBpdHMgZGVwZW5kZW5jeSBgQkxLX0RFVl9aT05FRGAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9aT05FRF9MT09QXCIsXG4gICAgXCJCTEtfREVWX1pPTkVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemxvb3BfY29tcGxldGVfcnFcIixcbiAgICBcInpsb29wX3F1ZXVlX3JxXCIsXG4gICAgXCJ6bG9vcF9jdGxfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYHpsb29wX2NvbXBsZXRlX3JxYCB0byBjb3JyZWN0bHkgemVybyBvdXQgdGhlIHVucmVhZCB0YWlsIG9mIGEgcmVxdWVzdCBiZXlvbmQgYGNtZC1cXHUwMDNlcmV0YCBmb3Igc2hvcnQgcmVhZHMsIHJlcGxhY2luZyB0aGUgcHJldmlvdXMgYHplcm9fZmlsbF9iaW9gIGFwcHJvYWNoLiBUaGUgYHpsb29wYCBkcml2ZXIgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCB6b25lZCBibG9jayBkZXZpY2UgdGhhdCBjYW4gYmUgZnVsbHkgZXhlcmNpc2VkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIEZ1enppbmcgdGhpcyByZXF1aXJlcyBlbmFibGluZyBgQkxLX0RFVl9aT05FRF9MT09QYCBhbmQgaXRzIGRlcGVuZGVuY3kgYEJMS19ERVZfWk9ORURgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5rtjp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 14:49:34 +0000 UTC FinishedAt: 2026-07-31 15:12:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "10e04ab3f0bf481bc01982e4301b9f7475a7f7d3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_ZONED_LOOP", "BLK_DEV_ZONED" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "10e04ab3f0bf481bc01982e4301b9f7475a7f7d3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_ZONED_LOOP", "BLK_DEV_ZONED" ], "series_id": "0ed3f0cc-9976-4845-b89a-c27b2ebca587" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "zloop_complete_rq", "zloop_queue_rq", "zloop_ctl_write" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfWk9ORURfTE9PUCYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1pPTkVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emxvb3BfY29tcGxldGVfcnEmIzM0OywKICAgICYjMzQ7emxvb3BfcXVldWVfcnEmIzM0OywKICAgICYjMzQ7emxvb3BfY3RsX3dyaXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBgemxvb3BfY29tcGxldGVfcnFgIHRvIGNvcnJlY3RseSB6ZXJvIG91dCB0aGUgdW5yZWFkIHRhaWwgb2YgYSByZXF1ZXN0IGJleW9uZCBgY21kLVx1MDAzZXJldGAgZm9yIHNob3J0IHJlYWRzLCByZXBsYWNpbmcgdGhlIHByZXZpb3VzIGB6ZXJvX2ZpbGxfYmlvYCBhcHByb2FjaC4gVGhlIGB6bG9vcGAgZHJpdmVyIGlzIGEgc29mdHdhcmUtZW11bGF0ZWQgem9uZWQgYmxvY2sgZGV2aWNlIHRoYXQgY2FuIGJlIGZ1bGx5IGV4ZXJjaXNlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBGdXp6aW5nIHRoaXMgcmVxdWlyZXMgZW5hYmxpbmcgYEJMS19ERVZfWk9ORURfTE9PUGAgYW5kIGl0cyBkZXBlbmRlbmN5IGBCTEtfREVWX1pPTkVEYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNToxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDY2ODA5NWYyZTUxZWFhODZlY2VkNjc1YWU5NGFmZmM4MjYxYjdkOWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAxNToxMTowOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3psb29wLmMgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmNcbmluZGV4IDU1ZWViNmFhYzBlYTMuLjQyOTY3ZTdhZWE1OGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3psb29wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuQEAgLTc5OCw2ICYjNDM7Nzk4LDI2IEBAIHN0YXRpYyB2b2lkIHpsb29wX2NtZF93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0Y3VycmVudC1cdTAwM2VmbGFncyA9IG9yaWdfZmxhZ3M7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB6bG9vcF9maWxsX3plcm9fcnEoc3RydWN0IHJlcXVlc3QgKnJxLCB1bnNpZ25lZCBpbnQgemVyb19mcm9tKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJlcV9pdGVyYXRvciBpdGVyO1xuJiM0MztcdHN0cnVjdCBiaW9fdmVjIGJ2O1xuJiM0MztcdHVuc2lnbmVkIGludCBwb3MgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGludCBlbmQsIG9mZjtcbiYjNDM7XG4mIzQzO1x0cnFfZm9yX2VhY2hfc2VnbWVudChidiwgcnEsIGl0ZXIpIHtcbiYjNDM7XHRcdGVuZCA9IHBvcyAmIzQzOyBidi5idl9sZW47XG4mIzQzO1x0XHRpZiAoZW5kIFx1MDAzZSB6ZXJvX2Zyb20pIHtcbiYjNDM7XHRcdFx0b2ZmID0gMDtcbiYjNDM7XHRcdFx0aWYgKHBvcyBcdTAwM2MgemVyb19mcm9tKVxuJiM0MztcdFx0XHRcdG9mZiA9IHplcm9fZnJvbSAtIHBvcztcbiYjNDM7XHRcdFx0bWVtemVyb19wYWdlKGJ2LmJ2X3BhZ2UsIGJ2LmJ2X29mZnNldCAmIzQzOyBvZmYsXG4mIzQzO1x0XHRcdFx0ICAgICBidi5idl9sZW4gLSBvZmYpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cG9zID0gZW5kO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB6bG9vcF9jb21wbGV0ZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4ge1xuIFx0c3RydWN0IHpsb29wX2NtZCAqY21kID0gYmxrX21xX3JxX3RvX3BkdShycSk7XG5AQCAtODEyLDEzICYjNDM7ODMyLDkgQEAgc3RhdGljIHZvaWQgemxvb3BfY29tcGxldGVfcnEoc3RydWN0IHJlcXVlc3QgKnJxKVxuIFx0XHRcdHByX2VycihcJiMzNDtab25lICV1OiBmYWlsZWQgcmVhZCBzZWN0b3IgJWxsdSwgJWxsdSBzZWN0b3JzXFxuXCYjMzQ7LFxuIFx0XHRcdCAgICAgICB6b25lX25vLCBjbWQtXHUwMDNlc2VjdG9yLCBjbWQtXHUwMDNlbnJfc2VjdG9ycyk7XG4gXG4tXHRcdGlmIChjbWQtXHUwMDNlcmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgY21kLVx1MDAzZXJldCAhPSBibGtfcnFfYnl0ZXMocnEpKSB7XG4tXHRcdFx0Lyogc2hvcnQgcmVhZCAqL1xuLVx0XHRcdHN0cnVjdCBiaW8gKmJpbztcbi1cbi1cdFx0XHRfX3JxX2Zvcl9lYWNoX2JpbyhiaW8sIHJxKVxuLVx0XHRcdFx0emVyb19maWxsX2JpbyhiaW8pO1xuLVx0XHR9XG4mIzQzO1x0XHQvKiBTaG9ydCByZWFkLiBaZXJvIG91dCB0aGUgdW5yZWFkIHRhaWwgYmV5b25kIGNtZC1cdTAwM2VyZXQuICovXG4mIzQzO1x0XHRpZiAoY21kLVx1MDAzZXJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGNtZC1cdTAwM2VyZXQgIT0gYmxrX3JxX2J5dGVzKHJxKSlcbiYjNDM7XHRcdFx0emxvb3BfZmlsbF96ZXJvX3JxKHJxLCBjbWQtXHUwMDNlcmV0KTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFJFUV9PUF9XUklURTpcbiBcdGNhc2UgUkVRX09QX1pPTkVfQVBQRU5EOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX1pPTkVEX0xPT1AmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9aT05FRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3psb29wX2NvbXBsZXRlX3JxJiMzNDssCiAgICAmIzM0O3psb29wX3F1ZXVlX3JxJiMzNDssCiAgICAmIzM0O3psb29wX2N0bF93cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYHpsb29wX2NvbXBsZXRlX3JxYCB0byBjb3JyZWN0bHkgemVybyBvdXQgdGhlIHVucmVhZCB0YWlsIG9mIGEgcmVxdWVzdCBiZXlvbmQgYGNtZC1cdTAwM2VyZXRgIGZvciBzaG9ydCByZWFkcywgcmVwbGFjaW5nIHRoZSBwcmV2aW91cyBgemVyb19maWxsX2Jpb2AgYXBwcm9hY2guIFRoZSBgemxvb3BgIGRyaXZlciBpcyBhIHNvZnR3YXJlLWVtdWxhdGVkIHpvbmVkIGJsb2NrIGRldmljZSB0aGF0IGNhbiBiZSBmdWxseSBleGVyY2lzZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gRnV6emluZyB0aGlzIHJlcXVpcmVzIGVuYWJsaW5nIGBCTEtfREVWX1pPTkVEX0xPT1BgIGFuZCBpdHMgZGVwZW5kZW5jeSBgQkxLX0RFVl9aT05FRGAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2NjgwOTVmMmU1MWVhYTg2ZWNlZDY3NWFlOTRhZmZjODI2MWI3ZDlmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMzEgMTU6MTE6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3psb29wLmMgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmMKaW5kZXggNTVlZWI2YWFjMGVhMy4uNDI5NjdlN2FlYTU4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96bG9vcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svemxvb3AuYwpAQCAtNzk4LDYgJiM0Mzs3OTgsMjYgQEAgc3RhdGljIHZvaWQgemxvb3BfY21kX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJY3VycmVudC0mZ3Q7ZmxhZ3MgPSBvcmlnX2ZsYWdzOwogfQogCiYjNDM7c3RhdGljIHZvaWQgemxvb3BfZmlsbF96ZXJvX3JxKHN0cnVjdCByZXF1ZXN0ICpycSwgdW5zaWduZWQgaW50IHplcm9fZnJvbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByZXFfaXRlcmF0b3IgaXRlcjsKJiM0MzsJc3RydWN0IGJpb192ZWMgYnY7CiYjNDM7CXVuc2lnbmVkIGludCBwb3MgPSAwOwomIzQzOwl1bnNpZ25lZCBpbnQgZW5kLCBvZmY7CiYjNDM7CiYjNDM7CXJxX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIHJxLCBpdGVyKSB7CiYjNDM7CQllbmQgPSBwb3MgJiM0MzsgYnYuYnZfbGVuOwomIzQzOwkJaWYgKGVuZCAmZ3Q7IHplcm9fZnJvbSkgewomIzQzOwkJCW9mZiA9IDA7CiYjNDM7CQkJaWYgKHBvcyAmbHQ7IHplcm9fZnJvbSkKJiM0MzsJCQkJb2ZmID0gemVyb19mcm9tIC0gcG9zOwomIzQzOwkJCW1lbXplcm9fcGFnZShidi5idl9wYWdlLCBidi5idl9vZmZzZXQgJiM0Mzsgb2ZmLAomIzQzOwkJCQkgICAgIGJ2LmJ2X2xlbiAtIG9mZik7CiYjNDM7CQl9CiYjNDM7CQlwb3MgPSBlbmQ7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB6bG9vcF9jb21wbGV0ZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJc3RydWN0IHpsb29wX2NtZCAqY21kID0gYmxrX21xX3JxX3RvX3BkdShycSk7CkBAIC04MTIsMTMgJiM0Mzs4MzIsOSBAQCBzdGF0aWMgdm9pZCB6bG9vcF9jb21wbGV0ZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpCiAJCQlwcl9lcnIoJiMzNDtab25lICV1OiBmYWlsZWQgcmVhZCBzZWN0b3IgJWxsdSwgJWxsdSBzZWN0b3JzXG4mIzM0OywKIAkJCSAgICAgICB6b25lX25vLCBjbWQtJmd0O3NlY3RvciwgY21kLSZndDtucl9zZWN0b3JzKTsKIAotCQlpZiAoY21kLSZndDtyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IGNtZC0mZ3Q7cmV0ICE9IGJsa19ycV9ieXRlcyhycSkpIHsKLQkJCS8qIHNob3J0IHJlYWQgKi8KLQkJCXN0cnVjdCBiaW8gKmJpbzsKLQotCQkJX19ycV9mb3JfZWFjaF9iaW8oYmlvLCBycSkKLQkJCQl6ZXJvX2ZpbGxfYmlvKGJpbyk7Ci0JCX0KJiM0MzsJCS8qIFNob3J0IHJlYWQuIFplcm8gb3V0IHRoZSB1bnJlYWQgdGFpbCBiZXlvbmQgY21kLSZndDtyZXQuICovCiYjNDM7CQlpZiAoY21kLSZndDtyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IGNtZC0mZ3Q7cmV0ICE9IGJsa19ycV9ieXRlcyhycSkpCiYjNDM7CQkJemxvb3BfZmlsbF96ZXJvX3JxKHJxLCBjbWQtJmd0O3JldCk7CiAJCWJyZWFrOwogCWNhc2UgUkVRX09QX1dSSVRFOgogCWNhc2UgUkVRX09QX1pPTkVfQVBQRU5EOgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDM2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyBhIFpsb29wIEJsb2NrIERyaXZlciBQYXRjaCoqCgpBbHJpZ2h0LCBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0JiMzOTtzIGNsZWFybHkgZm9jdXNlZCBvbiBvcHRpbWl6aW5nIHplcm8tZmlsbGluZyBpbiB0aGUgYHpsb29wYCBibG9jayBkcml2ZXIuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgY2VudGVyZWQgYXJvdW5kIGBkcml2ZXJzL2Jsb2NrL3psb29wLmNgLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiwgYHpsb29wX2ZpbGxfemVyb19ycWAsIGFuZCBtb2RpZmllcyB0aGUgZXhpc3RpbmcgYHpsb29wX2NvbXBsZXRlX3JxYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgYXBwZWFycyB0byBpbnZvbHZlIHJlcGxhY2luZyB0aGUgbW9yZSBnZW5lcmljIGB6ZXJvX2ZpbGxfYmlvKGJpbylgIGNhbGwgd2l0aCBhIG1vcmUgdGFyZ2V0ZWQgYHpsb29wX2ZpbGxfemVyb19ycShycSwgY21kLSZndDtyZXQpYCB3aGVuIGRlYWxpbmcgd2l0aCBzaG9ydCByZWFkcy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgbGlrZWx5IGltcHJvdmVzIHRoZSBlZmZpY2llbmN5IG9mIGhhbmRsaW5nIHplcm8tZmlsbGVkIGJsb2NrcyB3aXRoaW4gdGhlIGB6bG9vcGAgZHJpdmVyLiBUaGlzIGNvdWxkIG1lYW4gYSBwZXJmb3JtYW5jZSBib29zdCBmb3Igb3BlcmF0aW9ucyB0aGF0IGFyZSBjb21tb25seSB6ZXJvLWZpbGxlZCwgcGVyaGFwcyBkdXJpbmcgY3JlYXRpb24gb3IgZGF0YSBzY3J1YmJpbmcuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUgb2YgYGRyaXZlcnMvYmxvY2svemxvb3AuY2AgaXRzZWxmIG5vdyB0byB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIGNvbnRleHQgYW5kIHdoYXQgY29uZGl0aW9ucywgbGlrZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFjdHVhbGx5IGVuYWJsZSB0aGlzIG9wdGltaXphdGlvbi4gVGhpcyBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgcGF0Y2gmIzM5O3MgaW1wYWN0IGFuZCBpdHMgcmVsZXZhbmNlIHRvIHRoZSBvdmVyYWxsIHN5c3RlbSBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3psb29wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0zNTY9Y29uZmlnIEJMS19ERVZfWk9ORURfTE9PUFxuLS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNjctXHQgIGVjaG8gXCYjMzQ7YWRkIGlkPTAsem9uZV9zaXplX21iPTI1NixjYXBhY2l0eV9tYj0xNjM4NCxjb252X3pvbmVzPTExXCYjMzQ7IFx1MDAzZSBcXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjM2ODpcdFx0L2Rldi96bG9vcC1jb250cm9sXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzY5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MjcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBab25lZCBMb29wYmFjayBCbG9jayBEZXZpY2UgRHJpdmVyKioKCk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIEkmIzM5O20gbG9va2luZyBhdCBwb2ludHMgdG8gYEJMS19ERVZfWk9ORURfTE9PUGAuICBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGlzIGB6bG9vcF9jb21wbGV0ZV9ycWAgYWN0dWFsbHkgcmVhY2hhYmxlPyBSaWdodCwgaXTigJlzIGEgYmxvY2sgZHJpdmVyLCBzbyB5ZXMsIGl0ICpzaG91bGQqIGJlLiBBaCwgd2FpdCBhIG1pbnV0ZSwgYHpsb29wX2NvbXBsZXRlX3JxYCBpcyBjYWxsZWQgd2hlbiBhIHJlcXVlc3QgY29tcGxldGVzLCBzbyB0aGF0IG1ha2VzIHNlbnNlLiBUaGUgZHJpdmVyIGluIHF1ZXN0aW9uIGlzIGB6bG9vcGAsIHdoaWNoLCBpZiBtZW1vcnkgc2VydmVzLCBpcyB0aGF0IHpvbmVkIGxvb3BiYWNrIGRldmljZS4gTm93LCBpcyBgemxvb3BgIGEgcmVhbCBkcml2ZXIgb3Igb25lIG9mIHRob3NlIHRlc3QgZHJpdmVycz8gSSB0aGluayBJIGNhbiBnZXQgYSBiZXR0ZXIgcGljdHVyZSBoZXJlOiBsZXQgbWUgY2hlY2suLi4gWWVwLiBGcm9tIHRoYXQgY29tbWFuZCwgaXQgaXM6ICBgZWNobyAmIzM0O2FkZCBpZD0wLHpvbmVfc2l6ZV9tYj0yNTYsY2FwYWNpdHlfbWI9MTYzODQsY29udl96b25lcz0xMSYjMzQ7ICZndDsgL2Rldi96bG9vcC1jb250cm9sYC4gSSByZW1lbWJlciBzZWVpbmcgdGhpcyBhIHdoaWxlIGJhY2suIEl0JiMzOTtzIGEgc29mdHdhcmUtZW11bGF0ZWQsIHpvbmVkIGJsb2NrIGRldmljZSwgcGVyZmVjdCBmb3IgdGVzdGluZy4gRXhjZWxsZW50LiBJdCYjMzk7cyBhbHNvIGZ1enphYmxlIGJ5IHN5emthbGxlci4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLCBzdGFydGluZyB3aXRoIGB6bG9vcF9jb21wbGV0ZV9ycWAgYW5kIGB6bG9vcF9maWxsX3plcm9fcnFgLiBIbW0sIGB6bG9vcF9maWxsX3plcm9fcnFgIGlzIG1hcmtlZCBhcyBzdGF0aWMuIGB6bG9vcF9jb21wbGV0ZV9ycWAgaXMgYWxzbyBzdGF0aWMuIFJpZ2h0LiBOZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIGB6bG9vcGAgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3psb29wX2NvbXBsZXRlX3JxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svemxvb3AuYz04MDE9c3RhdGljIHZvaWQgemxvb3BfZmlsbF96ZXJvX3JxKHN0cnVjdCByZXF1ZXN0ICpycSwgdW5zaWduZWQgaW50IHplcm9fZnJvbSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODIwLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjgyMTpzdGF0aWMgdm9pZCB6bG9vcF9jb21wbGV0ZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODIyLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9OTMxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyB6bG9vcF9tcV9vcHMgPSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTMyLVx0LnF1ZXVlX3JxICAgICAgID0gemxvb3BfcXVldWVfcnEsXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTMzOlx0LmNvbXBsZXRlXHQ9IHpsb29wX2NvbXBsZXRlX3JxLFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkzNC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MTIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgWkZTIFJlcXVlc3QgUXVldWUqKgoKT2theSwgc28gYHpsb29wX3F1ZXVlX3JxYCBpcyB0aGUgY29yZSBmdW5jdGlvbiBmb3IgYWN0dWFsbHkgZ2V0dGluZyByZXF1ZXN0cyBpbnRvIHRoZSBzeXN0ZW0uIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBCdXQgSSBuZWVkIG1vcmUgY29udGV4dCwgYSBiaWdnZXIgcGljdHVyZS4gV2hlcmUgZG9lcyB0aGlzIGZpdCBpbiB0aGUgb3ZlcmFsbCBmbG93PyBJIHNob3VsZCByZWFsbHkgZ2V0IGEgZmVlbCBmb3IgaG93IGV2ZXJ5dGhpbmcgaXMgb3JnYW5pemVkIGluIGB6bG9vcC5jYC4gTGV0JiMzOTtzIHNlZSB3aGF0IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBoYW5naW5nIG91dCBpbiB0aGVyZS4gVW5kZXJzdGFuZGluZyB0aGUgbmVpZ2hib3JzIG9mIGB6bG9vcF9xdWV1ZV9ycWAgaXMga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3psb29wXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svemxvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjU5IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MjU9ZW51bSB7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQxLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjQyOnN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHpsb29wX29wdF90b2tlbnMgPSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDMtXHR7IFpMT09QX09QVF9JRCxcdFx0XHRcJiMzNDtpZD0lZFwmIzM0O1x0fSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzQtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzU6c3RydWN0IHpsb29wX29wdGlvbnMge1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc2LVx0dW5zaWduZWQgaW50XHRcdG1hc2s7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTk1PWVudW0ge1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDAtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAxOmVudW0gemxvb3Bfem9uZV9mbGFncyB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAyLVx0WkxPT1BfWk9ORV9DT05WID0gMCxcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTA5LSAqL1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjExMDpzdHJ1Y3Qgemxvb3Bfem9uZSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTExLVx0c3RydWN0IGxpc3RfaGVhZFx0b3Blbl96b25lX2VudHJ5O1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjMtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTI0OnN0cnVjdCB6bG9vcF9kZXZpY2Uge1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyNS1cdHVuc2lnbmVkIGludFx0XHRpZDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTUxLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE1MjpcdHN0cnVjdCB6bG9vcF96b25lXHR6b25lc1tdIF9fY291bnRlZF9ieShucl96b25lcyk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTUzLX07XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTU0LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE1NTpzdHJ1Y3Qgemxvb3BfY21kIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNTYtXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHdvcms7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE2NC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNjU6c3RhdGljIERFRklORV9JRFIoemxvb3BfaW5kZXhfaWRyKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNjY6c3RhdGljIERFRklORV9NVVRFWCh6bG9vcF9jdGxfbXV0ZXgpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTE2Ny1cbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xNjg9c3RhdGljIHVuc2lnbmVkIGludCBycV96b25lX25vKHN0cnVjdCByZXF1ZXN0ICpycSlcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNjkte1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjE3MDpcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IHJxLVx1MDAzZXEtXHUwMDNlcXVldWVkYXRhO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3MS1cbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTgwLSAqL1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjE4MTpzdGF0aWMgaW5saW5lIHZvaWQgemxvb3BfbHJ1X3JvdGF0ZV9vcGVuX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE4MjpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHpsb29wX3pvbmUgKnpvbmUpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTgzLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTkxLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE5MjpzdGF0aWMgaW5saW5lIHZvaWQgemxvb3BfbHJ1X3JlbW92ZV9vcGVuX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE5MzpcdFx0XHRcdFx0ICAgICAgc3RydWN0IHpsb29wX3pvbmUgKnpvbmUpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTk0LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjAzLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjIwNDpzdGF0aWMgaW5saW5lIGJvb2wgemxvb3BfY2FuX29wZW5fem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8pXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjA1LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjEzLSAqL1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjIxNDpzdGF0aWMgYm9vbCB6bG9vcF9jbG9zZV9pbXBfb3Blbl96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbylcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yMTUte1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjIxNjpcdHN0cnVjdCB6bG9vcF96b25lICp6b25lO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTIxNy1cbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjE5LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjIyMDpcdGlmICh6bG9vcF9jYW5fb3Blbl96b25lKHpsbykpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjIxLVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjM0LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjIzNTpzdGF0aWMgYm9vbCB6bG9vcF9vcGVuX2Nsb3NlZF9vcl9lbXB0eV96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyMzY6XHRcdFx0XHRcdCAgICBzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yMzctXHRcdFx0XHRcdCAgICBib29sIGV4cGxpY2l0KVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yNDUtXHRcdCAqL1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjI0NjpcdFx0aWYgKCF6bG9vcF9jYW5fb3Blbl96b25lKHpsbykpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjQ3LVx0XHRcdGdvdG8gZmFpbDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjUzLVx0XHQgKi9cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyNTQ6XHRcdGlmICghemxvb3BfY2xvc2VfaW1wX29wZW5fem9uZSh6bG8pKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI1NS1cdFx0XHRnb3RvIGZhaWw7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI3Mi1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyNzM6c3RhdGljIGJvb2wgemxvb3BfZG9fb3Blbl96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyNzQ6XHRcdFx0ICAgICAgIHN0cnVjdCB6bG9vcF96b25lICp6b25lLCBib29sIGV4cGxpY2l0KVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI3NS17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI4MC1cdFx0XHR6b25lLVx1MDAzZWNvbmQgPSBCTEtfWk9ORV9DT05EX0VYUF9PUEVOO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjI4MTpcdFx0emxvb3BfbHJ1X3JvdGF0ZV9vcGVuX3pvbmUoemxvLCB6b25lKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yODItXHRcdHJldHVybiB0cnVlO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yODQtXHRjYXNlIEJMS19aT05FX0NPTkRfQ0xPU0VEOlxuZHJpdmVycy9ibG9jay96bG9vcC5jOjI4NTpcdFx0cmV0dXJuIHpsb29wX29wZW5fY2xvc2VkX29yX2VtcHR5X3pvbmUoemxvLCB6b25lLCBleHBsaWNpdCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjg2LVx0ZGVmYXVsdDpcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjkwLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjI5MTpzdGF0aWMgdm9pZCB6bG9vcF9tYXJrX2Z1bGwoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCBzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSlcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yOTIte1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yOTQtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Mjk1Olx0emxvb3BfbHJ1X3JlbW92ZV9vcGVuX3pvbmUoemxvLCB6b25lKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yOTYtXHR6b25lLVx1MDAzZWNvbmQgPSBCTEtfWk9ORV9DT05EX0ZVTEw7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI5OS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzozMDA6c3RhdGljIHZvaWQgemxvb3BfbWFya19lbXB0eShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHN0cnVjdCB6bG9vcF96b25lICp6b25lKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTMwMS17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTMwMy1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzozMDQ6XHR6bG9vcF9scnVfcmVtb3ZlX29wZW5fem9uZSh6bG8sIHpvbmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTMwNS1cdHpvbmUtXHUwMDNlY29uZCA9IEJMS19aT05FX0NPTkRfRU1QVFk7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTMwOC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzozMDk6c3RhdGljIGludCB6bG9vcF91cGRhdGVfc2VxX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zMTAte1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjMxMTpcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXHUwMDI2emxvLVx1MDAzZXpvbmVzW3pvbmVfbm9dO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTMxMi1cdHN0cnVjdCBrc3RhdCBzdGF0O1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNDAtXHRpZiAoIWZpbGVfc2VjdG9ycykge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjM0MTpcdFx0emxvb3BfbWFya19lbXB0eSh6bG8sIHpvbmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTM0Mi1cdH0gZWxzZSBpZiAoZmlsZV9zZWN0b3JzID09IHpsby1cdTAwM2V6b25lX2NhcGFjaXR5KSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzQzOlx0XHR6bG9vcF9tYXJrX2Z1bGwoemxvLCB6b25lKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNDQtXHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNTQtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzU1OnN0YXRpYyBpbnQgemxvb3Bfb3Blbl96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzU2LXtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozNTc6XHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSA9IFx1MDAyNnpsby1cdTAwM2V6b25lc1t6b25lX25vXTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNTgtXHRpbnQgcmV0ID0gMDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzY1LVx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChaTE9PUF9aT05FX1NFUV9FUlJPUiwgXHUwMDI2em9uZS1cdTAwM2VmbGFncykpIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozNjY6XHRcdHJldCA9IHpsb29wX3VwZGF0ZV9zZXFfem9uZSh6bG8sIHpvbmVfbm8pO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTM2Ny1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzcwLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjM3MTpcdGlmICghemxvb3BfZG9fb3Blbl96b25lKHpsbywgem9uZSwgdHJ1ZSkpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzcyLVx0XHRyZXQgPSAtRUlPO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNzktXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzgwOnN0YXRpYyBpbnQgemxvb3BfY2xvc2Vfem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHVuc2lnbmVkIGludCB6b25lX25vKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM4MS17XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzgyOlx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcdTAwMjZ6bG8tXHUwMDNlem9uZXNbem9uZV9ub107XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzgzLVx0aW50IHJldCA9IDA7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM5MC1cdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoWkxPT1BfWk9ORV9TRVFfRVJST1IsIFx1MDAyNnpvbmUtXHUwMDNlZmxhZ3MpKSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzkxOlx0XHRyZXQgPSB6bG9vcF91cGRhdGVfc2VxX3pvbmUoemxvLCB6b25lX25vKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zOTItXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQwMS1cdFx0c3Bpbl9sb2NrKFx1MDAyNnpvbmUtXHUwMDNld3BfbG9jayk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NDAyOlx0XHR6bG9vcF9scnVfcmVtb3ZlX29wZW5fem9uZSh6bG8sIHpvbmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTQwMy1cdFx0aWYgKHpvbmUtXHUwMDNld3AgPT0gem9uZS1cdTAwM2VzdGFydClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDIxLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjQyMjpzdGF0aWMgaW50IHpsb29wX3Jlc2V0X3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00MjMte1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjQyNDpcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXHUwMDI2emxvLVx1MDAzZXpvbmVzW3pvbmVfbm9dO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTQyNS1cdGludCByZXQgPSAwO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy00NDItXHRzcGluX2xvY2soXHUwMDI2em9uZS1cdTAwM2V3cF9sb2NrKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo0NDM6XHR6bG9vcF9tYXJrX2VtcHR5KHpsbywgem9uZSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDQ0LVx0Y2xlYXJfYml0KFpMT09QX1pPTkVfU0VRX0VSUk9SLCBcdTAwMjZ6b25lLVx1MDAzZWZsYWdzKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDUyLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjQ1MzpzdGF0aWMgaW50IHpsb29wX3Jlc2V0X2FsbF96b25lcyhzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8pXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDU0LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDU4LVx0Zm9yIChpID0gemxvLVx1MDAzZW5yX2NvbnZfem9uZXM7IGkgXHUwMDNjIHpsby1cdTAwM2Vucl96b25lczsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo0NTk6XHRcdHJldCA9IHpsb29wX3Jlc2V0X3pvbmUoemxvLCBpKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00NjAtXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ2Ni1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo0Njc6c3RhdGljIGludCB6bG9vcF9maW5pc2hfem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHVuc2lnbmVkIGludCB6b25lX25vKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ2OC17XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NDY5Olx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcdTAwMjZ6bG8tXHUwMDNlem9uZXNbem9uZV9ub107XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDcwLVx0aW50IHJldCA9IDA7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ4Ny1cdHNwaW5fbG9jayhcdTAwMjZ6b25lLVx1MDAzZXdwX2xvY2spO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjQ4ODpcdHpsb29wX21hcmtfZnVsbCh6bG8sIHpvbmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ4OS1cdGNsZWFyX2JpdChaTE9PUF9aT05FX1NFUV9FUlJPUiwgXHUwMDI2em9uZS1cdTAwM2VmbGFncyk7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ5Ny1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo0OTg6c3RhdGljIHZvaWQgemxvb3BfcHV0X2NtZChzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDk5LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTA5LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjUxMDpzdGF0aWMgdm9pZCB6bG9vcF9yd19jb21wbGV0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGxvbmcgcmV0KVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTUxMS17XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTEyOlx0c3RydWN0IHpsb29wX2NtZCAqY21kID0gY29udGFpbmVyX29mKGlvY2IsIHN0cnVjdCB6bG9vcF9jbWQsIGlvY2IpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTUxMy1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MTQtXHRjbWQtXHUwMDNlcmV0ID0gcmV0O1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjUxNTpcdHpsb29wX3B1dF9jbWQoY21kKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MTYtfVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTUxNy1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1MTg6c3RhdGljIGludCB6bG9vcF9kb19ydyhzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTE5LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTIyLVx0dW5zaWduZWQgaW50IG5yX2J2ZWMgPSBibGtfcnFfbnJfYnZlYyhycSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTIzOlx0c3RydWN0IHpsb29wX2RldmljZSAqemxvID0gcnEtXHUwMDNlcS1cdTAwM2VxdWV1ZWRhdGE7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTI0Olx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcdTAwMjZ6bG8tXHUwMDNlem9uZXNbcnFfem9uZV9ubyhycSldO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTUyNS1cdHN0cnVjdCByZXFfaXRlcmF0b3IgcnFfaXRlcjtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTYwLVx0Y21kLVx1MDAzZWlvY2Iua2lfZmlscCA9IHpvbmUtXHUwMDNlZmlsZTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1NjE6XHRjbWQtXHUwMDNlaW9jYi5raV9jb21wbGV0ZSA9IHpsb29wX3J3X2NvbXBsZXRlO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTU2Mi1cdGlmICghemxvLVx1MDAzZWJ1ZmZlcmVkX2lvKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy01NzAtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTcxOnN0YXRpYyBpbnQgemxvb3Bfc2VxX3dyaXRlX3ByZXAoc3RydWN0IHpsb29wX2NtZCAqY21kKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTU3Mi17XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTczLVx0c3RydWN0IHJlcXVlc3QgKnJxID0gYmxrX21xX3JxX2Zyb21fcGR1KGNtZCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTc0Olx0c3RydWN0IHpsb29wX2RldmljZSAqemxvID0gcnEtXHUwMDNlcS1cdTAwM2VxdWV1ZWRhdGE7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTc1LVx0dW5zaWduZWQgaW50IHpvbmVfbm8gPSBycV96b25lX25vKHJxKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTc3LVx0Ym9vbCBpc19hcHBlbmQgPSByZXFfb3AocnEpID09IFJFUV9PUF9aT05FX0FQUEVORDtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1Nzg6XHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSA9IFx1MDAyNnpsby1cdTAwM2V6b25lc1t6b25lX25vXTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01NzktXHRzZWN0b3JfdCB6b25lX2VuZCA9IHpvbmUtXHUwMDNlc3RhcnQgJiM0MzsgemxvLVx1MDAzZXpvbmVfY2FwYWNpdHk7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTU5MS1cdFx0ICogSWYgb3JkZXJlZCB6b25lIGFwcGVuZCBpcyBpbiB1c2UsIHdlIGFscmVhZHkgY2hlY2tlZCBhbmQgc2V0XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTkyOlx0XHQgKiB0aGUgdGFyZ2V0IHNlY3RvciBpbiB6bG9vcF9xdWV1ZV9ycSgpLlxuZHJpdmVycy9ibG9jay96bG9vcC5jLTU5My1cdFx0ICovXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTYxMS1cdC8qIEltcGxpY2l0bHkgb3BlbiB0aGUgdGFyZ2V0IHpvbmUuICovXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NjEyOlx0aWYgKCF6bG9vcF9kb19vcGVuX3pvbmUoemxvLCB6b25lLCBmYWxzZSkpIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MTMtXHRcdHJldCA9IC1FSU87XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTYyNC1cdFx0aWYgKHpvbmUtXHUwMDNld3AgPT0gem9uZV9lbmQpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NjI1Olx0XHRcdHpsb29wX21hcmtfZnVsbCh6bG8sIHpvbmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTYyNi1cdH1cbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjMxLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjYzMjpzdGF0aWMgdm9pZCB6bG9vcF9ydyhzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjMzLXtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MzQtXHRzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBibGtfbXFfcnFfZnJvbV9wZHUoY21kKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2MzU6XHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBycS1cdTAwM2VxLVx1MDAzZXF1ZXVlZGF0YTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MzYtXHR1bnNpZ25lZCBpbnQgem9uZV9ubyA9IHJxX3pvbmVfbm8ocnEpO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MzktXHRib29sIGlzX3dyaXRlID0gcmVxX29wKHJxKSA9PSBSRVFfT1BfV1JJVEUgfHwgaXNfYXBwZW5kO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjY0MDpcdHN0cnVjdCB6bG9vcF96b25lICp6b25lO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTY0MS1cdGludCByZXQgPSAtRUlPO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy02NjYtXHRcdG11dGV4X2xvY2soXHUwMDI2em9uZS1cdTAwM2Vsb2NrKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2Njc6XHRcdHJldCA9IHpsb29wX3VwZGF0ZV9zZXFfem9uZSh6bG8sIHpvbmVfbm8pO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTY2OC1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpvbmUtXHUwMDNlbG9jayk7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY3NC1cdFx0bXV0ZXhfbG9jayhcdTAwMjZ6b25lLVx1MDAzZWxvY2spO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjY3NTpcdFx0cmV0ID0gemxvb3Bfc2VxX3dyaXRlX3ByZXAoY21kKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02NzYtXHRcdGlmICghcmV0KVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjY3NzpcdFx0XHRyZXQgPSB6bG9vcF9kb19ydyhjbWQpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTY3OC1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpvbmUtXHUwMDNlbG9jayk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjc5LVx0fSBlbHNlIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2ODA6XHRcdHJldCA9IHpsb29wX2RvX3J3KGNtZCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjgxLVx0fVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy02ODMtXHRpZiAocmV0ICE9IC1FSU9DQlFVRVVFRClcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2ODQ6XHRcdHpsb29wX3J3X2NvbXBsZXRlKFx1MDAyNmNtZC1cdTAwM2Vpb2NiLCByZXQpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjY4NTpcdHpsb29wX3B1dF9jbWQoY21kKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02ODYtfVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY4Ny1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2ODg6c3RhdGljIGlubGluZSBib29sIHpsb29wX3pvbmVfaXNfYWN0aXZlKHN0cnVjdCB6bG9vcF96b25lICp6b25lKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY4OS17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY5OS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3MDA6c3RhdGljIGludCB6bG9vcF9yZWNvcmRfc2FmZV93cHMoc3RydWN0IHpsb29wX2RldmljZSAqemxvKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTcwMS17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTcwNS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHpsby1cdTAwM2Vucl96b25lczsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3MDY6XHRcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXHUwMDI2emxvLVx1MDAzZXpvbmVzW2ldO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTcwNy1cdFx0c3RydWN0IGZpbGUgKmZpbGUgPSB6b25lLVx1MDAzZWZpbGU7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzA4LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjcwOTpcdFx0aWYgKCF6bG9vcF96b25lX2lzX2FjdGl2ZSh6b25lKSlcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03MTAtXHRcdFx0Y29udGludWU7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTcyNS0gKi9cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3MjY6c3RhdGljIGludCB6bG9vcF9mbHVzaChzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8pXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzI3LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzMxLVx0aWYgKHpsby1cdTAwM2VkaXNjYXJkX3dyaXRlX2NhY2hlKSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzMyOlx0XHRyZXQgPSB6bG9vcF9yZWNvcmRfc2FmZV93cHMoemxvKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03MzMtXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc0My1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3NDQ6c3RhdGljIHZvaWQgemxvb3BfaGFuZGxlX2NtZChzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzQ1LXtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NDYtXHRzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBibGtfbXFfcnFfZnJvbV9wZHUoY21kKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3NDc6XHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBycS1cdTAwM2VxLVx1MDAzZXF1ZXVlZGF0YTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NDgtXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc1Ny1cdFx0LypcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3NTg6XHRcdCAqIHpsb29wX3J3KCkgYWx3YXlzIGV4ZWN1dGVzIGFzeW5jaHJvbm91c2x5IG9yIGNvbXBsZXRlc1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc1OS1cdFx0ICogZGlyZWN0bHkuXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzYwLVx0XHQgKi9cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3NjE6XHRcdHpsb29wX3J3KGNtZCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzYyLVx0XHRyZXR1cm47XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzYzLVx0Y2FzZSBSRVFfT1BfRkxVU0g6XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzY0Olx0XHRjbWQtXHUwMDNlcmV0ID0gemxvb3BfZmx1c2goemxvKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NjUtXHRcdGJyZWFrO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc2Ni1cdGNhc2UgUkVRX09QX1pPTkVfUkVTRVQ6XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzY3Olx0XHRjbWQtXHUwMDNlcmV0ID0gemxvb3BfcmVzZXRfem9uZSh6bG8sIHJxX3pvbmVfbm8ocnEpKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NjgtXHRcdGJyZWFrO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc2OS1cdGNhc2UgUkVRX09QX1pPTkVfUkVTRVRfQUxMOlxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc3MDpcdFx0Y21kLVx1MDAzZXJldCA9IHpsb29wX3Jlc2V0X2FsbF96b25lcyh6bG8pO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc3MS1cdFx0YnJlYWs7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzcyLVx0Y2FzZSBSRVFfT1BfWk9ORV9GSU5JU0g6XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzczOlx0XHRjbWQtXHUwMDNlcmV0ID0gemxvb3BfZmluaXNoX3pvbmUoemxvLCBycV96b25lX25vKHJxKSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzc0LVx0XHRicmVhaztcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NzUtXHRjYXNlIFJFUV9PUF9aT05FX09QRU46XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Nzc2Olx0XHRjbWQtXHUwMDNlcmV0ID0gemxvb3Bfb3Blbl96b25lKHpsbywgcnFfem9uZV9ubyhycSkpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc3Ny1cdFx0YnJlYWs7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzc4LVx0Y2FzZSBSRVFfT1BfWk9ORV9DTE9TRTpcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3Nzk6XHRcdGNtZC1cdTAwM2VyZXQgPSB6bG9vcF9jbG9zZV96b25lKHpsbywgcnFfem9uZV9ubyhycSkpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc4MC1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc5MC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3OTE6c3RhdGljIHZvaWQgemxvb3BfY21kX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzkyLXtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3OTM6XHRzdHJ1Y3Qgemxvb3BfY21kICpjbWQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHpsb29wX2NtZCwgd29yayk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzk0LVx0aW50IG9yaWdfZmxhZ3MgPSBjdXJyZW50LVx1MDAzZWZsYWdzO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy03OTYtXHRjdXJyZW50LVx1MDAzZWZsYWdzIHw9IFBGX0xPQ0FMX1RIUk9UVExFIHwgUEZfTUVNQUxMT0NfTk9JTztcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3OTc6XHR6bG9vcF9oYW5kbGVfY21kKGNtZCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzk4LVx0Y3VycmVudC1cdTAwM2VmbGFncyA9IG9yaWdfZmxhZ3M7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTgwMC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo4MDE6c3RhdGljIHZvaWQgemxvb3BfZmlsbF96ZXJvX3JxKHN0cnVjdCByZXF1ZXN0ICpycSwgdW5zaWduZWQgaW50IHplcm9fZnJvbSlcbmRyaXZlcnMvYmxvY2svemxvb3AuYy04MDIte1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy04MjAtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODIxOnN0YXRpYyB2b2lkIHpsb29wX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcbmRyaXZlcnMvYmxvY2svemxvb3AuYy04MjIte1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjgyMzpcdHN0cnVjdCB6bG9vcF9jbWQgKmNtZCA9IGJsa19tcV9ycV90b19wZHUocnEpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjgyNDpcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IHJxLVx1MDAzZXEtXHUwMDNlcXVldWVkYXRhO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTgyNS1cdHVuc2lnbmVkIGludCB6b25lX25vID0gY21kLVx1MDAzZXNlY3RvciBcdTAwM2VcdTAwM2UgemxvLVx1MDAzZXpvbmVfc2hpZnQ7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODI2Olx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcdTAwMjZ6bG8tXHUwMDNlem9uZXNbem9uZV9ub107XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODI3LVx0YmxrX3N0YXR1c190IHN0cyA9IEJMS19TVFNfT0s7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTgzNi1cdFx0aWYgKGNtZC1cdTAwM2VyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBjbWQtXHUwMDNlcmV0ICE9IGJsa19ycV9ieXRlcyhycSkpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODM3Olx0XHRcdHpsb29wX2ZpbGxfemVyb19ycShycSwgY21kLVx1MDAzZXJldCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODM4LVx0XHRicmVhaztcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODc0LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjg3NTpzdGF0aWMgYm9vbCB6bG9vcF9zZXRfem9uZV9hcHBlbmRfc2VjdG9yKHN0cnVjdCByZXF1ZXN0ICpycSlcbmRyaXZlcnMvYmxvY2svemxvb3AuYy04NzYte1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjg3NzpcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IHJxLVx1MDAzZXEtXHUwMDNlcXVldWVkYXRhO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTg3OC1cdHVuc2lnbmVkIGludCB6b25lX25vID0gcnFfem9uZV9ubyhycSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODc5Olx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcdTAwMjZ6bG8tXHUwMDNlem9uZXNbem9uZV9ub107XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODgwLVx0c2VjdG9yX3Qgem9uZV9lbmQgPSB6b25lLVx1MDAzZXN0YXJ0ICYjNDM7IHpsby1cdTAwM2V6b25lX2NhcGFjaXR5O1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy04OTMtXHRpZiAoem9uZS1cdTAwM2V3cCBcdTAwM2U9IHpvbmVfZW5kKVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjg5NDpcdFx0emxvb3BfbWFya19mdWxsKHpsbywgem9uZSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODk1LVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy05MDAtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTAxOnN0YXRpYyBibGtfc3RhdHVzX3Qgemxvb3BfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTAyLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJsa19tcV9xdWV1ZV9kYXRhICpiZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTA0LVx0c3RydWN0IHJlcXVlc3QgKnJxID0gYmQtXHUwMDNlcnE7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTA1Olx0c3RydWN0IHpsb29wX2NtZCAqY21kID0gYmxrX21xX3JxX3RvX3BkdShycSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTA2Olx0c3RydWN0IHpsb29wX2RldmljZSAqemxvID0gcnEtXHUwMDNlcS1cdTAwM2VxdWV1ZWRhdGE7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTA3LVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy05MTgtXHRpZiAoemxvLVx1MDAzZW9yZGVyZWRfem9uZV9hcHBlbmQgXHUwMDI2XHUwMDI2IHJlcV9vcChycSkgPT0gUkVRX09QX1pPTkVfQVBQRU5EKSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTE5Olx0XHRpZiAoIXpsb29wX3NldF96b25lX2FwcGVuZF9zZWN0b3IocnEpKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkyMC1cdFx0XHRyZXR1cm4gQkxLX1NUU19JT0VSUjtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTI0LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjkyNTpcdElOSVRfV09SSyhcdTAwMjZjbWQtXHUwMDNld29yaywgemxvb3BfY21kX3dvcmtmbik7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTI2LVx0cXVldWVfd29yayh6bG8tXHUwMDNld29ya3F1ZXVlLCBcdTAwMjZjbWQtXHUwMDNld29yayk7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkzMC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5MzE6c3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIHpsb29wX21xX29wcyA9IHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5MzI6XHQucXVldWVfcnEgICAgICAgPSB6bG9vcF9xdWV1ZV9ycSxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5MzM6XHQuY29tcGxldGVcdD0gemxvb3BfY29tcGxldGVfcnEsXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTM0LX07XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTM1LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjkzNjpzdGF0aWMgaW50IHpsb29wX29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05Mzcte1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjkzODpcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IGRpc2stXHUwMDNlcHJpdmF0ZV9kYXRhO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTkzOS1cdGludCByZXQ7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTQwLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjk0MTpcdHJldCA9IG11dGV4X2xvY2tfa2lsbGFibGUoXHUwMDI2emxvb3BfY3RsX211dGV4KTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05NDItXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy05NDYtXHRcdHJldCA9IC1FTlhJTztcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5NDc6XHRtdXRleF91bmxvY2soXHUwMDI2emxvb3BfY3RsX211dGV4KTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05NDgtXHRyZXR1cm4gcmV0O1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy05NTAtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTUxOnN0YXRpYyBpbnQgemxvb3BfcmVwb3J0X3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IsXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTUyLVx0XHR1bnNpZ25lZCBpbnQgbnJfem9uZXMsIHN0cnVjdCBibGtfcmVwb3J0X3pvbmVzX2FyZ3MgKmFyZ3MpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTUzLXtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5NTQ6XHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBkaXNrLVx1MDAzZXByaXZhdGVfZGF0YTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05NTUtXHRzdHJ1Y3QgYmxrX3pvbmUgYmxreiA9IHt9O1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy05NjUtXHRcdHVuc2lnbmVkIGludCB6b25lX25vID0gZmlyc3QgJiM0MzsgaTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5NjY6XHRcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXHUwMDI2emxvLVx1MDAzZXpvbmVzW3pvbmVfbm9dO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTk2Ny1cbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTcwLVx0XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KFpMT09QX1pPTkVfU0VRX0VSUk9SLCBcdTAwMjZ6b25lLVx1MDAzZWZsYWdzKSkge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjk3MTpcdFx0XHRyZXQgPSB6bG9vcF91cGRhdGVfc2VxX3pvbmUoemxvLCB6b25lX25vKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05NzItXHRcdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDAxLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwMDI6c3RhdGljIHZvaWQgemxvb3BfZnJlZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMDMte1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwMDQ6XHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBkaXNrLVx1MDAzZXByaXZhdGVfZGF0YTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDA1LVx0dW5zaWduZWQgaW50IGk7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMDktXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB6bG8tXHUwMDNlbnJfem9uZXM7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAxMDpcdFx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcdTAwMjZ6bG8tXHUwMDNlem9uZXNbaV07XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAxMS1cbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAyMi1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDIzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgemxvb3BfZm9wcyA9IHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDI0LVx0Lm93bmVyXHRcdFx0PSBUSElTX01PRFVMRSxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDI1Olx0Lm9wZW5cdFx0XHQ9IHpsb29wX29wZW4sXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAyNjpcdC5yZXBvcnRfem9uZXNcdFx0PSB6bG9vcF9yZXBvcnRfem9uZXMsXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAyNzpcdC5mcmVlX2Rpc2tcdFx0PSB6bG9vcF9mcmVlX2Rpc2ssXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAyOC19O1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xMDMwPV9fcHJpbnRmKDMsIDQpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAzMTpzdGF0aWMgc3RydWN0IGZpbGUgKnpsb29wX2ZpbHBfb3Blbl9mbXQoaW50IG9mbGFncywgdW1vZGVfdCBtb2RlLFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMzItXHRcdGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDQ4LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwNDk6c3RhdGljIGludCB6bG9vcF9nZXRfYmxvY2tfc2l6ZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTA1MDpcdFx0XHRcdHN0cnVjdCB6bG9vcF96b25lICp6b25lKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwNTEte1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDc5LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwODA6c3RhdGljIGludCB6bG9vcF9pbml0X3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCBzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDgxLVx0XHRcdCAgIHVuc2lnbmVkIGludCB6b25lX25vLCBib29sIHJlc3RvcmUpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTA4Mi17XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTA4MzpcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXHUwMDI2emxvLVx1MDAzZXpvbmVzW3pvbmVfbm9dO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwODQtXHRpbnQgb2ZsYWdzID0gT19SRFdSO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTA1LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExMDY6XHRcdHpvbmUtXHUwMDNlZmlsZSA9IHpsb29wX2ZpbHBfb3Blbl9mbXQob2ZsYWdzLCAwNjAwLCBcJiMzNDslcy8ldS9jbnYtJTA2dVwmIzM0OyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTA3LVx0XHRcdFx0XHR6bG8tXHUwMDNlYmFzZV9kaXIsIHpsby1cdTAwM2VpZCwgem9uZV9ubyk7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMTUtXHRcdGlmICghemxvLVx1MDAzZWJsb2NrX3NpemUpIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTE2Olx0XHRcdHJldCA9IHpsb29wX2dldF9ibG9ja19zaXplKHpsbywgem9uZSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTExNy1cdFx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTQ1LVx0LyogU2VxdWVudGlhbCB6b25lIGZpbGUuICovXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE0NjpcdHpvbmUtXHUwMDNlZmlsZSA9IHpsb29wX2ZpbHBfb3Blbl9mbXQob2ZsYWdzLCAwNjAwLCBcJiMzNDslcy8ldS9zZXEtJTA2dVwmIzM0OyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTQ3LVx0XHRcdFx0XHQgemxvLVx1MDAzZWJhc2VfZGlyLCB6bG8tXHUwMDNlaWQsIHpvbmVfbm8pO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTU1LVx0aWYgKCF6bG8tXHUwMDNlYmxvY2tfc2l6ZSkge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjExNTY6XHRcdHJldCA9IHpsb29wX2dldF9ibG9ja19zaXplKHpsbywgem9uZSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE1Ny1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE2MC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTYxOlx0emxvb3BfZ2V0X2Jsb2NrX3NpemUoemxvLCB6b25lKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTYyLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNjMtXHRtdXRleF9sb2NrKFx1MDAyNnpvbmUtXHUwMDNlbG9jayk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE2NDpcdHJldCA9IHpsb29wX3VwZGF0ZV9zZXFfem9uZSh6bG8sIHpvbmVfbm8pO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNjUtXHRtdXRleF91bmxvY2soXHUwMDI2em9uZS1cdTAwM2Vsb2NrKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE2OS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTcwOnN0YXRpYyBib29sIHpsb29wX2Rldl9leGlzdHMoc3RydWN0IHpsb29wX2RldmljZSAqemxvKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNzEte1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTc0LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExNzU6XHRjbnYgPSB6bG9vcF9maWxwX29wZW5fZm10KE9fUkRPTkxZLCAwNjAwLCBcJiMzNDslcy8ldS9jbnYtJTA2dVwmIzM0OyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTc2LVx0XHRcdFx0ICB6bG8tXHUwMDNlYmFzZV9kaXIsIHpsby1cdTAwM2VpZCwgMCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE3NzpcdHNlcSA9IHpsb29wX2ZpbHBfb3Blbl9mbXQoT19SRE9OTFksIDA2MDAsIFwmIzM0OyVzLyV1L3NlcS0lMDZ1XCYjMzQ7LFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNzgtXHRcdFx0XHQgIHpsby1cdTAwM2ViYXNlX2RpciwgemxvLVx1MDAzZWlkLCAwKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE4OC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTg5OnN0YXRpYyBpbnQgemxvb3BfY3RsX2FkZChzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cylcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTkwLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE5Ny1cdHVuc2lnbmVkIGludCBucl96b25lcywgaSwgajtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTk4Olx0c3RydWN0IHpsb29wX2RldmljZSAqemxvO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTExOTktXHRpbnQgcmV0ID0gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTIyNS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjI2Olx0cmV0ID0gbXV0ZXhfbG9ja19raWxsYWJsZShcdTAwMjZ6bG9vcF9jdGxfbXV0ZXgpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyMjctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjMxLVx0aWYgKG9wdHMtXHUwMDNlaWQgXHUwMDNlPSAwKSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTIzMjpcdFx0cmV0ID0gaWRyX2FsbG9jKFx1MDAyNnpsb29wX2luZGV4X2lkciwgemxvLFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyMzMtXHRcdFx0XHQgIG9wdHMtXHUwMDNlaWQsIG9wdHMtXHUwMDNlaWQgJiM0MzsgMSwgR0ZQX0tFUk5FTCk7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyMzYtXHR9IGVsc2Uge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyMzc6XHRcdHJldCA9IGlkcl9hbGxvYyhcdTAwMjZ6bG9vcF9pbmRleF9pZHIsIHpsbywgMCwgMCwgR0ZQX0tFUk5FTCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTIzOC1cdH1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjM5Olx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpsb29wX2N0bF9tdXRleCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI0MC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyNzQtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTI3NTpcdHpsby1cdTAwM2VkYXRhX2RpciA9IHpsb29wX2ZpbHBfb3Blbl9mbXQoT19SRE9OTFkgfCBPX0RJUkVDVE9SWSwgMCwgXCYjMzQ7JXMvJXVcJiMzNDssXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI3Ni1cdFx0XHRcdFx0ICAgIHpsby1cdTAwM2ViYXNlX2RpciwgemxvLVx1MDAzZWlkKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI4NS1cdCAqIElmIHdlIGFscmVhZHkgaGF2ZSB6b25lIGZpbGVzLCB3ZSBhcmUgcmVzdG9yaW5nIGEgZGV2aWNlIGNyZWF0ZWQgYnkgYVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyODY6XHQgKiBwcmV2aW91cyBhZGQgb3BlcmF0aW9uLiBJbiB0aGlzIGNhc2UsIHpsb29wX2luaXRfem9uZSgpIHdpbGwgY2hlY2tcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjg3LVx0ICogdGhhdCB0aGUgem9uZSBmaWxlcyBhcmUgY29uc2lzdGVudCB3aXRoIHRoZSB6b25lIGNvbmZpZ3VyYXRpb24gZ2l2ZW4uXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI4OC1cdCAqL1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyODk6XHRyZXN0b3JlID0gemxvb3BfZGV2X2V4aXN0cyh6bG8pO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyOTAtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl96b25lczsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjkxOlx0XHRyZXQgPSB6bG9vcF9pbml0X3pvbmUoemxvLCBvcHRzLCBpLCByZXN0b3JlKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjkyLVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMzAxLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEzMDI6XHR6bG8tXHUwMDNldGFnX3NldC5vcHMgPSBcdTAwMjZ6bG9vcF9tcV9vcHM7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTMwMy1cdHpsby1cdTAwM2V0YWdfc2V0Lm5yX2h3X3F1ZXVlcyA9IG9wdHMtXHUwMDNlbnJfcXVldWVzO1xuLS1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDcyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWm9uZWQgQmxvY2sgTG9vcCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIHRoZSBgemxvb3BgIGRyaXZlciwgYW5kIGl0IHNlZW1zIGxpa2Ugd2UmIzM5O3JlIGdldHRpbmcgc29tZSB1cGRhdGVzLiBUaGUgZHJpdmVyIGl0c2VsZiBpcyBjbGVhcmx5IGlkZW50aWZpZWQgYXMgYHpsb29wYCwgYW5kIHRoZSBhdXRob3IgaGFzIGxpc3RlZCBvdXQgYWxsIHRoZSBmdW5jdGlvbnMgd2l0aGluIHRoZSBkcml2ZXIuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gSSYjMzk7bSBzZWVpbmcgZnVuY3Rpb25zIGxpa2UgYHpsb29wX3F1ZXVlX3JxYCwgYHpsb29wX2NvbXBsZXRlX3JxYCwgYHpsb29wX3J3YCwgYW5kIGEgd2hvbGUgaG9zdCBvZiB6b25lIG1hbmFnZW1lbnQgZnVuY3Rpb25zIC0gYHpsb29wX29wZW5fem9uZWAsIGB6bG9vcF9jbG9zZV96b25lYCwgZXRjLiBTZWVtcyBwcmV0dHkgc3RhbmRhcmQgZm9yIGEgWm9uZWQgQmxvY2sgRGV2aWNlIChaQkQpIGRyaXZlci4KClRoZSBjb3JlIG9mIHRoaXMgcGF0Y2gsIGFzIGZhciBhcyBJIGNhbiBzZWUsIGlzIG1vZGlmeWluZyBgemxvb3BfY29tcGxldGVfcnFgIGFuZCBhZGRpbmcgYHpsb29wX2ZpbGxfemVyb19ycWAuIFRoZSBjaGFuZ2UgdG8gYHpsb29wX2NvbXBsZXRlX3JxYCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuIFNpbmNlIGl0JiMzOTtzIGNhbGxlZCBieSB0aGUgYmxvY2sgbGF5ZXIgdXBvbiByZXF1ZXN0IGNvbXBsZXRpb24sIHRoaXMgcHJvYmFibHkgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIGhhbmRsaW5nIHpvbmVkIHNlbWFudGljcyBhZnRlciBJL08uIEFzIGZvciB0aGUgYHpsb29wX2ZpbGxfemVyb19ycWAgYWRkaXRpb24gLSB0aGF0JiMzOTtzIGFsc28gaW50ZXJlc3RpbmcuIEkgd29uZGVyIGlmIHRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIGZvciBjbGVhcmluZyB6b25lcyBvciBwZXJoYXBzIHBhcnQgb2YgYSBnYXJiYWdlIGNvbGxlY3Rpb24gc3RyYXRlZ3kuCgpOb3csIGdpdmVuIHRoZSBgQkxLX0RFVl9aT05FRF9MT09QYCBjb25maWcsIEkgc2hvdWxkIGNoZWNrIHRoZSBgZHJpdmVycy9ibG9jay9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQkxLX0RFVl9aT05FRF9MT09QYC4gS25vd2luZyB3aGF0IG90aGVyIGZlYXR1cmVzIG9yIGNvbmZpZ3MgZW5hYmxlIG9yIGRpc2FibGUgdGhpcyB3aWxsIGdpdmUgbWUgbW9yZSBjb250ZXh0LiBUaGlzIHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBjb3VsZCBpbXBhY3Qgb3IgYmUgaW1wYWN0ZWQgYnkgYW55IG90aGVyIGNoYW5nZXMgaW4gdGhlIGJsb2NrIGxheWVyLCBlc3BlY2lhbGx5IGlmIGl0IHJlbGF0ZXMgdG8gb3RoZXIgWkJEIGRyaXZlcnMgb3IgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBkZXBlbmRlbmNpZXMgbWlnaHQgZXhpc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTM1ND1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNTUtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzU2OmNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNTctXHR0cmlzdGF0ZSBcJiMzNDtab25lZCBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDg1NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggaXQ6CgoqKkRpdmluZyBpbnRvIEJsb2NrIERldmljZSBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGJsb2NrIGRldmljZSBvcHRpb25zIGFyZSBjb25maWd1cmVkIGluIHRoZSBrZXJuZWwuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBsb29rIGludG8gdGhlIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIGZpbGUuIEkmIzM5O2xsIG5lZWQgdG8ganVtcCBkaXJlY3RseSB0byBsaW5lIDM1NiwgYXMgSSBoYXZlIGEgZ29vZCBmZWVsaW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNydWNpYWwgYml0cyBJJiMzOTttIGludGVyZXN0ZWQgaW4gcmVzaWRlLiBIb3BlZnVsbHksIHRoYXQgbG9jYXRpb24gd2lsbCBwcm92aWRlIHRoZSByZWxldmFudCBjb250ZXh0LiBJIGV4cGVjdCB0byBiZSBhYmxlIHRvIGZvbGxvdyB0aGUgbG9naWMgYW5kIHVuZGVyc3RhbmQgdGhlIGludGVyZGVwZW5kZW5jaWVzIHRoZXJlLiBUaGlzIHNob3VsZCBjbGFyaWZ5IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM1MDpcdFx0ICBTYXkgTiBpZiB5b3UgZG9uJiMzOTt0IHdhbnQgdG8gc3VwcG9ydCBsZWdhY3kgY29tbWFuZCBvcGNvZGUuIEl0IGlzXG4gMzUxOlx0XHQgIHN1Z2dlc3RlZCB0byBlbmFibGUgTiBpZiB5b3VyIGFwcGxpY2F0aW9uKHVibGsgc2VydmVyKSBzd2l0Y2hlcyB0b1xuIDM1MjpcdFx0ICBpb2N0bCBjb21tYW5kIGVuY29kaW5nLlxuIDM1MzpcdFxuIDM1NDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZ1wmIzM0O1xuIDM1NTpcdFxuIDM1NjpcdGNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcbiAzNTc6XHRcdHRyaXN0YXRlIFwmIzM0O1pvbmVkIGxvb3BiYWNrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gMzU4Olx0XHRkZXBlbmRzIG9uIEJMS19ERVZfWk9ORURcbiAzNTk6XHRcdGhlbHBcbiAzNjA6XHRcdCAgU2F5aW5nIFkgaGVyZSB3aWxsIGFsbG93IHlvdSB0byB1c2UgY3JlYXRlIGEgem9uZWQgYmxvY2sgZGV2aWNlIHVzaW5nXG4gMzYxOlx0XHQgIHJlZ3VsYXIgZmlsZXMgZm9yIHpvbmVzIChvbmUgZmlsZSBwZXIgem9uZXMpLiBUaGlzIGlzIHVzZWZ1bCB0byB0ZXN0XG4gMzYyOlx0XHQgIGZpbGUgc3lzdGVtcywgZGV2aWNlIG1hcHBlciBhbmQgYXBwbGljYXRpb25zIHRoYXQgc3VwcG9ydCB6b25lZCBibG9ja1xuIDM2MzpcdFx0ICBkZXZpY2VzLiBUbyBjcmVhdGUgYSB6b25lZCBsb29wIGRldmljZSwgbm8gdXNlciB1dGlsaXR5IGlzIG5lZWRlZCwgYVxuIDM2NDpcdFx0ICB6b25lZCBsb29wIGRldmljZSBjYW4gYmUgY3JlYXRlZCAob3IgcmUtc3RhcnRlZCkgdXNpbmcgYSBjb21tYW5kXG4gMzY1Olx0XHQgIGxpa2U6XG4gMzY2Olx0XG4gMzY3Olx0XHQgIGVjaG8gXCYjMzQ7YWRkIGlkPTAsem9uZV9zaXplX21iPTI1NixjYXBhY2l0eV9tYj0xNjM4NCxjb252X3pvbmVzPTExXCYjMzQ7IFx1MDAzZSBcXFxuIDM2ODpcdFx0XHQvZGV2L3psb29wLWNvbnRyb2xcbiAzNjk6XHRcbiAzNzA6XHRcdCAgU2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmxvY2tkZXYvem9uZWRfbG9vcC5yc3QgZm9yIHVzYWdlXG4gMzcxOlx0XHQgIGRldGFpbHMuXG4gMzcyOlx0XG4gMzczOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMzc0Olx0XG4gMzc1Olx0ZW5kaWYgIyBCTEtfREVWXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDg5CgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogNDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBab25lZCBMb29wIERldmljZSBDb25maWd1cmF0aW9uIGFuZCBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgYEJMS19ERVZfWk9ORURfTE9PUGAgaGFzIGEgY2xlYXIgZGVwZW5kZW5jeSBvbiBgQkxLX0RFVl9aT05FRGAuIEkgbmVlZCB0byBtYWtlIHN1cmUgYm90aCBhcmUgZW5hYmxlZCBpbiB0aGUgZnV6emluZyBzZXR1cCwgc28gSSYjMzk7bGwgYWRkIHRoZW0gdG8gYEVuYWJsZUNvbmZpZ3NgIGltbWVkaWF0ZWx5LiBNYWtlcyBzZW5zZTsgeW91IGNhbiYjMzk7dCBoYXZlIHRoZSBsb29wLXNwZWNpZmljIHN0dWZmIHdpdGhvdXQgdGhlIGNvcmUgem9uZWQgYmxvY2sgZGV2aWNlIHN1cHBvcnQuCgpOb3csIHRoZSBwYXRjaCBpdHNlbGYuLi4gaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBzaG9ydCByZWFkcyBhbmQgemVyb2luZyB0aGUgdW5yZWFkIHBvcnRpb24uIEl0JiMzOTtzIHJlcGxhY2luZyBgemVyb19maWxsX2Jpb2Agd2l0aCBgemxvb3BfZmlsbF96ZXJvX3JxYC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgemVyb2luZyBiZWhhdmlvciwgZXNwZWNpYWxseSB3aXRoIHpvbmVkIGRldmljZXMsIGFsd2F5cyBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIERlZmluaXRlbHkgd29ydGggaW52ZXN0aWdhdGluZy4KCkxldCYjMzk7cyBzZWUsIHdoYXQgYXJlIHRoZSBrZXkgc3ltYm9scyBoZXJlPyBJJiMzOTttIHRoaW5raW5nOiBgemxvb3BfY29tcGxldGVfcnFgLCBgemxvb3BfZmlsbF96ZXJvX3JxYCAodGhvdWdoIGl0JiMzOTtzIHN0YXRpYywgc28gdGhhdCBtaWdodCBjb21wbGljYXRlIHRoaW5ncyksIGB6bG9vcF9yd2AsIGB6bG9vcF9xdWV1ZV9ycWAsIGFuZCBgemxvb3BfY3RsX2FkZGAuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZG91YmxlIGNoZWNrIGlmIGB6bG9vcF9maWxsX3plcm9fcnFgIGlzIHN0YXRpYy4gWXVwLCBpdCBpcy4gSG1tLCBzdGF0aWMgZnVuY3Rpb25zIGFyZSBhIGxpdHRsZSB0cmlja3kuIE9rYXksIGB6bG9vcF9jb21wbGV0ZV9ycWAgaXMgb3VyIG1haW4gZm9jdXMgc2luY2UgaXQmIzM5O3MgdGhlIG1vc3QgY29tbW9uIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gdGhhdCB0YXNrLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGhvdyBzeXprYWxsZXIgaGFuZGxlcyBzdGF0aWMgZnVuY3Rpb25zLiBgemxvb3BfcXVldWVfcnFgIGFuZCBgemxvb3BfcndgIGFyZSBhbHNvIGltcG9ydGFudCBzeW1ib2xzLiBXYWl0LCBgemxvb3BfY29tcGxldGVfcnFgIGlzIHN0YXRpYyB0b28hIFRoYXQmIzM5O3Mgd2VpcmQuCgpPa2F5LCBjaGVja2luZyBpZiBgemxvb3BfY29tcGxldGVfcnFgIGlzIHN0YXRpYy4gWXVwLiBCdXQgd2FpdCwgaXQmIzM5O3MgYXNzaWduZWQgdG8gYHpsb29wX21xX29wcy5jb21wbGV0ZWAuIEFoYSEgSXQmIzM5O3Mgbm90IGlubGluZWQgYmVjYXVzZSBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIuIFNvIHN5emthbGxlciAqY2FuKiB1c2Ugc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5JiMzOTtyZSBub3QgaW5saW5lZC4gVGhhdCYjMzk7cyBhIGdvb2QgcGllY2Ugb2YgaW5mb3JtYXRpb24uIGB6bG9vcF9maWxsX3plcm9fcnFgIGlzIHN0YXRpYywgc28gaXQgKm1pZ2h0KiBiZSBpbmxpbmVkIGFuZCB0aGVyZWZvcmUgbGVzcyB1c2VmdWwgYXMgYSBmdXp6IHRhcmdldC4KCkkgbmVlZCB0byBjb25maXJtIGlmIGB6bG9vcF9xdWV1ZV9ycWAgaXMgc3RhdGljLiBZZXMsIGl0IGlzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGFib3V0IGB6bG9vcF9jdGxfYWRkYC4gWXVwLCBpdCYjMzk7cyBzdGF0aWMgYXMgd2VsbC4gT2theSwgbGV0JiMzOTtzIHN0ZXAgYmFjaywgYW5kIGZvY3VzIG9uIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgemxvb3AuY2AgdG8gc2VlIGlmIHRob3NlIHdvdWxkIG9mZmVyIGJldHRlciBjb3ZlcmFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXVthLXpBLVowLTlfXSogemxvb3BfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svemxvb3AuYz00Mj1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB6bG9vcF9vcHRfdG9rZW5zID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3NTpzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzYtXHR1bnNpZ25lZCBpbnRcdFx0bWFzaztcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9OTU9ZW51bSB7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDE6ZW51bSB6bG9vcF96b25lX2ZsYWdzIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDItXHRaTE9PUF9aT05FX0NPTlYgPSAwLFxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDktICovXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTEwOnN0cnVjdCB6bG9vcF96b25lIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTEtXHRzdHJ1Y3QgbGlzdF9oZWFkXHRvcGVuX3pvbmVfZW50cnk7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyMy1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjQ6c3RydWN0IHpsb29wX2RldmljZSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI1LVx0dW5zaWduZWQgaW50XHRcdGlkO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNTQtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTU1OnN0cnVjdCB6bG9vcF9jbWQge1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTE1Ni1cdHN0cnVjdCB3b3JrX3N0cnVjdFx0d29yaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4ODIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2U6IEluaXRpYWwgU3VzcGVjdHMqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCB0aGlzIHByb2JsZW0sIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZywgbmF0dXJhbGx5LCBpcyB0aGlua2luZyBhYm91dCBpbml0aWFsaXphdGlvbi4gV2hlcmUgZG9lcyB0aGlzIHdob2xlIHRoaW5nICpzdGFydCo/IFdlIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgcmVsZXZhbnQgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2V0IHVwIG9yIHdoZXJlIHNvbWUgY3JpdGljYWwgZmxhZ3MgYXJlIGJlaW5nIGZsaXBwZWQuIEkmIzM5O20gaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhlIGNsYXNzaWM6IGBtb2R1bGVfaW5pdGAsIG9yIGFueXRoaW5nIGFuYWxvZ291cyB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIGZyYW1ld29yay4gVGhhdCBraW5kIG9mIGZ1bmN0aW9uIG9yIG1hY3JvIGlzIGFsbW9zdCBhbHdheXMgdGhlIGtleSBlbnRyeSBwb2ludCBmb3IgZ2V0dGluZyB0aGluZ3MgZ29pbmcsIGVzcGVjaWFsbHkgaW4gYSBtb2R1bGFyIGRlc2lnbi4gSXTigJlzIHRoZSB1c3VhbCBzdXNwZWN0IGZvciBob29raW5nIGludG8gdGhlIHN5c3RlbSYjMzk7cyBzdGFydHVwIHNlcXVlbmNlLiBMZXTigJlzIHNlZSBpZiB0aGF0JiMzOTtzIHdoZXJlIHRoZSByZWxldmFudCBkYXRhIG9yIGZ1bmN0aW9uYWxpdHkgcmVzaWRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jPTE3Nzg9c3RhdGljIHZvaWQgX19leGl0IHpsb29wX2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc4My1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNzg0Om1vZHVsZV9pbml0KHpsb29wX2luaXQpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3ODUtbW9kdWxlX2V4aXQoemxvb3BfZXhpdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTkxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgemxvb3BfaW5pdGAgZnVuY3Rpb24gYW5kIHNlZSB3aGF0IGl0JiMzOTtzIGFsbCBhYm91dC4KKioqCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIGB6bG9vcF9pbml0YCoqCgpBbHJpZ2h0LCBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhpcyBgemxvb3BfaW5pdGAgZnVuY3Rpb24uIEdpdmVuIG15IGJhY2tncm91bmQsIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaXRzIHJvbGUgaW4gZXZlbnQgbG9vcCBpbml0aWFsaXphdGlvbi4gUHJvYmFibHkgc2V0dGluZyB1cCB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIHBlcmhhcHMgYWxsb2NhdGluZyBzb21lIHJlc291cmNlcy4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyBwYXJ0IG9mIGEgWmVyb01RIG9yIHNpbWlsYXIgYXN5bmNocm9ub3VzIG5ldHdvcmtpbmcgbGlicmFyeSwgYmFzZWQgb24gdGhlIG5hbWluZyBjb252ZW50aW9uLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCBleGFjdGx5IGlzIGl0IGluaXRpYWxpemluZz8gSXMgaXQgdGhyZWFkLXNhZmU/IERvZXMgaXQgaGFuZGxlIGFueSByZXNvdXJjZSBsaW1pdHMgb3IgY29uZmlndXJhdGlvbnM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MgaXQgZXN0YWJsaXNoZXMgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBmcmFtZXdvcmsgYW5kIGhvdyBpdCB3aWxsIGJlaGF2ZSB1bmRlciBsb2FkLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIGl0IHByb3ZpZGVzIGFueSBob29rcyBmb3IgY3VzdG9taXphdGlvbiBvciBleHRlbnNpb24uIFRoZSBsZXZlbCBvZiBlcnJvciBoYW5kbGluZyBhbmQgYW55IHBvc3NpYmxlIGFzc2VydGlvbnMgd291bGQgYmUgYW4gaW1wb3J0YW50IGVsZW1lbnQgdG8gYXNzZXNzIGFzIHdlbGwuIEZpbmFsbHksIEkmIzM5O2xsIHBheSBhdHRlbnRpb24gdG8gcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IGNvdWxkIGNvbWUgaW50byBwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6bG9vcF9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svemxvb3AuYz0xMDQ5PXN0YXRpYyBpbnQgemxvb3BfZ2V0X2Jsb2NrX3NpemUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDc5LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwODA6c3RhdGljIGludCB6bG9vcF9pbml0X3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCBzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDgxLVx0XHRcdCAgIHVuc2lnbmVkIGludCB6b25lX25vLCBib29sIHJlc3RvcmUpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTExODk9c3RhdGljIGludCB6bG9vcF9jdGxfYWRkKHN0cnVjdCB6bG9vcF9vcHRpb25zICpvcHRzKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjg1LVx0ICogSWYgd2UgYWxyZWFkeSBoYXZlIHpvbmUgZmlsZXMsIHdlIGFyZSByZXN0b3JpbmcgYSBkZXZpY2UgY3JlYXRlZCBieSBhXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTI4NjpcdCAqIHByZXZpb3VzIGFkZCBvcGVyYXRpb24uIEluIHRoaXMgY2FzZSwgemxvb3BfaW5pdF96b25lKCkgd2lsbCBjaGVja1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyODctXHQgKiB0aGF0IHRoZSB6b25lIGZpbGVzIGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIHpvbmUgY29uZmlndXJhdGlvbiBnaXZlbi5cbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI5MC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3pvbmVzOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyOTE6XHRcdHJldCA9IHpsb29wX2luaXRfem9uZSh6bG8sIG9wdHMsIGksIHJlc3RvcmUpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyOTItXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTE3NTg9c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHpsb29wX21pc2MgPSB7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3NjMtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTc2NDpzdGF0aWMgaW50IF9faW5pdCB6bG9vcF9pbml0KHZvaWQpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc2NS17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTE3Nzg9c3RhdGljIHZvaWQgX19leGl0IHpsb29wX2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc4My1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNzg0Om1vZHVsZV9pbml0KHpsb29wX2luaXQpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3ODUtbW9kdWxlX2V4aXQoemxvb3BfZXhpdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTc0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBgemxvb3BfbWlzY2AgRGV2aWNlIERyaXZlcioqCgpPa2F5LCBzbyB0aGUgZHJpdmVyIGhhcyByZWdpc3RlcmVkIGEgbWlzY2RldmljZSwgc3BlY2lmaWNhbGx5IG5hbWVkIGB6bG9vcF9taXNjYC4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBOb3csIHdoYXQmIzM5O3MgY3J1Y2lhbCBpcyB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGRldmljZSBhY3R1YWxseSAqZnVuY3Rpb25zKi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGVsdmUgaW50byB0aGUgb3BlcmF0aW9ucyB0aGF0IGFyZSBkZWZpbmVkIGZvciBgemxvb3BfbWlzY2AuIEkgbmVlZCB0byBpbnNwZWN0IHRob3NlIG9wZXJhdGlvbnMg4oCTIHRoZSByZWFkLCB3cml0ZSwgaW9jdGwsIG9wZW4sIHJlbGVhc2UgZnVuY3Rpb25zLCB3aGF0ZXZlciBpdCBtYXkgYmUuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGJlaGF2aW9yLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBhbnkgaW50ZXJhY3Rpb25zIHdpdGggaGFyZHdhcmUgb3Igb3RoZXIga2VybmVsIHN1YnN5c3RlbXMuIFdoYXQgYXJlIHRoZSBrZXkgaW50ZXJhY3Rpb25zIGZvciB0aGlzIGRldmljZSwgd2hpY2ggbWlnaHQgcmV2ZWFsIGhvdyB0aGUgZGV2aWNlIGhhcyBiZWVuIGRlc2lnbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6bG9vcF9taXNjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svemxvb3AuYz0xNzUwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHpsb29wX2N0bF9mb3BzID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNzU3LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE3NTg6c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHpsb29wX21pc2MgPSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc1OS1cdC5taW5vclx0XHQ9IE1JU0NfRFlOQU1JQ19NSU5PUixcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MTc2ND1zdGF0aWMgaW50IF9faW5pdCB6bG9vcF9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3NjctXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTc2ODpcdHJldCA9IG1pc2NfcmVnaXN0ZXIoXHUwMDI2emxvb3BfbWlzYyk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc2OS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MTc3OD1zdGF0aWMgdm9pZCBfX2V4aXQgemxvb3BfZXhpdCh2b2lkKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3Nzkte1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjE3ODA6XHRtaXNjX2RlcmVnaXN0ZXIoXHUwMDI2emxvb3BfbWlzYyk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc4MS1cdGlkcl9kZXN0cm95KFx1MDAyNnpsb29wX2luZGV4X2lkcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDk1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIGB6bG9vcF9jdGxfZm9wc2AgU3RydWN0dXJlKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYHpsb29wX2N0bF9mb3BzYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb250cm9sIGZpbGUgb3BlcmF0aW9ucyB3aXRoaW4gdGhlIGB6bG9vcGAgY29udGV4dC4gSSB3YW50IHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSByZWdpc3RlcmVkIGZpbGUgb3BlcmF0aW9ucyB3aXRoaW4gdGhpcyBzdHJ1Y3R1cmUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBhbnkgcmVjZW50IGNoYW5nZXMgaW4gaG93IHdlIG1hbmFnZSBkZXZpY2UgY29udHJvbC4gQXJlIHRoZSB1c3VhbCBzdXNwZWN0cyBsaWtlIGBvcGVuYCwgYHJlbGVhc2VgLCBgcmVhZGAsIGB3cml0ZWAsIGFuZCBtYXliZSBldmVuIGBpb2N0bGAgYWxsIHByb3Blcmx5IGRlZmluZWQgYW5kIGhhbmRsaW5nIHRoZSBpbnRlcmFjdGlvbnMgSSBleHBlY3Q/IEl0JiMzOTtzIGFsd2F5cyBhIGdvb2QgaWRlYSB0byBkb3VibGUtY2hlY2sgdGhlIGZ1bmRhbWVudGFscyB3aGVuIGRlYnVnZ2luZyBhbnl0aGluZyBhdCB0aGlzIGxvdyBsZXZlbC4gQSBxdWljayBsb29rIHdpbGwgaGVscCBtZSBjb25maXJtIHRoZSBzZXR1cCBhbmQgZW5zdXJlIHRoYXQgdGhlIHJpZ2h0IGZ1bmN0aW9uIHBvaW50ZXJzIGFyZSBpbiBwbGFjZSBmb3IgZWFjaCBvcGVyYXRpb24uIFRoaXMmIzM5O2xsIHNhdmUgbWUgZnJvbSBjaGFzaW5nIGdob3N0cyBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emxvb3BfY3RsX2ZvcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jPTE3NDU9c3RhdGljIGludCB6bG9vcF9jdGxfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc0OS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNzUwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHpsb29wX2N0bF9mb3BzID0ge1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3NTEtXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MTc1OD1zdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Ugemxvb3BfbWlzYyA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc2MC1cdC5uYW1lXHRcdD0gXCYjMzQ7emxvb3AtY29udHJvbFwmIzM0OyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNzYxOlx0LmZvcHNcdFx0PSBcdTAwMjZ6bG9vcF9jdGxfZm9wcyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNzYyLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTY0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHpsb29wX2N0bF9mb3BzYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHpsb29wX2N0bF9mb3BzYCBzdHJ1Y3R1cmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBmdW5jdGlvbmFsIGJyZWFrZG93biDigJMgd2hhdCBleGFjdGx5IGRvZXMgdGhpcyB0aGluZyAqZG8qPyBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIGEgc3RydWN0dXJlIGNvbnRhaW5pbmcgZmlsZSBvcGVyYXRpb25zLCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgY29udHJvbCBpbnRlcmZhY2UgZm9yIHRoZSBaRlMgbG9vcGJhY2sgZGV2aWNlLiBTbywgdGhlIGtleSBpcyB0byB1bmRlcnN0YW5kIHdoaWNoIGZpbGUgb3BlcmF0aW9ucyBhcmUgZGVmaW5lZCB3aXRoaW4uIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBgcmVhZGAsIGB3cml0ZWAsIGBpb2N0bGAsIGBvcGVuYCwgYHJlbGVhc2VgLCBhbmQgcG90ZW50aWFsbHkgYW55IG90aGVyIHJlbGV2YW50IGZ1bmN0aW9uIHBvaW50ZXJzLiBLbm93aW5nIHRoZXNlIHdpbGwgcXVpY2tseSBjbHVlIG1lIGluIG9uIGhvdyB1c2Vyc3BhY2UgaW50ZXJhY3RzIHdpdGgsIGFuZCBjb250cm9scywgdGhpcyBaRlMgbG9vcCBkZXZpY2UgYXQgYSBsb3cgbGV2ZWwuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGJhc2ljIEkvTywgY29uZmlndXJhdGlvbiwgb3IgbW9yZSBjb21wbGV4IG1hbmFnZW1lbnQgYWN0aW9ucz8gSSYjMzk7bGwgcHJvYmFibHkgYmUgbG9va2luZyBmb3IgY2x1ZXMgcmVsYXRpbmcgdG8gdGhpbmdzIGxpa2Ugdm9sdW1lIG1hbmFnZW1lbnQsIGJsb2NrIGRldmljZSBjcmVhdGlvbiwgb3IgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBmaWxlIG9wZXJhdGlvbiBkZWZpbml0aW9ucy4gRGVwZW5kaW5nIG9uIHRoZSBzb3BoaXN0aWNhdGlvbiBvZiB0aGUgaW1wbGVtZW50YXRpb24sIHRoZXJlIG1pZ2h0IGJlIGludGVyZXN0aW5nIGxvY2svc3luY2hyb25pemF0aW9uIGNvbnN0cnVjdHMgaW52b2x2ZWQgYXMgd2VsbCB0aGF0IHdhcnJhbnQgYSBjbG9zZXIgbG9vayBvbmNlIHRoZSBmdW5jdGlvbnMgYXJlIG1hcHBlZCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzQ1Olx0c3RhdGljIGludCB6bG9vcF9jdGxfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbjE3NDY6XHR7XG4xNzQ3Olx0XHRyZXR1cm4gc2luZ2xlX3JlbGVhc2UoaW5vZGUsIGZpbGUpO1xuMTc0ODpcdH1cbjE3NDk6XHRcbjE3NTA6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6bG9vcF9jdGxfZm9wcyA9IHtcbjE3NTE6XHRcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuMTc1MjpcdFx0Lm9wZW5cdFx0PSB6bG9vcF9jdGxfb3BlbixcbjE3NTM6XHRcdC5yZWxlYXNlXHQ9IHpsb29wX2N0bF9yZWxlYXNlLFxuMTc1NDpcdFx0LndyaXRlXHRcdD0gemxvb3BfY3RsX3dyaXRlLFxuMTc1NTpcdFx0LnJlYWRcdFx0PSBzZXFfcmVhZCxcbjE3NTY6XHR9O1xuMTc1NzpcdFxuMTc1ODpcdHN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB6bG9vcF9taXNjID0ge1xuMTc1OTpcdFx0Lm1pbm9yXHRcdD0gTUlTQ19EWU5BTUlDX01JTk9SLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ5NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIFpsb29wIENvbnRyb2wgSW50ZXJmYWNlKioKCkFscmlnaHQsIHNvIHRoZSBjb250cm9sIGludGVyZmFjZSBmb3IgdGhpcyBgemxvb3BgIHRoaW5nIGlzIHNpdHRpbmcgYXQgYC9kZXYvemxvb3AtY29udHJvbGAuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgZGV2aWNlIGZpbGUgd2UmIzM5O3JlIGludGVyYWN0aW5nIHdpdGguIFdyaXRpbmcgdG8gKnRoYXQqIHBhdGgsIHRyaWdnZXJzIGEgZnVuY3Rpb24gY2FsbGVkIGB6bG9vcF9jdGxfd3JpdGVgLiAgVGhhdCYjMzk7cyB0aGUga2V5IHJpZ2h0IHRoZXJlLCB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSBoYW5kbGVzIGFueSB3cml0ZXMgdG8gdGhlIGNvbnRyb2wgZGV2aWNlLiAgTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcyB3aGF0IHRoYXQgZnVuY3Rpb24gYWN0dWFsbHkgKmRvZXMqLiBUaW1lIHRvIGRpZyBpbnRvIGB6bG9vcF9jdGxfd3JpdGVgIGFuZCBzZWUgZXhhY3RseSB3aGF0IG9wZXJhdGlvbnMgYXJlIHRha2luZyBwbGFjZSB0aGVyZS4gV2hhdCBkYXRhIGlzIGl0IGV4cGVjdGluZz8gV2hhdCBzaWRlIGVmZmVjdHMgZG9lcyBpdCBwcm9kdWNlPyBOZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3csIHVuZGVyc3RhbmQgdGhlIHdyaXRlIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6bG9vcF9jdGxfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jPTE2NTA9c3RhdGljIHN0cnVjdCB6bG9vcF9jdGxfb3Age1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNjU4LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE2NTk6c3RhdGljIHNzaXplX3Qgemxvb3BfY3RsX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZixcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNjYwLVx0XHRcdCAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xNzUwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHpsb29wX2N0bF9mb3BzID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNzUzLVx0LnJlbGVhc2VcdD0gemxvb3BfY3RsX3JlbGVhc2UsXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTc1NDpcdC53cml0ZVx0XHQ9IHpsb29wX2N0bF93cml0ZSxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNzU1LVx0LnJlYWRcdFx0PSBzZXFfcmVhZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5NzAKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAyMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBabG9vcCBJL08gUGF0aCBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIGluc3RpbmN0IHdhcyB0byBsb29rIGF0IGB6bG9vcF9jdGxfd3JpdGVgIGFzIHRoZSBlbnRyeSBwb2ludCBiZWNhdXNlIGl0JiMzOTtzIHRoZSBjb21tYW5kIHBhcnNlciBhbmQgY2FsbHMgdGhlIGFkZC9kZWxldGUgZnVuY3Rpb25zLiBIb3dldmVyLCB0aGUgcmVhbCBhY3Rpb24sIHRoZSBhY3R1YWwgcG9pbnQgd2hlcmUgb3VyIGNoYW5nZXMgYXJlIHJlZmxlY3RlZCwgc2VlbXMgdG8gYmUgaGFwcGVuaW5nIGluIGB6bG9vcF9jb21wbGV0ZV9ycWAsIHRyaWdnZXJlZCBieSB0aGUgYmxvY2sgbGF5ZXIgd2hlbiBhIHJlcXVlc3QgY29tcGxldGVzLiBUaGF0IHBvaW50cyB0byBgemxvb3BfcXVldWVfcnFgIGFzIGl0cyBsaWtlbHkgY291bnRlcnBhcnQgaW4gcXVldWluZyB0aGUgcmVxdWVzdHMgdG8gYmVnaW4gd2l0aC4KClNvLCBJIG5lZWQgdG8gZm9jdXMgb24gYm90aCBgemxvb3BfcXVldWVfcnFgIGFuZCBgemxvb3BfY29tcGxldGVfcnFgLiBTaW5jZSBgemxvb3BfY29tcGxldGVfcnFgIGlzIHN0YXRpYywgbXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGl0IG1pZ2h0IGJlIGEgcHJvYmxlbSBmb3Igc3l6a2FsbGVyLiBIb3dldmVyLCBJIHJlY2FsbCB0aGF0IHN5emthbGxlciAqY2FuKiBoYW5kbGUgc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5IGFyZW4mIzM5O3QgaW5saW5lZCwgYW5kIHNpbmNlIGl0IGlzIGFzc2lnbmVkIHRvIGB6bG9vcF9tcV9vcHMuY29tcGxldGVgLCBpdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IG5vdCBpbmxpbmVkLiBHb29kLCBvbmUgbGVzcyB3b3JyeS4KCkJ1dCBzeXprYWxsZXIgcHJlZmVycyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMsIGlkZWFsbHkuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBgemxvb3BfcXVldWVfcnFgIGlzIGFsc28gYXNzaWduZWQgdG8gYHpsb29wX21xX29wcy5xdWV1ZV9ycWAsIGl0IHNlZW1zIHRoYXQgaXMgdGhlIGNhc2UuCgpPa2F5LCBpcyB0aGVyZSAqYW55KiBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgbWlnaHQgZml0IHRoZSBiaWxsIGhlcmUsIEkgc2hvdWxkIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKiB6bG9vcF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jPTQyPXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHpsb29wX29wdF90b2tlbnMgPSB7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc0LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc1OnN0cnVjdCB6bG9vcF9vcHRpb25zIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03Ni1cdHVuc2lnbmVkIGludFx0XHRtYXNrO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYz05NT1lbnVtIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAwLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwMTplbnVtIHpsb29wX3pvbmVfZmxhZ3Mge1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMi1cdFpMT09QX1pPTkVfQ09OViA9IDAsXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwOS0gKi9cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTA6c3RydWN0IHpsb29wX3pvbmUge1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMS1cdHN0cnVjdCBsaXN0X2hlYWRcdG9wZW5fem9uZV9lbnRyeTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTIzLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyNDpzdHJ1Y3Qgemxvb3BfZGV2aWNlIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjUtXHR1bnNpZ25lZCBpbnRcdFx0aWQ7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE1NC1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNTU6c3RydWN0IHpsb29wX2NtZCB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTU2LVx0c3RydWN0IHdvcmtfc3RydWN0XHR3b3JrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDkxMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYHpsb29wLmNgIFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYHpsb29wLmNgLCBpdCYjMzk7cyBhbGwgYWJvdXQgbW9kaWZ5aW5nIGhvdyB0aGUgem9uZWQgbG9vcCBkZXZpY2Ugd29ya3MuIEZpcnN0LCBJIG5vdGljZSBpbW1lZGlhdGVseSB0aGF0IGFsbCB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBhcmUgKnN0YXRpYyouIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsIOKAkyBpdCBtZWFucyB3ZSBoYXZlIHRvIHJlc3RyaWN0IG91ciBmb2N1cyB0byB0aG9zZSBzcGVjaWZpYyBpbnRlcm5hbCBmdW5jdGlvbnMgZm9yIGZ1enppbmcuCgpJIHNlZSB0aGF0IGB6bG9vcF9jb21wbGV0ZV9ycWAgaXMgdGhlIG9uZSBiZWluZyBkaXJlY3RseSBtb2RpZmllZC4gSW50ZXJlc3RpbmcuIGB6bG9vcF9xdWV1ZV9ycWAgYXBwZWFycyB0byBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIGJsb2NrIEkvTywgYW5kIGB6bG9vcF9jdGxfd3JpdGVgIHNlZW1zIHRvIGJlIGhvdyBjb250cm9sIGNvbW1hbmRzIGFyZSBwcm9jZXNzZWQuICBHaXZlbiB0aG9zZSBlbnRyeSBwb2ludHMgYW5kIHRoZSBtb2RpZmllZCBmdW5jdGlvbiwgYHpsb29wX2NvbXBsZXRlX3JxYCwgYHpsb29wX3F1ZXVlX3JxYCwgYW5kIGB6bG9vcF9jdGxfd3JpdGVgIGFyZSB0aGUgb2J2aW91cyB0YXJnZXRzIGZvciBmdXp6aW5nLgoKQWgsIGJ1dCB0aGUgY3J1Y2lhbCBjaGFuZ2UgaGVyZSBpcyB0aGUgcmVwbGFjZW1lbnQgb2YgYHplcm9fZmlsbF9iaW8oYmlvKWAgd2l0aCBgemxvb3BfZmlsbF96ZXJvX3JxKHJxLCBjbWQtJmd0O3JldClgLiBUaGF0JiMzOTtzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSDigJMgbm90IGp1c3QgYSByZWZhY3RvcmluZy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgc3BvdCB0aGF0IHdhcnJhbnRzIGZ1enppbmcsIGxpa2VseSB0byB1bmNvdmVyIGEgc3VidGxlIGVkZ2UgY2FzZS4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkZXNlcnZlcyB0aGUgYFdvcnRoRnV6emluZz10cnVlYCBmbGFnLiAgTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYHpsb29wX2NvbXBsZXRlX3JxYCwgYHpsb29wX3F1ZXVlX3JxYCwgYW5kIGB6bG9vcF9jdGxfd3JpdGVgLgoKQW5kIGZpbmFsbHksIGxldCYjMzk7cyBtYWtlIHN1cmUgb3VyIGZ1enppbmcgY29uZmlndXJhdGlvbnMgYXJlIGNvcnJlY3QuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O2xsIG5lZWQgdG8gZW5hYmxlIGBCTEtfREVWX1pPTkVEX0xPT1BgIGFuZCwgc2luY2UgaXQgZGVwZW5kcyBvbiBpdCwgYWxzbyBgQkxLX0RFVl9aT05FRGAuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGF0IGBCTEtfREVWX1pPTkVEX0xPT1BgIGRvZXNuJiMzOTt0IGhhdmUgYW55ICpvdGhlciogZGVwZW5kZW5jaWVzLCBqdXN0IHRvIGJlIHN1cmUuLi4gTGV0JiMzOTtzIGNoZWNrIGBCTEtfREVWX1pPTkVEYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTU6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfWk9ORUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9Nzc9Y29uZmlnIEJMS19ERVZfV1JJVEVfTU9VTlRFRFxuLS1cbmJsb2NrL0tjb25maWctOTYtXG5ibG9jay9LY29uZmlnOjk3OmNvbmZpZyBCTEtfREVWX1pPTkVEXG5ibG9jay9LY29uZmlnLTk4LVx0Ym9vbCBcJiMzNDtab25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTY4NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBab25lZCBCbG9jayBEZXZpY2UgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBCTEtfREVWX1pPTkVEYC4gSSBrbm93IGl0JiMzOTtzIHJlbGF0ZWQgdG8gem9uZWQgYmxvY2sgZGV2aWNlcywgd2hpY2ggYXJlIGJlY29taW5nIGluY3JlYXNpbmdseSBpbXBvcnRhbnQuIFdoZXJlJiMzOTtzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbj8gUmlnaHQsIGl0JiMzOTtzIHR5cGljYWxseSBpbiB0aGUgYGJsb2NrL0tjb25maWdgIGZpbGUuIExldCYjMzk7cyBnbyBhaGVhZCBhbmQgb3BlbiB0aGF0IHVwLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbiBhcm91bmQgbGluZSA5NyBvZiBgYmxvY2svS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGVzZSBtb3JlIGRldmljZS1zcGVjaWZpYyBvcHRpb25zIGFyZSBncm91cGVkLCBzbyB0aGF0JiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcsIGdpdmVuIG15IGV4cGVyaWVuY2UuIEkmIzM5O20gc3VyZSBpdCYjMzk7cyBuZWFyYnksIGFuZCBJJiMzOTtsbCBzZWUgd2hhdCBvcHRpb25zIG9yIGRlcGVuZGVuY2llcyBhcmUgYXJvdW5kIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkwOlx0XHRwcml2aWxlZ2VkIHByb2Nlc3NlcyBhbmQgZ2VuZXJhbGx5IG1ha2VzIGl0IG11Y2ggaGFyZGVyIHRvIGNyYXNoXG4gIDkxOlx0XHRmaWxlc3lzdGVtIGRyaXZlcnMuIE5vdGUgaG93ZXZlciB0aGF0IHRoaXMgZG9lcyBub3QgcHJldmVudFxuICA5MjpcdFx0dW5kZXJseWluZyBkZXZpY2UocykgZnJvbSBiZWluZyBtb2RpZmllZCBieSBvdGhlciBtZWFucywgZS5nLiBieVxuICA5MzpcdFx0ZGlyZWN0bHkgc3VibWl0dGluZyBTQ1NJIGNvbW1hbmRzIG9yIHRocm91Z2ggYWNjZXNzIHRvIGxvd2VyIGxheWVycyBvZlxuICA5NDpcdFx0c3RvcmFnZSBzdGFjay4gSWYgaW4gZG91YnQsIHNheSBZLiBUaGUgY29uZmlndXJhdGlvbiBjYW4gYmUgb3ZlcnJpZGRlblxuICA5NTpcdFx0d2l0aCB0aGUgYmRldl9hbGxvd193cml0ZV9tb3VudGVkIGJvb3Qgb3B0aW9uLlxuICA5NjpcdFxuICA5NzpcdGNvbmZpZyBCTEtfREVWX1pPTkVEXG4gIDk4Olx0XHRib29sIFwmIzM0O1pvbmVkIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gIDk5Olx0XHRoZWxwXG4gMTAwOlx0XHRCbG9jayBsYXllciB6b25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydC4gVGhpcyBvcHRpb24gZW5hYmxlc1xuIDEwMTpcdFx0c3VwcG9ydCBmb3IgWkFDL1pCQy9aTlMgaG9zdC1tYW5hZ2VkIGFuZCBob3N0LWF3YXJlIHpvbmVkIGJsb2NrXG4gMTAyOlx0XHRkZXZpY2VzLlxuIDEwMzpcdFxuIDEwNDpcdFx0U2F5IHllcyBoZXJlIGlmIHlvdSBoYXZlIGEgWkFDLCBaQkMsIG9yIFpOUyBzdG9yYWdlIGRldmljZS5cbiAxMDU6XHRcbiAxMDY6XHRjb25maWcgQkxLX0RFVl9USFJPVFRMSU5HXG4gMTA3Olx0XHRib29sIFwmIzM0O0Jsb2NrIGxheWVyIGJpbyB0aHJvdHRsaW5nIHN1cHBvcnRcJiMzNDtcbiAxMDg6XHRcdGRlcGVuZHMgb24gQkxLX0NHUk9VUFxuIDEwOTpcdFx0c2VsZWN0IEJMS19DR1JPVVBfUldTVEFUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE1OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjM2CgkJCQkJCQlvdXRwdXQ6IDE4NAoJCQkJCQkJdGhvdWdodHM6IDQ3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciBab25lZCBCbG9jayBEZXZpY2UgTG9vcGJhY2sqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBgQkxLX0RFVl9aT05FRGAgaGFzIG5vIG90aGVyIGRlcGVuZGVuY2llcywgd2hpY2ggbWVhbnMgZW5hYmxpbmcganVzdCBgQkxLX0RFVl9aT05FRF9MT09QYCBhbmQgYEJMS19ERVZfWk9ORURgIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciB0ZXN0aW5nLiBMZXQmIzM5O3MgcmV2aWV3IHRoZSBwYXRjaCBhZ2Fpbiwgc3BlY2lmaWNhbGx5IHRoaXMgYHpsb29wX2ZpbGxfemVyb19ycWAgZnVuY3Rpb246CgpgYGBjCiYjNDM7c3RhdGljIHZvaWQgemxvb3BfZmlsbF96ZXJvX3JxKHN0cnVjdCByZXF1ZXN0ICpycSwgdW5zaWduZWQgaW50IHplcm9fZnJvbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByZXFfaXRlcmF0b3IgaXRlcjsKJiM0MzsJc3RydWN0IGJpb192ZWMgYnY7CiYjNDM7CXVuc2lnbmVkIGludCBwb3MgPSAwOwomIzQzOwl1bnNpZ25lZCBpbnQgZW5kLCBvZmY7CiYjNDM7CiYjNDM7CXJxX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIHJxLCBpdGVyKSB7CiYjNDM7CQllbmQgPSBwb3MgJiM0MzsgYnYuYnZfbGVuOwomIzQzOwkJaWYgKGVuZCAmZ3Q7IHplcm9fZnJvbSkgewomIzQzOwkJCW9mZiA9IDA7CiYjNDM7CQkJaWYgKHBvcyAmbHQ7IHplcm9fZnJvbSkKJiM0MzsJCQkJb2ZmID0gemVyb19mcm9tIC0gcG9zOwomIzQzOwkJCW1lbXplcm9fcGFnZShidi5idl9wYWdlLCBidi5idl9vZmZzZXQgJiM0Mzsgb2ZmLAomIzQzOwkJCQkgICAgIGJ2LmJ2X2xlbiAtIG9mZik7CiYjNDM7CQl9CiYjNDM7CQlwb3MgPSBlbmQ7CiYjNDM7CX0KJiM0Mzt9CmBgYAoKVGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGVuc3VyZSBzaG9ydCByZWFkcyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuIEl04oCZcyByZWFjaGVkIHRocm91Z2ggYmxvY2sgSS9PIG9uIHRoZSBgemxvb3BgIGRldmljZS4gVGhlIGJlYXV0eSBvZiBgemxvb3BgIGlzIHRoYXQgaXQmIzM5O3MgYSBzb2Z0d2FyZS1lbXVsYXRlZCB6b25lZCBibG9jayBkZXZpY2UuIFRoaXMgbWFrZXMgaXQgaWRlYWwgZm9yIGZ1enppbmcsIGVzcGVjaWFsbHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gQmVjYXVzZSB0aGUgY2hhbmdlIGlzIGZ1bmN0aW9uYWwsIEkgd2lsbCBzZXQgYFdvcnRoRnV6emluZz10cnVlYC4KClNwZWNpZmljYWxseSwgSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb246CgoqICAgYHpsb29wX2NvbXBsZXRlX3JxYAoqICAgYHpsb29wX3F1ZXVlX3JxYAoqICAgYHpsb29wX2N0bF93cml0ZWAKCkVuYWJsaW5nIGBCTEtfREVWX1pPTkVEX0xPT1BgIGFuZCBpdHMgZGVwZW5kZW5jeSBgQkxLX0RFVl9aT05FRGAgd2lsbCBiZSBteSBzdGFydGluZyBwb2ludC4gVGhlIG5ldyBjb2RlIGluIGB6bG9vcF9maWxsX3plcm9fcnFgIGFkZHJlc3NlcyB0aGUgcHJvYmxlbSBvZiBjb3JyZWN0bHkgemVyb2luZyBvdXQgdGhlIHVucmVhZCB0YWlsIG9mIGEgcmVxdWVzdCBiZXlvbmQgYGNtZC0mZ3Q7cmV0YCBhZnRlciBzaG9ydCByZWFkcywgcmVwbGFjaW5nIHRoZSBwb3RlbnRpYWxseSBsZXNzIHJlbGlhYmxlIGB6ZXJvX2ZpbGxfYmlvYCBhcHByb2FjaC4gR2l2ZW4gdGhhdCBgemxvb3BgIGlzIGVmZmVjdGl2ZWx5IGEgdmlydHVhbCB6b25lZCBibG9jayBkZXZpY2UgYW5kIGZ1bGx5IGFjY2Vzc2libGUgdmlhIHNvZnR3YXJlLCBmdXp6aW5nIG9mZmVycyBhIGNsZWFyIHBhdGggdG8gZGlzY292ZXIgYW55IHBvdGVudGlhbCBpc3N1ZXMgaW4gdGhlc2UgY3JpdGljYWwgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9aT05FRF9MT09QJiMzNDssCiAgICAmIzM0O0JMS19ERVZfWk9ORUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6bG9vcF9jb21wbGV0ZV9ycSYjMzQ7LAogICAgJiMzNDt6bG9vcF9xdWV1ZV9ycSYjMzQ7LAogICAgJiMzNDt6bG9vcF9jdGxfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGB6bG9vcF9jb21wbGV0ZV9ycWAgdG8gY29ycmVjdGx5IHplcm8gb3V0IHRoZSB1bnJlYWQgdGFpbCBvZiBhIHJlcXVlc3QgYmV5b25kIGBjbWQtXHUwMDNlcmV0YCBmb3Igc2hvcnQgcmVhZHMsIHJlcGxhY2luZyB0aGUgcHJldmlvdXMgYHplcm9fZmlsbF9iaW9gIGFwcHJvYWNoLiBUaGUgYHpsb29wYCBkcml2ZXIgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCB6b25lZCBibG9jayBkZXZpY2UgdGhhdCBjYW4gYmUgZnVsbHkgZXhlcmNpc2VkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIEZ1enppbmcgdGhpcyByZXF1aXJlcyBlbmFibGluZyBgQkxLX0RFVl9aT05FRF9MT09QYCBhbmQgaXRzIGRlcGVuZGVuY3kgYEJMS19ERVZfWk9ORURgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX1pPTkVEX0xPT1AmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9aT05FRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3psb29wX2NvbXBsZXRlX3JxJiMzNDssCiAgICAmIzM0O3psb29wX3F1ZXVlX3JxJiMzNDssCiAgICAmIzM0O3psb29wX2N0bF93cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYHpsb29wX2NvbXBsZXRlX3JxYCB0byBjb3JyZWN0bHkgemVybyBvdXQgdGhlIHVucmVhZCB0YWlsIG9mIGEgcmVxdWVzdCBiZXlvbmQgYGNtZC1cdTAwM2VyZXRgIGZvciBzaG9ydCByZWFkcywgcmVwbGFjaW5nIHRoZSBwcmV2aW91cyBgemVyb19maWxsX2Jpb2AgYXBwcm9hY2guIFRoZSBgemxvb3BgIGRyaXZlciBpcyBhIHNvZnR3YXJlLWVtdWxhdGVkIHpvbmVkIGJsb2NrIGRldmljZSB0aGF0IGNhbiBiZSBmdWxseSBleGVyY2lzZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gRnV6emluZyB0aGlzIHJlcXVpcmVzIGVuYWJsaW5nIGBCTEtfREVWX1pPTkVEX0xPT1BgIGFuZCBpdHMgZGVwZW5kZW5jeSBgQkxLX0RFVl9aT05FRGAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNToxMTowOC45ODIxOTQzNjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTEwMDI3MzIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1pPTkVEX0xPT1BcIixcbiAgICBcIkJMS19ERVZfWk9ORURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6bG9vcF9jb21wbGV0ZV9ycVwiLFxuICAgIFwiemxvb3BfcXVldWVfcnFcIixcbiAgICBcInpsb29wX2N0bF93cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBgemxvb3BfY29tcGxldGVfcnFgIHRvIGNvcnJlY3RseSB6ZXJvIG91dCB0aGUgdW5yZWFkIHRhaWwgb2YgYSByZXF1ZXN0IGJleW9uZCBgY21kLVxcdTAwM2VyZXRgIGZvciBzaG9ydCByZWFkcywgcmVwbGFjaW5nIHRoZSBwcmV2aW91cyBgemVyb19maWxsX2Jpb2AgYXBwcm9hY2guIFRoZSBgemxvb3BgIGRyaXZlciBpcyBhIHNvZnR3YXJlLWVtdWxhdGVkIHpvbmVkIGJsb2NrIGRldmljZSB0aGF0IGNhbiBiZSBmdWxseSBleGVyY2lzZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gRnV6emluZyB0aGlzIHJlcXVpcmVzIGVuYWJsaW5nIGBCTEtfREVWX1pPTkVEX0xPT1BgIGFuZCBpdHMgZGVwZW5kZW5jeSBgQkxLX0RFVl9aT05FRGAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE1OjExOjA4Ljk4MjIwMTI4NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA3MjUzNzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjY4MDk1ZjJlNTFlYWE4NmVjZWQ2NzVhZTk0YWZmYzgyNjFiN2Q5ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAzMSAxNToxMTowOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3psb29wLmMgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmNcXG5pbmRleCA1NWVlYjZhYWMwZWEzLi40Mjk2N2U3YWVhNThhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svemxvb3AuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xcbkBAIC03OTgsNiArNzk4LDI2IEBAIHN0YXRpYyB2b2lkIHpsb29wX2NtZF93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRjdXJyZW50LVxcdTAwM2VmbGFncyA9IG9yaWdfZmxhZ3M7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHpsb29wX2ZpbGxfemVyb19ycShzdHJ1Y3QgcmVxdWVzdCAqcnEsIHVuc2lnbmVkIGludCB6ZXJvX2Zyb20pXFxuK3tcXG4rXFx0c3RydWN0IHJlcV9pdGVyYXRvciBpdGVyO1xcbitcXHRzdHJ1Y3QgYmlvX3ZlYyBidjtcXG4rXFx0dW5zaWduZWQgaW50IHBvcyA9IDA7XFxuK1xcdHVuc2lnbmVkIGludCBlbmQsIG9mZjtcXG4rXFxuK1xcdHJxX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIHJxLCBpdGVyKSB7XFxuK1xcdFxcdGVuZCA9IHBvcyArIGJ2LmJ2X2xlbjtcXG4rXFx0XFx0aWYgKGVuZCBcXHUwMDNlIHplcm9fZnJvbSkge1xcbitcXHRcXHRcXHRvZmYgPSAwO1xcbitcXHRcXHRcXHRpZiAocG9zIFxcdTAwM2MgemVyb19mcm9tKVxcbitcXHRcXHRcXHRcXHRvZmYgPSB6ZXJvX2Zyb20gLSBwb3M7XFxuK1xcdFxcdFxcdG1lbXplcm9fcGFnZShidi5idl9wYWdlLCBidi5idl9vZmZzZXQgKyBvZmYsXFxuK1xcdFxcdFxcdFxcdCAgICAgYnYuYnZfbGVuIC0gb2ZmKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRwb3MgPSBlbmQ7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgemxvb3BfY29tcGxldGVfcnEoc3RydWN0IHJlcXVlc3QgKnJxKVxcbiB7XFxuIFxcdHN0cnVjdCB6bG9vcF9jbWQgKmNtZCA9IGJsa19tcV9ycV90b19wZHUocnEpO1xcbkBAIC04MTIsMTMgKzgzMiw5IEBAIHN0YXRpYyB2b2lkIHpsb29wX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcXG4gXFx0XFx0XFx0cHJfZXJyKFxcXCJab25lICV1OiBmYWlsZWQgcmVhZCBzZWN0b3IgJWxsdSwgJWxsdSBzZWN0b3JzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICAgICAgem9uZV9ubywgY21kLVxcdTAwM2VzZWN0b3IsIGNtZC1cXHUwMDNlbnJfc2VjdG9ycyk7XFxuIFxcbi1cXHRcXHRpZiAoY21kLVxcdTAwM2VyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBjbWQtXFx1MDAzZXJldCAhPSBibGtfcnFfYnl0ZXMocnEpKSB7XFxuLVxcdFxcdFxcdC8qIHNob3J0IHJlYWQgKi9cXG4tXFx0XFx0XFx0c3RydWN0IGJpbyAqYmlvO1xcbi1cXG4tXFx0XFx0XFx0X19ycV9mb3JfZWFjaF9iaW8oYmlvLCBycSlcXG4tXFx0XFx0XFx0XFx0emVyb19maWxsX2JpbyhiaW8pO1xcbi1cXHRcXHR9XFxuK1xcdFxcdC8qIFNob3J0IHJlYWQuIFplcm8gb3V0IHRoZSB1bnJlYWQgdGFpbCBiZXlvbmQgY21kLVxcdTAwM2VyZXQuICovXFxuK1xcdFxcdGlmIChjbWQtXFx1MDAzZXJldCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IGNtZC1cXHUwMDNlcmV0ICE9IGJsa19ycV9ieXRlcyhycSkpXFxuK1xcdFxcdFxcdHpsb29wX2ZpbGxfemVyb19ycShycSwgY21kLVxcdTAwM2VyZXQpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBSRVFfT1BfV1JJVEU6XFxuIFxcdGNhc2UgUkVRX09QX1pPTkVfQVBQRU5EOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNToxMTowOS4zOTAxNTY1OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjgwNjkyMzAyOTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfWk9ORURfTE9PUFwiLFxuICAgIFwiQkxLX0RFVl9aT05FRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpsb29wX2NvbXBsZXRlX3JxXCIsXG4gICAgXCJ6bG9vcF9xdWV1ZV9ycVwiLFxuICAgIFwiemxvb3BfY3RsX3dyaXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGB6bG9vcF9jb21wbGV0ZV9ycWAgdG8gY29ycmVjdGx5IHplcm8gb3V0IHRoZSB1bnJlYWQgdGFpbCBvZiBhIHJlcXVlc3QgYmV5b25kIGBjbWQtXFx1MDAzZXJldGAgZm9yIHNob3J0IHJlYWRzLCByZXBsYWNpbmcgdGhlIHByZXZpb3VzIGB6ZXJvX2ZpbGxfYmlvYCBhcHByb2FjaC4gVGhlIGB6bG9vcGAgZHJpdmVyIGlzIGEgc29mdHdhcmUtZW11bGF0ZWQgem9uZWQgYmxvY2sgZGV2aWNlIHRoYXQgY2FuIGJlIGZ1bGx5IGV4ZXJjaXNlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBGdXp6aW5nIHRoaXMgcmVxdWlyZXMgZW5hYmxpbmcgYEJMS19ERVZfWk9ORURfTE9PUGAgYW5kIGl0cyBkZXBlbmRlbmN5IGBCTEtfREVWX1pPTkVEYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjY4MDk1ZjJlNTFlYWE4NmVjZWQ2NzVhZTk0YWZmYzgyNjFiN2Q5ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDE1OjExOjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96bG9vcC5jIGIvZHJpdmVycy9ibG9jay96bG9vcC5jXG5pbmRleCA1NWVlYjZhYWMwZWEzLi40Mjk2N2U3YWVhNThhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96bG9vcC5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmNcbkBAIC03OTgsNiArNzk4LDI2IEBAIHN0YXRpYyB2b2lkIHpsb29wX2NtZF93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0Y3VycmVudC1cdTAwM2VmbGFncyA9IG9yaWdfZmxhZ3M7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHpsb29wX2ZpbGxfemVyb19ycShzdHJ1Y3QgcmVxdWVzdCAqcnEsIHVuc2lnbmVkIGludCB6ZXJvX2Zyb20pXG4re1xuK1x0c3RydWN0IHJlcV9pdGVyYXRvciBpdGVyO1xuK1x0c3RydWN0IGJpb192ZWMgYnY7XG4rXHR1bnNpZ25lZCBpbnQgcG9zID0gMDtcbitcdHVuc2lnbmVkIGludCBlbmQsIG9mZjtcbitcbitcdHJxX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIHJxLCBpdGVyKSB7XG4rXHRcdGVuZCA9IHBvcyArIGJ2LmJ2X2xlbjtcbitcdFx0aWYgKGVuZCBcdTAwM2UgemVyb19mcm9tKSB7XG4rXHRcdFx0b2ZmID0gMDtcbitcdFx0XHRpZiAocG9zIFx1MDAzYyB6ZXJvX2Zyb20pXG4rXHRcdFx0XHRvZmYgPSB6ZXJvX2Zyb20gLSBwb3M7XG4rXHRcdFx0bWVtemVyb19wYWdlKGJ2LmJ2X3BhZ2UsIGJ2LmJ2X29mZnNldCArIG9mZixcbitcdFx0XHRcdCAgICAgYnYuYnZfbGVuIC0gb2ZmKTtcbitcdFx0fVxuK1x0XHRwb3MgPSBlbmQ7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHpsb29wX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcbiB7XG4gXHRzdHJ1Y3Qgemxvb3BfY21kICpjbWQgPSBibGtfbXFfcnFfdG9fcGR1KHJxKTtcbkBAIC04MTIsMTMgKzgzMiw5IEBAIHN0YXRpYyB2b2lkIHpsb29wX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcbiBcdFx0XHRwcl9lcnIoXCJab25lICV1OiBmYWlsZWQgcmVhZCBzZWN0b3IgJWxsdSwgJWxsdSBzZWN0b3JzXFxuXCIsXG4gXHRcdFx0ICAgICAgIHpvbmVfbm8sIGNtZC1cdTAwM2VzZWN0b3IsIGNtZC1cdTAwM2Vucl9zZWN0b3JzKTtcbiBcbi1cdFx0aWYgKGNtZC1cdTAwM2VyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBjbWQtXHUwMDNlcmV0ICE9IGJsa19ycV9ieXRlcyhycSkpIHtcbi1cdFx0XHQvKiBzaG9ydCByZWFkICovXG4tXHRcdFx0c3RydWN0IGJpbyAqYmlvO1xuLVxuLVx0XHRcdF9fcnFfZm9yX2VhY2hfYmlvKGJpbywgcnEpXG4tXHRcdFx0XHR6ZXJvX2ZpbGxfYmlvKGJpbyk7XG4tXHRcdH1cbitcdFx0LyogU2hvcnQgcmVhZC4gWmVybyBvdXQgdGhlIHVucmVhZCB0YWlsIGJleW9uZCBjbWQtXHUwMDNlcmV0LiAqL1xuK1x0XHRpZiAoY21kLVx1MDAzZXJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGNtZC1cdTAwM2VyZXQgIT0gYmxrX3JxX2J5dGVzKHJxKSlcbitcdFx0XHR6bG9vcF9maWxsX3plcm9fcnEocnEsIGNtZC1cdTAwM2VyZXQpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgUkVRX09QX1dSSVRFOlxuIFx0Y2FzZSBSRVFfT1BfWk9ORV9BUFBFTkQ6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNToxMTowOS4zOTAxNTgyNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzYyOTc4OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgYSBabG9vcCBCbG9jayBEcml2ZXIgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyBjbGVhcmx5IGZvY3VzZWQgb24gb3B0aW1pemluZyB6ZXJvLWZpbGxpbmcgaW4gdGhlIGB6bG9vcGAgYmxvY2sgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBgZHJpdmVycy9ibG9jay96bG9vcC5jYC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24sIGB6bG9vcF9maWxsX3plcm9fcnFgLCBhbmQgbW9kaWZpZXMgdGhlIGV4aXN0aW5nIGB6bG9vcF9jb21wbGV0ZV9ycWAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGFwcGVhcnMgdG8gaW52b2x2ZSByZXBsYWNpbmcgdGhlIG1vcmUgZ2VuZXJpYyBgemVyb19maWxsX2JpbyhiaW8pYCBjYWxsIHdpdGggYSBtb3JlIHRhcmdldGVkIGB6bG9vcF9maWxsX3plcm9fcnEocnEsIGNtZC1cdTAwM2VyZXQpYCB3aGVuIGRlYWxpbmcgd2l0aCBzaG9ydCByZWFkcy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBsaWtlbHkgaW1wcm92ZXMgdGhlIGVmZmljaWVuY3kgb2YgaGFuZGxpbmcgemVyby1maWxsZWQgYmxvY2tzIHdpdGhpbiB0aGUgYHpsb29wYCBkcml2ZXIuIFRoaXMgY291bGQgbWVhbiBhIHBlcmZvcm1hbmNlIGJvb3N0IGZvciBvcGVyYXRpb25zIHRoYXQgYXJlIGNvbW1vbmx5IHplcm8tZmlsbGVkLCBwZXJoYXBzIGR1cmluZyBjcmVhdGlvbiBvciBkYXRhIHNjcnViYmluZy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSBvZiBgZHJpdmVycy9ibG9jay96bG9vcC5jYCBpdHNlbGYgbm93IHRvIHVuZGVyc3RhbmQgdGhlIHByZWNpc2UgY29udGV4dCBhbmQgd2hhdCBjb25kaXRpb25zLCBsaWtlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYWN0dWFsbHkgZW5hYmxlIHRoaXMgb3B0aW1pemF0aW9uLiBUaGlzIGlzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBwYXRjaCdzIGltcGFjdCBhbmQgaXRzIHJlbGV2YW5jZSB0byB0aGUgb3ZlcmFsbCBzeXN0ZW0gY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzNiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTU6MTE6MTMuOTI2NDU4NzkyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MTIxMTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsb29wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWc9MzU2PWNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNjctXFx0ICBlY2hvIFxcXCJhZGQgaWQ9MCx6b25lX3NpemVfbWI9MjU2LGNhcGFjaXR5X21iPTE2Mzg0LGNvbnZfem9uZXM9MTFcXFwiIFxcdTAwM2UgXFxcXFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzozNjg6XFx0XFx0L2Rldi96bG9vcC1jb250cm9sXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM2OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTU6MTE6MTMuOTcwNTg1NjZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzcwMjkyNjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWm9uZWQgTG9vcGJhY2sgQmxvY2sgRGV2aWNlIERyaXZlcioqXG5cbk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIEknbSBsb29raW5nIGF0IHBvaW50cyB0byBgQkxLX0RFVl9aT05FRF9MT09QYC4gIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogaXMgYHpsb29wX2NvbXBsZXRlX3JxYCBhY3R1YWxseSByZWFjaGFibGU/IFJpZ2h0LCBpdOKAmXMgYSBibG9jayBkcml2ZXIsIHNvIHllcywgaXQgKnNob3VsZCogYmUuIEFoLCB3YWl0IGEgbWludXRlLCBgemxvb3BfY29tcGxldGVfcnFgIGlzIGNhbGxlZCB3aGVuIGEgcmVxdWVzdCBjb21wbGV0ZXMsIHNvIHRoYXQgbWFrZXMgc2Vuc2UuIFRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgYHpsb29wYCwgd2hpY2gsIGlmIG1lbW9yeSBzZXJ2ZXMsIGlzIHRoYXQgem9uZWQgbG9vcGJhY2sgZGV2aWNlLiBOb3csIGlzIGB6bG9vcGAgYSByZWFsIGRyaXZlciBvciBvbmUgb2YgdGhvc2UgdGVzdCBkcml2ZXJzPyBJIHRoaW5rIEkgY2FuIGdldCBhIGJldHRlciBwaWN0dXJlIGhlcmU6IGxldCBtZSBjaGVjay4uLiBZZXAuIEZyb20gdGhhdCBjb21tYW5kLCBpdCBpczogIGBlY2hvIFwiYWRkIGlkPTAsem9uZV9zaXplX21iPTI1NixjYXBhY2l0eV9tYj0xNjM4NCxjb252X3pvbmVzPTExXCIgXHUwMDNlIC9kZXYvemxvb3AtY29udHJvbGAuIEkgcmVtZW1iZXIgc2VlaW5nIHRoaXMgYSB3aGlsZSBiYWNrLiBJdCdzIGEgc29mdHdhcmUtZW11bGF0ZWQsIHpvbmVkIGJsb2NrIGRldmljZSwgcGVyZmVjdCBmb3IgdGVzdGluZy4gRXhjZWxsZW50LiBJdCdzIGFsc28gZnV6emFibGUgYnkgc3l6a2FsbGVyLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLCBzdGFydGluZyB3aXRoIGB6bG9vcF9jb21wbGV0ZV9ycWAgYW5kIGB6bG9vcF9maWxsX3plcm9fcnFgLiBIbW0sIGB6bG9vcF9maWxsX3plcm9fcnFgIGlzIG1hcmtlZCBhcyBzdGF0aWMuIGB6bG9vcF9jb21wbGV0ZV9ycWAgaXMgYWxzbyBzdGF0aWMuIFJpZ2h0LiBOZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIGB6bG9vcGAgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTI3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE1OjExOjE5LjM0MDg4MTEzM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY4MjcwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bG9vcF9jb21wbGV0ZV9ycVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jPTgwMT1zdGF0aWMgdm9pZCB6bG9vcF9maWxsX3plcm9fcnEoc3RydWN0IHJlcXVlc3QgKnJxLCB1bnNpZ25lZCBpbnQgemVyb19mcm9tKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTgyMC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODIxOnN0YXRpYyB2b2lkIHpsb29wX2NvbXBsZXRlX3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODIyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz05MzE9c3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIHpsb29wX21xX29wcyA9IHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTMyLVxcdC5xdWV1ZV9ycSAgICAgICA9IHpsb29wX3F1ZXVlX3JxLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5MzM6XFx0LmNvbXBsZXRlXFx0PSB6bG9vcF9jb21wbGV0ZV9ycSxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTM0LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE1OjExOjE5LjM4NzU3MDA2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY3NDM1OTA2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFpGUyBSZXF1ZXN0IFF1ZXVlKipcblxuT2theSwgc28gYHpsb29wX3F1ZXVlX3JxYCBpcyB0aGUgY29yZSBmdW5jdGlvbiBmb3IgYWN0dWFsbHkgZ2V0dGluZyByZXF1ZXN0cyBpbnRvIHRoZSBzeXN0ZW0uIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEJ1dCBJIG5lZWQgbW9yZSBjb250ZXh0LCBhIGJpZ2dlciBwaWN0dXJlLiBXaGVyZSBkb2VzIHRoaXMgZml0IGluIHRoZSBvdmVyYWxsIGZsb3c/IEkgc2hvdWxkIHJlYWxseSBnZXQgYSBmZWVsIGZvciBob3cgZXZlcnl0aGluZyBpcyBvcmdhbml6ZWQgaW4gYHpsb29wLmNgLiBMZXQncyBzZWUgd2hhdCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgaGFuZ2luZyBvdXQgaW4gdGhlcmUuIFVuZGVyc3RhbmRpbmcgdGhlIG5laWdoYm9ycyBvZiBgemxvb3BfcXVldWVfcnFgIGlzIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcxMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE1OjExOjIyLjA2MTkzMjE2MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzU5OTIzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bG9vcF9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjU5IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MjU9ZW51bSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDEtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjQyOnN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHpsb29wX29wdF90b2tlbnMgPSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQzLVxcdHsgWkxPT1BfT1BUX0lELFxcdFxcdFxcdFxcXCJpZD0lZFxcXCJcXHR9LFxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc0LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3NTpzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc2LVxcdHVuc2lnbmVkIGludFxcdFxcdG1hc2s7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9OTU9ZW51bSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAwLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDE6ZW51bSB6bG9vcF96b25lX2ZsYWdzIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAyLVxcdFpMT09QX1pPTkVfQ09OViA9IDAsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTA5LSAqL1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTA6c3RydWN0IHpsb29wX3pvbmUge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTEtXFx0c3RydWN0IGxpc3RfaGVhZFxcdG9wZW5fem9uZV9lbnRyeTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjMtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyNDpzdHJ1Y3Qgemxvb3BfZGV2aWNlIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI1LVxcdHVuc2lnbmVkIGludFxcdFxcdGlkO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE1MS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTUyOlxcdHN0cnVjdCB6bG9vcF96b25lXFx0em9uZXNbXSBfX2NvdW50ZWRfYnkobnJfem9uZXMpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNTMtfTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTU0LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNTU6c3RydWN0IHpsb29wX2NtZCB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE1Ni1cXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHR3b3JrO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE2NC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTY1OnN0YXRpYyBERUZJTkVfSURSKHpsb29wX2luZGV4X2lkcik7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE2NjpzdGF0aWMgREVGSU5FX01VVEVYKHpsb29wX2N0bF9tdXRleCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE2Ny1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MTY4PXN0YXRpYyB1bnNpZ25lZCBpbnQgcnFfem9uZV9ubyhzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE2OS17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE3MDpcXHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBycS1cXHUwMDNlcS1cXHUwMDNlcXVldWVkYXRhO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNzEtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTgwLSAqL1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxODE6c3RhdGljIGlubGluZSB2b2lkIHpsb29wX2xydV9yb3RhdGVfb3Blbl96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTgyOlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB6bG9vcF96b25lICp6b25lKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xODMte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE5MS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTkyOnN0YXRpYyBpbmxpbmUgdm9pZCB6bG9vcF9scnVfcmVtb3ZlX29wZW5fem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE5MzpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSlcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTk0LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yMDMtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjIwNDpzdGF0aWMgaW5saW5lIGJvb2wgemxvb3BfY2FuX29wZW5fem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8pXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTIwNS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjEzLSAqL1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyMTQ6c3RhdGljIGJvb2wgemxvb3BfY2xvc2VfaW1wX29wZW5fem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8pXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTIxNS17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjIxNjpcXHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjE3LVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTIxOS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MjIwOlxcdGlmICh6bG9vcF9jYW5fb3Blbl96b25lKHpsbykpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTIyMS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yMzQtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjIzNTpzdGF0aWMgYm9vbCB6bG9vcF9vcGVuX2Nsb3NlZF9vcl9lbXB0eV96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MjM2OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjM3LVxcdFxcdFxcdFxcdFxcdCAgICBib29sIGV4cGxpY2l0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI0NS1cXHRcXHQgKi9cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MjQ2OlxcdFxcdGlmICghemxvb3BfY2FuX29wZW5fem9uZSh6bG8pKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yNDctXFx0XFx0XFx0Z290byBmYWlsO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI1My1cXHRcXHQgKi9cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MjU0OlxcdFxcdGlmICghemxvb3BfY2xvc2VfaW1wX29wZW5fem9uZSh6bG8pKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yNTUtXFx0XFx0XFx0Z290byBmYWlsO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI3Mi1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MjczOnN0YXRpYyBib29sIHpsb29wX2RvX29wZW5fem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjI3NDpcXHRcXHRcXHQgICAgICAgc3RydWN0IHpsb29wX3pvbmUgKnpvbmUsIGJvb2wgZXhwbGljaXQpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI3NS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjgwLVxcdFxcdFxcdHpvbmUtXFx1MDAzZWNvbmQgPSBCTEtfWk9ORV9DT05EX0VYUF9PUEVOO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyODE6XFx0XFx0emxvb3BfbHJ1X3JvdGF0ZV9vcGVuX3pvbmUoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMjgyLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI4NC1cXHRjYXNlIEJMS19aT05FX0NPTkRfQ0xPU0VEOlxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoyODU6XFx0XFx0cmV0dXJuIHpsb29wX29wZW5fY2xvc2VkX29yX2VtcHR5X3pvbmUoemxvLCB6b25lLCBleHBsaWNpdCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI4Ni1cXHRkZWZhdWx0Olxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI5MC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MjkxOnN0YXRpYyB2b2lkIHpsb29wX21hcmtfZnVsbChzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHN0cnVjdCB6bG9vcF96b25lICp6b25lKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0yOTIte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI5NC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Mjk1OlxcdHpsb29wX2xydV9yZW1vdmVfb3Blbl96b25lKHpsbywgem9uZSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI5Ni1cXHR6b25lLVxcdTAwM2Vjb25kID0gQkxLX1pPTkVfQ09ORF9GVUxMO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTI5OS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzAwOnN0YXRpYyB2b2lkIHpsb29wX21hcmtfZW1wdHkoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCBzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSlcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzAxLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zMDMtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjMwNDpcXHR6bG9vcF9scnVfcmVtb3ZlX29wZW5fem9uZSh6bG8sIHpvbmUpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zMDUtXFx0em9uZS1cXHUwMDNlY29uZCA9IEJMS19aT05FX0NPTkRfRU1QVFk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzA4LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozMDk6c3RhdGljIGludCB6bG9vcF91cGRhdGVfc2VxX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzEwLXtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzExOlxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXFx1MDAyNnpsby1cXHUwMDNlem9uZXNbem9uZV9ub107XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTMxMi1cXHRzdHJ1Y3Qga3N0YXQgc3RhdDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNDAtXFx0aWYgKCFmaWxlX3NlY3RvcnMpIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzQxOlxcdFxcdHpsb29wX21hcmtfZW1wdHkoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzQyLVxcdH0gZWxzZSBpZiAoZmlsZV9zZWN0b3JzID09IHpsby1cXHUwMDNlem9uZV9jYXBhY2l0eSkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozNDM6XFx0XFx0emxvb3BfbWFya19mdWxsKHpsbywgem9uZSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM0NC1cXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM1NC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzU1OnN0YXRpYyBpbnQgemxvb3Bfb3Blbl96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM1Ni17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjM1NzpcXHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSA9IFxcdTAwMjZ6bG8tXFx1MDAzZXpvbmVzW3pvbmVfbm9dO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNTgtXFx0aW50IHJldCA9IDA7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzY1LVxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoWkxPT1BfWk9ORV9TRVFfRVJST1IsIFxcdTAwMjZ6b25lLVxcdTAwM2VmbGFncykpIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzY2OlxcdFxcdHJldCA9IHpsb29wX3VwZGF0ZV9zZXFfem9uZSh6bG8sIHpvbmVfbm8pO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNjctXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNzAtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjM3MTpcXHRpZiAoIXpsb29wX2RvX29wZW5fem9uZSh6bG8sIHpvbmUsIHRydWUpKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNzItXFx0XFx0cmV0ID0gLUVJTztcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNzktXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjM4MDpzdGF0aWMgaW50IHpsb29wX2Nsb3NlX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzgxLXtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzgyOlxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXFx1MDAyNnpsby1cXHUwMDNlem9uZXNbem9uZV9ub107XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM4My1cXHRpbnQgcmV0ID0gMDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zOTAtXFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChaTE9PUF9aT05FX1NFUV9FUlJPUiwgXFx1MDAyNnpvbmUtXFx1MDAzZWZsYWdzKSkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozOTE6XFx0XFx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM5Mi1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQwMS1cXHRcXHRzcGluX2xvY2soXFx1MDAyNnpvbmUtXFx1MDAzZXdwX2xvY2spO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo0MDI6XFx0XFx0emxvb3BfbHJ1X3JlbW92ZV9vcGVuX3pvbmUoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDAzLVxcdFxcdGlmICh6b25lLVxcdTAwM2V3cCA9PSB6b25lLVxcdTAwM2VzdGFydClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00MjEtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjQyMjpzdGF0aWMgaW50IHpsb29wX3Jlc2V0X3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDIzLXtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NDI0OlxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXFx1MDAyNnpsby1cXHUwMDNlem9uZXNbem9uZV9ub107XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQyNS1cXHRpbnQgcmV0ID0gMDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00NDItXFx0c3Bpbl9sb2NrKFxcdTAwMjZ6b25lLVxcdTAwM2V3cF9sb2NrKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NDQzOlxcdHpsb29wX21hcmtfZW1wdHkoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDQ0LVxcdGNsZWFyX2JpdChaTE9PUF9aT05FX1NFUV9FUlJPUiwgXFx1MDAyNnpvbmUtXFx1MDAzZWZsYWdzKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00NTItXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjQ1MzpzdGF0aWMgaW50IHpsb29wX3Jlc2V0X2FsbF96b25lcyhzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8pXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ1NC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDU4LVxcdGZvciAoaSA9IHpsby1cXHUwMDNlbnJfY29udl96b25lczsgaSBcXHUwMDNjIHpsby1cXHUwMDNlbnJfem9uZXM7IGkrKykge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo0NTk6XFx0XFx0cmV0ID0gemxvb3BfcmVzZXRfem9uZSh6bG8sIGkpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00NjAtXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00NjYtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjQ2NzpzdGF0aWMgaW50IHpsb29wX2ZpbmlzaF96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTQ2OC17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjQ2OTpcXHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSA9IFxcdTAwMjZ6bG8tXFx1MDAzZXpvbmVzW3pvbmVfbm9dO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00NzAtXFx0aW50IHJldCA9IDA7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDg3LVxcdHNwaW5fbG9jayhcXHUwMDI2em9uZS1cXHUwMDNld3BfbG9jayk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjQ4ODpcXHR6bG9vcF9tYXJrX2Z1bGwoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDg5LVxcdGNsZWFyX2JpdChaTE9PUF9aT05FX1NFUV9FUlJPUiwgXFx1MDAyNnpvbmUtXFx1MDAzZWZsYWdzKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy00OTctXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjQ5ODpzdGF0aWMgdm9pZCB6bG9vcF9wdXRfY21kKHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNDk5LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MDktXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjUxMDpzdGF0aWMgdm9pZCB6bG9vcF9yd19jb21wbGV0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGxvbmcgcmV0KVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MTEte1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1MTI6XFx0c3RydWN0IHpsb29wX2NtZCAqY21kID0gY29udGFpbmVyX29mKGlvY2IsIHN0cnVjdCB6bG9vcF9jbWQsIGlvY2IpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MTMtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTUxNC1cXHRjbWQtXFx1MDAzZXJldCA9IHJldDtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTE1OlxcdHpsb29wX3B1dF9jbWQoY21kKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTE2LX1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTE3LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1MTg6c3RhdGljIGludCB6bG9vcF9kb19ydyhzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTUxOS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTIyLVxcdHVuc2lnbmVkIGludCBucl9idmVjID0gYmxrX3JxX25yX2J2ZWMocnEpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1MjM6XFx0c3RydWN0IHpsb29wX2RldmljZSAqemxvID0gcnEtXFx1MDAzZXEtXFx1MDAzZXF1ZXVlZGF0YTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTI0OlxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXFx1MDAyNnpsby1cXHUwMDNlem9uZXNbcnFfem9uZV9ubyhycSldO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01MjUtXFx0c3RydWN0IHJlcV9pdGVyYXRvciBycV9pdGVyO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTU2MC1cXHRjbWQtXFx1MDAzZWlvY2Iua2lfZmlscCA9IHpvbmUtXFx1MDAzZWZpbGU7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjU2MTpcXHRjbWQtXFx1MDAzZWlvY2Iua2lfY29tcGxldGUgPSB6bG9vcF9yd19jb21wbGV0ZTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTYyLVxcdGlmICghemxvLVxcdTAwM2VidWZmZXJlZF9pbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01NzAtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjU3MTpzdGF0aWMgaW50IHpsb29wX3NlcV93cml0ZV9wcmVwKHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTcyLXtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTczLVxcdHN0cnVjdCByZXF1ZXN0ICpycSA9IGJsa19tcV9ycV9mcm9tX3BkdShjbWQpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1NzQ6XFx0c3RydWN0IHpsb29wX2RldmljZSAqemxvID0gcnEtXFx1MDAzZXEtXFx1MDAzZXF1ZXVlZGF0YTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTc1LVxcdHVuc2lnbmVkIGludCB6b25lX25vID0gcnFfem9uZV9ubyhycSk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTc3LVxcdGJvb2wgaXNfYXBwZW5kID0gcmVxX29wKHJxKSA9PSBSRVFfT1BfWk9ORV9BUFBFTkQ7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjU3ODpcXHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSA9IFxcdTAwMjZ6bG8tXFx1MDAzZXpvbmVzW3pvbmVfbm9dO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01NzktXFx0c2VjdG9yX3Qgem9uZV9lbmQgPSB6b25lLVxcdTAwM2VzdGFydCArIHpsby1cXHUwMDNlem9uZV9jYXBhY2l0eTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01OTEtXFx0XFx0ICogSWYgb3JkZXJlZCB6b25lIGFwcGVuZCBpcyBpbiB1c2UsIHdlIGFscmVhZHkgY2hlY2tlZCBhbmQgc2V0XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjU5MjpcXHRcXHQgKiB0aGUgdGFyZ2V0IHNlY3RvciBpbiB6bG9vcF9xdWV1ZV9ycSgpLlxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01OTMtXFx0XFx0ICovXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjExLVxcdC8qIEltcGxpY2l0bHkgb3BlbiB0aGUgdGFyZ2V0IHpvbmUuICovXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjYxMjpcXHRpZiAoIXpsb29wX2RvX29wZW5fem9uZSh6bG8sIHpvbmUsIGZhbHNlKSkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MTMtXFx0XFx0cmV0ID0gLUVJTztcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MjQtXFx0XFx0aWYgKHpvbmUtXFx1MDAzZXdwID09IHpvbmVfZW5kKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2MjU6XFx0XFx0XFx0emxvb3BfbWFya19mdWxsKHpsbywgem9uZSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTYyNi1cXHR9XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjMxLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2MzI6c3RhdGljIHZvaWQgemxvb3Bfcncoc3RydWN0IHpsb29wX2NtZCAqY21kKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MzMte1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MzQtXFx0c3RydWN0IHJlcXVlc3QgKnJxID0gYmxrX21xX3JxX2Zyb21fcGR1KGNtZCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjYzNTpcXHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBycS1cXHUwMDNlcS1cXHUwMDNlcXVldWVkYXRhO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MzYtXFx0dW5zaWduZWQgaW50IHpvbmVfbm8gPSBycV96b25lX25vKHJxKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MzktXFx0Ym9vbCBpc193cml0ZSA9IHJlcV9vcChycSkgPT0gUkVRX09QX1dSSVRFIHx8IGlzX2FwcGVuZDtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NjQwOlxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02NDEtXFx0aW50IHJldCA9IC1FSU87XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjY2LVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnpvbmUtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2Njc6XFx0XFx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY2OC1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnpvbmUtXFx1MDAzZWxvY2spO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY3NC1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ6b25lLVxcdTAwM2Vsb2NrKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Njc1OlxcdFxcdHJldCA9IHpsb29wX3NlcV93cml0ZV9wcmVwKGNtZCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY3Ni1cXHRcXHRpZiAoIXJldClcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Njc3OlxcdFxcdFxcdHJldCA9IHpsb29wX2RvX3J3KGNtZCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY3OC1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnpvbmUtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02NzktXFx0fSBlbHNlIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NjgwOlxcdFxcdHJldCA9IHpsb29wX2RvX3J3KGNtZCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY4MS1cXHR9XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjgzLVxcdGlmIChyZXQgIT0gLUVJT0NCUVVFVUVEKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2ODQ6XFx0XFx0emxvb3BfcndfY29tcGxldGUoXFx1MDAyNmNtZC1cXHUwMDNlaW9jYiwgcmV0KTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Njg1OlxcdHpsb29wX3B1dF9jbWQoY21kKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjg2LX1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjg3LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2ODg6c3RhdGljIGlubGluZSBib29sIHpsb29wX3pvbmVfaXNfYWN0aXZlKHN0cnVjdCB6bG9vcF96b25lICp6b25lKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02ODkte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY5OS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzAwOnN0YXRpYyBpbnQgemxvb3BfcmVjb3JkX3NhZmVfd3BzKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbylcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzAxLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03MDUtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHpsby1cXHUwMDNlbnJfem9uZXM7IGkrKykge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3MDY6XFx0XFx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcXHUwMDI2emxvLVxcdTAwM2V6b25lc1tpXTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzA3LVxcdFxcdHN0cnVjdCBmaWxlICpmaWxlID0gem9uZS1cXHUwMDNlZmlsZTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzA4LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3MDk6XFx0XFx0aWYgKCF6bG9vcF96b25lX2lzX2FjdGl2ZSh6b25lKSlcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzEwLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTcyNS0gKi9cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzI2OnN0YXRpYyBpbnQgemxvb3BfZmx1c2goc3RydWN0IHpsb29wX2RldmljZSAqemxvKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03Mjcte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTczMS1cXHRpZiAoemxvLVxcdTAwM2VkaXNjYXJkX3dyaXRlX2NhY2hlKSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjczMjpcXHRcXHRyZXQgPSB6bG9vcF9yZWNvcmRfc2FmZV93cHMoemxvKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzMzLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzQzLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3NDQ6c3RhdGljIHZvaWQgemxvb3BfaGFuZGxlX2NtZChzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc0NS17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc0Ni1cXHRzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBibGtfbXFfcnFfZnJvbV9wZHUoY21kKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzQ3OlxcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IHJxLVxcdTAwM2VxLVxcdTAwM2VxdWV1ZWRhdGE7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc0OC1cXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NTctXFx0XFx0LypcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzU4OlxcdFxcdCAqIHpsb29wX3J3KCkgYWx3YXlzIGV4ZWN1dGVzIGFzeW5jaHJvbm91c2x5IG9yIGNvbXBsZXRlc1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NTktXFx0XFx0ICogZGlyZWN0bHkuXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc2MC1cXHRcXHQgKi9cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzYxOlxcdFxcdHpsb29wX3J3KGNtZCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc2Mi1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc2My1cXHRjYXNlIFJFUV9PUF9GTFVTSDpcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzY0OlxcdFxcdGNtZC1cXHUwMDNlcmV0ID0gemxvb3BfZmx1c2goemxvKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzY1LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NjYtXFx0Y2FzZSBSRVFfT1BfWk9ORV9SRVNFVDpcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzY3OlxcdFxcdGNtZC1cXHUwMDNlcmV0ID0gemxvb3BfcmVzZXRfem9uZSh6bG8sIHJxX3pvbmVfbm8ocnEpKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzY4LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NjktXFx0Y2FzZSBSRVFfT1BfWk9ORV9SRVNFVF9BTEw6XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc3MDpcXHRcXHRjbWQtXFx1MDAzZXJldCA9IHpsb29wX3Jlc2V0X2FsbF96b25lcyh6bG8pO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NzEtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc3Mi1cXHRjYXNlIFJFUV9PUF9aT05FX0ZJTklTSDpcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzczOlxcdFxcdGNtZC1cXHUwMDNlcmV0ID0gemxvb3BfZmluaXNoX3pvbmUoemxvLCBycV96b25lX25vKHJxKSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc3NC1cXHRcXHRicmVhaztcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzc1LVxcdGNhc2UgUkVRX09QX1pPTkVfT1BFTjpcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Nzc2OlxcdFxcdGNtZC1cXHUwMDNlcmV0ID0gemxvb3Bfb3Blbl96b25lKHpsbywgcnFfem9uZV9ubyhycSkpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NzctXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc3OC1cXHRjYXNlIFJFUV9PUF9aT05FX0NMT1NFOlxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3Nzk6XFx0XFx0Y21kLVxcdTAwM2VyZXQgPSB6bG9vcF9jbG9zZV96b25lKHpsbywgcnFfem9uZV9ubyhycSkpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03ODAtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzkwLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3OTE6c3RhdGljIHZvaWQgemxvb3BfY21kX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc5Mi17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc5MzpcXHRzdHJ1Y3Qgemxvb3BfY21kICpjbWQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHpsb29wX2NtZCwgd29yayk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc5NC1cXHRpbnQgb3JpZ19mbGFncyA9IGN1cnJlbnQtXFx1MDAzZWZsYWdzO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc5Ni1cXHRjdXJyZW50LVxcdTAwM2VmbGFncyB8PSBQRl9MT0NBTF9USFJPVFRMRSB8IFBGX01FTUFMTE9DX05PSU87XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc5NzpcXHR6bG9vcF9oYW5kbGVfY21kKGNtZCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc5OC1cXHRjdXJyZW50LVxcdTAwM2VmbGFncyA9IG9yaWdfZmxhZ3M7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODAwLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo4MDE6c3RhdGljIHZvaWQgemxvb3BfZmlsbF96ZXJvX3JxKHN0cnVjdCByZXF1ZXN0ICpycSwgdW5zaWduZWQgaW50IHplcm9fZnJvbSlcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODAyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy04MjAtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjgyMTpzdGF0aWMgdm9pZCB6bG9vcF9jb21wbGV0ZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTgyMi17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjgyMzpcXHRzdHJ1Y3Qgemxvb3BfY21kICpjbWQgPSBibGtfbXFfcnFfdG9fcGR1KHJxKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODI0OlxcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IHJxLVxcdTAwM2VxLVxcdTAwM2VxdWV1ZWRhdGE7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTgyNS1cXHR1bnNpZ25lZCBpbnQgem9uZV9ubyA9IGNtZC1cXHUwMDNlc2VjdG9yIFxcdTAwM2VcXHUwMDNlIHpsby1cXHUwMDNlem9uZV9zaGlmdDtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODI2OlxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXFx1MDAyNnpsby1cXHUwMDNlem9uZXNbem9uZV9ub107XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTgyNy1cXHRibGtfc3RhdHVzX3Qgc3RzID0gQkxLX1NUU19PSztcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy04MzYtXFx0XFx0aWYgKGNtZC1cXHUwMDNlcmV0IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgY21kLVxcdTAwM2VyZXQgIT0gYmxrX3JxX2J5dGVzKHJxKSlcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODM3OlxcdFxcdFxcdHpsb29wX2ZpbGxfemVyb19ycShycSwgY21kLVxcdTAwM2VyZXQpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy04MzgtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODc0LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo4NzU6c3RhdGljIGJvb2wgemxvb3Bfc2V0X3pvbmVfYXBwZW5kX3NlY3RvcihzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg3Ni17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjg3NzpcXHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBycS1cXHUwMDNlcS1cXHUwMDNlcXVldWVkYXRhO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy04NzgtXFx0dW5zaWduZWQgaW50IHpvbmVfbm8gPSBycV96b25lX25vKHJxKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODc5OlxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXFx1MDAyNnpsby1cXHUwMDNlem9uZXNbem9uZV9ub107XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg4MC1cXHRzZWN0b3JfdCB6b25lX2VuZCA9IHpvbmUtXFx1MDAzZXN0YXJ0ICsgemxvLVxcdTAwM2V6b25lX2NhcGFjaXR5O1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg5My1cXHRpZiAoem9uZS1cXHUwMDNld3AgXFx1MDAzZT0gem9uZV9lbmQpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjg5NDpcXHRcXHR6bG9vcF9tYXJrX2Z1bGwoemxvLCB6b25lKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODk1LVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkwMC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTAxOnN0YXRpYyBibGtfc3RhdHVzX3Qgemxvb3BfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkwMi1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgYmxrX21xX3F1ZXVlX2RhdGEgKmJkKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkwNC1cXHRzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBiZC1cXHUwMDNlcnE7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjkwNTpcXHRzdHJ1Y3Qgemxvb3BfY21kICpjbWQgPSBibGtfbXFfcnFfdG9fcGR1KHJxKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTA2OlxcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IHJxLVxcdTAwM2VxLVxcdTAwM2VxdWV1ZWRhdGE7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkwNy1cXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05MTgtXFx0aWYgKHpsby1cXHUwMDNlb3JkZXJlZF96b25lX2FwcGVuZCBcXHUwMDI2XFx1MDAyNiByZXFfb3AocnEpID09IFJFUV9PUF9aT05FX0FQUEVORCkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5MTk6XFx0XFx0aWYgKCF6bG9vcF9zZXRfem9uZV9hcHBlbmRfc2VjdG9yKHJxKSlcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTIwLVxcdFxcdFxcdHJldHVybiBCTEtfU1RTX0lPRVJSO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkyNC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTI1OlxcdElOSVRfV09SSyhcXHUwMDI2Y21kLVxcdTAwM2V3b3JrLCB6bG9vcF9jbWRfd29ya2ZuKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTI2LVxcdHF1ZXVlX3dvcmsoemxvLVxcdTAwM2V3b3JrcXVldWUsIFxcdTAwMjZjbWQtXFx1MDAzZXdvcmspO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkzMC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTMxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyB6bG9vcF9tcV9vcHMgPSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjkzMjpcXHQucXVldWVfcnEgICAgICAgPSB6bG9vcF9xdWV1ZV9ycSxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTMzOlxcdC5jb21wbGV0ZVxcdD0gemxvb3BfY29tcGxldGVfcnEsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkzNC19O1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05MzUtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjkzNjpzdGF0aWMgaW50IHpsb29wX29wZW4oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJsa19tb2RlX3QgbW9kZSlcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTM3LXtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTM4OlxcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IGRpc2stXFx1MDAzZXByaXZhdGVfZGF0YTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTM5LVxcdGludCByZXQ7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk0MC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTQxOlxcdHJldCA9IG11dGV4X2xvY2tfa2lsbGFibGUoXFx1MDAyNnpsb29wX2N0bF9tdXRleCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk0Mi1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk0Ni1cXHRcXHRyZXQgPSAtRU5YSU87XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjk0NzpcXHRtdXRleF91bmxvY2soXFx1MDAyNnpsb29wX2N0bF9tdXRleCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk0OC1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk1MC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTUxOnN0YXRpYyBpbnQgemxvb3BfcmVwb3J0X3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk1Mi1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfem9uZXMsIHN0cnVjdCBibGtfcmVwb3J0X3pvbmVzX2FyZ3MgKmFyZ3MpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk1My17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjk1NDpcXHRzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8gPSBkaXNrLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk1NS1cXHRzdHJ1Y3QgYmxrX3pvbmUgYmxreiA9IHt9O1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk2NS1cXHRcXHR1bnNpZ25lZCBpbnQgem9uZV9ubyA9IGZpcnN0ICsgaTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTY2OlxcdFxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXFx1MDAyNnpsby1cXHUwMDNlem9uZXNbem9uZV9ub107XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk2Ny1cXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05NzAtXFx0XFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChaTE9PUF9aT05FX1NFUV9FUlJPUiwgXFx1MDAyNnpvbmUtXFx1MDAzZWZsYWdzKSkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5NzE6XFx0XFx0XFx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk3Mi1cXHRcXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAwMS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAwMjpzdGF0aWMgdm9pZCB6bG9vcF9mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMDMte1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDA0OlxcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyA9IGRpc2stXFx1MDAzZXByaXZhdGVfZGF0YTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAwNS1cXHR1bnNpZ25lZCBpbnQgaTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDA5LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB6bG8tXFx1MDAzZW5yX3pvbmVzOyBpKyspIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAxMDpcXHRcXHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSA9IFxcdTAwMjZ6bG8tXFx1MDAzZXpvbmVzW2ldO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDExLVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMjItXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwMjM6c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB6bG9vcF9mb3BzID0ge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDI0LVxcdC5vd25lclxcdFxcdFxcdD0gVEhJU19NT0RVTEUsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwMjU6XFx0Lm9wZW5cXHRcXHRcXHQ9IHpsb29wX29wZW4sXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwMjY6XFx0LnJlcG9ydF96b25lc1xcdFxcdD0gemxvb3BfcmVwb3J0X3pvbmVzLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDI3OlxcdC5mcmVlX2Rpc2tcXHRcXHQ9IHpsb29wX2ZyZWVfZGlzayxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAyOC19O1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTEwMzA9X19wcmludGYoMywgNClcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAzMTpzdGF0aWMgc3RydWN0IGZpbGUgKnpsb29wX2ZpbHBfb3Blbl9mbXQoaW50IG9mbGFncywgdW1vZGVfdCBtb2RlLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDMyLVxcdFxcdGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwNDgtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwNDk6c3RhdGljIGludCB6bG9vcF9nZXRfYmxvY2tfc2l6ZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwNTA6XFx0XFx0XFx0XFx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwNTEte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwNzktXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwODA6c3RhdGljIGludCB6bG9vcF9pbml0X3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCBzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cyxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTA4MS1cXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgem9uZV9ubywgYm9vbCByZXN0b3JlKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDgyLXtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTA4MzpcXHRzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSA9IFxcdTAwMjZ6bG8tXFx1MDAzZXpvbmVzW3pvbmVfbm9dO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDg0LVxcdGludCBvZmxhZ3MgPSBPX1JEV1I7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTEwNS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTEwNjpcXHRcXHR6b25lLVxcdTAwM2VmaWxlID0gemxvb3BfZmlscF9vcGVuX2ZtdChvZmxhZ3MsIDA2MDAsIFxcXCIlcy8ldS9jbnYtJTA2dVxcXCIsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMDctXFx0XFx0XFx0XFx0XFx0emxvLVxcdTAwM2ViYXNlX2RpciwgemxvLVxcdTAwM2VpZCwgem9uZV9ubyk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTExNS1cXHRcXHRpZiAoIXpsby1cXHUwMDNlYmxvY2tfc2l6ZSkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTE2OlxcdFxcdFxcdHJldCA9IHpsb29wX2dldF9ibG9ja19zaXplKHpsbywgem9uZSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExMTctXFx0XFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTQ1LVxcdC8qIFNlcXVlbnRpYWwgem9uZSBmaWxlLiAqL1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTQ2OlxcdHpvbmUtXFx1MDAzZWZpbGUgPSB6bG9vcF9maWxwX29wZW5fZm10KG9mbGFncywgMDYwMCwgXFxcIiVzLyV1L3NlcS0lMDZ1XFxcIixcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE0Ny1cXHRcXHRcXHRcXHRcXHQgemxvLVxcdTAwM2ViYXNlX2RpciwgemxvLVxcdTAwM2VpZCwgem9uZV9ubyk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE1NS1cXHRpZiAoIXpsby1cXHUwMDNlYmxvY2tfc2l6ZSkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTU2OlxcdFxcdHJldCA9IHpsb29wX2dldF9ibG9ja19zaXplKHpsbywgem9uZSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNTctXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTYwLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTYxOlxcdHpsb29wX2dldF9ibG9ja19zaXplKHpsbywgem9uZSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNjItXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNjMtXFx0bXV0ZXhfbG9jayhcXHUwMDI2em9uZS1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjExNjQ6XFx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNjUtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ6b25lLVxcdTAwM2Vsb2NrKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTY5LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTcwOnN0YXRpYyBib29sIHpsb29wX2Rldl9leGlzdHMoc3RydWN0IHpsb29wX2RldmljZSAqemxvKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTcxLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTc0LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTc1OlxcdGNudiA9IHpsb29wX2ZpbHBfb3Blbl9mbXQoT19SRE9OTFksIDA2MDAsIFxcXCIlcy8ldS9jbnYtJTA2dVxcXCIsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNzYtXFx0XFx0XFx0XFx0ICB6bG8tXFx1MDAzZWJhc2VfZGlyLCB6bG8tXFx1MDAzZWlkLCAwKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE3NzpcXHRzZXEgPSB6bG9vcF9maWxwX29wZW5fZm10KE9fUkRPTkxZLCAwNjAwLCBcXFwiJXMvJXUvc2VxLSUwNnVcXFwiLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTc4LVxcdFxcdFxcdFxcdCAgemxvLVxcdTAwM2ViYXNlX2RpciwgemxvLVxcdTAwM2VpZCwgMCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE4OC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE4OTpzdGF0aWMgaW50IHpsb29wX2N0bF9hZGQoc3RydWN0IHpsb29wX29wdGlvbnMgKm9wdHMpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExOTAte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExOTctXFx0dW5zaWduZWQgaW50IG5yX3pvbmVzLCBpLCBqO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMTk4OlxcdHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbztcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE5OS1cXHRpbnQgcmV0ID0gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjI1LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjI2OlxcdHJldCA9IG11dGV4X2xvY2tfa2lsbGFibGUoXFx1MDAyNnpsb29wX2N0bF9tdXRleCk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyMjctXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjMxLVxcdGlmIChvcHRzLVxcdTAwM2VpZCBcXHUwMDNlPSAwKSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyMzI6XFx0XFx0cmV0ID0gaWRyX2FsbG9jKFxcdTAwMjZ6bG9vcF9pbmRleF9pZHIsIHpsbyxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTIzMy1cXHRcXHRcXHRcXHQgIG9wdHMtXFx1MDAzZWlkLCBvcHRzLVxcdTAwM2VpZCArIDEsIEdGUF9LRVJORUwpO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyMzYtXFx0fSBlbHNlIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTIzNzpcXHRcXHRyZXQgPSBpZHJfYWxsb2MoXFx1MDAyNnpsb29wX2luZGV4X2lkciwgemxvLCAwLCAwLCBHRlBfS0VSTkVMKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTIzOC1cXHR9XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyMzk6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ6bG9vcF9jdGxfbXV0ZXgpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjQwLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyNzQtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyNzU6XFx0emxvLVxcdTAwM2VkYXRhX2RpciA9IHpsb29wX2ZpbHBfb3Blbl9mbXQoT19SRE9OTFkgfCBPX0RJUkVDVE9SWSwgMCwgXFxcIiVzLyV1XFxcIixcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI3Ni1cXHRcXHRcXHRcXHRcXHQgICAgemxvLVxcdTAwM2ViYXNlX2RpciwgemxvLVxcdTAwM2VpZCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI4NS1cXHQgKiBJZiB3ZSBhbHJlYWR5IGhhdmUgem9uZSBmaWxlcywgd2UgYXJlIHJlc3RvcmluZyBhIGRldmljZSBjcmVhdGVkIGJ5IGFcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTI4NjpcXHQgKiBwcmV2aW91cyBhZGQgb3BlcmF0aW9uLiBJbiB0aGlzIGNhc2UsIHpsb29wX2luaXRfem9uZSgpIHdpbGwgY2hlY2tcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI4Ny1cXHQgKiB0aGF0IHRoZSB6b25lIGZpbGVzIGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIHpvbmUgY29uZmlndXJhdGlvbiBnaXZlbi5cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI4OC1cXHQgKi9cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTI4OTpcXHRyZXN0b3JlID0gemxvb3BfZGV2X2V4aXN0cyh6bG8pO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjkwLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl96b25lczsgaSsrKSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyOTE6XFx0XFx0cmV0ID0gemxvb3BfaW5pdF96b25lKHpsbywgb3B0cywgaSwgcmVzdG9yZSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyOTItXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMzAxLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMzAyOlxcdHpsby1cXHUwMDNldGFnX3NldC5vcHMgPSBcXHUwMDI2emxvb3BfbXFfb3BzO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMzAzLVxcdHpsby1cXHUwMDNldGFnX3NldC5ucl9od19xdWV1ZXMgPSBvcHRzLVxcdTAwM2Vucl9xdWV1ZXM7XFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTU6MTE6MjIuMTA1NTQyMDRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTI1NTIyMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWm9uZWQgQmxvY2sgTG9vcCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGZvciB0aGUgYHpsb29wYCBkcml2ZXIsIGFuZCBpdCBzZWVtcyBsaWtlIHdlJ3JlIGdldHRpbmcgc29tZSB1cGRhdGVzLiBUaGUgZHJpdmVyIGl0c2VsZiBpcyBjbGVhcmx5IGlkZW50aWZpZWQgYXMgYHpsb29wYCwgYW5kIHRoZSBhdXRob3IgaGFzIGxpc3RlZCBvdXQgYWxsIHRoZSBmdW5jdGlvbnMgd2l0aGluIHRoZSBkcml2ZXIuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBJJ20gc2VlaW5nIGZ1bmN0aW9ucyBsaWtlIGB6bG9vcF9xdWV1ZV9ycWAsIGB6bG9vcF9jb21wbGV0ZV9ycWAsIGB6bG9vcF9yd2AsIGFuZCBhIHdob2xlIGhvc3Qgb2Ygem9uZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyAtIGB6bG9vcF9vcGVuX3pvbmVgLCBgemxvb3BfY2xvc2Vfem9uZWAsIGV0Yy4gU2VlbXMgcHJldHR5IHN0YW5kYXJkIGZvciBhIFpvbmVkIEJsb2NrIERldmljZSAoWkJEKSBkcml2ZXIuXG5cblRoZSBjb3JlIG9mIHRoaXMgcGF0Y2gsIGFzIGZhciBhcyBJIGNhbiBzZWUsIGlzIG1vZGlmeWluZyBgemxvb3BfY29tcGxldGVfcnFgIGFuZCBhZGRpbmcgYHpsb29wX2ZpbGxfemVyb19ycWAuIFRoZSBjaGFuZ2UgdG8gYHpsb29wX2NvbXBsZXRlX3JxYCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuIFNpbmNlIGl0J3MgY2FsbGVkIGJ5IHRoZSBibG9jayBsYXllciB1cG9uIHJlcXVlc3QgY29tcGxldGlvbiwgdGhpcyBwcm9iYWJseSBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggaGFuZGxpbmcgem9uZWQgc2VtYW50aWNzIGFmdGVyIEkvTy4gQXMgZm9yIHRoZSBgemxvb3BfZmlsbF96ZXJvX3JxYCBhZGRpdGlvbiAtIHRoYXQncyBhbHNvIGludGVyZXN0aW5nLiBJIHdvbmRlciBpZiB0aGlzIGlzIGFuIG9wdGltaXphdGlvbiBmb3IgY2xlYXJpbmcgem9uZXMgb3IgcGVyaGFwcyBwYXJ0IG9mIGEgZ2FyYmFnZSBjb2xsZWN0aW9uIHN0cmF0ZWd5LlxuXG5Ob3csIGdpdmVuIHRoZSBgQkxLX0RFVl9aT05FRF9MT09QYCBjb25maWcsIEkgc2hvdWxkIGNoZWNrIHRoZSBgZHJpdmVycy9ibG9jay9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQkxLX0RFVl9aT05FRF9MT09QYC4gS25vd2luZyB3aGF0IG90aGVyIGZlYXR1cmVzIG9yIGNvbmZpZ3MgZW5hYmxlIG9yIGRpc2FibGUgdGhpcyB3aWxsIGdpdmUgbWUgbW9yZSBjb250ZXh0LiBUaGlzIHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBjb3VsZCBpbXBhY3Qgb3IgYmUgaW1wYWN0ZWQgYnkgYW55IG90aGVyIGNoYW5nZXMgaW4gdGhlIGJsb2NrIGxheWVyLCBlc3BlY2lhbGx5IGlmIGl0IHJlbGF0ZXMgdG8gb3RoZXIgWkJEIGRyaXZlcnMgb3IgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG90aGVyIGRlcGVuZGVuY2llcyBtaWdodCBleGlzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwNzIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTU6MTE6MjguMDMxMDY3NzhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjQ2NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZz0zNTQ9c291cmNlIFxcXCJkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzU1LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzozNTY6Y29uZmlnIEJMS19ERVZfWk9ORURfTE9PUFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNTctXFx0dHJpc3RhdGUgXFxcIlpvbmVkIGxvb3BiYWNrIGRldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNToxMToyOC4wNzQ3MjE5MDhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3Nzc5MDk4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCBpdDpcblxuKipEaXZpbmcgaW50byBCbG9jayBEZXZpY2UgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgYmxvY2sgZGV2aWNlIG9wdGlvbnMgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBpbnRvIHRoZSBgZHJpdmVycy9ibG9jay9LY29uZmlnYCBmaWxlLiBJJ2xsIG5lZWQgdG8ganVtcCBkaXJlY3RseSB0byBsaW5lIDM1NiwgYXMgSSBoYXZlIGEgZ29vZCBmZWVsaW5nIHRoYXQncyB3aGVyZSB0aGUgY3J1Y2lhbCBiaXRzIEknbSBpbnRlcmVzdGVkIGluIHJlc2lkZS4gSG9wZWZ1bGx5LCB0aGF0IGxvY2F0aW9uIHdpbGwgcHJvdmlkZSB0aGUgcmVsZXZhbnQgY29udGV4dC4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBmb2xsb3cgdGhlIGxvZ2ljIGFuZCB1bmRlcnN0YW5kIHRoZSBpbnRlcmRlcGVuZGVuY2llcyB0aGVyZS4gVGhpcyBzaG91bGQgY2xhcmlmeSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGVpciBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODU2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTU6MTE6MzEuMTUyNTE2Njk2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNTA6XFx0XFx0ICBTYXkgTiBpZiB5b3UgZG9uJ3Qgd2FudCB0byBzdXBwb3J0IGxlZ2FjeSBjb21tYW5kIG9wY29kZS4gSXQgaXNcXG4gMzUxOlxcdFxcdCAgc3VnZ2VzdGVkIHRvIGVuYWJsZSBOIGlmIHlvdXIgYXBwbGljYXRpb24odWJsayBzZXJ2ZXIpIHN3aXRjaGVzIHRvXFxuIDM1MjpcXHRcXHQgIGlvY3RsIGNvbW1hbmQgZW5jb2RpbmcuXFxuIDM1MzpcXHRcXG4gMzU0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWdcXFwiXFxuIDM1NTpcXHRcXG4gMzU2OlxcdGNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcXG4gMzU3OlxcdFxcdHRyaXN0YXRlIFxcXCJab25lZCBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gMzU4OlxcdFxcdGRlcGVuZHMgb24gQkxLX0RFVl9aT05FRFxcbiAzNTk6XFx0XFx0aGVscFxcbiAzNjA6XFx0XFx0ICBTYXlpbmcgWSBoZXJlIHdpbGwgYWxsb3cgeW91IHRvIHVzZSBjcmVhdGUgYSB6b25lZCBibG9jayBkZXZpY2UgdXNpbmdcXG4gMzYxOlxcdFxcdCAgcmVndWxhciBmaWxlcyBmb3Igem9uZXMgKG9uZSBmaWxlIHBlciB6b25lcykuIFRoaXMgaXMgdXNlZnVsIHRvIHRlc3RcXG4gMzYyOlxcdFxcdCAgZmlsZSBzeXN0ZW1zLCBkZXZpY2UgbWFwcGVyIGFuZCBhcHBsaWNhdGlvbnMgdGhhdCBzdXBwb3J0IHpvbmVkIGJsb2NrXFxuIDM2MzpcXHRcXHQgIGRldmljZXMuIFRvIGNyZWF0ZSBhIHpvbmVkIGxvb3AgZGV2aWNlLCBubyB1c2VyIHV0aWxpdHkgaXMgbmVlZGVkLCBhXFxuIDM2NDpcXHRcXHQgIHpvbmVkIGxvb3AgZGV2aWNlIGNhbiBiZSBjcmVhdGVkIChvciByZS1zdGFydGVkKSB1c2luZyBhIGNvbW1hbmRcXG4gMzY1OlxcdFxcdCAgbGlrZTpcXG4gMzY2OlxcdFxcbiAzNjc6XFx0XFx0ICBlY2hvIFxcXCJhZGQgaWQ9MCx6b25lX3NpemVfbWI9MjU2LGNhcGFjaXR5X21iPTE2Mzg0LGNvbnZfem9uZXM9MTFcXFwiIFxcdTAwM2UgXFxcXFxcbiAzNjg6XFx0XFx0XFx0L2Rldi96bG9vcC1jb250cm9sXFxuIDM2OTpcXHRcXG4gMzcwOlxcdFxcdCAgU2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmxvY2tkZXYvem9uZWRfbG9vcC5yc3QgZm9yIHVzYWdlXFxuIDM3MTpcXHRcXHQgIGRldGFpbHMuXFxuIDM3MjpcXHRcXG4gMzczOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMzc0OlxcdFxcbiAzNzU6XFx0ZW5kaWYgIyBCTEtfREVWXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE1OjExOjMxLjE1MjU5MDMyNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODQ3NDQyNzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBab25lZCBMb29wIERldmljZSBDb25maWd1cmF0aW9uIGFuZCBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBgQkxLX0RFVl9aT05FRF9MT09QYCBoYXMgYSBjbGVhciBkZXBlbmRlbmN5IG9uIGBCTEtfREVWX1pPTkVEYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBib3RoIGFyZSBlbmFibGVkIGluIHRoZSBmdXp6aW5nIHNldHVwLCBzbyBJJ2xsIGFkZCB0aGVtIHRvIGBFbmFibGVDb25maWdzYCBpbW1lZGlhdGVseS4gTWFrZXMgc2Vuc2U7IHlvdSBjYW4ndCBoYXZlIHRoZSBsb29wLXNwZWNpZmljIHN0dWZmIHdpdGhvdXQgdGhlIGNvcmUgem9uZWQgYmxvY2sgZGV2aWNlIHN1cHBvcnQuXG5cbk5vdywgdGhlIHBhdGNoIGl0c2VsZi4uLiBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggc2hvcnQgcmVhZHMgYW5kIHplcm9pbmcgdGhlIHVucmVhZCBwb3J0aW9uLiBJdCdzIHJlcGxhY2luZyBgemVyb19maWxsX2Jpb2Agd2l0aCBgemxvb3BfZmlsbF96ZXJvX3JxYC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgemVyb2luZyBiZWhhdmlvciwgZXNwZWNpYWxseSB3aXRoIHpvbmVkIGRldmljZXMsIGFsd2F5cyBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuIERlZmluaXRlbHkgd29ydGggaW52ZXN0aWdhdGluZy5cblxuTGV0J3Mgc2VlLCB3aGF0IGFyZSB0aGUga2V5IHN5bWJvbHMgaGVyZT8gSSdtIHRoaW5raW5nOiBgemxvb3BfY29tcGxldGVfcnFgLCBgemxvb3BfZmlsbF96ZXJvX3JxYCAodGhvdWdoIGl0J3Mgc3RhdGljLCBzbyB0aGF0IG1pZ2h0IGNvbXBsaWNhdGUgdGhpbmdzKSwgYHpsb29wX3J3YCwgYHpsb29wX3F1ZXVlX3JxYCwgYW5kIGB6bG9vcF9jdGxfYWRkYC5cblxuQWxyaWdodCwgbGV0J3MgZG91YmxlIGNoZWNrIGlmIGB6bG9vcF9maWxsX3plcm9fcnFgIGlzIHN0YXRpYy4gWXVwLCBpdCBpcy4gSG1tLCBzdGF0aWMgZnVuY3Rpb25zIGFyZSBhIGxpdHRsZSB0cmlja3kuIE9rYXksIGB6bG9vcF9jb21wbGV0ZV9ycWAgaXMgb3VyIG1haW4gZm9jdXMgc2luY2UgaXQncyB0aGUgbW9zdCBjb21tb24gZnVuY3Rpb24gcmVsYXRlZCB0byB0aGF0IHRhc2suIEknbGwgbmVlZCB0byBjaGVjayBob3cgc3l6a2FsbGVyIGhhbmRsZXMgc3RhdGljIGZ1bmN0aW9ucy4gYHpsb29wX3F1ZXVlX3JxYCBhbmQgYHpsb29wX3J3YCBhcmUgYWxzbyBpbXBvcnRhbnQgc3ltYm9scy4gV2FpdCwgYHpsb29wX2NvbXBsZXRlX3JxYCBpcyBzdGF0aWMgdG9vISBUaGF0J3Mgd2VpcmQuXG5cbk9rYXksIGNoZWNraW5nIGlmIGB6bG9vcF9jb21wbGV0ZV9ycWAgaXMgc3RhdGljLiBZdXAuIEJ1dCB3YWl0LCBpdCdzIGFzc2lnbmVkIHRvIGB6bG9vcF9tcV9vcHMuY29tcGxldGVgLiBBaGEhIEl0J3Mgbm90IGlubGluZWQgYmVjYXVzZSBpdCdzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlci4gU28gc3l6a2FsbGVyICpjYW4qIHVzZSBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkncmUgbm90IGlubGluZWQuIFRoYXQncyBhIGdvb2QgcGllY2Ugb2YgaW5mb3JtYXRpb24uIGB6bG9vcF9maWxsX3plcm9fcnFgIGlzIHN0YXRpYywgc28gaXQgKm1pZ2h0KiBiZSBpbmxpbmVkIGFuZCB0aGVyZWZvcmUgbGVzcyB1c2VmdWwgYXMgYSBmdXp6IHRhcmdldC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgYHpsb29wX3F1ZXVlX3JxYCBpcyBzdGF0aWMuIFllcywgaXQgaXMuIExldCdzIG1ha2Ugc3VyZSBhYm91dCBgemxvb3BfY3RsX2FkZGAuIFl1cCwgaXQncyBzdGF0aWMgYXMgd2VsbC4gT2theSwgbGV0J3Mgc3RlcCBiYWNrLCBhbmQgZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGB6bG9vcC5jYCB0byBzZWUgaWYgdGhvc2Ugd291bGQgb2ZmZXIgYmV0dGVyIGNvdmVyYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ4OSwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE1OjExOjM5LjAwMDAzNTY0M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2Nzk0ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSogemxvb3BfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmM9NDI9c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3Qgemxvb3Bfb3B0X3Rva2VucyA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzU6c3RydWN0IHpsb29wX29wdGlvbnMge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03Ni1cXHR1bnNpZ25lZCBpbnRcXHRcXHRtYXNrO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTk1PWVudW0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAxOmVudW0gemxvb3Bfem9uZV9mbGFncyB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMi1cXHRaTE9PUF9aT05FX0NPTlYgPSAwLFxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwOS0gKi9cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTEwOnN0cnVjdCB6bG9vcF96b25lIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTExLVxcdHN0cnVjdCBsaXN0X2hlYWRcXHRvcGVuX3pvbmVfZW50cnk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTIzLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjQ6c3RydWN0IHpsb29wX2RldmljZSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyNS1cXHR1bnNpZ25lZCBpbnRcXHRcXHRpZDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNTQtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE1NTpzdHJ1Y3Qgemxvb3BfY21kIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTU2LVxcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdHdvcms7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE1OjExOjM5LjA0NjcyMzU2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTg4NTcxNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZTogSW5pdGlhbCBTdXNwZWN0cyoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCB0aGlzIHByb2JsZW0sIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nLCBuYXR1cmFsbHksIGlzIHRoaW5raW5nIGFib3V0IGluaXRpYWxpemF0aW9uLiBXaGVyZSBkb2VzIHRoaXMgd2hvbGUgdGhpbmcgKnN0YXJ0Kj8gV2UgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSByZWxldmFudCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZXQgdXAgb3Igd2hlcmUgc29tZSBjcml0aWNhbCBmbGFncyBhcmUgYmVpbmcgZmxpcHBlZC4gSSdtIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoZSBjbGFzc2ljOiBgbW9kdWxlX2luaXRgLCBvciBhbnl0aGluZyBhbmFsb2dvdXMgd2l0aGluIHRoaXMgcGFydGljdWxhciBmcmFtZXdvcmsuIFRoYXQga2luZCBvZiBmdW5jdGlvbiBvciBtYWNybyBpcyBhbG1vc3QgYWx3YXlzIHRoZSBrZXkgZW50cnkgcG9pbnQgZm9yIGdldHRpbmcgdGhpbmdzIGdvaW5nLCBlc3BlY2lhbGx5IGluIGEgbW9kdWxhciBkZXNpZ24uIEl04oCZcyB0aGUgdXN1YWwgc3VzcGVjdCBmb3IgaG9va2luZyBpbnRvIHRoZSBzeXN0ZW0ncyBzdGFydHVwIHNlcXVlbmNlLiBMZXTigJlzIHNlZSBpZiB0aGF0J3Mgd2hlcmUgdGhlIHJlbGV2YW50IGRhdGEgb3IgZnVuY3Rpb25hbGl0eSByZXNpZGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjg4MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE1OjExOjQyLjE0NTU4MzYwN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI1OTc4MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuYz0xNzc4PXN0YXRpYyB2b2lkIF9fZXhpdCB6bG9vcF9leGl0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc4My1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTc4NDptb2R1bGVfaW5pdCh6bG9vcF9pbml0KTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc4NS1tb2R1bGVfZXhpdCh6bG9vcF9leGl0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTU6MTE6NDIuMTg4MTg2OTc1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTQ2Mzk3MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGB6bG9vcF9pbml0YCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQgaXQncyBhbGwgYWJvdXQuXG4qKipcbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIGB6bG9vcF9pbml0YCoqXG5cbkFscmlnaHQsIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgYHpsb29wX2luaXRgIGZ1bmN0aW9uLiBHaXZlbiBteSBiYWNrZ3JvdW5kLCBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaXRzIHJvbGUgaW4gZXZlbnQgbG9vcCBpbml0aWFsaXphdGlvbi4gUHJvYmFibHkgc2V0dGluZyB1cCB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgYW5kIHBlcmhhcHMgYWxsb2NhdGluZyBzb21lIHJlc291cmNlcy4gSSdtIGFzc3VtaW5nIGl0J3MgcGFydCBvZiBhIFplcm9NUSBvciBzaW1pbGFyIGFzeW5jaHJvbm91cyBuZXR3b3JraW5nIGxpYnJhcnksIGJhc2VkIG9uIHRoZSBuYW1pbmcgY29udmVudGlvbi4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmU6IFdoYXQgZXhhY3RseSBpcyBpdCBpbml0aWFsaXppbmc/IElzIGl0IHRocmVhZC1zYWZlPyBEb2VzIGl0IGhhbmRsZSBhbnkgcmVzb3VyY2UgbGltaXRzIG9yIGNvbmZpZ3VyYXRpb25zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIGl0IGVzdGFibGlzaGVzIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZnJhbWV3b3JrIGFuZCBob3cgaXQgd2lsbCBiZWhhdmUgdW5kZXIgbG9hZC4gSSdtIGtlZW4gdG8gc2VlIGlmIGl0IHByb3ZpZGVzIGFueSBob29rcyBmb3IgY3VzdG9taXphdGlvbiBvciBleHRlbnNpb24uIFRoZSBsZXZlbCBvZiBlcnJvciBoYW5kbGluZyBhbmQgYW55IHBvc3NpYmxlIGFzc2VydGlvbnMgd291bGQgYmUgYW4gaW1wb3J0YW50IGVsZW1lbnQgdG8gYXNzZXNzIGFzIHdlbGwuIEZpbmFsbHksIEknbGwgcGF5IGF0dGVudGlvbiB0byBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgY291bGQgY29tZSBpbnRvIHBsYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTkxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTU6MTE6NDUuODAyODI5NDkxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzI3ODg4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bG9vcF9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmM9MTA0OT1zdGF0aWMgaW50IHpsb29wX2dldF9ibG9ja19zaXplKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDc5LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDgwOnN0YXRpYyBpbnQgemxvb3BfaW5pdF96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgc3RydWN0IHpsb29wX29wdGlvbnMgKm9wdHMsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwODEtXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IHpvbmVfbm8sIGJvb2wgcmVzdG9yZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xMTg5PXN0YXRpYyBpbnQgemxvb3BfY3RsX2FkZChzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cylcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjg1LVxcdCAqIElmIHdlIGFscmVhZHkgaGF2ZSB6b25lIGZpbGVzLCB3ZSBhcmUgcmVzdG9yaW5nIGEgZGV2aWNlIGNyZWF0ZWQgYnkgYVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjg2OlxcdCAqIHByZXZpb3VzIGFkZCBvcGVyYXRpb24uIEluIHRoaXMgY2FzZSwgemxvb3BfaW5pdF96b25lKCkgd2lsbCBjaGVja1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjg3LVxcdCAqIHRoYXQgdGhlIHpvbmUgZmlsZXMgYXJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgem9uZSBjb25maWd1cmF0aW9uIGdpdmVuLlxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyOTAtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3pvbmVzOyBpKyspIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTI5MTpcXHRcXHRyZXQgPSB6bG9vcF9pbml0X3pvbmUoemxvLCBvcHRzLCBpLCByZXN0b3JlKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI5Mi1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTE3NTg9c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHpsb29wX21pc2MgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc2My1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTc2NDpzdGF0aWMgaW50IF9faW5pdCB6bG9vcF9pbml0KHZvaWQpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3NjUte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTE3Nzg9c3RhdGljIHZvaWQgX19leGl0IHpsb29wX2V4aXQodm9pZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNzgzLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNzg0Om1vZHVsZV9pbml0KHpsb29wX2luaXQpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNzg1LW1vZHVsZV9leGl0KHpsb29wX2V4aXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNToxMTo0NS44NDYxMTgwNTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1NTk3NDM2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBgemxvb3BfbWlzY2AgRGV2aWNlIERyaXZlcioqXG5cbk9rYXksIHNvIHRoZSBkcml2ZXIgaGFzIHJlZ2lzdGVyZWQgYSBtaXNjZGV2aWNlLCBzcGVjaWZpY2FsbHkgbmFtZWQgYHpsb29wX21pc2NgLiBSaWdodCwgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gTm93LCB3aGF0J3MgY3J1Y2lhbCBpcyB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGRldmljZSBhY3R1YWxseSAqZnVuY3Rpb25zKi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGVsdmUgaW50byB0aGUgb3BlcmF0aW9ucyB0aGF0IGFyZSBkZWZpbmVkIGZvciBgemxvb3BfbWlzY2AuIEkgbmVlZCB0byBpbnNwZWN0IHRob3NlIG9wZXJhdGlvbnMg4oCTIHRoZSByZWFkLCB3cml0ZSwgaW9jdGwsIG9wZW4sIHJlbGVhc2UgZnVuY3Rpb25zLCB3aGF0ZXZlciBpdCBtYXkgYmUuIEknbSBsb29raW5nIGZvciB0aGUgYmVoYXZpb3IsIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXMsIGFueSBpbnRlcmFjdGlvbnMgd2l0aCBoYXJkd2FyZSBvciBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gV2hhdCBhcmUgdGhlIGtleSBpbnRlcmFjdGlvbnMgZm9yIHRoaXMgZGV2aWNlLCB3aGljaCBtaWdodCByZXZlYWwgaG93IHRoZSBkZXZpY2UgaGFzIGJlZW4gZGVzaWduZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTc0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTU6MTE6NDkuMzAyMDk1NDA1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzcyNjU1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bG9vcF9taXNjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmM9MTc1MD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6bG9vcF9jdGxfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNzU3LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNzU4OnN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB6bG9vcF9taXNjID0ge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNzU5LVxcdC5taW5vclxcdFxcdD0gTUlTQ19EWU5BTUlDX01JTk9SLFxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTE3NjQ9c3RhdGljIGludCBfX2luaXQgemxvb3BfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3NjctXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE3Njg6XFx0cmV0ID0gbWlzY19yZWdpc3RlcihcXHUwMDI2emxvb3BfbWlzYyk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3NjktXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTE3Nzg9c3RhdGljIHZvaWQgX19leGl0IHpsb29wX2V4aXQodm9pZClcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc3OS17XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE3ODA6XFx0bWlzY19kZXJlZ2lzdGVyKFxcdTAwMjZ6bG9vcF9taXNjKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc4MS1cXHRpZHJfZGVzdHJveShcXHUwMDI2emxvb3BfaW5kZXhfaWRyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTU6MTE6NDkuMzQ1ODI4MjIyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MjI0NTg5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBgemxvb3BfY3RsX2ZvcHNgIFN0cnVjdHVyZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgemxvb3BfY3RsX2ZvcHNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbnRyb2wgZmlsZSBvcGVyYXRpb25zIHdpdGhpbiB0aGUgYHpsb29wYCBjb250ZXh0LiBJIHdhbnQgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIHJlZ2lzdGVyZWQgZmlsZSBvcGVyYXRpb25zIHdpdGhpbiB0aGlzIHN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgYW55IHJlY2VudCBjaGFuZ2VzIGluIGhvdyB3ZSBtYW5hZ2UgZGV2aWNlIGNvbnRyb2wuIEFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgbGlrZSBgb3BlbmAsIGByZWxlYXNlYCwgYHJlYWRgLCBgd3JpdGVgLCBhbmQgbWF5YmUgZXZlbiBgaW9jdGxgIGFsbCBwcm9wZXJseSBkZWZpbmVkIGFuZCBoYW5kbGluZyB0aGUgaW50ZXJhY3Rpb25zIEkgZXhwZWN0PyBJdCdzIGFsd2F5cyBhIGdvb2QgaWRlYSB0byBkb3VibGUtY2hlY2sgdGhlIGZ1bmRhbWVudGFscyB3aGVuIGRlYnVnZ2luZyBhbnl0aGluZyBhdCB0aGlzIGxvdyBsZXZlbC4gQSBxdWljayBsb29rIHdpbGwgaGVscCBtZSBjb25maXJtIHRoZSBzZXR1cCBhbmQgZW5zdXJlIHRoYXQgdGhlIHJpZ2h0IGZ1bmN0aW9uIHBvaW50ZXJzIGFyZSBpbiBwbGFjZSBmb3IgZWFjaCBvcGVyYXRpb24uIFRoaXMnbGwgc2F2ZSBtZSBmcm9tIGNoYXNpbmcgZ2hvc3RzIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODQ5NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE1OjExOjU1LjE2ODI4OTYwOFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0MTg2NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemxvb3BfY3RsX2ZvcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuYz0xNzQ1PXN0YXRpYyBpbnQgemxvb3BfY3RsX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc0OS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTc1MDpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6bG9vcF9jdGxfZm9wcyA9IHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc1MS1cXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTE3NTg9c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHpsb29wX21pc2MgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc2MC1cXHQubmFtZVxcdFxcdD0gXFxcInpsb29wLWNvbnRyb2xcXFwiLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNzYxOlxcdC5mb3BzXFx0XFx0PSBcXHUwMDI2emxvb3BfY3RsX2ZvcHMsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3NjItfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTU6MTE6NTUuMjEzNzE0MzU2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MjIwNTYzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGB6bG9vcF9jdGxfZm9wc2AqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgemxvb3BfY3RsX2ZvcHNgIHN0cnVjdHVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGZ1bmN0aW9uYWwgYnJlYWtkb3duIOKAkyB3aGF0IGV4YWN0bHkgZG9lcyB0aGlzIHRoaW5nICpkbyo/IEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIHN0cnVjdHVyZSBjb250YWluaW5nIGZpbGUgb3BlcmF0aW9ucywgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIGNvbnRyb2wgaW50ZXJmYWNlIGZvciB0aGUgWkZTIGxvb3BiYWNrIGRldmljZS4gU28sIHRoZSBrZXkgaXMgdG8gdW5kZXJzdGFuZCB3aGljaCBmaWxlIG9wZXJhdGlvbnMgYXJlIGRlZmluZWQgd2l0aGluLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgYHJlYWRgLCBgd3JpdGVgLCBgaW9jdGxgLCBgb3BlbmAsIGByZWxlYXNlYCwgYW5kIHBvdGVudGlhbGx5IGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbiBwb2ludGVycy4gS25vd2luZyB0aGVzZSB3aWxsIHF1aWNrbHkgY2x1ZSBtZSBpbiBvbiBob3cgdXNlcnNwYWNlIGludGVyYWN0cyB3aXRoLCBhbmQgY29udHJvbHMsIHRoaXMgWkZTIGxvb3AgZGV2aWNlIGF0IGEgbG93IGxldmVsLiBBcmUgd2UgdGFsa2luZyBhYm91dCBiYXNpYyBJL08sIGNvbmZpZ3VyYXRpb24sIG9yIG1vcmUgY29tcGxleCBtYW5hZ2VtZW50IGFjdGlvbnM/IEknbGwgcHJvYmFibHkgYmUgbG9va2luZyBmb3IgY2x1ZXMgcmVsYXRpbmcgdG8gdGhpbmdzIGxpa2Ugdm9sdW1lIG1hbmFnZW1lbnQsIGJsb2NrIGRldmljZSBjcmVhdGlvbiwgb3IgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBmaWxlIG9wZXJhdGlvbiBkZWZpbml0aW9ucy4gRGVwZW5kaW5nIG9uIHRoZSBzb3BoaXN0aWNhdGlvbiBvZiB0aGUgaW1wbGVtZW50YXRpb24sIHRoZXJlIG1pZ2h0IGJlIGludGVyZXN0aW5nIGxvY2svc3luY2hyb25pemF0aW9uIGNvbnN0cnVjdHMgaW52b2x2ZWQgYXMgd2VsbCB0aGF0IHdhcnJhbnQgYSBjbG9zZXIgbG9vayBvbmNlIHRoZSBmdW5jdGlvbnMgYXJlIG1hcHBlZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTY0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTU6MTE6NTguNzM1Nzc0MDk4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTc0NSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc0NTpcXHRzdGF0aWMgaW50IHpsb29wX2N0bF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbjE3NDY6XFx0e1xcbjE3NDc6XFx0XFx0cmV0dXJuIHNpbmdsZV9yZWxlYXNlKGlub2RlLCBmaWxlKTtcXG4xNzQ4OlxcdH1cXG4xNzQ5OlxcdFxcbjE3NTA6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgemxvb3BfY3RsX2ZvcHMgPSB7XFxuMTc1MTpcXHRcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbjE3NTI6XFx0XFx0Lm9wZW5cXHRcXHQ9IHpsb29wX2N0bF9vcGVuLFxcbjE3NTM6XFx0XFx0LnJlbGVhc2VcXHQ9IHpsb29wX2N0bF9yZWxlYXNlLFxcbjE3NTQ6XFx0XFx0LndyaXRlXFx0XFx0PSB6bG9vcF9jdGxfd3JpdGUsXFxuMTc1NTpcXHRcXHQucmVhZFxcdFxcdD0gc2VxX3JlYWQsXFxuMTc1NjpcXHR9O1xcbjE3NTc6XFx0XFxuMTc1ODpcXHRzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Ugemxvb3BfbWlzYyA9IHtcXG4xNzU5OlxcdFxcdC5taW5vclxcdFxcdD0gTUlTQ19EWU5BTUlDX01JTk9SLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNToxMTo1OC43MzU4NzgxODhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzMjU5NjcwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgWmxvb3AgQ29udHJvbCBJbnRlcmZhY2UqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29udHJvbCBpbnRlcmZhY2UgZm9yIHRoaXMgYHpsb29wYCB0aGluZyBpcyBzaXR0aW5nIGF0IGAvZGV2L3psb29wLWNvbnRyb2xgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgZGV2aWNlIGZpbGUgd2UncmUgaW50ZXJhY3Rpbmcgd2l0aC4gV3JpdGluZyB0byAqdGhhdCogcGF0aCwgdHJpZ2dlcnMgYSBmdW5jdGlvbiBjYWxsZWQgYHpsb29wX2N0bF93cml0ZWAuICBUaGF0J3MgdGhlIGtleSByaWdodCB0aGVyZSwgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgaGFuZGxlcyBhbnkgd3JpdGVzIHRvIHRoZSBjb250cm9sIGRldmljZS4gIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgd2hhdCB0aGF0IGZ1bmN0aW9uIGFjdHVhbGx5ICpkb2VzKi4gVGltZSB0byBkaWcgaW50byBgemxvb3BfY3RsX3dyaXRlYCBhbmQgc2VlIGV4YWN0bHkgd2hhdCBvcGVyYXRpb25zIGFyZSB0YWtpbmcgcGxhY2UgdGhlcmUuIFdoYXQgZGF0YSBpcyBpdCBleHBlY3Rpbmc/IFdoYXQgc2lkZSBlZmZlY3RzIGRvZXMgaXQgcHJvZHVjZT8gTmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93LCB1bmRlcnN0YW5kIHRoZSB3cml0ZSBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0OTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE1OjEyOjAyLjA2ODQ3Nzc1MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwODU0MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemxvb3BfY3RsX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmM9MTY1MD1zdGF0aWMgc3RydWN0IHpsb29wX2N0bF9vcCB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTY1OC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTY1OTpzdGF0aWMgc3NpemVfdCB6bG9vcF9jdGxfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNjYwLVxcdFxcdFxcdCAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTE3NTA9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgemxvb3BfY3RsX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc1My1cXHQucmVsZWFzZVxcdD0gemxvb3BfY3RsX3JlbGVhc2UsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE3NTQ6XFx0LndyaXRlXFx0XFx0PSB6bG9vcF9jdGxfd3JpdGUsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3NTUtXFx0LnJlYWRcXHRcXHQ9IHNlcV9yZWFkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNToxMjowMi4xMTc1Njk0OThaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU2NzEwNTM0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpsb29wIEkvTyBQYXRoIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIGluc3RpbmN0IHdhcyB0byBsb29rIGF0IGB6bG9vcF9jdGxfd3JpdGVgIGFzIHRoZSBlbnRyeSBwb2ludCBiZWNhdXNlIGl0J3MgdGhlIGNvbW1hbmQgcGFyc2VyIGFuZCBjYWxscyB0aGUgYWRkL2RlbGV0ZSBmdW5jdGlvbnMuIEhvd2V2ZXIsIHRoZSByZWFsIGFjdGlvbiwgdGhlIGFjdHVhbCBwb2ludCB3aGVyZSBvdXIgY2hhbmdlcyBhcmUgcmVmbGVjdGVkLCBzZWVtcyB0byBiZSBoYXBwZW5pbmcgaW4gYHpsb29wX2NvbXBsZXRlX3JxYCwgdHJpZ2dlcmVkIGJ5IHRoZSBibG9jayBsYXllciB3aGVuIGEgcmVxdWVzdCBjb21wbGV0ZXMuIFRoYXQgcG9pbnRzIHRvIGB6bG9vcF9xdWV1ZV9ycWAgYXMgaXRzIGxpa2VseSBjb3VudGVycGFydCBpbiBxdWV1aW5nIHRoZSByZXF1ZXN0cyB0byBiZWdpbiB3aXRoLlxuXG5TbywgSSBuZWVkIHRvIGZvY3VzIG9uIGJvdGggYHpsb29wX3F1ZXVlX3JxYCBhbmQgYHpsb29wX2NvbXBsZXRlX3JxYC4gU2luY2UgYHpsb29wX2NvbXBsZXRlX3JxYCBpcyBzdGF0aWMsIG15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpdCBtaWdodCBiZSBhIHByb2JsZW0gZm9yIHN5emthbGxlci4gSG93ZXZlciwgSSByZWNhbGwgdGhhdCBzeXprYWxsZXIgKmNhbiogaGFuZGxlIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSBhcmVuJ3QgaW5saW5lZCwgYW5kIHNpbmNlIGl0IGlzIGFzc2lnbmVkIHRvIGB6bG9vcF9tcV9vcHMuY29tcGxldGVgLCBpdCdzIGFsbW9zdCBjZXJ0YWlubHkgbm90IGlubGluZWQuIEdvb2QsIG9uZSBsZXNzIHdvcnJ5LlxuXG5CdXQgc3l6a2FsbGVyIHByZWZlcnMgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLCBpZGVhbGx5LiBMZXQncyBtYWtlIHN1cmUgdGhhdCBgemxvb3BfcXVldWVfcnFgIGlzIGFsc28gYXNzaWduZWQgdG8gYHpsb29wX21xX29wcy5xdWV1ZV9ycWAsIGl0IHNlZW1zIHRoYXQgaXMgdGhlIGNhc2UuXG5cbk9rYXksIGlzIHRoZXJlICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBtaWdodCBmaXQgdGhlIGJpbGwgaGVyZSwgSSBzaG91bGQgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTcwLCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE1OjEyOjA4LjY4NDY3ODM5MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5MDQ0NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSogemxvb3BfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmM9NDI9c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3Qgemxvb3Bfb3B0X3Rva2VucyA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzU6c3RydWN0IHpsb29wX29wdGlvbnMge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03Ni1cXHR1bnNpZ25lZCBpbnRcXHRcXHRtYXNrO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTk1PWVudW0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTAxOmVudW0gemxvb3Bfem9uZV9mbGFncyB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMi1cXHRaTE9PUF9aT05FX0NPTlYgPSAwLFxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwOS0gKi9cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTEwOnN0cnVjdCB6bG9vcF96b25lIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTExLVxcdHN0cnVjdCBsaXN0X2hlYWRcXHRvcGVuX3pvbmVfZW50cnk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTIzLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjQ6c3RydWN0IHpsb29wX2RldmljZSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyNS1cXHR1bnNpZ25lZCBpbnRcXHRcXHRpZDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNTQtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjE1NTpzdHJ1Y3Qgemxvb3BfY21kIHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTU2LVxcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdHdvcms7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE1OjEyOjA4LjczMTU4ODE0OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzU5MzUzNDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgemxvb3AuY2AgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGB6bG9vcC5jYCwgaXQncyBhbGwgYWJvdXQgbW9kaWZ5aW5nIGhvdyB0aGUgem9uZWQgbG9vcCBkZXZpY2Ugd29ya3MuIEZpcnN0LCBJIG5vdGljZSBpbW1lZGlhdGVseSB0aGF0IGFsbCB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBhcmUgKnN0YXRpYyouIFRoYXQncyBhIGtleSBkZXRhaWwg4oCTIGl0IG1lYW5zIHdlIGhhdmUgdG8gcmVzdHJpY3Qgb3VyIGZvY3VzIHRvIHRob3NlIHNwZWNpZmljIGludGVybmFsIGZ1bmN0aW9ucyBmb3IgZnV6emluZy5cblxuSSBzZWUgdGhhdCBgemxvb3BfY29tcGxldGVfcnFgIGlzIHRoZSBvbmUgYmVpbmcgZGlyZWN0bHkgbW9kaWZpZWQuIEludGVyZXN0aW5nLiBgemxvb3BfcXVldWVfcnFgIGFwcGVhcnMgdG8gYmUgdGhlIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBibG9jayBJL08sIGFuZCBgemxvb3BfY3RsX3dyaXRlYCBzZWVtcyB0byBiZSBob3cgY29udHJvbCBjb21tYW5kcyBhcmUgcHJvY2Vzc2VkLiAgR2l2ZW4gdGhvc2UgZW50cnkgcG9pbnRzIGFuZCB0aGUgbW9kaWZpZWQgZnVuY3Rpb24sIGB6bG9vcF9jb21wbGV0ZV9ycWAsIGB6bG9vcF9xdWV1ZV9ycWAsIGFuZCBgemxvb3BfY3RsX3dyaXRlYCBhcmUgdGhlIG9idmlvdXMgdGFyZ2V0cyBmb3IgZnV6emluZy5cblxuQWgsIGJ1dCB0aGUgY3J1Y2lhbCBjaGFuZ2UgaGVyZSBpcyB0aGUgcmVwbGFjZW1lbnQgb2YgYHplcm9fZmlsbF9iaW8oYmlvKWAgd2l0aCBgemxvb3BfZmlsbF96ZXJvX3JxKHJxLCBjbWQtXHUwMDNlcmV0KWAuIFRoYXQncyBhICpmdW5jdGlvbmFsKiBjaGFuZ2Ug4oCTIG5vdCBqdXN0IGEgcmVmYWN0b3JpbmcuIFRoaXMgaXMgZGVmaW5pdGVseSBhIHNwb3QgdGhhdCB3YXJyYW50cyBmdXp6aW5nLCBsaWtlbHkgdG8gdW5jb3ZlciBhIHN1YnRsZSBlZGdlIGNhc2UuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkZXNlcnZlcyB0aGUgYFdvcnRoRnV6emluZz10cnVlYCBmbGFnLiAgTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYHpsb29wX2NvbXBsZXRlX3JxYCwgYHpsb29wX3F1ZXVlX3JxYCwgYW5kIGB6bG9vcF9jdGxfd3JpdGVgLlxuXG5BbmQgZmluYWxseSwgbGV0J3MgbWFrZSBzdXJlIG91ciBmdXp6aW5nIGNvbmZpZ3VyYXRpb25zIGFyZSBjb3JyZWN0LiBJdCBsb29rcyBsaWtlIHdlJ2xsIG5lZWQgdG8gZW5hYmxlIGBCTEtfREVWX1pPTkVEX0xPT1BgIGFuZCwgc2luY2UgaXQgZGVwZW5kcyBvbiBpdCwgYWxzbyBgQkxLX0RFVl9aT05FRGAuIEknbGwgZG91YmxlLWNoZWNrIHRoYXQgYEJMS19ERVZfWk9ORURfTE9PUGAgZG9lc24ndCBoYXZlIGFueSAqb3RoZXIqIGRlcGVuZGVuY2llcywganVzdCB0byBiZSBzdXJlLi4uIExldCdzIGNoZWNrIGBCTEtfREVWX1pPTkVEYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5MTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTU6MTI6MTQuNDkwOTQ0ODI4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDI0MzgwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9aT05FRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9Nzc9Y29uZmlnIEJMS19ERVZfV1JJVEVfTU9VTlRFRFxcbi0tXFxuYmxvY2svS2NvbmZpZy05Ni1cXG5ibG9jay9LY29uZmlnOjk3OmNvbmZpZyBCTEtfREVWX1pPTkVEXFxuYmxvY2svS2NvbmZpZy05OC1cXHRib29sIFxcXCJab25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTU6MTI6MTQuNTM1MTk0NTg1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0MTMxNDE0MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBab25lZCBCbG9jayBEZXZpY2UgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBgQkxLX0RFVl9aT05FRGAuIEkga25vdyBpdCdzIHJlbGF0ZWQgdG8gem9uZWQgYmxvY2sgZGV2aWNlcywgd2hpY2ggYXJlIGJlY29taW5nIGluY3JlYXNpbmdseSBpbXBvcnRhbnQuIFdoZXJlJ3MgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBSaWdodCwgaXQncyB0eXBpY2FsbHkgaW4gdGhlIGBibG9jay9LY29uZmlnYCBmaWxlLiBMZXQncyBnbyBhaGVhZCBhbmQgb3BlbiB0aGF0IHVwLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBqdW1wIGluIGFyb3VuZCBsaW5lIDk3IG9mIGBibG9jay9LY29uZmlnYC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlc2UgbW9yZSBkZXZpY2Utc3BlY2lmaWMgb3B0aW9ucyBhcmUgZ3JvdXBlZCwgc28gdGhhdCdzIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcsIGdpdmVuIG15IGV4cGVyaWVuY2UuIEknbSBzdXJlIGl0J3MgbmVhcmJ5LCBhbmQgSSdsbCBzZWUgd2hhdCBvcHRpb25zIG9yIGRlcGVuZGVuY2llcyBhcmUgYXJvdW5kIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY4NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE1OjEyOjIwLjk0ODMzODczN1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDkwOlxcdFxcdHByaXZpbGVnZWQgcHJvY2Vzc2VzIGFuZCBnZW5lcmFsbHkgbWFrZXMgaXQgbXVjaCBoYXJkZXIgdG8gY3Jhc2hcXG4gIDkxOlxcdFxcdGZpbGVzeXN0ZW0gZHJpdmVycy4gTm90ZSBob3dldmVyIHRoYXQgdGhpcyBkb2VzIG5vdCBwcmV2ZW50XFxuICA5MjpcXHRcXHR1bmRlcmx5aW5nIGRldmljZShzKSBmcm9tIGJlaW5nIG1vZGlmaWVkIGJ5IG90aGVyIG1lYW5zLCBlLmcuIGJ5XFxuICA5MzpcXHRcXHRkaXJlY3RseSBzdWJtaXR0aW5nIFNDU0kgY29tbWFuZHMgb3IgdGhyb3VnaCBhY2Nlc3MgdG8gbG93ZXIgbGF5ZXJzIG9mXFxuICA5NDpcXHRcXHRzdG9yYWdlIHN0YWNrLiBJZiBpbiBkb3VidCwgc2F5IFkuIFRoZSBjb25maWd1cmF0aW9uIGNhbiBiZSBvdmVycmlkZGVuXFxuICA5NTpcXHRcXHR3aXRoIHRoZSBiZGV2X2FsbG93X3dyaXRlX21vdW50ZWQgYm9vdCBvcHRpb24uXFxuICA5NjpcXHRcXG4gIDk3OlxcdGNvbmZpZyBCTEtfREVWX1pPTkVEXFxuICA5ODpcXHRcXHRib29sIFxcXCJab25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gIDk5OlxcdFxcdGhlbHBcXG4gMTAwOlxcdFxcdEJsb2NrIGxheWVyIHpvbmVkIGJsb2NrIGRldmljZSBzdXBwb3J0LiBUaGlzIG9wdGlvbiBlbmFibGVzXFxuIDEwMTpcXHRcXHRzdXBwb3J0IGZvciBaQUMvWkJDL1pOUyBob3N0LW1hbmFnZWQgYW5kIGhvc3QtYXdhcmUgem9uZWQgYmxvY2tcXG4gMTAyOlxcdFxcdGRldmljZXMuXFxuIDEwMzpcXHRcXG4gMTA0OlxcdFxcdFNheSB5ZXMgaGVyZSBpZiB5b3UgaGF2ZSBhIFpBQywgWkJDLCBvciBaTlMgc3RvcmFnZSBkZXZpY2UuXFxuIDEwNTpcXHRcXG4gMTA2OlxcdGNvbmZpZyBCTEtfREVWX1RIUk9UVExJTkdcXG4gMTA3OlxcdFxcdGJvb2wgXFxcIkJsb2NrIGxheWVyIGJpbyB0aHJvdHRsaW5nIHN1cHBvcnRcXFwiXFxuIDEwODpcXHRcXHRkZXBlbmRzIG9uIEJMS19DR1JPVVBcXG4gMTA5OlxcdFxcdHNlbGVjdCBCTEtfQ0dST1VQX1JXU1RBVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNToxMjoyMC45NDg0MDcxNjdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA1NTg0NDMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciBab25lZCBCbG9jayBEZXZpY2UgTG9vcGJhY2sqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMsIGBCTEtfREVWX1pPTkVEYCBoYXMgbm8gb3RoZXIgZGVwZW5kZW5jaWVzLCB3aGljaCBtZWFucyBlbmFibGluZyBqdXN0IGBCTEtfREVWX1pPTkVEX0xPT1BgIGFuZCBgQkxLX0RFVl9aT05FRGAgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHRlc3RpbmcuIExldCdzIHJldmlldyB0aGUgcGF0Y2ggYWdhaW4sIHNwZWNpZmljYWxseSB0aGlzIGB6bG9vcF9maWxsX3plcm9fcnFgIGZ1bmN0aW9uOlxuXG5gYGBjXG4rc3RhdGljIHZvaWQgemxvb3BfZmlsbF96ZXJvX3JxKHN0cnVjdCByZXF1ZXN0ICpycSwgdW5zaWduZWQgaW50IHplcm9fZnJvbSlcbit7XG4rXHRzdHJ1Y3QgcmVxX2l0ZXJhdG9yIGl0ZXI7XG4rXHRzdHJ1Y3QgYmlvX3ZlYyBidjtcbitcdHVuc2lnbmVkIGludCBwb3MgPSAwO1xuK1x0dW5zaWduZWQgaW50IGVuZCwgb2ZmO1xuK1xuK1x0cnFfZm9yX2VhY2hfc2VnbWVudChidiwgcnEsIGl0ZXIpIHtcbitcdFx0ZW5kID0gcG9zICsgYnYuYnZfbGVuO1xuK1x0XHRpZiAoZW5kIFx1MDAzZSB6ZXJvX2Zyb20pIHtcbitcdFx0XHRvZmYgPSAwO1xuK1x0XHRcdGlmIChwb3MgXHUwMDNjIHplcm9fZnJvbSlcbitcdFx0XHRcdG9mZiA9IHplcm9fZnJvbSAtIHBvcztcbitcdFx0XHRtZW16ZXJvX3BhZ2UoYnYuYnZfcGFnZSwgYnYuYnZfb2Zmc2V0ICsgb2ZmLFxuK1x0XHRcdFx0ICAgICBidi5idl9sZW4gLSBvZmYpO1xuK1x0XHR9XG4rXHRcdHBvcyA9IGVuZDtcbitcdH1cbit9XG5gYGBcblxuVGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGVuc3VyZSBzaG9ydCByZWFkcyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuIEl04oCZcyByZWFjaGVkIHRocm91Z2ggYmxvY2sgSS9PIG9uIHRoZSBgemxvb3BgIGRldmljZS4gVGhlIGJlYXV0eSBvZiBgemxvb3BgIGlzIHRoYXQgaXQncyBhIHNvZnR3YXJlLWVtdWxhdGVkIHpvbmVkIGJsb2NrIGRldmljZS4gVGhpcyBtYWtlcyBpdCBpZGVhbCBmb3IgZnV6emluZywgZXNwZWNpYWxseSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBCZWNhdXNlIHRoZSBjaGFuZ2UgaXMgZnVuY3Rpb25hbCwgSSB3aWxsIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5TcGVjaWZpY2FsbHksIEknbGwgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb246XG5cbiogICBgemxvb3BfY29tcGxldGVfcnFgXG4qICAgYHpsb29wX3F1ZXVlX3JxYFxuKiAgIGB6bG9vcF9jdGxfd3JpdGVgXG5cbkVuYWJsaW5nIGBCTEtfREVWX1pPTkVEX0xPT1BgIGFuZCBpdHMgZGVwZW5kZW5jeSBgQkxLX0RFVl9aT05FRGAgd2lsbCBiZSBteSBzdGFydGluZyBwb2ludC4gVGhlIG5ldyBjb2RlIGluIGB6bG9vcF9maWxsX3plcm9fcnFgIGFkZHJlc3NlcyB0aGUgcHJvYmxlbSBvZiBjb3JyZWN0bHkgemVyb2luZyBvdXQgdGhlIHVucmVhZCB0YWlsIG9mIGEgcmVxdWVzdCBiZXlvbmQgYGNtZC1cdTAwM2VyZXRgIGFmdGVyIHNob3J0IHJlYWRzLCByZXBsYWNpbmcgdGhlIHBvdGVudGlhbGx5IGxlc3MgcmVsaWFibGUgYHplcm9fZmlsbF9iaW9gIGFwcHJvYWNoLiBHaXZlbiB0aGF0IGB6bG9vcGAgaXMgZWZmZWN0aXZlbHkgYSB2aXJ0dWFsIHpvbmVkIGJsb2NrIGRldmljZSBhbmQgZnVsbHkgYWNjZXNzaWJsZSB2aWEgc29mdHdhcmUsIGZ1enppbmcgb2ZmZXJzIGEgY2xlYXIgcGF0aCB0byBkaXNjb3ZlciBhbnkgcG90ZW50aWFsIGlzc3VlcyBpbiB0aGVzZSBjcml0aWNhbCBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjM2LCJPdXRwdXRUb2tlbnMiOjE4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE1OjEyOjMwLjAwNDI1NjAzM1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MTk5NjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1pPTkVEX0xPT1BcIixcbiAgICBcIkJMS19ERVZfWk9ORURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6bG9vcF9jb21wbGV0ZV9ycVwiLFxuICAgIFwiemxvb3BfcXVldWVfcnFcIixcbiAgICBcInpsb29wX2N0bF93cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBgemxvb3BfY29tcGxldGVfcnFgIHRvIGNvcnJlY3RseSB6ZXJvIG91dCB0aGUgdW5yZWFkIHRhaWwgb2YgYSByZXF1ZXN0IGJleW9uZCBgY21kLVxcdTAwM2VyZXRgIGZvciBzaG9ydCByZWFkcywgcmVwbGFjaW5nIHRoZSBwcmV2aW91cyBgemVyb19maWxsX2Jpb2AgYXBwcm9hY2guIFRoZSBgemxvb3BgIGRyaXZlciBpcyBhIHNvZnR3YXJlLWVtdWxhdGVkIHpvbmVkIGJsb2NrIGRldmljZSB0aGF0IGNhbiBiZSBmdWxseSBleGVyY2lzZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gRnV6emluZyB0aGlzIHJlcXVpcmVzIGVuYWJsaW5nIGBCTEtfREVWX1pPTkVEX0xPT1BgIGFuZCBpdHMgZGVwZW5kZW5jeSBgQkxLX0RFVl9aT05FRGAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9aT05FRF9MT09QXCIsXG4gICAgXCJCTEtfREVWX1pPTkVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemxvb3BfY29tcGxldGVfcnFcIixcbiAgICBcInpsb29wX3F1ZXVlX3JxXCIsXG4gICAgXCJ6bG9vcF9jdGxfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYHpsb29wX2NvbXBsZXRlX3JxYCB0byBjb3JyZWN0bHkgemVybyBvdXQgdGhlIHVucmVhZCB0YWlsIG9mIGEgcmVxdWVzdCBiZXlvbmQgYGNtZC1cXHUwMDNlcmV0YCBmb3Igc2hvcnQgcmVhZHMsIHJlcGxhY2luZyB0aGUgcHJldmlvdXMgYHplcm9fZmlsbF9iaW9gIGFwcHJvYWNoLiBUaGUgYHpsb29wYCBkcml2ZXIgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCB6b25lZCBibG9jayBkZXZpY2UgdGhhdCBjYW4gYmUgZnVsbHkgZXhlcmNpc2VkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIEZ1enppbmcgdGhpcyByZXF1aXJlcyBlbmFibGluZyBgQkxLX0RFVl9aT05FRF9MT09QYCBhbmQgaXRzIGRlcGVuZGVuY3kgYEJMS19ERVZfWk9ORURgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5rtjp[1] Phase: Succeeded StartedAt: 2026-07-31 15:12:41 +0000 UTC FinishedAt: 2026-07-31 15:12:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rtjp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-31 15:12:41 +0000 UTC FinishedAt: 2026-07-31 15:12:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rtjp[2] Phase: Succeeded StartedAt: 2026-07-31 15:12:41 +0000 UTC FinishedAt: 2026-07-31 16:37:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-31 15:12:41 +0000 UTC FinishedAt: 2026-07-31 16:37:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-31 15:12:41 +0000 UTC FinishedAt: 2026-07-31 15:12:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-31 15:12:41 +0000 UTC FinishedAt: 2026-07-31 15:12:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow5rtjp/series-workflow5rtjp-convert-artifact-1048578006/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-31 15:12:51 +0000 UTC FinishedAt: 2026-07-31 15:29:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-31 15:12:51 +0000 UTC FinishedAt: 2026-07-31 15:29:17 +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:*e0a7f48d-c3bd-4371-ad98-1ba8f85d42f7,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-workflow5rtjp/series-workflow5rtjp-convert-artifact-1048578006/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": "62c5552a-19b5-44a7-9c94-988de4aebb03", "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-workflow5rtjp/series-workflow5rtjp-build-action-2007295084/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-31 15:12:51 +0000 UTC FinishedAt: 2026-07-31 15:29:06 +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:*e0a7f48d-c3bd-4371-ad98-1ba8f85d42f7,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-workflow5rtjp/series-workflow5rtjp-convert-artifact-1048578006/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": "62c5552a-19b5-44a7-9c94-988de4aebb03", "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-workflow5rtjp/series-workflow5rtjp-build-action-2007295084/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-31 15:29:17 +0000 UTC FinishedAt: 2026-07-31 15:29:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-31 15:29:17 +0000 UTC FinishedAt: 2026-07-31 15:29:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-31 15:29:17 +0000 UTC FinishedAt: 2026-07-31 15:29:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-31 15:29:17 +0000 UTC FinishedAt: 2026-07-31 15:29:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow5rtjp/series-workflow5rtjp-convert-artifact-2667437929/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-31 15:29:28 +0000 UTC FinishedAt: 2026-07-31 15:31:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-31 15:29:28 +0000 UTC FinishedAt: 2026-07-31 15:31:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*62c5552a-19b5-44a7-9c94-988de4aebb03,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-workflow5rtjp/series-workflow5rtjp-build-action-2007295084/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-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-31 15:31:18 +0000 UTC FinishedAt: 2026-07-31 15:31:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-31 15:31:18 +0000 UTC FinishedAt: 2026-07-31 15:31:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-31 15:31:18 +0000 UTC FinishedAt: 2026-07-31 15:48:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-31 15:31:18 +0000 UTC FinishedAt: 2026-07-31 15:48:33 +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:*e0a7f48d-c3bd-4371-ad98-1ba8f85d42f7,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-workflow5rtjp/series-workflow5rtjp-convert-artifact-2667437929/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": "142bce2f-82ea-4fb7-87e4-1f4e726f794c", "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-workflow5rtjp/series-workflow5rtjp-build-action-2863800133/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-31 15:31:18 +0000 UTC FinishedAt: 2026-07-31 15:48:23 +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:*e0a7f48d-c3bd-4371-ad98-1ba8f85d42f7,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-workflow5rtjp/series-workflow5rtjp-convert-artifact-2667437929/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": "142bce2f-82ea-4fb7-87e4-1f4e726f794c", "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-workflow5rtjp/series-workflow5rtjp-build-action-2863800133/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-31 15:48:33 +0000 UTC FinishedAt: 2026-07-31 15:48:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-31 15:48:33 +0000 UTC FinishedAt: 2026-07-31 15:48:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-31 15:48:33 +0000 UTC FinishedAt: 2026-07-31 15:50:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-31 15:48:33 +0000 UTC FinishedAt: 2026-07-31 15:50:08 +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:*142bce2f-82ea-4fb7-87e4-1f4e726f794c,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-workflow5rtjp/series-workflow5rtjp-build-action-2863800133/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-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-31 15:50:17 +0000 UTC FinishedAt: 2026-07-31 16:37:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-31 15:50:17 +0000 UTC FinishedAt: 2026-07-31 16:37:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"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:*62c5552a-19b5-44a7-9c94-988de4aebb03,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*142bce2f-82ea-4fb7-87e4-1f4e726f794c,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-workflow5rtjp/series-workflow5rtjp-build-action-2007295084/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-workflow5rtjp/series-workflow5rtjp-build-action-2863800133/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-31 15:50:17 +0000 UTC FinishedAt: 2026-07-31 15:50:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-31 15:50:17 +0000 UTC FinishedAt: 2026-07-31 15:50:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"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-workflow5rtjp/series-workflow5rtjp-convert-artifact-3866556350/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-31 15:50:17 +0000 UTC FinishedAt: 2026-07-31 15:50:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-31 15:50:17 +0000 UTC FinishedAt: 2026-07-31 15:50:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-31 15:50:17 +0000 UTC FinishedAt: 2026-07-31 15:50:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-31 15:50:27 +0000 UTC FinishedAt: 2026-07-31 16:37:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5rtjp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zloop_complete_rq","zloop_queue_rq","zloop_ctl_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"10e04ab3f0bf481bc01982e4301b9f7475a7f7d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"0ed3f0cc-9976-4845-b89a-c27b2ebca587","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-31 15:50:27 +0000 UTC FinishedAt: 2026-07-31 16:37:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*62c5552a-19b5-44a7-9c94-988de4aebb03,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*142bce2f-82ea-4fb7-87e4-1f4e726f794c,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-workflow5rtjp/series-workflow5rtjp-build-action-2007295084/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-workflow5rtjp/series-workflow5rtjp-build-action-2863800133/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-workflow5rtjp/series-workflow5rtjp-convert-artifact-3866556350/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,}