Name: series-workflowc2jfx Phase: Succeeded StartedAt: 2026-08-01 13:19:03 +0000 UTC FinishedAt: 2026-08-01 15:07:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2jfx[0] Phase: Succeeded StartedAt: 2026-08-01 13:19:03 +0000 UTC FinishedAt: 2026-08-01 13:42:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2jfx[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 13:19:03 +0000 UTC FinishedAt: 2026-08-01 13:42:02 +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": "7f40b346462f563a0d6e841a77b5163d2a882a04", "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": "7f40b346462f563a0d6e841a77b5163d2a882a04", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_ZONED_LOOP", "BLK_DEV_ZONED" ], "series_id": "19e05a3b-e018-4045-90f6-efa4b70b0c35" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "zloop_ctl_write", "zloop_queue_rq", "zloop_report_zones" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfWk9ORURfTE9PUCYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1pPTkVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emxvb3BfY3RsX3dyaXRlJiMzNDssCiAgICAmIzM0O3psb29wX3F1ZXVlX3JxJiMzNDssCiAgICAmIzM0O3psb29wX3JlcG9ydF96b25lcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgaW4gYHpsb29wX3VwZGF0ZV9zZXFfem9uZWAgdG8gZml4IGEgYnVnIHdoZXJlIGBmaWxlX3NlY3RvcnNgIGNhbiBiZSBlcXVhbCB0byBgemxvLVx1MDAzZXpvbmVfc2l6ZWAgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gYHpsby1cdTAwM2V6b25lX2NhcGFjaXR5YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGJsb2NrIGRyaXZlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDk0NGVlYzUxNTdlYzYyNTMxNjYzM2EyN2FkMjczNmJmMzAzYjRiNmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDEzOjQwOjQ2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svemxvb3AuYyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuaW5kZXggNTVlZWI2YWFjMGVhMy4uYjY5ZDc5OGYyMDNjYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96bG9vcC5jXG5AQCAtMzI0LDcgJiM0MzszMjQsOCBAQCBzdGF0aWMgaW50IHpsb29wX3VwZGF0ZV9zZXFfem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHVuc2lnbmVkIGludCB6b25lX25vKVxuIFx0fVxuIFxuIFx0ZmlsZV9zZWN0b3JzID0gc3RhdC5zaXplIFx1MDAzZVx1MDAzZSBTRUNUT1JfU0hJRlQ7XG4tXHRpZiAoZmlsZV9zZWN0b3JzIFx1MDAzZSB6bG8tXHUwMDNlem9uZV9jYXBhY2l0eSkge1xuJiM0MztcdGlmIChmaWxlX3NlY3RvcnMgXHUwMDNlIHpsby1cdTAwM2V6b25lX2NhcGFjaXR5IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBmaWxlX3NlY3RvcnMgIT0gemxvLVx1MDAzZXpvbmVfc2l6ZSkge1xuIFx0XHRwcl9lcnIoXCYjMzQ7Wm9uZSAldSBmaWxlIHRvbyBsYXJnZSAoJWxsdSBzZWN0b3JzIFx1MDAzZSAlbGx1KVxcblwmIzM0OyxcbiBcdFx0ICAgICAgIHpvbmVfbm8sIGZpbGVfc2VjdG9ycywgemxvLVx1MDAzZXpvbmVfY2FwYWNpdHkpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0zMzksNyAmIzQzOzM0MCw4IEBAIHN0YXRpYyBpbnQgemxvb3BfdXBkYXRlX3NlcV96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pXG4gXHRzcGluX2xvY2soXHUwMDI2em9uZS1cdTAwM2V3cF9sb2NrKTtcbiBcdGlmICghZmlsZV9zZWN0b3JzKSB7XG4gXHRcdHpsb29wX21hcmtfZW1wdHkoemxvLCB6b25lKTtcbi1cdH0gZWxzZSBpZiAoZmlsZV9zZWN0b3JzID09IHpsby1cdTAwM2V6b25lX2NhcGFjaXR5KSB7XG4mIzQzO1x0fSBlbHNlIGlmIChmaWxlX3NlY3RvcnMgPT0gemxvLVx1MDAzZXpvbmVfY2FwYWNpdHkgfHxcbiYjNDM7XHRcdCAgIGZpbGVfc2VjdG9ycyA9PSB6bG8tXHUwMDNlem9uZV9zaXplKSB7XG4gXHRcdHpsb29wX21hcmtfZnVsbCh6bG8sIHpvbmUpO1xuIFx0fSBlbHNlIHtcbiBcdFx0aWYgKHpvbmUtXHUwMDNlY29uZCAhPSBCTEtfWk9ORV9DT05EX0lNUF9PUEVOIFx1MDAyNlx1MDAyNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX1pPTkVEX0xPT1AmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9aT05FRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3psb29wX2N0bF93cml0ZSYjMzQ7LAogICAgJiMzNDt6bG9vcF9xdWV1ZV9ycSYjMzQ7LAogICAgJiMzNDt6bG9vcF9yZXBvcnRfem9uZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGluIGB6bG9vcF91cGRhdGVfc2VxX3pvbmVgIHRvIGZpeCBhIGJ1ZyB3aGVyZSBgZmlsZV9zZWN0b3JzYCBjYW4gYmUgZXF1YWwgdG8gYHpsby1cdTAwM2V6b25lX3NpemVgIHdoaWNoIGlzIGxhcmdlciB0aGFuIGB6bG8tXHUwMDNlem9uZV9jYXBhY2l0eWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBibG9jayBkcml2ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5NDRlZWM1MTU3ZWM2MjUzMTY2MzNhMjdhZDI3MzZiZjMwM2I0YjZlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAxMzo0MDo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svemxvb3AuYyBiL2RyaXZlcnMvYmxvY2svemxvb3AuYwppbmRleCA1NWVlYjZhYWMwZWEzLi5iNjlkNzk4ZjIwM2NjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3psb29wLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96bG9vcC5jCkBAIC0zMjQsNyAmIzQzOzMyNCw4IEBAIHN0YXRpYyBpbnQgemxvb3BfdXBkYXRlX3NlcV96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pCiAJfQogCiAJZmlsZV9zZWN0b3JzID0gc3RhdC5zaXplICZndDsmZ3Q7IFNFQ1RPUl9TSElGVDsKLQlpZiAoZmlsZV9zZWN0b3JzICZndDsgemxvLSZndDt6b25lX2NhcGFjaXR5KSB7CiYjNDM7CWlmIChmaWxlX3NlY3RvcnMgJmd0OyB6bG8tJmd0O3pvbmVfY2FwYWNpdHkgJmFtcDsmYW1wOwomIzQzOwkgICAgZmlsZV9zZWN0b3JzICE9IHpsby0mZ3Q7em9uZV9zaXplKSB7CiAJCXByX2VycigmIzM0O1pvbmUgJXUgZmlsZSB0b28gbGFyZ2UgKCVsbHUgc2VjdG9ycyAmZ3Q7ICVsbHUpXG4mIzM0OywKIAkJICAgICAgIHpvbmVfbm8sIGZpbGVfc2VjdG9ycywgemxvLSZndDt6b25lX2NhcGFjaXR5KTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMzksNyAmIzQzOzM0MCw4IEBAIHN0YXRpYyBpbnQgemxvb3BfdXBkYXRlX3NlcV96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pCiAJc3Bpbl9sb2NrKCZhbXA7em9uZS0mZ3Q7d3BfbG9jayk7CiAJaWYgKCFmaWxlX3NlY3RvcnMpIHsKIAkJemxvb3BfbWFya19lbXB0eSh6bG8sIHpvbmUpOwotCX0gZWxzZSBpZiAoZmlsZV9zZWN0b3JzID09IHpsby0mZ3Q7em9uZV9jYXBhY2l0eSkgewomIzQzOwl9IGVsc2UgaWYgKGZpbGVfc2VjdG9ycyA9PSB6bG8tJmd0O3pvbmVfY2FwYWNpdHkgfHwKJiM0MzsJCSAgIGZpbGVfc2VjdG9ycyA9PSB6bG8tJmd0O3pvbmVfc2l6ZSkgewogCQl6bG9vcF9tYXJrX2Z1bGwoemxvLCB6b25lKTsKIAl9IGVsc2UgewogCQlpZiAoem9uZS0mZ3Q7Y29uZCAhPSBCTEtfWk9ORV9DT05EX0lNUF9PUEVOICZhbXA7JmFtcDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCbG9jayBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggaW4gYGRyaXZlcnMvYmxvY2svemxvb3AuY2AuIEl0IGxvb2tzIGxpa2UgaXTigJlzIHR3ZWFraW5nIHRoZSBgemxvb3BfdXBkYXRlX3NlcV96b25lYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2VzIGFyZSBhcm91bmQgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQuIEl0IGFkZHMgYCZhbXA7JmFtcDsgZmlsZV9zZWN0b3JzICE9IHpsby0mZ3Q7em9uZV9zaXplYCB0byB0aGUgY29tcGFyaXNvbiBgaWYgKGZpbGVfc2VjdG9ycyAmZ3Q7IHpsby0mZ3Q7em9uZV9jYXBhY2l0eSlgLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGFkZGl0aW9uYWwgY2hlY2ssIHBhcnRpY3VsYXJseSB3aHkgd2UmIzM5O3JlIG5vdyBiZWluZyBzcGVjaWZpYyBhYm91dCAqbm90KiBlcXVhbGxpbmcgdGhlIHpvbmUgc2l6ZS4gVGhlbiwgaW4gdGhlIGBlbHNlIGlmYCBibG9jaywgdGhlcmUmIzM5O3MgYSBtb2RpZmljYXRpb247IGEgbmV3IG9yIGNvbmRpdGlvbiwgYHx8IGZpbGVfc2VjdG9ycyA9PSB6bG8tJmd0O3pvbmVfc2l6ZWAgaXMgaW50cm9kdWNlZCB3aGVuIHByZXZpb3VzbHkgdGhlcmUgd2FzIG9ubHkgYGZpbGVfc2VjdG9ycyA9PSB6bG8tJmd0O3pvbmVfY2FwYWNpdHlgLiBUaGlzIHByb2JhYmx5IGluZGljYXRlcyBzb21ldGhpbmcgYWJvdXQgaG93IHdlIGhhbmRsZSB0aGUgZnVsbCB6b25lIGNvbmRpdGlvbiwgb3IgcG90ZW50aWFsIGVkZ2UgY2FzZXMgd2l0aCB6b25lIGJvdW5kYXJpZXMsIHNvIEkgaGF2ZSB0byB1bmRlcnN0YW5kIHRoZSByZWFzb24gaXQgd2FzIGFkZGVkLgoKUmlnaHQsIHNvIGB6bG9vcGAgaXMgYSBibG9jayBkcml2ZXIsIGZyb20gd2hhdCBJIGNhbiBnbGVhbi4gVG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBsb2dpYywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGRyaXZlciBhY3R1YWxseSBkb2VzIGFuZCBob3cgem9uZXMgYXJlIG1hbmFnZWQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG1heWJlIHNvbWUgZG9jdW1lbnRhdGlvbiB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIGBmaWxlX3NlY3RvcnNgLCBgemxvLSZndDt6b25lX3NpemVgIGFuZCBgemxvLSZndDt6b25lX2NhcGFjaXR5YCwgYW5kIGhvdyB1cGRhdGVzIGhhcHBlbi4gVGltZSB0byBsb29rIHVwIGB6bG9vcC5jYCB3aXRoaW4gdGhlIGBkcml2ZXJzL2Jsb2NrL2AgZGlyZWN0b3J5IGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3psb29wX3VwZGF0ZV9zZXFfem9uZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svemxvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmM9MzAwPXN0YXRpYyB2b2lkIHpsb29wX21hcmtfZW1wdHkoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCBzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzA4LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjMwOTpzdGF0aWMgaW50IHpsb29wX3VwZGF0ZV9zZXFfem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHVuc2lnbmVkIGludCB6b25lX25vKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTMxMC17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTM1Nz1zdGF0aWMgaW50IHpsb29wX29wZW5fem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHVuc2lnbmVkIGludCB6b25lX25vKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNjctXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KFpMT09QX1pPTkVfU0VRX0VSUk9SLCBcdTAwMjZ6b25lLVx1MDAzZWZsYWdzKSkge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjM2ODpcdFx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzY5LVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYz0zODI9c3RhdGljIGludCB6bG9vcF9jbG9zZV96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM5Mi1cdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoWkxPT1BfWk9ORV9TRVFfRVJST1IsIFx1MDAyNnpvbmUtXHUwMDNlZmxhZ3MpKSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzkzOlx0XHRyZXQgPSB6bG9vcF91cGRhdGVfc2VxX3pvbmUoemxvLCB6b25lX25vKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zOTQtXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTYzND1zdGF0aWMgdm9pZCB6bG9vcF9ydyhzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY2OC1cdFx0bXV0ZXhfbG9jayhcdTAwMjZ6b25lLVx1MDAzZWxvY2spO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjY2OTpcdFx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjcwLVx0XHRtdXRleF91bmxvY2soXHUwMDI2em9uZS1cdTAwM2Vsb2NrKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9OTM3PXN0YXRpYyBpbnQgemxvb3BfcmVwb3J0X3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IsXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk1Ni1cdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChaTE9PUF9aT05FX1NFUV9FUlJPUiwgXHUwMDI2em9uZS1cdTAwM2VmbGFncykpIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5NTc6XHRcdFx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTU4LVx0XHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MTA2Nj1zdGF0aWMgaW50IHpsb29wX2luaXRfem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHN0cnVjdCB6bG9vcF9vcHRpb25zICpvcHRzLFxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTQ5LVx0bXV0ZXhfbG9jayhcdTAwMjZ6b25lLVx1MDAzZWxvY2spO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjExNTA6XHRyZXQgPSB6bG9vcF91cGRhdGVfc2VxX3pvbmUoemxvLCB6b25lX25vKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTUxLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpvbmUtXHUwMDNlbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwMgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UmIzM5O3ZlIHJlcXVlc3RlZCwgc3BlYWtpbmcgYXMgaWYgdGhlc2UgYXJlIG15IGltbWVkaWF0ZSB0aG91Z2h0czoKCioqS2NvbmZpZyBDb25maWd1cmF0aW9uIGZvciBgemxvb3BgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgemxvb3BgIHNpdHVhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aGF0IEtjb25maWcgb3B0aW9ucyBhcmUgYWJzb2x1dGVseSAqZXNzZW50aWFsKiBmb3IgaXQgdG8gZnVuY3Rpb24gY29ycmVjdGx5IGFuZCBvcHRpbWFsbHk/IEkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgbWFwIG91dCB0aGUgZGVwZW5kZW5jaWVzLiBJcyBpdCBhIG1vZHVsZT8gRG9lcyBpdCBuZWVkIHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzIGVuYWJsZWQsIG9yIHBlcmhhcHMgZGlzYWJsZWQ/IEFyZSB0aGVyZSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgbW9kdWxlcyBvciBzdWJzeXN0ZW1zIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkPyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhlIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucyB0aGlzIGNvdWxkIGJlIHVzZWQgaW4gLSBkaWZmZXJlbnQgdGFyZ2V0IHBsYXRmb3JtcywgZGlmZmVyZW50IHVzZS1jYXNlcy4gV2hhdCBrbm9icyBhbmQgZGlhbHMgZG8gSSBuZWVkIHRvIGV4cG9zZSB0byB0aGUgdXNlciB2aWEgS2NvbmZpZyB0byBhbGxvdyB0aGVtIHRvIHRhaWxvciBgemxvb3BgIHRvIHRoZWlyIHNwZWNpZmljIGVudmlyb25tZW50PyBJ4oCZbSBlbnZpc2lvbmluZyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLCBzbyBwZXJoYXBzIEkgbmVlZCBvcHRpb25zIGZvciBlbmFibGluZy9kaXNhYmxpbmcgY2VydGFpbiBvcHRpbWl6YXRpb25zIG9yIHR3ZWFrcz8gV2hhdCBhYm91dCBkZWJ1Z2dpbmc/IEFyZSB0aGVyZSBhbnkgZGVidWcgb3B0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZXhwb3NlZD8gVGhpcyByZXF1aXJlcyBhIG1ldGhvZGljYWwgYXBwcm9hY2gsIHN0ZXBwaW5nIHRocm91Z2ggdGhlIGNvZGUgYW5kIGlkZW50aWZ5aW5nIGV2ZXJ5IHNpbmdsZSBjb25kaXRpb25hbCBkZXBlbmRlbmN5LiBJIG5lZWQgdG8gZ2V0IHRoaXMgcmlnaHQgdGhlIGZpcnN0IHRpbWUsIHRvIG1pbmltaXNlIHRoZSB0aW1lIHdhc3RlZC4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCBmdW5jdGlvbmFsaXR5OyBpdCYjMzk7cyBhYm91dCBwcm92aWRpbmcgYSAqdXNlci1mcmllbmRseSogYW5kICpyb2J1c3QqIHNldCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emxvb3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTM1Nj1jb25maWcgQkxLX0RFVl9aT05FRF9MT09QXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM2Ny1cdCAgZWNobyBcJiMzNDthZGQgaWQ9MCx6b25lX3NpemVfbWI9MjU2LGNhcGFjaXR5X21iPTE2Mzg0LGNvbnZfem9uZXM9MTFcJiMzNDsgXHUwMDNlIFxcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzY4Olx0XHQvZGV2L3psb29wLWNvbnRyb2xcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkzMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgdGhlIHpsb29wIENvbXBpbGF0aW9uKioKCk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHpsb29wYCB0YXJnZXQgd2l0aGluIHRoZSBibG9jayBzdWJzeXN0ZW0gaXMgYnVpbHQuIE15IGZpcnN0IG1vdmUgd2lsbCBiZSB0byBkaXZlIGludG8gdGhlIGBkcml2ZXJzL2Jsb2NrL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjb21waWxhdGlvbiBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGlzIHBhcnRpY3VsYXIgYmxvY2sgZGV2aWNlIGRyaXZlci4gVGhlIE1ha2VmaWxlIHNob3VsZCBzaGVkIGxpZ2h0IG9uIGhvdyBgemxvb3BgIGlzIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBhbnkgc3BlY2lhbCBmbGFncyBvciBsaWJyYXJpZXMgaW52b2x2ZWQgaW4gaXRzIGJ1aWxkIHByb2Nlc3MuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGNvbnN0cnVjdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6bG9vcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9NYWtlZmlsZT00MD1vYmotJChDT05GSUdfQkxLX0RFVl9VQkxLKVx0XHRcdCYjNDM7PSB1YmxrX2Rydi5vXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlOjQxOm9iai0kKENPTkZJR19CTEtfREVWX1pPTkVEX0xPT1ApICYjNDM7PSB6bG9vcC5vXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTQyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxODIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgdGhlIGNvbmZpZ3VyYXRpb24gaW4gcXVlc3Rpb24gaXMgYEJMS19ERVZfWk9ORURfTE9PUGAuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIGl0cyBkZXBlbmRlbmNpZXMuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgYXJlIHRpZWQgdG8gdGhpcyBzZXR0aW5nLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBoZWxwIG1lIGZpZ3VyZSBvdXQgaG93IHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQsIHVsdGltYXRlbHksIGhvdyBpdCBiZWhhdmVzIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhpcyBpbXBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCTEtfREVWX1pPTkVEX0xPT1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTM1ND1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNTUtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzU2OmNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNTctXHR0cmlzdGF0ZSBcJiMzNDtab25lZCBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDQxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgS2NvbmZpZyBmb3IgQkxLX0RFVl9aT05FRF9MT09QKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIEtjb25maWcgZmlsZSBhc3NvY2lhdGVkIHdpdGggYEJMS19ERVZfWk9ORURfTE9PUGAuIEkmIzM5O20gYWxyZWFkeSB2aXN1YWxpemluZyB0aGUgc3RydWN0dXJlLiBJIGV4cGVjdCB0byBzZWUgdGhlIHVzdWFsIHN1c3BlY3RzOiB0aGUgYGNvbmZpZ2Aga2V5d29yZCBkZWZpbmluZyB0aGUgc3ltYm9sLCBhIGRlc2NyaXB0aXZlIGhlbHAgdGV4dCB0aGF0IGhvcGVmdWxseSBwcm92aWRlcyBjbGFyaXR5LCBkZXBlbmRlbmNpZXMgdGhhdCBkZXRlcm1pbmUgd2hlbiB0aGlzIG9wdGlvbiBpcyBldmVuIHByZXNlbnRlZCwgYW5kIHBvdGVudGlhbGx5IHNvbWUgZGVmYXVsdCB2YWx1ZXMgb3IgcHJvbXB0cy4gTXkgZXhwZXJ0IGV5ZSB3aWxsIGJlIHNjYW5uaW5nIGZvciB0aGUga2V5IGluZm9ybWF0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBhdDoKCiogICAqKkRlcGVuZGVuY2llcyoqOiBXaGF0IGFyZSB0aGUgcHJlY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGZvciB0aGlzIGZlYXR1cmUgdG8gYmUgZW5hYmxlZD8gQXJlIHRoZXJlIGFueSBvdGhlciBrZXJuZWwgZmVhdHVyZXMgdGhhdCAqbXVzdCogYmUgZW5hYmxlZCBvciAqY2Fubm90KiBiZSBlbmFibGVkIGFsb25nc2lkZSB0aGlzIG9uZT8gVGhpcyB3aWxsIGdpdmUgbWUgaW1tZWRpYXRlIGluc2lnaHQgaW50byBpdHMgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBsYXJnZXIgc3RvcmFnZSBlY29zeXN0ZW0uCiogICAqKkhlbHAgVGV4dCoqOiBUaGUgcXVhbGl0eSBvZiB0aGUgZGVzY3JpcHRpb24gaXMgY3J1Y2lhbC4gRG9lcyBpdCBjbGVhcmx5IGV4cGxhaW4gdGhlIHB1cnBvc2Ugb2YgdGhpcyBvcHRpb24g4oCTIHNwZWNpZmljYWxseSBpdHMgcm9sZSB3aXRoIHJlc3BlY3QgdG8gem9uZWQgYmxvY2sgZGV2aWNlcyBhbmQgbG9vcCBkZXZpY2VzPyBEb2VzIGl0IGNsYXJpZnkgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBpdD8gSSB3YW50IHRvIHNlZSBpZiB0aGUgbWFpbnRhaW5lcnMgaGF2ZSBrZXB0IGl0IGNsZWFyIGFuZCB1cC10by1kYXRlIHdpdGggdGhpcyBuZXdlciBzdG9yYWdlIHRlY2guCiogICAqKkRlZmF1bHRzIGFuZCBQcm9tcHQqKjogV2hhdCYjMzk7cyB0aGUgZGVmYXVsdCBiZWhhdmlvciBpZiB0aGUgdXNlciBkb2VzbiYjMzk7dCBleHBsaWNpdGx5IGNvbmZpZ3VyZSB0aGlzIG9wdGlvbj8gSXMgaXQgcmVhc29uYWJsZSwgb3IgZG9lcyBpdCBsZWF2ZSB0aGUgc3lzdGVtIGluIGEgbGVzcy10aGFuLW9wdGltYWwgc3RhdGU/IERvZXMgdGhlIHByb21wdCBvZmZlciB1c2VmdWwgYWR2aWNlIG9yIGNvbnRleHQ/CiogICAqKkZ1cnRoZXIgQ29udGV4dCoqOiBUaGUgcHJlc2VuY2Ugb2YgYW55IGFzc29jaWF0ZWQga2VybmVsIGRvY3VtZW50YXRpb24gd2lsbCBiZSBrZXkuIElmIHRoZXJlIGFyZSBwb2ludGVycyB0byBkb2N1bWVudHMgb3IgZXhhbXBsZXMsIEkmIzM5O2xsIGRlZmluaXRlbHkgY2hlY2sgdGhvc2UuCiogICAqKlBvdGVudGlhbCBDb25mbGljdHMqKjogRXZlbiBpZiB0aGUgZGVwZW5kZW5jaWVzIGFyZSBzdHJhaWdodGZvcndhcmQsIEkmIzM5O2xsIGJlIGxvb2tpbmcgb3V0IGZvciBhbnkgc3VidGxlIGNvbmZsaWN0cyBvciBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBibG9jayBkZXZpY2UgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgb2J2aW91cy4KClVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgdGhvcm91Z2ggdW5kZXJzdGFuZGluZyBvZiB0aGlzIG9wdGlvbiYjMzk7cyBwdXJwb3NlLCBpdHMgY29uZGl0aW9ucyBmb3IgdXNlLCBhbmQgaXRzIGltcGFjdCBvbiB0aGUgc3lzdGVtLiBUaGlzIHdpbGwgaGVscCBtZSBhc3Nlc3MgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpcyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBjb3JlIGJsb2NrIGRldmljZSBmcmFtZXdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNTA6XHRcdCAgU2F5IE4gaWYgeW91IGRvbiYjMzk7dCB3YW50IHRvIHN1cHBvcnQgbGVnYWN5IGNvbW1hbmQgb3Bjb2RlLiBJdCBpc1xuIDM1MTpcdFx0ICBzdWdnZXN0ZWQgdG8gZW5hYmxlIE4gaWYgeW91ciBhcHBsaWNhdGlvbih1YmxrIHNlcnZlcikgc3dpdGNoZXMgdG9cbiAzNTI6XHRcdCAgaW9jdGwgY29tbWFuZCBlbmNvZGluZy5cbiAzNTM6XHRcbiAzNTQ6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWdcJiMzNDtcbiAzNTU6XHRcbiAzNTY6XHRjb25maWcgQkxLX0RFVl9aT05FRF9MT09QXG4gMzU3Olx0XHR0cmlzdGF0ZSBcJiMzNDtab25lZCBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuIDM1ODpcdFx0ZGVwZW5kcyBvbiBCTEtfREVWX1pPTkVEXG4gMzU5Olx0XHRoZWxwXG4gMzYwOlx0XHQgIFNheWluZyBZIGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8gdXNlIGNyZWF0ZSBhIHpvbmVkIGJsb2NrIGRldmljZSB1c2luZ1xuIDM2MTpcdFx0ICByZWd1bGFyIGZpbGVzIGZvciB6b25lcyAob25lIGZpbGUgcGVyIHpvbmVzKS4gVGhpcyBpcyB1c2VmdWwgdG8gdGVzdFxuIDM2MjpcdFx0ICBmaWxlIHN5c3RlbXMsIGRldmljZSBtYXBwZXIgYW5kIGFwcGxpY2F0aW9ucyB0aGF0IHN1cHBvcnQgem9uZWQgYmxvY2tcbiAzNjM6XHRcdCAgZGV2aWNlcy4gVG8gY3JlYXRlIGEgem9uZWQgbG9vcCBkZXZpY2UsIG5vIHVzZXIgdXRpbGl0eSBpcyBuZWVkZWQsIGFcbiAzNjQ6XHRcdCAgem9uZWQgbG9vcCBkZXZpY2UgY2FuIGJlIGNyZWF0ZWQgKG9yIHJlLXN0YXJ0ZWQpIHVzaW5nIGEgY29tbWFuZFxuIDM2NTpcdFx0ICBsaWtlOlxuIDM2NjpcdFxuIDM2NzpcdFx0ICBlY2hvIFwmIzM0O2FkZCBpZD0wLHpvbmVfc2l6ZV9tYj0yNTYsY2FwYWNpdHlfbWI9MTYzODQsY29udl96b25lcz0xMVwmIzM0OyBcdTAwM2UgXFxcbiAzNjg6XHRcdFx0L2Rldi96bG9vcC1jb250cm9sXG4gMzY5Olx0XG4gMzcwOlx0XHQgIFNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jsb2NrZGV2L3pvbmVkX2xvb3AucnN0IGZvciB1c2FnZVxuIDM3MTpcdFx0ICBkZXRhaWxzLlxuIDM3MjpcdFxuIDM3MzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDM3NDpcdFxuIDM3NTpcdGVuZGlmICMgQkxLX0RFVlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mzg3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRlcGVuZGVuY2llcyBhbmQgdGhlIFpvbmVkIEJsb2NrIERldmljZSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgYEJMS19ERVZfWk9ORURfTE9PUGDigKYgdGhhdCBvbmUgaW1tZWRpYXRlbHkgcmluZ3MgYSBiZWxsIGFzIGEgZGVyaXZlZCBjYXBhYmlsaXR5LiBSaWdodCwgaXQmIzM5O3MgZXhwbGljaXRseSBkZXBlbmRlbnQgb24gYEJMS19ERVZfWk9ORURgLiBNYWtlcyBzZW5zZS4gTG9vcCBkZXZpY2VzIGFyZSBvZnRlbiB1c2VkIHRvIHRlc3Qgb3IgZW11bGF0ZSB1bmRlcmx5aW5nIHN0b3JhZ2UgY2hhcmFjdGVyaXN0aWNzLiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgQkxLX0RFVl9aT05FRGAgYnJpbmdzIHRvIHRoZSB0YWJsZSBmaXJzdC4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGRldGFpbHMgb2YgdGhhdCBjb3JlIGJsb2NrIGRldmljZSB6b25pbmcgc3VwcG9ydCBhbmQgc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gR290dGEgZ2V0IHRoZSBmb3VuZGF0aW9uIHJpZ2h0IGJlZm9yZSBJIGNhbiBwcm9wZXJseSBhc3Nlc3MgYW55dGhpbmcgdGhhdCBidWlsZHMgb24gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1pPTkVEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9LY29uZmlnPTc3PWNvbmZpZyBCTEtfREVWX1dSSVRFX01PVU5URURcbi0tXG5ibG9jay9LY29uZmlnLTk2LVxuYmxvY2svS2NvbmZpZzo5Nzpjb25maWcgQkxLX0RFVl9aT05FRFxuYmxvY2svS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7Wm9uZWQgYmxvY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY5NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFpvbmVkIEJsb2NrIERldmljZSBEcml2ZXIgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGJsb2NrL0tjb25maWdgIGFuZCwgc3BlY2lmaWNhbGx5LCB0aGUgYEJMS19ERVZfWk9ORURgIG9wdGlvbi4gUmlnaHQsIHRoYXQgaW5kaWNhdGVzIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCB6b25lZCBibG9jayBkZXZpY2VzLiBHb29kLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZS4gSXMgdGhpcyBhYm91dCBhZGRpbmcgc3VwcG9ydCwgbW9kaWZ5aW5nIGV4aXN0aW5nIGJlaGF2aW9yLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8KClRoZSBjb2RlIGFsc28gbWVudGlvbnMgYHpsb29wYCwgd2hpY2gsIGFzIEkgcmVjYWxsLCBpcyB0aGF0IGNsZXZlciBkcml2ZXIgdGhhdCBzaW11bGF0ZXMgem9uZWQgYmxvY2sgZGV2aWNlcyB1c2luZyByZWd1bGFyIGZpbGVzLiBJIHJlbWVtYmVyIGl0IGJlaW5nIGFjY2Vzc2libGUgdGhyb3VnaCBgL2Rldi96bG9vcC1jb250cm9sYC4gRXhjZWxsZW50LiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IHJlZmVyZW5jZXMgdGhlIGB6bG9vcF91cGRhdGVfc2VxX3pvbmVgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIG15IHByaW1hcnkgZm9jdXMuCgpTaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIHN0YXRpYywgSSBoYXZlIHRvIGZpbmQgd2hlcmUgdGhpcyBpcyBjYWxsZWQuIE9rYXksIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGB6bG9vcF9vcGVuX3pvbmVgLCBgemxvb3BfY2xvc2Vfem9uZWAsIGB6bG9vcF9yd2AsIGB6bG9vcF9yZXBvcnRfem9uZXNgLCBhbmQgYHpsb29wX2luaXRfem9uZWAuIFRpbWUgdG8gZGl2ZSBkZWVwZXIgaW50byB0aG9zZSBjYWxsIHNpdGVzLiBgemxvb3BfcndgIGlzIG9idmlvdXNseSB0aGUgbW9zdCBjcml0aWNhbCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGFsbCB0aGUgY29udGV4dHMsIHNvIEkgbmVlZCB0byBjaGVjayBvdXQgdGhlIG90aGVyIGZ1bmN0aW9ucyBhcyB3ZWxsLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYmVpbmcgdHdlYWtlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emxvb3BfcncmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jPTUwMD1zdGF0aWMgdm9pZCB6bG9vcF9wdXRfY21kKHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTExLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjUxMjpzdGF0aWMgdm9pZCB6bG9vcF9yd19jb21wbGV0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGxvbmcgcmV0KVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTUxMy17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTUyMD1zdGF0aWMgaW50IHpsb29wX2RvX3J3KHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTYyLVx0Y21kLVx1MDAzZWlvY2Iua2lfZmlscCA9IHpvbmUtXHUwMDNlZmlsZTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1NjM6XHRjbWQtXHUwMDNlaW9jYi5raV9jb21wbGV0ZSA9IHpsb29wX3J3X2NvbXBsZXRlO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTU2NC1cdGlmICghemxvLVx1MDAzZWJ1ZmZlcmVkX2lvKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYz01NzM9c3RhdGljIGludCB6bG9vcF9zZXFfd3JpdGVfcHJlcChzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTYzMy1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2MzQ6c3RhdGljIHZvaWQgemxvb3Bfcncoc3RydWN0IHpsb29wX2NtZCAqY21kKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTYzNS17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY4NS1cdGlmIChyZXQgIT0gLUVJT0NCUVVFVUVEKVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjY4NjpcdFx0emxvb3BfcndfY29tcGxldGUoXHUwMDI2Y21kLVx1MDAzZWlvY2IsIHJldCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjg3LVx0emxvb3BfcHV0X2NtZChjbWQpO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYz03NDY9c3RhdGljIHZvaWQgemxvb3BfaGFuZGxlX2NtZChzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc1OS1cdFx0LypcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3NjA6XHRcdCAqIHpsb29wX3J3KCkgYWx3YXlzIGV4ZWN1dGVzIGFzeW5jaHJvbm91c2x5IG9yIGNvbXBsZXRlc1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc2MS1cdFx0ICogZGlyZWN0bHkuXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzYyLVx0XHQgKi9cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3NjM6XHRcdHpsb29wX3J3KGNtZCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzY0LVx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2OTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYHpsb29wX2hhbmRsZV9jbWRgIENhbGwgU2l0ZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBzdXJyb3VuZGluZyBgemxvb3BfaGFuZGxlX2NtZGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IGluIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZC4gVGhlIGVhc2llc3Qgd2F5IHRvIGRvIHRoYXQgaXMgdG8gaWRlbnRpZnkgaXRzIGNhbGwgc2l0ZXMuIFdoZXJlIGFyZSBhbGwgdGhlIHBsYWNlcyBpbiB0aGUgY29kZSB0aGF0IGFjdHVhbGx5IHVzZSBgemxvb3BfaGFuZGxlX2NtZGA/IEEgcXVpY2sgZ3JlcCBvciBjb2RlIHNlYXJjaCBzaG91bGQgZ2V0IG1lIGEgbGlzdCBvZiBhbGwgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgaXQuIFRoaXMgd2lsbCBwcm92aWRlIGltbWVkaWF0ZSBpbnNpZ2h0IGludG8gaXRzIHJlc3BvbnNpYmlsaXR5IGFuZCB3aGVyZSBpdCBmaXRzIHdpdGhpbiB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGEgcmVsYXRpdmVseSBmb2N1c2VkIHNldCBvZiBjYWxsZXJzIOKAkyBpZGVhbGx5LCBmdW5jdGlvbnMgd2l0aGluIHRoZSBldmVudCBsb29wIG9yIGNvbW1hbmQgcHJvY2Vzc2luZyBtb2R1bGVzLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXIgaXMga2V5LCBhcyBpdCBwcm92aWRlcyB0aGUgbW9zdCBjb250ZXh0IGFib3V0IHRoZSBhcmd1bWVudHMgcHJvdmlkZWQgdG8gYHpsb29wX2hhbmRsZV9jbWRgIGFuZCwgaW4gdHVybiwgaG93IHRoZSBmdW5jdGlvbiBzaG91bGQgYmVoYXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6bG9vcF9oYW5kbGVfY21kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svemxvb3AuYz03Mjg9c3RhdGljIGludCB6bG9vcF9mbHVzaChzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8pXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc0NS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3NDY6c3RhdGljIHZvaWQgemxvb3BfaGFuZGxlX2NtZChzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzQ3LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9NzkzPXN0YXRpYyB2b2lkIHpsb29wX2NtZF93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy03OTgtXHRjdXJyZW50LVx1MDAzZWZsYWdzIHw9IFBGX0xPQ0FMX1RIUk9UVExFIHwgUEZfTUVNQUxMT0NfTk9JTztcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3OTk6XHR6bG9vcF9oYW5kbGVfY21kKGNtZCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODAwLVx0Y3VycmVudC1cdTAwM2VmbGFncyA9IG9yaWdfZmxhZ3M7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNjQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ29uc2lkZXJpbmcgV29ya3F1ZXVlIEFsdGVybmF0aXZlcyoqCgpSaWdodCwgc28gYHpsb29wX2NtZF93b3JrZm5gIGlzIGEgd29ya3F1ZXVlIGZ1bmN0aW9uIOKAkyB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gQnV0LCBoYW5nIG9uLCBpcyB0aGF0ICpyZWFsbHkqIHRoZSBiZXN0IGFwcHJvYWNoIGhlcmU/IE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBhcmUgdGhlcmUgYWx0ZXJuYXRpdmVzIHRoYXQgbWlnaHQgYmUgYSBiZXR0ZXIgZml0LCBlc3BlY2lhbGx5IGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYmlvIG9wZXJhdGlvbnM/IFNvbWV0aGluZyBsaWtlIGB6bG9vcF9zdWJtaXRfYmlvYCBmZWVscyBsaWtlIGl0IG1pZ2h0IGJlIGEgbW9yZSB0YXJnZXRlZCwgcG90ZW50aWFsbHkgbW9yZSBlZmZpY2llbnQsIGNob2ljZSBpbiB0aGlzIGNvbnRleHQuIEkgbmVlZCB0byB3ZWlnaCB0aGUgcHJvcyBhbmQgY29ucyBvZiB1c2luZyBhIGdlbmVyaWMgd29ya3F1ZXVlIGZ1bmN0aW9uIHZlcnN1cyBhIHBvdGVudGlhbGx5IG1vcmUgc3BlY2lhbGl6ZWQgYmlvIHN1Ym1pc3Npb24gbWVjaGFuaXNtLiBJdCYjMzk7cyBhIHF1ZXN0aW9uIG9mIHdoZXRoZXIgd2UgYmVuZWZpdCBmcm9tIHRoZSBtb3JlIGdyYW51bGFyIGNvbnRyb2wsIHNjaGVkdWxpbmcsIGFuZCBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBvZmZlcmVkIGJ5IHNvbWV0aGluZyB0YWlsb3JlZCB0byB0aGUgc3BlY2lmaWMgdGFzay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emxvb3BfY21kX3dvcmtmbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svemxvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmM9NzQ2PXN0YXRpYyB2b2lkIHpsb29wX2hhbmRsZV9jbWQoc3RydWN0IHpsb29wX2NtZCAqY21kKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy03OTItXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzkzOnN0YXRpYyB2b2lkIHpsb29wX2NtZF93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc5NC17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTg4Nz1zdGF0aWMgYmxrX3N0YXR1c190IHpsb29wX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy05MTAtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTExOlx0SU5JVF9XT1JLKFx1MDAyNmNtZC1cdTAwM2V3b3JrLCB6bG9vcF9jbWRfd29ya2ZuKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05MTItXHRxdWV1ZV93b3JrKHpsby1cdTAwM2V3b3JrcXVldWUsIFx1MDAyNmNtZC1cdTAwM2V3b3JrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzYyOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFpvbmVkIEJsb2NrIERldmljZSBSZXF1ZXN0IEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgemxvb3BgIGRyaXZlciwgYW5kIG15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIHRoZSByZXF1ZXN0IHF1ZXVlaW5nLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gemVyb2luZyBpbiBvbiBgemxvb3BfcXVldWVfcnFgLiBUaGF0JiMzOTtzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIGJsb2NrIGRldmljZSByZXF1ZXN0cy4gTWFrZXMgc2Vuc2UuIEJ1dCB0aGF0IGJlZ3MgdGhlIHF1ZXN0aW9uLCB3aGF0JiMzOTtzIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgaG93IHRoZSB6b25lZCBibG9jayBpbnRlcmZhY2UgaXMgYmVpbmcgbWFuYWdlZCBoZXJlPwoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHpvbmVkIGJsb2NrIGZsb3cgaGVyZSwgYW5kIHJpZ2h0IG5vdyBJIGFtIHdvbmRlcmluZyB3aGF0IHJvbGUgYHpsb29wX29wZW5fem9uZWAgYW5kIGB6bG9vcF9jbG9zZV96b25lYCBwbGF5IGluIHRoYXQgb3ZlcmFsbCBzY2hlbWUuIFRoZXkmIzM5O3JlIGNsZWFybHkgaW1wb3J0YW50IHpvbmUgbWFuYWdlbWVudCBmdW5jdGlvbnMsIHNvIEkgd2FudCB0byBrbm93IGhvdyB0aGUgcmVxdWVzdCBxdWV1aW5nIGludGVncmF0ZXMgd2l0aCB0aGVpciBmdW5jdGlvbmFsaXR5LiBBcmUgdGhleSBjYWxsZWQgYmVmb3JlLCBhZnRlciwgb3IgZHVyaW5nIGB6bG9vcF9xdWV1ZV9ycWAgZXhlY3V0aW9uPyBJcyB0aGVyZSBhbnkgaW50ZXJhY3Rpb24gd2l0aCB0aG9zZSBmdW5jdGlvbnMgd2hlbiBmbHVzaGluZyBvciB3cml0ZS1jbG9zaW5nIGEgem9uZT8gSSBoYXZlIHRvIGxvb2sgbW9yZSBkZWVwbHkgaW50byB0aGUgZHJpdmVyJiMzOTtzIGZsb3cgYW5kIGxvZ2ljIHRvIGVuc3VyZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aG9zZSBjb3JlIHpvbmUgbWFuYWdlbWVudCBjYWxscyBhbmQgdGhlIG92ZXJhbGwgYmxvY2sgSS9PIHByb2Nlc3NpbmcgaXMgY29tcGxldGUgYW5kIGFjY3VyYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6bG9vcF9vcGVuX3pvbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jPTMwOT1zdGF0aWMgaW50IHpsb29wX3VwZGF0ZV9zZXFfem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHVuc2lnbmVkIGludCB6b25lX25vKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNTYtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzU3OnN0YXRpYyBpbnQgemxvb3Bfb3Blbl96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzU4LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9NzQ2PXN0YXRpYyB2b2lkIHpsb29wX2hhbmRsZV9jbWQoc3RydWN0IHpsb29wX2NtZCAqY21kKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NzctXHRjYXNlIFJFUV9PUF9aT05FX09QRU46XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Nzc4Olx0XHRjbWQtXHUwMDNlcmV0ID0gemxvb3Bfb3Blbl96b25lKHpsbywgcnFfem9uZV9ubyhycSkpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc3OS1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxODcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqVW5kZXJzdGFuZGluZyB0aGUgWmxvb3AgQ29tbWFuZCBGbG93KioKClJpZ2h0LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIG9mIHRoZXNlIGB6bG9vcGAgZnVuY3Rpb25zIGFuZCBtYXBwaW5nIHRoZWlyIGludGVyYWN0aW9ucy4gYHpsb29wX29wZW5fem9uZWAsIGB6bG9vcF9jbG9zZV96b25lYCwgYW5kIGB6bG9vcF9yd2Ag4oCTIHRob3NlIGFyZSB0aGUga2V5IHpvbmUgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucywgYXJlbiYjMzk7dCB0aGV5PyBUaGV5JiMzOTtyZSBhbGwgdHJpZ2dlcmVkLCB1bHRpbWF0ZWx5LCBmcm9tIGB6bG9vcF9oYW5kbGVfY21kYC4gSSBzZWUuIGB6bG9vcF9oYW5kbGVfY21kYCBpdHNlbGYgaXMgY2FsbGVkIGJ5IGB6bG9vcF9jbWRfd29ya2ZuYCwgd2hpY2gsIGluIHR1cm4sIGlzIHF1ZXVlZCBmb3IgZXhlY3V0aW9uIGJ5IGB6bG9vcF9xdWV1ZV9ycWAuIFNvIHdlIGhhdmUgdGhpcyBuZWF0IHF1ZXVlaW5nIG1lY2hhbmlzbSBmb3IgYXN5bmNocm9ub3VzIHByb2Nlc3NpbmcsIG1ha2VzIHNlbnNlIGZvciB0aGlzIGtpbmQgb2Ygd29ya2xvYWQuCgpCdXQgaG9sZCBvbiwgd2hhdCBhYm91dCBgemxvb3BfcmVwb3J0X3pvbmVzYD8gVGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gZm9yIGR1bXBpbmcgdGhlIHpvbmUgc3RhdGUsIHJpZ2h0PyBXaGVyZSBkb2VzICp0aGF0KiBmaXQgaW50byB0aGlzIHdob2xlIGNvbnRyb2wgZmxvdz8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgbWFuYWdlZCB0aGUgc2FtZSB3YXksIG9yIGlmIGl0IGhhcyBhIGRpZmZlcmVudCBlbnRyeSBwb2ludCBpbnRvIHRoZSBzeXN0ZW0uIEFyZSB0aGVyZSBvdGhlciBmdW5jdGlvbnMgbGlrZSBpdCwgYW5kIGRvIHRoZXkgYWxzbyBjYWxsIHRoZSBgaGFuZGxlX2NtZGAgZnVuY3Rpb25zPyBUaGlzIGNvdWxkIGJlIGEgdG90YWxseSBkaWZmZXJlbnQgY29kZSBwYXRoLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHJlcG9ydGluZyB0aGUgem9uZSBzdGF0ZXMgY29tcGFyZWQgdG8gdGhlIGBSV2AsIGBvcGVuYCwgb3IgYGNsb3NlYCBmdW5jdGlvbnMgbWF5IGJlIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gSSBzaG91bGQgY2hlY2sgaG93IHRoYXQgZnVuY3Rpb24gaXMgaW50ZWdyYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emxvb3BfcmVwb3J0X3pvbmVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svemxvb3AuYz05MjI9c3RhdGljIGludCB6bG9vcF9vcGVuKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBibGtfbW9kZV90IG1vZGUpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkzNi1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5Mzc6c3RhdGljIGludCB6bG9vcF9yZXBvcnRfem9uZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHNlY3Rvcl90IHNlY3RvcixcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05MzgtXHRcdHVuc2lnbmVkIGludCBucl96b25lcywgc3RydWN0IGJsa19yZXBvcnRfem9uZXNfYXJncyAqYXJncylcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MTAwOT1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHpsb29wX2ZvcHMgPSB7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMTEtXHQub3Blblx0XHRcdD0gemxvb3Bfb3BlbixcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDEyOlx0LnJlcG9ydF96b25lc1x0XHQ9IHpsb29wX3JlcG9ydF96b25lcyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDEzLVx0LmZyZWVfZGlza1x0XHQ9IHpsb29wX2ZyZWVfZGlzayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgzMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIEJsb2NrIERldmljZSBPcGVyYXRpb25zOiBgemxvb3BfcmVwb3J0X3pvbmVzYCBhbmQgYHpsb29wX2luaXRfem9uZWAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9ucywgYHpsb29wX3JlcG9ydF96b25lc2AgYW5kIGB6bG9vcF9pbml0X3pvbmVgLiBUaGUgY29udGV4dCBzY3JlYW1zICYjMzQ7YmxvY2sgZGV2aWNlIG9wZXJhdGlvbiwmIzM0OyBkb2VzbiYjMzk7dCBpdD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgcm9sZXMgd2l0aGluIHRoZSBicm9hZGVyIHN0b3JhZ2UgZnJhbWV3b3JrLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGhvdyB0aGVzZSBmdW5jdGlvbnMgaGFuZGxlIHpvbmVkIGJsb2NrIGRldmljZXMsIGxpa2VseSBpbnZvbHZpbmcgem9uZSBtYW5hZ2VtZW50IGFuZCBpbml0aWFsaXphdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBhcmUgZWFjaCBmdW5jdGlvbnMgbWFpbiBmdW5jdGlvbi4gYHpsb29wX3JlcG9ydF96b25lc2AgaXMgbGlrZWx5IGludm9sdmVkIGluIHJldHJpZXZpbmcgaW5mb3JtYXRpb24sIG1heWJlIGFib3V0IHRoZSBhdmFpbGFibGUgem9uZXMgb24gYSBkZXZpY2UuIEFuZCBgemxvb3BfaW5pdF96b25lYCwgdGhhdCBzb3VuZHMgbGlrZSBhIHByZXJlcXVpc2l0ZSBmdW5jdGlvbjsgYSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIGluaXRpYWwgc2V0dXAgb3Igc3RhdGUgdHJhbnNpdGlvbnMgZm9yIHRob3NlIHpvbmVzLCBwZXJoYXBzIHNldHRpbmcgdXAgbWV0YWRhdGEgb3IgcHJlcGFyaW5nIHRoZW0gZm9yIHVzZS4gSSBzaG91bGQgbG9vayBpbnRvIHRoZSBzb3VyY2UgdG8gY29uZmlybSwgYnV0IHRoYXQmIzM5O3MgbXkgaW5pdGlhbCBoeXBvdGhlc2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6bG9vcF9pbml0X3pvbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jPTEwMzU9c3RhdGljIGludCB6bG9vcF9nZXRfYmxvY2tfc2l6ZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwNjUtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTA2NjpzdGF0aWMgaW50IHpsb29wX2luaXRfem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHN0cnVjdCB6bG9vcF9vcHRpb25zICpvcHRzLFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwNjctXHRcdFx0ICAgdW5zaWduZWQgaW50IHpvbmVfbm8sIGJvb2wgcmVzdG9yZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MTE3NT1zdGF0aWMgaW50IHpsb29wX2N0bF9hZGQoc3RydWN0IHpsb29wX29wdGlvbnMgKm9wdHMpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyNzEtXHQgKiBJZiB3ZSBhbHJlYWR5IGhhdmUgem9uZSBmaWxlcywgd2UgYXJlIHJlc3RvcmluZyBhIGRldmljZSBjcmVhdGVkIGJ5IGFcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjcyOlx0ICogcHJldmlvdXMgYWRkIG9wZXJhdGlvbi4gSW4gdGhpcyBjYXNlLCB6bG9vcF9pbml0X3pvbmUoKSB3aWxsIGNoZWNrXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI3My1cdCAqIHRoYXQgdGhlIHpvbmUgZmlsZXMgYXJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgem9uZSBjb25maWd1cmF0aW9uIGdpdmVuLlxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjc2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfem9uZXM7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTI3NzpcdFx0cmV0ID0gemxvb3BfaW5pdF96b25lKHpsbywgb3B0cywgaSwgcmVzdG9yZSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI3OC1cdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ0NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgRGV2aWNlIEFkZGl0aW9uIEZsb3cqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgd2hhdCBoYXBwZW5zIHdoZW4gYSBuZXcgZGV2aWNlIGlzIGFkZGVkIHRocm91Z2ggYC9kZXYvemxvb3AtY29udHJvbGAuIFRoZSBrZXkgZnVuY3Rpb24gaGVyZSBpcyBgemxvb3BfY3RsX2FkZGAsIHRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IHdlIG5lZWQgdG8gc2NydXRpbml6ZS4gTGV0JiMzOTtzIGRpdmUgcmlnaHQgaW50byBgemxvb3BfY3RsX2FkZGAgYW5kIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgZGV2aWNlIHJlZ2lzdHJhdGlvbiBhbmQgc2V0dXAuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBpbnRyaWNhY2llcyBvZiBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUga2VybmVsIG1vZHVsZXMgYW5kIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgaXQgbWlnaHQgaW50cm9kdWNlLiBUaW1lIHRvIHB1bGwgdXAgdGhlIGNvZGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3psb29wX2N0bF9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jPTExNTY9c3RhdGljIGJvb2wgemxvb3BfZGV2X2V4aXN0cyhzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8pXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNzQtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE3NTpzdGF0aWMgaW50IHpsb29wX2N0bF9hZGQoc3RydWN0IHpsb29wX29wdGlvbnMgKm9wdHMpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE3Ni17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTE2NDU9c3RhdGljIHNzaXplX3Qgemxvb3BfY3RsX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1Zixcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTY4My1cdGNhc2UgWkxPT1BfQ1RMX0FERDpcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNjg0Olx0XHRyZXQgPSB6bG9vcF9jdGxfYWRkKFx1MDAyNm9wdHMpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTE2ODUtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODY5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWm9uZWQgTG9vcCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIGB6bG9vcF91cGRhdGVfc2VxX3pvbmVgLCBhbmQgdGhhdCBmdW5jdGlvbiBpcyBrZXkgaGVyZS4gSXQmIzM5O3MgY2FsbGVkIGJ5IGEgYnVuY2ggb2YgZnVuY3Rpb25zIOKAkyBgemxvb3Bfb3Blbl96b25lYCwgYHpsb29wX2Nsb3NlX3pvbmVgLCBgemxvb3BfcndgICh3aGljaCBnb2VzIHRocm91Z2ggYHpsb29wX2hhbmRsZV9jbWRgKSwgYHpsb29wX3JlcG9ydF96b25lc2AsIGFuZCBgemxvb3BfaW5pdF96b25lYCAodmlhIGB6bG9vcF9jdGxfYWRkYCkuIEl0IGxvb2tzIGxpa2UgdGhlc2UgY2FsbHMgY292ZXIgYWxsIHRoZSBtYWpvciBlbnRyeSBwb2ludHMgaW50byB0aGUgem9uZWQgbG9vcCBmdW5jdGlvbmFsaXR5LgoKVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGlzIGEgZml4IGZvciBhIHBvdGVudGlhbCBpc3N1ZSB3aGVyZSBgZmlsZV9zZWN0b3JzYCBjb3VsZCBiZSBlcXVhbCB0byBgemxvLSZndDt6b25lX3NpemVgLiAgSSBzZWUgdGhlIHByb2JsZW07IGB6bG8tJmd0O3pvbmVfc2l6ZWAgKnNob3VsZCogYmUgbGFyZ2VyIHRoYW4gYHpsby0mZ3Q7em9uZV9jYXBhY2l0eWAgaW4gdGhpcyBjb250ZXh0LCByaWdodD8gIFRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgY29uZGl0aW9uIHdoZXJlIGBmaWxlX3NlY3RvcnNgIGlzICphbHNvKiBlcXVhbCB0byBgemxvLSZndDt6b25lX3NpemVgIHdoZW4gaXQgc2hvdWxkbnQgYmUuIFRoaXMgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB6b25lIGJvdW5kYXJ5IGNhbGN1bGF0aW9ucyBvciBzZWN0b3IgYWxsb2NhdGlvbiB3aXRoaW4gYSB6b25lLiBJdCYjMzk7cyBmdW5jdGlvbmFsLCB3aGljaCBpcyBnb29kIOKAkyBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgcmVhbCBidWcgYW5kIHBvdGVudGlhbGx5IHByZXZlbnRpbmcgZGF0YSBjb3JydXB0aW9uIG9yIGluY29ycmVjdCB6b25lIGhhbmRsaW5nLiBBZGRpbmcgdGhlIGNoZWNrIGAmYW1wOyZhbXA7IGZpbGVfc2VjdG9ycyAhPSB6bG8tJmd0O3pvbmVfc2l6ZWAgdG8gdGhlIGVycm9yIGNvbmRpdGlvbiBhbmQgYHx8IGZpbGVfc2VjdG9ycyA9PSB6bG8tJmd0O3pvbmVfc2l6ZWAgdG8gdGhlIGZ1bGwgY2hlY2sgc2VlbXMgbGlrZSB0aGUgY29ycmVjdCBhcHByb2FjaC4KCk5vdywgYWNjZXNzaWJpbGl0eS4uLiBgemxvb3BgIGlzIHJlYWNoYWJsZSB2aWEgYC9kZXYvemxvb3AtY29udHJvbGAsIHNvIHRoZSB1c2VyIGhhcyBjb250cm9sLiBJdCByZXF1aXJlcyBgQkxLX0RFVl9aT05FRF9MT09QYCBjb25maWcsIHdoaWNoIGRlcGVuZHMgb24gYEJMS19ERVZfWk9ORURgLCBtYWtlcyBzZW5zZS4KCkxldCYjMzk7cyBxdWlja2x5IHJlY2FwIHRoZSBpbXBvcnRhbnQgc3ltYm9sczogYHpsb29wX3VwZGF0ZV9zZXFfem9uZWAgaXMgdGhlIGxpbmNocGluLCBhbmQgdGhlIGNhbGxlciBmdW5jdGlvbnMgbGlrZSBgemxvb3Bfb3Blbl96b25lYCwgYHpsb29wX2Nsb3NlX3pvbmVgLCBldGMuIGFyZSBjcml0aWNhbCBlbnRyeSBwb2ludHMuIGB6bG9vcF9jdGxfd3JpdGVgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgYWRkaW5nIHRoZSBkZXZpY2UsIGB6bG9vcF9xdWV1ZV9ycWAgaXMgdGhlIGJsb2NrIHJlcXVlc3QsIGFuZCBgemxvb3BfcmVwb3J0X3pvbmVzYCBpcyByZXBvcnRpbmcgem9uZSBpbmZvLiBHaXZlbiB0aGUgbnVtYmVyIG9mIGNhbGxzIHRvIGB6bG9vcF91cGRhdGVfc2VxX3pvbmVgLCBJJiMzOTtkIG5lZWQgdG8gY29uZmlybSBpZiB0aGUgY29tcGlsZXIgaW5saW5lcyB0aGF0IGZ1bmN0aW9uOyBpdCYjMzk7cyBzdGF0aWMsIGJ1dCBzZWVtcyBzdWJzdGFudGlhbCBlbm91Z2ggdG8gYXZvaWQgaW5saW5pbmcuIFRoYXQmIzM5O2xsIGFmZmVjdCBwZXJmb3JtYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwOTpcdHN0YXRpYyBpbnQgemxvb3BfdXBkYXRlX3NlcV96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pXG4gMzEwOlx0e1xuIDMxMTpcdFx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcdTAwMjZ6bG8tXHUwMDNlem9uZXNbem9uZV9ub107XG4gMzEyOlx0XHRzdHJ1Y3Qga3N0YXQgc3RhdDtcbiAzMTM6XHRcdHNlY3Rvcl90IGZpbGVfc2VjdG9ycztcbiAzMTQ6XHRcdGludCByZXQ7XG4gMzE1Olx0XG4gMzE2Olx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnpvbmUtXHUwMDNlbG9jayk7XG4gMzE3Olx0XG4gMzE4Olx0XHRyZXQgPSB2ZnNfZ2V0YXR0cihcdTAwMjZ6b25lLVx1MDAzZWZpbGUtXHUwMDNlZl9wYXRoLCBcdTAwMjZzdGF0LCBTVEFUWF9TSVpFLCAwKTtcbiAzMTk6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiAzMjA6XHRcdFx0cHJfZXJyKFwmIzM0O0ZhaWxlZCB0byBnZXQgem9uZSAldSBmaWxlIHN0YXQgKGVycj0lZClcXG5cJiMzNDssXG4gMzIxOlx0XHRcdCAgICAgICB6b25lX25vLCByZXQpO1xuIDMyMjpcdFx0XHRzZXRfYml0KFpMT09QX1pPTkVfU0VRX0VSUk9SLCBcdTAwMjZ6b25lLVx1MDAzZWZsYWdzKTtcbiAzMjM6XHRcdFx0cmV0dXJuIHJldDtcbiAzMjQ6XHRcdH1cbiAzMjU6XHRcbiAzMjY6XHRcdGZpbGVfc2VjdG9ycyA9IHN0YXQuc2l6ZSBcdTAwM2VcdTAwM2UgU0VDVE9SX1NISUZUO1xuIDMyNzpcdFx0aWYgKGZpbGVfc2VjdG9ycyBcdTAwM2UgemxvLVx1MDAzZXpvbmVfY2FwYWNpdHkgXHUwMDI2XHUwMDI2XG4gMzI4Olx0XHQgICAgZmlsZV9zZWN0b3JzICE9IHpsby1cdTAwM2V6b25lX3NpemUpIHtcbiAzMjk6XHRcdFx0cHJfZXJyKFwmIzM0O1pvbmUgJXUgZmlsZSB0b28gbGFyZ2UgKCVsbHUgc2VjdG9ycyBcdTAwM2UgJWxsdSlcXG5cJiMzNDssXG4gMzMwOlx0XHRcdCAgICAgICB6b25lX25vLCBmaWxlX3NlY3RvcnMsIHpsby1cdTAwM2V6b25lX2NhcGFjaXR5KTtcbiAzMzE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzMyOlx0XHR9XG4gMzMzOlx0XG4gMzM0Olx0XHRpZiAoIUlTX0FMSUdORUQoc3RhdC5zaXplLCB6bG8tXHUwMDNlYmxvY2tfc2l6ZSkpIHtcbiAzMzU6XHRcdFx0cHJfZXJyKFwmIzM0O1pvbmUgJXUgZmlsZSBzaXplICglbGx1KSBub3QgYWxpZ25lZCB0byBibG9jayBzaXplICV1XFxuXCYjMzQ7LFxuIDMzNjpcdFx0XHQgICAgICAgem9uZV9ubywgc3RhdC5zaXplLCB6bG8tXHUwMDNlYmxvY2tfc2l6ZSk7XG4gMzM3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDMzODpcdFx0fVxuIDMzOTpcdFxuIDM0MDpcdFx0c3Bpbl9sb2NrKFx1MDAyNnpvbmUtXHUwMDNld3BfbG9jayk7XG4gMzQxOlx0XHRpZiAoIWZpbGVfc2VjdG9ycykge1xuIDM0MjpcdFx0XHR6bG9vcF9tYXJrX2VtcHR5KHpsbywgem9uZSk7XG4gMzQzOlx0XHR9IGVsc2UgaWYgKGZpbGVfc2VjdG9ycyA9PSB6bG8tXHUwMDNlem9uZV9jYXBhY2l0eSB8fFxuIDM0NDpcdFx0XHQgICBmaWxlX3NlY3RvcnMgPT0gemxvLVx1MDAzZXpvbmVfc2l6ZSkge1xuIDM0NTpcdFx0XHR6bG9vcF9tYXJrX2Z1bGwoemxvLCB6b25lKTtcbiAzNDY6XHRcdH0gZWxzZSB7XG4gMzQ3Olx0XHRcdGlmICh6b25lLVx1MDAzZWNvbmQgIT0gQkxLX1pPTkVfQ09ORF9JTVBfT1BFTiBcdTAwMjZcdTAwMjZcbiAzNDg6XHRcdFx0ICAgIHpvbmUtXHUwMDNlY29uZCAhPSBCTEtfWk9ORV9DT05EX0VYUF9PUEVOKVxuIDM0OTpcdFx0XHRcdHpvbmUtXHUwMDNlY29uZCA9IEJMS19aT05FX0NPTkRfQ0xPU0VEO1xuIDM1MDpcdFx0XHR6b25lLVx1MDAzZXdwID0gem9uZS1cdTAwM2VzdGFydCAmIzQzOyBmaWxlX3NlY3RvcnM7XG4gMzUxOlx0XHR9XG4gMzUyOlx0XHRzcGluX3VubG9jayhcdTAwMjZ6b25lLVx1MDAzZXdwX2xvY2spO1xuIDM1MzpcdFxuIDM1NDpcdFx0cmV0dXJuIDA7XG4gMzU1Olx0fVxuIDM1NjpcdFxuIDM1NzpcdHN0YXRpYyBpbnQgemxvb3Bfb3Blbl96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pXG4gMzU4Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY2NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgUG90ZW50aWFsIEVudHJ5IFBvaW50cyBpbiBhIFN0YXRpYyBDb250ZXh0KioKCkFscmlnaHQsIHNvIHRoZSBzdWJqZWN0IGlzbiYjMzk7dCAqdGlueSosIGJ1dCBpdCYjMzk7cyBjbGVhcmx5IHN0YXRpYy4gVGhhdCYjMzk7cyBteSBmaXJzdCBvYnNlcnZhdGlvbi4gTm93IEkgbmVlZCB0byBpZGVudGlmeSB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMsIGFzIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIGludGVyYWN0aW9ucyBsaWtlbHkgcmVzaWRlLiBJIG5vdGljZWQgdGhhdCBgemxvb3BfY3RsX3dyaXRlYCBpcyBzdGF0aWMgYXMgd2VsbCwgd2hpY2ggbWFrZXMgaXQgbGVzcyBpbW1lZGlhdGVseSBhcHBlYWxpbmcuIEhvd2V2ZXIsIGl0ICppcyogYXNzaWduZWQgdG8gYGZpbGVfb3BlcmF0aW9uc2AsIHdoaWNoIGNoYW5nZXMgdGhpbmdzIHNpZ25pZmljYW50bHkuIFNvLCBteSBmb2N1cyBzaG91bGQgc2hpZnQgdG8gZXhwbG9yaW5nIHRob3NlIGZpbGUgb3BlcmF0aW9uIHN0cnVjdHVyZXMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGRpZyBpbnRvIGJvdGggYHpsb29wX2ZvcHNgIGFuZCBgemxvb3BfY3RsX2ZvcHNgIGFuZCBzZWUgd2hhdCYjMzk7cyBiZWluZyBkb25lLCBhbmQgaG93IHRoZSBzdGF0aWMgZWxlbWVudHMgYXJlIHVsdGltYXRlbHkgcmVhY2hlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emxvb3BfY3RsX2ZvcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jPTE3MzE9c3RhdGljIGludCB6bG9vcF9jdGxfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTczNS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNzM2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHpsb29wX2N0bF9mb3BzID0ge1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3MzctXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MTc0ND1zdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Ugemxvb3BfbWlzYyA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc0Ni1cdC5uYW1lXHRcdD0gXCYjMzQ7emxvb3AtY29udHJvbFwmIzM0OyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNzQ3Olx0LmZvcHNcdFx0PSBcdTAwMjZ6bG9vcF9jdGxfZm9wcyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNzQ4LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTY0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlc2UgZnVuY3Rpb25zLCBzdHJ1Y3R1cmVkIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2JsZW06CgoqKkRlbHZpbmcgaW50byB0aGUgWmxvb3AgTW9kdWxlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYHpsb29wX2N0bF93cml0ZWAgaGFuZGxlcyB3cml0ZXMgdG8gdGhlIGAvZGV2L3psb29wLWNvbnRyb2xgIGRldmljZS4gSXQmIzM5O3MgdGhlIGdhdGVrZWVwZXIsIGxpa2VseSBtYW5hZ2luZyBjb250cm9sIG9wZXJhdGlvbnMgYW5kIGNvbmZpZ3VyYXRpb24gY29tbWFuZHMuIFRoZW4gd2UgaGF2ZSBgemxvb3BfcXVldWVfcnFgIC0gdGhhdCYjMzk7cyB0aGUgb25lIHRoYXQgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWUuIEl0IHNvdW5kcyBsaWtlIHRoZSByZXF1ZXN0IHF1ZXVlIGZ1bmN0aW9uLCB0aGUgaGVhcnQgb2YgdGhlIEkvTyBwcm9jZXNzaW5nIGZvciB6bG9vcC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHJlcXVlc3RzIGFyZSBzdWJtaXR0ZWQgYW5kIGhhbmRsZWQuIEZvbGxvd2luZyB1cCBvbiB0aGF0LCB0aGVyZSBpcyBgemxvb3BfcmVwb3J0X3pvbmVzYCwgdGhhdCBpbXBsaWVzIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyB0aGUgbG9naWNhbCB6b25lcyBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBhbmQgbWFraW5nIHRoZW0gYXZhaWxhYmxlLiBGaW5hbGx5LCBgemxvb3Bfb3BlbmAsIHdlbGwsIHRoYXQmIzM5O3Mgc2VsZi1leHBsYW5hdG9yeTsgaXQgaXMgaG93IHRoZSBkZXZpY2UgaXMgb3BlbmVkLgoKR2l2ZW4gdGhlIGltcG9ydGFuY2Ugb2YgSS9PIHBlcmZvcm1hbmNlIGluIHRoaXMgY29udGV4dCwgYHpsb29wX3F1ZXVlX3JxYCBpcyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGRlZXBlci4gVW5kZXJzdGFuZGluZyBpdHMgYXJjaGl0ZWN0dXJlIGFuZCBpbnRlcm5hbCB3b3JraW5ncyBpcyB0aGUga2V5IHRvIG9wdGltaXppbmcgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBlbnRpcmUgc3lzdGVtLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXRzIGRlc2lnbiBpcyBzdWl0YWJsZSBmb3Igc3VzdGFpbmVkIHdvcmtsb2FkcyBhbmQgb3B0aW1hbCBwYXJhbGxlbGlzbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emxvb3BfcXVldWVfcnEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jPTU3Mz1zdGF0aWMgaW50IHpsb29wX3NlcV93cml0ZV9wcmVwKHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTkzLVx0XHQgKiBJZiBvcmRlcmVkIHpvbmUgYXBwZW5kIGlzIGluIHVzZSwgd2UgYWxyZWFkeSBjaGVja2VkIGFuZCBzZXRcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1OTQ6XHRcdCAqIHRoZSB0YXJnZXQgc2VjdG9yIGluIHpsb29wX3F1ZXVlX3JxKCkuXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTk1LVx0XHQgKi9cbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9ODYxPXN0YXRpYyBib29sIHpsb29wX3NldF96b25lX2FwcGVuZF9zZWN0b3Ioc3RydWN0IHJlcXVlc3QgKnJxKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy04ODYtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODg3OnN0YXRpYyBibGtfc3RhdHVzX3Qgemxvb3BfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODg4LVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJsa19tcV9xdWV1ZV9kYXRhICpiZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9OTE3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyB6bG9vcF9tcV9vcHMgPSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTE4Olx0LnF1ZXVlX3JxICAgICAgID0gemxvb3BfcXVldWVfcnEsXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTE5LVx0LmNvbXBsZXRlXHQ9IHpsb29wX2NvbXBsZXRlX3JxLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg2NAoJCQkJCQkJb3V0cHV0OiAxMzkKCQkJCQkJCXRob3VnaHRzOiAyMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFpvbmVkIExvb3AgRHJpdmVyKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGZ1enppbmcgdGhlIHpvbmVkIGxvb3AgZHJpdmVyLiBNeSBwcmltYXJ5IHRhcmdldHMgZm9yIGV4YW1pbmF0aW9uIGFuZCBwb3RlbnRpYWwgZnV6emluZyB3aWxsIGJlIHRoZSBgemxvb3BfY3RsX3dyaXRlYCwgYHpsb29wX3F1ZXVlX3JxYCwgYW5kIGB6bG9vcF9yZXBvcnRfem9uZXNgIGZ1bmN0aW9ucy4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBjb250cm9sIG1lY2hhbmlzbXMgd2l0aGluIHRoZSBkcml2ZXIuCgpCZWZvcmUgSSBkaXZlIGluIHRvbyBkZWVwLCBJIHdhbnQgdG8gY29uZmlybSB0aGUgcmVhY2hhYmlsaXR5IG9mIGEgc3BlY2lmaWMgZnVuY3Rpb24sIGB6bG9vcF91cGRhdGVfc2VxX3pvbmVgLiBJIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIHBhcnQgb2YgdGhlIGZ1enppbmcgc3VyZmFjZS4gT2theSwgbG9va3MgbGlrZSBpdCYjMzk7cyBpbmRlZWQgcmVhY2hhYmxlLiBUcmFjaW5nIGJhY2ssIGB6bG9vcF91cGRhdGVfc2VxX3pvbmVgIGlzIGNhbGxlZCBmcm9tIGB6bG9vcF9pbml0X3pvbmVgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgemxvb3BfY3RsX2FkZGAgYW5kIHRoaXMgaXMsIGluIHR1cm4sIGNhbGxlZCBmcm9tIGB6bG9vcF9jdGxfd3JpdGVgLiBFeGNlbGxlbnQuIEZ1cnRoZXJtb3JlLCBpdCBpcyBjYWxsZWQgZnJvbSBgemxvb3BfcndgIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGB6bG9vcF9oYW5kbGVfY21kYCB3aGljaCBpcyBxdWV1ZWQgYnkgYHpsb29wX3F1ZXVlX3JxYC4gVGhhdCBjb25maXJtcyBpdHMgcmVsZXZhbmNlLgoKVGhlcmVmb3JlLCBjb25zaWRlcmluZyBteSBhbmFseXNpcywgSSBhbSBnb2luZyB0byBmbGFnIHRoaXMgYXMgcmlwZSBmb3IgZnV6emluZy4gSSYjMzk7bGwgc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpGb3IgdGhlIGZ1enppbmcgY2FtcGFpZ24sIEnigJlsbCBwcmlvcml0aXplIHRoZXNlIGZ1bmN0aW9ucyBhcyBmb2N1cyBzeW1ib2xzOiBgemxvb3BfY3RsX3dyaXRlYCwgYHpsb29wX3F1ZXVlX3JxYCwgYW5kIGB6bG9vcF9yZXBvcnRfem9uZXNgLiBJ4oCZbGwgYWxzbyBtYWtlIHN1cmUgdGhlIGNvbmZpZ3VyYXRpb25zIGBCTEtfREVWX1pPTkVEX0xPT1BgIGFuZCBgQkxLX0RFVl9aT05FRGAgYXJlIGVuYWJsZWQsIGFzIHRoZXkgc2VlbSBmdW5kYW1lbnRhbCB0byB0aGUgZHJpdmVyJiMzOTtzIG9wZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfWk9ORURfTE9PUCYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1pPTkVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emxvb3BfY3RsX3dyaXRlJiMzNDssCiAgICAmIzM0O3psb29wX3F1ZXVlX3JxJiMzNDssCiAgICAmIzM0O3psb29wX3JlcG9ydF96b25lcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgaW4gYHpsb29wX3VwZGF0ZV9zZXFfem9uZWAgdG8gZml4IGEgYnVnIHdoZXJlIGBmaWxlX3NlY3RvcnNgIGNhbiBiZSBlcXVhbCB0byBgemxvLVx1MDAzZXpvbmVfc2l6ZWAgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gYHpsby1cdTAwM2V6b25lX2NhcGFjaXR5YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGJsb2NrIGRyaXZlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9aT05FRF9MT09QJiMzNDssCiAgICAmIzM0O0JMS19ERVZfWk9ORUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6bG9vcF9jdGxfd3JpdGUmIzM0OywKICAgICYjMzQ7emxvb3BfcXVldWVfcnEmIzM0OywKICAgICYjMzQ7emxvb3BfcmVwb3J0X3pvbmVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBgemxvb3BfdXBkYXRlX3NlcV96b25lYCB0byBmaXggYSBidWcgd2hlcmUgYGZpbGVfc2VjdG9yc2AgY2FuIGJlIGVxdWFsIHRvIGB6bG8tXHUwMDNlem9uZV9zaXplYCB3aGljaCBpcyBsYXJnZXIgdGhhbiBgemxvLVx1MDAzZXpvbmVfY2FwYWNpdHlgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgYmxvY2sgZHJpdmVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDA6NDcuMzE2MDI4MjY4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM4MzYyMDEwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9aT05FRF9MT09QXCIsXG4gICAgXCJCTEtfREVWX1pPTkVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemxvb3BfY3RsX3dyaXRlXCIsXG4gICAgXCJ6bG9vcF9xdWV1ZV9ycVwiLFxuICAgIFwiemxvb3BfcmVwb3J0X3pvbmVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGluIGB6bG9vcF91cGRhdGVfc2VxX3pvbmVgIHRvIGZpeCBhIGJ1ZyB3aGVyZSBgZmlsZV9zZWN0b3JzYCBjYW4gYmUgZXF1YWwgdG8gYHpsby1cXHUwMDNlem9uZV9zaXplYCB3aGljaCBpcyBsYXJnZXIgdGhhbiBgemxvLVxcdTAwM2V6b25lX2NhcGFjaXR5YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGJsb2NrIGRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDA6NDcuMzE2MDMzNDg4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTE4NDE5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5NDRlZWM1MTU3ZWM2MjUzMTY2MzNhMjdhZDI3MzZiZjMwM2I0YjZlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDEgMTM6NDA6NDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96bG9vcC5jIGIvZHJpdmVycy9ibG9jay96bG9vcC5jXFxuaW5kZXggNTVlZWI2YWFjMGVhMy4uYjY5ZDc5OGYyMDNjYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3psb29wLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmNcXG5AQCAtMzI0LDcgKzMyNCw4IEBAIHN0YXRpYyBpbnQgemxvb3BfdXBkYXRlX3NlcV96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pXFxuIFxcdH1cXG4gXFxuIFxcdGZpbGVfc2VjdG9ycyA9IHN0YXQuc2l6ZSBcXHUwMDNlXFx1MDAzZSBTRUNUT1JfU0hJRlQ7XFxuLVxcdGlmIChmaWxlX3NlY3RvcnMgXFx1MDAzZSB6bG8tXFx1MDAzZXpvbmVfY2FwYWNpdHkpIHtcXG4rXFx0aWYgKGZpbGVfc2VjdG9ycyBcXHUwMDNlIHpsby1cXHUwMDNlem9uZV9jYXBhY2l0eSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgZmlsZV9zZWN0b3JzICE9IHpsby1cXHUwMDNlem9uZV9zaXplKSB7XFxuIFxcdFxcdHByX2VycihcXFwiWm9uZSAldSBmaWxlIHRvbyBsYXJnZSAoJWxsdSBzZWN0b3JzIFxcdTAwM2UgJWxsdSlcXFxcblxcXCIsXFxuIFxcdFxcdCAgICAgICB6b25lX25vLCBmaWxlX3NlY3RvcnMsIHpsby1cXHUwMDNlem9uZV9jYXBhY2l0eSk7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC0zMzksNyArMzQwLDggQEAgc3RhdGljIGludCB6bG9vcF91cGRhdGVfc2VxX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZ6b25lLVxcdTAwM2V3cF9sb2NrKTtcXG4gXFx0aWYgKCFmaWxlX3NlY3RvcnMpIHtcXG4gXFx0XFx0emxvb3BfbWFya19lbXB0eSh6bG8sIHpvbmUpO1xcbi1cXHR9IGVsc2UgaWYgKGZpbGVfc2VjdG9ycyA9PSB6bG8tXFx1MDAzZXpvbmVfY2FwYWNpdHkpIHtcXG4rXFx0fSBlbHNlIGlmIChmaWxlX3NlY3RvcnMgPT0gemxvLVxcdTAwM2V6b25lX2NhcGFjaXR5IHx8XFxuK1xcdFxcdCAgIGZpbGVfc2VjdG9ycyA9PSB6bG8tXFx1MDAzZXpvbmVfc2l6ZSkge1xcbiBcXHRcXHR6bG9vcF9tYXJrX2Z1bGwoemxvLCB6b25lKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0aWYgKHpvbmUtXFx1MDAzZWNvbmQgIT0gQkxLX1pPTkVfQ09ORF9JTVBfT1BFTiBcXHUwMDI2XFx1MDAyNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo0MDo0Ny42MDg0ODIwNDRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2MzU0MzczOTM1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1pPTkVEX0xPT1BcIixcbiAgICBcIkJMS19ERVZfWk9ORURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6bG9vcF9jdGxfd3JpdGVcIixcbiAgICBcInpsb29wX3F1ZXVlX3JxXCIsXG4gICAgXCJ6bG9vcF9yZXBvcnRfem9uZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgaW4gYHpsb29wX3VwZGF0ZV9zZXFfem9uZWAgdG8gZml4IGEgYnVnIHdoZXJlIGBmaWxlX3NlY3RvcnNgIGNhbiBiZSBlcXVhbCB0byBgemxvLVxcdTAwM2V6b25lX3NpemVgIHdoaWNoIGlzIGxhcmdlciB0aGFuIGB6bG8tXFx1MDAzZXpvbmVfY2FwYWNpdHlgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgYmxvY2sgZHJpdmVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5NDRlZWM1MTU3ZWM2MjUzMTY2MzNhMjdhZDI3MzZiZjMwM2I0YjZlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAxMzo0MDo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svemxvb3AuYyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuaW5kZXggNTVlZWI2YWFjMGVhMy4uYjY5ZDc5OGYyMDNjYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuKysrIGIvZHJpdmVycy9ibG9jay96bG9vcC5jXG5AQCAtMzI0LDcgKzMyNCw4IEBAIHN0YXRpYyBpbnQgemxvb3BfdXBkYXRlX3NlcV96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pXG4gXHR9XG4gXG4gXHRmaWxlX3NlY3RvcnMgPSBzdGF0LnNpemUgXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVDtcbi1cdGlmIChmaWxlX3NlY3RvcnMgXHUwMDNlIHpsby1cdTAwM2V6b25lX2NhcGFjaXR5KSB7XG4rXHRpZiAoZmlsZV9zZWN0b3JzIFx1MDAzZSB6bG8tXHUwMDNlem9uZV9jYXBhY2l0eSBcdTAwMjZcdTAwMjZcbitcdCAgICBmaWxlX3NlY3RvcnMgIT0gemxvLVx1MDAzZXpvbmVfc2l6ZSkge1xuIFx0XHRwcl9lcnIoXCJab25lICV1IGZpbGUgdG9vIGxhcmdlICglbGx1IHNlY3RvcnMgXHUwMDNlICVsbHUpXFxuXCIsXG4gXHRcdCAgICAgICB6b25lX25vLCBmaWxlX3NlY3RvcnMsIHpsby1cdTAwM2V6b25lX2NhcGFjaXR5KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMzM5LDcgKzM0MCw4IEBAIHN0YXRpYyBpbnQgemxvb3BfdXBkYXRlX3NlcV96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pXG4gXHRzcGluX2xvY2soXHUwMDI2em9uZS1cdTAwM2V3cF9sb2NrKTtcbiBcdGlmICghZmlsZV9zZWN0b3JzKSB7XG4gXHRcdHpsb29wX21hcmtfZW1wdHkoemxvLCB6b25lKTtcbi1cdH0gZWxzZSBpZiAoZmlsZV9zZWN0b3JzID09IHpsby1cdTAwM2V6b25lX2NhcGFjaXR5KSB7XG4rXHR9IGVsc2UgaWYgKGZpbGVfc2VjdG9ycyA9PSB6bG8tXHUwMDNlem9uZV9jYXBhY2l0eSB8fFxuK1x0XHQgICBmaWxlX3NlY3RvcnMgPT0gemxvLVx1MDAzZXpvbmVfc2l6ZSkge1xuIFx0XHR6bG9vcF9tYXJrX2Z1bGwoemxvLCB6b25lKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGlmICh6b25lLVx1MDAzZWNvbmQgIT0gQkxLX1pPTkVfQ09ORF9JTVBfT1BFTiBcdTAwMjZcdTAwMjZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQwOjQ3LjYwODQ4MzE0NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMzEyNTYxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQmxvY2sgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCBpbiBgZHJpdmVycy9ibG9jay96bG9vcC5jYC4gSXQgbG9va3MgbGlrZSBpdOKAmXMgdHdlYWtpbmcgdGhlIGB6bG9vcF91cGRhdGVfc2VxX3pvbmVgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZXMgYXJlIGFyb3VuZCBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudC4gSXQgYWRkcyBgXHUwMDI2XHUwMDI2IGZpbGVfc2VjdG9ycyAhPSB6bG8tXHUwMDNlem9uZV9zaXplYCB0byB0aGUgY29tcGFyaXNvbiBgaWYgKGZpbGVfc2VjdG9ycyBcdTAwM2UgemxvLVx1MDAzZXpvbmVfY2FwYWNpdHkpYC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGFkZGl0aW9uYWwgY2hlY2ssIHBhcnRpY3VsYXJseSB3aHkgd2UncmUgbm93IGJlaW5nIHNwZWNpZmljIGFib3V0ICpub3QqIGVxdWFsbGluZyB0aGUgem9uZSBzaXplLiBUaGVuLCBpbiB0aGUgYGVsc2UgaWZgIGJsb2NrLCB0aGVyZSdzIGEgbW9kaWZpY2F0aW9uOyBhIG5ldyBvciBjb25kaXRpb24sIGB8fCBmaWxlX3NlY3RvcnMgPT0gemxvLVx1MDAzZXpvbmVfc2l6ZWAgaXMgaW50cm9kdWNlZCB3aGVuIHByZXZpb3VzbHkgdGhlcmUgd2FzIG9ubHkgYGZpbGVfc2VjdG9ycyA9PSB6bG8tXHUwMDNlem9uZV9jYXBhY2l0eWAuIFRoaXMgcHJvYmFibHkgaW5kaWNhdGVzIHNvbWV0aGluZyBhYm91dCBob3cgd2UgaGFuZGxlIHRoZSBmdWxsIHpvbmUgY29uZGl0aW9uLCBvciBwb3RlbnRpYWwgZWRnZSBjYXNlcyB3aXRoIHpvbmUgYm91bmRhcmllcywgc28gSSBoYXZlIHRvIHVuZGVyc3RhbmQgdGhlIHJlYXNvbiBpdCB3YXMgYWRkZWQuXG5cblJpZ2h0LCBzbyBgemxvb3BgIGlzIGEgYmxvY2sgZHJpdmVyLCBmcm9tIHdoYXQgSSBjYW4gZ2xlYW4uIFRvIGdldCBhIGJldHRlciBncmFzcCBvZiB0aGUgbG9naWMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBkcml2ZXIgYWN0dWFsbHkgZG9lcyBhbmQgaG93IHpvbmVzIGFyZSBtYW5hZ2VkLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG1heWJlIHNvbWUgZG9jdW1lbnRhdGlvbiB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIGBmaWxlX3NlY3RvcnNgLCBgemxvLVx1MDAzZXpvbmVfc2l6ZWAgYW5kIGB6bG8tXHUwMDNlem9uZV9jYXBhY2l0eWAsIGFuZCBob3cgdXBkYXRlcyBoYXBwZW4uIFRpbWUgdG8gbG9vayB1cCBgemxvb3AuY2Agd2l0aGluIHRoZSBgZHJpdmVycy9ibG9jay9gIGRpcmVjdG9yeSBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjU0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDA6NTEuNjM5NzQyMTM4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMDkwNzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsb29wX3VwZGF0ZV9zZXFfem9uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jPTMwMD1zdGF0aWMgdm9pZCB6bG9vcF9tYXJrX2VtcHR5KHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgc3RydWN0IHpsb29wX3pvbmUgKnpvbmUpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzA4LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozMDk6c3RhdGljIGludCB6bG9vcF91cGRhdGVfc2VxX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzEwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz0zNTc9c3RhdGljIGludCB6bG9vcF9vcGVuX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNjctXFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChaTE9PUF9aT05FX1NFUV9FUlJPUiwgXFx1MDAyNnpvbmUtXFx1MDAzZWZsYWdzKSkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozNjg6XFx0XFx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM2OS1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTM4Mj1zdGF0aWMgaW50IHpsb29wX2Nsb3NlX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zOTItXFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChaTE9PUF9aT05FX1NFUV9FUlJPUiwgXFx1MDAyNnpvbmUtXFx1MDAzZWZsYWdzKSkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozOTM6XFx0XFx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM5NC1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTYzND1zdGF0aWMgdm9pZCB6bG9vcF9ydyhzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjY4LVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnpvbmUtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2Njk6XFx0XFx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY3MC1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnpvbmUtXFx1MDAzZWxvY2spO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTkzNz1zdGF0aWMgaW50IHpsb29wX3JlcG9ydF96b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9yLFxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk1Ni1cXHRcXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KFpMT09QX1pPTkVfU0VRX0VSUk9SLCBcXHUwMDI2em9uZS1cXHUwMDNlZmxhZ3MpKSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjk1NzpcXHRcXHRcXHRyZXQgPSB6bG9vcF91cGRhdGVfc2VxX3pvbmUoemxvLCB6b25lX25vKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTU4LVxcdFxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xMDY2PXN0YXRpYyBpbnQgemxvb3BfaW5pdF96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgc3RydWN0IHpsb29wX29wdGlvbnMgKm9wdHMsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE0OS1cXHRtdXRleF9sb2NrKFxcdTAwMjZ6b25lLVxcdTAwM2Vsb2NrKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE1MDpcXHRyZXQgPSB6bG9vcF91cGRhdGVfc2VxX3pvbmUoemxvLCB6b25lX25vKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE1MS1cXHRtdXRleF91bmxvY2soXFx1MDAyNnpvbmUtXFx1MDAzZWxvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo0MDo1MS42ODE4Mzg5MDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk2MDg2NTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSd2ZSByZXF1ZXN0ZWQsIHNwZWFraW5nIGFzIGlmIHRoZXNlIGFyZSBteSBpbW1lZGlhdGUgdGhvdWdodHM6XG5cbioqS2NvbmZpZyBDb25maWd1cmF0aW9uIGZvciBgemxvb3BgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHpsb29wYCBzaXR1YXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2hhdCBLY29uZmlnIG9wdGlvbnMgYXJlIGFic29sdXRlbHkgKmVzc2VudGlhbCogZm9yIGl0IHRvIGZ1bmN0aW9uIGNvcnJlY3RseSBhbmQgb3B0aW1hbGx5PyBJIG5lZWQgdG8gbWV0aWN1bG91c2x5IG1hcCBvdXQgdGhlIGRlcGVuZGVuY2llcy4gSXMgaXQgYSBtb2R1bGU/IERvZXMgaXQgbmVlZCBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBlbmFibGVkLCBvciBwZXJoYXBzIGRpc2FibGVkPyBBcmUgdGhlcmUgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIG90aGVyIG1vZHVsZXMgb3Igc3Vic3lzdGVtcyB0aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZD8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgdGhpcyBjb3VsZCBiZSB1c2VkIGluIC0gZGlmZmVyZW50IHRhcmdldCBwbGF0Zm9ybXMsIGRpZmZlcmVudCB1c2UtY2FzZXMuIFdoYXQga25vYnMgYW5kIGRpYWxzIGRvIEkgbmVlZCB0byBleHBvc2UgdG8gdGhlIHVzZXIgdmlhIEtjb25maWcgdG8gYWxsb3cgdGhlbSB0byB0YWlsb3IgYHpsb29wYCB0byB0aGVpciBzcGVjaWZpYyBlbnZpcm9ubWVudD8gSeKAmW0gZW52aXNpb25pbmcgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucywgc28gcGVyaGFwcyBJIG5lZWQgb3B0aW9ucyBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIGNlcnRhaW4gb3B0aW1pemF0aW9ucyBvciB0d2Vha3M/IFdoYXQgYWJvdXQgZGVidWdnaW5nPyBBcmUgdGhlcmUgYW55IGRlYnVnIG9wdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGV4cG9zZWQ/IFRoaXMgcmVxdWlyZXMgYSBtZXRob2RpY2FsIGFwcHJvYWNoLCBzdGVwcGluZyB0aHJvdWdoIHRoZSBjb2RlIGFuZCBpZGVudGlmeWluZyBldmVyeSBzaW5nbGUgY29uZGl0aW9uYWwgZGVwZW5kZW5jeS4gSSBuZWVkIHRvIGdldCB0aGlzIHJpZ2h0IHRoZSBmaXJzdCB0aW1lLCB0byBtaW5pbWlzZSB0aGUgdGltZSB3YXN0ZWQuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBmdW5jdGlvbmFsaXR5OyBpdCdzIGFib3V0IHByb3ZpZGluZyBhICp1c2VyLWZyaWVuZGx5KiBhbmQgKnJvYnVzdCogc2V0IG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUwMiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQwOjU0Ljk3NzkyNzIwMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTM4NTczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bG9vcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTM1Nj1jb25maWcgQkxLX0RFVl9aT05FRF9MT09QXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzY3LVxcdCAgZWNobyBcXFwiYWRkIGlkPTAsem9uZV9zaXplX21iPTI1NixjYXBhY2l0eV9tYj0xNjM4NCxjb252X3pvbmVzPTExXFxcIiBcXHUwMDNlIFxcXFxcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzY4OlxcdFxcdC9kZXYvemxvb3AtY29udHJvbFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQwOjU1LjAxOTMxNzY5MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0MjgwMTY3MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIHpsb29wIENvbXBpbGF0aW9uKipcblxuT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgemxvb3BgIHRhcmdldCB3aXRoaW4gdGhlIGJsb2NrIHN1YnN5c3RlbSBpcyBidWlsdC4gTXkgZmlyc3QgbW92ZSB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvYmxvY2svTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjb21waWxhdGlvbiBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGlzIHBhcnRpY3VsYXIgYmxvY2sgZGV2aWNlIGRyaXZlci4gVGhlIE1ha2VmaWxlIHNob3VsZCBzaGVkIGxpZ2h0IG9uIGhvdyBgemxvb3BgIGlzIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBhbnkgc3BlY2lhbCBmbGFncyBvciBsaWJyYXJpZXMgaW52b2x2ZWQgaW4gaXRzIGJ1aWxkIHByb2Nlc3MuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGNvbnN0cnVjdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkzMSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQwOjU3LjQ0NzM1MzIzN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTgwMDAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bG9vcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svTWFrZWZpbGU9NDA9b2JqLSQoQ09ORklHX0JMS19ERVZfVUJMSylcXHRcXHRcXHQrPSB1YmxrX2Rydi5vXFxuZHJpdmVycy9ibG9jay9NYWtlZmlsZTo0MTpvYmotJChDT05GSUdfQkxLX0RFVl9aT05FRF9MT09QKSArPSB6bG9vcC5vXFxuZHJpdmVycy9ibG9jay9NYWtlZmlsZS00Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDA6NTcuNDg5MTU2NjE3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU1MjQ1MzM4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGhlIGNvbmZpZ3VyYXRpb24gaW4gcXVlc3Rpb24gaXMgYEJMS19ERVZfWk9ORURfTE9PUGAuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIGl0cyBkZXBlbmRlbmNpZXMuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBhcmUgdGllZCB0byB0aGlzIHNldHRpbmcuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhlbHAgbWUgZmlndXJlIG91dCBob3cgdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIHBvdGVudGlhbCBjb25mbGljdHMsIGFuZCwgdWx0aW1hdGVseSwgaG93IGl0IGJlaGF2ZXMgd2l0aGluIHRoZSBzeXN0ZW0uIExldCdzIHNlZSB3aGF0IHRoaXMgaW1wbGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE4MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQxOjAwLjA0MTYxMjUxMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI0MzgzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQkxLX0RFVl9aT05FRF9MT09QXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWc9MzU0PXNvdXJjZSBcXFwiZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWdcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM1NS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzU2OmNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzU3LVxcdHRyaXN0YXRlIFxcXCJab25lZCBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDE6MDAuMDg0MDU3MzIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNzk5Mjk5NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIGZvciBCTEtfREVWX1pPTkVEX0xPT1AqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgS2NvbmZpZyBmaWxlIGFzc29jaWF0ZWQgd2l0aCBgQkxLX0RFVl9aT05FRF9MT09QYC4gSSdtIGFscmVhZHkgdmlzdWFsaXppbmcgdGhlIHN0cnVjdHVyZS4gSSBleHBlY3QgdG8gc2VlIHRoZSB1c3VhbCBzdXNwZWN0czogdGhlIGBjb25maWdgIGtleXdvcmQgZGVmaW5pbmcgdGhlIHN5bWJvbCwgYSBkZXNjcmlwdGl2ZSBoZWxwIHRleHQgdGhhdCBob3BlZnVsbHkgcHJvdmlkZXMgY2xhcml0eSwgZGVwZW5kZW5jaWVzIHRoYXQgZGV0ZXJtaW5lIHdoZW4gdGhpcyBvcHRpb24gaXMgZXZlbiBwcmVzZW50ZWQsIGFuZCBwb3RlbnRpYWxseSBzb21lIGRlZmF1bHQgdmFsdWVzIG9yIHByb21wdHMuIE15IGV4cGVydCBleWUgd2lsbCBiZSBzY2FubmluZyBmb3IgdGhlIGtleSBpbmZvcm1hdGlvbi4gSSdsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBhdDpcblxuKiAgICoqRGVwZW5kZW5jaWVzKio6IFdoYXQgYXJlIHRoZSBwcmVjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgZm9yIHRoaXMgZmVhdHVyZSB0byBiZSBlbmFibGVkPyBBcmUgdGhlcmUgYW55IG90aGVyIGtlcm5lbCBmZWF0dXJlcyB0aGF0ICptdXN0KiBiZSBlbmFibGVkIG9yICpjYW5ub3QqIGJlIGVuYWJsZWQgYWxvbmdzaWRlIHRoaXMgb25lPyBUaGlzIHdpbGwgZ2l2ZSBtZSBpbW1lZGlhdGUgaW5zaWdodCBpbnRvIGl0cyBpbnRlZ3JhdGlvbiB3aXRoaW4gdGhlIGxhcmdlciBzdG9yYWdlIGVjb3N5c3RlbS5cbiogICAqKkhlbHAgVGV4dCoqOiBUaGUgcXVhbGl0eSBvZiB0aGUgZGVzY3JpcHRpb24gaXMgY3J1Y2lhbC4gRG9lcyBpdCBjbGVhcmx5IGV4cGxhaW4gdGhlIHB1cnBvc2Ugb2YgdGhpcyBvcHRpb24g4oCTIHNwZWNpZmljYWxseSBpdHMgcm9sZSB3aXRoIHJlc3BlY3QgdG8gem9uZWQgYmxvY2sgZGV2aWNlcyBhbmQgbG9vcCBkZXZpY2VzPyBEb2VzIGl0IGNsYXJpZnkgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBpdD8gSSB3YW50IHRvIHNlZSBpZiB0aGUgbWFpbnRhaW5lcnMgaGF2ZSBrZXB0IGl0IGNsZWFyIGFuZCB1cC10by1kYXRlIHdpdGggdGhpcyBuZXdlciBzdG9yYWdlIHRlY2guXG4qICAgKipEZWZhdWx0cyBhbmQgUHJvbXB0Kio6IFdoYXQncyB0aGUgZGVmYXVsdCBiZWhhdmlvciBpZiB0aGUgdXNlciBkb2Vzbid0IGV4cGxpY2l0bHkgY29uZmlndXJlIHRoaXMgb3B0aW9uPyBJcyBpdCByZWFzb25hYmxlLCBvciBkb2VzIGl0IGxlYXZlIHRoZSBzeXN0ZW0gaW4gYSBsZXNzLXRoYW4tb3B0aW1hbCBzdGF0ZT8gRG9lcyB0aGUgcHJvbXB0IG9mZmVyIHVzZWZ1bCBhZHZpY2Ugb3IgY29udGV4dD9cbiogICAqKkZ1cnRoZXIgQ29udGV4dCoqOiBUaGUgcHJlc2VuY2Ugb2YgYW55IGFzc29jaWF0ZWQga2VybmVsIGRvY3VtZW50YXRpb24gd2lsbCBiZSBrZXkuIElmIHRoZXJlIGFyZSBwb2ludGVycyB0byBkb2N1bWVudHMgb3IgZXhhbXBsZXMsIEknbGwgZGVmaW5pdGVseSBjaGVjayB0aG9zZS5cbiogICAqKlBvdGVudGlhbCBDb25mbGljdHMqKjogRXZlbiBpZiB0aGUgZGVwZW5kZW5jaWVzIGFyZSBzdHJhaWdodGZvcndhcmQsIEknbGwgYmUgbG9va2luZyBvdXQgZm9yIGFueSBzdWJ0bGUgY29uZmxpY3RzIG9yIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IG5vdCBiZSBpbW1lZGlhdGVseSBvYnZpb3VzLlxuXG5VbHRpbWF0ZWx5LCBJIHdhbnQgdG8gZm9ybSBhIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBvcHRpb24ncyBwdXJwb3NlLCBpdHMgY29uZGl0aW9ucyBmb3IgdXNlLCBhbmQgaXRzIGltcGFjdCBvbiB0aGUgc3lzdGVtLiBUaGlzIHdpbGwgaGVscCBtZSBhc3Nlc3MgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpcyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBjb3JlIGJsb2NrIGRldmljZSBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NDEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo0MTowNC4yNjM5OTAwMTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM1MDpcXHRcXHQgIFNheSBOIGlmIHlvdSBkb24ndCB3YW50IHRvIHN1cHBvcnQgbGVnYWN5IGNvbW1hbmQgb3Bjb2RlLiBJdCBpc1xcbiAzNTE6XFx0XFx0ICBzdWdnZXN0ZWQgdG8gZW5hYmxlIE4gaWYgeW91ciBhcHBsaWNhdGlvbih1YmxrIHNlcnZlcikgc3dpdGNoZXMgdG9cXG4gMzUyOlxcdFxcdCAgaW9jdGwgY29tbWFuZCBlbmNvZGluZy5cXG4gMzUzOlxcdFxcbiAzNTQ6XFx0c291cmNlIFxcXCJkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZ1xcXCJcXG4gMzU1OlxcdFxcbiAzNTY6XFx0Y29uZmlnIEJMS19ERVZfWk9ORURfTE9PUFxcbiAzNTc6XFx0XFx0dHJpc3RhdGUgXFxcIlpvbmVkIGxvb3BiYWNrIGRldmljZSBzdXBwb3J0XFxcIlxcbiAzNTg6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfREVWX1pPTkVEXFxuIDM1OTpcXHRcXHRoZWxwXFxuIDM2MDpcXHRcXHQgIFNheWluZyBZIGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8gdXNlIGNyZWF0ZSBhIHpvbmVkIGJsb2NrIGRldmljZSB1c2luZ1xcbiAzNjE6XFx0XFx0ICByZWd1bGFyIGZpbGVzIGZvciB6b25lcyAob25lIGZpbGUgcGVyIHpvbmVzKS4gVGhpcyBpcyB1c2VmdWwgdG8gdGVzdFxcbiAzNjI6XFx0XFx0ICBmaWxlIHN5c3RlbXMsIGRldmljZSBtYXBwZXIgYW5kIGFwcGxpY2F0aW9ucyB0aGF0IHN1cHBvcnQgem9uZWQgYmxvY2tcXG4gMzYzOlxcdFxcdCAgZGV2aWNlcy4gVG8gY3JlYXRlIGEgem9uZWQgbG9vcCBkZXZpY2UsIG5vIHVzZXIgdXRpbGl0eSBpcyBuZWVkZWQsIGFcXG4gMzY0OlxcdFxcdCAgem9uZWQgbG9vcCBkZXZpY2UgY2FuIGJlIGNyZWF0ZWQgKG9yIHJlLXN0YXJ0ZWQpIHVzaW5nIGEgY29tbWFuZFxcbiAzNjU6XFx0XFx0ICBsaWtlOlxcbiAzNjY6XFx0XFxuIDM2NzpcXHRcXHQgIGVjaG8gXFxcImFkZCBpZD0wLHpvbmVfc2l6ZV9tYj0yNTYsY2FwYWNpdHlfbWI9MTYzODQsY29udl96b25lcz0xMVxcXCIgXFx1MDAzZSBcXFxcXFxuIDM2ODpcXHRcXHRcXHQvZGV2L3psb29wLWNvbnRyb2xcXG4gMzY5OlxcdFxcbiAzNzA6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ibG9ja2Rldi96b25lZF9sb29wLnJzdCBmb3IgdXNhZ2VcXG4gMzcxOlxcdFxcdCAgZGV0YWlscy5cXG4gMzcyOlxcdFxcbiAzNzM6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAzNzQ6XFx0XFxuIDM3NTpcXHRlbmRpZiAjIEJMS19ERVZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDE6MDQuMjY0MDYxNDIzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NjAxNzk3NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRlcGVuZGVuY2llcyBhbmQgdGhlIFpvbmVkIEJsb2NrIERldmljZSBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIGBCTEtfREVWX1pPTkVEX0xPT1Bg4oCmIHRoYXQgb25lIGltbWVkaWF0ZWx5IHJpbmdzIGEgYmVsbCBhcyBhIGRlcml2ZWQgY2FwYWJpbGl0eS4gUmlnaHQsIGl0J3MgZXhwbGljaXRseSBkZXBlbmRlbnQgb24gYEJMS19ERVZfWk9ORURgLiBNYWtlcyBzZW5zZS4gTG9vcCBkZXZpY2VzIGFyZSBvZnRlbiB1c2VkIHRvIHRlc3Qgb3IgZW11bGF0ZSB1bmRlcmx5aW5nIHN0b3JhZ2UgY2hhcmFjdGVyaXN0aWNzLiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgQkxLX0RFVl9aT05FRGAgYnJpbmdzIHRvIHRoZSB0YWJsZSBmaXJzdC4gTGV0J3MgZGVsdmUgaW50byB0aGUgZGV0YWlscyBvZiB0aGF0IGNvcmUgYmxvY2sgZGV2aWNlIHpvbmluZyBzdXBwb3J0IGFuZCBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBHb3R0YSBnZXQgdGhlIGZvdW5kYXRpb24gcmlnaHQgYmVmb3JlIEkgY2FuIHByb3Blcmx5IGFzc2VzcyBhbnl0aGluZyB0aGF0IGJ1aWxkcyBvbiBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM4NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDE6MDcuMTI0MjQ0OTIzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjUwNTQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9aT05FRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9Nzc9Y29uZmlnIEJMS19ERVZfV1JJVEVfTU9VTlRFRFxcbi0tXFxuYmxvY2svS2NvbmZpZy05Ni1cXG5ibG9jay9LY29uZmlnOjk3OmNvbmZpZyBCTEtfREVWX1pPTkVEXFxuYmxvY2svS2NvbmZpZy05OC1cXHRib29sIFxcXCJab25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDE6MDcuMTY2NzU1MzIyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDczODA5NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBab25lZCBCbG9jayBEZXZpY2UgRHJpdmVyIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGJsb2NrL0tjb25maWdgIGFuZCwgc3BlY2lmaWNhbGx5LCB0aGUgYEJMS19ERVZfWk9ORURgIG9wdGlvbi4gUmlnaHQsIHRoYXQgaW5kaWNhdGVzIGl0J3MgZGVhbGluZyB3aXRoIHpvbmVkIGJsb2NrIGRldmljZXMuIEdvb2QuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLiBJcyB0aGlzIGFib3V0IGFkZGluZyBzdXBwb3J0LCBtb2RpZnlpbmcgZXhpc3RpbmcgYmVoYXZpb3IsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5P1xuXG5UaGUgY29kZSBhbHNvIG1lbnRpb25zIGB6bG9vcGAsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgdGhhdCBjbGV2ZXIgZHJpdmVyIHRoYXQgc2ltdWxhdGVzIHpvbmVkIGJsb2NrIGRldmljZXMgdXNpbmcgcmVndWxhciBmaWxlcy4gSSByZW1lbWJlciBpdCBiZWluZyBhY2Nlc3NpYmxlIHRocm91Z2ggYC9kZXYvemxvb3AtY29udHJvbGAuIEV4Y2VsbGVudC4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSByZWZlcmVuY2VzIHRoZSBgemxvb3BfdXBkYXRlX3NlcV96b25lYCBmdW5jdGlvbi4gVGhhdCdzIG15IHByaW1hcnkgZm9jdXMuXG5cblNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgc3RhdGljLCBJIGhhdmUgdG8gZmluZCB3aGVyZSB0aGlzIGlzIGNhbGxlZC4gT2theSwgaXQncyBjYWxsZWQgZnJvbSBgemxvb3Bfb3Blbl96b25lYCwgYHpsb29wX2Nsb3NlX3pvbmVgLCBgemxvb3BfcndgLCBgemxvb3BfcmVwb3J0X3pvbmVzYCwgYW5kIGB6bG9vcF9pbml0X3pvbmVgLiBUaW1lIHRvIGRpdmUgZGVlcGVyIGludG8gdGhvc2UgY2FsbCBzaXRlcy4gYHpsb29wX3J3YCBpcyBvYnZpb3VzbHkgdGhlIG1vc3QgY3JpdGljYWwsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGNvbnRleHRzLCBzbyBJIG5lZWQgdG8gY2hlY2sgb3V0IHRoZSBvdGhlciBmdW5jdGlvbnMgYXMgd2VsbC4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyB0d2Vha2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Njk0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQxOjExLjM3NDEzODcxNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE3NDIwMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemxvb3BfcndcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuYz01MDA9c3RhdGljIHZvaWQgemxvb3BfcHV0X2NtZChzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTExLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1MTI6c3RhdGljIHZvaWQgemxvb3BfcndfY29tcGxldGUoc3RydWN0IGtpb2NiICppb2NiLCBsb25nIHJldClcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTEzLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz01MjA9c3RhdGljIGludCB6bG9vcF9kb19ydyhzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTYyLVxcdGNtZC1cXHUwMDNlaW9jYi5raV9maWxwID0gem9uZS1cXHUwMDNlZmlsZTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTYzOlxcdGNtZC1cXHUwMDNlaW9jYi5raV9jb21wbGV0ZSA9IHpsb29wX3J3X2NvbXBsZXRlO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01NjQtXFx0aWYgKCF6bG8tXFx1MDAzZWJ1ZmZlcmVkX2lvKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTU3Mz1zdGF0aWMgaW50IHpsb29wX3NlcV93cml0ZV9wcmVwKHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MzMtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjYzNDpzdGF0aWMgdm9pZCB6bG9vcF9ydyhzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTYzNS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjg1LVxcdGlmIChyZXQgIT0gLUVJT0NCUVVFVUVEKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2ODY6XFx0XFx0emxvb3BfcndfY29tcGxldGUoXFx1MDAyNmNtZC1cXHUwMDNlaW9jYiwgcmV0KTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjg3LVxcdHpsb29wX3B1dF9jbWQoY21kKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz03NDY9c3RhdGljIHZvaWQgemxvb3BfaGFuZGxlX2NtZChzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzU5LVxcdFxcdC8qXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc2MDpcXHRcXHQgKiB6bG9vcF9ydygpIGFsd2F5cyBleGVjdXRlcyBhc3luY2hyb25vdXNseSBvciBjb21wbGV0ZXNcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzYxLVxcdFxcdCAqIGRpcmVjdGx5LlxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NjItXFx0XFx0ICovXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc2MzpcXHRcXHR6bG9vcF9ydyhjbWQpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NjQtXFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo0MToxMS40MTU4ODc3MTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyOTI2NDAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGB6bG9vcF9oYW5kbGVfY21kYCBDYWxsIFNpdGVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBzdXJyb3VuZGluZyBgemxvb3BfaGFuZGxlX2NtZGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IGluIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZC4gVGhlIGVhc2llc3Qgd2F5IHRvIGRvIHRoYXQgaXMgdG8gaWRlbnRpZnkgaXRzIGNhbGwgc2l0ZXMuIFdoZXJlIGFyZSBhbGwgdGhlIHBsYWNlcyBpbiB0aGUgY29kZSB0aGF0IGFjdHVhbGx5IHVzZSBgemxvb3BfaGFuZGxlX2NtZGA/IEEgcXVpY2sgZ3JlcCBvciBjb2RlIHNlYXJjaCBzaG91bGQgZ2V0IG1lIGEgbGlzdCBvZiBhbGwgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgaXQuIFRoaXMgd2lsbCBwcm92aWRlIGltbWVkaWF0ZSBpbnNpZ2h0IGludG8gaXRzIHJlc3BvbnNpYmlsaXR5IGFuZCB3aGVyZSBpdCBmaXRzIHdpdGhpbiB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4gSSdtIGV4cGVjdGluZyB0byBzZWUgYSByZWxhdGl2ZWx5IGZvY3VzZWQgc2V0IG9mIGNhbGxlcnMg4oCTIGlkZWFsbHksIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGV2ZW50IGxvb3Agb3IgY29tbWFuZCBwcm9jZXNzaW5nIG1vZHVsZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlciBpcyBrZXksIGFzIGl0IHByb3ZpZGVzIHRoZSBtb3N0IGNvbnRleHQgYWJvdXQgdGhlIGFyZ3VtZW50cyBwcm92aWRlZCB0byBgemxvb3BfaGFuZGxlX2NtZGAgYW5kLCBpbiB0dXJuLCBob3cgdGhlIGZ1bmN0aW9uIHNob3VsZCBiZWhhdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2OTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo0MToxNC41NDUxNzI3NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4MDMwMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemxvb3BfaGFuZGxlX2NtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jPTcyOD1zdGF0aWMgaW50IHpsb29wX2ZsdXNoKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NDUtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc0NjpzdGF0aWMgdm9pZCB6bG9vcF9oYW5kbGVfY21kKHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzQ3LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz03OTM9c3RhdGljIHZvaWQgemxvb3BfY21kX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzk4LVxcdGN1cnJlbnQtXFx1MDAzZWZsYWdzIHw9IFBGX0xPQ0FMX1RIUk9UVExFIHwgUEZfTUVNQUxMT0NfTk9JTztcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Nzk5OlxcdHpsb29wX2hhbmRsZV9jbWQoY21kKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODAwLVxcdGN1cnJlbnQtXFx1MDAzZWZsYWdzID0gb3JpZ19mbGFncztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDE6MTQuNTg4OTg0MzM5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNzIwOTg5OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNvbnNpZGVyaW5nIFdvcmtxdWV1ZSBBbHRlcm5hdGl2ZXMqKlxuXG5SaWdodCwgc28gYHpsb29wX2NtZF93b3JrZm5gIGlzIGEgd29ya3F1ZXVlIGZ1bmN0aW9uIOKAkyB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBCdXQsIGhhbmcgb24sIGlzIHRoYXQgKnJlYWxseSogdGhlIGJlc3QgYXBwcm9hY2ggaGVyZT8gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGFyZSB0aGVyZSBhbHRlcm5hdGl2ZXMgdGhhdCBtaWdodCBiZSBhIGJldHRlciBmaXQsIGVzcGVjaWFsbHkgaWYgd2UncmUgZGVhbGluZyB3aXRoIGJpbyBvcGVyYXRpb25zPyBTb21ldGhpbmcgbGlrZSBgemxvb3Bfc3VibWl0X2Jpb2AgZmVlbHMgbGlrZSBpdCBtaWdodCBiZSBhIG1vcmUgdGFyZ2V0ZWQsIHBvdGVudGlhbGx5IG1vcmUgZWZmaWNpZW50LCBjaG9pY2UgaW4gdGhpcyBjb250ZXh0LiBJIG5lZWQgdG8gd2VpZ2ggdGhlIHByb3MgYW5kIGNvbnMgb2YgdXNpbmcgYSBnZW5lcmljIHdvcmtxdWV1ZSBmdW5jdGlvbiB2ZXJzdXMgYSBwb3RlbnRpYWxseSBtb3JlIHNwZWNpYWxpemVkIGJpbyBzdWJtaXNzaW9uIG1lY2hhbmlzbS4gSXQncyBhIHF1ZXN0aW9uIG9mIHdoZXRoZXIgd2UgYmVuZWZpdCBmcm9tIHRoZSBtb3JlIGdyYW51bGFyIGNvbnRyb2wsIHNjaGVkdWxpbmcsIGFuZCBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBvZmZlcmVkIGJ5IHNvbWV0aGluZyB0YWlsb3JlZCB0byB0aGUgc3BlY2lmaWMgdGFzay5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE2NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQxOjE3LjY2MTA4NzI1N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA5MjQwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemxvb3BfY21kX3dvcmtmblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jPTc0Nj1zdGF0aWMgdm9pZCB6bG9vcF9oYW5kbGVfY21kKHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03OTItXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc5MzpzdGF0aWMgdm9pZCB6bG9vcF9jbWRfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzk0LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz04ODc9c3RhdGljIGJsa19zdGF0dXNfdCB6bG9vcF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05MTAtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjkxMTpcXHRJTklUX1dPUksoXFx1MDAyNmNtZC1cXHUwMDNld29yaywgemxvb3BfY21kX3dvcmtmbik7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkxMi1cXHRxdWV1ZV93b3JrKHpsby1cXHUwMDNld29ya3F1ZXVlLCBcXHUwMDI2Y21kLVxcdTAwM2V3b3JrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDE6MTcuNzAyMDI4MjM2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTEyMDAyOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFpvbmVkIEJsb2NrIERldmljZSBSZXF1ZXN0IEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYHpsb29wYCBkcml2ZXIsIGFuZCBteSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyB0aGUgcmVxdWVzdCBxdWV1ZWluZy4gU3BlY2lmaWNhbGx5LCBJJ20gemVyb2luZyBpbiBvbiBgemxvb3BfcXVldWVfcnFgLiBUaGF0J3MgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgYmxvY2sgZGV2aWNlIHJlcXVlc3RzLiBNYWtlcyBzZW5zZS4gQnV0IHRoYXQgYmVncyB0aGUgcXVlc3Rpb24sIHdoYXQncyB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIGhvdyB0aGUgem9uZWQgYmxvY2sgaW50ZXJmYWNlIGlzIGJlaW5nIG1hbmFnZWQgaGVyZT9cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHpvbmVkIGJsb2NrIGZsb3cgaGVyZSwgYW5kIHJpZ2h0IG5vdyBJIGFtIHdvbmRlcmluZyB3aGF0IHJvbGUgYHpsb29wX29wZW5fem9uZWAgYW5kIGB6bG9vcF9jbG9zZV96b25lYCBwbGF5IGluIHRoYXQgb3ZlcmFsbCBzY2hlbWUuIFRoZXkncmUgY2xlYXJseSBpbXBvcnRhbnQgem9uZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucywgc28gSSB3YW50IHRvIGtub3cgaG93IHRoZSByZXF1ZXN0IHF1ZXVpbmcgaW50ZWdyYXRlcyB3aXRoIHRoZWlyIGZ1bmN0aW9uYWxpdHkuIEFyZSB0aGV5IGNhbGxlZCBiZWZvcmUsIGFmdGVyLCBvciBkdXJpbmcgYHpsb29wX3F1ZXVlX3JxYCBleGVjdXRpb24/IElzIHRoZXJlIGFueSBpbnRlcmFjdGlvbiB3aXRoIHRob3NlIGZ1bmN0aW9ucyB3aGVuIGZsdXNoaW5nIG9yIHdyaXRlLWNsb3NpbmcgYSB6b25lPyBJIGhhdmUgdG8gbG9vayBtb3JlIGRlZXBseSBpbnRvIHRoZSBkcml2ZXIncyBmbG93IGFuZCBsb2dpYyB0byBlbnN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhvc2UgY29yZSB6b25lIG1hbmFnZW1lbnQgY2FsbHMgYW5kIHRoZSBvdmVyYWxsIGJsb2NrIEkvTyBwcm9jZXNzaW5nIGlzIGNvbXBsZXRlIGFuZCBhY2N1cmF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYyOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQxOjIxLjAxMzIzMDY0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTAwNTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bG9vcF9vcGVuX3pvbmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuYz0zMDk9c3RhdGljIGludCB6bG9vcF91cGRhdGVfc2VxX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNTYtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjM1NzpzdGF0aWMgaW50IHpsb29wX29wZW5fem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHVuc2lnbmVkIGludCB6b25lX25vKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNTgte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTc0Nj1zdGF0aWMgdm9pZCB6bG9vcF9oYW5kbGVfY21kKHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NzctXFx0Y2FzZSBSRVFfT1BfWk9ORV9PUEVOOlxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3Nzg6XFx0XFx0Y21kLVxcdTAwM2VyZXQgPSB6bG9vcF9vcGVuX3pvbmUoemxvLCBycV96b25lX25vKHJxKSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc3OS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDE6MjEuMDUyMjQyNjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxNDcxNDkzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIFpsb29wIENvbW1hbmQgRmxvdyoqXG5cblJpZ2h0LCBzbyBJJ20gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggb2YgdGhlc2UgYHpsb29wYCBmdW5jdGlvbnMgYW5kIG1hcHBpbmcgdGhlaXIgaW50ZXJhY3Rpb25zLiBgemxvb3Bfb3Blbl96b25lYCwgYHpsb29wX2Nsb3NlX3pvbmVgLCBhbmQgYHpsb29wX3J3YCDigJMgdGhvc2UgYXJlIHRoZSBrZXkgem9uZSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLCBhcmVuJ3QgdGhleT8gVGhleSdyZSBhbGwgdHJpZ2dlcmVkLCB1bHRpbWF0ZWx5LCBmcm9tIGB6bG9vcF9oYW5kbGVfY21kYC4gSSBzZWUuIGB6bG9vcF9oYW5kbGVfY21kYCBpdHNlbGYgaXMgY2FsbGVkIGJ5IGB6bG9vcF9jbWRfd29ya2ZuYCwgd2hpY2gsIGluIHR1cm4sIGlzIHF1ZXVlZCBmb3IgZXhlY3V0aW9uIGJ5IGB6bG9vcF9xdWV1ZV9ycWAuIFNvIHdlIGhhdmUgdGhpcyBuZWF0IHF1ZXVlaW5nIG1lY2hhbmlzbSBmb3IgYXN5bmNocm9ub3VzIHByb2Nlc3NpbmcsIG1ha2VzIHNlbnNlIGZvciB0aGlzIGtpbmQgb2Ygd29ya2xvYWQuXG5cbkJ1dCBob2xkIG9uLCB3aGF0IGFib3V0IGB6bG9vcF9yZXBvcnRfem9uZXNgPyBUaGF0J3MgdGhlIGZ1bmN0aW9uIGZvciBkdW1waW5nIHRoZSB6b25lIHN0YXRlLCByaWdodD8gV2hlcmUgZG9lcyAqdGhhdCogZml0IGludG8gdGhpcyB3aG9sZSBjb250cm9sIGZsb3c/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0J3MgbWFuYWdlZCB0aGUgc2FtZSB3YXksIG9yIGlmIGl0IGhhcyBhIGRpZmZlcmVudCBlbnRyeSBwb2ludCBpbnRvIHRoZSBzeXN0ZW0uIEFyZSB0aGVyZSBvdGhlciBmdW5jdGlvbnMgbGlrZSBpdCwgYW5kIGRvIHRoZXkgYWxzbyBjYWxsIHRoZSBgaGFuZGxlX2NtZGAgZnVuY3Rpb25zPyBUaGlzIGNvdWxkIGJlIGEgdG90YWxseSBkaWZmZXJlbnQgY29kZSBwYXRoLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHJlcG9ydGluZyB0aGUgem9uZSBzdGF0ZXMgY29tcGFyZWQgdG8gdGhlIGBSV2AsIGBvcGVuYCwgb3IgYGNsb3NlYCBmdW5jdGlvbnMgbWF5IGJlIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gSSBzaG91bGQgY2hlY2sgaG93IHRoYXQgZnVuY3Rpb24gaXMgaW50ZWdyYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE4NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQxOjI0LjY2Njk2MDAzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTc3MTM1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bG9vcF9yZXBvcnRfem9uZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuYz05MjI9c3RhdGljIGludCB6bG9vcF9vcGVuKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBibGtfbW9kZV90IG1vZGUpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTM2LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5Mzc6c3RhdGljIGludCB6bG9vcF9yZXBvcnRfem9uZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHNlY3Rvcl90IHNlY3RvcixcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTM4LVxcdFxcdHVuc2lnbmVkIGludCBucl96b25lcywgc3RydWN0IGJsa19yZXBvcnRfem9uZXNfYXJncyAqYXJncylcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xMDA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgemxvb3BfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDExLVxcdC5vcGVuXFx0XFx0XFx0PSB6bG9vcF9vcGVuLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDEyOlxcdC5yZXBvcnRfem9uZXNcXHRcXHQ9IHpsb29wX3JlcG9ydF96b25lcyxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAxMy1cXHQuZnJlZV9kaXNrXFx0XFx0PSB6bG9vcF9mcmVlX2Rpc2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQxOjI0LjcwODczNzA4OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTI4NDE2NTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBCbG9jayBEZXZpY2UgT3BlcmF0aW9uczogYHpsb29wX3JlcG9ydF96b25lc2AgYW5kIGB6bG9vcF9pbml0X3pvbmVgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCBgemxvb3BfcmVwb3J0X3pvbmVzYCBhbmQgYHpsb29wX2luaXRfem9uZWAuIFRoZSBjb250ZXh0IHNjcmVhbXMgXCJibG9jayBkZXZpY2Ugb3BlcmF0aW9uLFwiIGRvZXNuJ3QgaXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIHJvbGVzIHdpdGhpbiB0aGUgYnJvYWRlciBzdG9yYWdlIGZyYW1ld29yay4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBob3cgdGhlc2UgZnVuY3Rpb25zIGhhbmRsZSB6b25lZCBibG9jayBkZXZpY2VzLCBsaWtlbHkgaW52b2x2aW5nIHpvbmUgbWFuYWdlbWVudCBhbmQgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYXJlIGVhY2ggZnVuY3Rpb25zIG1haW4gZnVuY3Rpb24uIGB6bG9vcF9yZXBvcnRfem9uZXNgIGlzIGxpa2VseSBpbnZvbHZlZCBpbiByZXRyaWV2aW5nIGluZm9ybWF0aW9uLCBtYXliZSBhYm91dCB0aGUgYXZhaWxhYmxlIHpvbmVzIG9uIGEgZGV2aWNlLiBBbmQgYHpsb29wX2luaXRfem9uZWAsIHRoYXQgc291bmRzIGxpa2UgYSBwcmVyZXF1aXNpdGUgZnVuY3Rpb247IGEgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRoZSBpbml0aWFsIHNldHVwIG9yIHN0YXRlIHRyYW5zaXRpb25zIGZvciB0aG9zZSB6b25lcywgcGVyaGFwcyBzZXR0aW5nIHVwIG1ldGFkYXRhIG9yIHByZXBhcmluZyB0aGVtIGZvciB1c2UuIEkgc2hvdWxkIGxvb2sgaW50byB0aGUgc291cmNlIHRvIGNvbmZpcm0sIGJ1dCB0aGF0J3MgbXkgaW5pdGlhbCBoeXBvdGhlc2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODMzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDE6MjcuODM3MTU2Mjc1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDQ2NTA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bG9vcF9pbml0X3pvbmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuYz0xMDM1PXN0YXRpYyBpbnQgemxvb3BfZ2V0X2Jsb2NrX3NpemUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwNjUtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwNjY6c3RhdGljIGludCB6bG9vcF9pbml0X3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCBzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cyxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTA2Ny1cXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgem9uZV9ubywgYm9vbCByZXN0b3JlKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTExNzU9c3RhdGljIGludCB6bG9vcF9jdGxfYWRkKHN0cnVjdCB6bG9vcF9vcHRpb25zICpvcHRzKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyNzEtXFx0ICogSWYgd2UgYWxyZWFkeSBoYXZlIHpvbmUgZmlsZXMsIHdlIGFyZSByZXN0b3JpbmcgYSBkZXZpY2UgY3JlYXRlZCBieSBhXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyNzI6XFx0ICogcHJldmlvdXMgYWRkIG9wZXJhdGlvbi4gSW4gdGhpcyBjYXNlLCB6bG9vcF9pbml0X3pvbmUoKSB3aWxsIGNoZWNrXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyNzMtXFx0ICogdGhhdCB0aGUgem9uZSBmaWxlcyBhcmUgY29uc2lzdGVudCB3aXRoIHRoZSB6b25lIGNvbmZpZ3VyYXRpb24gZ2l2ZW4uXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI3Ni1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfem9uZXM7IGkrKykge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjc3OlxcdFxcdHJldCA9IHpsb29wX2luaXRfem9uZSh6bG8sIG9wdHMsIGksIHJlc3RvcmUpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjc4LVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQxOjI3Ljg3NzYyNjA0NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODkxMDEzMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIERldmljZSBBZGRpdGlvbiBGbG93KipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCB3aGF0IGhhcHBlbnMgd2hlbiBhIG5ldyBkZXZpY2UgaXMgYWRkZWQgdGhyb3VnaCBgL2Rldi96bG9vcC1jb250cm9sYC4gVGhlIGtleSBmdW5jdGlvbiBoZXJlIGlzIGB6bG9vcF9jdGxfYWRkYCwgdGhhdCdzIHRoZSBlbnRyeSBwb2ludCB3ZSBuZWVkIHRvIHNjcnV0aW5pemUuIExldCdzIGRpdmUgcmlnaHQgaW50byBgemxvb3BfY3RsX2FkZGAgYW5kIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgZGV2aWNlIHJlZ2lzdHJhdGlvbiBhbmQgc2V0dXAuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGludHJpY2FjaWVzIG9mIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBrZXJuZWwgbW9kdWxlcyBhbmQgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBpdCBtaWdodCBpbnRyb2R1Y2UuIFRpbWUgdG8gcHVsbCB1cCB0aGUgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6OTQ0NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQxOjMwLjc2ODY0MjUxNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE0MzIwMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemxvb3BfY3RsX2FkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jPTExNTY9c3RhdGljIGJvb2wgemxvb3BfZGV2X2V4aXN0cyhzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE3NC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE3NTpzdGF0aWMgaW50IHpsb29wX2N0bF9hZGQoc3RydWN0IHpsb29wX29wdGlvbnMgKm9wdHMpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNzYte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTE2NDU9c3RhdGljIHNzaXplX3Qgemxvb3BfY3RsX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZixcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNjgzLVxcdGNhc2UgWkxPT1BfQ1RMX0FERDpcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTY4NDpcXHRcXHRyZXQgPSB6bG9vcF9jdGxfYWRkKFxcdTAwMjZvcHRzKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTY4NS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDE6MzAuODEwMDc4MzI0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MzYwMzE0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBab25lZCBMb29wIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIGB6bG9vcF91cGRhdGVfc2VxX3pvbmVgLCBhbmQgdGhhdCBmdW5jdGlvbiBpcyBrZXkgaGVyZS4gSXQncyBjYWxsZWQgYnkgYSBidW5jaCBvZiBmdW5jdGlvbnMg4oCTIGB6bG9vcF9vcGVuX3pvbmVgLCBgemxvb3BfY2xvc2Vfem9uZWAsIGB6bG9vcF9yd2AgKHdoaWNoIGdvZXMgdGhyb3VnaCBgemxvb3BfaGFuZGxlX2NtZGApLCBgemxvb3BfcmVwb3J0X3pvbmVzYCwgYW5kIGB6bG9vcF9pbml0X3pvbmVgICh2aWEgYHpsb29wX2N0bF9hZGRgKS4gSXQgbG9va3MgbGlrZSB0aGVzZSBjYWxscyBjb3ZlciBhbGwgdGhlIG1ham9yIGVudHJ5IHBvaW50cyBpbnRvIHRoZSB6b25lZCBsb29wIGZ1bmN0aW9uYWxpdHkuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpcyBhIGZpeCBmb3IgYSBwb3RlbnRpYWwgaXNzdWUgd2hlcmUgYGZpbGVfc2VjdG9yc2AgY291bGQgYmUgZXF1YWwgdG8gYHpsby1cdTAwM2V6b25lX3NpemVgLiAgSSBzZWUgdGhlIHByb2JsZW07IGB6bG8tXHUwMDNlem9uZV9zaXplYCAqc2hvdWxkKiBiZSBsYXJnZXIgdGhhbiBgemxvLVx1MDAzZXpvbmVfY2FwYWNpdHlgIGluIHRoaXMgY29udGV4dCwgcmlnaHQ/ICBUaGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGNvbmRpdGlvbiB3aGVyZSBgZmlsZV9zZWN0b3JzYCBpcyAqYWxzbyogZXF1YWwgdG8gYHpsby1cdTAwM2V6b25lX3NpemVgIHdoZW4gaXQgc2hvdWxkbnQgYmUuIFRoaXMgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIHpvbmUgYm91bmRhcnkgY2FsY3VsYXRpb25zIG9yIHNlY3RvciBhbGxvY2F0aW9uIHdpdGhpbiBhIHpvbmUuIEl0J3MgZnVuY3Rpb25hbCwgd2hpY2ggaXMgZ29vZCDigJMgaXQncyBhZGRyZXNzaW5nIGEgcmVhbCBidWcgYW5kIHBvdGVudGlhbGx5IHByZXZlbnRpbmcgZGF0YSBjb3JydXB0aW9uIG9yIGluY29ycmVjdCB6b25lIGhhbmRsaW5nLiBBZGRpbmcgdGhlIGNoZWNrIGBcdTAwMjZcdTAwMjYgZmlsZV9zZWN0b3JzICE9IHpsby1cdTAwM2V6b25lX3NpemVgIHRvIHRoZSBlcnJvciBjb25kaXRpb24gYW5kIGB8fCBmaWxlX3NlY3RvcnMgPT0gemxvLVx1MDAzZXpvbmVfc2l6ZWAgdG8gdGhlIGZ1bGwgY2hlY2sgc2VlbXMgbGlrZSB0aGUgY29ycmVjdCBhcHByb2FjaC5cblxuTm93LCBhY2Nlc3NpYmlsaXR5Li4uIGB6bG9vcGAgaXMgcmVhY2hhYmxlIHZpYSBgL2Rldi96bG9vcC1jb250cm9sYCwgc28gdGhlIHVzZXIgaGFzIGNvbnRyb2wuIEl0IHJlcXVpcmVzIGBCTEtfREVWX1pPTkVEX0xPT1BgIGNvbmZpZywgd2hpY2ggZGVwZW5kcyBvbiBgQkxLX0RFVl9aT05FRGAsIG1ha2VzIHNlbnNlLlxuXG5MZXQncyBxdWlja2x5IHJlY2FwIHRoZSBpbXBvcnRhbnQgc3ltYm9sczogYHpsb29wX3VwZGF0ZV9zZXFfem9uZWAgaXMgdGhlIGxpbmNocGluLCBhbmQgdGhlIGNhbGxlciBmdW5jdGlvbnMgbGlrZSBgemxvb3Bfb3Blbl96b25lYCwgYHpsb29wX2Nsb3NlX3pvbmVgLCBldGMuIGFyZSBjcml0aWNhbCBlbnRyeSBwb2ludHMuIGB6bG9vcF9jdGxfd3JpdGVgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgYWRkaW5nIHRoZSBkZXZpY2UsIGB6bG9vcF9xdWV1ZV9ycWAgaXMgdGhlIGJsb2NrIHJlcXVlc3QsIGFuZCBgemxvb3BfcmVwb3J0X3pvbmVzYCBpcyByZXBvcnRpbmcgem9uZSBpbmZvLiBHaXZlbiB0aGUgbnVtYmVyIG9mIGNhbGxzIHRvIGB6bG9vcF91cGRhdGVfc2VxX3pvbmVgLCBJJ2QgbmVlZCB0byBjb25maXJtIGlmIHRoZSBjb21waWxlciBpbmxpbmVzIHRoYXQgZnVuY3Rpb247IGl0J3Mgc3RhdGljLCBidXQgc2VlbXMgc3Vic3RhbnRpYWwgZW5vdWdoIHRvIGF2b2lkIGlubGluaW5nLiBUaGF0J2xsIGFmZmVjdCBwZXJmb3JtYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg2OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo0MTozNy42NDYxMTMyMzlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzOTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDksXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMDk6XFx0c3RhdGljIGludCB6bG9vcF91cGRhdGVfc2VxX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcXG4gMzEwOlxcdHtcXG4gMzExOlxcdFxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXFx1MDAyNnpsby1cXHUwMDNlem9uZXNbem9uZV9ub107XFxuIDMxMjpcXHRcXHRzdHJ1Y3Qga3N0YXQgc3RhdDtcXG4gMzEzOlxcdFxcdHNlY3Rvcl90IGZpbGVfc2VjdG9ycztcXG4gMzE0OlxcdFxcdGludCByZXQ7XFxuIDMxNTpcXHRcXG4gMzE2OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnpvbmUtXFx1MDAzZWxvY2spO1xcbiAzMTc6XFx0XFxuIDMxODpcXHRcXHRyZXQgPSB2ZnNfZ2V0YXR0cihcXHUwMDI2em9uZS1cXHUwMDNlZmlsZS1cXHUwMDNlZl9wYXRoLCBcXHUwMDI2c3RhdCwgU1RBVFhfU0laRSwgMCk7XFxuIDMxOTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiAzMjA6XFx0XFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gZ2V0IHpvbmUgJXUgZmlsZSBzdGF0IChlcnI9JWQpXFxcXG5cXFwiLFxcbiAzMjE6XFx0XFx0XFx0ICAgICAgIHpvbmVfbm8sIHJldCk7XFxuIDMyMjpcXHRcXHRcXHRzZXRfYml0KFpMT09QX1pPTkVfU0VRX0VSUk9SLCBcXHUwMDI2em9uZS1cXHUwMDNlZmxhZ3MpO1xcbiAzMjM6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzI0OlxcdFxcdH1cXG4gMzI1OlxcdFxcbiAzMjY6XFx0XFx0ZmlsZV9zZWN0b3JzID0gc3RhdC5zaXplIFxcdTAwM2VcXHUwMDNlIFNFQ1RPUl9TSElGVDtcXG4gMzI3OlxcdFxcdGlmIChmaWxlX3NlY3RvcnMgXFx1MDAzZSB6bG8tXFx1MDAzZXpvbmVfY2FwYWNpdHkgXFx1MDAyNlxcdTAwMjZcXG4gMzI4OlxcdFxcdCAgICBmaWxlX3NlY3RvcnMgIT0gemxvLVxcdTAwM2V6b25lX3NpemUpIHtcXG4gMzI5OlxcdFxcdFxcdHByX2VycihcXFwiWm9uZSAldSBmaWxlIHRvbyBsYXJnZSAoJWxsdSBzZWN0b3JzIFxcdTAwM2UgJWxsdSlcXFxcblxcXCIsXFxuIDMzMDpcXHRcXHRcXHQgICAgICAgem9uZV9ubywgZmlsZV9zZWN0b3JzLCB6bG8tXFx1MDAzZXpvbmVfY2FwYWNpdHkpO1xcbiAzMzE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDMzMjpcXHRcXHR9XFxuIDMzMzpcXHRcXG4gMzM0OlxcdFxcdGlmICghSVNfQUxJR05FRChzdGF0LnNpemUsIHpsby1cXHUwMDNlYmxvY2tfc2l6ZSkpIHtcXG4gMzM1OlxcdFxcdFxcdHByX2VycihcXFwiWm9uZSAldSBmaWxlIHNpemUgKCVsbHUpIG5vdCBhbGlnbmVkIHRvIGJsb2NrIHNpemUgJXVcXFxcblxcXCIsXFxuIDMzNjpcXHRcXHRcXHQgICAgICAgem9uZV9ubywgc3RhdC5zaXplLCB6bG8tXFx1MDAzZWJsb2NrX3NpemUpO1xcbiAzMzc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDMzODpcXHRcXHR9XFxuIDMzOTpcXHRcXG4gMzQwOlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2em9uZS1cXHUwMDNld3BfbG9jayk7XFxuIDM0MTpcXHRcXHRpZiAoIWZpbGVfc2VjdG9ycykge1xcbiAzNDI6XFx0XFx0XFx0emxvb3BfbWFya19lbXB0eSh6bG8sIHpvbmUpO1xcbiAzNDM6XFx0XFx0fSBlbHNlIGlmIChmaWxlX3NlY3RvcnMgPT0gemxvLVxcdTAwM2V6b25lX2NhcGFjaXR5IHx8XFxuIDM0NDpcXHRcXHRcXHQgICBmaWxlX3NlY3RvcnMgPT0gemxvLVxcdTAwM2V6b25lX3NpemUpIHtcXG4gMzQ1OlxcdFxcdFxcdHpsb29wX21hcmtfZnVsbCh6bG8sIHpvbmUpO1xcbiAzNDY6XFx0XFx0fSBlbHNlIHtcXG4gMzQ3OlxcdFxcdFxcdGlmICh6b25lLVxcdTAwM2Vjb25kICE9IEJMS19aT05FX0NPTkRfSU1QX09QRU4gXFx1MDAyNlxcdTAwMjZcXG4gMzQ4OlxcdFxcdFxcdCAgICB6b25lLVxcdTAwM2Vjb25kICE9IEJMS19aT05FX0NPTkRfRVhQX09QRU4pXFxuIDM0OTpcXHRcXHRcXHRcXHR6b25lLVxcdTAwM2Vjb25kID0gQkxLX1pPTkVfQ09ORF9DTE9TRUQ7XFxuIDM1MDpcXHRcXHRcXHR6b25lLVxcdTAwM2V3cCA9IHpvbmUtXFx1MDAzZXN0YXJ0ICsgZmlsZV9zZWN0b3JzO1xcbiAzNTE6XFx0XFx0fVxcbiAzNTI6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnpvbmUtXFx1MDAzZXdwX2xvY2spO1xcbiAzNTM6XFx0XFxuIDM1NDpcXHRcXHRyZXR1cm4gMDtcXG4gMzU1OlxcdH1cXG4gMzU2OlxcdFxcbiAzNTc6XFx0c3RhdGljIGludCB6bG9vcF9vcGVuX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcXG4gMzU4OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDE6MzcuNjQ2MjE4OTE5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTYwODQ2MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIEVudHJ5IFBvaW50cyBpbiBhIFN0YXRpYyBDb250ZXh0KipcblxuQWxyaWdodCwgc28gdGhlIHN1YmplY3QgaXNuJ3QgKnRpbnkqLCBidXQgaXQncyBjbGVhcmx5IHN0YXRpYy4gVGhhdCdzIG15IGZpcnN0IG9ic2VydmF0aW9uLiBOb3cgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cywgYXMgdGhhdCdzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgbGlrZWx5IHJlc2lkZS4gSSBub3RpY2VkIHRoYXQgYHpsb29wX2N0bF93cml0ZWAgaXMgc3RhdGljIGFzIHdlbGwsIHdoaWNoIG1ha2VzIGl0IGxlc3MgaW1tZWRpYXRlbHkgYXBwZWFsaW5nLiBIb3dldmVyLCBpdCAqaXMqIGFzc2lnbmVkIHRvIGBmaWxlX29wZXJhdGlvbnNgLCB3aGljaCBjaGFuZ2VzIHRoaW5ncyBzaWduaWZpY2FudGx5LiBTbywgbXkgZm9jdXMgc2hvdWxkIHNoaWZ0IHRvIGV4cGxvcmluZyB0aG9zZSBmaWxlIG9wZXJhdGlvbiBzdHJ1Y3R1cmVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBkaWcgaW50byBib3RoIGB6bG9vcF9mb3BzYCBhbmQgYHpsb29wX2N0bF9mb3BzYCBhbmQgc2VlIHdoYXQncyBiZWluZyBkb25lLCBhbmQgaG93IHRoZSBzdGF0aWMgZWxlbWVudHMgYXJlIHVsdGltYXRlbHkgcmVhY2hlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NjUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQxOjQxLjEwMjMwNTkzMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE3MjY5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemxvb3BfY3RsX2ZvcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuYz0xNzMxPXN0YXRpYyBpbnQgemxvb3BfY3RsX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTczNS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTczNjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6bG9vcF9jdGxfZm9wcyA9IHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTczNy1cXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTE3NDQ9c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHpsb29wX21pc2MgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc0Ni1cXHQubmFtZVxcdFxcdD0gXFxcInpsb29wLWNvbnRyb2xcXFwiLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNzQ3OlxcdC5mb3BzXFx0XFx0PSBcXHUwMDI2emxvb3BfY3RsX2ZvcHMsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3NDgtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDE6NDEuMTQ0MDM4OTkxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjI4MDc0MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGVzZSBmdW5jdGlvbnMsIHN0cnVjdHVyZWQgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOlxuXG4qKkRlbHZpbmcgaW50byB0aGUgWmxvb3AgTW9kdWxlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYHpsb29wX2N0bF93cml0ZWAgaGFuZGxlcyB3cml0ZXMgdG8gdGhlIGAvZGV2L3psb29wLWNvbnRyb2xgIGRldmljZS4gSXQncyB0aGUgZ2F0ZWtlZXBlciwgbGlrZWx5IG1hbmFnaW5nIGNvbnRyb2wgb3BlcmF0aW9ucyBhbmQgY29uZmlndXJhdGlvbiBjb21tYW5kcy4gVGhlbiB3ZSBoYXZlIGB6bG9vcF9xdWV1ZV9ycWAgLSB0aGF0J3MgdGhlIG9uZSB0aGF0IGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgZXllLiBJdCBzb3VuZHMgbGlrZSB0aGUgcmVxdWVzdCBxdWV1ZSBmdW5jdGlvbiwgdGhlIGhlYXJ0IG9mIHRoZSBJL08gcHJvY2Vzc2luZyBmb3Igemxvb3AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyByZXF1ZXN0cyBhcmUgc3VibWl0dGVkIGFuZCBoYW5kbGVkLiBGb2xsb3dpbmcgdXAgb24gdGhhdCwgdGhlcmUgaXMgYHpsb29wX3JlcG9ydF96b25lc2AsIHRoYXQgaW1wbGllcyBpdCdzIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyB0aGUgbG9naWNhbCB6b25lcyBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBhbmQgbWFraW5nIHRoZW0gYXZhaWxhYmxlLiBGaW5hbGx5LCBgemxvb3Bfb3BlbmAsIHdlbGwsIHRoYXQncyBzZWxmLWV4cGxhbmF0b3J5OyBpdCBpcyBob3cgdGhlIGRldmljZSBpcyBvcGVuZWQuXG5cbkdpdmVuIHRoZSBpbXBvcnRhbmNlIG9mIEkvTyBwZXJmb3JtYW5jZSBpbiB0aGlzIGNvbnRleHQsIGB6bG9vcF9xdWV1ZV9ycWAgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuIFVuZGVyc3RhbmRpbmcgaXRzIGFyY2hpdGVjdHVyZSBhbmQgaW50ZXJuYWwgd29ya2luZ3MgaXMgdGhlIGtleSB0byBvcHRpbWl6aW5nIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgZW50aXJlIHN5c3RlbS4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0cyBkZXNpZ24gaXMgc3VpdGFibGUgZm9yIHN1c3RhaW5lZCB3b3JrbG9hZHMgYW5kIG9wdGltYWwgcGFyYWxsZWxpc20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTY0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDE6NDQuOTA2ODQ4NTE5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTA1NjI0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bG9vcF9xdWV1ZV9ycVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jPTU3Mz1zdGF0aWMgaW50IHpsb29wX3NlcV93cml0ZV9wcmVwKHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01OTMtXFx0XFx0ICogSWYgb3JkZXJlZCB6b25lIGFwcGVuZCBpcyBpbiB1c2UsIHdlIGFscmVhZHkgY2hlY2tlZCBhbmQgc2V0XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjU5NDpcXHRcXHQgKiB0aGUgdGFyZ2V0IHNlY3RvciBpbiB6bG9vcF9xdWV1ZV9ycSgpLlxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01OTUtXFx0XFx0ICovXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9ODYxPXN0YXRpYyBib29sIHpsb29wX3NldF96b25lX2FwcGVuZF9zZWN0b3Ioc3RydWN0IHJlcXVlc3QgKnJxKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg4Ni1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODg3OnN0YXRpYyBibGtfc3RhdHVzX3Qgemxvb3BfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg4OC1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgYmxrX21xX3F1ZXVlX2RhdGEgKmJkKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTkxNz1zdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgemxvb3BfbXFfb3BzID0ge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5MTg6XFx0LnF1ZXVlX3JxICAgICAgID0gemxvb3BfcXVldWVfcnEsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkxOS1cXHQuY29tcGxldGVcXHQ9IHpsb29wX2NvbXBsZXRlX3JxLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo0MTo0NC45NDc5MTQyNjhaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjEyODA2ODU1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogWm9uZWQgTG9vcCBEcml2ZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGZ1enppbmcgdGhlIHpvbmVkIGxvb3AgZHJpdmVyLiBNeSBwcmltYXJ5IHRhcmdldHMgZm9yIGV4YW1pbmF0aW9uIGFuZCBwb3RlbnRpYWwgZnV6emluZyB3aWxsIGJlIHRoZSBgemxvb3BfY3RsX3dyaXRlYCwgYHpsb29wX3F1ZXVlX3JxYCwgYW5kIGB6bG9vcF9yZXBvcnRfem9uZXNgIGZ1bmN0aW9ucy4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBjb250cm9sIG1lY2hhbmlzbXMgd2l0aGluIHRoZSBkcml2ZXIuXG5cbkJlZm9yZSBJIGRpdmUgaW4gdG9vIGRlZXAsIEkgd2FudCB0byBjb25maXJtIHRoZSByZWFjaGFiaWxpdHkgb2YgYSBzcGVjaWZpYyBmdW5jdGlvbiwgYHpsb29wX3VwZGF0ZV9zZXFfem9uZWAuIEkgbmVlZCB0byBlbnN1cmUgaXQncyBwYXJ0IG9mIHRoZSBmdXp6aW5nIHN1cmZhY2UuIE9rYXksIGxvb2tzIGxpa2UgaXQncyBpbmRlZWQgcmVhY2hhYmxlLiBUcmFjaW5nIGJhY2ssIGB6bG9vcF91cGRhdGVfc2VxX3pvbmVgIGlzIGNhbGxlZCBmcm9tIGB6bG9vcF9pbml0X3pvbmVgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgemxvb3BfY3RsX2FkZGAgYW5kIHRoaXMgaXMsIGluIHR1cm4sIGNhbGxlZCBmcm9tIGB6bG9vcF9jdGxfd3JpdGVgLiBFeGNlbGxlbnQuIEZ1cnRoZXJtb3JlLCBpdCBpcyBjYWxsZWQgZnJvbSBgemxvb3BfcndgIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGB6bG9vcF9oYW5kbGVfY21kYCB3aGljaCBpcyBxdWV1ZWQgYnkgYHpsb29wX3F1ZXVlX3JxYC4gVGhhdCBjb25maXJtcyBpdHMgcmVsZXZhbmNlLlxuXG5UaGVyZWZvcmUsIGNvbnNpZGVyaW5nIG15IGFuYWx5c2lzLCBJIGFtIGdvaW5nIHRvIGZsYWcgdGhpcyBhcyByaXBlIGZvciBmdXp6aW5nLiBJJ2xsIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Gb3IgdGhlIGZ1enppbmcgY2FtcGFpZ24sIEnigJlsbCBwcmlvcml0aXplIHRoZXNlIGZ1bmN0aW9ucyBhcyBmb2N1cyBzeW1ib2xzOiBgemxvb3BfY3RsX3dyaXRlYCwgYHpsb29wX3F1ZXVlX3JxYCwgYW5kIGB6bG9vcF9yZXBvcnRfem9uZXNgLiBJ4oCZbGwgYWxzbyBtYWtlIHN1cmUgdGhlIGNvbmZpZ3VyYXRpb25zIGBCTEtfREVWX1pPTkVEX0xPT1BgIGFuZCBgQkxLX0RFVl9aT05FRGAgYXJlIGVuYWJsZWQsIGFzIHRoZXkgc2VlbSBmdW5kYW1lbnRhbCB0byB0aGUgZHJpdmVyJ3Mgb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg2NCwiT3V0cHV0VG9rZW5zIjoxMzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDE6NTEuMDc1OTg0ODgzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYyMzM4NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfWk9ORURfTE9PUFwiLFxuICAgIFwiQkxLX0RFVl9aT05FRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpsb29wX2N0bF93cml0ZVwiLFxuICAgIFwiemxvb3BfcXVldWVfcnFcIixcbiAgICBcInpsb29wX3JlcG9ydF96b25lc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBgemxvb3BfdXBkYXRlX3NlcV96b25lYCB0byBmaXggYSBidWcgd2hlcmUgYGZpbGVfc2VjdG9yc2AgY2FuIGJlIGVxdWFsIHRvIGB6bG8tXFx1MDAzZXpvbmVfc2l6ZWAgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gYHpsby1cXHUwMDNlem9uZV9jYXBhY2l0eWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBibG9jayBkcml2ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9aT05FRF9MT09QXCIsXG4gICAgXCJCTEtfREVWX1pPTkVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemxvb3BfY3RsX3dyaXRlXCIsXG4gICAgXCJ6bG9vcF9xdWV1ZV9ycVwiLFxuICAgIFwiemxvb3BfcmVwb3J0X3pvbmVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGluIGB6bG9vcF91cGRhdGVfc2VxX3pvbmVgIHRvIGZpeCBhIGJ1ZyB3aGVyZSBgZmlsZV9zZWN0b3JzYCBjYW4gYmUgZXF1YWwgdG8gYHpsby1cXHUwMDNlem9uZV9zaXplYCB3aGljaCBpcyBsYXJnZXIgdGhhbiBgemxvLVxcdTAwM2V6b25lX2NhcGFjaXR5YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGJsb2NrIGRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2jfx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 13:19:03 +0000 UTC FinishedAt: 2026-08-01 13:41:52 +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": "7f40b346462f563a0d6e841a77b5163d2a882a04", "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": "7f40b346462f563a0d6e841a77b5163d2a882a04", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_ZONED_LOOP", "BLK_DEV_ZONED" ], "series_id": "19e05a3b-e018-4045-90f6-efa4b70b0c35" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "zloop_ctl_write", "zloop_queue_rq", "zloop_report_zones" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfWk9ORURfTE9PUCYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1pPTkVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emxvb3BfY3RsX3dyaXRlJiMzNDssCiAgICAmIzM0O3psb29wX3F1ZXVlX3JxJiMzNDssCiAgICAmIzM0O3psb29wX3JlcG9ydF96b25lcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgaW4gYHpsb29wX3VwZGF0ZV9zZXFfem9uZWAgdG8gZml4IGEgYnVnIHdoZXJlIGBmaWxlX3NlY3RvcnNgIGNhbiBiZSBlcXVhbCB0byBgemxvLVx1MDAzZXpvbmVfc2l6ZWAgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gYHpsby1cdTAwM2V6b25lX2NhcGFjaXR5YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGJsb2NrIGRyaXZlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDk0NGVlYzUxNTdlYzYyNTMxNjYzM2EyN2FkMjczNmJmMzAzYjRiNmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDEzOjQwOjQ2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svemxvb3AuYyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuaW5kZXggNTVlZWI2YWFjMGVhMy4uYjY5ZDc5OGYyMDNjYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96bG9vcC5jXG5AQCAtMzI0LDcgJiM0MzszMjQsOCBAQCBzdGF0aWMgaW50IHpsb29wX3VwZGF0ZV9zZXFfem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHVuc2lnbmVkIGludCB6b25lX25vKVxuIFx0fVxuIFxuIFx0ZmlsZV9zZWN0b3JzID0gc3RhdC5zaXplIFx1MDAzZVx1MDAzZSBTRUNUT1JfU0hJRlQ7XG4tXHRpZiAoZmlsZV9zZWN0b3JzIFx1MDAzZSB6bG8tXHUwMDNlem9uZV9jYXBhY2l0eSkge1xuJiM0MztcdGlmIChmaWxlX3NlY3RvcnMgXHUwMDNlIHpsby1cdTAwM2V6b25lX2NhcGFjaXR5IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBmaWxlX3NlY3RvcnMgIT0gemxvLVx1MDAzZXpvbmVfc2l6ZSkge1xuIFx0XHRwcl9lcnIoXCYjMzQ7Wm9uZSAldSBmaWxlIHRvbyBsYXJnZSAoJWxsdSBzZWN0b3JzIFx1MDAzZSAlbGx1KVxcblwmIzM0OyxcbiBcdFx0ICAgICAgIHpvbmVfbm8sIGZpbGVfc2VjdG9ycywgemxvLVx1MDAzZXpvbmVfY2FwYWNpdHkpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0zMzksNyAmIzQzOzM0MCw4IEBAIHN0YXRpYyBpbnQgemxvb3BfdXBkYXRlX3NlcV96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pXG4gXHRzcGluX2xvY2soXHUwMDI2em9uZS1cdTAwM2V3cF9sb2NrKTtcbiBcdGlmICghZmlsZV9zZWN0b3JzKSB7XG4gXHRcdHpsb29wX21hcmtfZW1wdHkoemxvLCB6b25lKTtcbi1cdH0gZWxzZSBpZiAoZmlsZV9zZWN0b3JzID09IHpsby1cdTAwM2V6b25lX2NhcGFjaXR5KSB7XG4mIzQzO1x0fSBlbHNlIGlmIChmaWxlX3NlY3RvcnMgPT0gemxvLVx1MDAzZXpvbmVfY2FwYWNpdHkgfHxcbiYjNDM7XHRcdCAgIGZpbGVfc2VjdG9ycyA9PSB6bG8tXHUwMDNlem9uZV9zaXplKSB7XG4gXHRcdHpsb29wX21hcmtfZnVsbCh6bG8sIHpvbmUpO1xuIFx0fSBlbHNlIHtcbiBcdFx0aWYgKHpvbmUtXHUwMDNlY29uZCAhPSBCTEtfWk9ORV9DT05EX0lNUF9PUEVOIFx1MDAyNlx1MDAyNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX1pPTkVEX0xPT1AmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9aT05FRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3psb29wX2N0bF93cml0ZSYjMzQ7LAogICAgJiMzNDt6bG9vcF9xdWV1ZV9ycSYjMzQ7LAogICAgJiMzNDt6bG9vcF9yZXBvcnRfem9uZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGluIGB6bG9vcF91cGRhdGVfc2VxX3pvbmVgIHRvIGZpeCBhIGJ1ZyB3aGVyZSBgZmlsZV9zZWN0b3JzYCBjYW4gYmUgZXF1YWwgdG8gYHpsby1cdTAwM2V6b25lX3NpemVgIHdoaWNoIGlzIGxhcmdlciB0aGFuIGB6bG8tXHUwMDNlem9uZV9jYXBhY2l0eWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBibG9jayBkcml2ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5NDRlZWM1MTU3ZWM2MjUzMTY2MzNhMjdhZDI3MzZiZjMwM2I0YjZlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAxMzo0MDo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svemxvb3AuYyBiL2RyaXZlcnMvYmxvY2svemxvb3AuYwppbmRleCA1NWVlYjZhYWMwZWEzLi5iNjlkNzk4ZjIwM2NjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3psb29wLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay96bG9vcC5jCkBAIC0zMjQsNyAmIzQzOzMyNCw4IEBAIHN0YXRpYyBpbnQgemxvb3BfdXBkYXRlX3NlcV96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pCiAJfQogCiAJZmlsZV9zZWN0b3JzID0gc3RhdC5zaXplICZndDsmZ3Q7IFNFQ1RPUl9TSElGVDsKLQlpZiAoZmlsZV9zZWN0b3JzICZndDsgemxvLSZndDt6b25lX2NhcGFjaXR5KSB7CiYjNDM7CWlmIChmaWxlX3NlY3RvcnMgJmd0OyB6bG8tJmd0O3pvbmVfY2FwYWNpdHkgJmFtcDsmYW1wOwomIzQzOwkgICAgZmlsZV9zZWN0b3JzICE9IHpsby0mZ3Q7em9uZV9zaXplKSB7CiAJCXByX2VycigmIzM0O1pvbmUgJXUgZmlsZSB0b28gbGFyZ2UgKCVsbHUgc2VjdG9ycyAmZ3Q7ICVsbHUpXG4mIzM0OywKIAkJICAgICAgIHpvbmVfbm8sIGZpbGVfc2VjdG9ycywgemxvLSZndDt6b25lX2NhcGFjaXR5KTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMzksNyAmIzQzOzM0MCw4IEBAIHN0YXRpYyBpbnQgemxvb3BfdXBkYXRlX3NlcV96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pCiAJc3Bpbl9sb2NrKCZhbXA7em9uZS0mZ3Q7d3BfbG9jayk7CiAJaWYgKCFmaWxlX3NlY3RvcnMpIHsKIAkJemxvb3BfbWFya19lbXB0eSh6bG8sIHpvbmUpOwotCX0gZWxzZSBpZiAoZmlsZV9zZWN0b3JzID09IHpsby0mZ3Q7em9uZV9jYXBhY2l0eSkgewomIzQzOwl9IGVsc2UgaWYgKGZpbGVfc2VjdG9ycyA9PSB6bG8tJmd0O3pvbmVfY2FwYWNpdHkgfHwKJiM0MzsJCSAgIGZpbGVfc2VjdG9ycyA9PSB6bG8tJmd0O3pvbmVfc2l6ZSkgewogCQl6bG9vcF9tYXJrX2Z1bGwoemxvLCB6b25lKTsKIAl9IGVsc2UgewogCQlpZiAoem9uZS0mZ3Q7Y29uZCAhPSBCTEtfWk9ORV9DT05EX0lNUF9PUEVOICZhbXA7JmFtcDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBCbG9jayBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggaW4gYGRyaXZlcnMvYmxvY2svemxvb3AuY2AuIEl0IGxvb2tzIGxpa2UgaXTigJlzIHR3ZWFraW5nIHRoZSBgemxvb3BfdXBkYXRlX3NlcV96b25lYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2VzIGFyZSBhcm91bmQgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQuIEl0IGFkZHMgYCZhbXA7JmFtcDsgZmlsZV9zZWN0b3JzICE9IHpsby0mZ3Q7em9uZV9zaXplYCB0byB0aGUgY29tcGFyaXNvbiBgaWYgKGZpbGVfc2VjdG9ycyAmZ3Q7IHpsby0mZ3Q7em9uZV9jYXBhY2l0eSlgLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGFkZGl0aW9uYWwgY2hlY2ssIHBhcnRpY3VsYXJseSB3aHkgd2UmIzM5O3JlIG5vdyBiZWluZyBzcGVjaWZpYyBhYm91dCAqbm90KiBlcXVhbGxpbmcgdGhlIHpvbmUgc2l6ZS4gVGhlbiwgaW4gdGhlIGBlbHNlIGlmYCBibG9jaywgdGhlcmUmIzM5O3MgYSBtb2RpZmljYXRpb247IGEgbmV3IG9yIGNvbmRpdGlvbiwgYHx8IGZpbGVfc2VjdG9ycyA9PSB6bG8tJmd0O3pvbmVfc2l6ZWAgaXMgaW50cm9kdWNlZCB3aGVuIHByZXZpb3VzbHkgdGhlcmUgd2FzIG9ubHkgYGZpbGVfc2VjdG9ycyA9PSB6bG8tJmd0O3pvbmVfY2FwYWNpdHlgLiBUaGlzIHByb2JhYmx5IGluZGljYXRlcyBzb21ldGhpbmcgYWJvdXQgaG93IHdlIGhhbmRsZSB0aGUgZnVsbCB6b25lIGNvbmRpdGlvbiwgb3IgcG90ZW50aWFsIGVkZ2UgY2FzZXMgd2l0aCB6b25lIGJvdW5kYXJpZXMsIHNvIEkgaGF2ZSB0byB1bmRlcnN0YW5kIHRoZSByZWFzb24gaXQgd2FzIGFkZGVkLgoKUmlnaHQsIHNvIGB6bG9vcGAgaXMgYSBibG9jayBkcml2ZXIsIGZyb20gd2hhdCBJIGNhbiBnbGVhbi4gVG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBsb2dpYywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGRyaXZlciBhY3R1YWxseSBkb2VzIGFuZCBob3cgem9uZXMgYXJlIG1hbmFnZWQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG1heWJlIHNvbWUgZG9jdW1lbnRhdGlvbiB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIGBmaWxlX3NlY3RvcnNgLCBgemxvLSZndDt6b25lX3NpemVgIGFuZCBgemxvLSZndDt6b25lX2NhcGFjaXR5YCwgYW5kIGhvdyB1cGRhdGVzIGhhcHBlbi4gVGltZSB0byBsb29rIHVwIGB6bG9vcC5jYCB3aXRoaW4gdGhlIGBkcml2ZXJzL2Jsb2NrL2AgZGlyZWN0b3J5IGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3psb29wX3VwZGF0ZV9zZXFfem9uZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svemxvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmM9MzAwPXN0YXRpYyB2b2lkIHpsb29wX21hcmtfZW1wdHkoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCBzdHJ1Y3Qgemxvb3Bfem9uZSAqem9uZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzA4LVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjMwOTpzdGF0aWMgaW50IHpsb29wX3VwZGF0ZV9zZXFfem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHVuc2lnbmVkIGludCB6b25lX25vKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTMxMC17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTM1Nz1zdGF0aWMgaW50IHpsb29wX29wZW5fem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHVuc2lnbmVkIGludCB6b25lX25vKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNjctXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KFpMT09QX1pPTkVfU0VRX0VSUk9SLCBcdTAwMjZ6b25lLVx1MDAzZWZsYWdzKSkge1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjM2ODpcdFx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzY5LVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYz0zODI9c3RhdGljIGludCB6bG9vcF9jbG9zZV96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM5Mi1cdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoWkxPT1BfWk9ORV9TRVFfRVJST1IsIFx1MDAyNnpvbmUtXHUwMDNlZmxhZ3MpKSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzkzOlx0XHRyZXQgPSB6bG9vcF91cGRhdGVfc2VxX3pvbmUoemxvLCB6b25lX25vKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zOTQtXHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTYzND1zdGF0aWMgdm9pZCB6bG9vcF9ydyhzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY2OC1cdFx0bXV0ZXhfbG9jayhcdTAwMjZ6b25lLVx1MDAzZWxvY2spO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjY2OTpcdFx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjcwLVx0XHRtdXRleF91bmxvY2soXHUwMDI2em9uZS1cdTAwM2Vsb2NrKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9OTM3PXN0YXRpYyBpbnQgemxvb3BfcmVwb3J0X3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IsXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk1Ni1cdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChaTE9PUF9aT05FX1NFUV9FUlJPUiwgXHUwMDI2em9uZS1cdTAwM2VmbGFncykpIHtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5NTc6XHRcdFx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTU4LVx0XHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MTA2Nj1zdGF0aWMgaW50IHpsb29wX2luaXRfem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHN0cnVjdCB6bG9vcF9vcHRpb25zICpvcHRzLFxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTQ5LVx0bXV0ZXhfbG9jayhcdTAwMjZ6b25lLVx1MDAzZWxvY2spO1xuZHJpdmVycy9ibG9jay96bG9vcC5jOjExNTA6XHRyZXQgPSB6bG9vcF91cGRhdGVfc2VxX3pvbmUoemxvLCB6b25lX25vKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMTUxLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpvbmUtXHUwMDNlbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwMgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UmIzM5O3ZlIHJlcXVlc3RlZCwgc3BlYWtpbmcgYXMgaWYgdGhlc2UgYXJlIG15IGltbWVkaWF0ZSB0aG91Z2h0czoKCioqS2NvbmZpZyBDb25maWd1cmF0aW9uIGZvciBgemxvb3BgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgemxvb3BgIHNpdHVhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aGF0IEtjb25maWcgb3B0aW9ucyBhcmUgYWJzb2x1dGVseSAqZXNzZW50aWFsKiBmb3IgaXQgdG8gZnVuY3Rpb24gY29ycmVjdGx5IGFuZCBvcHRpbWFsbHk/IEkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgbWFwIG91dCB0aGUgZGVwZW5kZW5jaWVzLiBJcyBpdCBhIG1vZHVsZT8gRG9lcyBpdCBuZWVkIHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzIGVuYWJsZWQsIG9yIHBlcmhhcHMgZGlzYWJsZWQ/IEFyZSB0aGVyZSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgbW9kdWxlcyBvciBzdWJzeXN0ZW1zIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkPyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhlIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucyB0aGlzIGNvdWxkIGJlIHVzZWQgaW4gLSBkaWZmZXJlbnQgdGFyZ2V0IHBsYXRmb3JtcywgZGlmZmVyZW50IHVzZS1jYXNlcy4gV2hhdCBrbm9icyBhbmQgZGlhbHMgZG8gSSBuZWVkIHRvIGV4cG9zZSB0byB0aGUgdXNlciB2aWEgS2NvbmZpZyB0byBhbGxvdyB0aGVtIHRvIHRhaWxvciBgemxvb3BgIHRvIHRoZWlyIHNwZWNpZmljIGVudmlyb25tZW50PyBJ4oCZbSBlbnZpc2lvbmluZyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLCBzbyBwZXJoYXBzIEkgbmVlZCBvcHRpb25zIGZvciBlbmFibGluZy9kaXNhYmxpbmcgY2VydGFpbiBvcHRpbWl6YXRpb25zIG9yIHR3ZWFrcz8gV2hhdCBhYm91dCBkZWJ1Z2dpbmc/IEFyZSB0aGVyZSBhbnkgZGVidWcgb3B0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZXhwb3NlZD8gVGhpcyByZXF1aXJlcyBhIG1ldGhvZGljYWwgYXBwcm9hY2gsIHN0ZXBwaW5nIHRocm91Z2ggdGhlIGNvZGUgYW5kIGlkZW50aWZ5aW5nIGV2ZXJ5IHNpbmdsZSBjb25kaXRpb25hbCBkZXBlbmRlbmN5LiBJIG5lZWQgdG8gZ2V0IHRoaXMgcmlnaHQgdGhlIGZpcnN0IHRpbWUsIHRvIG1pbmltaXNlIHRoZSB0aW1lIHdhc3RlZC4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCBmdW5jdGlvbmFsaXR5OyBpdCYjMzk7cyBhYm91dCBwcm92aWRpbmcgYSAqdXNlci1mcmllbmRseSogYW5kICpyb2J1c3QqIHNldCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emxvb3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTM1Nj1jb25maWcgQkxLX0RFVl9aT05FRF9MT09QXG4tLVxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM2Ny1cdCAgZWNobyBcJiMzNDthZGQgaWQ9MCx6b25lX3NpemVfbWI9MjU2LGNhcGFjaXR5X21iPTE2Mzg0LGNvbnZfem9uZXM9MTFcJiMzNDsgXHUwMDNlIFxcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzY4Olx0XHQvZGV2L3psb29wLWNvbnRyb2xcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkzMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgdGhlIHpsb29wIENvbXBpbGF0aW9uKioKCk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYHpsb29wYCB0YXJnZXQgd2l0aGluIHRoZSBibG9jayBzdWJzeXN0ZW0gaXMgYnVpbHQuIE15IGZpcnN0IG1vdmUgd2lsbCBiZSB0byBkaXZlIGludG8gdGhlIGBkcml2ZXJzL2Jsb2NrL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjb21waWxhdGlvbiBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGlzIHBhcnRpY3VsYXIgYmxvY2sgZGV2aWNlIGRyaXZlci4gVGhlIE1ha2VmaWxlIHNob3VsZCBzaGVkIGxpZ2h0IG9uIGhvdyBgemxvb3BgIGlzIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBhbnkgc3BlY2lhbCBmbGFncyBvciBsaWJyYXJpZXMgaW52b2x2ZWQgaW4gaXRzIGJ1aWxkIHByb2Nlc3MuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGNvbnN0cnVjdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6bG9vcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9NYWtlZmlsZT00MD1vYmotJChDT05GSUdfQkxLX0RFVl9VQkxLKVx0XHRcdCYjNDM7PSB1YmxrX2Rydi5vXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlOjQxOm9iai0kKENPTkZJR19CTEtfREVWX1pPTkVEX0xPT1ApICYjNDM7PSB6bG9vcC5vXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTQyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxODIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgdGhlIGNvbmZpZ3VyYXRpb24gaW4gcXVlc3Rpb24gaXMgYEJMS19ERVZfWk9ORURfTE9PUGAuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIGl0cyBkZXBlbmRlbmNpZXMuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgYXJlIHRpZWQgdG8gdGhpcyBzZXR0aW5nLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBoZWxwIG1lIGZpZ3VyZSBvdXQgaG93IHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQsIHVsdGltYXRlbHksIGhvdyBpdCBiZWhhdmVzIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhpcyBpbXBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCTEtfREVWX1pPTkVEX0xPT1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnPTM1ND1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNTUtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzU2OmNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNTctXHR0cmlzdGF0ZSBcJiMzNDtab25lZCBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDQxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgS2NvbmZpZyBmb3IgQkxLX0RFVl9aT05FRF9MT09QKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIEtjb25maWcgZmlsZSBhc3NvY2lhdGVkIHdpdGggYEJMS19ERVZfWk9ORURfTE9PUGAuIEkmIzM5O20gYWxyZWFkeSB2aXN1YWxpemluZyB0aGUgc3RydWN0dXJlLiBJIGV4cGVjdCB0byBzZWUgdGhlIHVzdWFsIHN1c3BlY3RzOiB0aGUgYGNvbmZpZ2Aga2V5d29yZCBkZWZpbmluZyB0aGUgc3ltYm9sLCBhIGRlc2NyaXB0aXZlIGhlbHAgdGV4dCB0aGF0IGhvcGVmdWxseSBwcm92aWRlcyBjbGFyaXR5LCBkZXBlbmRlbmNpZXMgdGhhdCBkZXRlcm1pbmUgd2hlbiB0aGlzIG9wdGlvbiBpcyBldmVuIHByZXNlbnRlZCwgYW5kIHBvdGVudGlhbGx5IHNvbWUgZGVmYXVsdCB2YWx1ZXMgb3IgcHJvbXB0cy4gTXkgZXhwZXJ0IGV5ZSB3aWxsIGJlIHNjYW5uaW5nIGZvciB0aGUga2V5IGluZm9ybWF0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBhdDoKCiogICAqKkRlcGVuZGVuY2llcyoqOiBXaGF0IGFyZSB0aGUgcHJlY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGZvciB0aGlzIGZlYXR1cmUgdG8gYmUgZW5hYmxlZD8gQXJlIHRoZXJlIGFueSBvdGhlciBrZXJuZWwgZmVhdHVyZXMgdGhhdCAqbXVzdCogYmUgZW5hYmxlZCBvciAqY2Fubm90KiBiZSBlbmFibGVkIGFsb25nc2lkZSB0aGlzIG9uZT8gVGhpcyB3aWxsIGdpdmUgbWUgaW1tZWRpYXRlIGluc2lnaHQgaW50byBpdHMgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBsYXJnZXIgc3RvcmFnZSBlY29zeXN0ZW0uCiogICAqKkhlbHAgVGV4dCoqOiBUaGUgcXVhbGl0eSBvZiB0aGUgZGVzY3JpcHRpb24gaXMgY3J1Y2lhbC4gRG9lcyBpdCBjbGVhcmx5IGV4cGxhaW4gdGhlIHB1cnBvc2Ugb2YgdGhpcyBvcHRpb24g4oCTIHNwZWNpZmljYWxseSBpdHMgcm9sZSB3aXRoIHJlc3BlY3QgdG8gem9uZWQgYmxvY2sgZGV2aWNlcyBhbmQgbG9vcCBkZXZpY2VzPyBEb2VzIGl0IGNsYXJpZnkgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBpdD8gSSB3YW50IHRvIHNlZSBpZiB0aGUgbWFpbnRhaW5lcnMgaGF2ZSBrZXB0IGl0IGNsZWFyIGFuZCB1cC10by1kYXRlIHdpdGggdGhpcyBuZXdlciBzdG9yYWdlIHRlY2guCiogICAqKkRlZmF1bHRzIGFuZCBQcm9tcHQqKjogV2hhdCYjMzk7cyB0aGUgZGVmYXVsdCBiZWhhdmlvciBpZiB0aGUgdXNlciBkb2VzbiYjMzk7dCBleHBsaWNpdGx5IGNvbmZpZ3VyZSB0aGlzIG9wdGlvbj8gSXMgaXQgcmVhc29uYWJsZSwgb3IgZG9lcyBpdCBsZWF2ZSB0aGUgc3lzdGVtIGluIGEgbGVzcy10aGFuLW9wdGltYWwgc3RhdGU/IERvZXMgdGhlIHByb21wdCBvZmZlciB1c2VmdWwgYWR2aWNlIG9yIGNvbnRleHQ/CiogICAqKkZ1cnRoZXIgQ29udGV4dCoqOiBUaGUgcHJlc2VuY2Ugb2YgYW55IGFzc29jaWF0ZWQga2VybmVsIGRvY3VtZW50YXRpb24gd2lsbCBiZSBrZXkuIElmIHRoZXJlIGFyZSBwb2ludGVycyB0byBkb2N1bWVudHMgb3IgZXhhbXBsZXMsIEkmIzM5O2xsIGRlZmluaXRlbHkgY2hlY2sgdGhvc2UuCiogICAqKlBvdGVudGlhbCBDb25mbGljdHMqKjogRXZlbiBpZiB0aGUgZGVwZW5kZW5jaWVzIGFyZSBzdHJhaWdodGZvcndhcmQsIEkmIzM5O2xsIGJlIGxvb2tpbmcgb3V0IGZvciBhbnkgc3VidGxlIGNvbmZsaWN0cyBvciBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBibG9jayBkZXZpY2UgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgb2J2aW91cy4KClVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgdGhvcm91Z2ggdW5kZXJzdGFuZGluZyBvZiB0aGlzIG9wdGlvbiYjMzk7cyBwdXJwb3NlLCBpdHMgY29uZGl0aW9ucyBmb3IgdXNlLCBhbmQgaXRzIGltcGFjdCBvbiB0aGUgc3lzdGVtLiBUaGlzIHdpbGwgaGVscCBtZSBhc3Nlc3MgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpcyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBjb3JlIGJsb2NrIGRldmljZSBmcmFtZXdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNTA6XHRcdCAgU2F5IE4gaWYgeW91IGRvbiYjMzk7dCB3YW50IHRvIHN1cHBvcnQgbGVnYWN5IGNvbW1hbmQgb3Bjb2RlLiBJdCBpc1xuIDM1MTpcdFx0ICBzdWdnZXN0ZWQgdG8gZW5hYmxlIE4gaWYgeW91ciBhcHBsaWNhdGlvbih1YmxrIHNlcnZlcikgc3dpdGNoZXMgdG9cbiAzNTI6XHRcdCAgaW9jdGwgY29tbWFuZCBlbmNvZGluZy5cbiAzNTM6XHRcbiAzNTQ6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWdcJiMzNDtcbiAzNTU6XHRcbiAzNTY6XHRjb25maWcgQkxLX0RFVl9aT05FRF9MT09QXG4gMzU3Olx0XHR0cmlzdGF0ZSBcJiMzNDtab25lZCBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuIDM1ODpcdFx0ZGVwZW5kcyBvbiBCTEtfREVWX1pPTkVEXG4gMzU5Olx0XHRoZWxwXG4gMzYwOlx0XHQgIFNheWluZyBZIGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8gdXNlIGNyZWF0ZSBhIHpvbmVkIGJsb2NrIGRldmljZSB1c2luZ1xuIDM2MTpcdFx0ICByZWd1bGFyIGZpbGVzIGZvciB6b25lcyAob25lIGZpbGUgcGVyIHpvbmVzKS4gVGhpcyBpcyB1c2VmdWwgdG8gdGVzdFxuIDM2MjpcdFx0ICBmaWxlIHN5c3RlbXMsIGRldmljZSBtYXBwZXIgYW5kIGFwcGxpY2F0aW9ucyB0aGF0IHN1cHBvcnQgem9uZWQgYmxvY2tcbiAzNjM6XHRcdCAgZGV2aWNlcy4gVG8gY3JlYXRlIGEgem9uZWQgbG9vcCBkZXZpY2UsIG5vIHVzZXIgdXRpbGl0eSBpcyBuZWVkZWQsIGFcbiAzNjQ6XHRcdCAgem9uZWQgbG9vcCBkZXZpY2UgY2FuIGJlIGNyZWF0ZWQgKG9yIHJlLXN0YXJ0ZWQpIHVzaW5nIGEgY29tbWFuZFxuIDM2NTpcdFx0ICBsaWtlOlxuIDM2NjpcdFxuIDM2NzpcdFx0ICBlY2hvIFwmIzM0O2FkZCBpZD0wLHpvbmVfc2l6ZV9tYj0yNTYsY2FwYWNpdHlfbWI9MTYzODQsY29udl96b25lcz0xMVwmIzM0OyBcdTAwM2UgXFxcbiAzNjg6XHRcdFx0L2Rldi96bG9vcC1jb250cm9sXG4gMzY5Olx0XG4gMzcwOlx0XHQgIFNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jsb2NrZGV2L3pvbmVkX2xvb3AucnN0IGZvciB1c2FnZVxuIDM3MTpcdFx0ICBkZXRhaWxzLlxuIDM3MjpcdFxuIDM3MzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDM3NDpcdFxuIDM3NTpcdGVuZGlmICMgQkxLX0RFVlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mzg3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRlcGVuZGVuY2llcyBhbmQgdGhlIFpvbmVkIEJsb2NrIERldmljZSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgYEJMS19ERVZfWk9ORURfTE9PUGDigKYgdGhhdCBvbmUgaW1tZWRpYXRlbHkgcmluZ3MgYSBiZWxsIGFzIGEgZGVyaXZlZCBjYXBhYmlsaXR5LiBSaWdodCwgaXQmIzM5O3MgZXhwbGljaXRseSBkZXBlbmRlbnQgb24gYEJMS19ERVZfWk9ORURgLiBNYWtlcyBzZW5zZS4gTG9vcCBkZXZpY2VzIGFyZSBvZnRlbiB1c2VkIHRvIHRlc3Qgb3IgZW11bGF0ZSB1bmRlcmx5aW5nIHN0b3JhZ2UgY2hhcmFjdGVyaXN0aWNzLiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgQkxLX0RFVl9aT05FRGAgYnJpbmdzIHRvIHRoZSB0YWJsZSBmaXJzdC4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGRldGFpbHMgb2YgdGhhdCBjb3JlIGJsb2NrIGRldmljZSB6b25pbmcgc3VwcG9ydCBhbmQgc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gR290dGEgZ2V0IHRoZSBmb3VuZGF0aW9uIHJpZ2h0IGJlZm9yZSBJIGNhbiBwcm9wZXJseSBhc3Nlc3MgYW55dGhpbmcgdGhhdCBidWlsZHMgb24gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1pPTkVEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9LY29uZmlnPTc3PWNvbmZpZyBCTEtfREVWX1dSSVRFX01PVU5URURcbi0tXG5ibG9jay9LY29uZmlnLTk2LVxuYmxvY2svS2NvbmZpZzo5Nzpjb25maWcgQkxLX0RFVl9aT05FRFxuYmxvY2svS2NvbmZpZy05OC1cdGJvb2wgXCYjMzQ7Wm9uZWQgYmxvY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY5NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFpvbmVkIEJsb2NrIERldmljZSBEcml2ZXIgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGJsb2NrL0tjb25maWdgIGFuZCwgc3BlY2lmaWNhbGx5LCB0aGUgYEJMS19ERVZfWk9ORURgIG9wdGlvbi4gUmlnaHQsIHRoYXQgaW5kaWNhdGVzIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCB6b25lZCBibG9jayBkZXZpY2VzLiBHb29kLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZS4gSXMgdGhpcyBhYm91dCBhZGRpbmcgc3VwcG9ydCwgbW9kaWZ5aW5nIGV4aXN0aW5nIGJlaGF2aW9yLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8KClRoZSBjb2RlIGFsc28gbWVudGlvbnMgYHpsb29wYCwgd2hpY2gsIGFzIEkgcmVjYWxsLCBpcyB0aGF0IGNsZXZlciBkcml2ZXIgdGhhdCBzaW11bGF0ZXMgem9uZWQgYmxvY2sgZGV2aWNlcyB1c2luZyByZWd1bGFyIGZpbGVzLiBJIHJlbWVtYmVyIGl0IGJlaW5nIGFjY2Vzc2libGUgdGhyb3VnaCBgL2Rldi96bG9vcC1jb250cm9sYC4gRXhjZWxsZW50LiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IHJlZmVyZW5jZXMgdGhlIGB6bG9vcF91cGRhdGVfc2VxX3pvbmVgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIG15IHByaW1hcnkgZm9jdXMuCgpTaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIHN0YXRpYywgSSBoYXZlIHRvIGZpbmQgd2hlcmUgdGhpcyBpcyBjYWxsZWQuIE9rYXksIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGB6bG9vcF9vcGVuX3pvbmVgLCBgemxvb3BfY2xvc2Vfem9uZWAsIGB6bG9vcF9yd2AsIGB6bG9vcF9yZXBvcnRfem9uZXNgLCBhbmQgYHpsb29wX2luaXRfem9uZWAuIFRpbWUgdG8gZGl2ZSBkZWVwZXIgaW50byB0aG9zZSBjYWxsIHNpdGVzLiBgemxvb3BfcndgIGlzIG9idmlvdXNseSB0aGUgbW9zdCBjcml0aWNhbCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGFsbCB0aGUgY29udGV4dHMsIHNvIEkgbmVlZCB0byBjaGVjayBvdXQgdGhlIG90aGVyIGZ1bmN0aW9ucyBhcyB3ZWxsLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYmVpbmcgdHdlYWtlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emxvb3BfcncmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jPTUwMD1zdGF0aWMgdm9pZCB6bG9vcF9wdXRfY21kKHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTExLVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjUxMjpzdGF0aWMgdm9pZCB6bG9vcF9yd19jb21wbGV0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGxvbmcgcmV0KVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTUxMy17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTUyMD1zdGF0aWMgaW50IHpsb29wX2RvX3J3KHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTYyLVx0Y21kLVx1MDAzZWlvY2Iua2lfZmlscCA9IHpvbmUtXHUwMDNlZmlsZTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1NjM6XHRjbWQtXHUwMDNlaW9jYi5raV9jb21wbGV0ZSA9IHpsb29wX3J3X2NvbXBsZXRlO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTU2NC1cdGlmICghemxvLVx1MDAzZWJ1ZmZlcmVkX2lvKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYz01NzM9c3RhdGljIGludCB6bG9vcF9zZXFfd3JpdGVfcHJlcChzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTYzMy1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2MzQ6c3RhdGljIHZvaWQgemxvb3Bfcncoc3RydWN0IHpsb29wX2NtZCAqY21kKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTYzNS17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY4NS1cdGlmIChyZXQgIT0gLUVJT0NCUVVFVUVEKVxuZHJpdmVycy9ibG9jay96bG9vcC5jOjY4NjpcdFx0emxvb3BfcndfY29tcGxldGUoXHUwMDI2Y21kLVx1MDAzZWlvY2IsIHJldCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjg3LVx0emxvb3BfcHV0X2NtZChjbWQpO1xuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYz03NDY9c3RhdGljIHZvaWQgemxvb3BfaGFuZGxlX2NtZChzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc1OS1cdFx0LypcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3NjA6XHRcdCAqIHpsb29wX3J3KCkgYWx3YXlzIGV4ZWN1dGVzIGFzeW5jaHJvbm91c2x5IG9yIGNvbXBsZXRlc1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc2MS1cdFx0ICogZGlyZWN0bHkuXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzYyLVx0XHQgKi9cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3NjM6XHRcdHpsb29wX3J3KGNtZCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzY0LVx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2OTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYHpsb29wX2hhbmRsZV9jbWRgIENhbGwgU2l0ZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBzdXJyb3VuZGluZyBgemxvb3BfaGFuZGxlX2NtZGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IGluIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZC4gVGhlIGVhc2llc3Qgd2F5IHRvIGRvIHRoYXQgaXMgdG8gaWRlbnRpZnkgaXRzIGNhbGwgc2l0ZXMuIFdoZXJlIGFyZSBhbGwgdGhlIHBsYWNlcyBpbiB0aGUgY29kZSB0aGF0IGFjdHVhbGx5IHVzZSBgemxvb3BfaGFuZGxlX2NtZGA/IEEgcXVpY2sgZ3JlcCBvciBjb2RlIHNlYXJjaCBzaG91bGQgZ2V0IG1lIGEgbGlzdCBvZiBhbGwgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgaXQuIFRoaXMgd2lsbCBwcm92aWRlIGltbWVkaWF0ZSBpbnNpZ2h0IGludG8gaXRzIHJlc3BvbnNpYmlsaXR5IGFuZCB3aGVyZSBpdCBmaXRzIHdpdGhpbiB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGEgcmVsYXRpdmVseSBmb2N1c2VkIHNldCBvZiBjYWxsZXJzIOKAkyBpZGVhbGx5LCBmdW5jdGlvbnMgd2l0aGluIHRoZSBldmVudCBsb29wIG9yIGNvbW1hbmQgcHJvY2Vzc2luZyBtb2R1bGVzLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXIgaXMga2V5LCBhcyBpdCBwcm92aWRlcyB0aGUgbW9zdCBjb250ZXh0IGFib3V0IHRoZSBhcmd1bWVudHMgcHJvdmlkZWQgdG8gYHpsb29wX2hhbmRsZV9jbWRgIGFuZCwgaW4gdHVybiwgaG93IHRoZSBmdW5jdGlvbiBzaG91bGQgYmVoYXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6bG9vcF9oYW5kbGVfY21kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svemxvb3AuYz03Mjg9c3RhdGljIGludCB6bG9vcF9mbHVzaChzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8pXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc0NS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3NDY6c3RhdGljIHZvaWQgemxvb3BfaGFuZGxlX2NtZChzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzQ3LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9NzkzPXN0YXRpYyB2b2lkIHpsb29wX2NtZF93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy03OTgtXHRjdXJyZW50LVx1MDAzZWZsYWdzIHw9IFBGX0xPQ0FMX1RIUk9UVExFIHwgUEZfTUVNQUxMT0NfTk9JTztcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3OTk6XHR6bG9vcF9oYW5kbGVfY21kKGNtZCk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODAwLVx0Y3VycmVudC1cdTAwM2VmbGFncyA9IG9yaWdfZmxhZ3M7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNjQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ29uc2lkZXJpbmcgV29ya3F1ZXVlIEFsdGVybmF0aXZlcyoqCgpSaWdodCwgc28gYHpsb29wX2NtZF93b3JrZm5gIGlzIGEgd29ya3F1ZXVlIGZ1bmN0aW9uIOKAkyB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gQnV0LCBoYW5nIG9uLCBpcyB0aGF0ICpyZWFsbHkqIHRoZSBiZXN0IGFwcHJvYWNoIGhlcmU/IE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBhcmUgdGhlcmUgYWx0ZXJuYXRpdmVzIHRoYXQgbWlnaHQgYmUgYSBiZXR0ZXIgZml0LCBlc3BlY2lhbGx5IGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYmlvIG9wZXJhdGlvbnM/IFNvbWV0aGluZyBsaWtlIGB6bG9vcF9zdWJtaXRfYmlvYCBmZWVscyBsaWtlIGl0IG1pZ2h0IGJlIGEgbW9yZSB0YXJnZXRlZCwgcG90ZW50aWFsbHkgbW9yZSBlZmZpY2llbnQsIGNob2ljZSBpbiB0aGlzIGNvbnRleHQuIEkgbmVlZCB0byB3ZWlnaCB0aGUgcHJvcyBhbmQgY29ucyBvZiB1c2luZyBhIGdlbmVyaWMgd29ya3F1ZXVlIGZ1bmN0aW9uIHZlcnN1cyBhIHBvdGVudGlhbGx5IG1vcmUgc3BlY2lhbGl6ZWQgYmlvIHN1Ym1pc3Npb24gbWVjaGFuaXNtLiBJdCYjMzk7cyBhIHF1ZXN0aW9uIG9mIHdoZXRoZXIgd2UgYmVuZWZpdCBmcm9tIHRoZSBtb3JlIGdyYW51bGFyIGNvbnRyb2wsIHNjaGVkdWxpbmcsIGFuZCBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBvZmZlcmVkIGJ5IHNvbWV0aGluZyB0YWlsb3JlZCB0byB0aGUgc3BlY2lmaWMgdGFzay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emxvb3BfY21kX3dvcmtmbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svemxvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmM9NzQ2PXN0YXRpYyB2b2lkIHpsb29wX2hhbmRsZV9jbWQoc3RydWN0IHpsb29wX2NtZCAqY21kKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy03OTItXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NzkzOnN0YXRpYyB2b2lkIHpsb29wX2NtZF93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc5NC17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTg4Nz1zdGF0aWMgYmxrX3N0YXR1c190IHpsb29wX3F1ZXVlX3JxKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LFxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy05MTAtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTExOlx0SU5JVF9XT1JLKFx1MDAyNmNtZC1cdTAwM2V3b3JrLCB6bG9vcF9jbWRfd29ya2ZuKTtcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05MTItXHRxdWV1ZV93b3JrKHpsby1cdTAwM2V3b3JrcXVldWUsIFx1MDAyNmNtZC1cdTAwM2V3b3JrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzYyOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFpvbmVkIEJsb2NrIERldmljZSBSZXF1ZXN0IEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgemxvb3BgIGRyaXZlciwgYW5kIG15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIHRoZSByZXF1ZXN0IHF1ZXVlaW5nLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gemVyb2luZyBpbiBvbiBgemxvb3BfcXVldWVfcnFgLiBUaGF0JiMzOTtzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIGJsb2NrIGRldmljZSByZXF1ZXN0cy4gTWFrZXMgc2Vuc2UuIEJ1dCB0aGF0IGJlZ3MgdGhlIHF1ZXN0aW9uLCB3aGF0JiMzOTtzIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgaG93IHRoZSB6b25lZCBibG9jayBpbnRlcmZhY2UgaXMgYmVpbmcgbWFuYWdlZCBoZXJlPwoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHpvbmVkIGJsb2NrIGZsb3cgaGVyZSwgYW5kIHJpZ2h0IG5vdyBJIGFtIHdvbmRlcmluZyB3aGF0IHJvbGUgYHpsb29wX29wZW5fem9uZWAgYW5kIGB6bG9vcF9jbG9zZV96b25lYCBwbGF5IGluIHRoYXQgb3ZlcmFsbCBzY2hlbWUuIFRoZXkmIzM5O3JlIGNsZWFybHkgaW1wb3J0YW50IHpvbmUgbWFuYWdlbWVudCBmdW5jdGlvbnMsIHNvIEkgd2FudCB0byBrbm93IGhvdyB0aGUgcmVxdWVzdCBxdWV1aW5nIGludGVncmF0ZXMgd2l0aCB0aGVpciBmdW5jdGlvbmFsaXR5LiBBcmUgdGhleSBjYWxsZWQgYmVmb3JlLCBhZnRlciwgb3IgZHVyaW5nIGB6bG9vcF9xdWV1ZV9ycWAgZXhlY3V0aW9uPyBJcyB0aGVyZSBhbnkgaW50ZXJhY3Rpb24gd2l0aCB0aG9zZSBmdW5jdGlvbnMgd2hlbiBmbHVzaGluZyBvciB3cml0ZS1jbG9zaW5nIGEgem9uZT8gSSBoYXZlIHRvIGxvb2sgbW9yZSBkZWVwbHkgaW50byB0aGUgZHJpdmVyJiMzOTtzIGZsb3cgYW5kIGxvZ2ljIHRvIGVuc3VyZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aG9zZSBjb3JlIHpvbmUgbWFuYWdlbWVudCBjYWxscyBhbmQgdGhlIG92ZXJhbGwgYmxvY2sgSS9PIHByb2Nlc3NpbmcgaXMgY29tcGxldGUgYW5kIGFjY3VyYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6bG9vcF9vcGVuX3pvbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jPTMwOT1zdGF0aWMgaW50IHpsb29wX3VwZGF0ZV9zZXFfem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHVuc2lnbmVkIGludCB6b25lX25vKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNTYtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MzU3OnN0YXRpYyBpbnQgemxvb3Bfb3Blbl96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzU4LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9NzQ2PXN0YXRpYyB2b2lkIHpsb29wX2hhbmRsZV9jbWQoc3RydWN0IHpsb29wX2NtZCAqY21kKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NzctXHRjYXNlIFJFUV9PUF9aT05FX09QRU46XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Nzc4Olx0XHRjbWQtXHUwMDNlcmV0ID0gemxvb3Bfb3Blbl96b25lKHpsbywgcnFfem9uZV9ubyhycSkpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTc3OS1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxODcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqVW5kZXJzdGFuZGluZyB0aGUgWmxvb3AgQ29tbWFuZCBGbG93KioKClJpZ2h0LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIG9mIHRoZXNlIGB6bG9vcGAgZnVuY3Rpb25zIGFuZCBtYXBwaW5nIHRoZWlyIGludGVyYWN0aW9ucy4gYHpsb29wX29wZW5fem9uZWAsIGB6bG9vcF9jbG9zZV96b25lYCwgYW5kIGB6bG9vcF9yd2Ag4oCTIHRob3NlIGFyZSB0aGUga2V5IHpvbmUgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucywgYXJlbiYjMzk7dCB0aGV5PyBUaGV5JiMzOTtyZSBhbGwgdHJpZ2dlcmVkLCB1bHRpbWF0ZWx5LCBmcm9tIGB6bG9vcF9oYW5kbGVfY21kYC4gSSBzZWUuIGB6bG9vcF9oYW5kbGVfY21kYCBpdHNlbGYgaXMgY2FsbGVkIGJ5IGB6bG9vcF9jbWRfd29ya2ZuYCwgd2hpY2gsIGluIHR1cm4sIGlzIHF1ZXVlZCBmb3IgZXhlY3V0aW9uIGJ5IGB6bG9vcF9xdWV1ZV9ycWAuIFNvIHdlIGhhdmUgdGhpcyBuZWF0IHF1ZXVlaW5nIG1lY2hhbmlzbSBmb3IgYXN5bmNocm9ub3VzIHByb2Nlc3NpbmcsIG1ha2VzIHNlbnNlIGZvciB0aGlzIGtpbmQgb2Ygd29ya2xvYWQuCgpCdXQgaG9sZCBvbiwgd2hhdCBhYm91dCBgemxvb3BfcmVwb3J0X3pvbmVzYD8gVGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gZm9yIGR1bXBpbmcgdGhlIHpvbmUgc3RhdGUsIHJpZ2h0PyBXaGVyZSBkb2VzICp0aGF0KiBmaXQgaW50byB0aGlzIHdob2xlIGNvbnRyb2wgZmxvdz8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgbWFuYWdlZCB0aGUgc2FtZSB3YXksIG9yIGlmIGl0IGhhcyBhIGRpZmZlcmVudCBlbnRyeSBwb2ludCBpbnRvIHRoZSBzeXN0ZW0uIEFyZSB0aGVyZSBvdGhlciBmdW5jdGlvbnMgbGlrZSBpdCwgYW5kIGRvIHRoZXkgYWxzbyBjYWxsIHRoZSBgaGFuZGxlX2NtZGAgZnVuY3Rpb25zPyBUaGlzIGNvdWxkIGJlIGEgdG90YWxseSBkaWZmZXJlbnQgY29kZSBwYXRoLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHJlcG9ydGluZyB0aGUgem9uZSBzdGF0ZXMgY29tcGFyZWQgdG8gdGhlIGBSV2AsIGBvcGVuYCwgb3IgYGNsb3NlYCBmdW5jdGlvbnMgbWF5IGJlIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gSSBzaG91bGQgY2hlY2sgaG93IHRoYXQgZnVuY3Rpb24gaXMgaW50ZWdyYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emxvb3BfcmVwb3J0X3pvbmVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svemxvb3AuYz05MjI9c3RhdGljIGludCB6bG9vcF9vcGVuKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBibGtfbW9kZV90IG1vZGUpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkzNi1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5Mzc6c3RhdGljIGludCB6bG9vcF9yZXBvcnRfem9uZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHNlY3Rvcl90IHNlY3RvcixcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05MzgtXHRcdHVuc2lnbmVkIGludCBucl96b25lcywgc3RydWN0IGJsa19yZXBvcnRfem9uZXNfYXJncyAqYXJncylcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MTAwOT1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHpsb29wX2ZvcHMgPSB7XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwMTEtXHQub3Blblx0XHRcdD0gemxvb3Bfb3BlbixcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDEyOlx0LnJlcG9ydF96b25lc1x0XHQ9IHpsb29wX3JlcG9ydF96b25lcyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDEzLVx0LmZyZWVfZGlza1x0XHQ9IHpsb29wX2ZyZWVfZGlzayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgzMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIEJsb2NrIERldmljZSBPcGVyYXRpb25zOiBgemxvb3BfcmVwb3J0X3pvbmVzYCBhbmQgYHpsb29wX2luaXRfem9uZWAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9ucywgYHpsb29wX3JlcG9ydF96b25lc2AgYW5kIGB6bG9vcF9pbml0X3pvbmVgLiBUaGUgY29udGV4dCBzY3JlYW1zICYjMzQ7YmxvY2sgZGV2aWNlIG9wZXJhdGlvbiwmIzM0OyBkb2VzbiYjMzk7dCBpdD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgcm9sZXMgd2l0aGluIHRoZSBicm9hZGVyIHN0b3JhZ2UgZnJhbWV3b3JrLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGhvdyB0aGVzZSBmdW5jdGlvbnMgaGFuZGxlIHpvbmVkIGJsb2NrIGRldmljZXMsIGxpa2VseSBpbnZvbHZpbmcgem9uZSBtYW5hZ2VtZW50IGFuZCBpbml0aWFsaXphdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBhcmUgZWFjaCBmdW5jdGlvbnMgbWFpbiBmdW5jdGlvbi4gYHpsb29wX3JlcG9ydF96b25lc2AgaXMgbGlrZWx5IGludm9sdmVkIGluIHJldHJpZXZpbmcgaW5mb3JtYXRpb24sIG1heWJlIGFib3V0IHRoZSBhdmFpbGFibGUgem9uZXMgb24gYSBkZXZpY2UuIEFuZCBgemxvb3BfaW5pdF96b25lYCwgdGhhdCBzb3VuZHMgbGlrZSBhIHByZXJlcXVpc2l0ZSBmdW5jdGlvbjsgYSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIGluaXRpYWwgc2V0dXAgb3Igc3RhdGUgdHJhbnNpdGlvbnMgZm9yIHRob3NlIHpvbmVzLCBwZXJoYXBzIHNldHRpbmcgdXAgbWV0YWRhdGEgb3IgcHJlcGFyaW5nIHRoZW0gZm9yIHVzZS4gSSBzaG91bGQgbG9vayBpbnRvIHRoZSBzb3VyY2UgdG8gY29uZmlybSwgYnV0IHRoYXQmIzM5O3MgbXkgaW5pdGlhbCBoeXBvdGhlc2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6bG9vcF9pbml0X3pvbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jPTEwMzU9c3RhdGljIGludCB6bG9vcF9nZXRfYmxvY2tfc2l6ZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwNjUtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTA2NjpzdGF0aWMgaW50IHpsb29wX2luaXRfem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHN0cnVjdCB6bG9vcF9vcHRpb25zICpvcHRzLFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwNjctXHRcdFx0ICAgdW5zaWduZWQgaW50IHpvbmVfbm8sIGJvb2wgcmVzdG9yZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MTE3NT1zdGF0aWMgaW50IHpsb29wX2N0bF9hZGQoc3RydWN0IHpsb29wX29wdGlvbnMgKm9wdHMpXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyNzEtXHQgKiBJZiB3ZSBhbHJlYWR5IGhhdmUgem9uZSBmaWxlcywgd2UgYXJlIHJlc3RvcmluZyBhIGRldmljZSBjcmVhdGVkIGJ5IGFcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjcyOlx0ICogcHJldmlvdXMgYWRkIG9wZXJhdGlvbi4gSW4gdGhpcyBjYXNlLCB6bG9vcF9pbml0X3pvbmUoKSB3aWxsIGNoZWNrXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI3My1cdCAqIHRoYXQgdGhlIHpvbmUgZmlsZXMgYXJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgem9uZSBjb25maWd1cmF0aW9uIGdpdmVuLlxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjc2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfem9uZXM7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTI3NzpcdFx0cmV0ID0gemxvb3BfaW5pdF96b25lKHpsbywgb3B0cywgaSwgcmVzdG9yZSk7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI3OC1cdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ0NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgRGV2aWNlIEFkZGl0aW9uIEZsb3cqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgd2hhdCBoYXBwZW5zIHdoZW4gYSBuZXcgZGV2aWNlIGlzIGFkZGVkIHRocm91Z2ggYC9kZXYvemxvb3AtY29udHJvbGAuIFRoZSBrZXkgZnVuY3Rpb24gaGVyZSBpcyBgemxvb3BfY3RsX2FkZGAsIHRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IHdlIG5lZWQgdG8gc2NydXRpbml6ZS4gTGV0JiMzOTtzIGRpdmUgcmlnaHQgaW50byBgemxvb3BfY3RsX2FkZGAgYW5kIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgZGV2aWNlIHJlZ2lzdHJhdGlvbiBhbmQgc2V0dXAuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBpbnRyaWNhY2llcyBvZiBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUga2VybmVsIG1vZHVsZXMgYW5kIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgaXQgbWlnaHQgaW50cm9kdWNlLiBUaW1lIHRvIHB1bGwgdXAgdGhlIGNvZGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3psb29wX2N0bF9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jPTExNTY9c3RhdGljIGJvb2wgemxvb3BfZGV2X2V4aXN0cyhzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8pXG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNzQtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE3NTpzdGF0aWMgaW50IHpsb29wX2N0bF9hZGQoc3RydWN0IHpsb29wX29wdGlvbnMgKm9wdHMpXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE3Ni17XG4tLVxuZHJpdmVycy9ibG9jay96bG9vcC5jPTE2NDU9c3RhdGljIHNzaXplX3Qgemxvb3BfY3RsX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1Zixcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTY4My1cdGNhc2UgWkxPT1BfQ1RMX0FERDpcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNjg0Olx0XHRyZXQgPSB6bG9vcF9jdGxfYWRkKFx1MDAyNm9wdHMpO1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTE2ODUtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODY5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWm9uZWQgTG9vcCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIGB6bG9vcF91cGRhdGVfc2VxX3pvbmVgLCBhbmQgdGhhdCBmdW5jdGlvbiBpcyBrZXkgaGVyZS4gSXQmIzM5O3MgY2FsbGVkIGJ5IGEgYnVuY2ggb2YgZnVuY3Rpb25zIOKAkyBgemxvb3Bfb3Blbl96b25lYCwgYHpsb29wX2Nsb3NlX3pvbmVgLCBgemxvb3BfcndgICh3aGljaCBnb2VzIHRocm91Z2ggYHpsb29wX2hhbmRsZV9jbWRgKSwgYHpsb29wX3JlcG9ydF96b25lc2AsIGFuZCBgemxvb3BfaW5pdF96b25lYCAodmlhIGB6bG9vcF9jdGxfYWRkYCkuIEl0IGxvb2tzIGxpa2UgdGhlc2UgY2FsbHMgY292ZXIgYWxsIHRoZSBtYWpvciBlbnRyeSBwb2ludHMgaW50byB0aGUgem9uZWQgbG9vcCBmdW5jdGlvbmFsaXR5LgoKVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGlzIGEgZml4IGZvciBhIHBvdGVudGlhbCBpc3N1ZSB3aGVyZSBgZmlsZV9zZWN0b3JzYCBjb3VsZCBiZSBlcXVhbCB0byBgemxvLSZndDt6b25lX3NpemVgLiAgSSBzZWUgdGhlIHByb2JsZW07IGB6bG8tJmd0O3pvbmVfc2l6ZWAgKnNob3VsZCogYmUgbGFyZ2VyIHRoYW4gYHpsby0mZ3Q7em9uZV9jYXBhY2l0eWAgaW4gdGhpcyBjb250ZXh0LCByaWdodD8gIFRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgY29uZGl0aW9uIHdoZXJlIGBmaWxlX3NlY3RvcnNgIGlzICphbHNvKiBlcXVhbCB0byBgemxvLSZndDt6b25lX3NpemVgIHdoZW4gaXQgc2hvdWxkbnQgYmUuIFRoaXMgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB6b25lIGJvdW5kYXJ5IGNhbGN1bGF0aW9ucyBvciBzZWN0b3IgYWxsb2NhdGlvbiB3aXRoaW4gYSB6b25lLiBJdCYjMzk7cyBmdW5jdGlvbmFsLCB3aGljaCBpcyBnb29kIOKAkyBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgcmVhbCBidWcgYW5kIHBvdGVudGlhbGx5IHByZXZlbnRpbmcgZGF0YSBjb3JydXB0aW9uIG9yIGluY29ycmVjdCB6b25lIGhhbmRsaW5nLiBBZGRpbmcgdGhlIGNoZWNrIGAmYW1wOyZhbXA7IGZpbGVfc2VjdG9ycyAhPSB6bG8tJmd0O3pvbmVfc2l6ZWAgdG8gdGhlIGVycm9yIGNvbmRpdGlvbiBhbmQgYHx8IGZpbGVfc2VjdG9ycyA9PSB6bG8tJmd0O3pvbmVfc2l6ZWAgdG8gdGhlIGZ1bGwgY2hlY2sgc2VlbXMgbGlrZSB0aGUgY29ycmVjdCBhcHByb2FjaC4KCk5vdywgYWNjZXNzaWJpbGl0eS4uLiBgemxvb3BgIGlzIHJlYWNoYWJsZSB2aWEgYC9kZXYvemxvb3AtY29udHJvbGAsIHNvIHRoZSB1c2VyIGhhcyBjb250cm9sLiBJdCByZXF1aXJlcyBgQkxLX0RFVl9aT05FRF9MT09QYCBjb25maWcsIHdoaWNoIGRlcGVuZHMgb24gYEJMS19ERVZfWk9ORURgLCBtYWtlcyBzZW5zZS4KCkxldCYjMzk7cyBxdWlja2x5IHJlY2FwIHRoZSBpbXBvcnRhbnQgc3ltYm9sczogYHpsb29wX3VwZGF0ZV9zZXFfem9uZWAgaXMgdGhlIGxpbmNocGluLCBhbmQgdGhlIGNhbGxlciBmdW5jdGlvbnMgbGlrZSBgemxvb3Bfb3Blbl96b25lYCwgYHpsb29wX2Nsb3NlX3pvbmVgLCBldGMuIGFyZSBjcml0aWNhbCBlbnRyeSBwb2ludHMuIGB6bG9vcF9jdGxfd3JpdGVgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgYWRkaW5nIHRoZSBkZXZpY2UsIGB6bG9vcF9xdWV1ZV9ycWAgaXMgdGhlIGJsb2NrIHJlcXVlc3QsIGFuZCBgemxvb3BfcmVwb3J0X3pvbmVzYCBpcyByZXBvcnRpbmcgem9uZSBpbmZvLiBHaXZlbiB0aGUgbnVtYmVyIG9mIGNhbGxzIHRvIGB6bG9vcF91cGRhdGVfc2VxX3pvbmVgLCBJJiMzOTtkIG5lZWQgdG8gY29uZmlybSBpZiB0aGUgY29tcGlsZXIgaW5saW5lcyB0aGF0IGZ1bmN0aW9uOyBpdCYjMzk7cyBzdGF0aWMsIGJ1dCBzZWVtcyBzdWJzdGFudGlhbCBlbm91Z2ggdG8gYXZvaWQgaW5saW5pbmcuIFRoYXQmIzM5O2xsIGFmZmVjdCBwZXJmb3JtYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwOTpcdHN0YXRpYyBpbnQgemxvb3BfdXBkYXRlX3NlcV96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pXG4gMzEwOlx0e1xuIDMxMTpcdFx0c3RydWN0IHpsb29wX3pvbmUgKnpvbmUgPSBcdTAwMjZ6bG8tXHUwMDNlem9uZXNbem9uZV9ub107XG4gMzEyOlx0XHRzdHJ1Y3Qga3N0YXQgc3RhdDtcbiAzMTM6XHRcdHNlY3Rvcl90IGZpbGVfc2VjdG9ycztcbiAzMTQ6XHRcdGludCByZXQ7XG4gMzE1Olx0XG4gMzE2Olx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnpvbmUtXHUwMDNlbG9jayk7XG4gMzE3Olx0XG4gMzE4Olx0XHRyZXQgPSB2ZnNfZ2V0YXR0cihcdTAwMjZ6b25lLVx1MDAzZWZpbGUtXHUwMDNlZl9wYXRoLCBcdTAwMjZzdGF0LCBTVEFUWF9TSVpFLCAwKTtcbiAzMTk6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiAzMjA6XHRcdFx0cHJfZXJyKFwmIzM0O0ZhaWxlZCB0byBnZXQgem9uZSAldSBmaWxlIHN0YXQgKGVycj0lZClcXG5cJiMzNDssXG4gMzIxOlx0XHRcdCAgICAgICB6b25lX25vLCByZXQpO1xuIDMyMjpcdFx0XHRzZXRfYml0KFpMT09QX1pPTkVfU0VRX0VSUk9SLCBcdTAwMjZ6b25lLVx1MDAzZWZsYWdzKTtcbiAzMjM6XHRcdFx0cmV0dXJuIHJldDtcbiAzMjQ6XHRcdH1cbiAzMjU6XHRcbiAzMjY6XHRcdGZpbGVfc2VjdG9ycyA9IHN0YXQuc2l6ZSBcdTAwM2VcdTAwM2UgU0VDVE9SX1NISUZUO1xuIDMyNzpcdFx0aWYgKGZpbGVfc2VjdG9ycyBcdTAwM2UgemxvLVx1MDAzZXpvbmVfY2FwYWNpdHkgXHUwMDI2XHUwMDI2XG4gMzI4Olx0XHQgICAgZmlsZV9zZWN0b3JzICE9IHpsby1cdTAwM2V6b25lX3NpemUpIHtcbiAzMjk6XHRcdFx0cHJfZXJyKFwmIzM0O1pvbmUgJXUgZmlsZSB0b28gbGFyZ2UgKCVsbHUgc2VjdG9ycyBcdTAwM2UgJWxsdSlcXG5cJiMzNDssXG4gMzMwOlx0XHRcdCAgICAgICB6b25lX25vLCBmaWxlX3NlY3RvcnMsIHpsby1cdTAwM2V6b25lX2NhcGFjaXR5KTtcbiAzMzE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzMyOlx0XHR9XG4gMzMzOlx0XG4gMzM0Olx0XHRpZiAoIUlTX0FMSUdORUQoc3RhdC5zaXplLCB6bG8tXHUwMDNlYmxvY2tfc2l6ZSkpIHtcbiAzMzU6XHRcdFx0cHJfZXJyKFwmIzM0O1pvbmUgJXUgZmlsZSBzaXplICglbGx1KSBub3QgYWxpZ25lZCB0byBibG9jayBzaXplICV1XFxuXCYjMzQ7LFxuIDMzNjpcdFx0XHQgICAgICAgem9uZV9ubywgc3RhdC5zaXplLCB6bG8tXHUwMDNlYmxvY2tfc2l6ZSk7XG4gMzM3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDMzODpcdFx0fVxuIDMzOTpcdFxuIDM0MDpcdFx0c3Bpbl9sb2NrKFx1MDAyNnpvbmUtXHUwMDNld3BfbG9jayk7XG4gMzQxOlx0XHRpZiAoIWZpbGVfc2VjdG9ycykge1xuIDM0MjpcdFx0XHR6bG9vcF9tYXJrX2VtcHR5KHpsbywgem9uZSk7XG4gMzQzOlx0XHR9IGVsc2UgaWYgKGZpbGVfc2VjdG9ycyA9PSB6bG8tXHUwMDNlem9uZV9jYXBhY2l0eSB8fFxuIDM0NDpcdFx0XHQgICBmaWxlX3NlY3RvcnMgPT0gemxvLVx1MDAzZXpvbmVfc2l6ZSkge1xuIDM0NTpcdFx0XHR6bG9vcF9tYXJrX2Z1bGwoemxvLCB6b25lKTtcbiAzNDY6XHRcdH0gZWxzZSB7XG4gMzQ3Olx0XHRcdGlmICh6b25lLVx1MDAzZWNvbmQgIT0gQkxLX1pPTkVfQ09ORF9JTVBfT1BFTiBcdTAwMjZcdTAwMjZcbiAzNDg6XHRcdFx0ICAgIHpvbmUtXHUwMDNlY29uZCAhPSBCTEtfWk9ORV9DT05EX0VYUF9PUEVOKVxuIDM0OTpcdFx0XHRcdHpvbmUtXHUwMDNlY29uZCA9IEJMS19aT05FX0NPTkRfQ0xPU0VEO1xuIDM1MDpcdFx0XHR6b25lLVx1MDAzZXdwID0gem9uZS1cdTAwM2VzdGFydCAmIzQzOyBmaWxlX3NlY3RvcnM7XG4gMzUxOlx0XHR9XG4gMzUyOlx0XHRzcGluX3VubG9jayhcdTAwMjZ6b25lLVx1MDAzZXdwX2xvY2spO1xuIDM1MzpcdFxuIDM1NDpcdFx0cmV0dXJuIDA7XG4gMzU1Olx0fVxuIDM1NjpcdFxuIDM1NzpcdHN0YXRpYyBpbnQgemxvb3Bfb3Blbl96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pXG4gMzU4Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY2NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgUG90ZW50aWFsIEVudHJ5IFBvaW50cyBpbiBhIFN0YXRpYyBDb250ZXh0KioKCkFscmlnaHQsIHNvIHRoZSBzdWJqZWN0IGlzbiYjMzk7dCAqdGlueSosIGJ1dCBpdCYjMzk7cyBjbGVhcmx5IHN0YXRpYy4gVGhhdCYjMzk7cyBteSBmaXJzdCBvYnNlcnZhdGlvbi4gTm93IEkgbmVlZCB0byBpZGVudGlmeSB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMsIGFzIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIGludGVyYWN0aW9ucyBsaWtlbHkgcmVzaWRlLiBJIG5vdGljZWQgdGhhdCBgemxvb3BfY3RsX3dyaXRlYCBpcyBzdGF0aWMgYXMgd2VsbCwgd2hpY2ggbWFrZXMgaXQgbGVzcyBpbW1lZGlhdGVseSBhcHBlYWxpbmcuIEhvd2V2ZXIsIGl0ICppcyogYXNzaWduZWQgdG8gYGZpbGVfb3BlcmF0aW9uc2AsIHdoaWNoIGNoYW5nZXMgdGhpbmdzIHNpZ25pZmljYW50bHkuIFNvLCBteSBmb2N1cyBzaG91bGQgc2hpZnQgdG8gZXhwbG9yaW5nIHRob3NlIGZpbGUgb3BlcmF0aW9uIHN0cnVjdHVyZXMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGRpZyBpbnRvIGJvdGggYHpsb29wX2ZvcHNgIGFuZCBgemxvb3BfY3RsX2ZvcHNgIGFuZCBzZWUgd2hhdCYjMzk7cyBiZWluZyBkb25lLCBhbmQgaG93IHRoZSBzdGF0aWMgZWxlbWVudHMgYXJlIHVsdGltYXRlbHkgcmVhY2hlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emxvb3BfY3RsX2ZvcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jPTE3MzE9c3RhdGljIGludCB6bG9vcF9jdGxfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTczNS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNzM2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHpsb29wX2N0bF9mb3BzID0ge1xuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3MzctXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9MTc0ND1zdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Ugemxvb3BfbWlzYyA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc0Ni1cdC5uYW1lXHRcdD0gXCYjMzQ7emxvb3AtY29udHJvbFwmIzM0OyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNzQ3Olx0LmZvcHNcdFx0PSBcdTAwMjZ6bG9vcF9jdGxfZm9wcyxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNzQ4LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTY0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlc2UgZnVuY3Rpb25zLCBzdHJ1Y3R1cmVkIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2JsZW06CgoqKkRlbHZpbmcgaW50byB0aGUgWmxvb3AgTW9kdWxlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYHpsb29wX2N0bF93cml0ZWAgaGFuZGxlcyB3cml0ZXMgdG8gdGhlIGAvZGV2L3psb29wLWNvbnRyb2xgIGRldmljZS4gSXQmIzM5O3MgdGhlIGdhdGVrZWVwZXIsIGxpa2VseSBtYW5hZ2luZyBjb250cm9sIG9wZXJhdGlvbnMgYW5kIGNvbmZpZ3VyYXRpb24gY29tbWFuZHMuIFRoZW4gd2UgaGF2ZSBgemxvb3BfcXVldWVfcnFgIC0gdGhhdCYjMzk7cyB0aGUgb25lIHRoYXQgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWUuIEl0IHNvdW5kcyBsaWtlIHRoZSByZXF1ZXN0IHF1ZXVlIGZ1bmN0aW9uLCB0aGUgaGVhcnQgb2YgdGhlIEkvTyBwcm9jZXNzaW5nIGZvciB6bG9vcC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHJlcXVlc3RzIGFyZSBzdWJtaXR0ZWQgYW5kIGhhbmRsZWQuIEZvbGxvd2luZyB1cCBvbiB0aGF0LCB0aGVyZSBpcyBgemxvb3BfcmVwb3J0X3pvbmVzYCwgdGhhdCBpbXBsaWVzIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyB0aGUgbG9naWNhbCB6b25lcyBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBhbmQgbWFraW5nIHRoZW0gYXZhaWxhYmxlLiBGaW5hbGx5LCBgemxvb3Bfb3BlbmAsIHdlbGwsIHRoYXQmIzM5O3Mgc2VsZi1leHBsYW5hdG9yeTsgaXQgaXMgaG93IHRoZSBkZXZpY2UgaXMgb3BlbmVkLgoKR2l2ZW4gdGhlIGltcG9ydGFuY2Ugb2YgSS9PIHBlcmZvcm1hbmNlIGluIHRoaXMgY29udGV4dCwgYHpsb29wX3F1ZXVlX3JxYCBpcyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGRlZXBlci4gVW5kZXJzdGFuZGluZyBpdHMgYXJjaGl0ZWN0dXJlIGFuZCBpbnRlcm5hbCB3b3JraW5ncyBpcyB0aGUga2V5IHRvIG9wdGltaXppbmcgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBlbnRpcmUgc3lzdGVtLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXRzIGRlc2lnbiBpcyBzdWl0YWJsZSBmb3Igc3VzdGFpbmVkIHdvcmtsb2FkcyBhbmQgb3B0aW1hbCBwYXJhbGxlbGlzbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emxvb3BfcXVldWVfcnEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3psb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96bG9vcC5jPTU3Mz1zdGF0aWMgaW50IHpsb29wX3NlcV93cml0ZV9wcmVwKHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTkzLVx0XHQgKiBJZiBvcmRlcmVkIHpvbmUgYXBwZW5kIGlzIGluIHVzZSwgd2UgYWxyZWFkeSBjaGVja2VkIGFuZCBzZXRcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1OTQ6XHRcdCAqIHRoZSB0YXJnZXQgc2VjdG9yIGluIHpsb29wX3F1ZXVlX3JxKCkuXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTk1LVx0XHQgKi9cbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9ODYxPXN0YXRpYyBib29sIHpsb29wX3NldF96b25lX2FwcGVuZF9zZWN0b3Ioc3RydWN0IHJlcXVlc3QgKnJxKVxuLS1cbmRyaXZlcnMvYmxvY2svemxvb3AuYy04ODYtXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODg3OnN0YXRpYyBibGtfc3RhdHVzX3Qgemxvb3BfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODg4LVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJsa19tcV9xdWV1ZV9kYXRhICpiZClcbi0tXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9OTE3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyB6bG9vcF9tcV9vcHMgPSB7XG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6OTE4Olx0LnF1ZXVlX3JxICAgICAgID0gemxvb3BfcXVldWVfcnEsXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTE5LVx0LmNvbXBsZXRlXHQ9IHpsb29wX2NvbXBsZXRlX3JxLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg2NAoJCQkJCQkJb3V0cHV0OiAxMzkKCQkJCQkJCXRob3VnaHRzOiAyMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFpvbmVkIExvb3AgRHJpdmVyKioKCkFscmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGZ1enppbmcgdGhlIHpvbmVkIGxvb3AgZHJpdmVyLiBNeSBwcmltYXJ5IHRhcmdldHMgZm9yIGV4YW1pbmF0aW9uIGFuZCBwb3RlbnRpYWwgZnV6emluZyB3aWxsIGJlIHRoZSBgemxvb3BfY3RsX3dyaXRlYCwgYHpsb29wX3F1ZXVlX3JxYCwgYW5kIGB6bG9vcF9yZXBvcnRfem9uZXNgIGZ1bmN0aW9ucy4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBjb250cm9sIG1lY2hhbmlzbXMgd2l0aGluIHRoZSBkcml2ZXIuCgpCZWZvcmUgSSBkaXZlIGluIHRvbyBkZWVwLCBJIHdhbnQgdG8gY29uZmlybSB0aGUgcmVhY2hhYmlsaXR5IG9mIGEgc3BlY2lmaWMgZnVuY3Rpb24sIGB6bG9vcF91cGRhdGVfc2VxX3pvbmVgLiBJIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIHBhcnQgb2YgdGhlIGZ1enppbmcgc3VyZmFjZS4gT2theSwgbG9va3MgbGlrZSBpdCYjMzk7cyBpbmRlZWQgcmVhY2hhYmxlLiBUcmFjaW5nIGJhY2ssIGB6bG9vcF91cGRhdGVfc2VxX3pvbmVgIGlzIGNhbGxlZCBmcm9tIGB6bG9vcF9pbml0X3pvbmVgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgemxvb3BfY3RsX2FkZGAgYW5kIHRoaXMgaXMsIGluIHR1cm4sIGNhbGxlZCBmcm9tIGB6bG9vcF9jdGxfd3JpdGVgLiBFeGNlbGxlbnQuIEZ1cnRoZXJtb3JlLCBpdCBpcyBjYWxsZWQgZnJvbSBgemxvb3BfcndgIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGB6bG9vcF9oYW5kbGVfY21kYCB3aGljaCBpcyBxdWV1ZWQgYnkgYHpsb29wX3F1ZXVlX3JxYC4gVGhhdCBjb25maXJtcyBpdHMgcmVsZXZhbmNlLgoKVGhlcmVmb3JlLCBjb25zaWRlcmluZyBteSBhbmFseXNpcywgSSBhbSBnb2luZyB0byBmbGFnIHRoaXMgYXMgcmlwZSBmb3IgZnV6emluZy4gSSYjMzk7bGwgc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpGb3IgdGhlIGZ1enppbmcgY2FtcGFpZ24sIEnigJlsbCBwcmlvcml0aXplIHRoZXNlIGZ1bmN0aW9ucyBhcyBmb2N1cyBzeW1ib2xzOiBgemxvb3BfY3RsX3dyaXRlYCwgYHpsb29wX3F1ZXVlX3JxYCwgYW5kIGB6bG9vcF9yZXBvcnRfem9uZXNgLiBJ4oCZbGwgYWxzbyBtYWtlIHN1cmUgdGhlIGNvbmZpZ3VyYXRpb25zIGBCTEtfREVWX1pPTkVEX0xPT1BgIGFuZCBgQkxLX0RFVl9aT05FRGAgYXJlIGVuYWJsZWQsIGFzIHRoZXkgc2VlbSBmdW5kYW1lbnRhbCB0byB0aGUgZHJpdmVyJiMzOTtzIG9wZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfWk9ORURfTE9PUCYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1pPTkVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7emxvb3BfY3RsX3dyaXRlJiMzNDssCiAgICAmIzM0O3psb29wX3F1ZXVlX3JxJiMzNDssCiAgICAmIzM0O3psb29wX3JlcG9ydF96b25lcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgaW4gYHpsb29wX3VwZGF0ZV9zZXFfem9uZWAgdG8gZml4IGEgYnVnIHdoZXJlIGBmaWxlX3NlY3RvcnNgIGNhbiBiZSBlcXVhbCB0byBgemxvLVx1MDAzZXpvbmVfc2l6ZWAgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gYHpsby1cdTAwM2V6b25lX2NhcGFjaXR5YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGJsb2NrIGRyaXZlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9aT05FRF9MT09QJiMzNDssCiAgICAmIzM0O0JMS19ERVZfWk9ORUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6bG9vcF9jdGxfd3JpdGUmIzM0OywKICAgICYjMzQ7emxvb3BfcXVldWVfcnEmIzM0OywKICAgICYjMzQ7emxvb3BfcmVwb3J0X3pvbmVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBgemxvb3BfdXBkYXRlX3NlcV96b25lYCB0byBmaXggYSBidWcgd2hlcmUgYGZpbGVfc2VjdG9yc2AgY2FuIGJlIGVxdWFsIHRvIGB6bG8tXHUwMDNlem9uZV9zaXplYCB3aGljaCBpcyBsYXJnZXIgdGhhbiBgemxvLVx1MDAzZXpvbmVfY2FwYWNpdHlgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgYmxvY2sgZHJpdmVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDA6NDcuMzE2MDI4MjY4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM4MzYyMDEwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9aT05FRF9MT09QXCIsXG4gICAgXCJCTEtfREVWX1pPTkVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemxvb3BfY3RsX3dyaXRlXCIsXG4gICAgXCJ6bG9vcF9xdWV1ZV9ycVwiLFxuICAgIFwiemxvb3BfcmVwb3J0X3pvbmVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGluIGB6bG9vcF91cGRhdGVfc2VxX3pvbmVgIHRvIGZpeCBhIGJ1ZyB3aGVyZSBgZmlsZV9zZWN0b3JzYCBjYW4gYmUgZXF1YWwgdG8gYHpsby1cXHUwMDNlem9uZV9zaXplYCB3aGljaCBpcyBsYXJnZXIgdGhhbiBgemxvLVxcdTAwM2V6b25lX2NhcGFjaXR5YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGJsb2NrIGRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDA6NDcuMzE2MDMzNDg4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTE4NDE5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5NDRlZWM1MTU3ZWM2MjUzMTY2MzNhMjdhZDI3MzZiZjMwM2I0YjZlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDEgMTM6NDA6NDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96bG9vcC5jIGIvZHJpdmVycy9ibG9jay96bG9vcC5jXFxuaW5kZXggNTVlZWI2YWFjMGVhMy4uYjY5ZDc5OGYyMDNjYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL3psb29wLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL3psb29wLmNcXG5AQCAtMzI0LDcgKzMyNCw4IEBAIHN0YXRpYyBpbnQgemxvb3BfdXBkYXRlX3NlcV96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pXFxuIFxcdH1cXG4gXFxuIFxcdGZpbGVfc2VjdG9ycyA9IHN0YXQuc2l6ZSBcXHUwMDNlXFx1MDAzZSBTRUNUT1JfU0hJRlQ7XFxuLVxcdGlmIChmaWxlX3NlY3RvcnMgXFx1MDAzZSB6bG8tXFx1MDAzZXpvbmVfY2FwYWNpdHkpIHtcXG4rXFx0aWYgKGZpbGVfc2VjdG9ycyBcXHUwMDNlIHpsby1cXHUwMDNlem9uZV9jYXBhY2l0eSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgZmlsZV9zZWN0b3JzICE9IHpsby1cXHUwMDNlem9uZV9zaXplKSB7XFxuIFxcdFxcdHByX2VycihcXFwiWm9uZSAldSBmaWxlIHRvbyBsYXJnZSAoJWxsdSBzZWN0b3JzIFxcdTAwM2UgJWxsdSlcXFxcblxcXCIsXFxuIFxcdFxcdCAgICAgICB6b25lX25vLCBmaWxlX3NlY3RvcnMsIHpsby1cXHUwMDNlem9uZV9jYXBhY2l0eSk7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC0zMzksNyArMzQwLDggQEAgc3RhdGljIGludCB6bG9vcF91cGRhdGVfc2VxX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZ6b25lLVxcdTAwM2V3cF9sb2NrKTtcXG4gXFx0aWYgKCFmaWxlX3NlY3RvcnMpIHtcXG4gXFx0XFx0emxvb3BfbWFya19lbXB0eSh6bG8sIHpvbmUpO1xcbi1cXHR9IGVsc2UgaWYgKGZpbGVfc2VjdG9ycyA9PSB6bG8tXFx1MDAzZXpvbmVfY2FwYWNpdHkpIHtcXG4rXFx0fSBlbHNlIGlmIChmaWxlX3NlY3RvcnMgPT0gemxvLVxcdTAwM2V6b25lX2NhcGFjaXR5IHx8XFxuK1xcdFxcdCAgIGZpbGVfc2VjdG9ycyA9PSB6bG8tXFx1MDAzZXpvbmVfc2l6ZSkge1xcbiBcXHRcXHR6bG9vcF9tYXJrX2Z1bGwoemxvLCB6b25lKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0aWYgKHpvbmUtXFx1MDAzZWNvbmQgIT0gQkxLX1pPTkVfQ09ORF9JTVBfT1BFTiBcXHUwMDI2XFx1MDAyNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo0MDo0Ny42MDg0ODIwNDRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2MzU0MzczOTM1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1pPTkVEX0xPT1BcIixcbiAgICBcIkJMS19ERVZfWk9ORURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6bG9vcF9jdGxfd3JpdGVcIixcbiAgICBcInpsb29wX3F1ZXVlX3JxXCIsXG4gICAgXCJ6bG9vcF9yZXBvcnRfem9uZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgaW4gYHpsb29wX3VwZGF0ZV9zZXFfem9uZWAgdG8gZml4IGEgYnVnIHdoZXJlIGBmaWxlX3NlY3RvcnNgIGNhbiBiZSBlcXVhbCB0byBgemxvLVxcdTAwM2V6b25lX3NpemVgIHdoaWNoIGlzIGxhcmdlciB0aGFuIGB6bG8tXFx1MDAzZXpvbmVfY2FwYWNpdHlgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgYmxvY2sgZHJpdmVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5NDRlZWM1MTU3ZWM2MjUzMTY2MzNhMjdhZDI3MzZiZjMwM2I0YjZlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAxMzo0MDo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svemxvb3AuYyBiL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuaW5kZXggNTVlZWI2YWFjMGVhMy4uYjY5ZDc5OGYyMDNjYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svemxvb3AuY1xuKysrIGIvZHJpdmVycy9ibG9jay96bG9vcC5jXG5AQCAtMzI0LDcgKzMyNCw4IEBAIHN0YXRpYyBpbnQgemxvb3BfdXBkYXRlX3NlcV96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pXG4gXHR9XG4gXG4gXHRmaWxlX3NlY3RvcnMgPSBzdGF0LnNpemUgXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVDtcbi1cdGlmIChmaWxlX3NlY3RvcnMgXHUwMDNlIHpsby1cdTAwM2V6b25lX2NhcGFjaXR5KSB7XG4rXHRpZiAoZmlsZV9zZWN0b3JzIFx1MDAzZSB6bG8tXHUwMDNlem9uZV9jYXBhY2l0eSBcdTAwMjZcdTAwMjZcbitcdCAgICBmaWxlX3NlY3RvcnMgIT0gemxvLVx1MDAzZXpvbmVfc2l6ZSkge1xuIFx0XHRwcl9lcnIoXCJab25lICV1IGZpbGUgdG9vIGxhcmdlICglbGx1IHNlY3RvcnMgXHUwMDNlICVsbHUpXFxuXCIsXG4gXHRcdCAgICAgICB6b25lX25vLCBmaWxlX3NlY3RvcnMsIHpsby1cdTAwM2V6b25lX2NhcGFjaXR5KTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMzM5LDcgKzM0MCw4IEBAIHN0YXRpYyBpbnQgemxvb3BfdXBkYXRlX3NlcV96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgdW5zaWduZWQgaW50IHpvbmVfbm8pXG4gXHRzcGluX2xvY2soXHUwMDI2em9uZS1cdTAwM2V3cF9sb2NrKTtcbiBcdGlmICghZmlsZV9zZWN0b3JzKSB7XG4gXHRcdHpsb29wX21hcmtfZW1wdHkoemxvLCB6b25lKTtcbi1cdH0gZWxzZSBpZiAoZmlsZV9zZWN0b3JzID09IHpsby1cdTAwM2V6b25lX2NhcGFjaXR5KSB7XG4rXHR9IGVsc2UgaWYgKGZpbGVfc2VjdG9ycyA9PSB6bG8tXHUwMDNlem9uZV9jYXBhY2l0eSB8fFxuK1x0XHQgICBmaWxlX3NlY3RvcnMgPT0gemxvLVx1MDAzZXpvbmVfc2l6ZSkge1xuIFx0XHR6bG9vcF9tYXJrX2Z1bGwoemxvLCB6b25lKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGlmICh6b25lLVx1MDAzZWNvbmQgIT0gQkxLX1pPTkVfQ09ORF9JTVBfT1BFTiBcdTAwMjZcdTAwMjZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQwOjQ3LjYwODQ4MzE0NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMzEyNTYxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQmxvY2sgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCBpbiBgZHJpdmVycy9ibG9jay96bG9vcC5jYC4gSXQgbG9va3MgbGlrZSBpdOKAmXMgdHdlYWtpbmcgdGhlIGB6bG9vcF91cGRhdGVfc2VxX3pvbmVgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZXMgYXJlIGFyb3VuZCBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudC4gSXQgYWRkcyBgXHUwMDI2XHUwMDI2IGZpbGVfc2VjdG9ycyAhPSB6bG8tXHUwMDNlem9uZV9zaXplYCB0byB0aGUgY29tcGFyaXNvbiBgaWYgKGZpbGVfc2VjdG9ycyBcdTAwM2UgemxvLVx1MDAzZXpvbmVfY2FwYWNpdHkpYC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGFkZGl0aW9uYWwgY2hlY2ssIHBhcnRpY3VsYXJseSB3aHkgd2UncmUgbm93IGJlaW5nIHNwZWNpZmljIGFib3V0ICpub3QqIGVxdWFsbGluZyB0aGUgem9uZSBzaXplLiBUaGVuLCBpbiB0aGUgYGVsc2UgaWZgIGJsb2NrLCB0aGVyZSdzIGEgbW9kaWZpY2F0aW9uOyBhIG5ldyBvciBjb25kaXRpb24sIGB8fCBmaWxlX3NlY3RvcnMgPT0gemxvLVx1MDAzZXpvbmVfc2l6ZWAgaXMgaW50cm9kdWNlZCB3aGVuIHByZXZpb3VzbHkgdGhlcmUgd2FzIG9ubHkgYGZpbGVfc2VjdG9ycyA9PSB6bG8tXHUwMDNlem9uZV9jYXBhY2l0eWAuIFRoaXMgcHJvYmFibHkgaW5kaWNhdGVzIHNvbWV0aGluZyBhYm91dCBob3cgd2UgaGFuZGxlIHRoZSBmdWxsIHpvbmUgY29uZGl0aW9uLCBvciBwb3RlbnRpYWwgZWRnZSBjYXNlcyB3aXRoIHpvbmUgYm91bmRhcmllcywgc28gSSBoYXZlIHRvIHVuZGVyc3RhbmQgdGhlIHJlYXNvbiBpdCB3YXMgYWRkZWQuXG5cblJpZ2h0LCBzbyBgemxvb3BgIGlzIGEgYmxvY2sgZHJpdmVyLCBmcm9tIHdoYXQgSSBjYW4gZ2xlYW4uIFRvIGdldCBhIGJldHRlciBncmFzcCBvZiB0aGUgbG9naWMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBkcml2ZXIgYWN0dWFsbHkgZG9lcyBhbmQgaG93IHpvbmVzIGFyZSBtYW5hZ2VkLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG1heWJlIHNvbWUgZG9jdW1lbnRhdGlvbiB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIGBmaWxlX3NlY3RvcnNgLCBgemxvLVx1MDAzZXpvbmVfc2l6ZWAgYW5kIGB6bG8tXHUwMDNlem9uZV9jYXBhY2l0eWAsIGFuZCBob3cgdXBkYXRlcyBoYXBwZW4uIFRpbWUgdG8gbG9vayB1cCBgemxvb3AuY2Agd2l0aGluIHRoZSBgZHJpdmVycy9ibG9jay9gIGRpcmVjdG9yeSBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjU0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDA6NTEuNjM5NzQyMTM4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMDkwNzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsb29wX3VwZGF0ZV9zZXFfem9uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jPTMwMD1zdGF0aWMgdm9pZCB6bG9vcF9tYXJrX2VtcHR5KHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgc3RydWN0IHpsb29wX3pvbmUgKnpvbmUpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzA4LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozMDk6c3RhdGljIGludCB6bG9vcF91cGRhdGVfc2VxX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMzEwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz0zNTc9c3RhdGljIGludCB6bG9vcF9vcGVuX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNjctXFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChaTE9PUF9aT05FX1NFUV9FUlJPUiwgXFx1MDAyNnpvbmUtXFx1MDAzZWZsYWdzKSkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozNjg6XFx0XFx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM2OS1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTM4Mj1zdGF0aWMgaW50IHpsb29wX2Nsb3NlX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zOTItXFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChaTE9PUF9aT05FX1NFUV9FUlJPUiwgXFx1MDAyNnpvbmUtXFx1MDAzZWZsYWdzKSkge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzozOTM6XFx0XFx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTM5NC1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTYzND1zdGF0aWMgdm9pZCB6bG9vcF9ydyhzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjY4LVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnpvbmUtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2Njk6XFx0XFx0cmV0ID0gemxvb3BfdXBkYXRlX3NlcV96b25lKHpsbywgem9uZV9ubyk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTY3MC1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnpvbmUtXFx1MDAzZWxvY2spO1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTkzNz1zdGF0aWMgaW50IHpsb29wX3JlcG9ydF96b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9yLFxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTk1Ni1cXHRcXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KFpMT09QX1pPTkVfU0VRX0VSUk9SLCBcXHUwMDI2em9uZS1cXHUwMDNlZmxhZ3MpKSB7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjk1NzpcXHRcXHRcXHRyZXQgPSB6bG9vcF91cGRhdGVfc2VxX3pvbmUoemxvLCB6b25lX25vKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTU4LVxcdFxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xMDY2PXN0YXRpYyBpbnQgemxvb3BfaW5pdF96b25lKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbywgc3RydWN0IHpsb29wX29wdGlvbnMgKm9wdHMsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE0OS1cXHRtdXRleF9sb2NrKFxcdTAwMjZ6b25lLVxcdTAwM2Vsb2NrKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE1MDpcXHRyZXQgPSB6bG9vcF91cGRhdGVfc2VxX3pvbmUoemxvLCB6b25lX25vKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE1MS1cXHRtdXRleF91bmxvY2soXFx1MDAyNnpvbmUtXFx1MDAzZWxvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo0MDo1MS42ODE4Mzg5MDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk2MDg2NTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSd2ZSByZXF1ZXN0ZWQsIHNwZWFraW5nIGFzIGlmIHRoZXNlIGFyZSBteSBpbW1lZGlhdGUgdGhvdWdodHM6XG5cbioqS2NvbmZpZyBDb25maWd1cmF0aW9uIGZvciBgemxvb3BgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHpsb29wYCBzaXR1YXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2hhdCBLY29uZmlnIG9wdGlvbnMgYXJlIGFic29sdXRlbHkgKmVzc2VudGlhbCogZm9yIGl0IHRvIGZ1bmN0aW9uIGNvcnJlY3RseSBhbmQgb3B0aW1hbGx5PyBJIG5lZWQgdG8gbWV0aWN1bG91c2x5IG1hcCBvdXQgdGhlIGRlcGVuZGVuY2llcy4gSXMgaXQgYSBtb2R1bGU/IERvZXMgaXQgbmVlZCBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBlbmFibGVkLCBvciBwZXJoYXBzIGRpc2FibGVkPyBBcmUgdGhlcmUgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIG90aGVyIG1vZHVsZXMgb3Igc3Vic3lzdGVtcyB0aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZD8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgdGhpcyBjb3VsZCBiZSB1c2VkIGluIC0gZGlmZmVyZW50IHRhcmdldCBwbGF0Zm9ybXMsIGRpZmZlcmVudCB1c2UtY2FzZXMuIFdoYXQga25vYnMgYW5kIGRpYWxzIGRvIEkgbmVlZCB0byBleHBvc2UgdG8gdGhlIHVzZXIgdmlhIEtjb25maWcgdG8gYWxsb3cgdGhlbSB0byB0YWlsb3IgYHpsb29wYCB0byB0aGVpciBzcGVjaWZpYyBlbnZpcm9ubWVudD8gSeKAmW0gZW52aXNpb25pbmcgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucywgc28gcGVyaGFwcyBJIG5lZWQgb3B0aW9ucyBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIGNlcnRhaW4gb3B0aW1pemF0aW9ucyBvciB0d2Vha3M/IFdoYXQgYWJvdXQgZGVidWdnaW5nPyBBcmUgdGhlcmUgYW55IGRlYnVnIG9wdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGV4cG9zZWQ/IFRoaXMgcmVxdWlyZXMgYSBtZXRob2RpY2FsIGFwcHJvYWNoLCBzdGVwcGluZyB0aHJvdWdoIHRoZSBjb2RlIGFuZCBpZGVudGlmeWluZyBldmVyeSBzaW5nbGUgY29uZGl0aW9uYWwgZGVwZW5kZW5jeS4gSSBuZWVkIHRvIGdldCB0aGlzIHJpZ2h0IHRoZSBmaXJzdCB0aW1lLCB0byBtaW5pbWlzZSB0aGUgdGltZSB3YXN0ZWQuIFRoaXMgaXNuJ3QganVzdCBhYm91dCBmdW5jdGlvbmFsaXR5OyBpdCdzIGFib3V0IHByb3ZpZGluZyBhICp1c2VyLWZyaWVuZGx5KiBhbmQgKnJvYnVzdCogc2V0IG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUwMiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQwOjU0Ljk3NzkyNzIwMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTM4NTczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bG9vcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTM1Nj1jb25maWcgQkxLX0RFVl9aT05FRF9MT09QXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzY3LVxcdCAgZWNobyBcXFwiYWRkIGlkPTAsem9uZV9zaXplX21iPTI1NixjYXBhY2l0eV9tYj0xNjM4NCxjb252X3pvbmVzPTExXFxcIiBcXHUwMDNlIFxcXFxcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzY4OlxcdFxcdC9kZXYvemxvb3AtY29udHJvbFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQwOjU1LjAxOTMxNzY5MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0MjgwMTY3MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIHpsb29wIENvbXBpbGF0aW9uKipcblxuT2theSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgemxvb3BgIHRhcmdldCB3aXRoaW4gdGhlIGJsb2NrIHN1YnN5c3RlbSBpcyBidWlsdC4gTXkgZmlyc3QgbW92ZSB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvYmxvY2svTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjb21waWxhdGlvbiBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGlzIHBhcnRpY3VsYXIgYmxvY2sgZGV2aWNlIGRyaXZlci4gVGhlIE1ha2VmaWxlIHNob3VsZCBzaGVkIGxpZ2h0IG9uIGhvdyBgemxvb3BgIGlzIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBhbnkgc3BlY2lhbCBmbGFncyBvciBsaWJyYXJpZXMgaW52b2x2ZWQgaW4gaXRzIGJ1aWxkIHByb2Nlc3MuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGNvbnN0cnVjdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkzMSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQwOjU3LjQ0NzM1MzIzN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTgwMDAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bG9vcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svTWFrZWZpbGU9NDA9b2JqLSQoQ09ORklHX0JMS19ERVZfVUJMSylcXHRcXHRcXHQrPSB1YmxrX2Rydi5vXFxuZHJpdmVycy9ibG9jay9NYWtlZmlsZTo0MTpvYmotJChDT05GSUdfQkxLX0RFVl9aT05FRF9MT09QKSArPSB6bG9vcC5vXFxuZHJpdmVycy9ibG9jay9NYWtlZmlsZS00Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDA6NTcuNDg5MTU2NjE3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU1MjQ1MzM4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGhlIGNvbmZpZ3VyYXRpb24gaW4gcXVlc3Rpb24gaXMgYEJMS19ERVZfWk9ORURfTE9PUGAuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIGl0cyBkZXBlbmRlbmNpZXMuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyBhcmUgdGllZCB0byB0aGlzIHNldHRpbmcuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhlbHAgbWUgZmlndXJlIG91dCBob3cgdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIHBvdGVudGlhbCBjb25mbGljdHMsIGFuZCwgdWx0aW1hdGVseSwgaG93IGl0IGJlaGF2ZXMgd2l0aGluIHRoZSBzeXN0ZW0uIExldCdzIHNlZSB3aGF0IHRoaXMgaW1wbGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE4MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQxOjAwLjA0MTYxMjUxMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI0MzgzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQkxLX0RFVl9aT05FRF9MT09QXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWc9MzU0PXNvdXJjZSBcXFwiZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWdcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM1NS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzU2OmNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzU3LVxcdHRyaXN0YXRlIFxcXCJab25lZCBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDE6MDAuMDg0MDU3MzIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNzk5Mjk5NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIGZvciBCTEtfREVWX1pPTkVEX0xPT1AqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgS2NvbmZpZyBmaWxlIGFzc29jaWF0ZWQgd2l0aCBgQkxLX0RFVl9aT05FRF9MT09QYC4gSSdtIGFscmVhZHkgdmlzdWFsaXppbmcgdGhlIHN0cnVjdHVyZS4gSSBleHBlY3QgdG8gc2VlIHRoZSB1c3VhbCBzdXNwZWN0czogdGhlIGBjb25maWdgIGtleXdvcmQgZGVmaW5pbmcgdGhlIHN5bWJvbCwgYSBkZXNjcmlwdGl2ZSBoZWxwIHRleHQgdGhhdCBob3BlZnVsbHkgcHJvdmlkZXMgY2xhcml0eSwgZGVwZW5kZW5jaWVzIHRoYXQgZGV0ZXJtaW5lIHdoZW4gdGhpcyBvcHRpb24gaXMgZXZlbiBwcmVzZW50ZWQsIGFuZCBwb3RlbnRpYWxseSBzb21lIGRlZmF1bHQgdmFsdWVzIG9yIHByb21wdHMuIE15IGV4cGVydCBleWUgd2lsbCBiZSBzY2FubmluZyBmb3IgdGhlIGtleSBpbmZvcm1hdGlvbi4gSSdsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBhdDpcblxuKiAgICoqRGVwZW5kZW5jaWVzKio6IFdoYXQgYXJlIHRoZSBwcmVjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgZm9yIHRoaXMgZmVhdHVyZSB0byBiZSBlbmFibGVkPyBBcmUgdGhlcmUgYW55IG90aGVyIGtlcm5lbCBmZWF0dXJlcyB0aGF0ICptdXN0KiBiZSBlbmFibGVkIG9yICpjYW5ub3QqIGJlIGVuYWJsZWQgYWxvbmdzaWRlIHRoaXMgb25lPyBUaGlzIHdpbGwgZ2l2ZSBtZSBpbW1lZGlhdGUgaW5zaWdodCBpbnRvIGl0cyBpbnRlZ3JhdGlvbiB3aXRoaW4gdGhlIGxhcmdlciBzdG9yYWdlIGVjb3N5c3RlbS5cbiogICAqKkhlbHAgVGV4dCoqOiBUaGUgcXVhbGl0eSBvZiB0aGUgZGVzY3JpcHRpb24gaXMgY3J1Y2lhbC4gRG9lcyBpdCBjbGVhcmx5IGV4cGxhaW4gdGhlIHB1cnBvc2Ugb2YgdGhpcyBvcHRpb24g4oCTIHNwZWNpZmljYWxseSBpdHMgcm9sZSB3aXRoIHJlc3BlY3QgdG8gem9uZWQgYmxvY2sgZGV2aWNlcyBhbmQgbG9vcCBkZXZpY2VzPyBEb2VzIGl0IGNsYXJpZnkgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBpdD8gSSB3YW50IHRvIHNlZSBpZiB0aGUgbWFpbnRhaW5lcnMgaGF2ZSBrZXB0IGl0IGNsZWFyIGFuZCB1cC10by1kYXRlIHdpdGggdGhpcyBuZXdlciBzdG9yYWdlIHRlY2guXG4qICAgKipEZWZhdWx0cyBhbmQgUHJvbXB0Kio6IFdoYXQncyB0aGUgZGVmYXVsdCBiZWhhdmlvciBpZiB0aGUgdXNlciBkb2Vzbid0IGV4cGxpY2l0bHkgY29uZmlndXJlIHRoaXMgb3B0aW9uPyBJcyBpdCByZWFzb25hYmxlLCBvciBkb2VzIGl0IGxlYXZlIHRoZSBzeXN0ZW0gaW4gYSBsZXNzLXRoYW4tb3B0aW1hbCBzdGF0ZT8gRG9lcyB0aGUgcHJvbXB0IG9mZmVyIHVzZWZ1bCBhZHZpY2Ugb3IgY29udGV4dD9cbiogICAqKkZ1cnRoZXIgQ29udGV4dCoqOiBUaGUgcHJlc2VuY2Ugb2YgYW55IGFzc29jaWF0ZWQga2VybmVsIGRvY3VtZW50YXRpb24gd2lsbCBiZSBrZXkuIElmIHRoZXJlIGFyZSBwb2ludGVycyB0byBkb2N1bWVudHMgb3IgZXhhbXBsZXMsIEknbGwgZGVmaW5pdGVseSBjaGVjayB0aG9zZS5cbiogICAqKlBvdGVudGlhbCBDb25mbGljdHMqKjogRXZlbiBpZiB0aGUgZGVwZW5kZW5jaWVzIGFyZSBzdHJhaWdodGZvcndhcmQsIEknbGwgYmUgbG9va2luZyBvdXQgZm9yIGFueSBzdWJ0bGUgY29uZmxpY3RzIG9yIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IG5vdCBiZSBpbW1lZGlhdGVseSBvYnZpb3VzLlxuXG5VbHRpbWF0ZWx5LCBJIHdhbnQgdG8gZm9ybSBhIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBvcHRpb24ncyBwdXJwb3NlLCBpdHMgY29uZGl0aW9ucyBmb3IgdXNlLCBhbmQgaXRzIGltcGFjdCBvbiB0aGUgc3lzdGVtLiBUaGlzIHdpbGwgaGVscCBtZSBhc3Nlc3MgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpcyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBjb3JlIGJsb2NrIGRldmljZSBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NDEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo0MTowNC4yNjM5OTAwMTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM1MDpcXHRcXHQgIFNheSBOIGlmIHlvdSBkb24ndCB3YW50IHRvIHN1cHBvcnQgbGVnYWN5IGNvbW1hbmQgb3Bjb2RlLiBJdCBpc1xcbiAzNTE6XFx0XFx0ICBzdWdnZXN0ZWQgdG8gZW5hYmxlIE4gaWYgeW91ciBhcHBsaWNhdGlvbih1YmxrIHNlcnZlcikgc3dpdGNoZXMgdG9cXG4gMzUyOlxcdFxcdCAgaW9jdGwgY29tbWFuZCBlbmNvZGluZy5cXG4gMzUzOlxcdFxcbiAzNTQ6XFx0c291cmNlIFxcXCJkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZ1xcXCJcXG4gMzU1OlxcdFxcbiAzNTY6XFx0Y29uZmlnIEJMS19ERVZfWk9ORURfTE9PUFxcbiAzNTc6XFx0XFx0dHJpc3RhdGUgXFxcIlpvbmVkIGxvb3BiYWNrIGRldmljZSBzdXBwb3J0XFxcIlxcbiAzNTg6XFx0XFx0ZGVwZW5kcyBvbiBCTEtfREVWX1pPTkVEXFxuIDM1OTpcXHRcXHRoZWxwXFxuIDM2MDpcXHRcXHQgIFNheWluZyBZIGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8gdXNlIGNyZWF0ZSBhIHpvbmVkIGJsb2NrIGRldmljZSB1c2luZ1xcbiAzNjE6XFx0XFx0ICByZWd1bGFyIGZpbGVzIGZvciB6b25lcyAob25lIGZpbGUgcGVyIHpvbmVzKS4gVGhpcyBpcyB1c2VmdWwgdG8gdGVzdFxcbiAzNjI6XFx0XFx0ICBmaWxlIHN5c3RlbXMsIGRldmljZSBtYXBwZXIgYW5kIGFwcGxpY2F0aW9ucyB0aGF0IHN1cHBvcnQgem9uZWQgYmxvY2tcXG4gMzYzOlxcdFxcdCAgZGV2aWNlcy4gVG8gY3JlYXRlIGEgem9uZWQgbG9vcCBkZXZpY2UsIG5vIHVzZXIgdXRpbGl0eSBpcyBuZWVkZWQsIGFcXG4gMzY0OlxcdFxcdCAgem9uZWQgbG9vcCBkZXZpY2UgY2FuIGJlIGNyZWF0ZWQgKG9yIHJlLXN0YXJ0ZWQpIHVzaW5nIGEgY29tbWFuZFxcbiAzNjU6XFx0XFx0ICBsaWtlOlxcbiAzNjY6XFx0XFxuIDM2NzpcXHRcXHQgIGVjaG8gXFxcImFkZCBpZD0wLHpvbmVfc2l6ZV9tYj0yNTYsY2FwYWNpdHlfbWI9MTYzODQsY29udl96b25lcz0xMVxcXCIgXFx1MDAzZSBcXFxcXFxuIDM2ODpcXHRcXHRcXHQvZGV2L3psb29wLWNvbnRyb2xcXG4gMzY5OlxcdFxcbiAzNzA6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ibG9ja2Rldi96b25lZF9sb29wLnJzdCBmb3IgdXNhZ2VcXG4gMzcxOlxcdFxcdCAgZGV0YWlscy5cXG4gMzcyOlxcdFxcbiAzNzM6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAzNzQ6XFx0XFxuIDM3NTpcXHRlbmRpZiAjIEJMS19ERVZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDE6MDQuMjY0MDYxNDIzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NjAxNzk3NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRlcGVuZGVuY2llcyBhbmQgdGhlIFpvbmVkIEJsb2NrIERldmljZSBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIGBCTEtfREVWX1pPTkVEX0xPT1Bg4oCmIHRoYXQgb25lIGltbWVkaWF0ZWx5IHJpbmdzIGEgYmVsbCBhcyBhIGRlcml2ZWQgY2FwYWJpbGl0eS4gUmlnaHQsIGl0J3MgZXhwbGljaXRseSBkZXBlbmRlbnQgb24gYEJMS19ERVZfWk9ORURgLiBNYWtlcyBzZW5zZS4gTG9vcCBkZXZpY2VzIGFyZSBvZnRlbiB1c2VkIHRvIHRlc3Qgb3IgZW11bGF0ZSB1bmRlcmx5aW5nIHN0b3JhZ2UgY2hhcmFjdGVyaXN0aWNzLiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgQkxLX0RFVl9aT05FRGAgYnJpbmdzIHRvIHRoZSB0YWJsZSBmaXJzdC4gTGV0J3MgZGVsdmUgaW50byB0aGUgZGV0YWlscyBvZiB0aGF0IGNvcmUgYmxvY2sgZGV2aWNlIHpvbmluZyBzdXBwb3J0IGFuZCBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBHb3R0YSBnZXQgdGhlIGZvdW5kYXRpb24gcmlnaHQgYmVmb3JlIEkgY2FuIHByb3Blcmx5IGFzc2VzcyBhbnl0aGluZyB0aGF0IGJ1aWxkcyBvbiBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM4NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDE6MDcuMTI0MjQ0OTIzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjUwNTQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9aT05FRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9Nzc9Y29uZmlnIEJMS19ERVZfV1JJVEVfTU9VTlRFRFxcbi0tXFxuYmxvY2svS2NvbmZpZy05Ni1cXG5ibG9jay9LY29uZmlnOjk3OmNvbmZpZyBCTEtfREVWX1pPTkVEXFxuYmxvY2svS2NvbmZpZy05OC1cXHRib29sIFxcXCJab25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDE6MDcuMTY2NzU1MzIyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDczODA5NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBab25lZCBCbG9jayBEZXZpY2UgRHJpdmVyIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGJsb2NrL0tjb25maWdgIGFuZCwgc3BlY2lmaWNhbGx5LCB0aGUgYEJMS19ERVZfWk9ORURgIG9wdGlvbi4gUmlnaHQsIHRoYXQgaW5kaWNhdGVzIGl0J3MgZGVhbGluZyB3aXRoIHpvbmVkIGJsb2NrIGRldmljZXMuIEdvb2QuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLiBJcyB0aGlzIGFib3V0IGFkZGluZyBzdXBwb3J0LCBtb2RpZnlpbmcgZXhpc3RpbmcgYmVoYXZpb3IsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5P1xuXG5UaGUgY29kZSBhbHNvIG1lbnRpb25zIGB6bG9vcGAsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgdGhhdCBjbGV2ZXIgZHJpdmVyIHRoYXQgc2ltdWxhdGVzIHpvbmVkIGJsb2NrIGRldmljZXMgdXNpbmcgcmVndWxhciBmaWxlcy4gSSByZW1lbWJlciBpdCBiZWluZyBhY2Nlc3NpYmxlIHRocm91Z2ggYC9kZXYvemxvb3AtY29udHJvbGAuIEV4Y2VsbGVudC4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSByZWZlcmVuY2VzIHRoZSBgemxvb3BfdXBkYXRlX3NlcV96b25lYCBmdW5jdGlvbi4gVGhhdCdzIG15IHByaW1hcnkgZm9jdXMuXG5cblNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgc3RhdGljLCBJIGhhdmUgdG8gZmluZCB3aGVyZSB0aGlzIGlzIGNhbGxlZC4gT2theSwgaXQncyBjYWxsZWQgZnJvbSBgemxvb3Bfb3Blbl96b25lYCwgYHpsb29wX2Nsb3NlX3pvbmVgLCBgemxvb3BfcndgLCBgemxvb3BfcmVwb3J0X3pvbmVzYCwgYW5kIGB6bG9vcF9pbml0X3pvbmVgLiBUaW1lIHRvIGRpdmUgZGVlcGVyIGludG8gdGhvc2UgY2FsbCBzaXRlcy4gYHpsb29wX3J3YCBpcyBvYnZpb3VzbHkgdGhlIG1vc3QgY3JpdGljYWwsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGNvbnRleHRzLCBzbyBJIG5lZWQgdG8gY2hlY2sgb3V0IHRoZSBvdGhlciBmdW5jdGlvbnMgYXMgd2VsbC4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyB0d2Vha2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Njk0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQxOjExLjM3NDEzODcxNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE3NDIwMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemxvb3BfcndcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuYz01MDA9c3RhdGljIHZvaWQgemxvb3BfcHV0X2NtZChzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTExLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo1MTI6c3RhdGljIHZvaWQgemxvb3BfcndfY29tcGxldGUoc3RydWN0IGtpb2NiICppb2NiLCBsb25nIHJldClcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTEzLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz01MjA9c3RhdGljIGludCB6bG9vcF9kb19ydyhzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNTYyLVxcdGNtZC1cXHUwMDNlaW9jYi5raV9maWxwID0gem9uZS1cXHUwMDNlZmlsZTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6NTYzOlxcdGNtZC1cXHUwMDNlaW9jYi5raV9jb21wbGV0ZSA9IHpsb29wX3J3X2NvbXBsZXRlO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01NjQtXFx0aWYgKCF6bG8tXFx1MDAzZWJ1ZmZlcmVkX2lvKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTU3Mz1zdGF0aWMgaW50IHpsb29wX3NlcV93cml0ZV9wcmVwKHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy02MzMtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjYzNDpzdGF0aWMgdm9pZCB6bG9vcF9ydyhzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTYzNS17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjg1LVxcdGlmIChyZXQgIT0gLUVJT0NCUVVFVUVEKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo2ODY6XFx0XFx0emxvb3BfcndfY29tcGxldGUoXFx1MDAyNmNtZC1cXHUwMDNlaW9jYiwgcmV0KTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNjg3LVxcdHpsb29wX3B1dF9jbWQoY21kKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz03NDY9c3RhdGljIHZvaWQgemxvb3BfaGFuZGxlX2NtZChzdHJ1Y3Qgemxvb3BfY21kICpjbWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzU5LVxcdFxcdC8qXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc2MDpcXHRcXHQgKiB6bG9vcF9ydygpIGFsd2F5cyBleGVjdXRlcyBhc3luY2hyb25vdXNseSBvciBjb21wbGV0ZXNcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzYxLVxcdFxcdCAqIGRpcmVjdGx5LlxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NjItXFx0XFx0ICovXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc2MzpcXHRcXHR6bG9vcF9ydyhjbWQpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NjQtXFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo0MToxMS40MTU4ODc3MTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyOTI2NDAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGB6bG9vcF9oYW5kbGVfY21kYCBDYWxsIFNpdGVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBzdXJyb3VuZGluZyBgemxvb3BfaGFuZGxlX2NtZGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IGluIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZC4gVGhlIGVhc2llc3Qgd2F5IHRvIGRvIHRoYXQgaXMgdG8gaWRlbnRpZnkgaXRzIGNhbGwgc2l0ZXMuIFdoZXJlIGFyZSBhbGwgdGhlIHBsYWNlcyBpbiB0aGUgY29kZSB0aGF0IGFjdHVhbGx5IHVzZSBgemxvb3BfaGFuZGxlX2NtZGA/IEEgcXVpY2sgZ3JlcCBvciBjb2RlIHNlYXJjaCBzaG91bGQgZ2V0IG1lIGEgbGlzdCBvZiBhbGwgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgaXQuIFRoaXMgd2lsbCBwcm92aWRlIGltbWVkaWF0ZSBpbnNpZ2h0IGludG8gaXRzIHJlc3BvbnNpYmlsaXR5IGFuZCB3aGVyZSBpdCBmaXRzIHdpdGhpbiB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4gSSdtIGV4cGVjdGluZyB0byBzZWUgYSByZWxhdGl2ZWx5IGZvY3VzZWQgc2V0IG9mIGNhbGxlcnMg4oCTIGlkZWFsbHksIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGV2ZW50IGxvb3Agb3IgY29tbWFuZCBwcm9jZXNzaW5nIG1vZHVsZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlciBpcyBrZXksIGFzIGl0IHByb3ZpZGVzIHRoZSBtb3N0IGNvbnRleHQgYWJvdXQgdGhlIGFyZ3VtZW50cyBwcm92aWRlZCB0byBgemxvb3BfaGFuZGxlX2NtZGAgYW5kLCBpbiB0dXJuLCBob3cgdGhlIGZ1bmN0aW9uIHNob3VsZCBiZWhhdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2OTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo0MToxNC41NDUxNzI3NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4MDMwMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemxvb3BfaGFuZGxlX2NtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jPTcyOD1zdGF0aWMgaW50IHpsb29wX2ZsdXNoKHN0cnVjdCB6bG9vcF9kZXZpY2UgKnpsbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NDUtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc0NjpzdGF0aWMgdm9pZCB6bG9vcF9oYW5kbGVfY21kKHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzQ3LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz03OTM9c3RhdGljIHZvaWQgemxvb3BfY21kX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzk4LVxcdGN1cnJlbnQtXFx1MDAzZWZsYWdzIHw9IFBGX0xPQ0FMX1RIUk9UVExFIHwgUEZfTUVNQUxMT0NfTk9JTztcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6Nzk5OlxcdHpsb29wX2hhbmRsZV9jbWQoY21kKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtODAwLVxcdGN1cnJlbnQtXFx1MDAzZWZsYWdzID0gb3JpZ19mbGFncztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDE6MTQuNTg4OTg0MzM5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNzIwOTg5OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNvbnNpZGVyaW5nIFdvcmtxdWV1ZSBBbHRlcm5hdGl2ZXMqKlxuXG5SaWdodCwgc28gYHpsb29wX2NtZF93b3JrZm5gIGlzIGEgd29ya3F1ZXVlIGZ1bmN0aW9uIOKAkyB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBCdXQsIGhhbmcgb24sIGlzIHRoYXQgKnJlYWxseSogdGhlIGJlc3QgYXBwcm9hY2ggaGVyZT8gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGFyZSB0aGVyZSBhbHRlcm5hdGl2ZXMgdGhhdCBtaWdodCBiZSBhIGJldHRlciBmaXQsIGVzcGVjaWFsbHkgaWYgd2UncmUgZGVhbGluZyB3aXRoIGJpbyBvcGVyYXRpb25zPyBTb21ldGhpbmcgbGlrZSBgemxvb3Bfc3VibWl0X2Jpb2AgZmVlbHMgbGlrZSBpdCBtaWdodCBiZSBhIG1vcmUgdGFyZ2V0ZWQsIHBvdGVudGlhbGx5IG1vcmUgZWZmaWNpZW50LCBjaG9pY2UgaW4gdGhpcyBjb250ZXh0LiBJIG5lZWQgdG8gd2VpZ2ggdGhlIHByb3MgYW5kIGNvbnMgb2YgdXNpbmcgYSBnZW5lcmljIHdvcmtxdWV1ZSBmdW5jdGlvbiB2ZXJzdXMgYSBwb3RlbnRpYWxseSBtb3JlIHNwZWNpYWxpemVkIGJpbyBzdWJtaXNzaW9uIG1lY2hhbmlzbS4gSXQncyBhIHF1ZXN0aW9uIG9mIHdoZXRoZXIgd2UgYmVuZWZpdCBmcm9tIHRoZSBtb3JlIGdyYW51bGFyIGNvbnRyb2wsIHNjaGVkdWxpbmcsIGFuZCBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBvZmZlcmVkIGJ5IHNvbWV0aGluZyB0YWlsb3JlZCB0byB0aGUgc3BlY2lmaWMgdGFzay5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE2NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQxOjE3LjY2MTA4NzI1N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA5MjQwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemxvb3BfY21kX3dvcmtmblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jPTc0Nj1zdGF0aWMgdm9pZCB6bG9vcF9oYW5kbGVfY21kKHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03OTItXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjc5MzpzdGF0aWMgdm9pZCB6bG9vcF9jbWRfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtNzk0LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz04ODc9c3RhdGljIGJsa19zdGF0dXNfdCB6bG9vcF9xdWV1ZV9ycShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy05MTAtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjkxMTpcXHRJTklUX1dPUksoXFx1MDAyNmNtZC1cXHUwMDNld29yaywgemxvb3BfY21kX3dvcmtmbik7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkxMi1cXHRxdWV1ZV93b3JrKHpsby1cXHUwMDNld29ya3F1ZXVlLCBcXHUwMDI2Y21kLVxcdTAwM2V3b3JrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDE6MTcuNzAyMDI4MjM2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTEyMDAyOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFpvbmVkIEJsb2NrIERldmljZSBSZXF1ZXN0IEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYHpsb29wYCBkcml2ZXIsIGFuZCBteSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyB0aGUgcmVxdWVzdCBxdWV1ZWluZy4gU3BlY2lmaWNhbGx5LCBJJ20gemVyb2luZyBpbiBvbiBgemxvb3BfcXVldWVfcnFgLiBUaGF0J3MgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgYmxvY2sgZGV2aWNlIHJlcXVlc3RzLiBNYWtlcyBzZW5zZS4gQnV0IHRoYXQgYmVncyB0aGUgcXVlc3Rpb24sIHdoYXQncyB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIGhvdyB0aGUgem9uZWQgYmxvY2sgaW50ZXJmYWNlIGlzIGJlaW5nIG1hbmFnZWQgaGVyZT9cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHpvbmVkIGJsb2NrIGZsb3cgaGVyZSwgYW5kIHJpZ2h0IG5vdyBJIGFtIHdvbmRlcmluZyB3aGF0IHJvbGUgYHpsb29wX29wZW5fem9uZWAgYW5kIGB6bG9vcF9jbG9zZV96b25lYCBwbGF5IGluIHRoYXQgb3ZlcmFsbCBzY2hlbWUuIFRoZXkncmUgY2xlYXJseSBpbXBvcnRhbnQgem9uZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucywgc28gSSB3YW50IHRvIGtub3cgaG93IHRoZSByZXF1ZXN0IHF1ZXVpbmcgaW50ZWdyYXRlcyB3aXRoIHRoZWlyIGZ1bmN0aW9uYWxpdHkuIEFyZSB0aGV5IGNhbGxlZCBiZWZvcmUsIGFmdGVyLCBvciBkdXJpbmcgYHpsb29wX3F1ZXVlX3JxYCBleGVjdXRpb24/IElzIHRoZXJlIGFueSBpbnRlcmFjdGlvbiB3aXRoIHRob3NlIGZ1bmN0aW9ucyB3aGVuIGZsdXNoaW5nIG9yIHdyaXRlLWNsb3NpbmcgYSB6b25lPyBJIGhhdmUgdG8gbG9vayBtb3JlIGRlZXBseSBpbnRvIHRoZSBkcml2ZXIncyBmbG93IGFuZCBsb2dpYyB0byBlbnN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhvc2UgY29yZSB6b25lIG1hbmFnZW1lbnQgY2FsbHMgYW5kIHRoZSBvdmVyYWxsIGJsb2NrIEkvTyBwcm9jZXNzaW5nIGlzIGNvbXBsZXRlIGFuZCBhY2N1cmF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYyOCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQxOjIxLjAxMzIzMDY0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTAwNTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bG9vcF9vcGVuX3pvbmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuYz0zMDk9c3RhdGljIGludCB6bG9vcF91cGRhdGVfc2VxX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNTYtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjM1NzpzdGF0aWMgaW50IHpsb29wX29wZW5fem9uZShzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8sIHVuc2lnbmVkIGludCB6b25lX25vKVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0zNTgte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTc0Nj1zdGF0aWMgdm9pZCB6bG9vcF9oYW5kbGVfY21kKHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy03NzctXFx0Y2FzZSBSRVFfT1BfWk9ORV9PUEVOOlxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo3Nzg6XFx0XFx0Y21kLVxcdTAwM2VyZXQgPSB6bG9vcF9vcGVuX3pvbmUoemxvLCBycV96b25lX25vKHJxKSk7XFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTc3OS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDE6MjEuMDUyMjQyNjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxNDcxNDkzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIFpsb29wIENvbW1hbmQgRmxvdyoqXG5cblJpZ2h0LCBzbyBJJ20gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggb2YgdGhlc2UgYHpsb29wYCBmdW5jdGlvbnMgYW5kIG1hcHBpbmcgdGhlaXIgaW50ZXJhY3Rpb25zLiBgemxvb3Bfb3Blbl96b25lYCwgYHpsb29wX2Nsb3NlX3pvbmVgLCBhbmQgYHpsb29wX3J3YCDigJMgdGhvc2UgYXJlIHRoZSBrZXkgem9uZSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLCBhcmVuJ3QgdGhleT8gVGhleSdyZSBhbGwgdHJpZ2dlcmVkLCB1bHRpbWF0ZWx5LCBmcm9tIGB6bG9vcF9oYW5kbGVfY21kYC4gSSBzZWUuIGB6bG9vcF9oYW5kbGVfY21kYCBpdHNlbGYgaXMgY2FsbGVkIGJ5IGB6bG9vcF9jbWRfd29ya2ZuYCwgd2hpY2gsIGluIHR1cm4sIGlzIHF1ZXVlZCBmb3IgZXhlY3V0aW9uIGJ5IGB6bG9vcF9xdWV1ZV9ycWAuIFNvIHdlIGhhdmUgdGhpcyBuZWF0IHF1ZXVlaW5nIG1lY2hhbmlzbSBmb3IgYXN5bmNocm9ub3VzIHByb2Nlc3NpbmcsIG1ha2VzIHNlbnNlIGZvciB0aGlzIGtpbmQgb2Ygd29ya2xvYWQuXG5cbkJ1dCBob2xkIG9uLCB3aGF0IGFib3V0IGB6bG9vcF9yZXBvcnRfem9uZXNgPyBUaGF0J3MgdGhlIGZ1bmN0aW9uIGZvciBkdW1waW5nIHRoZSB6b25lIHN0YXRlLCByaWdodD8gV2hlcmUgZG9lcyAqdGhhdCogZml0IGludG8gdGhpcyB3aG9sZSBjb250cm9sIGZsb3c/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0J3MgbWFuYWdlZCB0aGUgc2FtZSB3YXksIG9yIGlmIGl0IGhhcyBhIGRpZmZlcmVudCBlbnRyeSBwb2ludCBpbnRvIHRoZSBzeXN0ZW0uIEFyZSB0aGVyZSBvdGhlciBmdW5jdGlvbnMgbGlrZSBpdCwgYW5kIGRvIHRoZXkgYWxzbyBjYWxsIHRoZSBgaGFuZGxlX2NtZGAgZnVuY3Rpb25zPyBUaGlzIGNvdWxkIGJlIGEgdG90YWxseSBkaWZmZXJlbnQgY29kZSBwYXRoLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHJlcG9ydGluZyB0aGUgem9uZSBzdGF0ZXMgY29tcGFyZWQgdG8gdGhlIGBSV2AsIGBvcGVuYCwgb3IgYGNsb3NlYCBmdW5jdGlvbnMgbWF5IGJlIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gSSBzaG91bGQgY2hlY2sgaG93IHRoYXQgZnVuY3Rpb24gaXMgaW50ZWdyYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE4NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQxOjI0LjY2Njk2MDAzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTc3MTM1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bG9vcF9yZXBvcnRfem9uZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuYz05MjI9c3RhdGljIGludCB6bG9vcF9vcGVuKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBibGtfbW9kZV90IG1vZGUpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTM2LVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5Mzc6c3RhdGljIGludCB6bG9vcF9yZXBvcnRfem9uZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHNlY3Rvcl90IHNlY3RvcixcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtOTM4LVxcdFxcdHVuc2lnbmVkIGludCBucl96b25lcywgc3RydWN0IGJsa19yZXBvcnRfem9uZXNfYXJncyAqYXJncylcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYz0xMDA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgemxvb3BfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMDExLVxcdC5vcGVuXFx0XFx0XFx0PSB6bG9vcF9vcGVuLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMDEyOlxcdC5yZXBvcnRfem9uZXNcXHRcXHQ9IHpsb29wX3JlcG9ydF96b25lcyxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTAxMy1cXHQuZnJlZV9kaXNrXFx0XFx0PSB6bG9vcF9mcmVlX2Rpc2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQxOjI0LjcwODczNzA4OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTI4NDE2NTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBCbG9jayBEZXZpY2UgT3BlcmF0aW9uczogYHpsb29wX3JlcG9ydF96b25lc2AgYW5kIGB6bG9vcF9pbml0X3pvbmVgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCBgemxvb3BfcmVwb3J0X3pvbmVzYCBhbmQgYHpsb29wX2luaXRfem9uZWAuIFRoZSBjb250ZXh0IHNjcmVhbXMgXCJibG9jayBkZXZpY2Ugb3BlcmF0aW9uLFwiIGRvZXNuJ3QgaXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIHJvbGVzIHdpdGhpbiB0aGUgYnJvYWRlciBzdG9yYWdlIGZyYW1ld29yay4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBob3cgdGhlc2UgZnVuY3Rpb25zIGhhbmRsZSB6b25lZCBibG9jayBkZXZpY2VzLCBsaWtlbHkgaW52b2x2aW5nIHpvbmUgbWFuYWdlbWVudCBhbmQgaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYXJlIGVhY2ggZnVuY3Rpb25zIG1haW4gZnVuY3Rpb24uIGB6bG9vcF9yZXBvcnRfem9uZXNgIGlzIGxpa2VseSBpbnZvbHZlZCBpbiByZXRyaWV2aW5nIGluZm9ybWF0aW9uLCBtYXliZSBhYm91dCB0aGUgYXZhaWxhYmxlIHpvbmVzIG9uIGEgZGV2aWNlLiBBbmQgYHpsb29wX2luaXRfem9uZWAsIHRoYXQgc291bmRzIGxpa2UgYSBwcmVyZXF1aXNpdGUgZnVuY3Rpb247IGEgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRoZSBpbml0aWFsIHNldHVwIG9yIHN0YXRlIHRyYW5zaXRpb25zIGZvciB0aG9zZSB6b25lcywgcGVyaGFwcyBzZXR0aW5nIHVwIG1ldGFkYXRhIG9yIHByZXBhcmluZyB0aGVtIGZvciB1c2UuIEkgc2hvdWxkIGxvb2sgaW50byB0aGUgc291cmNlIHRvIGNvbmZpcm0sIGJ1dCB0aGF0J3MgbXkgaW5pdGlhbCBoeXBvdGhlc2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODMzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDE6MjcuODM3MTU2Mjc1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDQ2NTA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bG9vcF9pbml0X3pvbmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuYz0xMDM1PXN0YXRpYyBpbnQgemxvb3BfZ2V0X2Jsb2NrX3NpemUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLFxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEwNjUtXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEwNjY6c3RhdGljIGludCB6bG9vcF9pbml0X3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCBzdHJ1Y3Qgemxvb3Bfb3B0aW9ucyAqb3B0cyxcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTA2Ny1cXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgem9uZV9ubywgYm9vbCByZXN0b3JlKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTExNzU9c3RhdGljIGludCB6bG9vcF9jdGxfYWRkKHN0cnVjdCB6bG9vcF9vcHRpb25zICpvcHRzKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyNzEtXFx0ICogSWYgd2UgYWxyZWFkeSBoYXZlIHpvbmUgZmlsZXMsIHdlIGFyZSByZXN0b3JpbmcgYSBkZXZpY2UgY3JlYXRlZCBieSBhXFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjEyNzI6XFx0ICogcHJldmlvdXMgYWRkIG9wZXJhdGlvbi4gSW4gdGhpcyBjYXNlLCB6bG9vcF9pbml0X3pvbmUoKSB3aWxsIGNoZWNrXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTEyNzMtXFx0ICogdGhhdCB0aGUgem9uZSBmaWxlcyBhcmUgY29uc2lzdGVudCB3aXRoIHRoZSB6b25lIGNvbmZpZ3VyYXRpb24gZ2l2ZW4uXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTI3Ni1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfem9uZXM7IGkrKykge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxMjc3OlxcdFxcdHJldCA9IHpsb29wX2luaXRfem9uZSh6bG8sIG9wdHMsIGksIHJlc3RvcmUpO1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xMjc4LVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQxOjI3Ljg3NzYyNjA0NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODkxMDEzMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIERldmljZSBBZGRpdGlvbiBGbG93KipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCB3aGF0IGhhcHBlbnMgd2hlbiBhIG5ldyBkZXZpY2UgaXMgYWRkZWQgdGhyb3VnaCBgL2Rldi96bG9vcC1jb250cm9sYC4gVGhlIGtleSBmdW5jdGlvbiBoZXJlIGlzIGB6bG9vcF9jdGxfYWRkYCwgdGhhdCdzIHRoZSBlbnRyeSBwb2ludCB3ZSBuZWVkIHRvIHNjcnV0aW5pemUuIExldCdzIGRpdmUgcmlnaHQgaW50byBgemxvb3BfY3RsX2FkZGAgYW5kIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgZGV2aWNlIHJlZ2lzdHJhdGlvbiBhbmQgc2V0dXAuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGludHJpY2FjaWVzIG9mIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBrZXJuZWwgbW9kdWxlcyBhbmQgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBpdCBtaWdodCBpbnRyb2R1Y2UuIFRpbWUgdG8gcHVsbCB1cCB0aGUgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6OTQ0NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQxOjMwLjc2ODY0MjUxNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE0MzIwMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemxvb3BfY3RsX2FkZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jPTExNTY9c3RhdGljIGJvb2wgemxvb3BfZGV2X2V4aXN0cyhzdHJ1Y3Qgemxvb3BfZGV2aWNlICp6bG8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTE3NC1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTE3NTpzdGF0aWMgaW50IHpsb29wX2N0bF9hZGQoc3RydWN0IHpsb29wX29wdGlvbnMgKm9wdHMpXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTExNzYte1xcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTE2NDU9c3RhdGljIHNzaXplX3Qgemxvb3BfY3RsX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZixcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy0xNjgzLVxcdGNhc2UgWkxPT1BfQ1RMX0FERDpcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTY4NDpcXHRcXHRyZXQgPSB6bG9vcF9jdGxfYWRkKFxcdTAwMjZvcHRzKTtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTY4NS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDE6MzAuODEwMDc4MzI0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MzYwMzE0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBab25lZCBMb29wIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIGB6bG9vcF91cGRhdGVfc2VxX3pvbmVgLCBhbmQgdGhhdCBmdW5jdGlvbiBpcyBrZXkgaGVyZS4gSXQncyBjYWxsZWQgYnkgYSBidW5jaCBvZiBmdW5jdGlvbnMg4oCTIGB6bG9vcF9vcGVuX3pvbmVgLCBgemxvb3BfY2xvc2Vfem9uZWAsIGB6bG9vcF9yd2AgKHdoaWNoIGdvZXMgdGhyb3VnaCBgemxvb3BfaGFuZGxlX2NtZGApLCBgemxvb3BfcmVwb3J0X3pvbmVzYCwgYW5kIGB6bG9vcF9pbml0X3pvbmVgICh2aWEgYHpsb29wX2N0bF9hZGRgKS4gSXQgbG9va3MgbGlrZSB0aGVzZSBjYWxscyBjb3ZlciBhbGwgdGhlIG1ham9yIGVudHJ5IHBvaW50cyBpbnRvIHRoZSB6b25lZCBsb29wIGZ1bmN0aW9uYWxpdHkuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpcyBhIGZpeCBmb3IgYSBwb3RlbnRpYWwgaXNzdWUgd2hlcmUgYGZpbGVfc2VjdG9yc2AgY291bGQgYmUgZXF1YWwgdG8gYHpsby1cdTAwM2V6b25lX3NpemVgLiAgSSBzZWUgdGhlIHByb2JsZW07IGB6bG8tXHUwMDNlem9uZV9zaXplYCAqc2hvdWxkKiBiZSBsYXJnZXIgdGhhbiBgemxvLVx1MDAzZXpvbmVfY2FwYWNpdHlgIGluIHRoaXMgY29udGV4dCwgcmlnaHQ/ICBUaGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGNvbmRpdGlvbiB3aGVyZSBgZmlsZV9zZWN0b3JzYCBpcyAqYWxzbyogZXF1YWwgdG8gYHpsby1cdTAwM2V6b25lX3NpemVgIHdoZW4gaXQgc2hvdWxkbnQgYmUuIFRoaXMgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIHpvbmUgYm91bmRhcnkgY2FsY3VsYXRpb25zIG9yIHNlY3RvciBhbGxvY2F0aW9uIHdpdGhpbiBhIHpvbmUuIEl0J3MgZnVuY3Rpb25hbCwgd2hpY2ggaXMgZ29vZCDigJMgaXQncyBhZGRyZXNzaW5nIGEgcmVhbCBidWcgYW5kIHBvdGVudGlhbGx5IHByZXZlbnRpbmcgZGF0YSBjb3JydXB0aW9uIG9yIGluY29ycmVjdCB6b25lIGhhbmRsaW5nLiBBZGRpbmcgdGhlIGNoZWNrIGBcdTAwMjZcdTAwMjYgZmlsZV9zZWN0b3JzICE9IHpsby1cdTAwM2V6b25lX3NpemVgIHRvIHRoZSBlcnJvciBjb25kaXRpb24gYW5kIGB8fCBmaWxlX3NlY3RvcnMgPT0gemxvLVx1MDAzZXpvbmVfc2l6ZWAgdG8gdGhlIGZ1bGwgY2hlY2sgc2VlbXMgbGlrZSB0aGUgY29ycmVjdCBhcHByb2FjaC5cblxuTm93LCBhY2Nlc3NpYmlsaXR5Li4uIGB6bG9vcGAgaXMgcmVhY2hhYmxlIHZpYSBgL2Rldi96bG9vcC1jb250cm9sYCwgc28gdGhlIHVzZXIgaGFzIGNvbnRyb2wuIEl0IHJlcXVpcmVzIGBCTEtfREVWX1pPTkVEX0xPT1BgIGNvbmZpZywgd2hpY2ggZGVwZW5kcyBvbiBgQkxLX0RFVl9aT05FRGAsIG1ha2VzIHNlbnNlLlxuXG5MZXQncyBxdWlja2x5IHJlY2FwIHRoZSBpbXBvcnRhbnQgc3ltYm9sczogYHpsb29wX3VwZGF0ZV9zZXFfem9uZWAgaXMgdGhlIGxpbmNocGluLCBhbmQgdGhlIGNhbGxlciBmdW5jdGlvbnMgbGlrZSBgemxvb3Bfb3Blbl96b25lYCwgYHpsb29wX2Nsb3NlX3pvbmVgLCBldGMuIGFyZSBjcml0aWNhbCBlbnRyeSBwb2ludHMuIGB6bG9vcF9jdGxfd3JpdGVgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgYWRkaW5nIHRoZSBkZXZpY2UsIGB6bG9vcF9xdWV1ZV9ycWAgaXMgdGhlIGJsb2NrIHJlcXVlc3QsIGFuZCBgemxvb3BfcmVwb3J0X3pvbmVzYCBpcyByZXBvcnRpbmcgem9uZSBpbmZvLiBHaXZlbiB0aGUgbnVtYmVyIG9mIGNhbGxzIHRvIGB6bG9vcF91cGRhdGVfc2VxX3pvbmVgLCBJJ2QgbmVlZCB0byBjb25maXJtIGlmIHRoZSBjb21waWxlciBpbmxpbmVzIHRoYXQgZnVuY3Rpb247IGl0J3Mgc3RhdGljLCBidXQgc2VlbXMgc3Vic3RhbnRpYWwgZW5vdWdoIHRvIGF2b2lkIGlubGluaW5nLiBUaGF0J2xsIGFmZmVjdCBwZXJmb3JtYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg2OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo0MTozNy42NDYxMTMyMzlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzOTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDksXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMDk6XFx0c3RhdGljIGludCB6bG9vcF91cGRhdGVfc2VxX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcXG4gMzEwOlxcdHtcXG4gMzExOlxcdFxcdHN0cnVjdCB6bG9vcF96b25lICp6b25lID0gXFx1MDAyNnpsby1cXHUwMDNlem9uZXNbem9uZV9ub107XFxuIDMxMjpcXHRcXHRzdHJ1Y3Qga3N0YXQgc3RhdDtcXG4gMzEzOlxcdFxcdHNlY3Rvcl90IGZpbGVfc2VjdG9ycztcXG4gMzE0OlxcdFxcdGludCByZXQ7XFxuIDMxNTpcXHRcXG4gMzE2OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnpvbmUtXFx1MDAzZWxvY2spO1xcbiAzMTc6XFx0XFxuIDMxODpcXHRcXHRyZXQgPSB2ZnNfZ2V0YXR0cihcXHUwMDI2em9uZS1cXHUwMDNlZmlsZS1cXHUwMDNlZl9wYXRoLCBcXHUwMDI2c3RhdCwgU1RBVFhfU0laRSwgMCk7XFxuIDMxOTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiAzMjA6XFx0XFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gZ2V0IHpvbmUgJXUgZmlsZSBzdGF0IChlcnI9JWQpXFxcXG5cXFwiLFxcbiAzMjE6XFx0XFx0XFx0ICAgICAgIHpvbmVfbm8sIHJldCk7XFxuIDMyMjpcXHRcXHRcXHRzZXRfYml0KFpMT09QX1pPTkVfU0VRX0VSUk9SLCBcXHUwMDI2em9uZS1cXHUwMDNlZmxhZ3MpO1xcbiAzMjM6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzI0OlxcdFxcdH1cXG4gMzI1OlxcdFxcbiAzMjY6XFx0XFx0ZmlsZV9zZWN0b3JzID0gc3RhdC5zaXplIFxcdTAwM2VcXHUwMDNlIFNFQ1RPUl9TSElGVDtcXG4gMzI3OlxcdFxcdGlmIChmaWxlX3NlY3RvcnMgXFx1MDAzZSB6bG8tXFx1MDAzZXpvbmVfY2FwYWNpdHkgXFx1MDAyNlxcdTAwMjZcXG4gMzI4OlxcdFxcdCAgICBmaWxlX3NlY3RvcnMgIT0gemxvLVxcdTAwM2V6b25lX3NpemUpIHtcXG4gMzI5OlxcdFxcdFxcdHByX2VycihcXFwiWm9uZSAldSBmaWxlIHRvbyBsYXJnZSAoJWxsdSBzZWN0b3JzIFxcdTAwM2UgJWxsdSlcXFxcblxcXCIsXFxuIDMzMDpcXHRcXHRcXHQgICAgICAgem9uZV9ubywgZmlsZV9zZWN0b3JzLCB6bG8tXFx1MDAzZXpvbmVfY2FwYWNpdHkpO1xcbiAzMzE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDMzMjpcXHRcXHR9XFxuIDMzMzpcXHRcXG4gMzM0OlxcdFxcdGlmICghSVNfQUxJR05FRChzdGF0LnNpemUsIHpsby1cXHUwMDNlYmxvY2tfc2l6ZSkpIHtcXG4gMzM1OlxcdFxcdFxcdHByX2VycihcXFwiWm9uZSAldSBmaWxlIHNpemUgKCVsbHUpIG5vdCBhbGlnbmVkIHRvIGJsb2NrIHNpemUgJXVcXFxcblxcXCIsXFxuIDMzNjpcXHRcXHRcXHQgICAgICAgem9uZV9ubywgc3RhdC5zaXplLCB6bG8tXFx1MDAzZWJsb2NrX3NpemUpO1xcbiAzMzc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDMzODpcXHRcXHR9XFxuIDMzOTpcXHRcXG4gMzQwOlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2em9uZS1cXHUwMDNld3BfbG9jayk7XFxuIDM0MTpcXHRcXHRpZiAoIWZpbGVfc2VjdG9ycykge1xcbiAzNDI6XFx0XFx0XFx0emxvb3BfbWFya19lbXB0eSh6bG8sIHpvbmUpO1xcbiAzNDM6XFx0XFx0fSBlbHNlIGlmIChmaWxlX3NlY3RvcnMgPT0gemxvLVxcdTAwM2V6b25lX2NhcGFjaXR5IHx8XFxuIDM0NDpcXHRcXHRcXHQgICBmaWxlX3NlY3RvcnMgPT0gemxvLVxcdTAwM2V6b25lX3NpemUpIHtcXG4gMzQ1OlxcdFxcdFxcdHpsb29wX21hcmtfZnVsbCh6bG8sIHpvbmUpO1xcbiAzNDY6XFx0XFx0fSBlbHNlIHtcXG4gMzQ3OlxcdFxcdFxcdGlmICh6b25lLVxcdTAwM2Vjb25kICE9IEJMS19aT05FX0NPTkRfSU1QX09QRU4gXFx1MDAyNlxcdTAwMjZcXG4gMzQ4OlxcdFxcdFxcdCAgICB6b25lLVxcdTAwM2Vjb25kICE9IEJMS19aT05FX0NPTkRfRVhQX09QRU4pXFxuIDM0OTpcXHRcXHRcXHRcXHR6b25lLVxcdTAwM2Vjb25kID0gQkxLX1pPTkVfQ09ORF9DTE9TRUQ7XFxuIDM1MDpcXHRcXHRcXHR6b25lLVxcdTAwM2V3cCA9IHpvbmUtXFx1MDAzZXN0YXJ0ICsgZmlsZV9zZWN0b3JzO1xcbiAzNTE6XFx0XFx0fVxcbiAzNTI6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnpvbmUtXFx1MDAzZXdwX2xvY2spO1xcbiAzNTM6XFx0XFxuIDM1NDpcXHRcXHRyZXR1cm4gMDtcXG4gMzU1OlxcdH1cXG4gMzU2OlxcdFxcbiAzNTc6XFx0c3RhdGljIGludCB6bG9vcF9vcGVuX3pvbmUoc3RydWN0IHpsb29wX2RldmljZSAqemxvLCB1bnNpZ25lZCBpbnQgem9uZV9ubylcXG4gMzU4OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDE6MzcuNjQ2MjE4OTE5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTYwODQ2MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIEVudHJ5IFBvaW50cyBpbiBhIFN0YXRpYyBDb250ZXh0KipcblxuQWxyaWdodCwgc28gdGhlIHN1YmplY3QgaXNuJ3QgKnRpbnkqLCBidXQgaXQncyBjbGVhcmx5IHN0YXRpYy4gVGhhdCdzIG15IGZpcnN0IG9ic2VydmF0aW9uLiBOb3cgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cywgYXMgdGhhdCdzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMgbGlrZWx5IHJlc2lkZS4gSSBub3RpY2VkIHRoYXQgYHpsb29wX2N0bF93cml0ZWAgaXMgc3RhdGljIGFzIHdlbGwsIHdoaWNoIG1ha2VzIGl0IGxlc3MgaW1tZWRpYXRlbHkgYXBwZWFsaW5nLiBIb3dldmVyLCBpdCAqaXMqIGFzc2lnbmVkIHRvIGBmaWxlX29wZXJhdGlvbnNgLCB3aGljaCBjaGFuZ2VzIHRoaW5ncyBzaWduaWZpY2FudGx5LiBTbywgbXkgZm9jdXMgc2hvdWxkIHNoaWZ0IHRvIGV4cGxvcmluZyB0aG9zZSBmaWxlIG9wZXJhdGlvbiBzdHJ1Y3R1cmVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBkaWcgaW50byBib3RoIGB6bG9vcF9mb3BzYCBhbmQgYHpsb29wX2N0bF9mb3BzYCBhbmQgc2VlIHdoYXQncyBiZWluZyBkb25lLCBhbmQgaG93IHRoZSBzdGF0aWMgZWxlbWVudHMgYXJlIHVsdGltYXRlbHkgcmVhY2hlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NjUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjQxOjQxLjEwMjMwNTkzMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE3MjY5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemxvb3BfY3RsX2ZvcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svemxvb3AuYz0xNzMxPXN0YXRpYyBpbnQgemxvb3BfY3RsX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTczNS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6MTczNjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6bG9vcF9jdGxfZm9wcyA9IHtcXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTczNy1cXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTE3NDQ9c3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHpsb29wX21pc2MgPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmMtMTc0Ni1cXHQubmFtZVxcdFxcdD0gXFxcInpsb29wLWNvbnRyb2xcXFwiLFxcbmRyaXZlcnMvYmxvY2svemxvb3AuYzoxNzQ3OlxcdC5mb3BzXFx0XFx0PSBcXHUwMDI2emxvb3BfY3RsX2ZvcHMsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTE3NDgtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDE6NDEuMTQ0MDM4OTkxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjI4MDc0MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGVzZSBmdW5jdGlvbnMsIHN0cnVjdHVyZWQgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOlxuXG4qKkRlbHZpbmcgaW50byB0aGUgWmxvb3AgTW9kdWxlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYHpsb29wX2N0bF93cml0ZWAgaGFuZGxlcyB3cml0ZXMgdG8gdGhlIGAvZGV2L3psb29wLWNvbnRyb2xgIGRldmljZS4gSXQncyB0aGUgZ2F0ZWtlZXBlciwgbGlrZWx5IG1hbmFnaW5nIGNvbnRyb2wgb3BlcmF0aW9ucyBhbmQgY29uZmlndXJhdGlvbiBjb21tYW5kcy4gVGhlbiB3ZSBoYXZlIGB6bG9vcF9xdWV1ZV9ycWAgLSB0aGF0J3MgdGhlIG9uZSB0aGF0IGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgZXllLiBJdCBzb3VuZHMgbGlrZSB0aGUgcmVxdWVzdCBxdWV1ZSBmdW5jdGlvbiwgdGhlIGhlYXJ0IG9mIHRoZSBJL08gcHJvY2Vzc2luZyBmb3Igemxvb3AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyByZXF1ZXN0cyBhcmUgc3VibWl0dGVkIGFuZCBoYW5kbGVkLiBGb2xsb3dpbmcgdXAgb24gdGhhdCwgdGhlcmUgaXMgYHpsb29wX3JlcG9ydF96b25lc2AsIHRoYXQgaW1wbGllcyBpdCdzIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyB0aGUgbG9naWNhbCB6b25lcyBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBhbmQgbWFraW5nIHRoZW0gYXZhaWxhYmxlLiBGaW5hbGx5LCBgemxvb3Bfb3BlbmAsIHdlbGwsIHRoYXQncyBzZWxmLWV4cGxhbmF0b3J5OyBpdCBpcyBob3cgdGhlIGRldmljZSBpcyBvcGVuZWQuXG5cbkdpdmVuIHRoZSBpbXBvcnRhbmNlIG9mIEkvTyBwZXJmb3JtYW5jZSBpbiB0aGlzIGNvbnRleHQsIGB6bG9vcF9xdWV1ZV9ycWAgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuIFVuZGVyc3RhbmRpbmcgaXRzIGFyY2hpdGVjdHVyZSBhbmQgaW50ZXJuYWwgd29ya2luZ3MgaXMgdGhlIGtleSB0byBvcHRpbWl6aW5nIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgZW50aXJlIHN5c3RlbS4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0cyBkZXNpZ24gaXMgc3VpdGFibGUgZm9yIHN1c3RhaW5lZCB3b3JrbG9hZHMgYW5kIG9wdGltYWwgcGFyYWxsZWxpc20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTY0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDE6NDQuOTA2ODQ4NTE5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTA1NjI0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bG9vcF9xdWV1ZV9ycVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3psb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96bG9vcC5jPTU3Mz1zdGF0aWMgaW50IHpsb29wX3NlcV93cml0ZV9wcmVwKHN0cnVjdCB6bG9vcF9jbWQgKmNtZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01OTMtXFx0XFx0ICogSWYgb3JkZXJlZCB6b25lIGFwcGVuZCBpcyBpbiB1c2UsIHdlIGFscmVhZHkgY2hlY2tlZCBhbmQgc2V0XFxuZHJpdmVycy9ibG9jay96bG9vcC5jOjU5NDpcXHRcXHQgKiB0aGUgdGFyZ2V0IHNlY3RvciBpbiB6bG9vcF9xdWV1ZV9ycSgpLlxcbmRyaXZlcnMvYmxvY2svemxvb3AuYy01OTUtXFx0XFx0ICovXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM9ODYxPXN0YXRpYyBib29sIHpsb29wX3NldF96b25lX2FwcGVuZF9zZWN0b3Ioc3RydWN0IHJlcXVlc3QgKnJxKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg4Ni1cXG5kcml2ZXJzL2Jsb2NrL3psb29wLmM6ODg3OnN0YXRpYyBibGtfc3RhdHVzX3Qgemxvb3BfcXVldWVfcnEoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTg4OC1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgYmxrX21xX3F1ZXVlX2RhdGEgKmJkKVxcbi0tXFxuZHJpdmVycy9ibG9jay96bG9vcC5jPTkxNz1zdGF0aWMgY29uc3Qgc3RydWN0IGJsa19tcV9vcHMgemxvb3BfbXFfb3BzID0ge1xcbmRyaXZlcnMvYmxvY2svemxvb3AuYzo5MTg6XFx0LnF1ZXVlX3JxICAgICAgID0gemxvb3BfcXVldWVfcnEsXFxuZHJpdmVycy9ibG9jay96bG9vcC5jLTkxOS1cXHQuY29tcGxldGVcXHQ9IHpsb29wX2NvbXBsZXRlX3JxLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzo0MTo0NC45NDc5MTQyNjhaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjEyODA2ODU1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogWm9uZWQgTG9vcCBEcml2ZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGZ1enppbmcgdGhlIHpvbmVkIGxvb3AgZHJpdmVyLiBNeSBwcmltYXJ5IHRhcmdldHMgZm9yIGV4YW1pbmF0aW9uIGFuZCBwb3RlbnRpYWwgZnV6emluZyB3aWxsIGJlIHRoZSBgemxvb3BfY3RsX3dyaXRlYCwgYHpsb29wX3F1ZXVlX3JxYCwgYW5kIGB6bG9vcF9yZXBvcnRfem9uZXNgIGZ1bmN0aW9ucy4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBjb250cm9sIG1lY2hhbmlzbXMgd2l0aGluIHRoZSBkcml2ZXIuXG5cbkJlZm9yZSBJIGRpdmUgaW4gdG9vIGRlZXAsIEkgd2FudCB0byBjb25maXJtIHRoZSByZWFjaGFiaWxpdHkgb2YgYSBzcGVjaWZpYyBmdW5jdGlvbiwgYHpsb29wX3VwZGF0ZV9zZXFfem9uZWAuIEkgbmVlZCB0byBlbnN1cmUgaXQncyBwYXJ0IG9mIHRoZSBmdXp6aW5nIHN1cmZhY2UuIE9rYXksIGxvb2tzIGxpa2UgaXQncyBpbmRlZWQgcmVhY2hhYmxlLiBUcmFjaW5nIGJhY2ssIGB6bG9vcF91cGRhdGVfc2VxX3pvbmVgIGlzIGNhbGxlZCBmcm9tIGB6bG9vcF9pbml0X3pvbmVgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgemxvb3BfY3RsX2FkZGAgYW5kIHRoaXMgaXMsIGluIHR1cm4sIGNhbGxlZCBmcm9tIGB6bG9vcF9jdGxfd3JpdGVgLiBFeGNlbGxlbnQuIEZ1cnRoZXJtb3JlLCBpdCBpcyBjYWxsZWQgZnJvbSBgemxvb3BfcndgIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGB6bG9vcF9oYW5kbGVfY21kYCB3aGljaCBpcyBxdWV1ZWQgYnkgYHpsb29wX3F1ZXVlX3JxYC4gVGhhdCBjb25maXJtcyBpdHMgcmVsZXZhbmNlLlxuXG5UaGVyZWZvcmUsIGNvbnNpZGVyaW5nIG15IGFuYWx5c2lzLCBJIGFtIGdvaW5nIHRvIGZsYWcgdGhpcyBhcyByaXBlIGZvciBmdXp6aW5nLiBJJ2xsIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Gb3IgdGhlIGZ1enppbmcgY2FtcGFpZ24sIEnigJlsbCBwcmlvcml0aXplIHRoZXNlIGZ1bmN0aW9ucyBhcyBmb2N1cyBzeW1ib2xzOiBgemxvb3BfY3RsX3dyaXRlYCwgYHpsb29wX3F1ZXVlX3JxYCwgYW5kIGB6bG9vcF9yZXBvcnRfem9uZXNgLiBJ4oCZbGwgYWxzbyBtYWtlIHN1cmUgdGhlIGNvbmZpZ3VyYXRpb25zIGBCTEtfREVWX1pPTkVEX0xPT1BgIGFuZCBgQkxLX0RFVl9aT05FRGAgYXJlIGVuYWJsZWQsIGFzIHRoZXkgc2VlbSBmdW5kYW1lbnRhbCB0byB0aGUgZHJpdmVyJ3Mgb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg2NCwiT3V0cHV0VG9rZW5zIjoxMzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6NDE6NTEuMDc1OTg0ODgzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYyMzM4NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfWk9ORURfTE9PUFwiLFxuICAgIFwiQkxLX0RFVl9aT05FRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpsb29wX2N0bF93cml0ZVwiLFxuICAgIFwiemxvb3BfcXVldWVfcnFcIixcbiAgICBcInpsb29wX3JlcG9ydF96b25lc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBpbiBgemxvb3BfdXBkYXRlX3NlcV96b25lYCB0byBmaXggYSBidWcgd2hlcmUgYGZpbGVfc2VjdG9yc2AgY2FuIGJlIGVxdWFsIHRvIGB6bG8tXFx1MDAzZXpvbmVfc2l6ZWAgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gYHpsby1cXHUwMDNlem9uZV9jYXBhY2l0eWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBibG9jayBkcml2ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9aT05FRF9MT09QXCIsXG4gICAgXCJCTEtfREVWX1pPTkVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiemxvb3BfY3RsX3dyaXRlXCIsXG4gICAgXCJ6bG9vcF9xdWV1ZV9ycVwiLFxuICAgIFwiemxvb3BfcmVwb3J0X3pvbmVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGluIGB6bG9vcF91cGRhdGVfc2VxX3pvbmVgIHRvIGZpeCBhIGJ1ZyB3aGVyZSBgZmlsZV9zZWN0b3JzYCBjYW4gYmUgZXF1YWwgdG8gYHpsby1cXHUwMDNlem9uZV9zaXplYCB3aGljaCBpcyBsYXJnZXIgdGhhbiBgemxvLVxcdTAwM2V6b25lX2NhcGFjaXR5YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGJsb2NrIGRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2jfx[1] Phase: Succeeded StartedAt: 2026-08-01 13:42:02 +0000 UTC FinishedAt: 2026-08-01 13:42:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2jfx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 13:42:02 +0000 UTC FinishedAt: 2026-08-01 13:42:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2jfx[2] Phase: Succeeded StartedAt: 2026-08-01 13:42:02 +0000 UTC FinishedAt: 2026-08-01 15:07:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 13:42:02 +0000 UTC FinishedAt: 2026-08-01 15:07:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 13:42:02 +0000 UTC FinishedAt: 2026-08-01 13:42:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 13:42:02 +0000 UTC FinishedAt: 2026-08-01 13:42:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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-workflowc2jfx/series-workflowc2jfx-convert-artifact-1044975642/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 13:42:12 +0000 UTC FinishedAt: 2026-08-01 13:59:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 13:42:12 +0000 UTC FinishedAt: 2026-08-01 13:59:04 +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:*7a778fc2-67c2-4464-94f3-514da3dd7d27,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-workflowc2jfx/series-workflowc2jfx-convert-artifact-1044975642/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": "51469dab-208d-411f-afdf-feac08130d10", "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-workflowc2jfx/series-workflowc2jfx-build-action-4079509704/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 13:42:12 +0000 UTC FinishedAt: 2026-08-01 13:58:54 +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:*7a778fc2-67c2-4464-94f3-514da3dd7d27,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-workflowc2jfx/series-workflowc2jfx-convert-artifact-1044975642/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": "51469dab-208d-411f-afdf-feac08130d10", "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-workflowc2jfx/series-workflowc2jfx-build-action-4079509704/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 13:59:04 +0000 UTC FinishedAt: 2026-08-01 13:59:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 13:59:04 +0000 UTC FinishedAt: 2026-08-01 13:59:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 13:59:04 +0000 UTC FinishedAt: 2026-08-01 13:59:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 13:59:04 +0000 UTC FinishedAt: 2026-08-01 13:59:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-workflowc2jfx/series-workflowc2jfx-convert-artifact-1449358453/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 13:59:15 +0000 UTC FinishedAt: 2026-08-01 14:01:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 13:59:15 +0000 UTC FinishedAt: 2026-08-01 14:00:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*51469dab-208d-411f-afdf-feac08130d10,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-workflowc2jfx/series-workflowc2jfx-build-action-4079509704/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-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 14:01:02 +0000 UTC FinishedAt: 2026-08-01 14:01:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 14:01:02 +0000 UTC FinishedAt: 2026-08-01 14:01:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 14:01:02 +0000 UTC FinishedAt: 2026-08-01 14:22:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 14:01:02 +0000 UTC FinishedAt: 2026-08-01 14:22:15 +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:*7a778fc2-67c2-4464-94f3-514da3dd7d27,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-workflowc2jfx/series-workflowc2jfx-convert-artifact-1449358453/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": "fc9076b1-11b9-4986-922e-4ace0e6b462f", "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-workflowc2jfx/series-workflowc2jfx-build-action-3946083969/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 14:01:02 +0000 UTC FinishedAt: 2026-08-01 14:21:54 +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:*7a778fc2-67c2-4464-94f3-514da3dd7d27,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-workflowc2jfx/series-workflowc2jfx-convert-artifact-1449358453/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": "fc9076b1-11b9-4986-922e-4ace0e6b462f", "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-workflowc2jfx/series-workflowc2jfx-build-action-3946083969/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 14:22:15 +0000 UTC FinishedAt: 2026-08-01 14:22:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 14:22:15 +0000 UTC FinishedAt: 2026-08-01 14:22:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 14:22:15 +0000 UTC FinishedAt: 2026-08-01 14:24:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 14:22:15 +0000 UTC FinishedAt: 2026-08-01 14:23:51 +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:*fc9076b1-11b9-4986-922e-4ace0e6b462f,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-workflowc2jfx/series-workflowc2jfx-build-action-3946083969/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-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 14:24:02 +0000 UTC FinishedAt: 2026-08-01 15:07:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 14:24:02 +0000 UTC FinishedAt: 2026-08-01 15:07:45 +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_ctl_write","zloop_queue_rq","zloop_report_zones"],"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:*51469dab-208d-411f-afdf-feac08130d10,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fc9076b1-11b9-4986-922e-4ace0e6b462f,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-workflowc2jfx/series-workflowc2jfx-build-action-4079509704/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-workflowc2jfx/series-workflowc2jfx-build-action-3946083969/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 14:24:02 +0000 UTC FinishedAt: 2026-08-01 14:24:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 14:24:02 +0000 UTC FinishedAt: 2026-08-01 14:24:08 +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_ctl_write","zloop_queue_rq","zloop_report_zones"],"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-workflowc2jfx/series-workflowc2jfx-convert-artifact-3402544474/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 14:24:02 +0000 UTC FinishedAt: 2026-08-01 14:24:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 14:24:02 +0000 UTC FinishedAt: 2026-08-01 14:24:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 14:24:02 +0000 UTC FinishedAt: 2026-08-01 14:24:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 14:24:13 +0000 UTC FinishedAt: 2026-08-01 15:07:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc2jfx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","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_ctl_write","zloop_queue_rq","zloop_report_zones"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7f40b346462f563a0d6e841a77b5163d2a882a04","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED_LOOP","BLK_DEV_ZONED"],"series_id":"19e05a3b-e018-4045-90f6-efa4b70b0c35","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-08-01 14:24:13 +0000 UTC FinishedAt: 2026-08-01 15:07:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*51469dab-208d-411f-afdf-feac08130d10,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fc9076b1-11b9-4986-922e-4ace0e6b462f,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-workflowc2jfx/series-workflowc2jfx-build-action-4079509704/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-workflowc2jfx/series-workflowc2jfx-build-action-3946083969/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-workflowc2jfx/series-workflowc2jfx-convert-artifact-3402544474/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,}