Name: series-workflowg8j42 Phase: Succeeded StartedAt: 2026-08-25 09:44:58 +0000 UTC FinishedAt: 2026-08-25 13:44:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg8j42[0] Phase: Succeeded StartedAt: 2026-08-25 09:44:58 +0000 UTC FinishedAt: 2026-08-25 10:03:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg8j42[0].run-triage Phase: Succeeded StartedAt: 2026-08-25 09:44:58 +0000 UTC FinishedAt: 2026-08-25 10:03:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4b18edbd8e70f7e6860d56370f13244896d0f95c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZRAM", "ZRAM_TRACK_ENTRY_ACTIME" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4b18edbd8e70f7e6860d56370f13244896d0f95c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZRAM", "ZRAM_TRACK_ENTRY_ACTIME" ], "series_id": "3335cb5c-271a-45f0-933e-cb8fde58b33b" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "idle_store", "mark_idle" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlJBTV9UUkFDS19FTlRSWV9BQ1RJTUUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZGxlX3N0b3JlJiMzNDssCiAgICAmIzM0O21hcmtfaWRsZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB6cmFtX2Rydi5jYCByZWxhdGVkIHRvIHRpbWUgY2FsY3VsYXRpb24gYW5kIHRoZSBzcGVjaWFsIHZhbHVlIHVzZWQgdG8gbWFyayBhbGwgZW50cmllcyBhcyBpZGxlLiBJdCBjaGFuZ2VzIHRoZSBzcGVjaWFsIHZhbHVlIG9mIGBjdXRvZmZgIGZyb20gMCB0byBgS1RJTUVfTUlOYCBhbmQgcmVtb3ZlcyBhIGAodTMyKWAgY2FzdCBmcm9tIGBrdGltZV9nZXRfYm9vdHRpbWVfc2Vjb25kcygpYC4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBwdXJlbHkgcmVsYXRlZCB0byB0aW1lIGNvbXBhcmlzb25zIGFuZCBsb2dpYy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBpZGxlX3N0b3JlYCBzeXNmcyBjYWxsYmFjayBpbiB0aGUgenJhbSBkcml2ZXIgdG8gZml4IGFuIGlzc3VlIHdoZXJlIGEgY2FsY3VsYXRlZCBjdXRvZmYgdGltZSBvZiAwIChmcm9tIGBrdGltZV9zdWJgKSB3b3VsZCBpbmNvcnJlY3RseSB0cmlnZ2VyIHRoZSBcJiMzNDthbGxcJiMzNDsgYmVoYXZpb3IgKHdoaWNoIHdhcyBwcmV2aW91c2x5IHJlcHJlc2VudGVkIGJ5IGEgY3V0b2ZmIG9mIDApLiBJdCBjaGFuZ2VzIHRoZSBzcGVjaWFsIFwmIzM0O2FsbFwmIzM0OyB2YWx1ZSB0byBgS1RJTUVfTUlOYCBhbmQgcmVtb3ZlcyBhIGAodTMyKWAgY2FzdCB0aGF0IGNvdWxkIGNhdXNlIHRpbWUgdHJ1bmNhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBkcml2ZXIgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDAwODQxZjIyNjE2ZDBmMTUwYjU2YzJmM2FkYmNjNDRmZjA3M2MyNDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxMDowMjoyOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG5pbmRleCBhOWIzYmIxZDNiZWYzLi5kYTUxZjcwYjcxMjE1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG5AQCAtNDM4LDcgJiM0Mzs0MzgsNyBAQCBzdGF0aWMgdm9pZCBtYXJrX2lkbGUoc3RydWN0IHpyYW0gKnpyYW0sIGt0aW1lX3QgY3V0b2ZmKVxuIFx0XHR9XG4gXG4gI2lmZGVmIENPTkZJR19aUkFNX1RSQUNLX0VOVFJZX0FDVElNRVxuLVx0XHRpc19pZGxlID0gIWN1dG9mZiB8fFxuJiM0MztcdFx0aXNfaWRsZSA9IGN1dG9mZiA9PSBLVElNRV9NSU4gfHxcbiBcdFx0XHRrdGltZV9hZnRlcihjdXRvZmYsIHpyYW0tXHUwMDNldGFibGVbaW5kZXhdLmF0dHIuYWNfdGltZSk7XG4gI2VuZGlmXG4gXHRcdGlmIChpc19pZGxlKVxuQEAgLTQ1Myw3ICYjNDM7NDUzLDcgQEAgc3RhdGljIHNzaXplX3QgaWRsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuIFx0XHRcdCAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuIHtcbiBcdHN0cnVjdCB6cmFtICp6cmFtID0gZGV2X3RvX3pyYW0oZGV2KTtcbi1cdGt0aW1lX3QgY3V0b2ZmID0gMDtcbiYjNDM7XHRrdGltZV90IGN1dG9mZiA9IEtUSU1FX01JTjtcbiBcbiBcdGlmICghc3lzZnNfc3RyZXEoYnVmLCBcJiMzNDthbGxcJiMzNDspKSB7XG4gXHRcdC8qXG5AQCAtNDY0LDcgJiM0Mzs0NjQsNyBAQCBzdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4gXG4gXHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19aUkFNX1RSQUNLX0VOVFJZX0FDVElNRSkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAha3N0cnRvdWludChidWYsIDAsIFx1MDAyNmFnZV9zZWMpKVxuLVx0XHRcdGN1dG9mZiA9IGt0aW1lX3N1YigodTMyKWt0aW1lX2dldF9ib290dGltZV9zZWNvbmRzKCksXG4mIzQzO1x0XHRcdGN1dG9mZiA9IGt0aW1lX3N1YihrdGltZV9nZXRfYm9vdHRpbWVfc2Vjb25kcygpLFxuIFx0XHRcdFx0XHQgICBhZ2Vfc2VjKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTQ3NSw3ICYjNDM7NDc1LDcgQEAgc3RhdGljIHNzaXplX3QgaWRsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdC8qXG4tXHQgKiBBIGN1dG9mZiBvZiAwIG1hcmtzIGV2ZXJ5dGhpbmcgYXMgaWRsZSwgdGhpcyBpcyB0aGVcbiYjNDM7XHQgKiBBIGN1dG9mZiBvZiBLVElNRV9NSU4gbWFya3MgZXZlcnl0aGluZyBhcyBpZGxlLCB0aGlzIGlzIHRoZVxuIFx0ICogXCYjMzQ7YWxsXCYjMzQ7IGJlaGF2aW9yLlxuIFx0ICovXG4gXHRtYXJrX2lkbGUoenJhbSwgY3V0b2ZmKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlJBTSYjMzQ7LAogICAgJiMzNDtaUkFNX1RSQUNLX0VOVFJZX0FDVElNRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lkbGVfc3RvcmUmIzM0OywKICAgICYjMzQ7bWFya19pZGxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgaWRsZV9zdG9yZWAgc3lzZnMgY2FsbGJhY2sgaW4gdGhlIHpyYW0gZHJpdmVyIHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSBhIGNhbGN1bGF0ZWQgY3V0b2ZmIHRpbWUgb2YgMCAoZnJvbSBga3RpbWVfc3ViYCkgd291bGQgaW5jb3JyZWN0bHkgdHJpZ2dlciB0aGUgXCYjMzQ7YWxsXCYjMzQ7IGJlaGF2aW9yICh3aGljaCB3YXMgcHJldmlvdXNseSByZXByZXNlbnRlZCBieSBhIGN1dG9mZiBvZiAwKS4gSXQgY2hhbmdlcyB0aGUgc3BlY2lhbCBcJiMzNDthbGxcJiMzNDsgdmFsdWUgdG8gYEtUSU1FX01JTmAgYW5kIHJlbW92ZXMgYSBgKHUzMilgIGNhc3QgdGhhdCBjb3VsZCBjYXVzZSB0aW1lIHRydW5jYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgZHJpdmVyIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwMDg0MWYyMjYxNmQwZjE1MGI1NmMyZjNhZGJjYzQ0ZmYwNzNjMjQyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMTA6MDI6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jCmluZGV4IGE5YjNiYjFkM2JlZjMuLmRhNTFmNzBiNzEyMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jCkBAIC00MzgsNyAmIzQzOzQzOCw3IEBAIHN0YXRpYyB2b2lkIG1hcmtfaWRsZShzdHJ1Y3QgenJhbSAqenJhbSwga3RpbWVfdCBjdXRvZmYpCiAJCX0KIAogI2lmZGVmIENPTkZJR19aUkFNX1RSQUNLX0VOVFJZX0FDVElNRQotCQlpc19pZGxlID0gIWN1dG9mZiB8fAomIzQzOwkJaXNfaWRsZSA9IGN1dG9mZiA9PSBLVElNRV9NSU4gfHwKIAkJCWt0aW1lX2FmdGVyKGN1dG9mZiwgenJhbS0mZ3Q7dGFibGVbaW5kZXhdLmF0dHIuYWNfdGltZSk7CiAjZW5kaWYKIAkJaWYgKGlzX2lkbGUpCkBAIC00NTMsNyAmIzQzOzQ1Myw3IEBAIHN0YXRpYyBzc2l6ZV90IGlkbGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogewogCXN0cnVjdCB6cmFtICp6cmFtID0gZGV2X3RvX3pyYW0oZGV2KTsKLQlrdGltZV90IGN1dG9mZiA9IDA7CiYjNDM7CWt0aW1lX3QgY3V0b2ZmID0gS1RJTUVfTUlOOwogCiAJaWYgKCFzeXNmc19zdHJlcShidWYsICYjMzQ7YWxsJiMzNDspKSB7CiAJCS8qCkBAIC00NjQsNyAmIzQzOzQ2NCw3IEBAIHN0YXRpYyBzc2l6ZV90IGlkbGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAogCQlpZiAoSVNfRU5BQkxFRChDT05GSUdfWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUUpICZhbXA7JmFtcDsKIAkJICAgICFrc3RydG91aW50KGJ1ZiwgMCwgJmFtcDthZ2Vfc2VjKSkKLQkJCWN1dG9mZiA9IGt0aW1lX3N1YigodTMyKWt0aW1lX2dldF9ib290dGltZV9zZWNvbmRzKCksCiYjNDM7CQkJY3V0b2ZmID0ga3RpbWVfc3ViKGt0aW1lX2dldF9ib290dGltZV9zZWNvbmRzKCksCiAJCQkJCSAgIGFnZV9zZWMpOwogCQllbHNlCiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ3NSw3ICYjNDM7NDc1LDcgQEAgc3RhdGljIHNzaXplX3QgaWRsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qCi0JICogQSBjdXRvZmYgb2YgMCBtYXJrcyBldmVyeXRoaW5nIGFzIGlkbGUsIHRoaXMgaXMgdGhlCiYjNDM7CSAqIEEgY3V0b2ZmIG9mIEtUSU1FX01JTiBtYXJrcyBldmVyeXRoaW5nIGFzIGlkbGUsIHRoaXMgaXMgdGhlCiAJICogJiMzNDthbGwmIzM0OyBiZWhhdmlvci4KIAkgKi8KIAltYXJrX2lkbGUoenJhbSwgY3V0b2ZmKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBacmFtIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jYC4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgdGhlIGBjdXRvZmZgIHZhbHVlIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBgaWRsZV9zdG9yZWAgYW5kIGBtYXJrX2lkbGVgIGZ1bmN0aW9ucywgYWNjZXNzZWQgdGhyb3VnaCB0aGUgc3lzZnMgaW50ZXJmYWNlLiBJIHNlZSB0aGUgY2hhbmdlczogd2UmIzM5O3JlIGluaXRpYWxpemluZyBgY3V0b2ZmYCB0byBgS1RJTUVfTUlOYCBpbnN0ZWFkIG9mIDAsIHN3aXRjaGluZyB0aGUgYGlzX2lkbGVgIGNoZWNrcyB0byByZWZsZWN0IHRoaXMsIGFuZCByZW1vdmluZyB0aGUgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgYCh1MzIpYCBjYXN0IGluIHRoZSBga3RpbWVfc3ViYCBjYWxjdWxhdGlvbi4KCkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIGlzIGZpeGluZyBhIHN1YnRsZSBidWcgcmVsYXRlZCB0byB0aGUgaW50ZXJwcmV0YXRpb24gb2YgYSB6ZXJvIHZhbHVlIGZvciBgY3V0b2ZmYC4gUHJldmlvdXNseSwgemVybyBoYWQgYSBkdWFsIG1lYW5pbmc6ICYjMzQ7YWxsJiMzNDsgYW5kIHBvdGVudGlhbGx5IGEgcmVhbCByZXN1bHQgb2YgYGt0aW1lX3N1YmAgd2hlbiBga3RpbWVfZ2V0X2Jvb3R0aW1lX3NlY29uZHMoKWAgYW5kIGBhZ2Vfc2VjYCB3ZXJlIGVxdWFsLiAgVGhlIGNoYW5nZSBhdm9pZHMgdGhpcyBhbWJpZ3VpdHkgYnkgdXNpbmcgYEtUSU1FX01JTmAgZm9yICYjMzQ7YWxsJiMzNDsuIFRoZSByZW1vdmFsIG9mIHRoZSBjYXN0IGlzIGEgZ29vZCB0aGluZzsgaXQgZWxpbWluYXRlcyB0aGUgY2hhbmNlIG9mIHRydW5jYXRpb24gb3IgdGltZS13cmFwIGlzc3Vlcy4KClRoZSBjb3JlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyB3YXJyYW50cyBmdXp6aW5nLiBHaXZlbiB0aGF0IGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHN5c2ZzIGludGVyZmFjZSBvZiB0aGUgenJhbSBkcml2ZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYGlkbGVfc3RvcmVgLCBteSBhbnN3ZXIgaXMgeWVzLCBhYnNvbHV0ZWx5LiBJdCBpbnZvbHZlcyB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGFuZCBkZWFscyB3aXRoIHRpbWUgY2FsY3VsYXRpb25zLCBtYWtpbmcgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcgdG8gdW5jb3ZlciBhbnkgZWRnZSBjYXNlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBUaGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQgYXJlIGBaUkFNYCBhbmQgYFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FYCwgdGhlIGxhdHRlciBvZiB3aGljaCBpcyBtZW50aW9uZWQgZGlyZWN0bHkgaW4gdGhlIGNvZGUsIHNvIEkmIzM5O2xsIHdhbnQgdG8gY2hlY2sgdGhlIEtjb25maWcgZm9yIHRob3NlLiBJIHNob3VsZCBzdGFydCBieSBjaGVja2luZyB0aGUgS2NvbmZpZyB0byBjb25maXJtIG15IGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpSQU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI6Y29uZmlnIFpSQU1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtDb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE2LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTc6Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtsejQgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTIyLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MjM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRIQ1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjQtXHRib29sIFwmIzM0O2x6NGhjIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yOC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI5OmNvbmZpZyBaUkFNX0JBQ0tFTkRfWlNURFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMzAtXHRib29sIFwmIzM0O3pzdGQgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MzU6Y29uZmlnIFpSQU1fQkFDS0VORF9ERUZMQVRFXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7ZGVmbGF0ZSBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0MTpjb25maWcgWlJBTV9CQUNLRU5EXzg0MlxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDItXHRib29sIFwmIzM0Ozg0MiBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0Nzpjb25maWcgWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDgtXHRkZXBlbmRzIG9uIFpSQU1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01Mi1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjUzOmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01NC1cdGJvb2wgXCYjMzQ7bHpvIGFuZCBsem8tcmxlIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDsgaWYgIVpSQU1fQkFDS0VORF9GT1JDRV9MWk9cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz02MD1jaG9pY2Vcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02NC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1JMRVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjYtXHRib29sIFwmIzM0O2x6by1ybGVcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02OC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY5OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzAtXHRib29sIFwmIzM0O2x6b1wmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcyLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NzM6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFo0XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03NC1cdGJvb2wgXCYjMzQ7bHo0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Nzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRIQ1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzgtXHRib29sIFwmIzM0O2x6NGhjXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4MTpjb25maWcgWlJBTV9ERUZfQ09NUF9aU1REXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04Mi1cdGJvb2wgXCYjMzQ7enN0ZFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODU6Y29uZmlnIFpSQU1fREVGX0NPTVBfREVGTEFURVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODYtXHRib29sIFwmIzM0O2RlZmxhdGVcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04OC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg5OmNvbmZpZyBaUkFNX0RFRl9DT01QXzg0MlxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTAtXHRib29sIFwmIzM0Ozg0MlwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTkzPWVuZGNob2ljZVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo5NTpjb25maWcgWlJBTV9ERUZfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTYtXHRzdHJpbmdcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMDYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpSQU1fV1JJVEVCQUNLXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMDgtICAgICAgIGJvb2wgXCYjMzQ7V3JpdGUgYmFjayBpbmNvbXByZXNzaWJsZSBvciBpZGxlIHBhZ2UgdG8gYmFja2luZyBkZXZpY2VcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjE6Y29uZmlnIFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjItXHRib29sIFwmIzM0O1RyYWNrIGFjY2VzcyB0aW1lIG9mIHpyYW0gZW50cmllc1wmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyOC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEyOTpjb25maWcgWlJBTV9NRU1PUllfVFJBQ0tJTkdcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzMC1cdGJvb2wgXCYjMzQ7VHJhY2sgelJhbSBibG9jayBzdGF0dXNcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMzktXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNDA6Y29uZmlnIFpSQU1fTVVMVElfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTQxLVx0Ym9vbCBcJiMzNDtFbmFibGUgbXVsdGlwbGUgY29tcHJlc3Npb24gc3RyZWFtc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MTAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlpSQU0gRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgJiMzNDtaUkFNJiMzNDsuIFJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBjdXJyZW50IGFyZWEgb2YgZm9jdXMuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBtYXAgb3V0IGl0cyBkZXBlbmRlbmN5IHRyZWUuIEJlZm9yZSBJIGdldCBpbnRvIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBvciBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHR3ZWFrcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHRoaW5nICpyZWxpZXMqIG9uLiBXaGF0IG1vZHVsZXMsIGtlcm5lbCB2ZXJzaW9ucywgb3IgZXZlbiB1c2Vyc3BhY2UgY29tcG9uZW50cyBhcmUgZXNzZW50aWFsIGZvciBaUkFNIHRvIGZ1bmN0aW9uIHByb3Blcmx5PyBBcmUgdGhlcmUgYW55IHVwc3RyZWFtIGNoYW5nZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBtb2R1bGUsIG9yIGRvZXMgaXQgaGF2ZSBjb21wbGV4IGludGVyYWN0aW9ucyB3aXRoIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljIGRldmljZSBkcml2ZXJzLCBvciBldmVuIHRoaW5ncyBsaWtlIGBzd2FwYCB1dGlsaXRpZXM/IEkgbmVlZCB0byBkcmlsbCBkb3duIGFuZCBtYWtlIHN1cmUgSSBrbm93IHdoYXQgSSYjMzk7bSBkZWFsaW5nIHdpdGguIFRoZSBsYXN0IHRoaW5nIEkgd2FudCBpcyBhIG5hc3R5LCB1bmV4cGVjdGVkIGNvbmZsaWN0IGR1ZSB0byBhbiB1cHN0cmVhbSBjaGFuZ2Ugb3IgYW4gb3Zlcmxvb2tlZCBkZXBlbmRlbmN5IGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz0yPWNvbmZpZyBaUkFNXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7Q29tcHJlc3NlZCBSQU0gYmxvY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQ6XHRkZXBlbmRzIG9uIEJMT0NLIFx1MDAyNlx1MDAyNiBTWVNGUyBcdTAwMjZcdTAwMjYgTU1VXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01LVx0c2VsZWN0IFpTTUFMTE9DXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9MTc9Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtsejQgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTk6XHRkZXBlbmRzIG9uIFpSQU1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTIwLVx0c2VsZWN0IExaNF9DT01QUkVTU1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTIzPWNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0SENcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtsejRoYyBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyNTpcdGRlcGVuZHMgb24gWlJBTVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjYtXHRzZWxlY3QgTFo0SENfQ09NUFJFU1Ncbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz0yOT1jb25maWcgWlJBTV9CQUNLRU5EX1pTVERcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDt6c3RkIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjMxOlx0ZGVwZW5kcyBvbiBaUkFNXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zMi1cdHNlbGVjdCBaU1REX0NPTVBSRVNTXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9MzU9Y29uZmlnIFpSQU1fQkFDS0VORF9ERUZMQVRFXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7ZGVmbGF0ZSBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzozNzpcdGRlcGVuZHMgb24gWlJBTVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMzgtXHRzZWxlY3QgWkxJQl9ERUZMQVRFXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9NDE9Y29uZmlnIFpSQU1fQkFDS0VORF84NDJcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQyLVx0Ym9vbCBcJiMzNDs4NDIgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NDM6XHRkZXBlbmRzIG9uIFpSQU1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQ0LVx0c2VsZWN0IDg0Ml9DT01QUkVTU1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTQ3PWNvbmZpZyBaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0ODpcdGRlcGVuZHMgb24gWlJBTVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDktXHRkZWZfYm9vbCAhWlJBTV9CQUNLRU5EX0xaNCBcdTAwMjZcdTAwMjYgIVpSQU1fQkFDS0VORF9MWjRIQyBcdTAwMjZcdTAwMjYgXFxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz01Mz1jb25maWcgWlJBTV9CQUNLRU5EX0xaT1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTQtXHRib29sIFwmIzM0O2x6byBhbmQgbHpvLXJsZSBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7IGlmICFaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo1NTpcdGRlcGVuZHMgb24gWlJBTVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTYtXHRkZWZhdWx0IFpSQU1fQkFDS0VORF9GT1JDRV9MWk9cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz02MD1jaG9pY2Vcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02Mi1cdGRlZmF1bHQgWlJBTV9ERUZfQ09NUF9MWk9STEVcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjYzOlx0ZGVwZW5kcyBvbiBaUkFNXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02NC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTY1PWNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1JMRVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjYtXHRib29sIFwmIzM0O2x6by1ybGVcJiMzNDtcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY3Olx0ZGVwZW5kcyBvbiBaUkFNX0JBQ0tFTkRfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02OC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTY5PWNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzAtXHRib29sIFwmIzM0O2x6b1wmIzM0O1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NzE6XHRkZXBlbmRzIG9uIFpSQU1fQkFDS0VORF9MWk9cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcyLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9NzM9Y29uZmlnIFpSQU1fREVGX0NPTVBfTFo0XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03NC1cdGJvb2wgXCYjMzQ7bHo0XCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3NTpcdGRlcGVuZHMgb24gWlJBTV9CQUNLRU5EX0xaNFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz03Nz1jb25maWcgWlJBTV9ERUZfQ09NUF9MWjRIQ1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzgtXHRib29sIFwmIzM0O2x6NGhjXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3OTpcdGRlcGVuZHMgb24gWlJBTV9CQUNLRU5EX0xaNEhDXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04MC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTgxPWNvbmZpZyBaUkFNX0RFRl9DT01QX1pTVERcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTgyLVx0Ym9vbCBcJiMzNDt6c3RkXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4MzpcdGRlcGVuZHMgb24gWlJBTV9CQUNLRU5EX1pTVERcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9ODU9Y29uZmlnIFpSQU1fREVGX0NPTVBfREVGTEFURVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODYtXHRib29sIFwmIzM0O2RlZmxhdGVcJiMzNDtcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg3Olx0ZGVwZW5kcyBvbiBaUkFNX0JBQ0tFTkRfREVGTEFURVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODgtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz04OT1jb25maWcgWlJBTV9ERUZfQ09NUF84NDJcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDs4NDJcJiMzNDtcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjkxOlx0ZGVwZW5kcyBvbiBaUkFNX0JBQ0tFTkRfODQyXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05Mi1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz05NT1jb25maWcgWlJBTV9ERUZfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTYtXHRzdHJpbmdcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjk3Olx0ZGVwZW5kcyBvbiBaUkFNXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05OC1cdGRlZmF1bHQgXCYjMzQ7bHpvLXJsZVwmIzM0OyBpZiBaUkFNX0RFRl9DT01QX0xaT1JMRVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTEwNz1jb25maWcgWlJBTV9XUklURUJBQ0tcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwOC0gICAgICAgYm9vbCBcJiMzNDtXcml0ZSBiYWNrIGluY29tcHJlc3NpYmxlIG9yIGlkbGUgcGFnZSB0byBiYWNraW5nIGRldmljZVwmIzM0O1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTA5OiAgICAgICBkZXBlbmRzIG9uIFpSQU1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTExMC0gICAgICAgaGVscFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTEyMT1jb25maWcgWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMi1cdGJvb2wgXCYjMzQ7VHJhY2sgYWNjZXNzIHRpbWUgb2YgenJhbSBlbnRyaWVzXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjM6XHRkZXBlbmRzIG9uIFpSQU1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyNC1cdGhlbHBcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz0xMjk9Y29uZmlnIFpSQU1fTUVNT1JZX1RSQUNLSU5HXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMzAtXHRib29sIFwmIzM0O1RyYWNrIHpSYW0gYmxvY2sgc3RhdHVzXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMzE6XHRkZXBlbmRzIG9uIFpSQU0gXHUwMDI2XHUwMDI2IERFQlVHX0ZTXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMzItXHRzZWxlY3QgWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz0xNDA9Y29uZmlnIFpSQU1fTVVMVElfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTQxLVx0Ym9vbCBcJiMzNDtFbmFibGUgbXVsdGlwbGUgY29tcHJlc3Npb24gc3RyZWFtc1wmIzM0O1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTQyOlx0ZGVwZW5kcyBvbiBaUkFNXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xNDMtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ5NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBaUkFNIERlcGVuZGVuY2llcyBhbmQgc3lzZnMgRnVuY3Rpb24gUmVnaXN0cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBgWlJBTWAgY29uZmlndXJhdGlvbnMuIEl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIGZ1bmRhbWVudGFsIGZ1bmN0aW9uYWxpdHkgb2YgYFpSQU1gIHJlbGllcyBvbiBoYXZpbmcgYEJMT0NLYCwgYFNZU0ZTYCwgYW5kIGBNTVVgIGVuYWJsZWQuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgYmxvY2sgZGV2aWNlIHN1cHBvcnQsIHRoZSBzeXNmcyBpbnRlcmZhY2UsIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBhcmUgYWxsIGNyaXRpY2FsIGZvciBhIFJBTS1iYXNlZCBibG9jayBkZXZpY2UuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IHRob3NlIGFyZSBhbGwgZW5hYmxlZCBpbiBhbnkga2VybmVsIGNvbmZpZyB0aGF0IGluY2x1ZGVzIFpSQU0uIFRoZW4gdGhlcmUmIzM5O3MgYFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FYCwgYW5kIHRoYXQgbWFrZXMgc2Vuc2UgdG9vOiBpdCByZXF1aXJlcyB0aGF0IEkgaGF2ZSBgWlJBTWAgZW5hYmxlZCBiZWNhdXNlIGl0cyBwdXJwb3NlIGlzIHNwZWNpZmljIHRvIGl0LgoKTm93LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IHRoYXQgYGlkbGVfc3RvcmVgIGZ1bmN0aW9uIGlzIGhvb2tlZCB1cC4gSXQmIzM5O3MgYSBgc3lzZnNgIHN0b3JlIGZ1bmN0aW9uLCBzbyB0aGF0IG1lYW5zIGl0JiMzOTtzIGhvdyB1c2Vyc3BhY2UgaW50ZXJhY3RzIHdpdGggYSBzeXNmcyBhdHRyaWJ1dGUgdG8sIHByZXN1bWFibHksIHNldCBvciBtb2RpZnkgc29tZXRoaW5nIHJlbGF0ZWQgdG8gaWRsZSBtYW5hZ2VtZW50LiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHByZWNpc2VseSB3aGVyZSBpdCYjMzk7cyByZWdpc3RlcmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c2ZzIGluZnJhc3RydWN0dXJlIGlzIHVzaW5nIHRoYXQgZnVuY3Rpb24uIFRoYXQmIzM5O2xsIHRlbGwgbWUgYSBsb3QgYWJvdXQgd2hhdCB0aGUgZGV2ZWxvcGVyJiMzOTtzIGludGVudCB3YXMgd2l0aCB0aGlzIHBhcnQgb2YgYFpSQU1gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lkbGVfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz00MTg9c3RhdGljIHZvaWQgbWFya19pZGxlKHN0cnVjdCB6cmFtICp6cmFtLCBrdGltZV90IGN1dG9mZilcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00NTEtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzo0NTI6c3RhdGljIHNzaXplX3QgaWRsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNDUzLVx0XHRcdCAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5OTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcmVzdCBvZiB0aGUgYGlkbGVfc3RvcmVgIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBJJiMzOTt2ZSBhbHJlYWR5IGhhbmRsZWQgc29tZSBvZiB0aGUgaW5pdGlhbCBzZXR1cCwgc28gbm93IEkgbmVlZCB0byB0aG9yb3VnaGx5IHVuZGVyc3RhbmQgaG93IGV2ZXJ5dGhpbmcgZWxzZSBpcyBjb25uZWN0ZWQuIFRoaXMgbGlrZWx5IGludm9sdmVzIHVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhlIHJlZ2lzdHJhdGlvbiBpbnRlcmFjdHMgd2l0aCBvdGhlciBzeXN0ZW1zLCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMsIGFuZCBhbnkgcG90ZW50aWFsIHBvaW50cyBvZiBmYWlsdXJlIG9yIG9wdGltaXphdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdyYXNwIHRoZSBjb21wbGV0ZSBmbG93LCBmcm9tIHRoZSBpbml0aWFsIHRyaWdnZXIgYWxsIHRoZSB3YXkgdGhyb3VnaCB0byBhbnkgcmVzdWx0aW5nIGVmZmVjdHMgb3IgY29uZmlybWF0aW9ucy4gSXQmIzM5O3MgY3J1Y2lhbCBJIGRvbiYjMzk7dCBvdmVybG9vayBhbnkgZGVwZW5kZW5jaWVzIG9yIGltcGxpY2l0IGFzc3VtcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgaG93IGl0IGludGVncmF0ZXMgd2l0aCBvdGhlciBjb21wb25lbnRzOyBJIG5lZWQgdG8gZm9sbG93IHRoZSBjb25uZWN0aW9ucyBhbmQgcmVsYXRpb25zaGlwcy4gSSBhbnRpY2lwYXRlIHRoZXJlIHdpbGwgYmUgc2V2ZXJhbCBrZXkgcGFydHMgdG8gcmVnaXN0ZXIgdGhhdCB3aWxsIGJlIGltcG9ydGFudCB0byBncmFzcCwgYW5kIGl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGZvciBlYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZGxlX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9NDE4PXN0YXRpYyB2b2lkIG1hcmtfaWRsZShzdHJ1Y3QgenJhbSAqenJhbSwga3RpbWVfdCBjdXRvZmYpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNDUxLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6NDUyOnN0YXRpYyBzc2l6ZV90IGlkbGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTQ1My1cdFx0XHQgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM1NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IHByb21wdDoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBEZWNvbnN0cnVjdGluZyB0aGUgVGFzayoqCgpPa2F5LCBzbyB0aGUgaW5zdHJ1Y3Rpb24gaXMgY2xlYXIuIEkmIzM5O20gYmVpbmcgYXNrZWQgdG8gc3VtbWFyaXplIGEgdmVyeSBzcGVjaWZpYywgaW1wbGllZCB0aG91Z2h0IHByb2Nlc3MuIEkgbmVlZCB0byBiZSBpbiB0aGUgZmlyc3QgcGVyc29uLCBhbmQgdGhlIGdvYWwgaXMgdG8gZnVsbHkgcmVuZGVyIHRoZSAmIzM0O3Rob3VnaHQgcHJvY2Vzcy4mIzM0OyBUaGUgdXNlciBpcyBhbiBleHBlcnQsIHNvIEkgY2FuIGFzc3VtZSB0aGV5JiMzOTtsbCBwaWNrIHVwIG9uIG51YW5jZXMgYW5kIHRlY2huaWNhbCBkZXRhaWxzIEkgaW5jbHVkZS4gVGhlICYjMzQ7dGhvdWdodHMmIzM0OyBwcm92aWRlZCBhcmUganVzdCBvbmUgdGhvdWdodC4gTGV0JiMzOTtzIHNlZSB3aGF0IEkgY2FuIGJ1aWxkIG9uLiBUaGUga2V5IGlzIGluIGFjY3VyYXRlbHkgcmVwcmVzZW50aW5nIHRoZSBpbnRlbnQgYW5kIHJlYXNvbmluZyBiZWhpbmQgdGhlICYjMzQ7V2FpdCwgSSBuZWVkIHRvIHNlYXJjaCBmb3IgYGlkbGVfc3RvcmVgIGluIHRoZSB3aG9sZSBmaWxlLiYjMzQ7CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lkbGVfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTQxOD1zdGF0aWMgdm9pZCBtYXJrX2lkbGUoc3RydWN0IHpyYW0gKnpyYW0sIGt0aW1lX3QgY3V0b2ZmKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTQ1MS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjQ1MjpzdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00NTMtXHRcdFx0ICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2ODgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGVidWdnaW5nIERldmljZSBBdHRyaWJ1dGUgUmVnaXN0cmF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdGhpcyAmIzM0O2lkbGUmIzM0OyBhdHRyaWJ1dGUgaXMgYWN0dWFsbHkgZ2V0dGluZyByZWdpc3RlcmVkIHdpdGggdGhlIGRldmljZSBtb2RlbC4gSXQmIzM5O3MgbGlrZWx5IG5vdCBiZWluZyBkb25lIG1hbnVhbGx5IHdpdGggYSBkaXJlY3QgY2FsbCB0byBzb21ldGhpbmcgbGlrZSBgZGV2aWNlX2NyZWF0ZV9maWxlYC4gVGhlIG5hbWluZyBjb252ZW50aW9uIGxvb2tzIGZhbWlsaWFyLCBlc3BlY2lhbGx5IHRoZSB3YXkgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIHJlYWQvd3JpdGUgcGVybWlzc2lvbnMuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgaXQmIzM5O3MgcHJvYmFibHkgdXNpbmcgb25lIG9mIHRob3NlIGhhbmR5IG1hY3JvIGRlZmluaXRpb25zIHdlJiMzOTt2ZSBnb3QgaW4gdGhlIGtlcm5lbCBmb3IgdGhpcyBzb3J0IG9mIHRoaW5nLiBJJiMzOTttIHRoaW5raW5nIHNvbWV0aGluZyBsaWtlIGBERVZJQ0VfQVRUUl9XTyhpZGxlKWAgZm9yIGEgd3JpdGUtb25seSBhdHRyaWJ1dGUsIG9yIG1heWJlIGBERVZJQ0VfQVRUUl9SVyhpZGxlKWAgZm9yIGEgcmVhZC13cml0ZSBhdHRyaWJ1dGUuIEkgc2hvdWxkIGJlIGFibGUgdG8gdHJhY2sgaXQgZG93biBwcmV0dHkgcXVpY2tseSB3aXRoIGEgc2VhcmNoIGZvciB0aG9zZSBtYWNyb3MgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcy4gVGhhdCYjMzk7cyB0aGUgbW9zdCBjb21tb24gYW5kIGNsZWFuIHdheSB0byBoYW5kbGUgdGhpcyB0eXBlIG9mIGRldmljZSBhdHRyaWJ1dGUgcmVnaXN0cmF0aW9uLiBJdCBhYnN0cmFjdHMgYXdheSBhIGxvdCBvZiB0aGUgYm9pbGVycGxhdGUuIFRpbWUgdG8gZGl2ZSBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REVWSUNFX0FUVFIuKmlkbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI5OTg9c3RhdGljIERFVklDRV9BVFRSX1dPKG1lbV91c2VkX21heCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTk5OnN0YXRpYyBERVZJQ0VfQVRUUl9XTyhpZGxlKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwMDAtc3RhdGljIERFVklDRV9BVFRSX1JXKGNvbXBfYWxnb3JpdGhtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA4MwoJCQkJCQkJb3V0cHV0OiAxNTYKCQkJCQkJCXRob3VnaHRzOiAxMDA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFpSQU0gSWRsZSBUaW1lIEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCB5ZXMsIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYERFVklDRV9BVFRSX1dPKGlkbGUpYC4gVGhpcyBtZWFucyB0aGUgYGlkbGVfc3RvcmVgIGZ1bmN0aW9uIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBzeXNmcy4gVGhhdCYjMzk7cyBvdXIgZW50cnkgcG9pbnQuCgpUaGUgcGF0Y2ggaXRzZWxmIGFkZHJlc3NlcyBhIGJ1ZyBpbiB0aGUgenJhbSBkcml2ZXIgcmVsYXRlZCB0byBob3cgaWRsZSB0aW1lIGN1dG9mZnMgYXJlIGhhbmRsZWQuIFRoZSBvcmlnaW5hbCBpc3N1ZSB3YXMgdGhhdCBhIGBjdXRvZmZgIHZhbHVlIG9mIDAsIGludGVuZGVkIHRvIG1lYW4gJiMzNDthbGwgZW50cmllcywmIzM0OyBjb3VsZCBhbHNvIHJlc3VsdCBmcm9tIHRoZSBjYWxjdWxhdGlvbiBga3RpbWVfc3ViYCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBpbmNvcnJlY3QgYmVoYXZpb3Igd2hlbiB0aGUgdGltZSBkaWZmZXJlbmNlIGVxdWFscyB0aGUgY3V0b2ZmLiBTbywgdGhlIHBhdGNoIHNlZW1zIGZ1bmN0aW9uYWwsIGFkZHJlc3NpbmcgYSBsb2dpYyBmbGF3LiBXZSBuZWVkIHRvIGZvY3VzIG9uIGBpZGxlX3N0b3JlYC4KClRvIHRlc3QgdGhpcyBlZmZlY3RpdmVseSwgd2UgZGVmaW5pdGVseSBuZWVkIGBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRWAgYmVjYXVzZSBpdCBtb2RpZmllcyB0aGUgYGFnZV9zZWNgIGxvZ2ljIHdpdGhpbiB0aGUgYCNpZmRlZmAgYmxvY2suIExvb2tpbmcgYXQgdGhlIGNvZGU6CgpgYGBjCiNpZmRlZiBDT05GSUdfWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUUKCQlpc19pZGxlID0gY3V0b2ZmID09IEtUSU1FX01JTiB8fAoJCQlrdGltZV9hZnRlcihjdXRvZmYsIHpyYW0tJmd0O3RhYmxlW2luZGV4XS5hdHRyLmFjX3RpbWUpOwojZW5kaWYKYGBgCgpBbmQgaW4gYGlkbGVfc3RvcmVgOgoKYGBgYwoJCWlmIChJU19FTkFCTEVEKENPTkZJR19aUkFNX1RSQUNLX0VOVFJZX0FDVElNRSkgJmFtcDsmYW1wOwoJCSAgICAha3N0cnRvdWludChidWYsIDAsICZhbXA7YWdlX3NlYykpCgkJCWN1dG9mZiA9IGt0aW1lX3N1YihrdGltZV9nZXRfYm9vdHRpbWVfc2Vjb25kcygpLAoJCQkJCSAgIGFnZV9zZWMpOwpgYGAKCk1ha2VzIGl0IGNsZWFyIGBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRWAgaXMgZXNzZW50aWFsIHRvIHRlc3QgdGhlIHRpbWUgc3VidHJhY3Rpb24gbG9naWMuIFRoZSBgWlJBTWAgY29uZmlnIGl0c2VsZiBkZXBlbmRzIG9uIGBCTE9DS2AsIGBTWVNGU2AsIGFuZCBgTU1VYCB3aGljaCBhcmUgZmFpcmx5IHN0YW5kYXJkIGRlcGVuZGVuY2llcy4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIHZpc2liaWxpdHkgb2YgYGlkbGVfc3RvcmVgLgoKYGBgYwpzdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCgkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQpgYGAKCkl0JiMzOTtzIHN0YXRpYywgd2hpY2ggbWFrZXMgaXQgYW4gaW50ZXJuYWwgZnVuY3Rpb24uIFN5emthbGxlciBjYW4gc3RpbGwgZnV6eiBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkmIzM5O3JlIHJlYWNoYWJsZS4gQnV0IGZvciBgRm9jdXNTeW1ib2xzYCwgd2Ugc2hvdWxkIHByaW9yaXRpemUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMsIG9yLCBmYWlsaW5nIHRoYXQsIGp1c3QgdGhlIHN0YXRpYyBlbnRyeXBvaW50IGlmIG5vdGhpbmcgZWxzZSBjYWxscyBpdC4gSG93ZXZlciwgdGhlIGNvbW1lbnRzIGluIHN5emthbGxlciBjb2RlIG1lbnRpb24gYWJvdXQgcHJlZmVyZW5jZSBvbiBub24tc3RhdGljIHN5bWJvbHMuCgpCdXQsIGluIHRoaXMgY2FzZSwgYGlkbGVfc3RvcmVgIGlzICpub3QqIGlubGluZWQuIEl0JiMzOTtzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgdG8gc3lzZnMsIG1lYW5pbmcgaXQmIzM5O2xsIGhhdmUgYSBkaXN0aW5jdCBhZGRyZXNzLiBBbHNvLCBpdCYjMzk7cyB0aGUgb25seSBzeXNmcyBzdG9yZSBmdW5jdGlvbiBmb3IgYGlkbGVgLCBzbyBpdCBpcyB0aGUgY29ycmVjdCBmdW5jdGlvbiB0byB1c2UuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayBgbWFya19pZGxlYCB0b28uIFllcywgaXQmIzM5O3Mgc3RhdGljOgoKYGBgYwpzdGF0aWMgdm9pZCBtYXJrX2lkbGUoc3RydWN0IHpyYW0gKnpyYW0sIGt0aW1lX3QgY3V0b2ZmKQpgYGAKCmBtYXJrX2lkbGVgIGlzIGNhbGxlZCBieSBgaWRsZV9zdG9yZWAsIHNvIGl0JiMzOTtzIGEgZ29vZCBmdW5jdGlvbiB0byBpbmNsdWRlLgpTaW5jZSBgaWRsZV9zdG9yZWAgaXMgdGhlIG9ubHkgc3lzZnMgc3RvcmUgZnVuY3Rpb24gZm9yIGlkbGUuIEFuZCB3ZSBhcmUgZ29pbmcgdG8gZm9jdXMgdGhlIGZ1enplciBvbiB0aGVzZSB0d28gZnVuY3Rpb25zLgoKU28sIGZvciBmdXp6aW5nLCB3ZSYjMzk7bGwgdXNlIGBpZGxlX3N0b3JlYCBhbmQgYG1hcmtfaWRsZWAgYXMgYEZvY3VzU3ltYm9sc2AuClRoZSBjb3JlIGNvbmZpZ3MgYXJlIGBaUkFNYCAod2hpY2gsIHRoYW5rZnVsbHksIGlzIGEgdHJpc3RhdGUgY29uZmlnKSBhbmQgYFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FYC4KCkhlcmUmIzM5O3MgdGhlIHJlYXNvbmluZyB0byBpbmNsdWRlIGluIHRoZSBzdWJtaXNzaW9uOgoKVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgaWRsZV9zdG9yZWAgc3lzZnMgY2FsbGJhY2sgaW4gdGhlIHpyYW0gZHJpdmVyIHRvIGFkZHJlc3MgYW4gaXNzdWUgd2hlcmUgYSAwIGN1dG9mZiB0aW1lIChmcm9tIGBrdGltZV9zdWJgKSBjb3VsZCBiZSBtaXNpbnRlcnByZXRlZCBhcyAmIzM0O2FsbCBlbnRyaWVzJiMzNDsgKHdoaWNoIHdhcyBwcmV2aW91c2x5IGFsc28gYSBjdXRvZmYgb2YgMCkuIFRoZSBzcGVjaWFsICYjMzQ7YWxsJiMzNDsgdmFsdWUgaGFzIGJlZW4gY2hhbmdlZCB0byBgS1RJTUVfTUlOYCwgYW5kIGEgY2FzdCB0aGF0IGNvdWxkIGNhdXNlIHRpbWUgdHJ1bmNhdGlvbiB3YXMgcmVtb3ZlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBkcml2ZXIgY29kZS4KClRoZSBmaW5hbCBjb25maWd1cmF0aW9uLCB0aGVyZWZvcmUsIGxvb2tzIGxpa2UgdGhpczoKCldvcnRoRnV6emluZzogdHJ1ZQpGb2N1c1N5bWJvbHM6IFsmIzM0O2lkbGVfc3RvcmUmIzM0OywgJiMzNDttYXJrX2lkbGUmIzM0O10KRW5hYmxlQ29uZmlnczogWyYjMzQ7WlJBTSYjMzQ7LCAmIzM0O1pSQU1fVFJBQ0tfRU5UUllfQUNUSU1FJiMzNDtdCgpXZSBoYXZlIHZlcmlmaWVkIHRoYXQgYFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FYCBkZXBlbmRzIG9uIGBaUkFNYCwgYW5kIGBaUkFNYCBoYXMgdGhlIGZvbGxvd2luZyBkZXBlbmRlbmNpZXM6IGBCTE9DSyAmYW1wOyZhbXA7IFNZU0ZTICZhbXA7JmFtcDsgTU1VYC4gRXZlcnl0aGluZyBjaGVja3Mgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlJBTSYjMzQ7LAogICAgJiMzNDtaUkFNX1RSQUNLX0VOVFJZX0FDVElNRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lkbGVfc3RvcmUmIzM0OywKICAgICYjMzQ7bWFya19pZGxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgaWRsZV9zdG9yZWAgc3lzZnMgY2FsbGJhY2sgaW4gdGhlIHpyYW0gZHJpdmVyIHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSBhIGNhbGN1bGF0ZWQgY3V0b2ZmIHRpbWUgb2YgMCAoZnJvbSBga3RpbWVfc3ViYCkgd291bGQgaW5jb3JyZWN0bHkgdHJpZ2dlciB0aGUgXCYjMzQ7YWxsXCYjMzQ7IGJlaGF2aW9yICh3aGljaCB3YXMgcHJldmlvdXNseSByZXByZXNlbnRlZCBieSBhIGN1dG9mZiBvZiAwKS4gSXQgY2hhbmdlcyB0aGUgc3BlY2lhbCBcJiMzNDthbGxcJiMzNDsgdmFsdWUgdG8gYEtUSU1FX01JTmAgYW5kIHJlbW92ZXMgYSBgKHUzMilgIGNhc3QgdGhhdCBjb3VsZCBjYXVzZSB0aW1lIHRydW5jYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgZHJpdmVyIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlJBTV9UUkFDS19FTlRSWV9BQ1RJTUUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZGxlX3N0b3JlJiMzNDssCiAgICAmIzM0O21hcmtfaWRsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGlkbGVfc3RvcmVgIHN5c2ZzIGNhbGxiYWNrIGluIHRoZSB6cmFtIGRyaXZlciB0byBmaXggYW4gaXNzdWUgd2hlcmUgYSBjYWxjdWxhdGVkIGN1dG9mZiB0aW1lIG9mIDAgKGZyb20gYGt0aW1lX3N1YmApIHdvdWxkIGluY29ycmVjdGx5IHRyaWdnZXIgdGhlIFwmIzM0O2FsbFwmIzM0OyBiZWhhdmlvciAod2hpY2ggd2FzIHByZXZpb3VzbHkgcmVwcmVzZW50ZWQgYnkgYSBjdXRvZmYgb2YgMCkuIEl0IGNoYW5nZXMgdGhlIHNwZWNpYWwgXCYjMzQ7YWxsXCYjMzQ7IHZhbHVlIHRvIGBLVElNRV9NSU5gIGFuZCByZW1vdmVzIGEgYCh1MzIpYCBjYXN0IHRoYXQgY291bGQgY2F1c2UgdGltZSB0cnVuY2F0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGRyaXZlciBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjAzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB6cmFtX2Rydi5jYCByZWxhdGVkIHRvIHRpbWUgY2FsY3VsYXRpb24gYW5kIHRoZSBzcGVjaWFsIHZhbHVlIHVzZWQgdG8gbWFyayBhbGwgZW50cmllcyBhcyBpZGxlLiBJdCBjaGFuZ2VzIHRoZSBzcGVjaWFsIHZhbHVlIG9mIGBjdXRvZmZgIGZyb20gMCB0byBgS1RJTUVfTUlOYCBhbmQgcmVtb3ZlcyBhIGAodTMyKWAgY2FzdCBmcm9tIGBrdGltZV9nZXRfYm9vdHRpbWVfc2Vjb25kcygpYC4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBwdXJlbHkgcmVsYXRlZCB0byB0aW1lIGNvbXBhcmlzb25zIGFuZCBsb2dpYy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDA4NDFmMjI2MTZkMGYxNTBiNTZjMmYzYWRiY2M0NGZmMDczYzI0MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDEwOjAyOjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwppbmRleCBhOWIzYmIxZDNiZWYzLi5kYTUxZjcwYjcxMjE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwpAQCAtNDM4LDcgJiM0Mzs0MzgsNyBAQCBzdGF0aWMgdm9pZCBtYXJrX2lkbGUoc3RydWN0IHpyYW0gKnpyYW0sIGt0aW1lX3QgY3V0b2ZmKQogCQl9CiAKICNpZmRlZiBDT05GSUdfWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUUKLQkJaXNfaWRsZSA9ICFjdXRvZmYgfHwKJiM0MzsJCWlzX2lkbGUgPSBjdXRvZmYgPT0gS1RJTUVfTUlOIHx8CiAJCQlrdGltZV9hZnRlcihjdXRvZmYsIHpyYW0tJmd0O3RhYmxlW2luZGV4XS5hdHRyLmFjX3RpbWUpOwogI2VuZGlmCiAJCWlmIChpc19pZGxlKQpAQCAtNDUzLDcgJiM0Mzs0NTMsNyBAQCBzdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKIAlzdHJ1Y3QgenJhbSAqenJhbSA9IGRldl90b196cmFtKGRldik7Ci0Ja3RpbWVfdCBjdXRvZmYgPSAwOwomIzQzOwlrdGltZV90IGN1dG9mZiA9IEtUSU1FX01JTjsKIAogCWlmICghc3lzZnNfc3RyZXEoYnVmLCAmIzM0O2FsbCYjMzQ7KSkgewogCQkvKgpAQCAtNDY0LDcgJiM0Mzs0NjQsNyBAQCBzdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAKIAkJaWYgKElTX0VOQUJMRUQoQ09ORklHX1pSQU1fVFJBQ0tfRU5UUllfQUNUSU1FKSAmYW1wOyZhbXA7CiAJCSAgICAha3N0cnRvdWludChidWYsIDAsICZhbXA7YWdlX3NlYykpCi0JCQljdXRvZmYgPSBrdGltZV9zdWIoKHUzMilrdGltZV9nZXRfYm9vdHRpbWVfc2Vjb25kcygpLAomIzQzOwkJCWN1dG9mZiA9IGt0aW1lX3N1YihrdGltZV9nZXRfYm9vdHRpbWVfc2Vjb25kcygpLAogCQkJCQkgICBhZ2Vfc2VjKTsKIAkJZWxzZQogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC00NzUsNyAmIzQzOzQ3NSw3IEBAIHN0YXRpYyBzc2l6ZV90IGlkbGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKgotCSAqIEEgY3V0b2ZmIG9mIDAgbWFya3MgZXZlcnl0aGluZyBhcyBpZGxlLCB0aGlzIGlzIHRoZQomIzQzOwkgKiBBIGN1dG9mZiBvZiBLVElNRV9NSU4gbWFya3MgZXZlcnl0aGluZyBhcyBpZGxlLCB0aGlzIGlzIHRoZQogCSAqICYjMzQ7YWxsJiMzNDsgYmVoYXZpb3IuCiAJICovCiAJbWFya19pZGxlKHpyYW0sIGN1dG9mZik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzY0CgkJCQkJCQlvdXRwdXQ6IDE0MwoJCQkJCQkJdGhvdWdodHM6IDE5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipacmFtIERyaXZlciBQYXRjaCBBbmFseXNpcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggdGFyZ2V0cyBgZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNgLCB3aGljaCB0ZWxscyBtZSB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIGNvcmUgYmxvY2sgZGV2aWNlIGRyaXZlciBjb21wb25lbnQuIFRoZSBjaGFuZ2VzIGFyZSBhbGwgY2VudGVyZWQgYXJvdW5kIHRoZSBgY3V0b2ZmYCB2YXJpYWJsZSBhbmQgaXRzIHJlbGF0ZWQgbG9naWMsIGFuZCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgdGltZS1yZWxhdGVkIGJ1ZyBmaXgg4oCTIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgY3V0b2ZmYCBpcyBiZWluZyBtb2RpZmllZCBmcm9tIGAwYCB0byBgS1RJTUVfTUlOYC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhIGxpa2VseSBjYXNlIG9mIGVpdGhlciBhbiBvdmVyZmxvdyBwcm9ibGVtIHdpdGggdGhlIG9sZGVyIGluaXRpYWxpemF0aW9uIG9yLCBwZXJoYXBzIG1vcmUgbGlrZWx5LCBhbiBpc3N1ZSB3aGVyZSBgMGAgd2FzIGJlaW5nIHVzZWQgdG8gcmVwcmVzZW50IGFuIGludmFsaWQgb3Igc3BlY2lhbCB0aW1lIHZhbHVlLCBidXQgdGhhdCBhcHByb2FjaCBoYWQgZmxhd3MuIFRoZSBsb2dpYyBjaGVjayBgaXNfaWRsZSA9ICFjdXRvZmYgfHwgLi4uYCBpcyBjaGFuZ2VkIHRvIGBpc19pZGxlID0gY3V0b2ZmID09IEtUSU1FX01JTiB8fCAuLi5gLCB3aGljaCByZWluZm9yY2VzIHRoZSBzdXNwaWNpb24gb2YgYSBzcGVjaWFsIHZhbHVlIHJlcHJlc2VudGF0aW9uIGZvciB0aW1lLCB0aGF0IGEgemVybyB2YWx1ZSB3YXMgYmVpbmcgaW5jb3JyZWN0bHkgdHJlYXRlZCBhcyBhIHZhbGlkIHZhbHVlLiBGdXJ0aGVyLCB0aGUgdGltZSBzdWJ0cmFjdGlvbiBmdW5jdGlvbiBjaGFuZ2VzLCB1c2luZyB0aGUgY29ycmVjdCBrdGltZSBmdW5jdGlvbiBmb3IgdXNlIHdpdGggYSBrdGltZV90LiBUaGlzIHBvaW50cyB0b3dhcmRzIGFuIGltcHJvdmVtZW50IGluIHRoZSBhY2N1cmFjeSBvciBoYW5kbGluZyBvZiB0aW1lIGNhbGN1bGF0aW9ucywgcG90ZW50aWFsbHkgYWRkcmVzc2luZyBpc3N1ZXMgd2l0aCB0aGUgYGFnZV9zZWNgIHZhbHVlIGJlaW5nIHVzZWQgaW4gcmVsYXRpb24gdG8gdGhlIGBjdXRvZmZgLgoKVGhlIGNydWNpYWwgdGhpbmcgaGVyZSwgZnJvbSBhIHNlY3VyaXR5IGFuZCBzdGFiaWxpdHkgcGVyc3BlY3RpdmUsIGlzIHRoYXQgdGhlcmUgYXJlIG5vIHJlZCBmbGFncy4gVGhpcyBpc24mIzM5O3QgdG91Y2hpbmcgbWVtb3J5IGFsbG9jYXRpb24sIGludHJvZHVjaW5nIG5ldyB1c2VyLXNwYWNlIGludGVyZmFjZXMsIG9yIGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBvciB2YXJpYWJsZXMuIEl0JiMzOTtzIGEgdGFyZ2V0ZWQgbG9naWMgZml4IHdpdGhpbiB0aGUgZXhpc3RpbmcgdGltZSB0cmFja2luZyBtZWNoYW5pc20uIFRoaXMgcGF0Y2ggaXMgaXNvbGF0ZWQgYW5kIGNvbnRhaW5lZCwgaW5kaWNhdGluZyB0aGlzIGlzIGhpZ2hseSB1bmxpa2VseSB0byBpbnRyb2R1Y2UgYW55IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4KCkdpdmVuIHRoaXMgYW5hbHlzaXMsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzIGNoYW5nZS4gVGhlIHJpc2sgcHJvZmlsZSBpcyBleHRyZW1lbHkgbG93IGJhc2VkIG9uIHRoaXMgbGltaXRlZCByZXZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB6cmFtX2Rydi5jYCByZWxhdGVkIHRvIHRpbWUgY2FsY3VsYXRpb24gYW5kIHRoZSBzcGVjaWFsIHZhbHVlIHVzZWQgdG8gbWFyayBhbGwgZW50cmllcyBhcyBpZGxlLiBJdCBjaGFuZ2VzIHRoZSBzcGVjaWFsIHZhbHVlIG9mIGBjdXRvZmZgIGZyb20gMCB0byBgS1RJTUVfTUlOYCBhbmQgcmVtb3ZlcyBhIGAodTMyKWAgY2FzdCBmcm9tIGBrdGltZV9nZXRfYm9vdHRpbWVfc2Vjb25kcygpYC4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBwdXJlbHkgcmVsYXRlZCB0byB0aW1lIGNvbXBhcmlzb25zIGFuZCBsb2dpYy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB6cmFtX2Rydi5jYCByZWxhdGVkIHRvIHRpbWUgY2FsY3VsYXRpb24gYW5kIHRoZSBzcGVjaWFsIHZhbHVlIHVzZWQgdG8gbWFyayBhbGwgZW50cmllcyBhcyBpZGxlLiBJdCBjaGFuZ2VzIHRoZSBzcGVjaWFsIHZhbHVlIG9mIGBjdXRvZmZgIGZyb20gMCB0byBgS1RJTUVfTUlOYCBhbmQgcmVtb3ZlcyBhIGAodTMyKWAgY2FzdCBmcm9tIGBrdGltZV9nZXRfYm9vdHRpbWVfc2Vjb25kcygpYC4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBwdXJlbHkgcmVsYXRlZCB0byB0aW1lIGNvbXBhcmlzb25zIGFuZCBsb2dpYy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MDI6MjkuODkyNTQ5MTQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc1OTc2NjUwMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlJBTVwiLFxuICAgIFwiWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZGxlX3N0b3JlXCIsXG4gICAgXCJtYXJrX2lkbGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB6cmFtX2Rydi5jYCByZWxhdGVkIHRvIHRpbWUgY2FsY3VsYXRpb24gYW5kIHRoZSBzcGVjaWFsIHZhbHVlIHVzZWQgdG8gbWFyayBhbGwgZW50cmllcyBhcyBpZGxlLiBJdCBjaGFuZ2VzIHRoZSBzcGVjaWFsIHZhbHVlIG9mIGBjdXRvZmZgIGZyb20gMCB0byBgS1RJTUVfTUlOYCBhbmQgcmVtb3ZlcyBhIGAodTMyKWAgY2FzdCBmcm9tIGBrdGltZV9nZXRfYm9vdHRpbWVfc2Vjb25kcygpYC4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBwdXJlbHkgcmVsYXRlZCB0byB0aW1lIGNvbXBhcmlzb25zIGFuZCBsb2dpYy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGlkbGVfc3RvcmVgIHN5c2ZzIGNhbGxiYWNrIGluIHRoZSB6cmFtIGRyaXZlciB0byBmaXggYW4gaXNzdWUgd2hlcmUgYSBjYWxjdWxhdGVkIGN1dG9mZiB0aW1lIG9mIDAgKGZyb20gYGt0aW1lX3N1YmApIHdvdWxkIGluY29ycmVjdGx5IHRyaWdnZXIgdGhlIFxcXCJhbGxcXFwiIGJlaGF2aW9yICh3aGljaCB3YXMgcHJldmlvdXNseSByZXByZXNlbnRlZCBieSBhIGN1dG9mZiBvZiAwKS4gSXQgY2hhbmdlcyB0aGUgc3BlY2lhbCBcXFwiYWxsXFxcIiB2YWx1ZSB0byBgS1RJTUVfTUlOYCBhbmQgcmVtb3ZlcyBhIGAodTMyKWAgY2FzdCB0aGF0IGNvdWxkIGNhdXNlIHRpbWUgdHJ1bmNhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBkcml2ZXIgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MDI6MjkuODkyNTU1NjA2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDY0NzYxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwMDg0MWYyMjYxNmQwZjE1MGI1NmMyZjNhZGJjYzQ0ZmYwNzNjMjQyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDI1IDEwOjAyOjI5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcXG5pbmRleCBhOWIzYmIxZDNiZWYzLi5kYTUxZjcwYjcxMjE1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXFxuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcXG5AQCAtNDM4LDcgKzQzOCw3IEBAIHN0YXRpYyB2b2lkIG1hcmtfaWRsZShzdHJ1Y3QgenJhbSAqenJhbSwga3RpbWVfdCBjdXRvZmYpXFxuIFxcdFxcdH1cXG4gXFxuICNpZmRlZiBDT05GSUdfWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVcXG4tXFx0XFx0aXNfaWRsZSA9ICFjdXRvZmYgfHxcXG4rXFx0XFx0aXNfaWRsZSA9IGN1dG9mZiA9PSBLVElNRV9NSU4gfHxcXG4gXFx0XFx0XFx0a3RpbWVfYWZ0ZXIoY3V0b2ZmLCB6cmFtLVxcdTAwM2V0YWJsZVtpbmRleF0uYXR0ci5hY190aW1lKTtcXG4gI2VuZGlmXFxuIFxcdFxcdGlmIChpc19pZGxlKVxcbkBAIC00NTMsNyArNDUzLDcgQEAgc3RhdGljIHNzaXplX3QgaWRsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbiBcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4ge1xcbiBcXHRzdHJ1Y3QgenJhbSAqenJhbSA9IGRldl90b196cmFtKGRldik7XFxuLVxcdGt0aW1lX3QgY3V0b2ZmID0gMDtcXG4rXFx0a3RpbWVfdCBjdXRvZmYgPSBLVElNRV9NSU47XFxuIFxcbiBcXHRpZiAoIXN5c2ZzX3N0cmVxKGJ1ZiwgXFxcImFsbFxcXCIpKSB7XFxuIFxcdFxcdC8qXFxuQEAgLTQ2NCw3ICs0NjQsNyBAQCBzdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuIFxcbiBcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUUpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAha3N0cnRvdWludChidWYsIDAsIFxcdTAwMjZhZ2Vfc2VjKSlcXG4tXFx0XFx0XFx0Y3V0b2ZmID0ga3RpbWVfc3ViKCh1MzIpa3RpbWVfZ2V0X2Jvb3R0aW1lX3NlY29uZHMoKSxcXG4rXFx0XFx0XFx0Y3V0b2ZmID0ga3RpbWVfc3ViKGt0aW1lX2dldF9ib290dGltZV9zZWNvbmRzKCksXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGFnZV9zZWMpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC00NzUsNyArNDc1LDcgQEAgc3RhdGljIHNzaXplX3QgaWRsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIEEgY3V0b2ZmIG9mIDAgbWFya3MgZXZlcnl0aGluZyBhcyBpZGxlLCB0aGlzIGlzIHRoZVxcbitcXHQgKiBBIGN1dG9mZiBvZiBLVElNRV9NSU4gbWFya3MgZXZlcnl0aGluZyBhcyBpZGxlLCB0aGlzIGlzIHRoZVxcbiBcXHQgKiBcXFwiYWxsXFxcIiBiZWhhdmlvci5cXG4gXFx0ICovXFxuIFxcdG1hcmtfaWRsZSh6cmFtLCBjdXRvZmYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDowMjozMC4yOTk3ODM1MjlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1ODA5NjgwODc0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaUkFNXCIsXG4gICAgXCJaUkFNX1RSQUNLX0VOVFJZX0FDVElNRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlkbGVfc3RvcmVcIixcbiAgICBcIm1hcmtfaWRsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgaWRsZV9zdG9yZWAgc3lzZnMgY2FsbGJhY2sgaW4gdGhlIHpyYW0gZHJpdmVyIHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSBhIGNhbGN1bGF0ZWQgY3V0b2ZmIHRpbWUgb2YgMCAoZnJvbSBga3RpbWVfc3ViYCkgd291bGQgaW5jb3JyZWN0bHkgdHJpZ2dlciB0aGUgXFxcImFsbFxcXCIgYmVoYXZpb3IgKHdoaWNoIHdhcyBwcmV2aW91c2x5IHJlcHJlc2VudGVkIGJ5IGEgY3V0b2ZmIG9mIDApLiBJdCBjaGFuZ2VzIHRoZSBzcGVjaWFsIFxcXCJhbGxcXFwiIHZhbHVlIHRvIGBLVElNRV9NSU5gIGFuZCByZW1vdmVzIGEgYCh1MzIpYCBjYXN0IHRoYXQgY291bGQgY2F1c2UgdGltZSB0cnVuY2F0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGRyaXZlciBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwMDg0MWYyMjYxNmQwZjE1MGI1NmMyZjNhZGJjYzQ0ZmYwNzNjMjQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTA6MDI6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG5pbmRleCBhOWIzYmIxZDNiZWYzLi5kYTUxZjcwYjcxMjE1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG5AQCAtNDM4LDcgKzQzOCw3IEBAIHN0YXRpYyB2b2lkIG1hcmtfaWRsZShzdHJ1Y3QgenJhbSAqenJhbSwga3RpbWVfdCBjdXRvZmYpXG4gXHRcdH1cbiBcbiAjaWZkZWYgQ09ORklHX1pSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXG4tXHRcdGlzX2lkbGUgPSAhY3V0b2ZmIHx8XG4rXHRcdGlzX2lkbGUgPSBjdXRvZmYgPT0gS1RJTUVfTUlOIHx8XG4gXHRcdFx0a3RpbWVfYWZ0ZXIoY3V0b2ZmLCB6cmFtLVx1MDAzZXRhYmxlW2luZGV4XS5hdHRyLmFjX3RpbWUpO1xuICNlbmRpZlxuIFx0XHRpZiAoaXNfaWRsZSlcbkBAIC00NTMsNyArNDUzLDcgQEAgc3RhdGljIHNzaXplX3QgaWRsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuIFx0XHRcdCAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuIHtcbiBcdHN0cnVjdCB6cmFtICp6cmFtID0gZGV2X3RvX3pyYW0oZGV2KTtcbi1cdGt0aW1lX3QgY3V0b2ZmID0gMDtcbitcdGt0aW1lX3QgY3V0b2ZmID0gS1RJTUVfTUlOO1xuIFxuIFx0aWYgKCFzeXNmc19zdHJlcShidWYsIFwiYWxsXCIpKSB7XG4gXHRcdC8qXG5AQCAtNDY0LDcgKzQ2NCw3IEBAIHN0YXRpYyBzc2l6ZV90IGlkbGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiBcbiBcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1pSQU1fVFJBQ0tfRU5UUllfQUNUSU1FKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFrc3RydG91aW50KGJ1ZiwgMCwgXHUwMDI2YWdlX3NlYykpXG4tXHRcdFx0Y3V0b2ZmID0ga3RpbWVfc3ViKCh1MzIpa3RpbWVfZ2V0X2Jvb3R0aW1lX3NlY29uZHMoKSxcbitcdFx0XHRjdXRvZmYgPSBrdGltZV9zdWIoa3RpbWVfZ2V0X2Jvb3R0aW1lX3NlY29uZHMoKSxcbiBcdFx0XHRcdFx0ICAgYWdlX3NlYyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC00NzUsNyArNDc1LDcgQEAgc3RhdGljIHNzaXplX3QgaWRsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdC8qXG4tXHQgKiBBIGN1dG9mZiBvZiAwIG1hcmtzIGV2ZXJ5dGhpbmcgYXMgaWRsZSwgdGhpcyBpcyB0aGVcbitcdCAqIEEgY3V0b2ZmIG9mIEtUSU1FX01JTiBtYXJrcyBldmVyeXRoaW5nIGFzIGlkbGUsIHRoaXMgaXMgdGhlXG4gXHQgKiBcImFsbFwiIGJlaGF2aW9yLlxuIFx0ICovXG4gXHRtYXJrX2lkbGUoenJhbSwgY3V0b2ZmKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjAyOjMwLjI5OTc4NDg3OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5ODExNzkzNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWnJhbSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNgLiBJdCdzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24sIHNwZWNpZmljYWxseSBhcm91bmQgaG93IHRoZSBgY3V0b2ZmYCB2YWx1ZSBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgYGlkbGVfc3RvcmVgIGFuZCBgbWFya19pZGxlYCBmdW5jdGlvbnMsIGFjY2Vzc2VkIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZS4gSSBzZWUgdGhlIGNoYW5nZXM6IHdlJ3JlIGluaXRpYWxpemluZyBgY3V0b2ZmYCB0byBgS1RJTUVfTUlOYCBpbnN0ZWFkIG9mIDAsIHN3aXRjaGluZyB0aGUgYGlzX2lkbGVgIGNoZWNrcyB0byByZWZsZWN0IHRoaXMsIGFuZCByZW1vdmluZyB0aGUgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgYCh1MzIpYCBjYXN0IGluIHRoZSBga3RpbWVfc3ViYCBjYWxjdWxhdGlvbi5cblxuRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgZml4aW5nIGEgc3VidGxlIGJ1ZyByZWxhdGVkIHRvIHRoZSBpbnRlcnByZXRhdGlvbiBvZiBhIHplcm8gdmFsdWUgZm9yIGBjdXRvZmZgLiBQcmV2aW91c2x5LCB6ZXJvIGhhZCBhIGR1YWwgbWVhbmluZzogXCJhbGxcIiBhbmQgcG90ZW50aWFsbHkgYSByZWFsIHJlc3VsdCBvZiBga3RpbWVfc3ViYCB3aGVuIGBrdGltZV9nZXRfYm9vdHRpbWVfc2Vjb25kcygpYCBhbmQgYGFnZV9zZWNgIHdlcmUgZXF1YWwuICBUaGUgY2hhbmdlIGF2b2lkcyB0aGlzIGFtYmlndWl0eSBieSB1c2luZyBgS1RJTUVfTUlOYCBmb3IgXCJhbGxcIi4gVGhlIHJlbW92YWwgb2YgdGhlIGNhc3QgaXMgYSBnb29kIHRoaW5nOyBpdCBlbGltaW5hdGVzIHRoZSBjaGFuY2Ugb2YgdHJ1bmNhdGlvbiBvciB0aW1lLXdyYXAgaXNzdWVzLlxuXG5UaGUgY29yZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgd2FycmFudHMgZnV6emluZy4gR2l2ZW4gdGhhdCBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHN5c2ZzIGludGVyZmFjZSBvZiB0aGUgenJhbSBkcml2ZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYGlkbGVfc3RvcmVgLCBteSBhbnN3ZXIgaXMgeWVzLCBhYnNvbHV0ZWx5LiBJdCBpbnZvbHZlcyB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGFuZCBkZWFscyB3aXRoIHRpbWUgY2FsY3VsYXRpb25zLCBtYWtpbmcgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcgdG8gdW5jb3ZlciBhbnkgZWRnZSBjYXNlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBUaGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQgYXJlIGBaUkFNYCBhbmQgYFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FYCwgdGhlIGxhdHRlciBvZiB3aGljaCBpcyBtZW50aW9uZWQgZGlyZWN0bHkgaW4gdGhlIGNvZGUsIHNvIEknbGwgd2FudCB0byBjaGVjayB0aGUgS2NvbmZpZyBmb3IgdGhvc2UuIEkgc2hvdWxkIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBLY29uZmlnIHRvIGNvbmZpcm0gbXkgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjAyOjM2LjI4MDk2NzEyOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI0NDIwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWlJBTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyOmNvbmZpZyBaUkFNXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQ29tcHJlc3NlZCBSQU0gYmxvY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xNi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE4LVxcdGJvb2wgXFxcImx6NCBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjItXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MjM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRIQ1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI0LVxcdGJvb2wgXFxcImx6NGhjIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yOC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyOTpjb25maWcgWlJBTV9CQUNLRU5EX1pTVERcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zMC1cXHRib29sIFxcXCJ6c3RkIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzozNTpjb25maWcgWlJBTV9CQUNLRU5EX0RFRkxBVEVcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNi1cXHRib29sIFxcXCJkZWZsYXRlIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0MTpjb25maWcgWlJBTV9CQUNLRU5EXzg0MlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQyLVxcdGJvb2wgXFxcIjg0MiBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDYtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NDc6Y29uZmlnIFpSQU1fQkFDS0VORF9GT1JDRV9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00OC1cXHRkZXBlbmRzIG9uIFpSQU1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTUyLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjUzOmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFpPXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTQtXFx0Ym9vbCBcXFwibHpvIGFuZCBsem8tcmxlIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiIGlmICFaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz02MD1jaG9pY2VcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1JMRVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY2LVxcdGJvb2wgXFxcImx6by1ybGVcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02OC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo2OTpjb25maWcgWlJBTV9ERUZfQ09NUF9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJsem9cXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Mi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Mzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03NC1cXHRib29sIFxcXCJsejRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Nzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRIQ1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc4LVxcdGJvb2wgXFxcImx6NGhjXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODAtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODE6Y29uZmlnIFpSQU1fREVGX0NPTVBfWlNURFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTgyLVxcdGJvb2wgXFxcInpzdGRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04NC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4NTpjb25maWcgWlJBTV9ERUZfQ09NUF9ERUZMQVRFXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODYtXFx0Ym9vbCBcXFwiZGVmbGF0ZVxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg5OmNvbmZpZyBaUkFNX0RFRl9DT01QXzg0MlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTkwLVxcdGJvb2wgXFxcIjg0MlxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTkzPWVuZGNob2ljZVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTk0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjk1OmNvbmZpZyBaUkFNX0RFRl9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTYtXFx0c3RyaW5nXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMDYtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTA3OmNvbmZpZyBaUkFNX1dSSVRFQkFDS1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwOC0gICAgICAgYm9vbCBcXFwiV3JpdGUgYmFjayBpbmNvbXByZXNzaWJsZSBvciBpZGxlIHBhZ2UgdG8gYmFja2luZyBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjAtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTIxOmNvbmZpZyBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMi1cXHRib29sIFxcXCJUcmFjayBhY2Nlc3MgdGltZSBvZiB6cmFtIGVudHJpZXNcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjgtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTI5OmNvbmZpZyBaUkFNX01FTU9SWV9UUkFDS0lOR1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzMC1cXHRib29sIFxcXCJUcmFjayB6UmFtIGJsb2NrIHN0YXR1c1xcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzOS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNDA6Y29uZmlnIFpSQU1fTVVMVElfQ09NUFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE0MS1cXHRib29sIFxcXCJFbmFibGUgbXVsdGlwbGUgY29tcHJlc3Npb24gc3RyZWFtc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MDI6MzYuMzI3MjE1NjE2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIyMTk3MjUzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipaUkFNIERlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBcIlpSQU1cIi4gUmlnaHQsIHRoYXQncyB0aGUgY3VycmVudCBhcmVhIG9mIGZvY3VzLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gbWFwIG91dCBpdHMgZGVwZW5kZW5jeSB0cmVlLiBCZWZvcmUgSSBnZXQgaW50byBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb3Igc3BlY2lmaWMgY29uZmlndXJhdGlvbiB0d2Vha3MsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyB0aGluZyAqcmVsaWVzKiBvbi4gV2hhdCBtb2R1bGVzLCBrZXJuZWwgdmVyc2lvbnMsIG9yIGV2ZW4gdXNlcnNwYWNlIGNvbXBvbmVudHMgYXJlIGVzc2VudGlhbCBmb3IgWlJBTSB0byBmdW5jdGlvbiBwcm9wZXJseT8gQXJlIHRoZXJlIGFueSB1cHN0cmVhbSBjaGFuZ2VzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgbW9kdWxlLCBvciBkb2VzIGl0IGhhdmUgY29tcGxleCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpYyBkZXZpY2UgZHJpdmVycywgb3IgZXZlbiB0aGluZ3MgbGlrZSBgc3dhcGAgdXRpbGl0aWVzPyBJIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgbWFrZSBzdXJlIEkga25vdyB3aGF0IEknbSBkZWFsaW5nIHdpdGguIFRoZSBsYXN0IHRoaW5nIEkgd2FudCBpcyBhIG5hc3R5LCB1bmV4cGVjdGVkIGNvbmZsaWN0IGR1ZSB0byBhbiB1cHN0cmVhbSBjaGFuZ2Ugb3IgYW4gb3Zlcmxvb2tlZCBkZXBlbmRlbmN5IGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDEwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MDI6NDIuNTQ5MTkwNjY1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5OTM4NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9Mj1jb25maWcgWlJBTVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkNvbXByZXNzZWQgUkFNIGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQ6XFx0ZGVwZW5kcyBvbiBCTE9DSyBcXHUwMDI2XFx1MDAyNiBTWVNGUyBcXHUwMDI2XFx1MDAyNiBNTVVcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01LVxcdHNlbGVjdCBaU01BTExPQ1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9MTc9Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xOC1cXHRib29sIFxcXCJsejQgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxOTpcXHRkZXBlbmRzIG9uIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yMC1cXHRzZWxlY3QgTFo0X0NPTVBSRVNTXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz0yMz1jb25maWcgWlJBTV9CQUNLRU5EX0xaNEhDXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjQtXFx0Ym9vbCBcXFwibHo0aGMgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyNTpcXHRkZXBlbmRzIG9uIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yNi1cXHRzZWxlY3QgTFo0SENfQ09NUFJFU1NcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTI5PWNvbmZpZyBaUkFNX0JBQ0tFTkRfWlNURFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMwLVxcdGJvb2wgXFxcInpzdGQgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzozMTpcXHRkZXBlbmRzIG9uIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zMi1cXHRzZWxlY3QgWlNURF9DT01QUkVTU1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9MzU9Y29uZmlnIFpSQU1fQkFDS0VORF9ERUZMQVRFXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiZGVmbGF0ZSBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjM3OlxcdGRlcGVuZHMgb24gWlJBTVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM4LVxcdHNlbGVjdCBaTElCX0RFRkxBVEVcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTQxPWNvbmZpZyBaUkFNX0JBQ0tFTkRfODQyXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDItXFx0Ym9vbCBcXFwiODQyIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NDM6XFx0ZGVwZW5kcyBvbiBaUkFNXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDQtXFx0c2VsZWN0IDg0Ml9DT01QUkVTU1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9NDc9Y29uZmlnIFpSQU1fQkFDS0VORF9GT1JDRV9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0ODpcXHRkZXBlbmRzIG9uIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00OS1cXHRkZWZfYm9vbCAhWlJBTV9CQUNLRU5EX0xaNCBcXHUwMDI2XFx1MDAyNiAhWlJBTV9CQUNLRU5EX0xaNEhDIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTUzPWNvbmZpZyBaUkFNX0JBQ0tFTkRfTFpPXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTQtXFx0Ym9vbCBcXFwibHpvIGFuZCBsem8tcmxlIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiIGlmICFaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NTU6XFx0ZGVwZW5kcyBvbiBaUkFNXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTYtXFx0ZGVmYXVsdCBaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz02MD1jaG9pY2VcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTYyLVxcdGRlZmF1bHQgWlJBTV9ERUZfQ09NUF9MWk9STEVcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo2MzpcXHRkZXBlbmRzIG9uIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02NC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz02NT1jb25maWcgWlJBTV9ERUZfQ09NUF9MWk9STEVcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02Ni1cXHRib29sIFxcXCJsem8tcmxlXFxcIlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY3OlxcdGRlcGVuZHMgb24gWlJBTV9CQUNLRU5EX0xaT1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTY5PWNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcImx6b1xcXCJcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3MTpcXHRkZXBlbmRzIG9uIFpSQU1fQkFDS0VORF9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Mi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz03Mz1jb25maWcgWlJBTV9ERUZfQ09NUF9MWjRcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03NC1cXHRib29sIFxcXCJsejRcXFwiXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NzU6XFx0ZGVwZW5kcyBvbiBaUkFNX0JBQ0tFTkRfTFo0XFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzYtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9Nzc9Y29uZmlnIFpSQU1fREVGX0NPTVBfTFo0SENcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03OC1cXHRib29sIFxcXCJsejRoY1xcXCJcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3OTpcXHRkZXBlbmRzIG9uIFpSQU1fQkFDS0VORF9MWjRIQ1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTgwLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTgxPWNvbmZpZyBaUkFNX0RFRl9DT01QX1pTVERcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04Mi1cXHRib29sIFxcXCJ6c3RkXFxcIlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjgzOlxcdGRlcGVuZHMgb24gWlJBTV9CQUNLRU5EX1pTVERcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04NC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz04NT1jb25maWcgWlJBTV9ERUZfQ09NUF9ERUZMQVRFXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODYtXFx0Ym9vbCBcXFwiZGVmbGF0ZVxcXCJcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4NzpcXHRkZXBlbmRzIG9uIFpSQU1fQkFDS0VORF9ERUZMQVRFXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODgtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9ODk9Y29uZmlnIFpSQU1fREVGX0NPTVBfODQyXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTAtXFx0Ym9vbCBcXFwiODQyXFxcIlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjkxOlxcdGRlcGVuZHMgb24gWlJBTV9CQUNLRU5EXzg0MlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTkyLVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9OTU9Y29uZmlnIFpSQU1fREVGX0NPTVBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05Ni1cXHRzdHJpbmdcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo5NzpcXHRkZXBlbmRzIG9uIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05OC1cXHRkZWZhdWx0IFxcXCJsem8tcmxlXFxcIiBpZiBaUkFNX0RFRl9DT01QX0xaT1JMRVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9MTA3PWNvbmZpZyBaUkFNX1dSSVRFQkFDS1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwOC0gICAgICAgYm9vbCBcXFwiV3JpdGUgYmFjayBpbmNvbXByZXNzaWJsZSBvciBpZGxlIHBhZ2UgdG8gYmFja2luZyBkZXZpY2VcXFwiXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTA5OiAgICAgICBkZXBlbmRzIG9uIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMTAtICAgICAgIGhlbHBcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTEyMT1jb25maWcgWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjItXFx0Ym9vbCBcXFwiVHJhY2sgYWNjZXNzIHRpbWUgb2YgenJhbSBlbnRyaWVzXFxcIlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEyMzpcXHRkZXBlbmRzIG9uIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjQtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9MTI5PWNvbmZpZyBaUkFNX01FTU9SWV9UUkFDS0lOR1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzMC1cXHRib29sIFxcXCJUcmFjayB6UmFtIGJsb2NrIHN0YXR1c1xcXCJcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMzE6XFx0ZGVwZW5kcyBvbiBaUkFNIFxcdTAwMjZcXHUwMDI2IERFQlVHX0ZTXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTMyLVxcdHNlbGVjdCBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9MTQwPWNvbmZpZyBaUkFNX01VTFRJX0NPTVBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xNDEtXFx0Ym9vbCBcXFwiRW5hYmxlIG11bHRpcGxlIGNvbXByZXNzaW9uIHN0cmVhbXNcXFwiXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTQyOlxcdGRlcGVuZHMgb24gWlJBTVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE0My1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjAyOjQyLjU5OTE2MjgxMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MjQ0MTE2ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBaUkFNIERlcGVuZGVuY2llcyBhbmQgc3lzZnMgRnVuY3Rpb24gUmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRha2luZyBhIGxvb2sgYXQgYFpSQU1gIGNvbmZpZ3VyYXRpb25zLiBJdCdzIGNsZWFyIHRoYXQgdGhlIGZ1bmRhbWVudGFsIGZ1bmN0aW9uYWxpdHkgb2YgYFpSQU1gIHJlbGllcyBvbiBoYXZpbmcgYEJMT0NLYCwgYFNZU0ZTYCwgYW5kIGBNTVVgIGVuYWJsZWQuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgYmxvY2sgZGV2aWNlIHN1cHBvcnQsIHRoZSBzeXNmcyBpbnRlcmZhY2UsIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBhcmUgYWxsIGNyaXRpY2FsIGZvciBhIFJBTS1iYXNlZCBibG9jayBkZXZpY2UuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IHRob3NlIGFyZSBhbGwgZW5hYmxlZCBpbiBhbnkga2VybmVsIGNvbmZpZyB0aGF0IGluY2x1ZGVzIFpSQU0uIFRoZW4gdGhlcmUncyBgWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVgLCBhbmQgdGhhdCBtYWtlcyBzZW5zZSB0b286IGl0IHJlcXVpcmVzIHRoYXQgSSBoYXZlIGBaUkFNYCBlbmFibGVkIGJlY2F1c2UgaXRzIHB1cnBvc2UgaXMgc3BlY2lmaWMgdG8gaXQuXG5cbk5vdywgSSdtIGludGVyZXN0ZWQgaW4gaG93IHRoYXQgYGlkbGVfc3RvcmVgIGZ1bmN0aW9uIGlzIGhvb2tlZCB1cC4gSXQncyBhIGBzeXNmc2Agc3RvcmUgZnVuY3Rpb24sIHNvIHRoYXQgbWVhbnMgaXQncyBob3cgdXNlcnNwYWNlIGludGVyYWN0cyB3aXRoIGEgc3lzZnMgYXR0cmlidXRlIHRvLCBwcmVzdW1hYmx5LCBzZXQgb3IgbW9kaWZ5IHNvbWV0aGluZyByZWxhdGVkIHRvIGlkbGUgbWFuYWdlbWVudC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBwcmVjaXNlbHkgd2hlcmUgaXQncyByZWdpc3RlcmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c2ZzIGluZnJhc3RydWN0dXJlIGlzIHVzaW5nIHRoYXQgZnVuY3Rpb24uIFRoYXQnbGwgdGVsbCBtZSBhIGxvdCBhYm91dCB3aGF0IHRoZSBkZXZlbG9wZXIncyBpbnRlbnQgd2FzIHdpdGggdGhpcyBwYXJ0IG9mIGBaUkFNYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ5NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjAyOjQ3LjUyMzU3NjY5NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDkzNTk4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZGxlX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTQxOD1zdGF0aWMgdm9pZCBtYXJrX2lkbGUoc3RydWN0IHpyYW0gKnpyYW0sIGt0aW1lX3QgY3V0b2ZmKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNDUxLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjQ1MjpzdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNDUzLVxcdFxcdFxcdCAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDowMjo0Ny41Njg1MTg0NDRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQ5OTI1NjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIHJlc3Qgb2YgdGhlIGBpZGxlX3N0b3JlYCByZWdpc3RyYXRpb24gcHJvY2Vzcy4gSSd2ZSBhbHJlYWR5IGhhbmRsZWQgc29tZSBvZiB0aGUgaW5pdGlhbCBzZXR1cCwgc28gbm93IEkgbmVlZCB0byB0aG9yb3VnaGx5IHVuZGVyc3RhbmQgaG93IGV2ZXJ5dGhpbmcgZWxzZSBpcyBjb25uZWN0ZWQuIFRoaXMgbGlrZWx5IGludm9sdmVzIHVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhlIHJlZ2lzdHJhdGlvbiBpbnRlcmFjdHMgd2l0aCBvdGhlciBzeXN0ZW1zLCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMsIGFuZCBhbnkgcG90ZW50aWFsIHBvaW50cyBvZiBmYWlsdXJlIG9yIG9wdGltaXphdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdyYXNwIHRoZSBjb21wbGV0ZSBmbG93LCBmcm9tIHRoZSBpbml0aWFsIHRyaWdnZXIgYWxsIHRoZSB3YXkgdGhyb3VnaCB0byBhbnkgcmVzdWx0aW5nIGVmZmVjdHMgb3IgY29uZmlybWF0aW9ucy4gSXQncyBjcnVjaWFsIEkgZG9uJ3Qgb3Zlcmxvb2sgYW55IGRlcGVuZGVuY2llcyBvciBpbXBsaWNpdCBhc3N1bXB0aW9ucy4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgaG93IGl0IGludGVncmF0ZXMgd2l0aCBvdGhlciBjb21wb25lbnRzOyBJIG5lZWQgdG8gZm9sbG93IHRoZSBjb25uZWN0aW9ucyBhbmQgcmVsYXRpb25zaGlwcy4gSSBhbnRpY2lwYXRlIHRoZXJlIHdpbGwgYmUgc2V2ZXJhbCBrZXkgcGFydHMgdG8gcmVnaXN0ZXIgdGhhdCB3aWxsIGJlIGltcG9ydGFudCB0byBncmFzcCwgYW5kIGl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgZm9yIGVhY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5OTksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDowMjo1MC44MTg0NDgxMDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDQ5ODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlkbGVfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9NDE4PXN0YXRpYyB2b2lkIG1hcmtfaWRsZShzdHJ1Y3QgenJhbSAqenJhbSwga3RpbWVfdCBjdXRvZmYpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00NTEtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6NDUyOnN0YXRpYyBzc2l6ZV90IGlkbGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00NTMtXFx0XFx0XFx0ICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjAyOjUwLjg2NjkwNTM5NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTEyNDgxNjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgcHJvbXB0OlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogRGVjb25zdHJ1Y3RpbmcgdGhlIFRhc2sqKlxuXG5Pa2F5LCBzbyB0aGUgaW5zdHJ1Y3Rpb24gaXMgY2xlYXIuIEknbSBiZWluZyBhc2tlZCB0byBzdW1tYXJpemUgYSB2ZXJ5IHNwZWNpZmljLCBpbXBsaWVkIHRob3VnaHQgcHJvY2Vzcy4gSSBuZWVkIHRvIGJlIGluIHRoZSBmaXJzdCBwZXJzb24sIGFuZCB0aGUgZ29hbCBpcyB0byBmdWxseSByZW5kZXIgdGhlIFwidGhvdWdodCBwcm9jZXNzLlwiIFRoZSB1c2VyIGlzIGFuIGV4cGVydCwgc28gSSBjYW4gYXNzdW1lIHRoZXknbGwgcGljayB1cCBvbiBudWFuY2VzIGFuZCB0ZWNobmljYWwgZGV0YWlscyBJIGluY2x1ZGUuIFRoZSBcInRob3VnaHRzXCIgcHJvdmlkZWQgYXJlIGp1c3Qgb25lIHRob3VnaHQuIExldCdzIHNlZSB3aGF0IEkgY2FuIGJ1aWxkIG9uLiBUaGUga2V5IGlzIGluIGFjY3VyYXRlbHkgcmVwcmVzZW50aW5nIHRoZSBpbnRlbnQgYW5kIHJlYXNvbmluZyBiZWhpbmQgdGhlIFwiV2FpdCwgSSBuZWVkIHRvIHNlYXJjaCBmb3IgYGlkbGVfc3RvcmVgIGluIHRoZSB3aG9sZSBmaWxlLlwiXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNTYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDowMjo1Ny4zNzkzOTA4ODJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjU1OTg1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZGxlX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9NDE4PXN0YXRpYyB2b2lkIG1hcmtfaWRsZShzdHJ1Y3QgenJhbSAqenJhbSwga3RpbWVfdCBjdXRvZmYpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00NTEtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6NDUyOnN0YXRpYyBzc2l6ZV90IGlkbGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00NTMtXFx0XFx0XFx0ICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjAyOjU3LjUyMTk1OTU3NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTA2NTAxNTUyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkRlYnVnZ2luZyBEZXZpY2UgQXR0cmlidXRlIFJlZ2lzdHJhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgXCJpZGxlXCIgYXR0cmlidXRlIGlzIGFjdHVhbGx5IGdldHRpbmcgcmVnaXN0ZXJlZCB3aXRoIHRoZSBkZXZpY2UgbW9kZWwuIEl0J3MgbGlrZWx5IG5vdCBiZWluZyBkb25lIG1hbnVhbGx5IHdpdGggYSBkaXJlY3QgY2FsbCB0byBzb21ldGhpbmcgbGlrZSBgZGV2aWNlX2NyZWF0ZV9maWxlYC4gVGhlIG5hbWluZyBjb252ZW50aW9uIGxvb2tzIGZhbWlsaWFyLCBlc3BlY2lhbGx5IHRoZSB3YXkgaXQncyBoYW5kbGluZyB0aGUgcmVhZC93cml0ZSBwZXJtaXNzaW9ucy4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBpdCdzIHByb2JhYmx5IHVzaW5nIG9uZSBvZiB0aG9zZSBoYW5keSBtYWNybyBkZWZpbml0aW9ucyB3ZSd2ZSBnb3QgaW4gdGhlIGtlcm5lbCBmb3IgdGhpcyBzb3J0IG9mIHRoaW5nLiBJJ20gdGhpbmtpbmcgc29tZXRoaW5nIGxpa2UgYERFVklDRV9BVFRSX1dPKGlkbGUpYCBmb3IgYSB3cml0ZS1vbmx5IGF0dHJpYnV0ZSwgb3IgbWF5YmUgYERFVklDRV9BVFRSX1JXKGlkbGUpYCBmb3IgYSByZWFkLXdyaXRlIGF0dHJpYnV0ZS4gSSBzaG91bGQgYmUgYWJsZSB0byB0cmFjayBpdCBkb3duIHByZXR0eSBxdWlja2x5IHdpdGggYSBzZWFyY2ggZm9yIHRob3NlIG1hY3JvcyBpbiB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzLiBUaGF0J3MgdGhlIG1vc3QgY29tbW9uIGFuZCBjbGVhbiB3YXkgdG8gaGFuZGxlIHRoaXMgdHlwZSBvZiBkZXZpY2UgYXR0cmlidXRlIHJlZ2lzdHJhdGlvbi4gSXQgYWJzdHJhY3RzIGF3YXkgYSBsb3Qgb2YgdGhlIGJvaWxlcnBsYXRlLiBUaW1lIHRvIGRpdmUgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2ODgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDowMzoxMi41ODY5NzgyNTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NjE2NTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRFVklDRV9BVFRSLippZGxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjk5OD1zdGF0aWMgREVWSUNFX0FUVFJfV08obWVtX3VzZWRfbWF4KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTk5OnN0YXRpYyBERVZJQ0VfQVRUUl9XTyhpZGxlKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDAwLXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjb21wX2FsZ29yaXRobSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjAzOjEyLjYzNDYwMDE5MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTY3NTM0Nzk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBaUkFNIElkbGUgVGltZSBCdWcgRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHllcywgd2UncmUgZGVhbGluZyB3aXRoIGBERVZJQ0VfQVRUUl9XTyhpZGxlKWAuIFRoaXMgbWVhbnMgdGhlIGBpZGxlX3N0b3JlYCBmdW5jdGlvbiBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggc3lzZnMuIFRoYXQncyBvdXIgZW50cnkgcG9pbnQuXG5cblRoZSBwYXRjaCBpdHNlbGYgYWRkcmVzc2VzIGEgYnVnIGluIHRoZSB6cmFtIGRyaXZlciByZWxhdGVkIHRvIGhvdyBpZGxlIHRpbWUgY3V0b2ZmcyBhcmUgaGFuZGxlZC4gVGhlIG9yaWdpbmFsIGlzc3VlIHdhcyB0aGF0IGEgYGN1dG9mZmAgdmFsdWUgb2YgMCwgaW50ZW5kZWQgdG8gbWVhbiBcImFsbCBlbnRyaWVzLFwiIGNvdWxkIGFsc28gcmVzdWx0IGZyb20gdGhlIGNhbGN1bGF0aW9uIGBrdGltZV9zdWJgLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGluY29ycmVjdCBiZWhhdmlvciB3aGVuIHRoZSB0aW1lIGRpZmZlcmVuY2UgZXF1YWxzIHRoZSBjdXRvZmYuIFNvLCB0aGUgcGF0Y2ggc2VlbXMgZnVuY3Rpb25hbCwgYWRkcmVzc2luZyBhIGxvZ2ljIGZsYXcuIFdlIG5lZWQgdG8gZm9jdXMgb24gYGlkbGVfc3RvcmVgLlxuXG5UbyB0ZXN0IHRoaXMgZWZmZWN0aXZlbHksIHdlIGRlZmluaXRlbHkgbmVlZCBgWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVgIGJlY2F1c2UgaXQgbW9kaWZpZXMgdGhlIGBhZ2Vfc2VjYCBsb2dpYyB3aXRoaW4gdGhlIGAjaWZkZWZgIGJsb2NrLiBMb29raW5nIGF0IHRoZSBjb2RlOlxuXG5gYGBjXG4jaWZkZWYgQ09ORklHX1pSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXG5cdFx0aXNfaWRsZSA9IGN1dG9mZiA9PSBLVElNRV9NSU4gfHxcblx0XHRcdGt0aW1lX2FmdGVyKGN1dG9mZiwgenJhbS1cdTAwM2V0YWJsZVtpbmRleF0uYXR0ci5hY190aW1lKTtcbiNlbmRpZlxuYGBgXG5cbkFuZCBpbiBgaWRsZV9zdG9yZWA6XG5cbmBgYGNcblx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUUpIFx1MDAyNlx1MDAyNlxuXHRcdCAgICAha3N0cnRvdWludChidWYsIDAsIFx1MDAyNmFnZV9zZWMpKVxuXHRcdFx0Y3V0b2ZmID0ga3RpbWVfc3ViKGt0aW1lX2dldF9ib290dGltZV9zZWNvbmRzKCksXG5cdFx0XHRcdFx0ICAgYWdlX3NlYyk7XG5gYGBcblxuTWFrZXMgaXQgY2xlYXIgYFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FYCBpcyBlc3NlbnRpYWwgdG8gdGVzdCB0aGUgdGltZSBzdWJ0cmFjdGlvbiBsb2dpYy4gVGhlIGBaUkFNYCBjb25maWcgaXRzZWxmIGRlcGVuZHMgb24gYEJMT0NLYCwgYFNZU0ZTYCwgYW5kIGBNTVVgIHdoaWNoIGFyZSBmYWlybHkgc3RhbmRhcmQgZGVwZW5kZW5jaWVzLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gdGhlIHZpc2liaWxpdHkgb2YgYGlkbGVfc3RvcmVgLlxuXG5gYGBjXG5zdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG5cdFx0XHQgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbmBgYFxuXG5JdCdzIHN0YXRpYywgd2hpY2ggbWFrZXMgaXQgYW4gaW50ZXJuYWwgZnVuY3Rpb24uIFN5emthbGxlciBjYW4gc3RpbGwgZnV6eiBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkncmUgcmVhY2hhYmxlLiBCdXQgZm9yIGBGb2N1c1N5bWJvbHNgLCB3ZSBzaG91bGQgcHJpb3JpdGl6ZSBub24tc3RhdGljIGVudHJ5IHBvaW50cywgb3IsIGZhaWxpbmcgdGhhdCwganVzdCB0aGUgc3RhdGljIGVudHJ5cG9pbnQgaWYgbm90aGluZyBlbHNlIGNhbGxzIGl0LiBIb3dldmVyLCB0aGUgY29tbWVudHMgaW4gc3l6a2FsbGVyIGNvZGUgbWVudGlvbiBhYm91dCBwcmVmZXJlbmNlIG9uIG5vbi1zdGF0aWMgc3ltYm9scy5cblxuQnV0LCBpbiB0aGlzIGNhc2UsIGBpZGxlX3N0b3JlYCBpcyAqbm90KiBpbmxpbmVkLiBJdCdzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgdG8gc3lzZnMsIG1lYW5pbmcgaXQnbGwgaGF2ZSBhIGRpc3RpbmN0IGFkZHJlc3MuIEFsc28sIGl0J3MgdGhlIG9ubHkgc3lzZnMgc3RvcmUgZnVuY3Rpb24gZm9yIGBpZGxlYCwgc28gaXQgaXMgdGhlIGNvcnJlY3QgZnVuY3Rpb24gdG8gdXNlLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIGBtYXJrX2lkbGVgIHRvby4gWWVzLCBpdCdzIHN0YXRpYzpcblxuYGBgY1xuc3RhdGljIHZvaWQgbWFya19pZGxlKHN0cnVjdCB6cmFtICp6cmFtLCBrdGltZV90IGN1dG9mZilcbmBgYFxuXG5gbWFya19pZGxlYCBpcyBjYWxsZWQgYnkgYGlkbGVfc3RvcmVgLCBzbyBpdCdzIGEgZ29vZCBmdW5jdGlvbiB0byBpbmNsdWRlLlxuU2luY2UgYGlkbGVfc3RvcmVgIGlzIHRoZSBvbmx5IHN5c2ZzIHN0b3JlIGZ1bmN0aW9uIGZvciBpZGxlLiBBbmQgd2UgYXJlIGdvaW5nIHRvIGZvY3VzIHRoZSBmdXp6ZXIgb24gdGhlc2UgdHdvIGZ1bmN0aW9ucy5cblxuU28sIGZvciBmdXp6aW5nLCB3ZSdsbCB1c2UgYGlkbGVfc3RvcmVgIGFuZCBgbWFya19pZGxlYCBhcyBgRm9jdXNTeW1ib2xzYC5cblRoZSBjb3JlIGNvbmZpZ3MgYXJlIGBaUkFNYCAod2hpY2gsIHRoYW5rZnVsbHksIGlzIGEgdHJpc3RhdGUgY29uZmlnKSBhbmQgYFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FYC5cblxuSGVyZSdzIHRoZSByZWFzb25pbmcgdG8gaW5jbHVkZSBpbiB0aGUgc3VibWlzc2lvbjpcblxuVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgaWRsZV9zdG9yZWAgc3lzZnMgY2FsbGJhY2sgaW4gdGhlIHpyYW0gZHJpdmVyIHRvIGFkZHJlc3MgYW4gaXNzdWUgd2hlcmUgYSAwIGN1dG9mZiB0aW1lIChmcm9tIGBrdGltZV9zdWJgKSBjb3VsZCBiZSBtaXNpbnRlcnByZXRlZCBhcyBcImFsbCBlbnRyaWVzXCIgKHdoaWNoIHdhcyBwcmV2aW91c2x5IGFsc28gYSBjdXRvZmYgb2YgMCkuIFRoZSBzcGVjaWFsIFwiYWxsXCIgdmFsdWUgaGFzIGJlZW4gY2hhbmdlZCB0byBgS1RJTUVfTUlOYCwgYW5kIGEgY2FzdCB0aGF0IGNvdWxkIGNhdXNlIHRpbWUgdHJ1bmNhdGlvbiB3YXMgcmVtb3ZlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBkcml2ZXIgY29kZS5cblxuVGhlIGZpbmFsIGNvbmZpZ3VyYXRpb24sIHRoZXJlZm9yZSwgbG9va3MgbGlrZSB0aGlzOlxuXG5Xb3J0aEZ1enppbmc6IHRydWVcbkZvY3VzU3ltYm9sczogW1wiaWRsZV9zdG9yZVwiLCBcIm1hcmtfaWRsZVwiXVxuRW5hYmxlQ29uZmlnczogW1wiWlJBTVwiLCBcIlpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXCJdXG5cbldlIGhhdmUgdmVyaWZpZWQgdGhhdCBgWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVgIGRlcGVuZHMgb24gYFpSQU1gLCBhbmQgYFpSQU1gIGhhcyB0aGUgZm9sbG93aW5nIGRlcGVuZGVuY2llczogYEJMT0NLIFx1MDAyNlx1MDAyNiBTWVNGUyBcdTAwMjZcdTAwMjYgTU1VYC4gRXZlcnl0aGluZyBjaGVja3Mgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDgzLCJPdXRwdXRUb2tlbnMiOjE1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MDM6MjguMzA5OTUwNzcyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY2MzI4NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpSQU1cIixcbiAgICBcIlpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWRsZV9zdG9yZVwiLFxuICAgIFwibWFya19pZGxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBpZGxlX3N0b3JlYCBzeXNmcyBjYWxsYmFjayBpbiB0aGUgenJhbSBkcml2ZXIgdG8gZml4IGFuIGlzc3VlIHdoZXJlIGEgY2FsY3VsYXRlZCBjdXRvZmYgdGltZSBvZiAwIChmcm9tIGBrdGltZV9zdWJgKSB3b3VsZCBpbmNvcnJlY3RseSB0cmlnZ2VyIHRoZSBcXFwiYWxsXFxcIiBiZWhhdmlvciAod2hpY2ggd2FzIHByZXZpb3VzbHkgcmVwcmVzZW50ZWQgYnkgYSBjdXRvZmYgb2YgMCkuIEl0IGNoYW5nZXMgdGhlIHNwZWNpYWwgXFxcImFsbFxcXCIgdmFsdWUgdG8gYEtUSU1FX01JTmAgYW5kIHJlbW92ZXMgYSBgKHUzMilgIGNhc3QgdGhhdCBjb3VsZCBjYXVzZSB0aW1lIHRydW5jYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgZHJpdmVyIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlJBTVwiLFxuICAgIFwiWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZGxlX3N0b3JlXCIsXG4gICAgXCJtYXJrX2lkbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGlkbGVfc3RvcmVgIHN5c2ZzIGNhbGxiYWNrIGluIHRoZSB6cmFtIGRyaXZlciB0byBmaXggYW4gaXNzdWUgd2hlcmUgYSBjYWxjdWxhdGVkIGN1dG9mZiB0aW1lIG9mIDAgKGZyb20gYGt0aW1lX3N1YmApIHdvdWxkIGluY29ycmVjdGx5IHRyaWdnZXIgdGhlIFxcXCJhbGxcXFwiIGJlaGF2aW9yICh3aGljaCB3YXMgcHJldmlvdXNseSByZXByZXNlbnRlZCBieSBhIGN1dG9mZiBvZiAwKS4gSXQgY2hhbmdlcyB0aGUgc3BlY2lhbCBcXFwiYWxsXFxcIiB2YWx1ZSB0byBgS1RJTUVfTUlOYCBhbmQgcmVtb3ZlcyBhIGAodTMyKWAgY2FzdCB0aGF0IGNvdWxkIGNhdXNlIHRpbWUgdHJ1bmNhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBkcml2ZXIgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MDM6MjguMzk2NTk2NzQ5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDkzNjA1MzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MDM6MjguMzk3MTc5NTA5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkwOTMwMTg3MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB6cmFtX2Rydi5jYCByZWxhdGVkIHRvIHRpbWUgY2FsY3VsYXRpb24gYW5kIHRoZSBzcGVjaWFsIHZhbHVlIHVzZWQgdG8gbWFyayBhbGwgZW50cmllcyBhcyBpZGxlLiBJdCBjaGFuZ2VzIHRoZSBzcGVjaWFsIHZhbHVlIG9mIGBjdXRvZmZgIGZyb20gMCB0byBgS1RJTUVfTUlOYCBhbmQgcmVtb3ZlcyBhIGAodTMyKWAgY2FzdCBmcm9tIGBrdGltZV9nZXRfYm9vdHRpbWVfc2Vjb25kcygpYC4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBwdXJlbHkgcmVsYXRlZCB0byB0aW1lIGNvbXBhcmlzb25zIGFuZCBsb2dpYy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwMDg0MWYyMjYxNmQwZjE1MGI1NmMyZjNhZGJjYzQ0ZmYwNzNjMjQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTA6MDI6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG5pbmRleCBhOWIzYmIxZDNiZWYzLi5kYTUxZjcwYjcxMjE1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG5AQCAtNDM4LDcgKzQzOCw3IEBAIHN0YXRpYyB2b2lkIG1hcmtfaWRsZShzdHJ1Y3QgenJhbSAqenJhbSwga3RpbWVfdCBjdXRvZmYpXG4gXHRcdH1cbiBcbiAjaWZkZWYgQ09ORklHX1pSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXG4tXHRcdGlzX2lkbGUgPSAhY3V0b2ZmIHx8XG4rXHRcdGlzX2lkbGUgPSBjdXRvZmYgPT0gS1RJTUVfTUlOIHx8XG4gXHRcdFx0a3RpbWVfYWZ0ZXIoY3V0b2ZmLCB6cmFtLVx1MDAzZXRhYmxlW2luZGV4XS5hdHRyLmFjX3RpbWUpO1xuICNlbmRpZlxuIFx0XHRpZiAoaXNfaWRsZSlcbkBAIC00NTMsNyArNDUzLDcgQEAgc3RhdGljIHNzaXplX3QgaWRsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuIFx0XHRcdCAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuIHtcbiBcdHN0cnVjdCB6cmFtICp6cmFtID0gZGV2X3RvX3pyYW0oZGV2KTtcbi1cdGt0aW1lX3QgY3V0b2ZmID0gMDtcbitcdGt0aW1lX3QgY3V0b2ZmID0gS1RJTUVfTUlOO1xuIFxuIFx0aWYgKCFzeXNmc19zdHJlcShidWYsIFwiYWxsXCIpKSB7XG4gXHRcdC8qXG5AQCAtNDY0LDcgKzQ2NCw3IEBAIHN0YXRpYyBzc2l6ZV90IGlkbGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiBcbiBcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1pSQU1fVFJBQ0tfRU5UUllfQUNUSU1FKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFrc3RydG91aW50KGJ1ZiwgMCwgXHUwMDI2YWdlX3NlYykpXG4tXHRcdFx0Y3V0b2ZmID0ga3RpbWVfc3ViKCh1MzIpa3RpbWVfZ2V0X2Jvb3R0aW1lX3NlY29uZHMoKSxcbitcdFx0XHRjdXRvZmYgPSBrdGltZV9zdWIoa3RpbWVfZ2V0X2Jvb3R0aW1lX3NlY29uZHMoKSxcbiBcdFx0XHRcdFx0ICAgYWdlX3NlYyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC00NzUsNyArNDc1LDcgQEAgc3RhdGljIHNzaXplX3QgaWRsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdC8qXG4tXHQgKiBBIGN1dG9mZiBvZiAwIG1hcmtzIGV2ZXJ5dGhpbmcgYXMgaWRsZSwgdGhpcyBpcyB0aGVcbitcdCAqIEEgY3V0b2ZmIG9mIEtUSU1FX01JTiBtYXJrcyBldmVyeXRoaW5nIGFzIGlkbGUsIHRoaXMgaXMgdGhlXG4gXHQgKiBcImFsbFwiIGJlaGF2aW9yLlxuIFx0ICovXG4gXHRtYXJrX2lkbGUoenJhbSwgY3V0b2ZmKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjAzOjI4LjM5NzE4MDI0OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDkyOTk4MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlpyYW0gRHJpdmVyIFBhdGNoIEFuYWx5c2lzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggdGFyZ2V0cyBgZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNgLCB3aGljaCB0ZWxscyBtZSB3ZSdyZSBsb29raW5nIGF0IGEgY29yZSBibG9jayBkZXZpY2UgZHJpdmVyIGNvbXBvbmVudC4gVGhlIGNoYW5nZXMgYXJlIGFsbCBjZW50ZXJlZCBhcm91bmQgdGhlIGBjdXRvZmZgIHZhcmlhYmxlIGFuZCBpdHMgcmVsYXRlZCBsb2dpYywgYW5kIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gV2UncmUgdGFsa2luZyBhYm91dCBhIHRpbWUtcmVsYXRlZCBidWcgZml4IOKAkyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGN1dG9mZmAgaXMgYmVpbmcgbW9kaWZpZWQgZnJvbSBgMGAgdG8gYEtUSU1FX01JTmAuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgYSBsaWtlbHkgY2FzZSBvZiBlaXRoZXIgYW4gb3ZlcmZsb3cgcHJvYmxlbSB3aXRoIHRoZSBvbGRlciBpbml0aWFsaXphdGlvbiBvciwgcGVyaGFwcyBtb3JlIGxpa2VseSwgYW4gaXNzdWUgd2hlcmUgYDBgIHdhcyBiZWluZyB1c2VkIHRvIHJlcHJlc2VudCBhbiBpbnZhbGlkIG9yIHNwZWNpYWwgdGltZSB2YWx1ZSwgYnV0IHRoYXQgYXBwcm9hY2ggaGFkIGZsYXdzLiBUaGUgbG9naWMgY2hlY2sgYGlzX2lkbGUgPSAhY3V0b2ZmIHx8IC4uLmAgaXMgY2hhbmdlZCB0byBgaXNfaWRsZSA9IGN1dG9mZiA9PSBLVElNRV9NSU4gfHwgLi4uYCwgd2hpY2ggcmVpbmZvcmNlcyB0aGUgc3VzcGljaW9uIG9mIGEgc3BlY2lhbCB2YWx1ZSByZXByZXNlbnRhdGlvbiBmb3IgdGltZSwgdGhhdCBhIHplcm8gdmFsdWUgd2FzIGJlaW5nIGluY29ycmVjdGx5IHRyZWF0ZWQgYXMgYSB2YWxpZCB2YWx1ZS4gRnVydGhlciwgdGhlIHRpbWUgc3VidHJhY3Rpb24gZnVuY3Rpb24gY2hhbmdlcywgdXNpbmcgdGhlIGNvcnJlY3Qga3RpbWUgZnVuY3Rpb24gZm9yIHVzZSB3aXRoIGEga3RpbWVfdC4gVGhpcyBwb2ludHMgdG93YXJkcyBhbiBpbXByb3ZlbWVudCBpbiB0aGUgYWNjdXJhY3kgb3IgaGFuZGxpbmcgb2YgdGltZSBjYWxjdWxhdGlvbnMsIHBvdGVudGlhbGx5IGFkZHJlc3NpbmcgaXNzdWVzIHdpdGggdGhlIGBhZ2Vfc2VjYCB2YWx1ZSBiZWluZyB1c2VkIGluIHJlbGF0aW9uIHRvIHRoZSBgY3V0b2ZmYC5cblxuVGhlIGNydWNpYWwgdGhpbmcgaGVyZSwgZnJvbSBhIHNlY3VyaXR5IGFuZCBzdGFiaWxpdHkgcGVyc3BlY3RpdmUsIGlzIHRoYXQgdGhlcmUgYXJlIG5vIHJlZCBmbGFncy4gVGhpcyBpc24ndCB0b3VjaGluZyBtZW1vcnkgYWxsb2NhdGlvbiwgaW50cm9kdWNpbmcgbmV3IHVzZXItc3BhY2UgaW50ZXJmYWNlcywgb3IgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHZhcmlhYmxlcy4gSXQncyBhIHRhcmdldGVkIGxvZ2ljIGZpeCB3aXRoaW4gdGhlIGV4aXN0aW5nIHRpbWUgdHJhY2tpbmcgbWVjaGFuaXNtLiBUaGlzIHBhdGNoIGlzIGlzb2xhdGVkIGFuZCBjb250YWluZWQsIGluZGljYXRpbmcgdGhpcyBpcyBoaWdobHkgdW5saWtlbHkgdG8gaW50cm9kdWNlIGFueSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuXG5cbkdpdmVuIHRoaXMgYW5hbHlzaXMsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMgY2hhbmdlLiBUaGUgcmlzayBwcm9maWxlIGlzIGV4dHJlbWVseSBsb3cgYmFzZWQgb24gdGhpcyBsaW1pdGVkIHJldmlldy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2NCwiT3V0cHV0VG9rZW5zIjoxNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDowMzozNy40OTAxODExMTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB6cmFtX2Rydi5jYCByZWxhdGVkIHRvIHRpbWUgY2FsY3VsYXRpb24gYW5kIHRoZSBzcGVjaWFsIHZhbHVlIHVzZWQgdG8gbWFyayBhbGwgZW50cmllcyBhcyBpZGxlLiBJdCBjaGFuZ2VzIHRoZSBzcGVjaWFsIHZhbHVlIG9mIGBjdXRvZmZgIGZyb20gMCB0byBgS1RJTUVfTUlOYCBhbmQgcmVtb3ZlcyBhIGAodTMyKWAgY2FzdCBmcm9tIGBrdGltZV9nZXRfYm9vdHRpbWVfc2Vjb25kcygpYC4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBwdXJlbHkgcmVsYXRlZCB0byB0aW1lIGNvbXBhcmlzb25zIGFuZCBsb2dpYy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgenJhbV9kcnYuY2AgcmVsYXRlZCB0byB0aW1lIGNhbGN1bGF0aW9uIGFuZCB0aGUgc3BlY2lhbCB2YWx1ZSB1c2VkIHRvIG1hcmsgYWxsIGVudHJpZXMgYXMgaWRsZS4gSXQgY2hhbmdlcyB0aGUgc3BlY2lhbCB2YWx1ZSBvZiBgY3V0b2ZmYCBmcm9tIDAgdG8gYEtUSU1FX01JTmAgYW5kIHJlbW92ZXMgYSBgKHUzMilgIGNhc3QgZnJvbSBga3RpbWVfZ2V0X2Jvb3R0aW1lX3NlY29uZHMoKWAuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zLiBUaGUgbW9kaWZpY2F0aW9ucyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gdGltZSBjb21wYXJpc29ucyBhbmQgbG9naWMuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowg8j42[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-25 09:44:58 +0000 UTC FinishedAt: 2026-08-25 10:03:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4b18edbd8e70f7e6860d56370f13244896d0f95c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZRAM", "ZRAM_TRACK_ENTRY_ACTIME" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4b18edbd8e70f7e6860d56370f13244896d0f95c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZRAM", "ZRAM_TRACK_ENTRY_ACTIME" ], "series_id": "3335cb5c-271a-45f0-933e-cb8fde58b33b" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "idle_store", "mark_idle" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlJBTV9UUkFDS19FTlRSWV9BQ1RJTUUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZGxlX3N0b3JlJiMzNDssCiAgICAmIzM0O21hcmtfaWRsZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB6cmFtX2Rydi5jYCByZWxhdGVkIHRvIHRpbWUgY2FsY3VsYXRpb24gYW5kIHRoZSBzcGVjaWFsIHZhbHVlIHVzZWQgdG8gbWFyayBhbGwgZW50cmllcyBhcyBpZGxlLiBJdCBjaGFuZ2VzIHRoZSBzcGVjaWFsIHZhbHVlIG9mIGBjdXRvZmZgIGZyb20gMCB0byBgS1RJTUVfTUlOYCBhbmQgcmVtb3ZlcyBhIGAodTMyKWAgY2FzdCBmcm9tIGBrdGltZV9nZXRfYm9vdHRpbWVfc2Vjb25kcygpYC4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBwdXJlbHkgcmVsYXRlZCB0byB0aW1lIGNvbXBhcmlzb25zIGFuZCBsb2dpYy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBpZGxlX3N0b3JlYCBzeXNmcyBjYWxsYmFjayBpbiB0aGUgenJhbSBkcml2ZXIgdG8gZml4IGFuIGlzc3VlIHdoZXJlIGEgY2FsY3VsYXRlZCBjdXRvZmYgdGltZSBvZiAwIChmcm9tIGBrdGltZV9zdWJgKSB3b3VsZCBpbmNvcnJlY3RseSB0cmlnZ2VyIHRoZSBcJiMzNDthbGxcJiMzNDsgYmVoYXZpb3IgKHdoaWNoIHdhcyBwcmV2aW91c2x5IHJlcHJlc2VudGVkIGJ5IGEgY3V0b2ZmIG9mIDApLiBJdCBjaGFuZ2VzIHRoZSBzcGVjaWFsIFwmIzM0O2FsbFwmIzM0OyB2YWx1ZSB0byBgS1RJTUVfTUlOYCBhbmQgcmVtb3ZlcyBhIGAodTMyKWAgY2FzdCB0aGF0IGNvdWxkIGNhdXNlIHRpbWUgdHJ1bmNhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBkcml2ZXIgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDAwODQxZjIyNjE2ZDBmMTUwYjU2YzJmM2FkYmNjNDRmZjA3M2MyNDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxMDowMjoyOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG5pbmRleCBhOWIzYmIxZDNiZWYzLi5kYTUxZjcwYjcxMjE1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG5AQCAtNDM4LDcgJiM0Mzs0MzgsNyBAQCBzdGF0aWMgdm9pZCBtYXJrX2lkbGUoc3RydWN0IHpyYW0gKnpyYW0sIGt0aW1lX3QgY3V0b2ZmKVxuIFx0XHR9XG4gXG4gI2lmZGVmIENPTkZJR19aUkFNX1RSQUNLX0VOVFJZX0FDVElNRVxuLVx0XHRpc19pZGxlID0gIWN1dG9mZiB8fFxuJiM0MztcdFx0aXNfaWRsZSA9IGN1dG9mZiA9PSBLVElNRV9NSU4gfHxcbiBcdFx0XHRrdGltZV9hZnRlcihjdXRvZmYsIHpyYW0tXHUwMDNldGFibGVbaW5kZXhdLmF0dHIuYWNfdGltZSk7XG4gI2VuZGlmXG4gXHRcdGlmIChpc19pZGxlKVxuQEAgLTQ1Myw3ICYjNDM7NDUzLDcgQEAgc3RhdGljIHNzaXplX3QgaWRsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuIFx0XHRcdCAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuIHtcbiBcdHN0cnVjdCB6cmFtICp6cmFtID0gZGV2X3RvX3pyYW0oZGV2KTtcbi1cdGt0aW1lX3QgY3V0b2ZmID0gMDtcbiYjNDM7XHRrdGltZV90IGN1dG9mZiA9IEtUSU1FX01JTjtcbiBcbiBcdGlmICghc3lzZnNfc3RyZXEoYnVmLCBcJiMzNDthbGxcJiMzNDspKSB7XG4gXHRcdC8qXG5AQCAtNDY0LDcgJiM0Mzs0NjQsNyBAQCBzdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4gXG4gXHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19aUkFNX1RSQUNLX0VOVFJZX0FDVElNRSkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAha3N0cnRvdWludChidWYsIDAsIFx1MDAyNmFnZV9zZWMpKVxuLVx0XHRcdGN1dG9mZiA9IGt0aW1lX3N1YigodTMyKWt0aW1lX2dldF9ib290dGltZV9zZWNvbmRzKCksXG4mIzQzO1x0XHRcdGN1dG9mZiA9IGt0aW1lX3N1YihrdGltZV9nZXRfYm9vdHRpbWVfc2Vjb25kcygpLFxuIFx0XHRcdFx0XHQgICBhZ2Vfc2VjKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTQ3NSw3ICYjNDM7NDc1LDcgQEAgc3RhdGljIHNzaXplX3QgaWRsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdC8qXG4tXHQgKiBBIGN1dG9mZiBvZiAwIG1hcmtzIGV2ZXJ5dGhpbmcgYXMgaWRsZSwgdGhpcyBpcyB0aGVcbiYjNDM7XHQgKiBBIGN1dG9mZiBvZiBLVElNRV9NSU4gbWFya3MgZXZlcnl0aGluZyBhcyBpZGxlLCB0aGlzIGlzIHRoZVxuIFx0ICogXCYjMzQ7YWxsXCYjMzQ7IGJlaGF2aW9yLlxuIFx0ICovXG4gXHRtYXJrX2lkbGUoenJhbSwgY3V0b2ZmKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlJBTSYjMzQ7LAogICAgJiMzNDtaUkFNX1RSQUNLX0VOVFJZX0FDVElNRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lkbGVfc3RvcmUmIzM0OywKICAgICYjMzQ7bWFya19pZGxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgaWRsZV9zdG9yZWAgc3lzZnMgY2FsbGJhY2sgaW4gdGhlIHpyYW0gZHJpdmVyIHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSBhIGNhbGN1bGF0ZWQgY3V0b2ZmIHRpbWUgb2YgMCAoZnJvbSBga3RpbWVfc3ViYCkgd291bGQgaW5jb3JyZWN0bHkgdHJpZ2dlciB0aGUgXCYjMzQ7YWxsXCYjMzQ7IGJlaGF2aW9yICh3aGljaCB3YXMgcHJldmlvdXNseSByZXByZXNlbnRlZCBieSBhIGN1dG9mZiBvZiAwKS4gSXQgY2hhbmdlcyB0aGUgc3BlY2lhbCBcJiMzNDthbGxcJiMzNDsgdmFsdWUgdG8gYEtUSU1FX01JTmAgYW5kIHJlbW92ZXMgYSBgKHUzMilgIGNhc3QgdGhhdCBjb3VsZCBjYXVzZSB0aW1lIHRydW5jYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgZHJpdmVyIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwMDg0MWYyMjYxNmQwZjE1MGI1NmMyZjNhZGJjYzQ0ZmYwNzNjMjQyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMTA6MDI6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jCmluZGV4IGE5YjNiYjFkM2JlZjMuLmRhNTFmNzBiNzEyMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jCkBAIC00MzgsNyAmIzQzOzQzOCw3IEBAIHN0YXRpYyB2b2lkIG1hcmtfaWRsZShzdHJ1Y3QgenJhbSAqenJhbSwga3RpbWVfdCBjdXRvZmYpCiAJCX0KIAogI2lmZGVmIENPTkZJR19aUkFNX1RSQUNLX0VOVFJZX0FDVElNRQotCQlpc19pZGxlID0gIWN1dG9mZiB8fAomIzQzOwkJaXNfaWRsZSA9IGN1dG9mZiA9PSBLVElNRV9NSU4gfHwKIAkJCWt0aW1lX2FmdGVyKGN1dG9mZiwgenJhbS0mZ3Q7dGFibGVbaW5kZXhdLmF0dHIuYWNfdGltZSk7CiAjZW5kaWYKIAkJaWYgKGlzX2lkbGUpCkBAIC00NTMsNyAmIzQzOzQ1Myw3IEBAIHN0YXRpYyBzc2l6ZV90IGlkbGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogewogCXN0cnVjdCB6cmFtICp6cmFtID0gZGV2X3RvX3pyYW0oZGV2KTsKLQlrdGltZV90IGN1dG9mZiA9IDA7CiYjNDM7CWt0aW1lX3QgY3V0b2ZmID0gS1RJTUVfTUlOOwogCiAJaWYgKCFzeXNmc19zdHJlcShidWYsICYjMzQ7YWxsJiMzNDspKSB7CiAJCS8qCkBAIC00NjQsNyAmIzQzOzQ2NCw3IEBAIHN0YXRpYyBzc2l6ZV90IGlkbGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAogCQlpZiAoSVNfRU5BQkxFRChDT05GSUdfWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUUpICZhbXA7JmFtcDsKIAkJICAgICFrc3RydG91aW50KGJ1ZiwgMCwgJmFtcDthZ2Vfc2VjKSkKLQkJCWN1dG9mZiA9IGt0aW1lX3N1YigodTMyKWt0aW1lX2dldF9ib290dGltZV9zZWNvbmRzKCksCiYjNDM7CQkJY3V0b2ZmID0ga3RpbWVfc3ViKGt0aW1lX2dldF9ib290dGltZV9zZWNvbmRzKCksCiAJCQkJCSAgIGFnZV9zZWMpOwogCQllbHNlCiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ3NSw3ICYjNDM7NDc1LDcgQEAgc3RhdGljIHNzaXplX3QgaWRsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qCi0JICogQSBjdXRvZmYgb2YgMCBtYXJrcyBldmVyeXRoaW5nIGFzIGlkbGUsIHRoaXMgaXMgdGhlCiYjNDM7CSAqIEEgY3V0b2ZmIG9mIEtUSU1FX01JTiBtYXJrcyBldmVyeXRoaW5nIGFzIGlkbGUsIHRoaXMgaXMgdGhlCiAJICogJiMzNDthbGwmIzM0OyBiZWhhdmlvci4KIAkgKi8KIAltYXJrX2lkbGUoenJhbSwgY3V0b2ZmKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBacmFtIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jYC4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgdGhlIGBjdXRvZmZgIHZhbHVlIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBgaWRsZV9zdG9yZWAgYW5kIGBtYXJrX2lkbGVgIGZ1bmN0aW9ucywgYWNjZXNzZWQgdGhyb3VnaCB0aGUgc3lzZnMgaW50ZXJmYWNlLiBJIHNlZSB0aGUgY2hhbmdlczogd2UmIzM5O3JlIGluaXRpYWxpemluZyBgY3V0b2ZmYCB0byBgS1RJTUVfTUlOYCBpbnN0ZWFkIG9mIDAsIHN3aXRjaGluZyB0aGUgYGlzX2lkbGVgIGNoZWNrcyB0byByZWZsZWN0IHRoaXMsIGFuZCByZW1vdmluZyB0aGUgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgYCh1MzIpYCBjYXN0IGluIHRoZSBga3RpbWVfc3ViYCBjYWxjdWxhdGlvbi4KCkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIGlzIGZpeGluZyBhIHN1YnRsZSBidWcgcmVsYXRlZCB0byB0aGUgaW50ZXJwcmV0YXRpb24gb2YgYSB6ZXJvIHZhbHVlIGZvciBgY3V0b2ZmYC4gUHJldmlvdXNseSwgemVybyBoYWQgYSBkdWFsIG1lYW5pbmc6ICYjMzQ7YWxsJiMzNDsgYW5kIHBvdGVudGlhbGx5IGEgcmVhbCByZXN1bHQgb2YgYGt0aW1lX3N1YmAgd2hlbiBga3RpbWVfZ2V0X2Jvb3R0aW1lX3NlY29uZHMoKWAgYW5kIGBhZ2Vfc2VjYCB3ZXJlIGVxdWFsLiAgVGhlIGNoYW5nZSBhdm9pZHMgdGhpcyBhbWJpZ3VpdHkgYnkgdXNpbmcgYEtUSU1FX01JTmAgZm9yICYjMzQ7YWxsJiMzNDsuIFRoZSByZW1vdmFsIG9mIHRoZSBjYXN0IGlzIGEgZ29vZCB0aGluZzsgaXQgZWxpbWluYXRlcyB0aGUgY2hhbmNlIG9mIHRydW5jYXRpb24gb3IgdGltZS13cmFwIGlzc3Vlcy4KClRoZSBjb3JlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyB3YXJyYW50cyBmdXp6aW5nLiBHaXZlbiB0aGF0IGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHN5c2ZzIGludGVyZmFjZSBvZiB0aGUgenJhbSBkcml2ZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYGlkbGVfc3RvcmVgLCBteSBhbnN3ZXIgaXMgeWVzLCBhYnNvbHV0ZWx5LiBJdCBpbnZvbHZlcyB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGFuZCBkZWFscyB3aXRoIHRpbWUgY2FsY3VsYXRpb25zLCBtYWtpbmcgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcgdG8gdW5jb3ZlciBhbnkgZWRnZSBjYXNlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBUaGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQgYXJlIGBaUkFNYCBhbmQgYFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FYCwgdGhlIGxhdHRlciBvZiB3aGljaCBpcyBtZW50aW9uZWQgZGlyZWN0bHkgaW4gdGhlIGNvZGUsIHNvIEkmIzM5O2xsIHdhbnQgdG8gY2hlY2sgdGhlIEtjb25maWcgZm9yIHRob3NlLiBJIHNob3VsZCBzdGFydCBieSBjaGVja2luZyB0aGUgS2NvbmZpZyB0byBjb25maXJtIG15IGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpSQU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI6Y29uZmlnIFpSQU1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtDb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE2LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTc6Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtsejQgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTIyLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MjM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRIQ1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjQtXHRib29sIFwmIzM0O2x6NGhjIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yOC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI5OmNvbmZpZyBaUkFNX0JBQ0tFTkRfWlNURFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMzAtXHRib29sIFwmIzM0O3pzdGQgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MzU6Y29uZmlnIFpSQU1fQkFDS0VORF9ERUZMQVRFXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7ZGVmbGF0ZSBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0MTpjb25maWcgWlJBTV9CQUNLRU5EXzg0MlxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDItXHRib29sIFwmIzM0Ozg0MiBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0Nzpjb25maWcgWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDgtXHRkZXBlbmRzIG9uIFpSQU1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01Mi1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjUzOmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01NC1cdGJvb2wgXCYjMzQ7bHpvIGFuZCBsem8tcmxlIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDsgaWYgIVpSQU1fQkFDS0VORF9GT1JDRV9MWk9cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz02MD1jaG9pY2Vcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02NC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1JMRVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjYtXHRib29sIFwmIzM0O2x6by1ybGVcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02OC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY5OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzAtXHRib29sIFwmIzM0O2x6b1wmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcyLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NzM6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFo0XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03NC1cdGJvb2wgXCYjMzQ7bHo0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Nzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRIQ1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzgtXHRib29sIFwmIzM0O2x6NGhjXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4MTpjb25maWcgWlJBTV9ERUZfQ09NUF9aU1REXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04Mi1cdGJvb2wgXCYjMzQ7enN0ZFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODU6Y29uZmlnIFpSQU1fREVGX0NPTVBfREVGTEFURVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODYtXHRib29sIFwmIzM0O2RlZmxhdGVcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04OC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg5OmNvbmZpZyBaUkFNX0RFRl9DT01QXzg0MlxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTAtXHRib29sIFwmIzM0Ozg0MlwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTkzPWVuZGNob2ljZVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo5NTpjb25maWcgWlJBTV9ERUZfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTYtXHRzdHJpbmdcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMDYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpSQU1fV1JJVEVCQUNLXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMDgtICAgICAgIGJvb2wgXCYjMzQ7V3JpdGUgYmFjayBpbmNvbXByZXNzaWJsZSBvciBpZGxlIHBhZ2UgdG8gYmFja2luZyBkZXZpY2VcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjAtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjE6Y29uZmlnIFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjItXHRib29sIFwmIzM0O1RyYWNrIGFjY2VzcyB0aW1lIG9mIHpyYW0gZW50cmllc1wmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyOC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEyOTpjb25maWcgWlJBTV9NRU1PUllfVFJBQ0tJTkdcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzMC1cdGJvb2wgXCYjMzQ7VHJhY2sgelJhbSBibG9jayBzdGF0dXNcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMzktXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNDA6Y29uZmlnIFpSQU1fTVVMVElfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTQxLVx0Ym9vbCBcJiMzNDtFbmFibGUgbXVsdGlwbGUgY29tcHJlc3Npb24gc3RyZWFtc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MTAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlpSQU0gRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgJiMzNDtaUkFNJiMzNDsuIFJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBjdXJyZW50IGFyZWEgb2YgZm9jdXMuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBtYXAgb3V0IGl0cyBkZXBlbmRlbmN5IHRyZWUuIEJlZm9yZSBJIGdldCBpbnRvIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBvciBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHR3ZWFrcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHRoaW5nICpyZWxpZXMqIG9uLiBXaGF0IG1vZHVsZXMsIGtlcm5lbCB2ZXJzaW9ucywgb3IgZXZlbiB1c2Vyc3BhY2UgY29tcG9uZW50cyBhcmUgZXNzZW50aWFsIGZvciBaUkFNIHRvIGZ1bmN0aW9uIHByb3Blcmx5PyBBcmUgdGhlcmUgYW55IHVwc3RyZWFtIGNoYW5nZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBtb2R1bGUsIG9yIGRvZXMgaXQgaGF2ZSBjb21wbGV4IGludGVyYWN0aW9ucyB3aXRoIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljIGRldmljZSBkcml2ZXJzLCBvciBldmVuIHRoaW5ncyBsaWtlIGBzd2FwYCB1dGlsaXRpZXM/IEkgbmVlZCB0byBkcmlsbCBkb3duIGFuZCBtYWtlIHN1cmUgSSBrbm93IHdoYXQgSSYjMzk7bSBkZWFsaW5nIHdpdGguIFRoZSBsYXN0IHRoaW5nIEkgd2FudCBpcyBhIG5hc3R5LCB1bmV4cGVjdGVkIGNvbmZsaWN0IGR1ZSB0byBhbiB1cHN0cmVhbSBjaGFuZ2Ugb3IgYW4gb3Zlcmxvb2tlZCBkZXBlbmRlbmN5IGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz0yPWNvbmZpZyBaUkFNXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7Q29tcHJlc3NlZCBSQU0gYmxvY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQ6XHRkZXBlbmRzIG9uIEJMT0NLIFx1MDAyNlx1MDAyNiBTWVNGUyBcdTAwMjZcdTAwMjYgTU1VXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01LVx0c2VsZWN0IFpTTUFMTE9DXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9MTc9Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtsejQgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTk6XHRkZXBlbmRzIG9uIFpSQU1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTIwLVx0c2VsZWN0IExaNF9DT01QUkVTU1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTIzPWNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0SENcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtsejRoYyBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyNTpcdGRlcGVuZHMgb24gWlJBTVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjYtXHRzZWxlY3QgTFo0SENfQ09NUFJFU1Ncbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz0yOT1jb25maWcgWlJBTV9CQUNLRU5EX1pTVERcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDt6c3RkIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjMxOlx0ZGVwZW5kcyBvbiBaUkFNXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zMi1cdHNlbGVjdCBaU1REX0NPTVBSRVNTXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9MzU9Y29uZmlnIFpSQU1fQkFDS0VORF9ERUZMQVRFXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7ZGVmbGF0ZSBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzozNzpcdGRlcGVuZHMgb24gWlJBTVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMzgtXHRzZWxlY3QgWkxJQl9ERUZMQVRFXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9NDE9Y29uZmlnIFpSQU1fQkFDS0VORF84NDJcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQyLVx0Ym9vbCBcJiMzNDs4NDIgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NDM6XHRkZXBlbmRzIG9uIFpSQU1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQ0LVx0c2VsZWN0IDg0Ml9DT01QUkVTU1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTQ3PWNvbmZpZyBaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0ODpcdGRlcGVuZHMgb24gWlJBTVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDktXHRkZWZfYm9vbCAhWlJBTV9CQUNLRU5EX0xaNCBcdTAwMjZcdTAwMjYgIVpSQU1fQkFDS0VORF9MWjRIQyBcdTAwMjZcdTAwMjYgXFxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz01Mz1jb25maWcgWlJBTV9CQUNLRU5EX0xaT1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTQtXHRib29sIFwmIzM0O2x6byBhbmQgbHpvLXJsZSBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7IGlmICFaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo1NTpcdGRlcGVuZHMgb24gWlJBTVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTYtXHRkZWZhdWx0IFpSQU1fQkFDS0VORF9GT1JDRV9MWk9cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz02MD1jaG9pY2Vcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02Mi1cdGRlZmF1bHQgWlJBTV9ERUZfQ09NUF9MWk9STEVcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjYzOlx0ZGVwZW5kcyBvbiBaUkFNXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02NC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTY1PWNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1JMRVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjYtXHRib29sIFwmIzM0O2x6by1ybGVcJiMzNDtcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY3Olx0ZGVwZW5kcyBvbiBaUkFNX0JBQ0tFTkRfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02OC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTY5PWNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzAtXHRib29sIFwmIzM0O2x6b1wmIzM0O1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NzE6XHRkZXBlbmRzIG9uIFpSQU1fQkFDS0VORF9MWk9cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcyLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9NzM9Y29uZmlnIFpSQU1fREVGX0NPTVBfTFo0XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03NC1cdGJvb2wgXCYjMzQ7bHo0XCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3NTpcdGRlcGVuZHMgb24gWlJBTV9CQUNLRU5EX0xaNFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz03Nz1jb25maWcgWlJBTV9ERUZfQ09NUF9MWjRIQ1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzgtXHRib29sIFwmIzM0O2x6NGhjXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3OTpcdGRlcGVuZHMgb24gWlJBTV9CQUNLRU5EX0xaNEhDXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04MC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTgxPWNvbmZpZyBaUkFNX0RFRl9DT01QX1pTVERcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTgyLVx0Ym9vbCBcJiMzNDt6c3RkXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4MzpcdGRlcGVuZHMgb24gWlJBTV9CQUNLRU5EX1pTVERcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9ODU9Y29uZmlnIFpSQU1fREVGX0NPTVBfREVGTEFURVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODYtXHRib29sIFwmIzM0O2RlZmxhdGVcJiMzNDtcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg3Olx0ZGVwZW5kcyBvbiBaUkFNX0JBQ0tFTkRfREVGTEFURVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODgtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz04OT1jb25maWcgWlJBTV9ERUZfQ09NUF84NDJcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDs4NDJcJiMzNDtcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjkxOlx0ZGVwZW5kcyBvbiBaUkFNX0JBQ0tFTkRfODQyXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05Mi1cbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz05NT1jb25maWcgWlJBTV9ERUZfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTYtXHRzdHJpbmdcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjk3Olx0ZGVwZW5kcyBvbiBaUkFNXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05OC1cdGRlZmF1bHQgXCYjMzQ7bHpvLXJsZVwmIzM0OyBpZiBaUkFNX0RFRl9DT01QX0xaT1JMRVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTEwNz1jb25maWcgWlJBTV9XUklURUJBQ0tcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwOC0gICAgICAgYm9vbCBcJiMzNDtXcml0ZSBiYWNrIGluY29tcHJlc3NpYmxlIG9yIGlkbGUgcGFnZSB0byBiYWNraW5nIGRldmljZVwmIzM0O1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTA5OiAgICAgICBkZXBlbmRzIG9uIFpSQU1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTExMC0gICAgICAgaGVscFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTEyMT1jb25maWcgWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMi1cdGJvb2wgXCYjMzQ7VHJhY2sgYWNjZXNzIHRpbWUgb2YgenJhbSBlbnRyaWVzXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjM6XHRkZXBlbmRzIG9uIFpSQU1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyNC1cdGhlbHBcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz0xMjk9Y29uZmlnIFpSQU1fTUVNT1JZX1RSQUNLSU5HXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMzAtXHRib29sIFwmIzM0O1RyYWNrIHpSYW0gYmxvY2sgc3RhdHVzXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMzE6XHRkZXBlbmRzIG9uIFpSQU0gXHUwMDI2XHUwMDI2IERFQlVHX0ZTXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMzItXHRzZWxlY3QgWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz0xNDA9Y29uZmlnIFpSQU1fTVVMVElfQ09NUFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTQxLVx0Ym9vbCBcJiMzNDtFbmFibGUgbXVsdGlwbGUgY29tcHJlc3Npb24gc3RyZWFtc1wmIzM0O1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTQyOlx0ZGVwZW5kcyBvbiBaUkFNXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xNDMtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ5NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBaUkFNIERlcGVuZGVuY2llcyBhbmQgc3lzZnMgRnVuY3Rpb24gUmVnaXN0cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBgWlJBTWAgY29uZmlndXJhdGlvbnMuIEl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIGZ1bmRhbWVudGFsIGZ1bmN0aW9uYWxpdHkgb2YgYFpSQU1gIHJlbGllcyBvbiBoYXZpbmcgYEJMT0NLYCwgYFNZU0ZTYCwgYW5kIGBNTVVgIGVuYWJsZWQuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgYmxvY2sgZGV2aWNlIHN1cHBvcnQsIHRoZSBzeXNmcyBpbnRlcmZhY2UsIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBhcmUgYWxsIGNyaXRpY2FsIGZvciBhIFJBTS1iYXNlZCBibG9jayBkZXZpY2UuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IHRob3NlIGFyZSBhbGwgZW5hYmxlZCBpbiBhbnkga2VybmVsIGNvbmZpZyB0aGF0IGluY2x1ZGVzIFpSQU0uIFRoZW4gdGhlcmUmIzM5O3MgYFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FYCwgYW5kIHRoYXQgbWFrZXMgc2Vuc2UgdG9vOiBpdCByZXF1aXJlcyB0aGF0IEkgaGF2ZSBgWlJBTWAgZW5hYmxlZCBiZWNhdXNlIGl0cyBwdXJwb3NlIGlzIHNwZWNpZmljIHRvIGl0LgoKTm93LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IHRoYXQgYGlkbGVfc3RvcmVgIGZ1bmN0aW9uIGlzIGhvb2tlZCB1cC4gSXQmIzM5O3MgYSBgc3lzZnNgIHN0b3JlIGZ1bmN0aW9uLCBzbyB0aGF0IG1lYW5zIGl0JiMzOTtzIGhvdyB1c2Vyc3BhY2UgaW50ZXJhY3RzIHdpdGggYSBzeXNmcyBhdHRyaWJ1dGUgdG8sIHByZXN1bWFibHksIHNldCBvciBtb2RpZnkgc29tZXRoaW5nIHJlbGF0ZWQgdG8gaWRsZSBtYW5hZ2VtZW50LiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHByZWNpc2VseSB3aGVyZSBpdCYjMzk7cyByZWdpc3RlcmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c2ZzIGluZnJhc3RydWN0dXJlIGlzIHVzaW5nIHRoYXQgZnVuY3Rpb24uIFRoYXQmIzM5O2xsIHRlbGwgbWUgYSBsb3QgYWJvdXQgd2hhdCB0aGUgZGV2ZWxvcGVyJiMzOTtzIGludGVudCB3YXMgd2l0aCB0aGlzIHBhcnQgb2YgYFpSQU1gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lkbGVfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz00MTg9c3RhdGljIHZvaWQgbWFya19pZGxlKHN0cnVjdCB6cmFtICp6cmFtLCBrdGltZV90IGN1dG9mZilcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00NTEtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzo0NTI6c3RhdGljIHNzaXplX3QgaWRsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNDUzLVx0XHRcdCAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5OTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcmVzdCBvZiB0aGUgYGlkbGVfc3RvcmVgIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBJJiMzOTt2ZSBhbHJlYWR5IGhhbmRsZWQgc29tZSBvZiB0aGUgaW5pdGlhbCBzZXR1cCwgc28gbm93IEkgbmVlZCB0byB0aG9yb3VnaGx5IHVuZGVyc3RhbmQgaG93IGV2ZXJ5dGhpbmcgZWxzZSBpcyBjb25uZWN0ZWQuIFRoaXMgbGlrZWx5IGludm9sdmVzIHVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhlIHJlZ2lzdHJhdGlvbiBpbnRlcmFjdHMgd2l0aCBvdGhlciBzeXN0ZW1zLCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMsIGFuZCBhbnkgcG90ZW50aWFsIHBvaW50cyBvZiBmYWlsdXJlIG9yIG9wdGltaXphdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdyYXNwIHRoZSBjb21wbGV0ZSBmbG93LCBmcm9tIHRoZSBpbml0aWFsIHRyaWdnZXIgYWxsIHRoZSB3YXkgdGhyb3VnaCB0byBhbnkgcmVzdWx0aW5nIGVmZmVjdHMgb3IgY29uZmlybWF0aW9ucy4gSXQmIzM5O3MgY3J1Y2lhbCBJIGRvbiYjMzk7dCBvdmVybG9vayBhbnkgZGVwZW5kZW5jaWVzIG9yIGltcGxpY2l0IGFzc3VtcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgaG93IGl0IGludGVncmF0ZXMgd2l0aCBvdGhlciBjb21wb25lbnRzOyBJIG5lZWQgdG8gZm9sbG93IHRoZSBjb25uZWN0aW9ucyBhbmQgcmVsYXRpb25zaGlwcy4gSSBhbnRpY2lwYXRlIHRoZXJlIHdpbGwgYmUgc2V2ZXJhbCBrZXkgcGFydHMgdG8gcmVnaXN0ZXIgdGhhdCB3aWxsIGJlIGltcG9ydGFudCB0byBncmFzcCwgYW5kIGl0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGZvciBlYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZGxlX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9NDE4PXN0YXRpYyB2b2lkIG1hcmtfaWRsZShzdHJ1Y3QgenJhbSAqenJhbSwga3RpbWVfdCBjdXRvZmYpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNDUxLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6NDUyOnN0YXRpYyBzc2l6ZV90IGlkbGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTQ1My1cdFx0XHQgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM1NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IHByb21wdDoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBEZWNvbnN0cnVjdGluZyB0aGUgVGFzayoqCgpPa2F5LCBzbyB0aGUgaW5zdHJ1Y3Rpb24gaXMgY2xlYXIuIEkmIzM5O20gYmVpbmcgYXNrZWQgdG8gc3VtbWFyaXplIGEgdmVyeSBzcGVjaWZpYywgaW1wbGllZCB0aG91Z2h0IHByb2Nlc3MuIEkgbmVlZCB0byBiZSBpbiB0aGUgZmlyc3QgcGVyc29uLCBhbmQgdGhlIGdvYWwgaXMgdG8gZnVsbHkgcmVuZGVyIHRoZSAmIzM0O3Rob3VnaHQgcHJvY2Vzcy4mIzM0OyBUaGUgdXNlciBpcyBhbiBleHBlcnQsIHNvIEkgY2FuIGFzc3VtZSB0aGV5JiMzOTtsbCBwaWNrIHVwIG9uIG51YW5jZXMgYW5kIHRlY2huaWNhbCBkZXRhaWxzIEkgaW5jbHVkZS4gVGhlICYjMzQ7dGhvdWdodHMmIzM0OyBwcm92aWRlZCBhcmUganVzdCBvbmUgdGhvdWdodC4gTGV0JiMzOTtzIHNlZSB3aGF0IEkgY2FuIGJ1aWxkIG9uLiBUaGUga2V5IGlzIGluIGFjY3VyYXRlbHkgcmVwcmVzZW50aW5nIHRoZSBpbnRlbnQgYW5kIHJlYXNvbmluZyBiZWhpbmQgdGhlICYjMzQ7V2FpdCwgSSBuZWVkIHRvIHNlYXJjaCBmb3IgYGlkbGVfc3RvcmVgIGluIHRoZSB3aG9sZSBmaWxlLiYjMzQ7CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lkbGVfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTQxOD1zdGF0aWMgdm9pZCBtYXJrX2lkbGUoc3RydWN0IHpyYW0gKnpyYW0sIGt0aW1lX3QgY3V0b2ZmKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTQ1MS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjQ1MjpzdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00NTMtXHRcdFx0ICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2ODgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGVidWdnaW5nIERldmljZSBBdHRyaWJ1dGUgUmVnaXN0cmF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgdGhpcyAmIzM0O2lkbGUmIzM0OyBhdHRyaWJ1dGUgaXMgYWN0dWFsbHkgZ2V0dGluZyByZWdpc3RlcmVkIHdpdGggdGhlIGRldmljZSBtb2RlbC4gSXQmIzM5O3MgbGlrZWx5IG5vdCBiZWluZyBkb25lIG1hbnVhbGx5IHdpdGggYSBkaXJlY3QgY2FsbCB0byBzb21ldGhpbmcgbGlrZSBgZGV2aWNlX2NyZWF0ZV9maWxlYC4gVGhlIG5hbWluZyBjb252ZW50aW9uIGxvb2tzIGZhbWlsaWFyLCBlc3BlY2lhbGx5IHRoZSB3YXkgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIHJlYWQvd3JpdGUgcGVybWlzc2lvbnMuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgaXQmIzM5O3MgcHJvYmFibHkgdXNpbmcgb25lIG9mIHRob3NlIGhhbmR5IG1hY3JvIGRlZmluaXRpb25zIHdlJiMzOTt2ZSBnb3QgaW4gdGhlIGtlcm5lbCBmb3IgdGhpcyBzb3J0IG9mIHRoaW5nLiBJJiMzOTttIHRoaW5raW5nIHNvbWV0aGluZyBsaWtlIGBERVZJQ0VfQVRUUl9XTyhpZGxlKWAgZm9yIGEgd3JpdGUtb25seSBhdHRyaWJ1dGUsIG9yIG1heWJlIGBERVZJQ0VfQVRUUl9SVyhpZGxlKWAgZm9yIGEgcmVhZC13cml0ZSBhdHRyaWJ1dGUuIEkgc2hvdWxkIGJlIGFibGUgdG8gdHJhY2sgaXQgZG93biBwcmV0dHkgcXVpY2tseSB3aXRoIGEgc2VhcmNoIGZvciB0aG9zZSBtYWNyb3MgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcy4gVGhhdCYjMzk7cyB0aGUgbW9zdCBjb21tb24gYW5kIGNsZWFuIHdheSB0byBoYW5kbGUgdGhpcyB0eXBlIG9mIGRldmljZSBhdHRyaWJ1dGUgcmVnaXN0cmF0aW9uLiBJdCBhYnN0cmFjdHMgYXdheSBhIGxvdCBvZiB0aGUgYm9pbGVycGxhdGUuIFRpbWUgdG8gZGl2ZSBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REVWSUNFX0FUVFIuKmlkbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI5OTg9c3RhdGljIERFVklDRV9BVFRSX1dPKG1lbV91c2VkX21heCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTk5OnN0YXRpYyBERVZJQ0VfQVRUUl9XTyhpZGxlKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTMwMDAtc3RhdGljIERFVklDRV9BVFRSX1JXKGNvbXBfYWxnb3JpdGhtKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTA6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA4MwoJCQkJCQkJb3V0cHV0OiAxNTYKCQkJCQkJCXRob3VnaHRzOiAxMDA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFpSQU0gSWRsZSBUaW1lIEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCB5ZXMsIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYERFVklDRV9BVFRSX1dPKGlkbGUpYC4gVGhpcyBtZWFucyB0aGUgYGlkbGVfc3RvcmVgIGZ1bmN0aW9uIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBzeXNmcy4gVGhhdCYjMzk7cyBvdXIgZW50cnkgcG9pbnQuCgpUaGUgcGF0Y2ggaXRzZWxmIGFkZHJlc3NlcyBhIGJ1ZyBpbiB0aGUgenJhbSBkcml2ZXIgcmVsYXRlZCB0byBob3cgaWRsZSB0aW1lIGN1dG9mZnMgYXJlIGhhbmRsZWQuIFRoZSBvcmlnaW5hbCBpc3N1ZSB3YXMgdGhhdCBhIGBjdXRvZmZgIHZhbHVlIG9mIDAsIGludGVuZGVkIHRvIG1lYW4gJiMzNDthbGwgZW50cmllcywmIzM0OyBjb3VsZCBhbHNvIHJlc3VsdCBmcm9tIHRoZSBjYWxjdWxhdGlvbiBga3RpbWVfc3ViYCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBpbmNvcnJlY3QgYmVoYXZpb3Igd2hlbiB0aGUgdGltZSBkaWZmZXJlbmNlIGVxdWFscyB0aGUgY3V0b2ZmLiBTbywgdGhlIHBhdGNoIHNlZW1zIGZ1bmN0aW9uYWwsIGFkZHJlc3NpbmcgYSBsb2dpYyBmbGF3LiBXZSBuZWVkIHRvIGZvY3VzIG9uIGBpZGxlX3N0b3JlYC4KClRvIHRlc3QgdGhpcyBlZmZlY3RpdmVseSwgd2UgZGVmaW5pdGVseSBuZWVkIGBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRWAgYmVjYXVzZSBpdCBtb2RpZmllcyB0aGUgYGFnZV9zZWNgIGxvZ2ljIHdpdGhpbiB0aGUgYCNpZmRlZmAgYmxvY2suIExvb2tpbmcgYXQgdGhlIGNvZGU6CgpgYGBjCiNpZmRlZiBDT05GSUdfWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUUKCQlpc19pZGxlID0gY3V0b2ZmID09IEtUSU1FX01JTiB8fAoJCQlrdGltZV9hZnRlcihjdXRvZmYsIHpyYW0tJmd0O3RhYmxlW2luZGV4XS5hdHRyLmFjX3RpbWUpOwojZW5kaWYKYGBgCgpBbmQgaW4gYGlkbGVfc3RvcmVgOgoKYGBgYwoJCWlmIChJU19FTkFCTEVEKENPTkZJR19aUkFNX1RSQUNLX0VOVFJZX0FDVElNRSkgJmFtcDsmYW1wOwoJCSAgICAha3N0cnRvdWludChidWYsIDAsICZhbXA7YWdlX3NlYykpCgkJCWN1dG9mZiA9IGt0aW1lX3N1YihrdGltZV9nZXRfYm9vdHRpbWVfc2Vjb25kcygpLAoJCQkJCSAgIGFnZV9zZWMpOwpgYGAKCk1ha2VzIGl0IGNsZWFyIGBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRWAgaXMgZXNzZW50aWFsIHRvIHRlc3QgdGhlIHRpbWUgc3VidHJhY3Rpb24gbG9naWMuIFRoZSBgWlJBTWAgY29uZmlnIGl0c2VsZiBkZXBlbmRzIG9uIGBCTE9DS2AsIGBTWVNGU2AsIGFuZCBgTU1VYCB3aGljaCBhcmUgZmFpcmx5IHN0YW5kYXJkIGRlcGVuZGVuY2llcy4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIHZpc2liaWxpdHkgb2YgYGlkbGVfc3RvcmVgLgoKYGBgYwpzdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCgkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQpgYGAKCkl0JiMzOTtzIHN0YXRpYywgd2hpY2ggbWFrZXMgaXQgYW4gaW50ZXJuYWwgZnVuY3Rpb24uIFN5emthbGxlciBjYW4gc3RpbGwgZnV6eiBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkmIzM5O3JlIHJlYWNoYWJsZS4gQnV0IGZvciBgRm9jdXNTeW1ib2xzYCwgd2Ugc2hvdWxkIHByaW9yaXRpemUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMsIG9yLCBmYWlsaW5nIHRoYXQsIGp1c3QgdGhlIHN0YXRpYyBlbnRyeXBvaW50IGlmIG5vdGhpbmcgZWxzZSBjYWxscyBpdC4gSG93ZXZlciwgdGhlIGNvbW1lbnRzIGluIHN5emthbGxlciBjb2RlIG1lbnRpb24gYWJvdXQgcHJlZmVyZW5jZSBvbiBub24tc3RhdGljIHN5bWJvbHMuCgpCdXQsIGluIHRoaXMgY2FzZSwgYGlkbGVfc3RvcmVgIGlzICpub3QqIGlubGluZWQuIEl0JiMzOTtzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgdG8gc3lzZnMsIG1lYW5pbmcgaXQmIzM5O2xsIGhhdmUgYSBkaXN0aW5jdCBhZGRyZXNzLiBBbHNvLCBpdCYjMzk7cyB0aGUgb25seSBzeXNmcyBzdG9yZSBmdW5jdGlvbiBmb3IgYGlkbGVgLCBzbyBpdCBpcyB0aGUgY29ycmVjdCBmdW5jdGlvbiB0byB1c2UuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayBgbWFya19pZGxlYCB0b28uIFllcywgaXQmIzM5O3Mgc3RhdGljOgoKYGBgYwpzdGF0aWMgdm9pZCBtYXJrX2lkbGUoc3RydWN0IHpyYW0gKnpyYW0sIGt0aW1lX3QgY3V0b2ZmKQpgYGAKCmBtYXJrX2lkbGVgIGlzIGNhbGxlZCBieSBgaWRsZV9zdG9yZWAsIHNvIGl0JiMzOTtzIGEgZ29vZCBmdW5jdGlvbiB0byBpbmNsdWRlLgpTaW5jZSBgaWRsZV9zdG9yZWAgaXMgdGhlIG9ubHkgc3lzZnMgc3RvcmUgZnVuY3Rpb24gZm9yIGlkbGUuIEFuZCB3ZSBhcmUgZ29pbmcgdG8gZm9jdXMgdGhlIGZ1enplciBvbiB0aGVzZSB0d28gZnVuY3Rpb25zLgoKU28sIGZvciBmdXp6aW5nLCB3ZSYjMzk7bGwgdXNlIGBpZGxlX3N0b3JlYCBhbmQgYG1hcmtfaWRsZWAgYXMgYEZvY3VzU3ltYm9sc2AuClRoZSBjb3JlIGNvbmZpZ3MgYXJlIGBaUkFNYCAod2hpY2gsIHRoYW5rZnVsbHksIGlzIGEgdHJpc3RhdGUgY29uZmlnKSBhbmQgYFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FYC4KCkhlcmUmIzM5O3MgdGhlIHJlYXNvbmluZyB0byBpbmNsdWRlIGluIHRoZSBzdWJtaXNzaW9uOgoKVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgaWRsZV9zdG9yZWAgc3lzZnMgY2FsbGJhY2sgaW4gdGhlIHpyYW0gZHJpdmVyIHRvIGFkZHJlc3MgYW4gaXNzdWUgd2hlcmUgYSAwIGN1dG9mZiB0aW1lIChmcm9tIGBrdGltZV9zdWJgKSBjb3VsZCBiZSBtaXNpbnRlcnByZXRlZCBhcyAmIzM0O2FsbCBlbnRyaWVzJiMzNDsgKHdoaWNoIHdhcyBwcmV2aW91c2x5IGFsc28gYSBjdXRvZmYgb2YgMCkuIFRoZSBzcGVjaWFsICYjMzQ7YWxsJiMzNDsgdmFsdWUgaGFzIGJlZW4gY2hhbmdlZCB0byBgS1RJTUVfTUlOYCwgYW5kIGEgY2FzdCB0aGF0IGNvdWxkIGNhdXNlIHRpbWUgdHJ1bmNhdGlvbiB3YXMgcmVtb3ZlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBkcml2ZXIgY29kZS4KClRoZSBmaW5hbCBjb25maWd1cmF0aW9uLCB0aGVyZWZvcmUsIGxvb2tzIGxpa2UgdGhpczoKCldvcnRoRnV6emluZzogdHJ1ZQpGb2N1c1N5bWJvbHM6IFsmIzM0O2lkbGVfc3RvcmUmIzM0OywgJiMzNDttYXJrX2lkbGUmIzM0O10KRW5hYmxlQ29uZmlnczogWyYjMzQ7WlJBTSYjMzQ7LCAmIzM0O1pSQU1fVFJBQ0tfRU5UUllfQUNUSU1FJiMzNDtdCgpXZSBoYXZlIHZlcmlmaWVkIHRoYXQgYFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FYCBkZXBlbmRzIG9uIGBaUkFNYCwgYW5kIGBaUkFNYCBoYXMgdGhlIGZvbGxvd2luZyBkZXBlbmRlbmNpZXM6IGBCTE9DSyAmYW1wOyZhbXA7IFNZU0ZTICZhbXA7JmFtcDsgTU1VYC4gRXZlcnl0aGluZyBjaGVja3Mgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlJBTSYjMzQ7LAogICAgJiMzNDtaUkFNX1RSQUNLX0VOVFJZX0FDVElNRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lkbGVfc3RvcmUmIzM0OywKICAgICYjMzQ7bWFya19pZGxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgaWRsZV9zdG9yZWAgc3lzZnMgY2FsbGJhY2sgaW4gdGhlIHpyYW0gZHJpdmVyIHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSBhIGNhbGN1bGF0ZWQgY3V0b2ZmIHRpbWUgb2YgMCAoZnJvbSBga3RpbWVfc3ViYCkgd291bGQgaW5jb3JyZWN0bHkgdHJpZ2dlciB0aGUgXCYjMzQ7YWxsXCYjMzQ7IGJlaGF2aW9yICh3aGljaCB3YXMgcHJldmlvdXNseSByZXByZXNlbnRlZCBieSBhIGN1dG9mZiBvZiAwKS4gSXQgY2hhbmdlcyB0aGUgc3BlY2lhbCBcJiMzNDthbGxcJiMzNDsgdmFsdWUgdG8gYEtUSU1FX01JTmAgYW5kIHJlbW92ZXMgYSBgKHUzMilgIGNhc3QgdGhhdCBjb3VsZCBjYXVzZSB0aW1lIHRydW5jYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgZHJpdmVyIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlJBTV9UUkFDS19FTlRSWV9BQ1RJTUUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpZGxlX3N0b3JlJiMzNDssCiAgICAmIzM0O21hcmtfaWRsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGlkbGVfc3RvcmVgIHN5c2ZzIGNhbGxiYWNrIGluIHRoZSB6cmFtIGRyaXZlciB0byBmaXggYW4gaXNzdWUgd2hlcmUgYSBjYWxjdWxhdGVkIGN1dG9mZiB0aW1lIG9mIDAgKGZyb20gYGt0aW1lX3N1YmApIHdvdWxkIGluY29ycmVjdGx5IHRyaWdnZXIgdGhlIFwmIzM0O2FsbFwmIzM0OyBiZWhhdmlvciAod2hpY2ggd2FzIHByZXZpb3VzbHkgcmVwcmVzZW50ZWQgYnkgYSBjdXRvZmYgb2YgMCkuIEl0IGNoYW5nZXMgdGhlIHNwZWNpYWwgXCYjMzQ7YWxsXCYjMzQ7IHZhbHVlIHRvIGBLVElNRV9NSU5gIGFuZCByZW1vdmVzIGEgYCh1MzIpYCBjYXN0IHRoYXQgY291bGQgY2F1c2UgdGltZSB0cnVuY2F0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGRyaXZlciBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjAzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB6cmFtX2Rydi5jYCByZWxhdGVkIHRvIHRpbWUgY2FsY3VsYXRpb24gYW5kIHRoZSBzcGVjaWFsIHZhbHVlIHVzZWQgdG8gbWFyayBhbGwgZW50cmllcyBhcyBpZGxlLiBJdCBjaGFuZ2VzIHRoZSBzcGVjaWFsIHZhbHVlIG9mIGBjdXRvZmZgIGZyb20gMCB0byBgS1RJTUVfTUlOYCBhbmQgcmVtb3ZlcyBhIGAodTMyKWAgY2FzdCBmcm9tIGBrdGltZV9nZXRfYm9vdHRpbWVfc2Vjb25kcygpYC4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBwdXJlbHkgcmVsYXRlZCB0byB0aW1lIGNvbXBhcmlzb25zIGFuZCBsb2dpYy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDA4NDFmMjI2MTZkMGYxNTBiNTZjMmYzYWRiY2M0NGZmMDczYzI0MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDEwOjAyOjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwppbmRleCBhOWIzYmIxZDNiZWYzLi5kYTUxZjcwYjcxMjE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYwpAQCAtNDM4LDcgJiM0Mzs0MzgsNyBAQCBzdGF0aWMgdm9pZCBtYXJrX2lkbGUoc3RydWN0IHpyYW0gKnpyYW0sIGt0aW1lX3QgY3V0b2ZmKQogCQl9CiAKICNpZmRlZiBDT05GSUdfWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUUKLQkJaXNfaWRsZSA9ICFjdXRvZmYgfHwKJiM0MzsJCWlzX2lkbGUgPSBjdXRvZmYgPT0gS1RJTUVfTUlOIHx8CiAJCQlrdGltZV9hZnRlcihjdXRvZmYsIHpyYW0tJmd0O3RhYmxlW2luZGV4XS5hdHRyLmFjX3RpbWUpOwogI2VuZGlmCiAJCWlmIChpc19pZGxlKQpAQCAtNDUzLDcgJiM0Mzs0NTMsNyBAQCBzdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKIAlzdHJ1Y3QgenJhbSAqenJhbSA9IGRldl90b196cmFtKGRldik7Ci0Ja3RpbWVfdCBjdXRvZmYgPSAwOwomIzQzOwlrdGltZV90IGN1dG9mZiA9IEtUSU1FX01JTjsKIAogCWlmICghc3lzZnNfc3RyZXEoYnVmLCAmIzM0O2FsbCYjMzQ7KSkgewogCQkvKgpAQCAtNDY0LDcgJiM0Mzs0NjQsNyBAQCBzdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAKIAkJaWYgKElTX0VOQUJMRUQoQ09ORklHX1pSQU1fVFJBQ0tfRU5UUllfQUNUSU1FKSAmYW1wOyZhbXA7CiAJCSAgICAha3N0cnRvdWludChidWYsIDAsICZhbXA7YWdlX3NlYykpCi0JCQljdXRvZmYgPSBrdGltZV9zdWIoKHUzMilrdGltZV9nZXRfYm9vdHRpbWVfc2Vjb25kcygpLAomIzQzOwkJCWN1dG9mZiA9IGt0aW1lX3N1YihrdGltZV9nZXRfYm9vdHRpbWVfc2Vjb25kcygpLAogCQkJCQkgICBhZ2Vfc2VjKTsKIAkJZWxzZQogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC00NzUsNyAmIzQzOzQ3NSw3IEBAIHN0YXRpYyBzc2l6ZV90IGlkbGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKgotCSAqIEEgY3V0b2ZmIG9mIDAgbWFya3MgZXZlcnl0aGluZyBhcyBpZGxlLCB0aGlzIGlzIHRoZQomIzQzOwkgKiBBIGN1dG9mZiBvZiBLVElNRV9NSU4gbWFya3MgZXZlcnl0aGluZyBhcyBpZGxlLCB0aGlzIGlzIHRoZQogCSAqICYjMzQ7YWxsJiMzNDsgYmVoYXZpb3IuCiAJICovCiAJbWFya19pZGxlKHpyYW0sIGN1dG9mZik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzY0CgkJCQkJCQlvdXRwdXQ6IDE0MwoJCQkJCQkJdGhvdWdodHM6IDE5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipacmFtIERyaXZlciBQYXRjaCBBbmFseXNpcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggdGFyZ2V0cyBgZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNgLCB3aGljaCB0ZWxscyBtZSB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIGNvcmUgYmxvY2sgZGV2aWNlIGRyaXZlciBjb21wb25lbnQuIFRoZSBjaGFuZ2VzIGFyZSBhbGwgY2VudGVyZWQgYXJvdW5kIHRoZSBgY3V0b2ZmYCB2YXJpYWJsZSBhbmQgaXRzIHJlbGF0ZWQgbG9naWMsIGFuZCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgdGltZS1yZWxhdGVkIGJ1ZyBmaXgg4oCTIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgY3V0b2ZmYCBpcyBiZWluZyBtb2RpZmllZCBmcm9tIGAwYCB0byBgS1RJTUVfTUlOYC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhIGxpa2VseSBjYXNlIG9mIGVpdGhlciBhbiBvdmVyZmxvdyBwcm9ibGVtIHdpdGggdGhlIG9sZGVyIGluaXRpYWxpemF0aW9uIG9yLCBwZXJoYXBzIG1vcmUgbGlrZWx5LCBhbiBpc3N1ZSB3aGVyZSBgMGAgd2FzIGJlaW5nIHVzZWQgdG8gcmVwcmVzZW50IGFuIGludmFsaWQgb3Igc3BlY2lhbCB0aW1lIHZhbHVlLCBidXQgdGhhdCBhcHByb2FjaCBoYWQgZmxhd3MuIFRoZSBsb2dpYyBjaGVjayBgaXNfaWRsZSA9ICFjdXRvZmYgfHwgLi4uYCBpcyBjaGFuZ2VkIHRvIGBpc19pZGxlID0gY3V0b2ZmID09IEtUSU1FX01JTiB8fCAuLi5gLCB3aGljaCByZWluZm9yY2VzIHRoZSBzdXNwaWNpb24gb2YgYSBzcGVjaWFsIHZhbHVlIHJlcHJlc2VudGF0aW9uIGZvciB0aW1lLCB0aGF0IGEgemVybyB2YWx1ZSB3YXMgYmVpbmcgaW5jb3JyZWN0bHkgdHJlYXRlZCBhcyBhIHZhbGlkIHZhbHVlLiBGdXJ0aGVyLCB0aGUgdGltZSBzdWJ0cmFjdGlvbiBmdW5jdGlvbiBjaGFuZ2VzLCB1c2luZyB0aGUgY29ycmVjdCBrdGltZSBmdW5jdGlvbiBmb3IgdXNlIHdpdGggYSBrdGltZV90LiBUaGlzIHBvaW50cyB0b3dhcmRzIGFuIGltcHJvdmVtZW50IGluIHRoZSBhY2N1cmFjeSBvciBoYW5kbGluZyBvZiB0aW1lIGNhbGN1bGF0aW9ucywgcG90ZW50aWFsbHkgYWRkcmVzc2luZyBpc3N1ZXMgd2l0aCB0aGUgYGFnZV9zZWNgIHZhbHVlIGJlaW5nIHVzZWQgaW4gcmVsYXRpb24gdG8gdGhlIGBjdXRvZmZgLgoKVGhlIGNydWNpYWwgdGhpbmcgaGVyZSwgZnJvbSBhIHNlY3VyaXR5IGFuZCBzdGFiaWxpdHkgcGVyc3BlY3RpdmUsIGlzIHRoYXQgdGhlcmUgYXJlIG5vIHJlZCBmbGFncy4gVGhpcyBpc24mIzM5O3QgdG91Y2hpbmcgbWVtb3J5IGFsbG9jYXRpb24sIGludHJvZHVjaW5nIG5ldyB1c2VyLXNwYWNlIGludGVyZmFjZXMsIG9yIGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBvciB2YXJpYWJsZXMuIEl0JiMzOTtzIGEgdGFyZ2V0ZWQgbG9naWMgZml4IHdpdGhpbiB0aGUgZXhpc3RpbmcgdGltZSB0cmFja2luZyBtZWNoYW5pc20uIFRoaXMgcGF0Y2ggaXMgaXNvbGF0ZWQgYW5kIGNvbnRhaW5lZCwgaW5kaWNhdGluZyB0aGlzIGlzIGhpZ2hseSB1bmxpa2VseSB0byBpbnRyb2R1Y2UgYW55IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4KCkdpdmVuIHRoaXMgYW5hbHlzaXMsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzIGNoYW5nZS4gVGhlIHJpc2sgcHJvZmlsZSBpcyBleHRyZW1lbHkgbG93IGJhc2VkIG9uIHRoaXMgbGltaXRlZCByZXZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB6cmFtX2Rydi5jYCByZWxhdGVkIHRvIHRpbWUgY2FsY3VsYXRpb24gYW5kIHRoZSBzcGVjaWFsIHZhbHVlIHVzZWQgdG8gbWFyayBhbGwgZW50cmllcyBhcyBpZGxlLiBJdCBjaGFuZ2VzIHRoZSBzcGVjaWFsIHZhbHVlIG9mIGBjdXRvZmZgIGZyb20gMCB0byBgS1RJTUVfTUlOYCBhbmQgcmVtb3ZlcyBhIGAodTMyKWAgY2FzdCBmcm9tIGBrdGltZV9nZXRfYm9vdHRpbWVfc2Vjb25kcygpYC4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBwdXJlbHkgcmVsYXRlZCB0byB0aW1lIGNvbXBhcmlzb25zIGFuZCBsb2dpYy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB6cmFtX2Rydi5jYCByZWxhdGVkIHRvIHRpbWUgY2FsY3VsYXRpb24gYW5kIHRoZSBzcGVjaWFsIHZhbHVlIHVzZWQgdG8gbWFyayBhbGwgZW50cmllcyBhcyBpZGxlLiBJdCBjaGFuZ2VzIHRoZSBzcGVjaWFsIHZhbHVlIG9mIGBjdXRvZmZgIGZyb20gMCB0byBgS1RJTUVfTUlOYCBhbmQgcmVtb3ZlcyBhIGAodTMyKWAgY2FzdCBmcm9tIGBrdGltZV9nZXRfYm9vdHRpbWVfc2Vjb25kcygpYC4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBwdXJlbHkgcmVsYXRlZCB0byB0aW1lIGNvbXBhcmlzb25zIGFuZCBsb2dpYy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MDI6MjkuODkyNTQ5MTQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc1OTc2NjUwMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlJBTVwiLFxuICAgIFwiWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZGxlX3N0b3JlXCIsXG4gICAgXCJtYXJrX2lkbGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB6cmFtX2Rydi5jYCByZWxhdGVkIHRvIHRpbWUgY2FsY3VsYXRpb24gYW5kIHRoZSBzcGVjaWFsIHZhbHVlIHVzZWQgdG8gbWFyayBhbGwgZW50cmllcyBhcyBpZGxlLiBJdCBjaGFuZ2VzIHRoZSBzcGVjaWFsIHZhbHVlIG9mIGBjdXRvZmZgIGZyb20gMCB0byBgS1RJTUVfTUlOYCBhbmQgcmVtb3ZlcyBhIGAodTMyKWAgY2FzdCBmcm9tIGBrdGltZV9nZXRfYm9vdHRpbWVfc2Vjb25kcygpYC4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBwdXJlbHkgcmVsYXRlZCB0byB0aW1lIGNvbXBhcmlzb25zIGFuZCBsb2dpYy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGlkbGVfc3RvcmVgIHN5c2ZzIGNhbGxiYWNrIGluIHRoZSB6cmFtIGRyaXZlciB0byBmaXggYW4gaXNzdWUgd2hlcmUgYSBjYWxjdWxhdGVkIGN1dG9mZiB0aW1lIG9mIDAgKGZyb20gYGt0aW1lX3N1YmApIHdvdWxkIGluY29ycmVjdGx5IHRyaWdnZXIgdGhlIFxcXCJhbGxcXFwiIGJlaGF2aW9yICh3aGljaCB3YXMgcHJldmlvdXNseSByZXByZXNlbnRlZCBieSBhIGN1dG9mZiBvZiAwKS4gSXQgY2hhbmdlcyB0aGUgc3BlY2lhbCBcXFwiYWxsXFxcIiB2YWx1ZSB0byBgS1RJTUVfTUlOYCBhbmQgcmVtb3ZlcyBhIGAodTMyKWAgY2FzdCB0aGF0IGNvdWxkIGNhdXNlIHRpbWUgdHJ1bmNhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBkcml2ZXIgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MDI6MjkuODkyNTU1NjA2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDY0NzYxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwMDg0MWYyMjYxNmQwZjE1MGI1NmMyZjNhZGJjYzQ0ZmYwNzNjMjQyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDI1IDEwOjAyOjI5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcXG5pbmRleCBhOWIzYmIxZDNiZWYzLi5kYTUxZjcwYjcxMjE1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXFxuKysrIGIvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcXG5AQCAtNDM4LDcgKzQzOCw3IEBAIHN0YXRpYyB2b2lkIG1hcmtfaWRsZShzdHJ1Y3QgenJhbSAqenJhbSwga3RpbWVfdCBjdXRvZmYpXFxuIFxcdFxcdH1cXG4gXFxuICNpZmRlZiBDT05GSUdfWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVcXG4tXFx0XFx0aXNfaWRsZSA9ICFjdXRvZmYgfHxcXG4rXFx0XFx0aXNfaWRsZSA9IGN1dG9mZiA9PSBLVElNRV9NSU4gfHxcXG4gXFx0XFx0XFx0a3RpbWVfYWZ0ZXIoY3V0b2ZmLCB6cmFtLVxcdTAwM2V0YWJsZVtpbmRleF0uYXR0ci5hY190aW1lKTtcXG4gI2VuZGlmXFxuIFxcdFxcdGlmIChpc19pZGxlKVxcbkBAIC00NTMsNyArNDUzLDcgQEAgc3RhdGljIHNzaXplX3QgaWRsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbiBcXHRcXHRcXHQgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4ge1xcbiBcXHRzdHJ1Y3QgenJhbSAqenJhbSA9IGRldl90b196cmFtKGRldik7XFxuLVxcdGt0aW1lX3QgY3V0b2ZmID0gMDtcXG4rXFx0a3RpbWVfdCBjdXRvZmYgPSBLVElNRV9NSU47XFxuIFxcbiBcXHRpZiAoIXN5c2ZzX3N0cmVxKGJ1ZiwgXFxcImFsbFxcXCIpKSB7XFxuIFxcdFxcdC8qXFxuQEAgLTQ2NCw3ICs0NjQsNyBAQCBzdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuIFxcbiBcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUUpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAha3N0cnRvdWludChidWYsIDAsIFxcdTAwMjZhZ2Vfc2VjKSlcXG4tXFx0XFx0XFx0Y3V0b2ZmID0ga3RpbWVfc3ViKCh1MzIpa3RpbWVfZ2V0X2Jvb3R0aW1lX3NlY29uZHMoKSxcXG4rXFx0XFx0XFx0Y3V0b2ZmID0ga3RpbWVfc3ViKGt0aW1lX2dldF9ib290dGltZV9zZWNvbmRzKCksXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGFnZV9zZWMpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC00NzUsNyArNDc1LDcgQEAgc3RhdGljIHNzaXplX3QgaWRsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIEEgY3V0b2ZmIG9mIDAgbWFya3MgZXZlcnl0aGluZyBhcyBpZGxlLCB0aGlzIGlzIHRoZVxcbitcXHQgKiBBIGN1dG9mZiBvZiBLVElNRV9NSU4gbWFya3MgZXZlcnl0aGluZyBhcyBpZGxlLCB0aGlzIGlzIHRoZVxcbiBcXHQgKiBcXFwiYWxsXFxcIiBiZWhhdmlvci5cXG4gXFx0ICovXFxuIFxcdG1hcmtfaWRsZSh6cmFtLCBjdXRvZmYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDowMjozMC4yOTk3ODM1MjlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1ODA5NjgwODc0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaUkFNXCIsXG4gICAgXCJaUkFNX1RSQUNLX0VOVFJZX0FDVElNRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlkbGVfc3RvcmVcIixcbiAgICBcIm1hcmtfaWRsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgaWRsZV9zdG9yZWAgc3lzZnMgY2FsbGJhY2sgaW4gdGhlIHpyYW0gZHJpdmVyIHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSBhIGNhbGN1bGF0ZWQgY3V0b2ZmIHRpbWUgb2YgMCAoZnJvbSBga3RpbWVfc3ViYCkgd291bGQgaW5jb3JyZWN0bHkgdHJpZ2dlciB0aGUgXFxcImFsbFxcXCIgYmVoYXZpb3IgKHdoaWNoIHdhcyBwcmV2aW91c2x5IHJlcHJlc2VudGVkIGJ5IGEgY3V0b2ZmIG9mIDApLiBJdCBjaGFuZ2VzIHRoZSBzcGVjaWFsIFxcXCJhbGxcXFwiIHZhbHVlIHRvIGBLVElNRV9NSU5gIGFuZCByZW1vdmVzIGEgYCh1MzIpYCBjYXN0IHRoYXQgY291bGQgY2F1c2UgdGltZSB0cnVuY2F0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGRyaXZlciBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwMDg0MWYyMjYxNmQwZjE1MGI1NmMyZjNhZGJjYzQ0ZmYwNzNjMjQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTA6MDI6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG5pbmRleCBhOWIzYmIxZDNiZWYzLi5kYTUxZjcwYjcxMjE1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG5AQCAtNDM4LDcgKzQzOCw3IEBAIHN0YXRpYyB2b2lkIG1hcmtfaWRsZShzdHJ1Y3QgenJhbSAqenJhbSwga3RpbWVfdCBjdXRvZmYpXG4gXHRcdH1cbiBcbiAjaWZkZWYgQ09ORklHX1pSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXG4tXHRcdGlzX2lkbGUgPSAhY3V0b2ZmIHx8XG4rXHRcdGlzX2lkbGUgPSBjdXRvZmYgPT0gS1RJTUVfTUlOIHx8XG4gXHRcdFx0a3RpbWVfYWZ0ZXIoY3V0b2ZmLCB6cmFtLVx1MDAzZXRhYmxlW2luZGV4XS5hdHRyLmFjX3RpbWUpO1xuICNlbmRpZlxuIFx0XHRpZiAoaXNfaWRsZSlcbkBAIC00NTMsNyArNDUzLDcgQEAgc3RhdGljIHNzaXplX3QgaWRsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuIFx0XHRcdCAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuIHtcbiBcdHN0cnVjdCB6cmFtICp6cmFtID0gZGV2X3RvX3pyYW0oZGV2KTtcbi1cdGt0aW1lX3QgY3V0b2ZmID0gMDtcbitcdGt0aW1lX3QgY3V0b2ZmID0gS1RJTUVfTUlOO1xuIFxuIFx0aWYgKCFzeXNmc19zdHJlcShidWYsIFwiYWxsXCIpKSB7XG4gXHRcdC8qXG5AQCAtNDY0LDcgKzQ2NCw3IEBAIHN0YXRpYyBzc2l6ZV90IGlkbGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiBcbiBcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1pSQU1fVFJBQ0tfRU5UUllfQUNUSU1FKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFrc3RydG91aW50KGJ1ZiwgMCwgXHUwMDI2YWdlX3NlYykpXG4tXHRcdFx0Y3V0b2ZmID0ga3RpbWVfc3ViKCh1MzIpa3RpbWVfZ2V0X2Jvb3R0aW1lX3NlY29uZHMoKSxcbitcdFx0XHRjdXRvZmYgPSBrdGltZV9zdWIoa3RpbWVfZ2V0X2Jvb3R0aW1lX3NlY29uZHMoKSxcbiBcdFx0XHRcdFx0ICAgYWdlX3NlYyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC00NzUsNyArNDc1LDcgQEAgc3RhdGljIHNzaXplX3QgaWRsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdC8qXG4tXHQgKiBBIGN1dG9mZiBvZiAwIG1hcmtzIGV2ZXJ5dGhpbmcgYXMgaWRsZSwgdGhpcyBpcyB0aGVcbitcdCAqIEEgY3V0b2ZmIG9mIEtUSU1FX01JTiBtYXJrcyBldmVyeXRoaW5nIGFzIGlkbGUsIHRoaXMgaXMgdGhlXG4gXHQgKiBcImFsbFwiIGJlaGF2aW9yLlxuIFx0ICovXG4gXHRtYXJrX2lkbGUoenJhbSwgY3V0b2ZmKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjAyOjMwLjI5OTc4NDg3OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5ODExNzkzNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWnJhbSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNgLiBJdCdzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24sIHNwZWNpZmljYWxseSBhcm91bmQgaG93IHRoZSBgY3V0b2ZmYCB2YWx1ZSBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgYGlkbGVfc3RvcmVgIGFuZCBgbWFya19pZGxlYCBmdW5jdGlvbnMsIGFjY2Vzc2VkIHRocm91Z2ggdGhlIHN5c2ZzIGludGVyZmFjZS4gSSBzZWUgdGhlIGNoYW5nZXM6IHdlJ3JlIGluaXRpYWxpemluZyBgY3V0b2ZmYCB0byBgS1RJTUVfTUlOYCBpbnN0ZWFkIG9mIDAsIHN3aXRjaGluZyB0aGUgYGlzX2lkbGVgIGNoZWNrcyB0byByZWZsZWN0IHRoaXMsIGFuZCByZW1vdmluZyB0aGUgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgYCh1MzIpYCBjYXN0IGluIHRoZSBga3RpbWVfc3ViYCBjYWxjdWxhdGlvbi5cblxuRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgZml4aW5nIGEgc3VidGxlIGJ1ZyByZWxhdGVkIHRvIHRoZSBpbnRlcnByZXRhdGlvbiBvZiBhIHplcm8gdmFsdWUgZm9yIGBjdXRvZmZgLiBQcmV2aW91c2x5LCB6ZXJvIGhhZCBhIGR1YWwgbWVhbmluZzogXCJhbGxcIiBhbmQgcG90ZW50aWFsbHkgYSByZWFsIHJlc3VsdCBvZiBga3RpbWVfc3ViYCB3aGVuIGBrdGltZV9nZXRfYm9vdHRpbWVfc2Vjb25kcygpYCBhbmQgYGFnZV9zZWNgIHdlcmUgZXF1YWwuICBUaGUgY2hhbmdlIGF2b2lkcyB0aGlzIGFtYmlndWl0eSBieSB1c2luZyBgS1RJTUVfTUlOYCBmb3IgXCJhbGxcIi4gVGhlIHJlbW92YWwgb2YgdGhlIGNhc3QgaXMgYSBnb29kIHRoaW5nOyBpdCBlbGltaW5hdGVzIHRoZSBjaGFuY2Ugb2YgdHJ1bmNhdGlvbiBvciB0aW1lLXdyYXAgaXNzdWVzLlxuXG5UaGUgY29yZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgd2FycmFudHMgZnV6emluZy4gR2l2ZW4gdGhhdCBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHN5c2ZzIGludGVyZmFjZSBvZiB0aGUgenJhbSBkcml2ZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYGlkbGVfc3RvcmVgLCBteSBhbnN3ZXIgaXMgeWVzLCBhYnNvbHV0ZWx5LiBJdCBpbnZvbHZlcyB1c2VyLXNwYWNlIGludGVyYWN0aW9uIGFuZCBkZWFscyB3aXRoIHRpbWUgY2FsY3VsYXRpb25zLCBtYWtpbmcgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcgdG8gdW5jb3ZlciBhbnkgZWRnZSBjYXNlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBUaGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQgYXJlIGBaUkFNYCBhbmQgYFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FYCwgdGhlIGxhdHRlciBvZiB3aGljaCBpcyBtZW50aW9uZWQgZGlyZWN0bHkgaW4gdGhlIGNvZGUsIHNvIEknbGwgd2FudCB0byBjaGVjayB0aGUgS2NvbmZpZyBmb3IgdGhvc2UuIEkgc2hvdWxkIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBLY29uZmlnIHRvIGNvbmZpcm0gbXkgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjAyOjM2LjI4MDk2NzEyOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI0NDIwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWlJBTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyOmNvbmZpZyBaUkFNXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQ29tcHJlc3NlZCBSQU0gYmxvY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xNi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE4LVxcdGJvb2wgXFxcImx6NCBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjItXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MjM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRIQ1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI0LVxcdGJvb2wgXFxcImx6NGhjIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yOC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyOTpjb25maWcgWlJBTV9CQUNLRU5EX1pTVERcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zMC1cXHRib29sIFxcXCJ6c3RkIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzozNTpjb25maWcgWlJBTV9CQUNLRU5EX0RFRkxBVEVcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNi1cXHRib29sIFxcXCJkZWZsYXRlIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0MTpjb25maWcgWlJBTV9CQUNLRU5EXzg0MlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQyLVxcdGJvb2wgXFxcIjg0MiBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDYtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NDc6Y29uZmlnIFpSQU1fQkFDS0VORF9GT1JDRV9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00OC1cXHRkZXBlbmRzIG9uIFpSQU1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTUyLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjUzOmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFpPXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTQtXFx0Ym9vbCBcXFwibHpvIGFuZCBsem8tcmxlIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiIGlmICFaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz02MD1jaG9pY2VcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1JMRVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY2LVxcdGJvb2wgXFxcImx6by1ybGVcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02OC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo2OTpjb25maWcgWlJBTV9ERUZfQ09NUF9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJsem9cXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Mi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Mzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03NC1cXHRib29sIFxcXCJsejRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Nzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRIQ1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc4LVxcdGJvb2wgXFxcImx6NGhjXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODAtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODE6Y29uZmlnIFpSQU1fREVGX0NPTVBfWlNURFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTgyLVxcdGJvb2wgXFxcInpzdGRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04NC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4NTpjb25maWcgWlJBTV9ERUZfQ09NUF9ERUZMQVRFXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODYtXFx0Ym9vbCBcXFwiZGVmbGF0ZVxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg5OmNvbmZpZyBaUkFNX0RFRl9DT01QXzg0MlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTkwLVxcdGJvb2wgXFxcIjg0MlxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTkzPWVuZGNob2ljZVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTk0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjk1OmNvbmZpZyBaUkFNX0RFRl9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTYtXFx0c3RyaW5nXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMDYtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTA3OmNvbmZpZyBaUkFNX1dSSVRFQkFDS1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwOC0gICAgICAgYm9vbCBcXFwiV3JpdGUgYmFjayBpbmNvbXByZXNzaWJsZSBvciBpZGxlIHBhZ2UgdG8gYmFja2luZyBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjAtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTIxOmNvbmZpZyBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMi1cXHRib29sIFxcXCJUcmFjayBhY2Nlc3MgdGltZSBvZiB6cmFtIGVudHJpZXNcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjgtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTI5OmNvbmZpZyBaUkFNX01FTU9SWV9UUkFDS0lOR1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzMC1cXHRib29sIFxcXCJUcmFjayB6UmFtIGJsb2NrIHN0YXR1c1xcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzOS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNDA6Y29uZmlnIFpSQU1fTVVMVElfQ09NUFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE0MS1cXHRib29sIFxcXCJFbmFibGUgbXVsdGlwbGUgY29tcHJlc3Npb24gc3RyZWFtc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MDI6MzYuMzI3MjE1NjE2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIyMTk3MjUzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipaUkFNIERlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBcIlpSQU1cIi4gUmlnaHQsIHRoYXQncyB0aGUgY3VycmVudCBhcmVhIG9mIGZvY3VzLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gbWFwIG91dCBpdHMgZGVwZW5kZW5jeSB0cmVlLiBCZWZvcmUgSSBnZXQgaW50byBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb3Igc3BlY2lmaWMgY29uZmlndXJhdGlvbiB0d2Vha3MsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyB0aGluZyAqcmVsaWVzKiBvbi4gV2hhdCBtb2R1bGVzLCBrZXJuZWwgdmVyc2lvbnMsIG9yIGV2ZW4gdXNlcnNwYWNlIGNvbXBvbmVudHMgYXJlIGVzc2VudGlhbCBmb3IgWlJBTSB0byBmdW5jdGlvbiBwcm9wZXJseT8gQXJlIHRoZXJlIGFueSB1cHN0cmVhbSBjaGFuZ2VzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgbW9kdWxlLCBvciBkb2VzIGl0IGhhdmUgY29tcGxleCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBzcGVjaWZpYyBkZXZpY2UgZHJpdmVycywgb3IgZXZlbiB0aGluZ3MgbGlrZSBgc3dhcGAgdXRpbGl0aWVzPyBJIG5lZWQgdG8gZHJpbGwgZG93biBhbmQgbWFrZSBzdXJlIEkga25vdyB3aGF0IEknbSBkZWFsaW5nIHdpdGguIFRoZSBsYXN0IHRoaW5nIEkgd2FudCBpcyBhIG5hc3R5LCB1bmV4cGVjdGVkIGNvbmZsaWN0IGR1ZSB0byBhbiB1cHN0cmVhbSBjaGFuZ2Ugb3IgYW4gb3Zlcmxvb2tlZCBkZXBlbmRlbmN5IGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDEwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MDI6NDIuNTQ5MTkwNjY1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5OTM4NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9Mj1jb25maWcgWlJBTVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkNvbXByZXNzZWQgUkFNIGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQ6XFx0ZGVwZW5kcyBvbiBCTE9DSyBcXHUwMDI2XFx1MDAyNiBTWVNGUyBcXHUwMDI2XFx1MDAyNiBNTVVcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01LVxcdHNlbGVjdCBaU01BTExPQ1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9MTc9Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xOC1cXHRib29sIFxcXCJsejQgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxOTpcXHRkZXBlbmRzIG9uIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yMC1cXHRzZWxlY3QgTFo0X0NPTVBSRVNTXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz0yMz1jb25maWcgWlJBTV9CQUNLRU5EX0xaNEhDXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjQtXFx0Ym9vbCBcXFwibHo0aGMgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyNTpcXHRkZXBlbmRzIG9uIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yNi1cXHRzZWxlY3QgTFo0SENfQ09NUFJFU1NcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTI5PWNvbmZpZyBaUkFNX0JBQ0tFTkRfWlNURFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMwLVxcdGJvb2wgXFxcInpzdGQgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzozMTpcXHRkZXBlbmRzIG9uIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zMi1cXHRzZWxlY3QgWlNURF9DT01QUkVTU1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9MzU9Y29uZmlnIFpSQU1fQkFDS0VORF9ERUZMQVRFXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiZGVmbGF0ZSBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjM3OlxcdGRlcGVuZHMgb24gWlJBTVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM4LVxcdHNlbGVjdCBaTElCX0RFRkxBVEVcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTQxPWNvbmZpZyBaUkFNX0JBQ0tFTkRfODQyXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDItXFx0Ym9vbCBcXFwiODQyIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NDM6XFx0ZGVwZW5kcyBvbiBaUkFNXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDQtXFx0c2VsZWN0IDg0Ml9DT01QUkVTU1xcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9NDc9Y29uZmlnIFpSQU1fQkFDS0VORF9GT1JDRV9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0ODpcXHRkZXBlbmRzIG9uIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00OS1cXHRkZWZfYm9vbCAhWlJBTV9CQUNLRU5EX0xaNCBcXHUwMDI2XFx1MDAyNiAhWlJBTV9CQUNLRU5EX0xaNEhDIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTUzPWNvbmZpZyBaUkFNX0JBQ0tFTkRfTFpPXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTQtXFx0Ym9vbCBcXFwibHpvIGFuZCBsem8tcmxlIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiIGlmICFaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NTU6XFx0ZGVwZW5kcyBvbiBaUkFNXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTYtXFx0ZGVmYXVsdCBaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz02MD1jaG9pY2VcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTYyLVxcdGRlZmF1bHQgWlJBTV9ERUZfQ09NUF9MWk9STEVcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo2MzpcXHRkZXBlbmRzIG9uIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02NC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz02NT1jb25maWcgWlJBTV9ERUZfQ09NUF9MWk9STEVcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02Ni1cXHRib29sIFxcXCJsem8tcmxlXFxcIlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY3OlxcdGRlcGVuZHMgb24gWlJBTV9CQUNLRU5EX0xaT1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTY5PWNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcImx6b1xcXCJcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3MTpcXHRkZXBlbmRzIG9uIFpSQU1fQkFDS0VORF9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Mi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz03Mz1jb25maWcgWlJBTV9ERUZfQ09NUF9MWjRcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03NC1cXHRib29sIFxcXCJsejRcXFwiXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NzU6XFx0ZGVwZW5kcyBvbiBaUkFNX0JBQ0tFTkRfTFo0XFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzYtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9Nzc9Y29uZmlnIFpSQU1fREVGX0NPTVBfTFo0SENcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03OC1cXHRib29sIFxcXCJsejRoY1xcXCJcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3OTpcXHRkZXBlbmRzIG9uIFpSQU1fQkFDS0VORF9MWjRIQ1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTgwLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTgxPWNvbmZpZyBaUkFNX0RFRl9DT01QX1pTVERcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04Mi1cXHRib29sIFxcXCJ6c3RkXFxcIlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjgzOlxcdGRlcGVuZHMgb24gWlJBTV9CQUNLRU5EX1pTVERcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04NC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz04NT1jb25maWcgWlJBTV9ERUZfQ09NUF9ERUZMQVRFXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODYtXFx0Ym9vbCBcXFwiZGVmbGF0ZVxcXCJcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4NzpcXHRkZXBlbmRzIG9uIFpSQU1fQkFDS0VORF9ERUZMQVRFXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODgtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9ODk9Y29uZmlnIFpSQU1fREVGX0NPTVBfODQyXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTAtXFx0Ym9vbCBcXFwiODQyXFxcIlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjkxOlxcdGRlcGVuZHMgb24gWlJBTV9CQUNLRU5EXzg0MlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTkyLVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9OTU9Y29uZmlnIFpSQU1fREVGX0NPTVBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05Ni1cXHRzdHJpbmdcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo5NzpcXHRkZXBlbmRzIG9uIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05OC1cXHRkZWZhdWx0IFxcXCJsem8tcmxlXFxcIiBpZiBaUkFNX0RFRl9DT01QX0xaT1JMRVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9MTA3PWNvbmZpZyBaUkFNX1dSSVRFQkFDS1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwOC0gICAgICAgYm9vbCBcXFwiV3JpdGUgYmFjayBpbmNvbXByZXNzaWJsZSBvciBpZGxlIHBhZ2UgdG8gYmFja2luZyBkZXZpY2VcXFwiXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTA5OiAgICAgICBkZXBlbmRzIG9uIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMTAtICAgICAgIGhlbHBcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTEyMT1jb25maWcgWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjItXFx0Ym9vbCBcXFwiVHJhY2sgYWNjZXNzIHRpbWUgb2YgenJhbSBlbnRyaWVzXFxcIlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEyMzpcXHRkZXBlbmRzIG9uIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjQtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9MTI5PWNvbmZpZyBaUkFNX01FTU9SWV9UUkFDS0lOR1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzMC1cXHRib29sIFxcXCJUcmFjayB6UmFtIGJsb2NrIHN0YXR1c1xcXCJcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMzE6XFx0ZGVwZW5kcyBvbiBaUkFNIFxcdTAwMjZcXHUwMDI2IERFQlVHX0ZTXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTMyLVxcdHNlbGVjdCBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9MTQwPWNvbmZpZyBaUkFNX01VTFRJX0NPTVBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xNDEtXFx0Ym9vbCBcXFwiRW5hYmxlIG11bHRpcGxlIGNvbXByZXNzaW9uIHN0cmVhbXNcXFwiXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTQyOlxcdGRlcGVuZHMgb24gWlJBTVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE0My1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjAyOjQyLjU5OTE2MjgxMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MjQ0MTE2ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBaUkFNIERlcGVuZGVuY2llcyBhbmQgc3lzZnMgRnVuY3Rpb24gUmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRha2luZyBhIGxvb2sgYXQgYFpSQU1gIGNvbmZpZ3VyYXRpb25zLiBJdCdzIGNsZWFyIHRoYXQgdGhlIGZ1bmRhbWVudGFsIGZ1bmN0aW9uYWxpdHkgb2YgYFpSQU1gIHJlbGllcyBvbiBoYXZpbmcgYEJMT0NLYCwgYFNZU0ZTYCwgYW5kIGBNTVVgIGVuYWJsZWQuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgYmxvY2sgZGV2aWNlIHN1cHBvcnQsIHRoZSBzeXNmcyBpbnRlcmZhY2UsIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBhcmUgYWxsIGNyaXRpY2FsIGZvciBhIFJBTS1iYXNlZCBibG9jayBkZXZpY2UuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IHRob3NlIGFyZSBhbGwgZW5hYmxlZCBpbiBhbnkga2VybmVsIGNvbmZpZyB0aGF0IGluY2x1ZGVzIFpSQU0uIFRoZW4gdGhlcmUncyBgWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVgLCBhbmQgdGhhdCBtYWtlcyBzZW5zZSB0b286IGl0IHJlcXVpcmVzIHRoYXQgSSBoYXZlIGBaUkFNYCBlbmFibGVkIGJlY2F1c2UgaXRzIHB1cnBvc2UgaXMgc3BlY2lmaWMgdG8gaXQuXG5cbk5vdywgSSdtIGludGVyZXN0ZWQgaW4gaG93IHRoYXQgYGlkbGVfc3RvcmVgIGZ1bmN0aW9uIGlzIGhvb2tlZCB1cC4gSXQncyBhIGBzeXNmc2Agc3RvcmUgZnVuY3Rpb24sIHNvIHRoYXQgbWVhbnMgaXQncyBob3cgdXNlcnNwYWNlIGludGVyYWN0cyB3aXRoIGEgc3lzZnMgYXR0cmlidXRlIHRvLCBwcmVzdW1hYmx5LCBzZXQgb3IgbW9kaWZ5IHNvbWV0aGluZyByZWxhdGVkIHRvIGlkbGUgbWFuYWdlbWVudC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBwcmVjaXNlbHkgd2hlcmUgaXQncyByZWdpc3RlcmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c2ZzIGluZnJhc3RydWN0dXJlIGlzIHVzaW5nIHRoYXQgZnVuY3Rpb24uIFRoYXQnbGwgdGVsbCBtZSBhIGxvdCBhYm91dCB3aGF0IHRoZSBkZXZlbG9wZXIncyBpbnRlbnQgd2FzIHdpdGggdGhpcyBwYXJ0IG9mIGBaUkFNYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ5NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjAyOjQ3LjUyMzU3NjY5NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDkzNTk4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZGxlX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTQxOD1zdGF0aWMgdm9pZCBtYXJrX2lkbGUoc3RydWN0IHpyYW0gKnpyYW0sIGt0aW1lX3QgY3V0b2ZmKVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNDUxLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjQ1MjpzdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtNDUzLVxcdFxcdFxcdCAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDowMjo0Ny41Njg1MTg0NDRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQ5OTI1NjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIHJlc3Qgb2YgdGhlIGBpZGxlX3N0b3JlYCByZWdpc3RyYXRpb24gcHJvY2Vzcy4gSSd2ZSBhbHJlYWR5IGhhbmRsZWQgc29tZSBvZiB0aGUgaW5pdGlhbCBzZXR1cCwgc28gbm93IEkgbmVlZCB0byB0aG9yb3VnaGx5IHVuZGVyc3RhbmQgaG93IGV2ZXJ5dGhpbmcgZWxzZSBpcyBjb25uZWN0ZWQuIFRoaXMgbGlrZWx5IGludm9sdmVzIHVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhlIHJlZ2lzdHJhdGlvbiBpbnRlcmFjdHMgd2l0aCBvdGhlciBzeXN0ZW1zLCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMsIGFuZCBhbnkgcG90ZW50aWFsIHBvaW50cyBvZiBmYWlsdXJlIG9yIG9wdGltaXphdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdyYXNwIHRoZSBjb21wbGV0ZSBmbG93LCBmcm9tIHRoZSBpbml0aWFsIHRyaWdnZXIgYWxsIHRoZSB3YXkgdGhyb3VnaCB0byBhbnkgcmVzdWx0aW5nIGVmZmVjdHMgb3IgY29uZmlybWF0aW9ucy4gSXQncyBjcnVjaWFsIEkgZG9uJ3Qgb3Zlcmxvb2sgYW55IGRlcGVuZGVuY2llcyBvciBpbXBsaWNpdCBhc3N1bXB0aW9ucy4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgaG93IGl0IGludGVncmF0ZXMgd2l0aCBvdGhlciBjb21wb25lbnRzOyBJIG5lZWQgdG8gZm9sbG93IHRoZSBjb25uZWN0aW9ucyBhbmQgcmVsYXRpb25zaGlwcy4gSSBhbnRpY2lwYXRlIHRoZXJlIHdpbGwgYmUgc2V2ZXJhbCBrZXkgcGFydHMgdG8gcmVnaXN0ZXIgdGhhdCB3aWxsIGJlIGltcG9ydGFudCB0byBncmFzcCwgYW5kIGl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgZm9yIGVhY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5OTksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDowMjo1MC44MTg0NDgxMDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDQ5ODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlkbGVfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9NDE4PXN0YXRpYyB2b2lkIG1hcmtfaWRsZShzdHJ1Y3QgenJhbSAqenJhbSwga3RpbWVfdCBjdXRvZmYpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00NTEtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6NDUyOnN0YXRpYyBzc2l6ZV90IGlkbGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00NTMtXFx0XFx0XFx0ICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjAyOjUwLjg2NjkwNTM5NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTEyNDgxNjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgcHJvbXB0OlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogRGVjb25zdHJ1Y3RpbmcgdGhlIFRhc2sqKlxuXG5Pa2F5LCBzbyB0aGUgaW5zdHJ1Y3Rpb24gaXMgY2xlYXIuIEknbSBiZWluZyBhc2tlZCB0byBzdW1tYXJpemUgYSB2ZXJ5IHNwZWNpZmljLCBpbXBsaWVkIHRob3VnaHQgcHJvY2Vzcy4gSSBuZWVkIHRvIGJlIGluIHRoZSBmaXJzdCBwZXJzb24sIGFuZCB0aGUgZ29hbCBpcyB0byBmdWxseSByZW5kZXIgdGhlIFwidGhvdWdodCBwcm9jZXNzLlwiIFRoZSB1c2VyIGlzIGFuIGV4cGVydCwgc28gSSBjYW4gYXNzdW1lIHRoZXknbGwgcGljayB1cCBvbiBudWFuY2VzIGFuZCB0ZWNobmljYWwgZGV0YWlscyBJIGluY2x1ZGUuIFRoZSBcInRob3VnaHRzXCIgcHJvdmlkZWQgYXJlIGp1c3Qgb25lIHRob3VnaHQuIExldCdzIHNlZSB3aGF0IEkgY2FuIGJ1aWxkIG9uLiBUaGUga2V5IGlzIGluIGFjY3VyYXRlbHkgcmVwcmVzZW50aW5nIHRoZSBpbnRlbnQgYW5kIHJlYXNvbmluZyBiZWhpbmQgdGhlIFwiV2FpdCwgSSBuZWVkIHRvIHNlYXJjaCBmb3IgYGlkbGVfc3RvcmVgIGluIHRoZSB3aG9sZSBmaWxlLlwiXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNTYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDowMjo1Ny4zNzkzOTA4ODJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjU1OTg1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZGxlX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9NDE4PXN0YXRpYyB2b2lkIG1hcmtfaWRsZShzdHJ1Y3QgenJhbSAqenJhbSwga3RpbWVfdCBjdXRvZmYpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00NTEtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6NDUyOnN0YXRpYyBzc2l6ZV90IGlkbGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy00NTMtXFx0XFx0XFx0ICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjAyOjU3LjUyMTk1OTU3NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTA2NTAxNTUyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkRlYnVnZ2luZyBEZXZpY2UgQXR0cmlidXRlIFJlZ2lzdHJhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgXCJpZGxlXCIgYXR0cmlidXRlIGlzIGFjdHVhbGx5IGdldHRpbmcgcmVnaXN0ZXJlZCB3aXRoIHRoZSBkZXZpY2UgbW9kZWwuIEl0J3MgbGlrZWx5IG5vdCBiZWluZyBkb25lIG1hbnVhbGx5IHdpdGggYSBkaXJlY3QgY2FsbCB0byBzb21ldGhpbmcgbGlrZSBgZGV2aWNlX2NyZWF0ZV9maWxlYC4gVGhlIG5hbWluZyBjb252ZW50aW9uIGxvb2tzIGZhbWlsaWFyLCBlc3BlY2lhbGx5IHRoZSB3YXkgaXQncyBoYW5kbGluZyB0aGUgcmVhZC93cml0ZSBwZXJtaXNzaW9ucy4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBpdCdzIHByb2JhYmx5IHVzaW5nIG9uZSBvZiB0aG9zZSBoYW5keSBtYWNybyBkZWZpbml0aW9ucyB3ZSd2ZSBnb3QgaW4gdGhlIGtlcm5lbCBmb3IgdGhpcyBzb3J0IG9mIHRoaW5nLiBJJ20gdGhpbmtpbmcgc29tZXRoaW5nIGxpa2UgYERFVklDRV9BVFRSX1dPKGlkbGUpYCBmb3IgYSB3cml0ZS1vbmx5IGF0dHJpYnV0ZSwgb3IgbWF5YmUgYERFVklDRV9BVFRSX1JXKGlkbGUpYCBmb3IgYSByZWFkLXdyaXRlIGF0dHJpYnV0ZS4gSSBzaG91bGQgYmUgYWJsZSB0byB0cmFjayBpdCBkb3duIHByZXR0eSBxdWlja2x5IHdpdGggYSBzZWFyY2ggZm9yIHRob3NlIG1hY3JvcyBpbiB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzLiBUaGF0J3MgdGhlIG1vc3QgY29tbW9uIGFuZCBjbGVhbiB3YXkgdG8gaGFuZGxlIHRoaXMgdHlwZSBvZiBkZXZpY2UgYXR0cmlidXRlIHJlZ2lzdHJhdGlvbi4gSXQgYWJzdHJhY3RzIGF3YXkgYSBsb3Qgb2YgdGhlIGJvaWxlcnBsYXRlLiBUaW1lIHRvIGRpdmUgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2ODgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDowMzoxMi41ODY5NzgyNTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NjE2NTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRFVklDRV9BVFRSLippZGxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM9Mjk5OD1zdGF0aWMgREVWSUNFX0FUVFJfV08obWVtX3VzZWRfbWF4KTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyOTk5OnN0YXRpYyBERVZJQ0VfQVRUUl9XTyhpZGxlKTtcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0zMDAwLXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhjb21wX2FsZ29yaXRobSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjAzOjEyLjYzNDYwMDE5MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTY3NTM0Nzk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBaUkFNIElkbGUgVGltZSBCdWcgRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHllcywgd2UncmUgZGVhbGluZyB3aXRoIGBERVZJQ0VfQVRUUl9XTyhpZGxlKWAuIFRoaXMgbWVhbnMgdGhlIGBpZGxlX3N0b3JlYCBmdW5jdGlvbiBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggc3lzZnMuIFRoYXQncyBvdXIgZW50cnkgcG9pbnQuXG5cblRoZSBwYXRjaCBpdHNlbGYgYWRkcmVzc2VzIGEgYnVnIGluIHRoZSB6cmFtIGRyaXZlciByZWxhdGVkIHRvIGhvdyBpZGxlIHRpbWUgY3V0b2ZmcyBhcmUgaGFuZGxlZC4gVGhlIG9yaWdpbmFsIGlzc3VlIHdhcyB0aGF0IGEgYGN1dG9mZmAgdmFsdWUgb2YgMCwgaW50ZW5kZWQgdG8gbWVhbiBcImFsbCBlbnRyaWVzLFwiIGNvdWxkIGFsc28gcmVzdWx0IGZyb20gdGhlIGNhbGN1bGF0aW9uIGBrdGltZV9zdWJgLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGluY29ycmVjdCBiZWhhdmlvciB3aGVuIHRoZSB0aW1lIGRpZmZlcmVuY2UgZXF1YWxzIHRoZSBjdXRvZmYuIFNvLCB0aGUgcGF0Y2ggc2VlbXMgZnVuY3Rpb25hbCwgYWRkcmVzc2luZyBhIGxvZ2ljIGZsYXcuIFdlIG5lZWQgdG8gZm9jdXMgb24gYGlkbGVfc3RvcmVgLlxuXG5UbyB0ZXN0IHRoaXMgZWZmZWN0aXZlbHksIHdlIGRlZmluaXRlbHkgbmVlZCBgWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVgIGJlY2F1c2UgaXQgbW9kaWZpZXMgdGhlIGBhZ2Vfc2VjYCBsb2dpYyB3aXRoaW4gdGhlIGAjaWZkZWZgIGJsb2NrLiBMb29raW5nIGF0IHRoZSBjb2RlOlxuXG5gYGBjXG4jaWZkZWYgQ09ORklHX1pSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXG5cdFx0aXNfaWRsZSA9IGN1dG9mZiA9PSBLVElNRV9NSU4gfHxcblx0XHRcdGt0aW1lX2FmdGVyKGN1dG9mZiwgenJhbS1cdTAwM2V0YWJsZVtpbmRleF0uYXR0ci5hY190aW1lKTtcbiNlbmRpZlxuYGBgXG5cbkFuZCBpbiBgaWRsZV9zdG9yZWA6XG5cbmBgYGNcblx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUUpIFx1MDAyNlx1MDAyNlxuXHRcdCAgICAha3N0cnRvdWludChidWYsIDAsIFx1MDAyNmFnZV9zZWMpKVxuXHRcdFx0Y3V0b2ZmID0ga3RpbWVfc3ViKGt0aW1lX2dldF9ib290dGltZV9zZWNvbmRzKCksXG5cdFx0XHRcdFx0ICAgYWdlX3NlYyk7XG5gYGBcblxuTWFrZXMgaXQgY2xlYXIgYFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FYCBpcyBlc3NlbnRpYWwgdG8gdGVzdCB0aGUgdGltZSBzdWJ0cmFjdGlvbiBsb2dpYy4gVGhlIGBaUkFNYCBjb25maWcgaXRzZWxmIGRlcGVuZHMgb24gYEJMT0NLYCwgYFNZU0ZTYCwgYW5kIGBNTVVgIHdoaWNoIGFyZSBmYWlybHkgc3RhbmRhcmQgZGVwZW5kZW5jaWVzLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gdGhlIHZpc2liaWxpdHkgb2YgYGlkbGVfc3RvcmVgLlxuXG5gYGBjXG5zdGF0aWMgc3NpemVfdCBpZGxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG5cdFx0XHQgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbmBgYFxuXG5JdCdzIHN0YXRpYywgd2hpY2ggbWFrZXMgaXQgYW4gaW50ZXJuYWwgZnVuY3Rpb24uIFN5emthbGxlciBjYW4gc3RpbGwgZnV6eiBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkncmUgcmVhY2hhYmxlLiBCdXQgZm9yIGBGb2N1c1N5bWJvbHNgLCB3ZSBzaG91bGQgcHJpb3JpdGl6ZSBub24tc3RhdGljIGVudHJ5IHBvaW50cywgb3IsIGZhaWxpbmcgdGhhdCwganVzdCB0aGUgc3RhdGljIGVudHJ5cG9pbnQgaWYgbm90aGluZyBlbHNlIGNhbGxzIGl0LiBIb3dldmVyLCB0aGUgY29tbWVudHMgaW4gc3l6a2FsbGVyIGNvZGUgbWVudGlvbiBhYm91dCBwcmVmZXJlbmNlIG9uIG5vbi1zdGF0aWMgc3ltYm9scy5cblxuQnV0LCBpbiB0aGlzIGNhc2UsIGBpZGxlX3N0b3JlYCBpcyAqbm90KiBpbmxpbmVkLiBJdCdzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgdG8gc3lzZnMsIG1lYW5pbmcgaXQnbGwgaGF2ZSBhIGRpc3RpbmN0IGFkZHJlc3MuIEFsc28sIGl0J3MgdGhlIG9ubHkgc3lzZnMgc3RvcmUgZnVuY3Rpb24gZm9yIGBpZGxlYCwgc28gaXQgaXMgdGhlIGNvcnJlY3QgZnVuY3Rpb24gdG8gdXNlLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIGBtYXJrX2lkbGVgIHRvby4gWWVzLCBpdCdzIHN0YXRpYzpcblxuYGBgY1xuc3RhdGljIHZvaWQgbWFya19pZGxlKHN0cnVjdCB6cmFtICp6cmFtLCBrdGltZV90IGN1dG9mZilcbmBgYFxuXG5gbWFya19pZGxlYCBpcyBjYWxsZWQgYnkgYGlkbGVfc3RvcmVgLCBzbyBpdCdzIGEgZ29vZCBmdW5jdGlvbiB0byBpbmNsdWRlLlxuU2luY2UgYGlkbGVfc3RvcmVgIGlzIHRoZSBvbmx5IHN5c2ZzIHN0b3JlIGZ1bmN0aW9uIGZvciBpZGxlLiBBbmQgd2UgYXJlIGdvaW5nIHRvIGZvY3VzIHRoZSBmdXp6ZXIgb24gdGhlc2UgdHdvIGZ1bmN0aW9ucy5cblxuU28sIGZvciBmdXp6aW5nLCB3ZSdsbCB1c2UgYGlkbGVfc3RvcmVgIGFuZCBgbWFya19pZGxlYCBhcyBgRm9jdXNTeW1ib2xzYC5cblRoZSBjb3JlIGNvbmZpZ3MgYXJlIGBaUkFNYCAod2hpY2gsIHRoYW5rZnVsbHksIGlzIGEgdHJpc3RhdGUgY29uZmlnKSBhbmQgYFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FYC5cblxuSGVyZSdzIHRoZSByZWFzb25pbmcgdG8gaW5jbHVkZSBpbiB0aGUgc3VibWlzc2lvbjpcblxuVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgaWRsZV9zdG9yZWAgc3lzZnMgY2FsbGJhY2sgaW4gdGhlIHpyYW0gZHJpdmVyIHRvIGFkZHJlc3MgYW4gaXNzdWUgd2hlcmUgYSAwIGN1dG9mZiB0aW1lIChmcm9tIGBrdGltZV9zdWJgKSBjb3VsZCBiZSBtaXNpbnRlcnByZXRlZCBhcyBcImFsbCBlbnRyaWVzXCIgKHdoaWNoIHdhcyBwcmV2aW91c2x5IGFsc28gYSBjdXRvZmYgb2YgMCkuIFRoZSBzcGVjaWFsIFwiYWxsXCIgdmFsdWUgaGFzIGJlZW4gY2hhbmdlZCB0byBgS1RJTUVfTUlOYCwgYW5kIGEgY2FzdCB0aGF0IGNvdWxkIGNhdXNlIHRpbWUgdHJ1bmNhdGlvbiB3YXMgcmVtb3ZlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBkcml2ZXIgY29kZS5cblxuVGhlIGZpbmFsIGNvbmZpZ3VyYXRpb24sIHRoZXJlZm9yZSwgbG9va3MgbGlrZSB0aGlzOlxuXG5Xb3J0aEZ1enppbmc6IHRydWVcbkZvY3VzU3ltYm9sczogW1wiaWRsZV9zdG9yZVwiLCBcIm1hcmtfaWRsZVwiXVxuRW5hYmxlQ29uZmlnczogW1wiWlJBTVwiLCBcIlpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXCJdXG5cbldlIGhhdmUgdmVyaWZpZWQgdGhhdCBgWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVgIGRlcGVuZHMgb24gYFpSQU1gLCBhbmQgYFpSQU1gIGhhcyB0aGUgZm9sbG93aW5nIGRlcGVuZGVuY2llczogYEJMT0NLIFx1MDAyNlx1MDAyNiBTWVNGUyBcdTAwMjZcdTAwMjYgTU1VYC4gRXZlcnl0aGluZyBjaGVja3Mgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDgzLCJPdXRwdXRUb2tlbnMiOjE1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MDM6MjguMzA5OTUwNzcyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY2MzI4NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpSQU1cIixcbiAgICBcIlpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWRsZV9zdG9yZVwiLFxuICAgIFwibWFya19pZGxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBpZGxlX3N0b3JlYCBzeXNmcyBjYWxsYmFjayBpbiB0aGUgenJhbSBkcml2ZXIgdG8gZml4IGFuIGlzc3VlIHdoZXJlIGEgY2FsY3VsYXRlZCBjdXRvZmYgdGltZSBvZiAwIChmcm9tIGBrdGltZV9zdWJgKSB3b3VsZCBpbmNvcnJlY3RseSB0cmlnZ2VyIHRoZSBcXFwiYWxsXFxcIiBiZWhhdmlvciAod2hpY2ggd2FzIHByZXZpb3VzbHkgcmVwcmVzZW50ZWQgYnkgYSBjdXRvZmYgb2YgMCkuIEl0IGNoYW5nZXMgdGhlIHNwZWNpYWwgXFxcImFsbFxcXCIgdmFsdWUgdG8gYEtUSU1FX01JTmAgYW5kIHJlbW92ZXMgYSBgKHUzMilgIGNhc3QgdGhhdCBjb3VsZCBjYXVzZSB0aW1lIHRydW5jYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgZHJpdmVyIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlJBTVwiLFxuICAgIFwiWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZGxlX3N0b3JlXCIsXG4gICAgXCJtYXJrX2lkbGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGlkbGVfc3RvcmVgIHN5c2ZzIGNhbGxiYWNrIGluIHRoZSB6cmFtIGRyaXZlciB0byBmaXggYW4gaXNzdWUgd2hlcmUgYSBjYWxjdWxhdGVkIGN1dG9mZiB0aW1lIG9mIDAgKGZyb20gYGt0aW1lX3N1YmApIHdvdWxkIGluY29ycmVjdGx5IHRyaWdnZXIgdGhlIFxcXCJhbGxcXFwiIGJlaGF2aW9yICh3aGljaCB3YXMgcHJldmlvdXNseSByZXByZXNlbnRlZCBieSBhIGN1dG9mZiBvZiAwKS4gSXQgY2hhbmdlcyB0aGUgc3BlY2lhbCBcXFwiYWxsXFxcIiB2YWx1ZSB0byBgS1RJTUVfTUlOYCBhbmQgcmVtb3ZlcyBhIGAodTMyKWAgY2FzdCB0aGF0IGNvdWxkIGNhdXNlIHRpbWUgdHJ1bmNhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBkcml2ZXIgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MDM6MjguMzk2NTk2NzQ5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDkzNjA1MzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTA6MDM6MjguMzk3MTc5NTA5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkwOTMwMTg3MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB6cmFtX2Rydi5jYCByZWxhdGVkIHRvIHRpbWUgY2FsY3VsYXRpb24gYW5kIHRoZSBzcGVjaWFsIHZhbHVlIHVzZWQgdG8gbWFyayBhbGwgZW50cmllcyBhcyBpZGxlLiBJdCBjaGFuZ2VzIHRoZSBzcGVjaWFsIHZhbHVlIG9mIGBjdXRvZmZgIGZyb20gMCB0byBgS1RJTUVfTUlOYCBhbmQgcmVtb3ZlcyBhIGAodTMyKWAgY2FzdCBmcm9tIGBrdGltZV9nZXRfYm9vdHRpbWVfc2Vjb25kcygpYC4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBwdXJlbHkgcmVsYXRlZCB0byB0aW1lIGNvbXBhcmlzb25zIGFuZCBsb2dpYy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwMDg0MWYyMjYxNmQwZjE1MGI1NmMyZjNhZGJjYzQ0ZmYwNzNjMjQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTA6MDI6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG5pbmRleCBhOWIzYmIxZDNiZWYzLi5kYTUxZjcwYjcxMjE1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNcbisrKyBiL2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXG5AQCAtNDM4LDcgKzQzOCw3IEBAIHN0YXRpYyB2b2lkIG1hcmtfaWRsZShzdHJ1Y3QgenJhbSAqenJhbSwga3RpbWVfdCBjdXRvZmYpXG4gXHRcdH1cbiBcbiAjaWZkZWYgQ09ORklHX1pSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXG4tXHRcdGlzX2lkbGUgPSAhY3V0b2ZmIHx8XG4rXHRcdGlzX2lkbGUgPSBjdXRvZmYgPT0gS1RJTUVfTUlOIHx8XG4gXHRcdFx0a3RpbWVfYWZ0ZXIoY3V0b2ZmLCB6cmFtLVx1MDAzZXRhYmxlW2luZGV4XS5hdHRyLmFjX3RpbWUpO1xuICNlbmRpZlxuIFx0XHRpZiAoaXNfaWRsZSlcbkBAIC00NTMsNyArNDUzLDcgQEAgc3RhdGljIHNzaXplX3QgaWRsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuIFx0XHRcdCAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuIHtcbiBcdHN0cnVjdCB6cmFtICp6cmFtID0gZGV2X3RvX3pyYW0oZGV2KTtcbi1cdGt0aW1lX3QgY3V0b2ZmID0gMDtcbitcdGt0aW1lX3QgY3V0b2ZmID0gS1RJTUVfTUlOO1xuIFxuIFx0aWYgKCFzeXNmc19zdHJlcShidWYsIFwiYWxsXCIpKSB7XG4gXHRcdC8qXG5AQCAtNDY0LDcgKzQ2NCw3IEBAIHN0YXRpYyBzc2l6ZV90IGlkbGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiBcbiBcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1pSQU1fVFJBQ0tfRU5UUllfQUNUSU1FKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICFrc3RydG91aW50KGJ1ZiwgMCwgXHUwMDI2YWdlX3NlYykpXG4tXHRcdFx0Y3V0b2ZmID0ga3RpbWVfc3ViKCh1MzIpa3RpbWVfZ2V0X2Jvb3R0aW1lX3NlY29uZHMoKSxcbitcdFx0XHRjdXRvZmYgPSBrdGltZV9zdWIoa3RpbWVfZ2V0X2Jvb3R0aW1lX3NlY29uZHMoKSxcbiBcdFx0XHRcdFx0ICAgYWdlX3NlYyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC00NzUsNyArNDc1LDcgQEAgc3RhdGljIHNzaXplX3QgaWRsZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdC8qXG4tXHQgKiBBIGN1dG9mZiBvZiAwIG1hcmtzIGV2ZXJ5dGhpbmcgYXMgaWRsZSwgdGhpcyBpcyB0aGVcbitcdCAqIEEgY3V0b2ZmIG9mIEtUSU1FX01JTiBtYXJrcyBldmVyeXRoaW5nIGFzIGlkbGUsIHRoaXMgaXMgdGhlXG4gXHQgKiBcImFsbFwiIGJlaGF2aW9yLlxuIFx0ICovXG4gXHRtYXJrX2lkbGUoenJhbSwgY3V0b2ZmKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEwOjAzOjI4LjM5NzE4MDI0OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDkyOTk4MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlpyYW0gRHJpdmVyIFBhdGNoIEFuYWx5c2lzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggdGFyZ2V0cyBgZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmNgLCB3aGljaCB0ZWxscyBtZSB3ZSdyZSBsb29raW5nIGF0IGEgY29yZSBibG9jayBkZXZpY2UgZHJpdmVyIGNvbXBvbmVudC4gVGhlIGNoYW5nZXMgYXJlIGFsbCBjZW50ZXJlZCBhcm91bmQgdGhlIGBjdXRvZmZgIHZhcmlhYmxlIGFuZCBpdHMgcmVsYXRlZCBsb2dpYywgYW5kIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gV2UncmUgdGFsa2luZyBhYm91dCBhIHRpbWUtcmVsYXRlZCBidWcgZml4IOKAkyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYGN1dG9mZmAgaXMgYmVpbmcgbW9kaWZpZWQgZnJvbSBgMGAgdG8gYEtUSU1FX01JTmAuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgYSBsaWtlbHkgY2FzZSBvZiBlaXRoZXIgYW4gb3ZlcmZsb3cgcHJvYmxlbSB3aXRoIHRoZSBvbGRlciBpbml0aWFsaXphdGlvbiBvciwgcGVyaGFwcyBtb3JlIGxpa2VseSwgYW4gaXNzdWUgd2hlcmUgYDBgIHdhcyBiZWluZyB1c2VkIHRvIHJlcHJlc2VudCBhbiBpbnZhbGlkIG9yIHNwZWNpYWwgdGltZSB2YWx1ZSwgYnV0IHRoYXQgYXBwcm9hY2ggaGFkIGZsYXdzLiBUaGUgbG9naWMgY2hlY2sgYGlzX2lkbGUgPSAhY3V0b2ZmIHx8IC4uLmAgaXMgY2hhbmdlZCB0byBgaXNfaWRsZSA9IGN1dG9mZiA9PSBLVElNRV9NSU4gfHwgLi4uYCwgd2hpY2ggcmVpbmZvcmNlcyB0aGUgc3VzcGljaW9uIG9mIGEgc3BlY2lhbCB2YWx1ZSByZXByZXNlbnRhdGlvbiBmb3IgdGltZSwgdGhhdCBhIHplcm8gdmFsdWUgd2FzIGJlaW5nIGluY29ycmVjdGx5IHRyZWF0ZWQgYXMgYSB2YWxpZCB2YWx1ZS4gRnVydGhlciwgdGhlIHRpbWUgc3VidHJhY3Rpb24gZnVuY3Rpb24gY2hhbmdlcywgdXNpbmcgdGhlIGNvcnJlY3Qga3RpbWUgZnVuY3Rpb24gZm9yIHVzZSB3aXRoIGEga3RpbWVfdC4gVGhpcyBwb2ludHMgdG93YXJkcyBhbiBpbXByb3ZlbWVudCBpbiB0aGUgYWNjdXJhY3kgb3IgaGFuZGxpbmcgb2YgdGltZSBjYWxjdWxhdGlvbnMsIHBvdGVudGlhbGx5IGFkZHJlc3NpbmcgaXNzdWVzIHdpdGggdGhlIGBhZ2Vfc2VjYCB2YWx1ZSBiZWluZyB1c2VkIGluIHJlbGF0aW9uIHRvIHRoZSBgY3V0b2ZmYC5cblxuVGhlIGNydWNpYWwgdGhpbmcgaGVyZSwgZnJvbSBhIHNlY3VyaXR5IGFuZCBzdGFiaWxpdHkgcGVyc3BlY3RpdmUsIGlzIHRoYXQgdGhlcmUgYXJlIG5vIHJlZCBmbGFncy4gVGhpcyBpc24ndCB0b3VjaGluZyBtZW1vcnkgYWxsb2NhdGlvbiwgaW50cm9kdWNpbmcgbmV3IHVzZXItc3BhY2UgaW50ZXJmYWNlcywgb3IgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHZhcmlhYmxlcy4gSXQncyBhIHRhcmdldGVkIGxvZ2ljIGZpeCB3aXRoaW4gdGhlIGV4aXN0aW5nIHRpbWUgdHJhY2tpbmcgbWVjaGFuaXNtLiBUaGlzIHBhdGNoIGlzIGlzb2xhdGVkIGFuZCBjb250YWluZWQsIGluZGljYXRpbmcgdGhpcyBpcyBoaWdobHkgdW5saWtlbHkgdG8gaW50cm9kdWNlIGFueSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuXG5cbkdpdmVuIHRoaXMgYW5hbHlzaXMsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMgY2hhbmdlLiBUaGUgcmlzayBwcm9maWxlIGlzIGV4dHJlbWVseSBsb3cgYmFzZWQgb24gdGhpcyBsaW1pdGVkIHJldmlldy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2NCwiT3V0cHV0VG9rZW5zIjoxNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMDowMzozNy40OTAxODExMTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGB6cmFtX2Rydi5jYCByZWxhdGVkIHRvIHRpbWUgY2FsY3VsYXRpb24gYW5kIHRoZSBzcGVjaWFsIHZhbHVlIHVzZWQgdG8gbWFyayBhbGwgZW50cmllcyBhcyBpZGxlLiBJdCBjaGFuZ2VzIHRoZSBzcGVjaWFsIHZhbHVlIG9mIGBjdXRvZmZgIGZyb20gMCB0byBgS1RJTUVfTUlOYCBhbmQgcmVtb3ZlcyBhIGAodTMyKWAgY2FzdCBmcm9tIGBrdGltZV9nZXRfYm9vdHRpbWVfc2Vjb25kcygpYC4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBwdXJlbHkgcmVsYXRlZCB0byB0aW1lIGNvbXBhcmlzb25zIGFuZCBsb2dpYy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgenJhbV9kcnYuY2AgcmVsYXRlZCB0byB0aW1lIGNhbGN1bGF0aW9uIGFuZCB0aGUgc3BlY2lhbCB2YWx1ZSB1c2VkIHRvIG1hcmsgYWxsIGVudHJpZXMgYXMgaWRsZS4gSXQgY2hhbmdlcyB0aGUgc3BlY2lhbCB2YWx1ZSBvZiBgY3V0b2ZmYCBmcm9tIDAgdG8gYEtUSU1FX01JTmAgYW5kIHJlbW92ZXMgYSBgKHUzMilgIGNhc3QgZnJvbSBga3RpbWVfZ2V0X2Jvb3R0aW1lX3NlY29uZHMoKWAuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zLiBUaGUgbW9kaWZpY2F0aW9ucyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gdGltZSBjb21wYXJpc29ucyBhbmQgbG9naWMuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowg8j42[1] Phase: Succeeded StartedAt: 2026-08-25 10:03:48 +0000 UTC FinishedAt: 2026-08-25 10:03:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg8j42[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-25 10:03:48 +0000 UTC FinishedAt: 2026-08-25 10:03:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg8j42[2] Phase: Succeeded StartedAt: 2026-08-25 10:03:48 +0000 UTC FinishedAt: 2026-08-25 13:44:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-25 10:03:48 +0000 UTC FinishedAt: 2026-08-25 13:44:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-25 10:03:48 +0000 UTC FinishedAt: 2026-08-25 10:03:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-25 10:03:48 +0000 UTC FinishedAt: 2026-08-25 10:03:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowg8j42/series-workflowg8j42-convert-artifact-2681161209/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-25 10:03:58 +0000 UTC FinishedAt: 2026-08-25 10:20:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-25 10:03:58 +0000 UTC FinishedAt: 2026-08-25 10:20:58 +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:*e900fb6c-930a-4f18-9e1c-79e91d186ddb,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-workflowg8j42/series-workflowg8j42-convert-artifact-2681161209/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": "e50b381a-c63e-4ece-bdf3-05e836698102", "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-workflowg8j42/series-workflowg8j42-build-action-1038606103/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-25 10:03:58 +0000 UTC FinishedAt: 2026-08-25 10:20:48 +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:*e900fb6c-930a-4f18-9e1c-79e91d186ddb,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-workflowg8j42/series-workflowg8j42-convert-artifact-2681161209/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": "e50b381a-c63e-4ece-bdf3-05e836698102", "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-workflowg8j42/series-workflowg8j42-build-action-1038606103/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-25 10:20:58 +0000 UTC FinishedAt: 2026-08-25 10:20:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-25 10:20:58 +0000 UTC FinishedAt: 2026-08-25 10:20:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-25 10:20:58 +0000 UTC FinishedAt: 2026-08-25 10:21:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-25 10:20:58 +0000 UTC FinishedAt: 2026-08-25 10:21:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowg8j42/series-workflowg8j42-convert-artifact-3859118540/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-25 10:21:08 +0000 UTC FinishedAt: 2026-08-25 10:23:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-25 10:21:08 +0000 UTC FinishedAt: 2026-08-25 10:23:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e50b381a-c63e-4ece-bdf3-05e836698102,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-workflowg8j42/series-workflowg8j42-build-action-1038606103/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-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-25 10:23:10 +0000 UTC FinishedAt: 2026-08-25 10:23:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-25 10:23:10 +0000 UTC FinishedAt: 2026-08-25 10:23:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-25 10:23:10 +0000 UTC FinishedAt: 2026-08-25 10:39:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-25 10:23:10 +0000 UTC FinishedAt: 2026-08-25 10:39:06 +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:*e900fb6c-930a-4f18-9e1c-79e91d186ddb,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-workflowg8j42/series-workflowg8j42-convert-artifact-3859118540/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": "70332184-491d-4260-821d-148c85e9c685", "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-workflowg8j42/series-workflowg8j42-build-action-3361720296/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-25 10:23:10 +0000 UTC FinishedAt: 2026-08-25 10:38:56 +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:*e900fb6c-930a-4f18-9e1c-79e91d186ddb,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-workflowg8j42/series-workflowg8j42-convert-artifact-3859118540/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": "70332184-491d-4260-821d-148c85e9c685", "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-workflowg8j42/series-workflowg8j42-build-action-3361720296/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-25 10:39:06 +0000 UTC FinishedAt: 2026-08-25 10:39:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-25 10:39:06 +0000 UTC FinishedAt: 2026-08-25 10:39:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-25 10:39:06 +0000 UTC FinishedAt: 2026-08-25 10:41:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-25 10:39:06 +0000 UTC FinishedAt: 2026-08-25 10:40:52 +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:*70332184-491d-4260-821d-148c85e9c685,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-workflowg8j42/series-workflowg8j42-build-action-3361720296/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-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-25 10:41:02 +0000 UTC FinishedAt: 2026-08-25 13:44:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-25 10:41:02 +0000 UTC FinishedAt: 2026-08-25 13:44:11 +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":["idle_store","mark_idle"],"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:*e50b381a-c63e-4ece-bdf3-05e836698102,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*70332184-491d-4260-821d-148c85e9c685,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-workflowg8j42/series-workflowg8j42-build-action-1038606103/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-workflowg8j42/series-workflowg8j42-build-action-3361720296/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-25 10:41:02 +0000 UTC FinishedAt: 2026-08-25 10:41:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-25 10:41:02 +0000 UTC FinishedAt: 2026-08-25 10:41:07 +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":["idle_store","mark_idle"],"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-workflowg8j42/series-workflowg8j42-convert-artifact-2091582517/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-25 10:41:02 +0000 UTC FinishedAt: 2026-08-25 10:41:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-25 10:41:02 +0000 UTC FinishedAt: 2026-08-25 10:41:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-25 10:41:02 +0000 UTC FinishedAt: 2026-08-25 10:41:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-25 10:41:12 +0000 UTC FinishedAt: 2026-08-25 13:44:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg8j42[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["idle_store","mark_idle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4b18edbd8e70f7e6860d56370f13244896d0f95c","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZRAM","ZRAM_TRACK_ENTRY_ACTIME"],"series_id":"3335cb5c-271a-45f0-933e-cb8fde58b33b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-25 10:41:12 +0000 UTC FinishedAt: 2026-08-25 13:44:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e50b381a-c63e-4ece-bdf3-05e836698102,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*70332184-491d-4260-821d-148c85e9c685,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-workflowg8j42/series-workflowg8j42-build-action-1038606103/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-workflowg8j42/series-workflowg8j42-build-action-3361720296/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-workflowg8j42/series-workflowg8j42-convert-artifact-2091582517/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,}