Name: series-workflow5xzxd Phase: Succeeded StartedAt: 2026-07-28 01:03:07 +0000 UTC FinishedAt: 2026-07-28 06:17:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xzxd[0] Phase: Succeeded StartedAt: 2026-07-28 01:03:07 +0000 UTC FinishedAt: 2026-07-28 01:29:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xzxd[0].run-triage Phase: Succeeded StartedAt: 2026-07-28 01:03:07 +0000 UTC FinishedAt: 2026-07-28 01:29:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9c66085e6dcfb44b70970aa4e323003fc7f2b738", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZONE_DEVICE", "PCI_P2PDMA", "DAX", "DEV_DAX", "FS_DAX", "MEMORY_HOTPLUG", "SPARSEMEM_VMEMMAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9c66085e6dcfb44b70970aa4e323003fc7f2b738", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZONE_DEVICE", "PCI_P2PDMA", "DAX", "DEV_DAX", "FS_DAX", "MEMORY_HOTPLUG", "SPARSEMEM_VMEMMAP" ], "series_id": "d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memmap_init_zone_device", "memmap_init_compound", "zone_device_page_init_from_template", "zone_device_page_init_slow" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O1BDSV9QMlBETUEmIzM0OywKICAgICYjMzQ7REFYJiMzNDssCiAgICAmIzM0O0RFVl9EQVgmIzM0OywKICAgICYjMzQ7RlNfREFYJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O1NQQVJTRU1FTV9WTUVNTUFQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtbWFwX2luaXRfem9uZV9kZXZpY2UmIzM0OywKICAgICYjMzQ7bWVtbWFwX2luaXRfY29tcG91bmQmIzM0OywKICAgICYjMzQ7em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUmIzM0OywKICAgICYjMzQ7em9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb3B0aW1pemVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBaT05FX0RFVklDRSBwYWdlcyBieSB1c2luZyBhIHRlbXBsYXRlIGFuZCBub24tdGVtcG9yYWwgbWVtY3B5LiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgd2hlbiBwcm9iaW5nIGRldmljZXMgbGlrZSBQTUVNLCBEQVgsIG9yIFBDSSBQMlBETUEuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxZmEzMDAwN2FiYWExODdmNDg4MjM3ZDcwOTE1MTgwMGM3MmZmMjYyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMDE6MjY6NDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxuaW5kZXggNDYzNTYxNjg2M2Y1M2QuLmJjNmE5ZjM0YjM0NmFmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXG5AQCAtODIsNyAmIzQzOzgyLDM1IEBAIGludCBzdHJjbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KTtcbiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxuICNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZX0ZMVVNIQ0FDSEUgMVxuIHZvaWQgX19tZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCk7XG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV84KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlKFwmIzM0O21vdm50aXEgJTEsICUwXCYjMzQ7XG4mIzQzO1x0XHQgICAgIDogXCYjMzQ7PW1cJiMzNDsoKih1NjQgKilkc3QpXG4mIzQzO1x0XHQgICAgIDogXCYjMzQ7clwmIzM0OygqKGNvbnN0IHU2NCAqKXNyYylcbiYjNDM7XHRcdCAgICAgOiBcJiMzNDttZW1vcnlcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzE2KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuJiM0Mzt7XG4mIzQzO1x0bW92bnRpXzgoZHN0LCBzcmMpO1xuJiM0MztcdG1vdm50aV84KGRzdCAmIzQzOyA4LCBzcmMgJiM0MzsgOCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfMzIodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXG4mIzQzO3tcbiYjNDM7XHRtb3ZudGlfMTYoZHN0LCBzcmMpO1xuJiM0MztcdG1vdm50aV8xNihkc3QgJiM0MzsgMTYsIHNyYyAmIzQzOyAxNik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfNjQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXG4mIzQzO3tcbiYjNDM7XHRtb3ZudGlfMzIoZHN0LCBzcmMpO1xuJiM0MztcdG1vdm50aV8zMihkc3QgJiM0MzsgMzIsIHNyYyAmIzQzOyAzMik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHNpemVfdCBjbnQpXG4ge1xuIFx0aWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGNudCkpIHtcbiBcdFx0c3dpdGNoIChjbnQpIHtcbkBAIC05NiwxMCAmIzQzOzEyNCw0OCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdFxuIFx0XHRcdFx0YXNtIChcJiMzNDttb3ZudGlxICUxLCAlMFwmIzM0OyA6IFwmIzM0Oz1tXCYjMzQ7KCoodTY0ICopZHN0KSA6IFwmIzM0O3JcJiMzNDsoKih1NjQgKilzcmMpKTtcbiBcdFx0XHRcdGFzbSAoXCYjMzQ7bW92bnRpcSAlMSwgJTBcJiMzNDsgOiBcJiMzNDs9bVwmIzM0OygqKHU2NCAqKShkc3QgJiM0MzsgOCkpIDogXCYjMzQ7clwmIzM0OygqKHU2NCAqKShzcmMgJiM0MzsgOCkpKTtcbiBcdFx0XHRcdHJldHVybjtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogVGhlIHJlbGV2YW50IGZpeGVkLXNpemUgY29waWVzIGhlcmUgYXJlIHRoZVxuJiM0MztcdFx0XHQgKiB4ODZfNjQgc3RydWN0IHBhZ2Ugc2l6ZXM6IDY0LCA4MCwgYW5kIDk2IGJ5dGVzLlxuJiM0MztcdFx0XHQgKiBLZWVwIDMyLWJ5dGUgYW5kIDQ4LWJ5dGUgY29waWVzIGlubGluZSBhcyB3ZWxsXG4mIzQzO1x0XHRcdCAqIGluc3RlYWQgb2Ygc2VuZGluZyB0aG9zZSBuZWFyYnkgZml4ZWQtc2l6ZVxuJiM0MztcdFx0XHQgKiBjYXNlcyBiYWNrIHRvIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGNhc2UgMzI6XG4mIzQzO1x0XHRcdFx0bW92bnRpXzMyKGRzdCwgc3JjKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdGNhc2UgNDg6XG4mIzQzO1x0XHRcdFx0bW92bnRpXzMyKGRzdCwgc3JjKTtcbiYjNDM7XHRcdFx0XHRtb3ZudGlfMTYoZHN0ICYjNDM7IDMyLCBzcmMgJiM0MzsgMzIpO1xuJiM0MztcdFx0XHRcdHJldHVybjtcbiYjNDM7XHRcdFx0Y2FzZSA2NDpcbiYjNDM7XHRcdFx0XHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xuJiM0MztcdFx0XHRcdHJldHVybjtcbiYjNDM7XHRcdFx0Y2FzZSA4MDpcbiYjNDM7XHRcdFx0XHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xuJiM0MztcdFx0XHRcdG1vdm50aV8xNihkc3QgJiM0MzsgNjQsIHNyYyAmIzQzOyA2NCk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHRjYXNlIDk2OlxuJiM0MztcdFx0XHRcdG1vdm50aV82NChkc3QsIHNyYyk7XG4mIzQzO1x0XHRcdFx0bW92bnRpXzMyKGRzdCAmIzQzOyA2NCwgc3JjICYjNDM7IDY0KTtcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4gXHRcdH1cbiBcdH1cbiYjNDM7XG4gXHRfX21lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpO1xuIH1cbiYjNDM7XG4mIzQzOyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsIG1lbWNweV9ub250ZW1wb3JhbFxuJiM0MzsvKlxuJiM0MzsgKiBSZXVzZSB0aGUgZXhpc3RpbmcgeDg2IGZsdXNoY2FjaGUgYmFja2VuZCBhcyB0aGUgbm9uLXRlbXBvcmFsIGNvcHlcbiYjNDM7ICogcHJpbWl0aXZlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9ub250ZW1wb3JhbCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyxcbiYjNDM7XHRcdHNpemVfdCBjbnQpXG4mIzQzO3tcbiYjNDM7XHRtZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcbiYjNDM7fVxuJiM0MztcbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogX19LRVJORUxfXyAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggNDg1ZGY5YzJkYmRkYjMuLjQzMzQzYmZjZTQ5MzZlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC0yNTQxLDExICYjNDM7MjU0MSwyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxuIFx0cGFnZS1cdTAwM2VmbGFncy5mIHw9IChzZWN0aW9uIFx1MDAyNiBTRUNUSU9OU19NQVNLKSBcdTAwM2NcdTAwM2MgU0VDVElPTlNfUEdTSElGVDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4mIzQzO3tcbiYjNDM7XHRzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24obWVtZGVzY19mbGFnc190IG1kZilcbiB7XG4gXHRyZXR1cm4gKG1kZi5mIFx1MDAzZVx1MDAzZSBTRUNUSU9OU19QR1NISUZUKSBcdTAwMjYgU0VDVElPTlNfTUFTSztcbiB9XG4gI2Vsc2UgLyogIVNFQ1RJT05fSU5fUEFHRV9GTEFHUyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcGZuKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuIHtcbiBcdHJldHVybiAwO1xuQEAgLTI3NjgsOSAmIzQzOzI3NzksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfbGlua3Moc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gem9uZV90eXBlIHpvbmUsXG4ge1xuIFx0c2V0X3BhZ2Vfem9uZShwYWdlLCB6b25lKTtcbiBcdHNldF9wYWdlX25vZGUocGFnZSwgbm9kZSk7XG4tI2lmZGVmIFNFQ1RJT05fSU5fUEFHRV9GTEFHU1xuLVx0c2V0X3BhZ2Vfc2VjdGlvbihwYWdlLCBwZm5fdG9fc2VjdGlvbl9ucihwZm4pKTtcbi0jZW5kaWZcbiYjNDM7XHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHBhZ2UsIHBmbik7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5pbmRleCA1NzAyZGFjYTQzMjZiNy4uNmNiNWNkZDAxMTU4YjIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5AQCAtMjc4LDYgJiM0MzsyNzgsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxuIH1cbiAjZW5kaWZcbiBcbiYjNDM7I2lmbmRlZiBtZW1jcHlfbm9udGVtcG9yYWxcbiYjNDM7LypcbiYjNDM7ICogbWVtY3B5X25vbnRlbXBvcmFsKCkgcmVxdWVzdHMgYSBub24tdGVtcG9yYWwgY29weSB3aGVuIHRoZVxuJiM0MzsgKiBhcmNoaXRlY3R1cmUgaGFzIGEgc3VpdGFibGUgYmFja2VuZC4gQXJjaGl0ZWN0dXJlcyB3aXRob3V0IGFcbiYjNDM7ICogc3BlY2lhbGl6ZWQgYmFja2VuZCBmYWxsIGJhY2sgdG8gbWVtY3B5KCkuIEtlZXAgdGhpcyBhcyBhXG4mIzQzOyAqIGZ1bmN0aW9uLWxpa2UgbWFjcm8gc28gdGhlIGNvbXBpbGVyIGNhbiBzdGlsbCBzZWUgdGhlIG9yaWdpbmFsXG4mIzQzOyAqIG1lbWNweSgpIGNhbGwgc2l0ZSBhbmQgcHJlc2VydmUgdGhlIHVzdWFsIEZPUlRJRlkgY292ZXJhZ2Ugd2hlblxuJiM0MzsgKiBvYmplY3Qgc2l6ZXMgcmVtYWluIHZpc2libGUgdGhlcmUsIHdoaWxlIGtlZXBpbmcgdGhlIEFQSSB2b2lkLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBtZW1jcHlfbm9udGVtcG9yYWwoZHN0LCBzcmMsIGxlbikgXFxcbiYjNDM7XHQoKHZvaWQpbWVtY3B5KGRzdCwgc3JjLCBsZW4pKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gdm9pZCAqbWVtY2hyX2ludihjb25zdCB2b2lkICpzLCBpbnQgYywgc2l6ZV90IG4pO1xuIGNoYXIgKnN0cnJlcGxhY2UoY2hhciAqc3RyLCBjaGFyIG9sZCwgY2hhciBuZXcpO1xuIFxuZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuY1xuaW5kZXggMGY2NDkwOWU4ZDIwZTIuLmFlNDJhMTMxMWUxZDE4IDEwMDY0NFxuLS0tIGEvbW0vbW1faW5pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tbV9pbml0LmNcbkBAIC0xMDA1LDExICYjNDM7MTAwNSwzNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbWVtbWFwX2luaXQodm9pZClcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxuLXN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcbiYjNDM7LypcbiYjNDM7ICogUmV0dXJuIHRydWUgd2hlbiBtZW1tYXBfaW5pdF96b25lX2RldmljZSgpIG11c3QgaW5pdGlhbGl6ZSB0aGUgcGFnZVxuJiM0MzsgKiByZWZjb3VudCB0byAwLiBNRU1PUllfREVWSUNFX0dFTkVSSUMgcGFnZXMgcmVnYWluIGEgcmVmY291bnQgb2YgMSBpblxuJiM0MzsgKiB0aGUgZnJlZSBwYXRoLCB3aGlsZSB0aGUgcmVtYWluaW5nIFpPTkVfREVWSUNFIHR5cGVzIHN0YXJ0IGZyb20gMCBoZXJlXG4mIzQzOyAqIGFuZCByYWlzZSB0aGUgY291bnQgYWdhaW4gd2hlbiB0aGUgYWxsb2NhdG9yIG9yIGRyaXZlciBoYW5kcyB0aGUgcGFnZVxuJiM0MzsgKiBvdXQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcGFnZW1hcF9yZXF1aXJlc19yZWZjb3VudF9yZXNldChjb25zdCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNRU1PUllfREVWSUNFX0dFTkVSSUMgcGFnZXMgcmVnYWluIGEgcmVmY291bnQgb2YgMSBpbiB0aGUgZnJlZVxuJiM0MztcdCAqIHBhdGguIFRoZSByZW1haW5pbmcgWk9ORV9ERVZJQ0UgdHlwZXMgc3RhcnQgZnJvbSAwIGhlcmUgYW5kIHJhaXNlXG4mIzQzO1x0ICogdGhlIGNvdW50IGFnYWluIHdoZW4gdGhlIGFsbG9jYXRvciBvciBkcml2ZXIgaGFuZHMgdGhlIHBhZ2Ugb3V0LlxuJiM0MztcdCAqL1xuJiM0MztcdHN3aXRjaCAocGdtYXAtXHUwMDNldHlwZSkge1xuJiM0MztcdGNhc2UgTUVNT1JZX0RFVklDRV9GU19EQVg6XG4mIzQzO1x0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XG4mIzQzO1x0Y2FzZSBNRU1PUllfREVWSUNFX0NPSEVSRU5UOlxuJiM0MztcdGNhc2UgTUVNT1JZX0RFVklDRV9QQ0lfUDJQRE1BOlxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0Y2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIF9fcmVmIF9fem9uZV9kZXZpY2VfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcbiBcdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIHpvbmVfaWR4LCBpbnQgbmlkLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4ge1xuLVxuIFx0X19pbml0X3NpbmdsZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCk7XG4gXG4gXHQvKlxuQEAgLTEwMjgsMjcgJiM0MzsxMDU0LDU0IEBAIHN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcbiBcdCAqL1xuIFx0cGFnZV9mb2xpbyhwYWdlKS1cdTAwM2VwZ21hcCA9IHBnbWFwO1xuIFx0cGFnZS1cdTAwM2V6b25lX2RldmljZV9kYXRhID0gTlVMTDtcbiYjNDM7fVxuIFxuLVx0Lypcbi1cdCAqIFpPTkVfREVWSUNFIHBhZ2VzIG90aGVyIHRoYW4gTUVNT1JZX1RZUEVfR0VORVJJQyBhcmUgcmVsZWFzZWRcbi1cdCAqIGRpcmVjdGx5IHRvIHRoZSBkcml2ZXIgcGFnZSBhbGxvY2F0b3Igd2hpY2ggd2lsbCBzZXQgdGhlIHBhZ2UgY291bnRcbi1cdCAqIHRvIDEgd2hlbiBhbGxvY2F0aW5nIHRoZSBwYWdlLlxuLVx0ICpcbi1cdCAqIE1FTU9SWV9UWVBFX0dFTkVSSUMgYW5kIE1FTU9SWV9UWVBFX0ZTX0RBWCBwYWdlcyBhdXRvbWF0aWNhbGx5IGhhdmVcbi1cdCAqIHRoZWlyIHJlZmNvdW50IHJlc2V0IHRvIG9uZSB3aGVuZXZlciB0aGV5IGFyZSBmcmVlZCAoaWUuIGFmdGVyXG4tXHQgKiB0aGVpciByZWZjb3VudCBkcm9wcyB0byAwKS5cbi1cdCAqL1xuLVx0c3dpdGNoIChwZ21hcC1cdTAwM2V0eXBlKSB7XG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOlxuLVx0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6XG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQTpcbiYjNDM7c3RhdGljIHZvaWQgX19yZWYgem9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3coc3RydWN0IHBhZ2UgKnBhZ2UsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcbiYjNDM7XHRcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4mIzQzO3tcbiYjNDM7XHRfX3pvbmVfZGV2aWNlX3BhZ2VfaW5pdChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbiYjNDM7XHRpZiAocGFnZW1hcF9yZXF1aXJlc19yZWZjb3VudF9yZXNldChwZ21hcCkpXG4gXHRcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xuLVx0XHRicmVhaztcbiYjNDM7fVxuIFxuLVx0Y2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6XG4tXHRcdGJyZWFrO1xuLVx0fVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgem9uZV9kZXZpY2VfdGFpbF9wYWdlX2luaXQoc3RydWN0IHBhZ2UgKnBhZ2UsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcbiYjNDM7XHRcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGNvbnN0IHN0cnVjdCBwYWdlICpoZWFkLFxuJiM0MztcdFx0dW5zaWduZWQgaW50IG9yZGVyKVxuJiM0Mzt7XG4mIzQzO1x0em9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3cocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4mIzQzO1x0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcbiYjNDM7XHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogJiMzOTt0ZW1wbGF0ZSYjMzk7IGlzIGEgcmV1c2FibGUgcGFnZSBwcm90b3R5cGUgcmF0aGVyIHRoYW4gYSBzdHJpY3RseSBpbW11dGFibGVcbiYjNDM7ICogb2JqZWN0LiBNb3N0IFpPTkVfREVWSUNFIGZpZWxkcyBzdGF5IGNvbnN0YW50IGFjcm9zcyB0aGUgcGFnZXMgY292ZXJlZCBieVxuJiM0MzsgKiB0aGUgY3VycmVudCB0ZW1wbGF0ZSwgYnV0IHNlY3Rpb24gYml0cyBhbmQgcGFnZS1cdTAwM2V2aXJ0dWFsIG1heSBzdGlsbCBkZXBlbmRcbiYjNDM7ICogb24gdGhlIFBGTi4gUmVmcmVzaCB0aG9zZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGUgdGVtcGxhdGUgYmVmb3JlXG4mIzQzOyAqIGNvcHlpbmcgaXQgaW50byBAcGFnZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHBmbilcbiYjNDM7e1xuJiM0MztcdHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4odGVtcGxhdGUsIHBmbik7XG4mIzQzOyNpZmRlZiBXQU5UX1BBR0VfVklSVFVBTFxuJiM0MztcdGlmICghaXNfaGlnaG1lbV9pZHgoWk9ORV9ERVZJQ0UpKVxuJiM0MztcdFx0c2V0X3BhZ2VfYWRkcmVzcyh0ZW1wbGF0ZSwgX192YShwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKTtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlICp0ZW1wbGF0ZSlcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogJiMzOTt0ZW1wbGF0ZSYjMzk7IGNhcnJpZXMgdGhlIGludmFyaWFudCBwb3J0aW9uIG9mIGEgWk9ORV9ERVZJQ0Ugc3RydWN0XG4mIzQzO1x0ICogcGFnZS4gVXBkYXRlIHRoZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiBwbGFjZSBiZWZvcmUgY29weWluZyBpdFxuJiM0MztcdCAqIHRvIHRoZSBkZXN0aW5hdGlvbiBwYWdlLlxuJiM0MztcdCAqL1xuJiM0MztcdHpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlKHRlbXBsYXRlLCBwZm4pO1xuJiM0MztcdG1lbWNweV9ub250ZW1wb3JhbChwYWdlLCB0ZW1wbGF0ZSwgc2l6ZW9mKCpwYWdlKSk7XG4gfVxuIFxuIC8qXG5AQCAtMTA4Myw2ICYjNDM7MTEzNiw3IEBAIHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgcGZuLCBlbmRfcGZuID0gaGVhZF9wZm4gJiM0MzsgbnJfcGFnZXM7XG4gXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBwZ21hcC1cdTAwM2V2bWVtbWFwX3NoaWZ0O1xuJiM0MztcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xuIFxuIFx0LypcbiBcdCAqIFdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgcGFnZXMsIGluY2x1ZGluZyBzZXR0aW5nIHVwIHBhZ2UgbGlua3MuXG5AQCAtMTA5MSwxMiAmIzQzOzExNDUsMjYgQEAgc3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXG4gXHQgKiB0aGUgcGFnZXMgaW4gdGhlIHNhbWUgZ28uXG4gXHQgKi9cbiBcdF9fU2V0UGFnZUhlYWQoaGVhZCk7XG4mIzQzO1xuIFx0Zm9yIChwZm4gPSBoZWFkX3BmbiAmIzQzOyAxOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbiYjNDM7JiM0MzspIHtcbiBcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuIFxuLVx0XHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbi1cdFx0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcbi1cdFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XG4mIzQzO1x0XHRpZiAocGZuID09IGhlYWRfcGZuICYjNDM7IDEpIHtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogQWxsIHRhaWxzIG9mIHRoZSBzYW1lIGNvbXBvdW5kIHBhZ2Ugc2hhcmUgdGhlXG4mIzQzO1x0XHRcdCAqIHN0YXRlIGVzdGFibGlzaGVkIGJ5IHByZXBfY29tcG91bmRfdGFpbCgpLiBSZXVzZVxuJiM0MztcdFx0XHQgKiBvbmUgdGFpbCB0ZW1wbGF0ZSBmb3IgdGhlIHdob2xlIHJhbmdlIGFuZFxuJiM0MztcdFx0XHQgKiByZWZyZXNoIG9ubHkgdGhlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHRoYXRcbiYjNDM7XHRcdFx0ICogdGVtcGxhdGUgYmVmb3JlIGVhY2ggY29weS5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcGdtYXAsIGhlYWQsIG9yZGVyKTtcbiYjNDM7XHRcdFx0LyogaW5pdCB0ZW1wbGF0ZSBwYWdlICovXG4mIzQzO1x0XHRcdG1lbWNweShcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHR6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShwYWdlLCBwZm4sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnRlbXBsYXRlKTtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcdHByZXBfY29tcG91bmRfaGVhZChoZWFkLCBvcmRlcik7XG4gfVxuQEAgLTExMTMsNiAmIzQzOzExODEsNyBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuIFx0dW5zaWduZWQgbG9uZyB6b25lX2lkeCA9IHpvbmVfaWR4KHpvbmUpO1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7XG4gXHRpbnQgbmlkID0gcGdkYXQtXHUwMDNlbm9kZV9pZDtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSB0ZW1wbGF0ZTtcbiBcbiBcdGlmIChXQVJOX09OX09OQ0UoIXBnbWFwIHx8IHpvbmVfaWR4ICE9IFpPTkVfREVWSUNFKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTExMzAsNyAmIzQzOzExOTksMjEgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcbiBcdGZvciAocGZuID0gc3RhcnRfcGZuOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbiAmIzQzOz0gcGZuc19wZXJfY29tcG91bmQpIHtcbiBcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuIFxuLVx0XHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbiYjNDM7XHRcdGlmIChwZm4gPT0gc3RhcnRfcGZuKSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFNlZWQgdGhlIHJldXNhYmxlIGhlYWQtcGFnZSB0ZW1wbGF0ZSBmcm9tIHRoZVxuJiM0MztcdFx0XHQgKiBmaXJzdCByZWFsIHN0cnVjdCBwYWdlLCBiZWNhdXNlIHRoZSBleGlzdGluZ1xuJiM0MztcdFx0XHQgKiBwYWdlLWluaXQgYW5kIHBhZ2VibG9jayBoZWxwZXJzIGV4cGVjdCBhIHJlYWxcbiYjNDM7XHRcdFx0ICogbWVtbWFwIGVudHJ5IHJhdGhlciB0aGFuIGEgc3RhY2sgb2JqZWN0LlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3cocGFnZSwgcGZuLCB6b25lX2lkeCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgbmlkLCBwZ21hcCk7XG4mIzQzO1x0XHRcdC8qIGluaXQgdGVtcGxhdGUgcGFnZSAqL1xuJiM0MztcdFx0XHRtZW1jcHkoXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZ0ZW1wbGF0ZSk7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdGlmIChJU19BTElHTkVEKHBmbiwgUEFHRVNfUEVSX1NFQ1RJT04pKVxuIFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtQQ0lfUDJQRE1BJiMzNDssCiAgICAmIzM0O0RBWCYjMzQ7LAogICAgJiMzNDtERVZfREFYJiMzNDssCiAgICAmIzM0O0ZTX0RBWCYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7LAogICAgJiMzNDtTUEFSU0VNRU1fVk1FTU1BUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW1hcF9pbml0X3pvbmVfZGV2aWNlJiMzNDssCiAgICAmIzM0O21lbW1hcF9pbml0X2NvbXBvdW5kJiMzNDssCiAgICAmIzM0O3pvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlJiMzNDssCiAgICAmIzM0O3pvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgWk9ORV9ERVZJQ0UgcGFnZXMgYnkgdXNpbmcgYSB0ZW1wbGF0ZSBhbmQgbm9uLXRlbXBvcmFsIG1lbWNweS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIHdoZW4gcHJvYmluZyBkZXZpY2VzIGxpa2UgUE1FTSwgREFYLCBvciBQQ0kgUDJQRE1BLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMWZhMzAwMDdhYmFhMTg3ZjQ4ODIzN2Q3MDkxNTE4MDBjNzJmZjI2MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDI4IDAxOjI2OjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaAppbmRleCA0NjM1NjE2ODYzZjUzZC4uYmM2YTlmMzRiMzQ2YWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oCkBAIC04Miw3ICYjNDM7ODIsMzUgQEAgaW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpOwogI2lmZGVmIENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEUKICNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZX0ZMVVNIQ0FDSEUgMQogdm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTsKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCkKJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzgodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUoJiMzNDttb3ZudGlxICUxLCAlMCYjMzQ7CiYjNDM7CQkgICAgIDogJiMzNDs9bSYjMzQ7KCoodTY0ICopZHN0KQomIzQzOwkJICAgICA6ICYjMzQ7ciYjMzQ7KCooY29uc3QgdTY0ICopc3JjKQomIzQzOwkJICAgICA6ICYjMzQ7bWVtb3J5JiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzE2KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQomIzQzO3sKJiM0MzsJbW92bnRpXzgoZHN0LCBzcmMpOwomIzQzOwltb3ZudGlfOChkc3QgJiM0MzsgOCwgc3JjICYjNDM7IDgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzMyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQomIzQzO3sKJiM0MzsJbW92bnRpXzE2KGRzdCwgc3JjKTsKJiM0MzsJbW92bnRpXzE2KGRzdCAmIzQzOyAxNiwgc3JjICYjNDM7IDE2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV82NCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKJiM0Mzt7CiYjNDM7CW1vdm50aV8zMihkc3QsIHNyYyk7CiYjNDM7CW1vdm50aV8zMihkc3QgJiM0MzsgMzIsIHNyYyAmIzQzOyAzMik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywKJiM0MzsJCQkJCSAgICAgIHNpemVfdCBjbnQpCiB7CiAJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGNudCkpIHsKIAkJc3dpdGNoIChjbnQpIHsKQEAgLTk2LDEwICYjNDM7MTI0LDQ4IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90CiAJCQkJYXNtICgmIzM0O21vdm50aXEgJTEsICUwJiMzNDsgOiAmIzM0Oz1tJiMzNDsoKih1NjQgKilkc3QpIDogJiMzNDtyJiMzNDsoKih1NjQgKilzcmMpKTsKIAkJCQlhc20gKCYjMzQ7bW92bnRpcSAlMSwgJTAmIzM0OyA6ICYjMzQ7PW0mIzM0OygqKHU2NCAqKShkc3QgJiM0MzsgOCkpIDogJiMzNDtyJiMzNDsoKih1NjQgKikoc3JjICYjNDM7IDgpKSk7CiAJCQkJcmV0dXJuOwomIzQzOwkJCS8qCiYjNDM7CQkJICogVGhlIHJlbGV2YW50IGZpeGVkLXNpemUgY29waWVzIGhlcmUgYXJlIHRoZQomIzQzOwkJCSAqIHg4Nl82NCBzdHJ1Y3QgcGFnZSBzaXplczogNjQsIDgwLCBhbmQgOTYgYnl0ZXMuCiYjNDM7CQkJICogS2VlcCAzMi1ieXRlIGFuZCA0OC1ieXRlIGNvcGllcyBpbmxpbmUgYXMgd2VsbAomIzQzOwkJCSAqIGluc3RlYWQgb2Ygc2VuZGluZyB0aG9zZSBuZWFyYnkgZml4ZWQtc2l6ZQomIzQzOwkJCSAqIGNhc2VzIGJhY2sgdG8gX19tZW1jcHlfZmx1c2hjYWNoZSgpLgomIzQzOwkJCSAqLwomIzQzOwkJCWNhc2UgMzI6CiYjNDM7CQkJCW1vdm50aV8zMihkc3QsIHNyYyk7CiYjNDM7CQkJCXJldHVybjsKJiM0MzsJCQljYXNlIDQ4OgomIzQzOwkJCQltb3ZudGlfMzIoZHN0LCBzcmMpOwomIzQzOwkJCQltb3ZudGlfMTYoZHN0ICYjNDM7IDMyLCBzcmMgJiM0MzsgMzIpOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJY2FzZSA2NDoKJiM0MzsJCQkJbW92bnRpXzY0KGRzdCwgc3JjKTsKJiM0MzsJCQkJcmV0dXJuOwomIzQzOwkJCWNhc2UgODA6CiYjNDM7CQkJCW1vdm50aV82NChkc3QsIHNyYyk7CiYjNDM7CQkJCW1vdm50aV8xNihkc3QgJiM0MzsgNjQsIHNyYyAmIzQzOyA2NCk7CiYjNDM7CQkJCXJldHVybjsKJiM0MzsJCQljYXNlIDk2OgomIzQzOwkJCQltb3ZudGlfNjQoZHN0LCBzcmMpOwomIzQzOwkJCQltb3ZudGlfMzIoZHN0ICYjNDM7IDY0LCBzcmMgJiM0MzsgNjQpOwomIzQzOwkJCQlyZXR1cm47CiAJCX0KIAl9CiYjNDM7CiAJX19tZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTsKIH0KJiM0MzsKJiM0MzsjZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbCBtZW1jcHlfbm9udGVtcG9yYWwKJiM0MzsvKgomIzQzOyAqIFJldXNlIHRoZSBleGlzdGluZyB4ODYgZmx1c2hjYWNoZSBiYWNrZW5kIGFzIHRoZSBub24tdGVtcG9yYWwgY29weQomIzQzOyAqIHByaW1pdGl2ZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X25vbnRlbXBvcmFsKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLAomIzQzOwkJc2l6ZV90IGNudCkKJiM0Mzt7CiYjNDM7CW1lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpOwomIzQzO30KJiM0MzsKICNlbmRpZgogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IDQ4NWRmOWMyZGJkZGIzLi40MzM0M2JmY2U0OTM2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtMjU0MSwxMSAmIzQzOzI1NDEsMjIgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb24oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgc2VjdGlvbikKIAlwYWdlLSZndDtmbGFncy5mIHw9IChzZWN0aW9uICZhbXA7IFNFQ1RJT05TX01BU0spICZsdDsmbHQ7IFNFQ1RJT05TX1BHU0hJRlQ7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGZuKQomIzQzO3sKJiM0MzsJc2V0X3BhZ2Vfc2VjdGlvbihwYWdlLCBwZm5fdG9fc2VjdGlvbl9ucihwZm4pKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpCiB7CiAJcmV0dXJuIChtZGYuZiAmZ3Q7Jmd0OyBTRUNUSU9OU19QR1NISUZUKSAmYW1wOyBTRUNUSU9OU19NQVNLOwogfQogI2Vsc2UgLyogIVNFQ1RJT05fSU5fUEFHRV9GTEFHUyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJdW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24obWVtZGVzY19mbGFnc190IG1kZikKIHsKIAlyZXR1cm4gMDsKQEAgLTI3NjgsOSAmIzQzOzI3NzksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfbGlua3Moc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gem9uZV90eXBlIHpvbmUsCiB7CiAJc2V0X3BhZ2Vfem9uZShwYWdlLCB6b25lKTsKIAlzZXRfcGFnZV9ub2RlKHBhZ2UsIG5vZGUpOwotI2lmZGVmIFNFQ1RJT05fSU5fUEFHRV9GTEFHUwotCXNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7Ci0jZW5kaWYKJiM0MzsJc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihwYWdlLCBwZm4pOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCmluZGV4IDU3MDJkYWNhNDMyNmI3Li42Y2I1Y2RkMDExNThiMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCkBAIC0yNzgsNiAmIzQzOzI3OCwxOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpCiB9CiAjZW5kaWYKIAomIzQzOyNpZm5kZWYgbWVtY3B5X25vbnRlbXBvcmFsCiYjNDM7LyoKJiM0MzsgKiBtZW1jcHlfbm9udGVtcG9yYWwoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlCiYjNDM7ICogYXJjaGl0ZWN0dXJlIGhhcyBhIHN1aXRhYmxlIGJhY2tlbmQuIEFyY2hpdGVjdHVyZXMgd2l0aG91dCBhCiYjNDM7ICogc3BlY2lhbGl6ZWQgYmFja2VuZCBmYWxsIGJhY2sgdG8gbWVtY3B5KCkuIEtlZXAgdGhpcyBhcyBhCiYjNDM7ICogZnVuY3Rpb24tbGlrZSBtYWNybyBzbyB0aGUgY29tcGlsZXIgY2FuIHN0aWxsIHNlZSB0aGUgb3JpZ2luYWwKJiM0MzsgKiBtZW1jcHkoKSBjYWxsIHNpdGUgYW5kIHByZXNlcnZlIHRoZSB1c3VhbCBGT1JUSUZZIGNvdmVyYWdlIHdoZW4KJiM0MzsgKiBvYmplY3Qgc2l6ZXMgcmVtYWluIHZpc2libGUgdGhlcmUsIHdoaWxlIGtlZXBpbmcgdGhlIEFQSSB2b2lkLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsKGRzdCwgc3JjLCBsZW4pIFwKJiM0MzsJKCh2b2lkKW1lbWNweShkc3QsIHNyYywgbGVuKSkKJiM0MzsjZW5kaWYKJiM0MzsKIHZvaWQgKm1lbWNocl9pbnYoY29uc3Qgdm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTsKIGNoYXIgKnN0cnJlcGxhY2UoY2hhciAqc3RyLCBjaGFyIG9sZCwgY2hhciBuZXcpOwogCmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmMKaW5kZXggMGY2NDkwOWU4ZDIwZTIuLmFlNDJhMTMxMWUxZDE4IDEwMDY0NAotLS0gYS9tbS9tbV9pbml0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW1faW5pdC5jCkBAIC0xMDA1LDExICYjNDM7MTAwNSwzNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbWVtbWFwX2luaXQodm9pZCkKIH0KIAogI2lmZGVmIENPTkZJR19aT05FX0RFVklDRQotc3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLAomIzQzOy8qCiYjNDM7ICogUmV0dXJuIHRydWUgd2hlbiBtZW1tYXBfaW5pdF96b25lX2RldmljZSgpIG11c3QgaW5pdGlhbGl6ZSB0aGUgcGFnZQomIzQzOyAqIHJlZmNvdW50IHRvIDAuIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluCiYjNDM7ICogdGhlIGZyZWUgcGF0aCwgd2hpbGUgdGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZQomIzQzOyAqIGFuZCByYWlzZSB0aGUgY291bnQgYWdhaW4gd2hlbiB0aGUgYWxsb2NhdG9yIG9yIGRyaXZlciBoYW5kcyB0aGUgcGFnZQomIzQzOyAqIG91dC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcGFnZW1hcF9yZXF1aXJlc19yZWZjb3VudF9yZXNldChjb25zdCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogTUVNT1JZX0RFVklDRV9HRU5FUklDIHBhZ2VzIHJlZ2FpbiBhIHJlZmNvdW50IG9mIDEgaW4gdGhlIGZyZWUKJiM0MzsJICogcGF0aC4gVGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZSBhbmQgcmFpc2UKJiM0MzsJICogdGhlIGNvdW50IGFnYWluIHdoZW4gdGhlIGFsbG9jYXRvciBvciBkcml2ZXIgaGFuZHMgdGhlIHBhZ2Ugb3V0LgomIzQzOwkgKi8KJiM0MzsJc3dpdGNoIChwZ21hcC0mZ3Q7dHlwZSkgewomIzQzOwljYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOgomIzQzOwljYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURToKJiM0MzsJY2FzZSBNRU1PUllfREVWSUNFX0NPSEVSRU5UOgomIzQzOwljYXNlIE1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQToKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwljYXNlIE1FTU9SWV9ERVZJQ0VfR0VORVJJQzoKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9fcmVmIF9fem9uZV9kZXZpY2VfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbiwKIAkJCQkJICB1bnNpZ25lZCBsb25nIHpvbmVfaWR4LCBpbnQgbmlkLAogCQkJCQkgIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApCiB7Ci0KIAlfX2luaXRfc2luZ2xlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkKTsKIAogCS8qCkBAIC0xMDI4LDI3ICYjNDM7MTA1NCw1NCBAQCBzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sCiAJICovCiAJcGFnZV9mb2xpbyhwYWdlKS0mZ3Q7cGdtYXAgPSBwZ21hcDsKIAlwYWdlLSZndDt6b25lX2RldmljZV9kYXRhID0gTlVMTDsKJiM0Mzt9CiAKLQkvKgotCSAqIFpPTkVfREVWSUNFIHBhZ2VzIG90aGVyIHRoYW4gTUVNT1JZX1RZUEVfR0VORVJJQyBhcmUgcmVsZWFzZWQKLQkgKiBkaXJlY3RseSB0byB0aGUgZHJpdmVyIHBhZ2UgYWxsb2NhdG9yIHdoaWNoIHdpbGwgc2V0IHRoZSBwYWdlIGNvdW50Ci0JICogdG8gMSB3aGVuIGFsbG9jYXRpbmcgdGhlIHBhZ2UuCi0JICoKLQkgKiBNRU1PUllfVFlQRV9HRU5FUklDIGFuZCBNRU1PUllfVFlQRV9GU19EQVggcGFnZXMgYXV0b21hdGljYWxseSBoYXZlCi0JICogdGhlaXIgcmVmY291bnQgcmVzZXQgdG8gb25lIHdoZW5ldmVyIHRoZXkgYXJlIGZyZWVkIChpZS4gYWZ0ZXIKLQkgKiB0aGVpciByZWZjb3VudCBkcm9wcyB0byAwKS4KLQkgKi8KLQlzd2l0Y2ggKHBnbWFwLSZndDt0eXBlKSB7Ci0JY2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDoKLQljYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURToKLQljYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6Ci0JY2FzZSBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE6CiYjNDM7c3RhdGljIHZvaWQgX19yZWYgem9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3coc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQl1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCwKJiM0MzsJCXN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApCiYjNDM7ewomIzQzOwlfX3pvbmVfZGV2aWNlX3BhZ2VfaW5pdChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTsKJiM0MzsJaWYgKHBhZ2VtYXBfcmVxdWlyZXNfcmVmY291bnRfcmVzZXQocGdtYXApKQogCQlzZXRfcGFnZV9jb3VudChwYWdlLCAwKTsKLQkJYnJlYWs7CiYjNDM7fQogCi0JY2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6Ci0JCWJyZWFrOwotCX0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgem9uZV9kZXZpY2VfdGFpbF9wYWdlX2luaXQoc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQl1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCwKJiM0MzsJCXN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGNvbnN0IHN0cnVjdCBwYWdlICpoZWFkLAomIzQzOwkJdW5zaWduZWQgaW50IG9yZGVyKQomIzQzO3sKJiM0MzsJem9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3cocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7CiYjNDM7CXByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7CiYjNDM7CXNldF9wYWdlX2NvdW50KHBhZ2UsIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqICYjMzk7dGVtcGxhdGUmIzM5OyBpcyBhIHJldXNhYmxlIHBhZ2UgcHJvdG90eXBlIHJhdGhlciB0aGFuIGEgc3RyaWN0bHkgaW1tdXRhYmxlCiYjNDM7ICogb2JqZWN0LiBNb3N0IFpPTkVfREVWSUNFIGZpZWxkcyBzdGF5IGNvbnN0YW50IGFjcm9zcyB0aGUgcGFnZXMgY292ZXJlZCBieQomIzQzOyAqIHRoZSBjdXJyZW50IHRlbXBsYXRlLCBidXQgc2VjdGlvbiBiaXRzIGFuZCBwYWdlLSZndDt2aXJ0dWFsIG1heSBzdGlsbCBkZXBlbmQKJiM0MzsgKiBvbiB0aGUgUEZOLiBSZWZyZXNoIHRob3NlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHRoZSB0ZW1wbGF0ZSBiZWZvcmUKJiM0MzsgKiBjb3B5aW5nIGl0IGludG8gQHBhZ2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlKHN0cnVjdCBwYWdlICp0ZW1wbGF0ZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGZuKQomIzQzO3sKJiM0MzsJc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3Bmbih0ZW1wbGF0ZSwgcGZuKTsKJiM0MzsjaWZkZWYgV0FOVF9QQUdFX1ZJUlRVQUwKJiM0MzsJaWYgKCFpc19oaWdobWVtX2lkeChaT05FX0RFVklDRSkpCiYjNDM7CQlzZXRfcGFnZV9hZGRyZXNzKHRlbXBsYXRlLCBfX3ZhKHBmbiAmbHQ7Jmx0OyBQQUdFX1NISUZUKSk7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJdW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlICp0ZW1wbGF0ZSkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqICYjMzk7dGVtcGxhdGUmIzM5OyBjYXJyaWVzIHRoZSBpbnZhcmlhbnQgcG9ydGlvbiBvZiBhIFpPTkVfREVWSUNFIHN0cnVjdAomIzQzOwkgKiBwYWdlLiBVcGRhdGUgdGhlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHBsYWNlIGJlZm9yZSBjb3B5aW5nIGl0CiYjNDM7CSAqIHRvIHRoZSBkZXN0aW5hdGlvbiBwYWdlLgomIzQzOwkgKi8KJiM0MzsJem9uZV9kZXZpY2VfcGFnZV91cGRhdGVfdGVtcGxhdGUodGVtcGxhdGUsIHBmbik7CiYjNDM7CW1lbWNweV9ub250ZW1wb3JhbChwYWdlLCB0ZW1wbGF0ZSwgc2l6ZW9mKCpwYWdlKSk7CiB9CiAKIC8qCkBAIC0xMDgzLDYgJiM0MzsxMTM2LDcgQEAgc3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsCiB7CiAJdW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm4gPSBoZWFkX3BmbiAmIzQzOyBucl9wYWdlczsKIAl1bnNpZ25lZCBpbnQgb3JkZXIgPSBwZ21hcC0mZ3Q7dm1lbW1hcF9zaGlmdDsKJiM0MzsJc3RydWN0IHBhZ2UgdGVtcGxhdGU7CiAKIAkvKgogCSAqIFdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgcGFnZXMsIGluY2x1ZGluZyBzZXR0aW5nIHVwIHBhZ2UgbGlua3MuCkBAIC0xMDkxLDEyICYjNDM7MTE0NSwyNiBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCwKIAkgKiB0aGUgcGFnZXMgaW4gdGhlIHNhbWUgZ28uCiAJICovCiAJX19TZXRQYWdlSGVhZChoZWFkKTsKJiM0MzsKIAlmb3IgKHBmbiA9IGhlYWRfcGZuICYjNDM7IDE7IHBmbiAmbHQ7IGVuZF9wZm47IHBmbiYjNDM7JiM0MzspIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwogCi0JCV9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApOwotCQlwcmVwX2NvbXBvdW5kX3RhaWwocGFnZSwgaGVhZCwgb3JkZXIpOwotCQlzZXRfcGFnZV9jb3VudChwYWdlLCAwKTsKJiM0MzsJCWlmIChwZm4gPT0gaGVhZF9wZm4gJiM0MzsgMSkgewomIzQzOwkJCS8qCiYjNDM7CQkJICogQWxsIHRhaWxzIG9mIHRoZSBzYW1lIGNvbXBvdW5kIHBhZ2Ugc2hhcmUgdGhlCiYjNDM7CQkJICogc3RhdGUgZXN0YWJsaXNoZWQgYnkgcHJlcF9jb21wb3VuZF90YWlsKCkuIFJldXNlCiYjNDM7CQkJICogb25lIHRhaWwgdGVtcGxhdGUgZm9yIHRoZSB3aG9sZSByYW5nZSBhbmQKJiM0MzsJCQkgKiByZWZyZXNoIG9ubHkgdGhlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHRoYXQKJiM0MzsJCQkgKiB0ZW1wbGF0ZSBiZWZvcmUgZWFjaCBjb3B5LgomIzQzOwkJCSAqLwomIzQzOwkJCXpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwKJiM0MzsJCQkJCQkgICBwZ21hcCwgaGVhZCwgb3JkZXIpOwomIzQzOwkJCS8qIGluaXQgdGVtcGxhdGUgcGFnZSAqLwomIzQzOwkJCW1lbWNweSgmYW1wO3RlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLAomIzQzOwkJCQkJCQkgICAgJmFtcDt0ZW1wbGF0ZSk7CiYjNDM7CQl9CiAJfQogCXByZXBfY29tcG91bmRfaGVhZChoZWFkLCBvcmRlcik7CiB9CkBAIC0xMTEzLDYgJiM0MzsxMTgxLDcgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSwKIAl1bnNpZ25lZCBsb25nIHpvbmVfaWR4ID0gem9uZV9pZHgoem9uZSk7CiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7CiAJaW50IG5pZCA9IHBnZGF0LSZndDtub2RlX2lkOwomIzQzOwlzdHJ1Y3QgcGFnZSB0ZW1wbGF0ZTsKIAogCWlmIChXQVJOX09OX09OQ0UoIXBnbWFwIHx8IHpvbmVfaWR4ICE9IFpPTkVfREVWSUNFKSkKIAkJcmV0dXJuOwpAQCAtMTEzMCw3ICYjNDM7MTE5OSwyMSBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLAogCWZvciAocGZuID0gc3RhcnRfcGZuOyBwZm4gJmx0OyBlbmRfcGZuOyBwZm4gJiM0Mzs9IHBmbnNfcGVyX2NvbXBvdW5kKSB7CiAJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKIAotCQlfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTsKJiM0MzsJCWlmIChwZm4gPT0gc3RhcnRfcGZuKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBTZWVkIHRoZSByZXVzYWJsZSBoZWFkLXBhZ2UgdGVtcGxhdGUgZnJvbSB0aGUKJiM0MzsJCQkgKiBmaXJzdCByZWFsIHN0cnVjdCBwYWdlLCBiZWNhdXNlIHRoZSBleGlzdGluZwomIzQzOwkJCSAqIHBhZ2UtaW5pdCBhbmQgcGFnZWJsb2NrIGhlbHBlcnMgZXhwZWN0IGEgcmVhbAomIzQzOwkJCSAqIG1lbW1hcCBlbnRyeSByYXRoZXIgdGhhbiBhIHN0YWNrIG9iamVjdC4KJiM0MzsJCQkgKi8KJiM0MzsJCQl6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LAomIzQzOwkJCQkJCSAgIG5pZCwgcGdtYXApOwomIzQzOwkJCS8qIGluaXQgdGVtcGxhdGUgcGFnZSAqLwomIzQzOwkJCW1lbWNweSgmYW1wO3RlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLAomIzQzOwkJCQkJCQkgICAgJmFtcDt0ZW1wbGF0ZSk7CiYjNDM7CQl9CiAKIAkJaWYgKElTX0FMSUdORUQocGZuLCBQQUdFU19QRVJfU0VDVElPTikpCiAJCQljb25kX3Jlc2NoZWQoKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkyNQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQ1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgT3B0aW1pemF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgb3B0aW1pemVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IHBhZ2VgIGZvciBgWk9ORV9ERVZJQ0VgIG1lbW9yeS4gSXQmIzM5O3MgdXNpbmcgYG1lbWNweV9ub250ZW1wb3JhbGAgdG8gY29weSBhIHByZS1kZWZpbmVkIHRlbXBsYXRlIGluc3RlYWQgb2YgcGFpbnN0YWtpbmdseSBpbml0aWFsaXppbmcgZWFjaCBwYWdlIGluZGl2aWR1YWxseSwgd2hpY2ggaXMgYSBjbGV2ZXIgYXBwcm9hY2guIFRoaXMgb3B0aW1pemF0aW9uIHRhcmdldHMgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBhbmQgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCwgYm90aCBvZiB3aGljaCBhcmUgY3JpdGljYWwgaW4gbWVtb3J5IG1hbmFnZW1lbnQuIEl0IGFsc28gbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBhbiB4ODYtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgYG1lbWNweV9ub250ZW1wb3JhbGAgdXNpbmcgYG1vdm50aWAgaW5zdHJ1Y3Rpb25zLCBhIG5pY2UgbG93LWxldmVsIG9wdGltaXphdGlvbi4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpcyB0aGlzIHJlYWNoYWJsZSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHdvcnRoIGZ1enppbmc/IGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgaXMgdHJpZ2dlcmVkIHdoZW4gYFpPTkVfREVWSUNFYCBtZW1vcnkgaXMgaG90cGx1Z2dlZC4gVGhhdCYjMzk7cyB0eXBpY2FsbHkgZm9yIERBWCwgUE1FTSwgYW5kIHRoZSBsaWtlLiBOb3csIGNhbiB0aGlzIGJlIHJlYWNoZWQgaW4gYSBjb21tb24gc2V0dXAgbGlrZSBRRU1VPyBBYnNvbHV0ZWx5ISBXZSBjYW4gZW11bGF0ZSBQTUVNL05WRElNTSBkZXZpY2VzIGluIFFFTVUsIHdlIGNhbiB1c2UgdGhlIGBtZW1tYXA9YCBrZXJuZWwgcGFyYW1ldGVyIG9yIGV2ZW4gdXRpbGl6ZSBgbW1hcGAgd2l0aCBEQVguIEhtbSwgd2FpdCBhIG1pbnV0ZSwgSSByZW1lbWJlciBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIGNhbGxlZCBmcm9tIGBkZXZtX21lbXJlbWFwX3BhZ2VzYC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgYW5kIHNlZSB3aGF0IGNhbGxzIHRoYXQgZnVuY3Rpb24uICpjaGVja3MgY29kZSogT2theSwgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGRyaXZlcnMvZGF4L3N1cGVyLmNgLCBgZHJpdmVycy9udmRpbW0vcG1lbS5jYCwgYW5kIGBkcml2ZXJzL3BjaS9wMnBkbWEuY2AuIEludGVyZXN0aW5nIQoKVGhlIGJpZyBxdWVzdGlvbiBub3cgaXMsIGNhbiBzeXprYWxsZXIgdHJpZ2dlciBgZGV2bV9tZW1yZW1hcF9wYWdlc2AgdGhyb3VnaCwgcGVyaGFwcywgc29tZSBsb29wIGRldmljZSwgYSBwbWVtIGRldmljZSwgb3IgZXZlbiBwMnBkbWE/IEFjdHVhbGx5LCB3YWl0LCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIGEgY29yZSBNTSBmdW5jdGlvbiwgc28gaXQmIzM5O3MgYSBkZWZpbml0ZSAmIzM0O3llcyYjMzQ7IHRvIGNvcmUga2VybmVsIGxvZ2ljLiBOb3csIGxldCYjMzk7cyByZWZvY3VzLiBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiwgeWVzLCBidXQgaXQgY2hhbmdlcyBob3cgcGFnZXMgYXJlIGluaXRpYWxpemVkLCBtZWFuaW5nIGl0IHRvdWNoZXMgY29yZSBNTSBsb2dpYy4gQWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gaGVyZSBhcmUgZGVmaW5pdGVseSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFuZCBgbWVtbWFwX2luaXRfY29tcG91bmRgLgoKRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIGlmIGBaT05FX0RFVklDRWAgaXMgZXZlbiBlbmFibGVkIGluIHR5cGljYWwgY29uZmlncy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX1pPTkVfREVWSUNFYCBpcyBzZXQuIExldCBtZSBqdXN0IGNoZWNrIGBtbS9tbV9pbml0LmNgIHRvIGNvbmZpcm0gd2hlcmUgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW1hcF9pbml0X3pvbmVfZGV2aWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXJlbWFwLmM9MTQ0PXN0YXRpYyBpbnQgcGFnZW1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zLFxuLS1cbm1tL21lbXJlbWFwLmMtMjQxLVx0ICovXG5tbS9tZW1yZW1hcC5jOjI0MjpcdG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKFx1MDAyNk5PREVfREFUQShuaWQpLVx1MDAzZW5vZGVfem9uZXNbWk9ORV9ERVZJQ0VdLFxubW0vbWVtcmVtYXAuYy0yNDMtXHRcdFx0XHRQSFlTX1BGTihyYW5nZS1cdTAwM2VzdGFydCksXG4tLVxubW0vbW1faW5pdC5jPTk2OD1zdGF0aWMgdm9pZCBfX2luaXQgbWVtbWFwX2luaXQodm9pZClcbi0tXG5tbS9tbV9pbml0LmMtMTAwOC0vKlxubW0vbW1faW5pdC5jOjEwMDk6ICogUmV0dXJuIHRydWUgd2hlbiBtZW1tYXBfaW5pdF96b25lX2RldmljZSgpIG11c3QgaW5pdGlhbGl6ZSB0aGUgcGFnZVxubW0vbW1faW5pdC5jLTEwMTAtICogcmVmY291bnQgdG8gMC4gTUVNT1JZX0RFVklDRV9HRU5FUklDIHBhZ2VzIHJlZ2FpbiBhIHJlZmNvdW50IG9mIDEgaW5cbi0tXG5tbS9tbV9pbml0LmM9MTEzMT1zdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcbi0tXG5tbS9tbV9pbml0LmMtMTE3MS1cbm1tL21tX2luaXQuYzoxMTcyOnZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG5tbS9tbV9pbml0LmMtMTE3My1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyOTAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBhbmQgaXRzIFVzYWdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCBodW5jaCB0ZWxscyBtZSB0aGlzIGlzIHdoZXJlIHNvbWUgY3JpdGljYWwgaW5pdGlhbGl6YXRpb24gb3Igc2V0dXAgZm9yIG1lbW9yeSBtYXBwaW5nIGlzIGhhbmRsZWQgd2l0aGluIGEgc3BlY2lmaWMgem9uZSBvciBkZXZpY2UgY29udGV4dC4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgKmhvdyogaXQmIzM5O3MgYmVpbmcgdXNlZC4gVGhlIGNhbGwgZ3JhcGggaXMgd2hhdCBJIHdpbGwgbG9vayBhdC4KCk5vdywgSSBuZWVkIHRvIHRyYWNlIHRoZSBjb250cm9sIGZsb3cuIExldCYjMzk7cyBzZWUuLi5gZGV2bV9tZW1yZW1hcF9wYWdlc2AgaXMgYSBsaWtlbHkgc3RhcnRpbmcgcG9pbnQgYmVjYXVzZSB0aGF0JiMzOTtzIHdoYXQgc2VlbXMgdG8gcmVsYXRlIHRvIHRoZSAmIzM5O2RldmljZSBtYW5hZ2VkIG1lbW9yeSByZW1hcHBpbmcmIzM5Oy4gVGhhdCBjYWxscyBgcGFnZW1hcF9yYW5nZWAuIEFuZCAqYWhhISogYHBhZ2VtYXBfcmFuZ2VgIGNhbGxzIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIFNvIHRoZSBkZXBlbmRlbmN5IGlzIGNsZWFyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBkZXZtX21lbXJlbWFwX3BhZ2VzYCBkb2VzIGF0IHRoZSB0b3AsIHNpbmNlIGl0IGlzIHRoZSBzdGFydGluZyBwb2ludC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udGV4dCBpbiB3aGljaCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIGJlaW5nIGludm9rZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2bV9tZW1yZW1hcF9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9Mjc0PVRoZXNlIGNhbiBiZSBhbGxvY2F0ZWQgYW5kIGZyZWVkIHdpdGg6OlxuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yOTAtXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjkxOlRoZXJlIGFyZSBhbHNvIGRldm1fcmVxdWVzdF9mcmVlX21lbV9yZWdpb24oKSwgZGV2bV9tZW1yZW1hcF9wYWdlcygpLFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI5Mi1kZXZtX21lbXVubWFwX3BhZ2VzKCksIGFuZCBkZXZtX3JlbGVhc2VfbWVtX3JlZ2lvbigpIHdoZW4gdGhlIHJlc291cmNlcyBjYW5cbi0tXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q9MTQxPXRvIGtlZXAgdGhlIG1lbW9yeSBwaW5uZWQgZm9yIGFjdGl2ZSB1c2UuIGBaT05FX0RFVklDRWAsIHZpYVxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0OjE0Mjo6YzpmdW5jOmBkZXZtX21lbXJlbWFwX3BhZ2VzYCwgcGVyZm9ybXMganVzdCBlbm91Z2ggbWVtb3J5IGhvdHBsdWcgdG9cbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdC0xNDMtdHVybiBvbiA6YzpmdW5jOmBwZm5fdG9fcGFnZWAsIDpjOmZ1bmM6YHBhZ2VfdG9fcGZuYCwgYW5kXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0PTE1Nz1tZW1vcnkgaG90cGx1Zy4gU3ViLXNlY3Rpb24gc3VwcG9ydCBhbGxvd3MgZm9yIDJNQiBhcyB0aGUgY3Jvc3MtYXJjaFxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0OjE1ODpjb21tb24gYWxpZ25tZW50IGdyYW51bGFyaXR5IGZvciA6YzpmdW5jOmBkZXZtX21lbXJlbWFwX3BhZ2VzYC5cbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdC0xNTktXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdD0yMjA9bWlncmF0ZV92bWFfZmluYWxpemUoKSDlh73mlbDml6jlnKjkvb/pqbHliqjnqIvluo/mm7TmmJPkuo7nvJblhpnlubbpm4bkuK3ot6jpqbHliqjnqIvluo/nmoTpgJrnlKjku6PnoIHjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI0MS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjQyOui/mOaciWRldm1fcmVxdWVzdF9mcmVlX21lbV9yZWdpb24oKSwgZGV2bV9tZW1yZW1hcF9wYWdlcygpLFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNDMtZGV2bV9tZW11bm1hcF9wYWdlcygpIOWSjCBkZXZtX3JlbGVhc2VfbWVtX3JlZ2lvbigpIOW9k+i1hOa6kOWPr+S7pee7keWumuWIsCBgYHN0cnVjdCBkZXZpY2VgYC5cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0PTEwNz1aT05FX0RFVklDRVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtMTExLeS6i+WunuacieWFs++8mui/meS6m+WcsOWdgOiMg+WbtOeahOmhtemdouWvueixoeS7juacquiiq+WcqOe6v+agh+iusOi/h++8jOiAjOS4lOW/hemhu+WvueiuvuWkh+i/m+ihjOW8leeUqO+8jOiAjOS4jeS7heS7hVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdDoxMTI65piv6aG16Z2i77yM5Lul5L+d5oyB5YaF5a2Y6KKr4oCc6ZSB5a6a4oCd5Lul5L6/5L2/55So44CCIGBaT05FX0RFVklDRWAg77yM6YCa6L+HIDpjOmZ1bmM6YGRldm1fbWVtcmVtYXBfcGFnZXNgIO+8jFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdC0xMTMt5Li657uZ5a6a55qEcGZuc+iMg+WbtOaJp+ihjOi2s+Wkn+eahOWGheWtmOeDreaPkuaLlOadpeW8gOWQryA6YzpmdW5jOmBwZm5fdG9fcGFnZWDvvIxcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0LTEyMi06YzpmdW5jOmBhcmNoX2FkZF9tZW1vcnlgIO+8jOWNs+WGheWtmOeDreaPkuaLlOeahOS4iuWNiumDqOWIhuOAguWtkOauteaUr+aMgeWFgeiuuDJNQuS9nOS4ulxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdDoxMjM6OmM6ZnVuYzpgZGV2bV9tZW1yZW1hcF9wYWdlc2Ag55qE6Leo5p625p6E6YCa55So5a+56b2Q6aKX57KS5bqm44CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0LTEyNC1cbi0tXG5kcml2ZXJzL2RheC9kZXZpY2UuYz0zODA9c3RhdGljIGludCBkZXZfZGF4X3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxuLS1cbmRyaXZlcnMvZGF4L2RldmljZS5jLTQzNC1cdFx0XHRvcmRlcl9iYXNlXzIoZGV2X2RheC1cdTAwM2VhbGlnbiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5kcml2ZXJzL2RheC9kZXZpY2UuYzo0MzU6XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBnbWFwKTtcbmRyaXZlcnMvZGF4L2RldmljZS5jLTQzNi1cdGlmIChJU19FUlIoYWRkcikpXG4tLVxuZHJpdmVycy9kYXgvZnNkZXYuYz0yMDc9c3RhdGljIGludCBmc2Rldl9kYXhfcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4tLVxuZHJpdmVycy9kYXgvZnNkZXYuYy0yNzMtXG5kcml2ZXJzL2RheC9mc2Rldi5jOjI3NDpcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGdtYXApO1xuZHJpdmVycy9kYXgvZnNkZXYuYy0yNzUtXHRpZiAoSVNfRVJSKGFkZHIpKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9MTAyNj1pbnQga2dkMmtmZF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtMTA2Ny1cdCAqL1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYzoxMDY4Olx0ciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoYWRldi1cdTAwM2VkZXYsIHBnbWFwKTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtMTA2OS1cdGlmIChJU19FUlIocikpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9MTc2MD1zdGF0aWMgc3RydWN0IHhlX3BhZ2VtYXAgKnhlX3BhZ2VtYXBfY3JlYXRlKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCBzdHJ1Y3QgeGVfdnJhbV9yZWdpb24gKnZyKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xODAxLVx0cGFnZW1hcC1cdTAwM2VvcHMgPSBkcm1fcGFnZW1hcF9wYWdlbWFwX29wc19nZXQoKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxODAyOlx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBwYWdlbWFwKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xODAzLVx0aWYgKElTX0VSUihhZGRyKSkge1xuLS1cbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jPTM4MT1zdGF0aWMgaW50IG1zaHZfdnRsX2lvY3RsX2FkZF92dGwwX21lbShzdHJ1Y3QgbXNodl92dGwgKnZ0bCwgdm9pZCBfX3VzZXIgKmFyZylcbi0tXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MTktXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYzo0MjA6XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhtZW1fZGV2LCBwZ21hcCk7XG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MjEtXHRpZiAoSVNfRVJSKGFkZHIpKSB7XG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYzo0MjI6XHRcdGRldl9lcnIodnRsLVx1MDAzZW1vZHVsZV9kZXYsIFwmIzM0O2Rldm1fbWVtcmVtYXBfcGFnZXMgZXJyb3I6ICVsZFxcblwmIzM0OywgUFRSX0VSUihhZGRyKSk7XG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MjMtXHRcdGtmcmVlKHBnbWFwKTtcbi0tXG5kcml2ZXJzL252ZGltbS9LY29uZmlnPTE0Mz1jb25maWcgTlZESU1NX1RFU1RfQlVJTERcbi0tXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTE1MS1cdCAgb3RoZXJ3aXNlIGhlbHBzIGNhdGNoIGJ1aWxkIGVycm9ycyBpbmR1Y2VkIGJ5IGNoYW5nZXMgdG8gdGhlXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjE1MjpcdCAgY29yZSBkZXZtX21lbXJlbWFwX3BhZ2VzKCkgaW1wbGVtZW50YXRpb24gYW5kIG90aGVyXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTE1My1cdCAgaW5mcmFzdHJ1Y3R1cmUuXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTQ0OD1zdGF0aWMgaW50IHBtZW1fYXR0YWNoX2Rpc2soc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01MTctXHRcdHBtZW0tXHUwMDNlcGdtYXAub3BzID0gXHUwMDI2ZnNkYXhfcGFnZW1hcF9vcHM7XG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NTE4Olx0XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIFx1MDAyNnBtZW0tXHUwMDNlcGdtYXApO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUxOS1cdFx0cGZuX3NiID0gbmRfcGZuLVx1MDAzZXBmbl9zYjtcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTMwLVx0XHRwbWVtLVx1MDAzZXBnbWFwLm9wcyA9IFx1MDAyNmZzZGF4X3BhZ2VtYXBfb3BzO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jOjUzMTpcdFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBcdTAwMjZwbWVtLVx1MDAzZXBnbWFwKTtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01MzItXHRcdGJiX3JhbmdlID0gcG1lbS1cdTAwM2VwZ21hcC5yYW5nZTtcbi0tXG5kcml2ZXJzL3BjaS9wMnBkbWEuYz0zODc9aW50IHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyLCBzaXplX3Qgc2l6ZSxcbi0tXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy00MzYtXG5kcml2ZXJzL3BjaS9wMnBkbWEuYzo0Mzc6XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGdtYXApO1xuZHJpdmVycy9wY2kvcDJwZG1hLmMtNDM4LVx0aWYgKElTX0VSUihhZGRyKSkge1xuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmM9NTUzPWRjc3NibGtfYWRkX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmMtNjk2LVx0XHRkZXZfaW5mby1cdTAwM2VwZ21hcC5ucl9yYW5nZVx0PSAxO1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYzo2OTc6XHRcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKFx1MDAyNmRldl9pbmZvLVx1MDAzZWRldiwgXHUwMDI2ZGV2X2luZm8tXHUwMDNlcGdtYXApO1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYy02OTgtXHRcdGlmIChJU19FUlIoYWRkcikpIHtcbi0tXG5mcy9mdXNlL3ZpcnRpb19mcy5jPTEwNzY9c3RhdGljIGludCB2aXJ0aW9fZnNfc2V0dXBfZGF4KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LCBzdHJ1Y3QgdmlydGlvX2ZzICpmcylcbi0tXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMTYtXHQvKiBJZGVhbGx5IHdlIHdvdWxkIGRpcmVjdGx5IHVzZSB0aGUgUENJIEJBUiByZXNvdXJjZSBidXRcbmZzL2Z1c2UvdmlydGlvX2ZzLmM6MTExNzpcdCAqIGRldm1fbWVtcmVtYXBfcGFnZXMoKSB3YW50cyBpdHMgb3duIGNvcHkgaW4gcGdtYXAuICBTb1xuZnMvZnVzZS92aXJ0aW9fZnMuYy0xMTE4LVx0ICogaW5pdGlhbGl6ZSBhIHN0cnVjdCByZXNvdXJjZSBmcm9tIHNjcmF0Y2ggKG9ubHkgdGhlIHN0YXJ0XG4tLVxuZnMvZnVzZS92aXJ0aW9fZnMuYy0xMTI2LVxuZnMvZnVzZS92aXJ0aW9fZnMuYzoxMTI3Olx0ZnMtXHUwMDNld2luZG93X2thZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhcdTAwMjZ2ZGV2LVx1MDAzZWRldiwgcGdtYXApO1xuZnMvZnVzZS92aXJ0aW9fZnMuYy0xMTI4LVx0aWYgKElTX0VSUihmcy1cdTAwM2V3aW5kb3dfa2FkZHIpKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD03Nz1zdHJ1Y3QgZGV2X3BhZ2VtYXBfb3BzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTE1LSAqIEBhbHRtYXA6IHByZS1hbGxvY2F0ZWQvcmVzZXJ2ZWQgbWVtb3J5IGZvciB2bWVtbWFwIGFsbG9jYXRpb25zXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MTE2OiAqIEByZWY6IHJlZmVyZW5jZSBjb3VudCB0aGF0IHBpbnMgdGhlIGRldm1fbWVtcmVtYXBfcGFnZXMoKSBtYXBwaW5nXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTE3LSAqIEBkb25lOiBjb21wbGV0aW9uIGZvciBAcmVmXG4tLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTIzMD12b2lkIG1lbXVubWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApO1xuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjIzMTp2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCk7XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjMyLXZvaWQgZGV2bV9tZW11bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0yNDc9c3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3ByaXZhdGVfc3BsaXRfY2Ioc3RydWN0IGZvbGlvICpvcmlnaW5hbF9mb2xpbyxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjY0LSNlbHNlXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjY1OnN0YXRpYyBpbmxpbmUgdm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjY2LVx0XHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNjgtXHQvKlxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjI2OTpcdCAqIEZhaWwgYXR0ZW1wdHMgdG8gY2FsbCBkZXZtX21lbXJlbWFwX3BhZ2VzKCkgd2l0aG91dFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI3MC1cdCAqIFpPTkVfREVWSUNFIHN1cHBvcnQgZW5hYmxlZCwgdGhpcyByZXF1aXJlcyBjYWxsZXJzIHRvIGZhbGxcbi0tXG5tbS9tZW1yZW1hcC5jPTEzMD1FWFBPUlRfU1lNQk9MX0dQTChtZW11bm1hcF9wYWdlcyk7XG5tbS9tZW1yZW1hcC5jLTEzMS1cbm1tL21lbXJlbWFwLmM6MTMyOnN0YXRpYyB2b2lkIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSh2b2lkICpkYXRhKVxubW0vbWVtcmVtYXAuYy0xMzMte1xuLS1cbm1tL21lbXJlbWFwLmM9MTQ0PXN0YXRpYyBpbnQgcGFnZW1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zLFxuLS1cbm1tL21lbXJlbWFwLmMtMjYxLS8qXG5tbS9tZW1yZW1hcC5jOjI2MjogKiBOb3QgZGV2aWNlIG1hbmFnZWQgdmVyc2lvbiBvZiBkZXZtX21lbXJlbWFwX3BhZ2VzLCB1bmRvbmUgYnlcbm1tL21lbXJlbWFwLmM6MjYzOiAqIG1lbXVubWFwX3BhZ2VzKCkuICBQbGVhc2UgdXNlIGRldm1fbWVtcmVtYXBfcGFnZXMgaWYgeW91IGhhdmUgYSBzdHJ1Y3Rcbm1tL21lbXJlbWFwLmMtMjY0LSAqIGRldmljZSBhdmFpbGFibGUuXG4tLVxubW0vbWVtcmVtYXAuYz0zNTI9RVhQT1JUX1NZTUJPTF9HUEwobWVtcmVtYXBfcGFnZXMpO1xuLS1cbm1tL21lbXJlbWFwLmMtMzU0LS8qKlxubW0vbWVtcmVtYXAuYzozNTU6ICogZGV2bV9tZW1yZW1hcF9wYWdlcyAtIHJlbWFwIGFuZCBwcm92aWRlIG1lbW1hcCBiYWNraW5nIGZvciB0aGUgZ2l2ZW4gcmVzb3VyY2Vcbm1tL21lbXJlbWFwLmMtMzU2LSAqIEBkZXY6IGhvc3RpbmcgZGV2aWNlIGZvciBAcmVzXG4tLVxubW0vbWVtcmVtYXAuYy0zNjctICogICAgJiMzOTtsaXZlJiMzOTsgb24gZW50cnkgYW5kIHdpbGwgYmUga2lsbGVkIGFuZCByZWFwZWQgYXRcbm1tL21lbXJlbWFwLmM6MzY4OiAqICAgIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSgpIHRpbWUsIG9yIGlmIHRoaXMgcm91dGluZSBmYWlscy5cbm1tL21lbXJlbWFwLmMtMzY5LSAqXG4tLVxubW0vbWVtcmVtYXAuYy0zNzMtICovXG5tbS9tZW1yZW1hcC5jOjM3NDp2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbm1tL21lbXJlbWFwLmMtMzc1LXtcbi0tXG5tbS9tZW1yZW1hcC5jLTM4Mi1cbm1tL21lbXJlbWFwLmM6MzgzOlx0ZXJyb3IgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UsXG5tbS9tZW1yZW1hcC5jLTM4NC1cdFx0XHRwZ21hcCk7XG4tLVxubW0vbWVtcmVtYXAuYy0zODgtfVxubW0vbWVtcmVtYXAuYzozODk6RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9tZW1yZW1hcF9wYWdlcyk7XG5tbS9tZW1yZW1hcC5jLTM5MC1cbm1tL21lbXJlbWFwLmM9MzkxPXZvaWQgZGV2bV9tZW11bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG5tbS9tZW1yZW1hcC5jLTM5Mi17XG5tbS9tZW1yZW1hcC5jOjM5MzpcdGRldm1fcmVsZWFzZV9hY3Rpb24oZGV2LCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UsIHBnbWFwKTtcbm1tL21lbXJlbWFwLmMtMzk0LX1cbi0tXG50b29scy90ZXN0aW5nL252ZGltbS9LYnVpbGQ9MTM9bGRmbGFncy15ICYjNDM7PSAtLXdyYXA9X19yZWxlYXNlX3JlZ2lvblxudG9vbHMvdGVzdGluZy9udmRpbW0vS2J1aWxkOjE0OmxkZmxhZ3MteSAmIzQzOz0gLS13cmFwPWRldm1fbWVtcmVtYXBfcGFnZXNcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL0tidWlsZC0xNS1sZGZsYWdzLXkgJiM0Mzs9IC0td3JhcD1pbnNlcnRfcmVzb3VyY2Vcbi0tXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM9MTA4PXN0YXRpYyB2b2lkIGRldl9wYWdlbWFwX3BlcmNwdV9yZWxlYXNlKHN0cnVjdCBwZXJjcHVfcmVmICpyZWYpXG4tLVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTExNC1cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYzoxMTU6dm9pZCAqX193cmFwX2Rldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTExNi17XG4tLVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTEyMS1cdGlmICghbmZpdF9yZXMpXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM6MTIyOlx0XHRyZXR1cm4gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBnbWFwKTtcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMjMtXG4tLVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTEzNC19XG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM6MTM1OkVYUE9SVF9TWU1CT0xfR1BMKF9fd3JhcF9kZXZtX21lbXJlbWFwX3BhZ2VzKTtcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMzYtXG4tLVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0X3Rlc3QuaD0yMTI9dm9pZCAqX193cmFwX2Rldm1fbWVtcmVtYXAoc3RydWN0IGRldmljZSAqZGV2LCByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0X3Rlc3QuaC0yMTMtXHRcdHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKTtcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdF90ZXN0Lmg6MjE0OnZvaWQgKl9fd3JhcF9kZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCk7XG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L25maXRfdGVzdC5oLTIxNS12b2lkICpfX3dyYXBfbWVtcmVtYXAocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3MjkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYGRldm1fbWVtcmVtYXBfcGFnZXNgIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGNhbGwgc2l0ZXMgb2YgYGRldm1fbWVtcmVtYXBfcGFnZXNgLiBJIHNlZSB0aGF0IGBkcml2ZXJzL3BjaS9wMnBkbWEuY2AsIGBkcml2ZXJzL2RheC9kZXZpY2UuY2AsIGBkcml2ZXJzL252ZGltbS9wbWVtLmNgLCBgZnMvZnVzZS92aXJ0aW9fZnMuY2AsIGFuZCBgZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuY2AgYWxsIHVzZSB0aGlzIGZ1bmN0aW9uLiBOb3csIGEga2V5IHF1ZXN0aW9uIGZvciBtZSBpcyB3aGV0aGVyIHN5emthbGxlciBjYW4gcmVhbGlzdGljYWxseSB0cmlnZ2VyIGBkZXZtX21lbXJlbWFwX3BhZ2VzYC4gVGhlIGFuc3dlciBzZWVtcyB0byBiZSB5ZXMg4oCTIGNyZWF0aW5nIGEgbG9vcCBkZXZpY2UsIHBsYXlpbmcgd2l0aCBwbWVtL2RheCBpZiBlbmFibGVkLCB2aXJ0aW9fZnMsIG9yIHAycGRtYSBhcmUgcG90ZW50aWFsIGF2ZW51ZXMuCgpOb3csIHRoaXMgcGF0Y2ggbW9kaWZpZXMgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCwgd2hpY2ggaXMgY2FsbGVkIHdpdGhpbiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgSSBuZWVkIHRvIGV4cGxvcmUgdGhpcyByZWxhdGlvbnNoaXAgZnVydGhlci4gSSByZWFsaXplIHRoYXQgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCBpcyBvbmx5IGFjdHVhbGx5IHJlYWNoZWQgZnJvbSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlmIGBwZ21hcC0mZ3Q7dm1lbW1hcF9zaGlmdGAgaXMgc2V0LiBTbywgdGhpcyBzZXRzIHVwIGEgY29uZGl0aW9uYWwgcGF0aC4KClRoZXJlZm9yZSwgdGhlIG5leHQgcXVlc3Rpb24gaXMsIGlzIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgcmVhY2hhYmxlPyBJdCBzZWVtcyB0aGUgY3J1Y2lhbCBmYWN0b3IgaGVyZSBpcyB0aGUgYHZtZW1tYXBfc2hpZnRgIHZhcmlhYmxlLiBJZiBpdCYjMzk7cyBzZXQsIHRoZW4sIHllcywgaXQgaXMuCgpTbywgSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgdG8gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZSBgdm1lbW1hcF9zaGlmdGAgaXMgc2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW1hcF9pbml0X2NvbXBvdW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21tX2luaXQuYz0xMTE1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjb21wb3VuZF9ucl9wYWdlcyh1bnNpZ25lZCBsb25nIHBmbixcbi0tXG5tbS9tbV9pbml0LmMtMTEzMC1cbm1tL21tX2luaXQuYzoxMTMxOnN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxubW0vbW1faW5pdC5jLTExMzItXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBoZWFkX3Bmbixcbi0tXG5tbS9tbV9pbml0LmM9MTE3Mj12b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuLS1cbm1tL21tX2luaXQuYy0xMjIzLVxubW0vbW1faW5pdC5jOjEyMjQ6XHRcdG1lbW1hcF9pbml0X2NvbXBvdW5kKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXAsXG5tbS9tbV9pbml0LmMtMTIyNS1cdFx0XHRcdCAgICAgY29tcG91bmRfbnJfcGFnZXMocGZuLCBhbHRtYXAsIHBnbWFwKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NzkKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBLZXJuZWwgTWVtb3J5IEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgbWVtY3B5X25vbnRlbXBvcmFsYCBhbmQgaW50ZWdyYXRlcyBpdCBpbnRvIGB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZWAuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBhbiBvcHRpbWl6YXRpb24gZm9yIGluaXRpYWxpemluZyBgc3RydWN0IHBhZ2VgIHNwZWNpZmljYWxseSBmb3IgWk9ORV9ERVZJQ0UgbWVtb3J5LiBJdOKAmXMgZGVmaW5pdGVseSBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5LCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluaywgJiMzNDtXb3J0aCBmdXp6aW5nPyYjMzQ7IEFic29sdXRlbHksIGl0JiMzOTtzIHBhcnQgb2YgdGhlIGtlcm5lbCYjMzk7cyBmdW5jdGlvbmFsIGNvcmUuCgpMZXTigJlzIHplcm8gaW4gb24gc29tZSBrZXkgc3ltYm9scy4gSSYjMzk7bSB0aGlua2luZyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFuZCBgbWVtbWFwX2luaXRfY29tcG91bmRgLiBOb3csIHRoZXNlIGFyZSBjYWxsZWQgZHVyaW5nIGRldmljZSBwcm9iZSDigJMgdGhpbmsgUGVyc2lzdGVudCBNZW1vcnksIERpcmVjdCBBY2Nlc3MgKERBWCksIGFuZCBwb3RlbnRpYWxseSBwZWVyLXRvLXBlZXIgRE1BLiBBcmUgdGhleSAqaG90KiBwYXRocywgbWVhbmluZyBoZWF2aWx5IHVzZWQgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24/IE5vLCB0aGV5JiMzOTtyZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMsIHNvIHRoZXkgYXJlIG5vdCBob3QuIEJ1dCwgYXJlIHRoZXkgKnJlYWNoYWJsZSo/IFllcywgZGVmaW5pdGVseS4gRXZlcnkgdGltZSBhIGRldmljZSB1dGlsaXppbmcgdGhlc2UgbWVtb3J5IHR5cGVzIGlzIHByb2JlZCwgb3IgbWVtb3J5IGlzIGhvdHBsdWdnZWQsIHRoZXNlIGZ1bmN0aW9ucyBjb21lIGludG8gcGxheS4KClRvIGFjdHVhbGx5IGdldCB0byB0aGlzIGNvZGUsIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kgaXMgYENPTkZJR19aT05FX0RFVklDRWAuIFRpbWUgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgQ09ORklHX1pPTkVfREVWSUNFYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpPTkVfREVWSUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTIzMT1jb25maWcgWk9ORV9ETUEzMlxuLS1cbm1tL0tjb25maWctMTIzNS1cbm1tL0tjb25maWc6MTIzNjpjb25maWcgWk9ORV9ERVZJQ0Vcbm1tL0tjb25maWctMTIzNy1cdGJvb2wgXCYjMzQ7RGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzEzOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIFpPTkVfREVWSUNFIGluIG1tL0tjb25maWcqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIHN0cmFpZ2h0IGluLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgYFpPTkVfREVWSUNFYCBpcyBjb25maWd1cmVkLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIGBtbS9LY29uZmlnYC4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgcGxhY2UgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBzeXN0ZW0sIGFuZCB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpb24gYW5kIGFueSBhY2NvbXBhbnlpbmcgZGVwZW5kZW5jaWVzIG9yIGRlZmF1bHQgdmFsdWVzIGZvciBhIG1lbW9yeSB6b25lIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb24gc3lzdGVtIGJlaGF2aW9yLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBmaWxlIGFuZCBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMzYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIzNjpcdGNvbmZpZyBaT05FX0RFVklDRVxuMTIzNzpcdFx0Ym9vbCBcJiMzNDtEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XCYjMzQ7XG4xMjM4Olx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHXG4xMjM5Olx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcbjEyNDA6XHRcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcbjEyNDE6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbjEyNDI6XHRcbjEyNDM6XHRcdGhlbHBcbjEyNDQ6XHRcdCAgRGV2aWNlIG1lbW9yeSBob3RwbHVnIHN1cHBvcnQgYWxsb3dzIGZvciBlc3RhYmxpc2hpbmcgcG1lbSxcbjEyNDU6XHRcdCAgb3Igb3RoZXIgZGV2aWNlIGRyaXZlciBkaXNjb3ZlcmVkIG1lbW9yeSByZWdpb25zLCBpbiB0aGVcbjEyNDY6XHRcdCAgbWVtbWFwLiBUaGlzIGFsbG93cyBwZm5fdG9fcGFnZSgpIGxvb2t1cHMgb2Ygb3RoZXJ3aXNlXG4xMjQ3Olx0XHQgIFwmIzM0O2RldmljZS1waHlzaWNhbFwmIzM0OyBhZGRyZXNzZXMgd2hpY2ggaXMgbmVlZGVkIGZvciBEQVgsIFBDSV9QMlBETUEsIGFuZFxuMTI0ODpcdFx0ICBERVZJQ0VfUFJJVkFURSBmZWF0dXJlcyBhbW9uZyBvdGhlcnMuXG4xMjQ5Olx0XG4xMjUwOlx0XHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgcmVkdWNlIHRoZSBlbnRyb3B5IG9mIHg4NiBLQVNMUiBtZW1vcnlcbjEyNTE6XHRcdCAgcmVnaW9ucy4gRm9yIGV4YW1wbGUgLSBvbiBhIDQ2IGJpdCBzeXN0ZW0sIHRoZSBlbnRyb3B5IGdvZXMgZG93blxuMTI1MjpcdFx0ICBmcm9tIDE2IGJpdHMgdG8gMTUgYml0cy4gVGhlIGFjdHVhbCByZWR1Y3Rpb24gaW4gZW50cm9weSBkZXBlbmRzXG4xMjUzOlx0XHQgIG9uIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMsIG9uIHByb2Nlc3NvciBmZWF0dXJlcywga2VybmVsIGNvbmZpZ1xuMTI1NDpcdFx0ICAoNSBsZXZlbCBwYWdlIHRhYmxlKSBhbmQgcGh5c2ljYWwgbWVtb3J5IHByZXNlbnQgb24gdGhlIHN5c3RlbS5cbjEyNTU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2OTgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBBbmFseXNpcyBvZiBaT05FX0RFVklDRSBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYFpPTkVfREVWSUNFYCBhbmQgd2hhdCBpdCBuZWVkcyB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIEl0IGxvb2tzIGxpa2UgYFpPTkVfREVWSUNFYCBoYXMgYSBwcmV0dHkgY2xlYXIgZGVwZW5kZW5jeSB0cmVlIOKAkyBpdCYjMzk7cyBmdW5kYW1lbnRhbGx5IGxpbmtlZCB0byBgTUVNT1JZX0hPVFBMVUdgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGFuZCBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBNYWtlcyBzZW5zZSwgY29uc2lkZXJpbmcgaXQmIzM5O3MgZGVhbGluZyB3aXRoIG1lbW9yeSByZWdpb25zIHRoYXQgYXJlIGFkZGVkIGFuZCByZW1vdmVkIGR5bmFtaWNhbGx5LiBUaGVyZWZvcmUsIEkgbmVlZCB0byBtYWtlIHN1cmUgYFpPTkVfREVWSUNFYCBpcyBkZWZpbml0ZWx5IGVuYWJsZWQgaW4gbXkgY29uZmlndXJhdGlvbi4KCk5vdywgdGhlIHRyaWNrIGlzIGZpZ3VyaW5nIG91dCAqaG93KiB0byBhY3R1YWxseSB0cmlnZ2VyIHRoaXMgZnVuY3Rpb25hbGl0eS4gSXQgc2VlbXMgbGlrZSB3ZSYjMzk7bGwgbmVlZCBhIGRldmljZSBkcml2ZXIgdGhhdCYjMzk7cyBzcGVjaWZpY2FsbHkgd3JpdHRlbiB0byB1dGlsaXplIGBkZXZtX21lbXJlbWFwX3BhZ2VzYC4gVGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLgoKQmV5b25kIHRoZSBkcml2ZXIsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHdpZGVyIGVjb3N5c3RlbSB0aGF0IHdvdWxkIHN1cHBvcnQgdGhpcy4gVGhlIHdheSB0byBkbyB0aGF0IGxvb2tzIHRvIGJlIHRocm91Z2g6IGBDT05GSUdfUENJX1AyUERNQWAgb3IgYENPTkZJR19EQVhgIG9yIGBDT05GSUdfTlZESU1NX0RBWGAgb3IgYENPTkZJR19ERVZfREFYYCBvciBgQ09ORklHX0ZTX0RBWGAuIEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBlYWNoIG9mIHRoZXNlIG9wdGlvbnMgZG9lcywgaW4gb3JkZXIgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuCgpJIHRoaW5rIGEgZ29vZCBzdGFydGluZyBwb2ludCBpcyBwcm9iYWJseSBgQ09ORklHX1BDSV9QMlBETUFgLiBJIHdpbGwgc3RhcnQgYnkgbG9va2luZyBpbnRvIHRoYXQgb25lIGZpcnN0LCB0byBzZWUgd2hlcmUgaXQgbGVhZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQ0lfUDJQRE1BJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGNpL0tjb25maWc9MTk3PWNvbmZpZyBQQ0lFX1RQSFxuLS1cbmRyaXZlcnMvcGNpL0tjb25maWctMjA1LVxuZHJpdmVycy9wY2kvS2NvbmZpZzoyMDY6Y29uZmlnIFBDSV9QMlBETUFcbmRyaXZlcnMvcGNpL0tjb25maWctMjA3LVx0Ym9vbCBcJiMzNDtQQ0kgcGVlci10by1wZWVyIHRyYW5zZmVyIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyNDAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKlBDSV9QMlBETUEgQ29uZmlndXJhdGlvbiBJbnNwZWN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBQQ0kgUGVlci10by1QZWVyIERNQSBzdXBwb3J0LiBUaGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtIGlzIGEgYmVhc3QsIGJ1dCB0aGUgdXN1YWwgc3RhcnRpbmcgcG9pbnQgZm9yIFBDSS1yZWxhdGVkIG9wdGlvbnMgaXMgdGhlIGBkcml2ZXJzL3BjaS9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIGhlYWQgb3ZlciB0aGVyZSB0byBzZWUgd2hhdCYjMzk7cyBkZWZpbmVkIGZvciBgUENJX1AyUERNQWAuIEhvcGVmdWxseSwgdGhlIGRlc2NyaXB0aW9uIGluIGBLY29uZmlnYCBpcyBjbGVhciBlbm91Z2ggdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdC4gSSBleHBlY3QgaXQgd2lsbCByZWZlcmVuY2Ugc29tZSB1bmRlcmx5aW5nIERNQSBjb250cm9sbGVyIG9wdGlvbnMgb3IgcGVyaGFwcyBzcGVjaWZpYyBoYXJkd2FyZSByZXF1aXJlbWVudHMuIFRoZW4gSSYjMzk7bGwgY29ycmVsYXRlIGl0IHdpdGggdGhlIGNvZGUgdG8gZ2V0IGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGFjdCB0byB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvcGNpL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwNjpcdGNvbmZpZyBQQ0lfUDJQRE1BXG4gMjA3Olx0XHRib29sIFwmIzM0O1BDSSBwZWVyLXRvLXBlZXIgdHJhbnNmZXIgc3VwcG9ydFwmIzM0O1xuIDIwODpcdFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxuIDIwOTpcdFx0I1xuIDIxMDpcdFx0IyBUaGUgbmVlZCBmb3IgdGhlIHNjYXR0ZXJsaXN0IERNQSBidXMgYWRkcmVzcyBmbGFnIG1lYW5zIFBDSSBQMlBETUFcbiAyMTE6XHRcdCMgcmVxdWlyZXMgNjRiaXRcbiAyMTI6XHRcdCNcbiAyMTM6XHRcdGRlcGVuZHMgb24gNjRCSVRcbiAyMTQ6XHRcdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxuIDIxNTpcdFx0c2VsZWN0IE5FRURfU0dfRE1BX0ZMQUdTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjA4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipDb25zaWRlcmluZyBEZXBlbmRlbmNpZXMgZm9yIFBDSV9QMlBETUEqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBQQ0lfUDJQRE1BYCwgYW5kIGltbWVkaWF0ZWx5LCBteSBtaW5kIGp1bXBzIHRvIGl0cyBkZXBlbmRlbmNpZXMuIEkga25vdyBpdCBsZWFucyBoZWF2aWx5IG9uIGBaT05FX0RFVklDRWAg4oCTIHRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZSBmb3IgZGlyZWN0IGFjY2Vzcy4gQW5kLCBuYXR1cmFsbHksIGA2NEJJVGAgaXMgZXNzZW50aWFsOyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IGxhcmdlIGFkZHJlc3Mgc3BhY2VzIGhlcmUuIEJ1dC4uLiB3aGF0IGFib3V0IHRoZSBicm9hZGVyIGNvbnRleHQ/IElzIGl0IGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBldmVyeXRoaW5nIHdpdGhpbiBgQ09ORklHX0RBWGA/IElzIGl0IGp1c3QgYSBkZXBlbmRlbmN5IG9yIGlzIHRoZXJlIGFueSBpbnRlcmFjdGlvbj8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBjb25zaWRlcmF0aW9ucyB0aGF0IGFyaXNlIGF0IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRob3NlIHR3byBmZWF0dXJlcz8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIGEgYml0IG1vcmUgdG8gYmUgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBjcml0aWNhbCBjb25mbGljdHMgb3IgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBQZXJoYXBzIHRoZXJlIGFyZSBzb21lIGludGVyYWN0aW9uIHNjZW5hcmlvcywgbGlrZSB3aGF0IGhhcHBlbiB3aGVuIERNQSBoYXBwZW5zIGFnYWluc3QgREFYLWVuYWJsZWQgc3RvcmFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RheC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2RheC9LY29uZmlnOjI6bWVudWNvbmZpZyBEQVhcbmRyaXZlcnMvZGF4L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0RBWDogZGlyZWN0IGFjY2VzcyB0byBkaWZmZXJlbnRpYXRlZCBtZW1vcnlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5NDEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqS2NvbmZpZyBEaXZlIGZvciBEQVggRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIERBWCBkcml2ZXIuIFRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gaGVhZCBkaXJlY3RseSB0byB0aGUgYEtjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGNlbnRyYWwgaHViIGZvciBkZWZpbmluZyBhbmQgZG9jdW1lbnRpbmcgdGhlc2UgdGhpbmdzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBgZHJpdmVycy9kYXgvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgZGVzY3JpcHRpb25zIHRoYXQgZ292ZXJuIGhvdyB0aGUgREFYIGRyaXZlciBiZWhhdmVzIGFuZCBpcyBjb25maWd1cmVkIGF0IGNvbXBpbGUgdGltZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBrbm9icyBJIGhhdmUgYXZhaWxhYmxlIHRvIHR3ZWFrIHRoaXMgZHJpdmVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9kYXgvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMjpcdG1lbnVjb25maWcgREFYXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtEQVg6IGRpcmVjdCBhY2Nlc3MgdG8gZGlmZmVyZW50aWF0ZWQgbWVtb3J5XCYjMzQ7XG4gICA0Olx0XHRkZWZhdWx0IG0gaWYgTlZESU1NX0RBWFxuICAgNTpcdFxuICAgNjpcdGlmIERBWFxuICAgNzpcdFxuICAgODpcdGNvbmZpZyBERVZfREFYXG4gICA5Olx0XHR0cmlzdGF0ZSBcJiMzNDtEZXZpY2UgREFYOiBkaXJlY3QgYWNjZXNzIG1hcHBpbmcgZGV2aWNlXCYjMzQ7XG4gIDEwOlx0XHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gIDExOlx0XHRoZWxwXG4gIDEyOlx0XHQgIFN1cHBvcnQgcmF3IGFjY2VzcyB0byBkaWZmZXJlbnRpYXRlZCAocGVyc2lzdGVuY2UsIGJhbmR3aWR0aCxcbiAgMTM6XHRcdCAgbGF0ZW5jeS4uLikgbWVtb3J5IHZpYSBhbiBtbWFwKDIpIGNhcGFibGUgY2hhcmFjdGVyXG4gIDE0Olx0XHQgIGRldmljZS4gIFBsYXRmb3JtIGZpcm13YXJlIG9yIGEgZGV2aWNlIGRyaXZlciBtYXkgaWRlbnRpZnkgYVxuICAxNTpcdFx0ICBwbGF0Zm9ybSBtZW1vcnkgcmVzb3VyY2UgdGhhdCBpcyBkaWZmZXJlbnRpYXRlZCBmcm9tIHRoZVxuICAxNjpcdFx0ICBiYXNlbGluZSBtZW1vcnkgcG9vbC4gIE1hcHBpbmdzIG9mIGEgL2Rldi9kYXhYLlkgZGV2aWNlIGltcG9zZVxuICAxNzpcdFx0ICByZXN0cmljdGlvbnMgdGhhdCBtYWtlIHRoZSBtYXBwaW5nIGJlaGF2aW9yIGRldGVybWluaXN0aWMuXG4gIDE4Olx0XG4gIDE5Olx0Y29uZmlnIERFVl9EQVhfUE1FTVxuICAyMDpcdFx0dHJpc3RhdGUgXCYjMzQ7UE1FTSBEQVg6IGRpcmVjdCBhY2Nlc3MgdG8gcGVyc2lzdGVudCBtZW1vcnlcJiMzNDtcbiAgMjE6XHRcdGRlcGVuZHMgb24gTElCTlZESU1NIFx1MDAyNlx1MDAyNiBOVkRJTU1fREFYIFx1MDAyNlx1MDAyNiBERVZfREFYXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDMzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBsaWtlIHlvdXJzZWxmOgoKKipEQVggQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBEaXJlY3QgQWNjZXNzIChEQVgpLiBgREVWX0RBWGAsIGRlZmluaXRlbHkgYSBzb2xpZCBhcHByb2FjaCwgcHJvdmVuIGFuZCB3ZWxsLXVuZGVyc3Rvb2QuIEl0JiMzOTtzIHVzdWFsbHkgdGhlIGZpcnN0IHRoaW5nIHRoYXQgY29tZXMgdG8gbWluZCB3aGVuIHlvdSYjMzk7cmUgb3B0aW1pemluZyBmb3IgZGlyZWN0IGJsb2NrLWRldmljZSBhY2Nlc3MuIEJ1dC4uLmFuZCBoZXJlJiMzOTtzIHdoZXJlIG15IG1pbmQgc3RhcnRzIHRvIHdhbmRlci4uLndoYXQgYWJvdXQgYENPTkZJR19GU19EQVhgPyBUaGF0IG9wdGlvbiByZWFsbHkgbWFrZXMgeW91IGNvbnNpZGVyIHRoZSBmaWxlc3lzdGVtLWxldmVsIERBWCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBnaXZlcyBtb3JlIGZpbmUgZ3JhaW5lZCBjb250cm9sLgoKSSYjMzk7bSBldmFsdWF0aW5nIHdoaWNoIGdpdmVzIG1lIHRoZSBiZXN0IHRyYWRlLW9mZiBiZXR3ZWVuIGltcGxlbWVudGF0aW9uIGNvbXBsZXhpdHksIHBlcmZvcm1hbmNlLCBhbmQgZmxleGliaWxpdHkgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpYyBhcHBsaWNhdGlvbiBzY2VuYXJpby4gSXQmIzM5O3MgYSBrZXkgY29uc2lkZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZTX0RBWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTU2PWVuZGlmICMgQkxPQ0tcbmZzL0tjb25maWctNTctXG5mcy9LY29uZmlnOjU4OmNvbmZpZyBGU19EQVhcbmZzL0tjb25maWctNTktXHRib29sIFwmIzM0O0ZpbGUgc3lzdGVtIGJhc2VkIERpcmVjdCBBY2Nlc3MgKERBWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL0tjb25maWctODktXG5mcy9LY29uZmlnOjkwOmNvbmZpZyBGU19EQVhfUE1EXG5mcy9LY29uZmlnLTkxLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTc0OQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgRlNfREFYYCBLY29uZmlnIE9wdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBjb25maWd1cmVkIGZvciBEaXJlY3QgQWNjZXNzIChEQVgpIGZpbGUgc3lzdGVtcy4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyOiBgZnMvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgYWxsIHRoZSBmaWxlIHN5c3RlbS1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gSSB3YW50IHRvIGNoZWNrIGZvciB0aGUgcHJlc2VuY2UgYW5kIGRldGFpbHMgb2YgYEZTX0RBWGAuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgaXRzIGRlZmluaXRpb24gdGhlcmUuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCB0aGlzIGZpbGUgd2lsbCBjb250YWluIHRoZSBuZWNlc3Nhcnkgc2V0dGluZ3MgY29udHJvbGxpbmcgaG93IERBWCBzdXBwb3J0IGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYW5kIGFueSBhY2NvbXBhbnlpbmcgZGVwZW5kZW5jaWVzIG9yIGRlZmF1bHQgdmFsdWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1ODpcdGNvbmZpZyBGU19EQVhcbiAgNTk6XHRcdGJvb2wgXCYjMzQ7RmlsZSBzeXN0ZW0gYmFzZWQgRGlyZWN0IEFjY2VzcyAoREFYKSBzdXBwb3J0XCYjMzQ7XG4gIDYwOlx0XHRkZXBlbmRzIG9uIE1NVVxuICA2MTpcdFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxuICA2MjpcdFx0c2VsZWN0IEZTX0lPTUFQXG4gIDYzOlx0XHRzZWxlY3QgREFYXG4gIDY0Olx0XHRoZWxwXG4gIDY1Olx0XHQgIERpcmVjdCBBY2Nlc3MgKERBWCkgY2FuIGJlIHVzZWQgb24gbWVtb3J5LWJhY2tlZCBibG9jayBkZXZpY2VzLlxuICA2NjpcdFx0ICBJZiB0aGUgYmxvY2sgZGV2aWNlIHN1cHBvcnRzIERBWCBhbmQgdGhlIGZpbGVzeXN0ZW0gc3VwcG9ydHMgREFYLFxuICA2NzpcdFx0ICB0aGVuIHlvdSBjYW4gYXZvaWQgdXNpbmcgdGhlIHBhZ2VjYWNoZSB0byBidWZmZXIgSS9Pcy4gIFR1cm5pbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxMTMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBSZXZpZXcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb25maWd1cmF0aW9uIGFuZCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGF0IGZpcnN0IGdsYW5jZS4gSXQgbG9va3MgbGlrZSBgRlNfREFYYCBpcyBidWlsdCBvbiB0b3Agb2YgYFpPTkVfREVWSUNFYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gVG8gZW5hYmxlIGV2ZXJ5dGhpbmcgY29ycmVjdGx5LCBJIG5lZWQgdG8gaW5jbHVkZSBgWk9ORV9ERVZJQ0VgLCBgUENJX1AyUERNQWAsIGBEQVhgLCBgREVWX0RBWGAsIGFuZCBgRlNfREFYYCBpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBUaGF0IGNvdmVycyB0aGUgZGVwZW5kZW5jaWVzIG5pY2VseS4KCkJ1dCB0aGVuIHRoZXJlJiMzOTtzIHRoaXMgY2hhbmdlIHRvIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAuIEFoLCBgbWVtY3B5X25vbnRlbXBvcmFsYCB1c2luZyBgbW92bnRpYCBpbnN0cnVjdGlvbnMuIFRoaXMgaXMgeDg2LXNwZWNpZmljLCB3aGljaCBtZWFucyBJIG5lZWQgdG8gYmUgY2FyZWZ1bC4gSSBrbm93IEkgbmVlZCB0byBsb29rIGZvciBhbnkgZXhpc3RpbmcgY29uZmlnIG9wdGlvbnMgYXJvdW5kIGBtZW1jcHlfbm9udGVtcG9yYWxgLCB0byBlbnN1cmUgdGhpcyBpcyBoYW5kbGVkIGNvcnJlY3RseS4gTGV0JiMzOTtzIHNlZS4uLiBpdCYjMzk7cyBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRWAuIE9rYXksIHNvIHRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHRha2UgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25zdHJhaW50IGludG8gY29uc2lkZXJhdGlvbi4gSSBuZWVkIHRvIHJldmlldyBhbmQgZW5zdXJlIHRoYXQgdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGlzIGFwcHJvcHJpYXRlbHkgaGFuZGxlZCB0byBwcmV2ZW50IGFueSBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL0tjb25maWc9NTQyPWNvbmZpZyBVQUNDRVNTX01FTUNQWVxuLS1cbmxpYi9LY29uZmlnLTU0NC1cbmxpYi9LY29uZmlnOjU0NTpjb25maWcgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG5saWIvS2NvbmZpZy01NDYtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjEwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgYEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRWAgaW4gdGhlIEtjb25maWcqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBsaWIvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9uLCBvciBhdCBsZWFzdCB0aGUgcHJlc2VuY2UsIG9mIGBBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVgLiBUaGlzIGlzIHRoZSBrZXkgcGllY2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQuIEkmIzM5O20gYXNzdW1pbmcsIGdpdmVuIHRoZSBuYW1pbmcsIHRoYXQgaXQmIzM5O3MgcmVsYXRlZCB0byBjYWNoZSBjb2hlcmVuY3kgYW5kIGRhdGEgYWNjZXNzLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvbnRleHQgb2YgdXNlci1zcGFjZSBpbnRlcmFjdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgc29tZXRoaW5nIGJlaW5nIGRlZmluZWQgYXQgdGhlIGFyY2hpdGVjdHVyZSBsZXZlbC4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcCBmb3IgZmlndXJpbmcgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIHJlbGF0aW5nIHRvIHRoaXMgZmVhdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IGl0JiMzOTtzIGRlZmluZWQsIHVuZGVyIHdoYXQgY29uZGl0aW9ucyBpdCYjMzk7cyBlbmFibGVkLCBhbmQgd2hpY2ggYXJjaGl0ZWN0dXJlcyBvciBib2FyZHMgYXJlIGFmZmVjdGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgaGFzIHRvIHNheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTQ1Olx0Y29uZmlnIEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxuIDU0NjpcdFx0Ym9vbFxuIDU0NzpcdFxuIDU0ODpcdCMgYXJjaCBoYXMgYSBjb25jZXB0IG9mIGEgcmVjb3ZlcmFibGUgc3luY2hyb25vdXMgZXhjZXB0aW9uIGR1ZSB0byBhXG4gNTQ5Olx0IyBtZW1vcnktcmVhZCBlcnJvciBsaWtlIHg4NiBtYWNoaW5lLWNoZWNrIG9yIEFSTSBkYXRhLWFib3J0LCBhbmRcbiA1NTA6XHQjIGltcGxlbWVudHMgY29weV9tY190b197dXNlcixrZXJuZWx9IHRvIGFib3J0IGFuZCByZXBvcnRcbiA1NTE6XHQjICYjMzk7Ynl0ZXMtdHJhbnNmZXJyZWQmIzM5OyBpZiB0aGF0IGV4Y2VwdGlvbiBmaXJlcyB3aGVuIGFjY2Vzc2luZyB0aGUgc291cmNlXG4gNTUyOlx0IyBidWZmZXIuXG4gNTUzOlx0Y29uZmlnIEFSQ0hfSEFTX0NPUFlfTUNcbiA1NTQ6XHRcdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwNjAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqQXJjaGl0ZWN0dXJlIFNlbGVjdGlvbiBBbmFseXNpcyoqCgpPa2F5LCBzbyBzb21ldGhpbmcgaGFzIGJlZW4gc2VsZWN0ZWQsIGFuZCB0aGUga2V5IGRyaXZlciBzZWVtcyB0byBiZSAmIzM0O2FyY2hpdGVjdHVyZXMuJiMzNDsgTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGVsdmUgaW50byB0aGUgc2VsZWN0aW9uIHByb2Nlc3MuIFdobyBleGFjdGx5IG1hZGUgdGhpcyBjaG9pY2U/IFdoYXQgYXJjaGl0ZWN0cyBvciBhcmNoaXRlY3R1cmFsIHRlYW1zIHdlcmUgaW52b2x2ZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZWNpc2lvbi1tYWtlcnMuIE15IGFuYWx5c2lzIHdpbGwgYmVnaW4gYnkgaWRlbnRpZnlpbmcgdGhlIHNwZWNpZmljIGFyY2hpdGVjdHVyZXMgb3IgYXJjaGl0ZWN0dXJhbCBzdHlsZXMgdGhhdCBpbmZsdWVuY2VkIHRoaXMgc2VsZWN0aW9uLiBBcmUgd2UgdGFsa2luZyBhYm91dCBzb2Z0d2FyZSBhcmNoaXRlY3R1cmVzLCBzeXN0ZW0gYXJjaGl0ZWN0dXJlcywgbmV0d29yayBhcmNoaXRlY3R1cmVzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVW5kZXJzdGFuZGluZyB0aGUgZG9tYWluIGlzIGNydWNpYWwuIEZyb20gdGhlcmUsIEkmIzM5O2xsIHRyeSB0byBmaW5kIG91dCB3aG8gdGhlIGtleSBwbGF5ZXJzIGluIHRob3NlIGFyY2hpdGVjdHVyYWwgY29udGV4dHMgYXJlLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaW5mb3JtIG15IGludmVzdGlnYXRpb24gaW50byB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGUgZGVjaXNpb24gYW5kIGFueSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIHRoYXQgdGhlIGFyY2hpdGVjdHVyZSBzZWxlY3Rpb24gbWlnaHQgaGF2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L0tjb25maWc9MTkyMj1jb25maWcgQVJNNjRfUE1FTVxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy0xOTI0LVx0c2VsZWN0IEFSQ0hfSEFTX1BNRU1fQVBJXG5hcmNoL2FybTY0L0tjb25maWc6MTkyNTpcdHNlbGVjdCBBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcbmFyY2gvYXJtNjQvS2NvbmZpZy0xOTI2LVx0aGVscFxuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnPTExOD1jb25maWcgUFBDXG4tLVxuYXJjaC9wb3dlcnBjL0tjb25maWctMTU4LVx0c2VsZWN0IEFSQ0hfSEFTX1RJQ0tfQlJPQURDQVNUXHRcdGlmIEdFTkVSSUNfQ0xPQ0tFVkVOVFNfQlJPQURDQVNUXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzoxNTk6XHRzZWxlY3QgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xNjAtXHRzZWxlY3QgQVJDSF9IQVNfVUJTQU5cbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTU4PWNvbmZpZyBYODZcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTEwMi1cdHNlbGVjdCBBUkNIX0hBU19OT05MRUFGX1BNRF9ZT1VOR1x0aWYgUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDJcbmFyY2gveDg2L0tjb25maWc6MTAzOlx0c2VsZWN0IEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVx0aWYgWDg2XzY0XG5hcmNoL3g4Ni9LY29uZmlnLTEwNC1cdHNlbGVjdCBBUkNIX0hBU19DT1BZX01DXHRcdFx0aWYgWDg2XzY0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjAxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyB0aGlzIGNvZGUgaXMgYmVpbmcgdGFyZ2V0ZWQgc3BlY2lmaWNhbGx5IGZvciBgWDg2XzY0YCBhcmNoaXRlY3R1cmUsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIHNlbGVjdGVkIGxpa2UgdGhhdCBpbmRpY2F0ZXMgYSByZWFsLCBsaXZlIHNjZW5hcmlvLiBUaGUgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgYW5kIHJpcGUgZm9yIGZ1enppbmcuIFdlIGhhdmUgYSBzZXQgb2YgaW50ZXJlc3RpbmcgZm9jdXMgc3ltYm9scyBpZGVudGlmaWVkOiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLCBgbWVtbWFwX2luaXRfY29tcG91bmRgLCBgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVgLCBgem9uZV9kZXZpY2VfdGFpbF9wYWdlX2luaXRgLCBhbmQgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93YC4gVGhlc2Ugc2VlbSBsaWtlIGdvb2QgZW50cnkgcG9pbnRzIHRvIGV4cG9zZSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMuIEhvd2V2ZXIsIGhhbmcgb24uLi4gYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCBpcyBtYXJrZWQgYXMgYHN0YXRpYyBpbmxpbmVgPyBUaGF0IG1lYW5zIGl0JiMzOTtzIHByb2JhYmx5IGV4cGFuZGVkIGF0IHRoZSBjYWxsIHNpdGUsIHdoaWNoIGhhcyBpbXBsaWNhdGlvbnMgZm9yIGhvdyB0aGUgZnV6emVyIHdpbGwgYmVoYXZlIGFuZCBmb3IgY29udHJvbCBmbG93IHRyYWNraW5nLiBHb3R0YSBjaGVjayBgbW0vbW1faW5pdC5jYCB0byBzZWUgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbW1faW5pdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDg4Olx0XHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHRlbXBsYXRlLCBwZm4pO1xuMTA4OTpcdCNpZmRlZiBXQU5UX1BBR0VfVklSVFVBTFxuMTA5MDpcdFx0aWYgKCFpc19oaWdobWVtX2lkeChaT05FX0RFVklDRSkpXG4xMDkxOlx0XHRcdHNldF9wYWdlX2FkZHJlc3ModGVtcGxhdGUsIF9fdmEocGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSk7XG4xMDkyOlx0I2VuZGlmXG4xMDkzOlx0fVxuMTA5NDpcdFxuMTA5NTpcdHN0YXRpYyB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHN0cnVjdCBwYWdlICpwYWdlLFxuMTA5NjpcdFx0XHR1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnRlbXBsYXRlKVxuMTA5NzpcdHtcbjEwOTg6XHRcdC8qXG4xMDk5Olx0XHQgKiAmIzM5O3RlbXBsYXRlJiMzOTsgY2FycmllcyB0aGUgaW52YXJpYW50IHBvcnRpb24gb2YgYSBaT05FX0RFVklDRSBzdHJ1Y3RcbjExMDA6XHRcdCAqIHBhZ2UuIFVwZGF0ZSB0aGUgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gcGxhY2UgYmVmb3JlIGNvcHlpbmcgaXRcbjExMDE6XHRcdCAqIHRvIHRoZSBkZXN0aW5hdGlvbiBwYWdlLlxuMTEwMjpcdFx0ICovXG4xMTAzOlx0XHR6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZSh0ZW1wbGF0ZSwgcGZuKTtcbjExMDQ6XHRcdG1lbWNweV9ub250ZW1wb3JhbChwYWdlLCB0ZW1wbGF0ZSwgc2l6ZW9mKCpwYWdlKSk7XG4xMTA1Olx0fVxuMTEwNjpcdFxuMTEwNzpcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4Mjk0CgkJCQkJCQlvdXRwdXQ6IDE3NAoJCQkJCQkJdGhvdWdodHM6IDQyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN5bWJvbCBMYW5kc2NhcGUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBjb2RlLiBJJiMzOTttIHNlZWluZyBhIHBhdHRlcm4gaGVyZSB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkZXZpY2UgaW50ZWdyYXRpb24uIEZpcnN0LCBsb29raW5nIGF0IHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMsIGB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZWAgaXMgZGVjbGFyZWQgc3RhdGljLCBidXQgKm5vdCogaW5saW5lLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gT24gdGhlIG90aGVyIGhhbmQsIGB6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdGAgaXMgc3RhdGljIGlubGluZSwgYW5kIGB6b25lX2RldmljZV9wYWdlX2luaXRfc2xvd2AgaXMgc2ltcGx5IHN0YXRpYy4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gdHJhY2luZyBjYWxscyBhbmQgc3ltYm9sIHZpc2liaWxpdHkuCgpNeSBpbml0aWFsIGZvY3VzIG5lZWRzIHRvIGJlIG9uOgoqICAgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYAoqICAgYG1lbW1hcF9pbml0X2NvbXBvdW5kYAoqICAgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYAoqICAgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93YAoKV2FpdCwgaGFuZyBvbi4gVGhpcyBwYXRjaCBhbHNvIG1vZGlmaWVzIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAuIEl0JiMzOTtzIGFkZGluZyBhIGJ1bmNoIG9mIG5ldyBpbmxpbmUgZnVuY3Rpb25zIC0gYG1vdm50aV84YCwgYG1vdm50aV8xNmAsIGBtb3ZudGlfMzJgLCBgbW92bnRpXzY0YCwgYG1lbWNweV9mbHVzaGNhY2hlYCwgYW5kIGBtZW1jcHlfbm9udGVtcG9yYWxgLiBUaGVzZSBhcmUgKmFsbCogYHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVgLCBzbyB0aGV5IHdvbiYjMzk7dCBoYXZlIHRoZWlyIG93biBleHBvcnRlZCBzeW1ib2xzLiBUaGF0IHJlaW5mb3JjZXMgbXkgb3JpZ2luYWwgbGlzdCBhcyB0aGUga2V5IHN5bWJvbHMgdG8gdHJhY2suCgpOb3csIEkgbmVlZCB0byBjb25maXJtIHRoZSByZWFjaGFiaWxpdHkgb2YgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gTGV0JiMzOTtzIHNlZS4uLiBZZXMsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBwYWdlbWFwX3JhbmdlYCBpbiBgbW0vbWVtcmVtYXAuY2AuIEFuZCBgcGFnZW1hcF9yYW5nZWAgaXMgY2FsbGVkIGZyb20gYGRldm1fbWVtcmVtYXBfcGFnZXNgLiBFeGNlbGxlbnQuIGBkZXZtX21lbXJlbWFwX3BhZ2VzYCBpcyBleHBvcnRlZCwgYW5kIGl0JiMzOTtzIHVzZWQgYnkgdmFyaW91cyBkcml2ZXJzLiBHb29kLCB0aGlzIGlzIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludC4KCkZpbmFsbHksIHJlZ2FyZGluZyBjb25maWd1cmF0aW9uLCBpdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgcmVsYXRlZCB0byB0aGVzZSBvcHRpb25zOiBgWk9ORV9ERVZJQ0VgLCBgUENJX1AyUERNQWAsIGBEQVhgLCBgREVWX0RBWGAsIGFuZCBgRlNfREFYYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgc3lzdGVtIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQuIExldCYjMzk7cyBtYWtlIHN1cmUgYFpPTkVfREVWSUNFYCBkb2VzbiYjMzk7dCBoYXZlIGFueSBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGFkZHJlc3MuIEhtbW0sIHllcywgaXQgZGVwZW5kcyBvbiBgTUVNT1JZX0hPVFBMVUdgLCBhbmQgYE1FTU9SWV9IT1RSRU1PVkVgIGFuZCBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBTbywgdG8gYmUgc2FmZSwgSSYjMzk7bGwgYWRkIGBNRU1PUllfSE9UUExVR2AgYW5kIGBTUEFSU0VNRU1fVk1FTU1BUGAgdG8gdGhlIGNvbmZpZywganVzdCBpbiBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7UENJX1AyUERNQSYjMzQ7LAogICAgJiMzNDtEQVgmIzM0OywKICAgICYjMzQ7REVWX0RBWCYjMzQ7LAogICAgJiMzNDtGU19EQVgmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7U1BBUlNFTUVNX1ZNRU1NQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1tYXBfaW5pdF96b25lX2RldmljZSYjMzQ7LAogICAgJiMzNDttZW1tYXBfaW5pdF9jb21wb3VuZCYjMzQ7LAogICAgJiMzNDt6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZSYjMzQ7LAogICAgJiMzNDt6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIFpPTkVfREVWSUNFIHBhZ2VzIGJ5IHVzaW5nIGEgdGVtcGxhdGUgYW5kIG5vbi10ZW1wb3JhbCBtZW1jcHkuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB3aGVuIHByb2JpbmcgZGV2aWNlcyBsaWtlIFBNRU0sIERBWCwgb3IgUENJIFAyUERNQS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7UENJX1AyUERNQSYjMzQ7LAogICAgJiMzNDtEQVgmIzM0OywKICAgICYjMzQ7REVWX0RBWCYjMzQ7LAogICAgJiMzNDtGU19EQVgmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7U1BBUlNFTUVNX1ZNRU1NQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1tYXBfaW5pdF96b25lX2RldmljZSYjMzQ7LAogICAgJiMzNDttZW1tYXBfaW5pdF9jb21wb3VuZCYjMzQ7LAogICAgJiMzNDt6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZSYjMzQ7LAogICAgJiMzNDt6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIFpPTkVfREVWSUNFIHBhZ2VzIGJ5IHVzaW5nIGEgdGVtcGxhdGUgYW5kIG5vbi10ZW1wb3JhbCBtZW1jcHkuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB3aGVuIHByb2JpbmcgZGV2aWNlcyBsaWtlIFBNRU0sIERBWCwgb3IgUENJIFAyUERNQS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI2OjQ0LjIxMjE3OTg5OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzczODY5MzIxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiUENJX1AyUERNQVwiLFxuICAgIFwiREFYXCIsXG4gICAgXCJERVZfREFYXCIsXG4gICAgXCJGU19EQVhcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJTUEFSU0VNRU1fVk1FTU1BUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW1hcF9pbml0X3pvbmVfZGV2aWNlXCIsXG4gICAgXCJtZW1tYXBfaW5pdF9jb21wb3VuZFwiLFxuICAgIFwiem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVcIixcbiAgICBcInpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb3B0aW1pemVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBaT05FX0RFVklDRSBwYWdlcyBieSB1c2luZyBhIHRlbXBsYXRlIGFuZCBub24tdGVtcG9yYWwgbWVtY3B5LiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgd2hlbiBwcm9iaW5nIGRldmljZXMgbGlrZSBQTUVNLCBEQVgsIG9yIFBDSSBQMlBETUEuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI2OjQ0LjIxMjE4NjAwOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc5OTM2MTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMWZhMzAwMDdhYmFhMTg3ZjQ4ODIzN2Q3MDkxNTE4MDBjNzJmZjI2MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAyOCAwMToyNjo0MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXFxuaW5kZXggNDYzNTYxNjg2M2Y1M2QuLmJjNmE5ZjM0YjM0NmFmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcXG5AQCAtODIsNyArODIsMzUgQEAgaW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xcbiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxcbiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFIDFcXG4gdm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV84KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZShcXFwibW92bnRpcSAlMSwgJTBcXFwiXFxuK1xcdFxcdCAgICAgOiBcXFwiPW1cXFwiKCoodTY0ICopZHN0KVxcbitcXHRcXHQgICAgIDogXFxcInJcXFwiKCooY29uc3QgdTY0ICopc3JjKVxcbitcXHRcXHQgICAgIDogXFxcIm1lbW9yeVxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzE2KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxcbit7XFxuK1xcdG1vdm50aV84KGRzdCwgc3JjKTtcXG4rXFx0bW92bnRpXzgoZHN0ICsgOCwgc3JjICsgOCk7XFxuK31cXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfMzIodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXFxuK3tcXG4rXFx0bW92bnRpXzE2KGRzdCwgc3JjKTtcXG4rXFx0bW92bnRpXzE2KGRzdCArIDE2LCBzcmMgKyAxNik7XFxuK31cXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfNjQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXFxuK3tcXG4rXFx0bW92bnRpXzMyKGRzdCwgc3JjKTtcXG4rXFx0bW92bnRpXzMyKGRzdCArIDMyLCBzcmMgKyAzMik7XFxuK31cXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZV90IGNudClcXG4ge1xcbiBcXHRpZiAoX19idWlsdGluX2NvbnN0YW50X3AoY250KSkge1xcbiBcXHRcXHRzd2l0Y2ggKGNudCkge1xcbkBAIC05NiwxMCArMTI0LDQ4IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90XFxuIFxcdFxcdFxcdFxcdGFzbSAoXFxcIm1vdm50aXEgJTEsICUwXFxcIiA6IFxcXCI9bVxcXCIoKih1NjQgKilkc3QpIDogXFxcInJcXFwiKCoodTY0ICopc3JjKSk7XFxuIFxcdFxcdFxcdFxcdGFzbSAoXFxcIm1vdm50aXEgJTEsICUwXFxcIiA6IFxcXCI9bVxcXCIoKih1NjQgKikoZHN0ICsgOCkpIDogXFxcInJcXFwiKCoodTY0ICopKHNyYyArIDgpKSk7XFxuIFxcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogVGhlIHJlbGV2YW50IGZpeGVkLXNpemUgY29waWVzIGhlcmUgYXJlIHRoZVxcbitcXHRcXHRcXHQgKiB4ODZfNjQgc3RydWN0IHBhZ2Ugc2l6ZXM6IDY0LCA4MCwgYW5kIDk2IGJ5dGVzLlxcbitcXHRcXHRcXHQgKiBLZWVwIDMyLWJ5dGUgYW5kIDQ4LWJ5dGUgY29waWVzIGlubGluZSBhcyB3ZWxsXFxuK1xcdFxcdFxcdCAqIGluc3RlYWQgb2Ygc2VuZGluZyB0aG9zZSBuZWFyYnkgZml4ZWQtc2l6ZVxcbitcXHRcXHRcXHQgKiBjYXNlcyBiYWNrIHRvIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGNhc2UgMzI6XFxuK1xcdFxcdFxcdFxcdG1vdm50aV8zMihkc3QsIHNyYyk7XFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0Y2FzZSA0ODpcXG4rXFx0XFx0XFx0XFx0bW92bnRpXzMyKGRzdCwgc3JjKTtcXG4rXFx0XFx0XFx0XFx0bW92bnRpXzE2KGRzdCArIDMyLCBzcmMgKyAzMik7XFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0Y2FzZSA2NDpcXG4rXFx0XFx0XFx0XFx0bW92bnRpXzY0KGRzdCwgc3JjKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRjYXNlIDgwOlxcbitcXHRcXHRcXHRcXHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xcbitcXHRcXHRcXHRcXHRtb3ZudGlfMTYoZHN0ICsgNjQsIHNyYyArIDY0KTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRjYXNlIDk2OlxcbitcXHRcXHRcXHRcXHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xcbitcXHRcXHRcXHRcXHRtb3ZudGlfMzIoZHN0ICsgNjQsIHNyYyArIDY0KTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4rXFxuIFxcdF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XFxuIH1cXG4rXFxuKyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsIG1lbWNweV9ub250ZW1wb3JhbFxcbisvKlxcbisgKiBSZXVzZSB0aGUgZXhpc3RpbmcgeDg2IGZsdXNoY2FjaGUgYmFja2VuZCBhcyB0aGUgbm9uLXRlbXBvcmFsIGNvcHlcXG4rICogcHJpbWl0aXZlLlxcbisgKi9cXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9ub250ZW1wb3JhbCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyxcXG4rXFx0XFx0c2l6ZV90IGNudClcXG4re1xcbitcXHRtZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcXG4rfVxcbitcXG4gI2VuZGlmXFxuIFxcbiAjZW5kaWYgLyogX19LRVJORUxfXyAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5pbmRleCA0ODVkZjljMmRiZGRiMy4uNDMzNDNiZmNlNDkzNmUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuQEAgLTI1NDEsMTEgKzI1NDEsMjIgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb24oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgc2VjdGlvbilcXG4gXFx0cGFnZS1cXHUwMDNlZmxhZ3MuZiB8PSAoc2VjdGlvbiBcXHUwMDI2IFNFQ1RJT05TX01BU0spIFxcdTAwM2NcXHUwMDNjIFNFQ1RJT05TX1BHU0hJRlQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIHBmbilcXG4re1xcbitcXHRzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXFxuIHtcXG4gXFx0cmV0dXJuIChtZGYuZiBcXHUwMDNlXFx1MDAzZSBTRUNUSU9OU19QR1NISUZUKSBcXHUwMDI2IFNFQ1RJT05TX01BU0s7XFxuIH1cXG4gI2Vsc2UgLyogIVNFQ1RJT05fSU5fUEFHRV9GTEFHUyAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBwZm4pXFxuK3tcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbkBAIC0yNzY4LDkgKzI3NzksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfbGlua3Moc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gem9uZV90eXBlIHpvbmUsXFxuIHtcXG4gXFx0c2V0X3BhZ2Vfem9uZShwYWdlLCB6b25lKTtcXG4gXFx0c2V0X3BhZ2Vfbm9kZShwYWdlLCBub2RlKTtcXG4tI2lmZGVmIFNFQ1RJT05fSU5fUEFHRV9GTEFHU1xcbi1cXHRzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpO1xcbi0jZW5kaWZcXG4rXFx0c2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihwYWdlLCBwZm4pO1xcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaCBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmhcXG5pbmRleCA1NzAyZGFjYTQzMjZiNy4uNmNiNWNkZDAxMTU4YjIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmhcXG5AQCAtMjc4LDYgKzI3OCwxOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXFxuIH1cXG4gI2VuZGlmXFxuIFxcbisjaWZuZGVmIG1lbWNweV9ub250ZW1wb3JhbFxcbisvKlxcbisgKiBtZW1jcHlfbm9udGVtcG9yYWwoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlXFxuKyAqIGFyY2hpdGVjdHVyZSBoYXMgYSBzdWl0YWJsZSBiYWNrZW5kLiBBcmNoaXRlY3R1cmVzIHdpdGhvdXQgYVxcbisgKiBzcGVjaWFsaXplZCBiYWNrZW5kIGZhbGwgYmFjayB0byBtZW1jcHkoKS4gS2VlcCB0aGlzIGFzIGFcXG4rICogZnVuY3Rpb24tbGlrZSBtYWNybyBzbyB0aGUgY29tcGlsZXIgY2FuIHN0aWxsIHNlZSB0aGUgb3JpZ2luYWxcXG4rICogbWVtY3B5KCkgY2FsbCBzaXRlIGFuZCBwcmVzZXJ2ZSB0aGUgdXN1YWwgRk9SVElGWSBjb3ZlcmFnZSB3aGVuXFxuKyAqIG9iamVjdCBzaXplcyByZW1haW4gdmlzaWJsZSB0aGVyZSwgd2hpbGUga2VlcGluZyB0aGUgQVBJIHZvaWQuXFxuKyAqL1xcbisjZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbChkc3QsIHNyYywgbGVuKSBcXFxcXFxuK1xcdCgodm9pZCltZW1jcHkoZHN0LCBzcmMsIGxlbikpXFxuKyNlbmRpZlxcbitcXG4gdm9pZCAqbWVtY2hyX2ludihjb25zdCB2b2lkICpzLCBpbnQgYywgc2l6ZV90IG4pO1xcbiBjaGFyICpzdHJyZXBsYWNlKGNoYXIgKnN0ciwgY2hhciBvbGQsIGNoYXIgbmV3KTtcXG4gXFxuZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuY1xcbmluZGV4IDBmNjQ5MDllOGQyMGUyLi5hZTQyYTEzMTFlMWQxOCAxMDA2NDRcXG4tLS0gYS9tbS9tbV9pbml0LmNcXG4rKysgYi9tbS9tbV9pbml0LmNcXG5AQCAtMTAwNSwxMSArMTAwNSwzNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbWVtbWFwX2luaXQodm9pZClcXG4gfVxcbiBcXG4gI2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxcbi1zdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXFxuKy8qXFxuKyAqIFJldHVybiB0cnVlIHdoZW4gbWVtbWFwX2luaXRfem9uZV9kZXZpY2UoKSBtdXN0IGluaXRpYWxpemUgdGhlIHBhZ2VcXG4rICogcmVmY291bnQgdG8gMC4gTUVNT1JZX0RFVklDRV9HRU5FUklDIHBhZ2VzIHJlZ2FpbiBhIHJlZmNvdW50IG9mIDEgaW5cXG4rICogdGhlIGZyZWUgcGF0aCwgd2hpbGUgdGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZVxcbisgKiBhbmQgcmFpc2UgdGhlIGNvdW50IGFnYWluIHdoZW4gdGhlIGFsbG9jYXRvciBvciBkcml2ZXIgaGFuZHMgdGhlIHBhZ2VcXG4rICogb3V0LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sIHBhZ2VtYXBfcmVxdWlyZXNfcmVmY291bnRfcmVzZXQoY29uc3Qgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG4re1xcbitcXHQvKlxcbitcXHQgKiBNRU1PUllfREVWSUNFX0dFTkVSSUMgcGFnZXMgcmVnYWluIGEgcmVmY291bnQgb2YgMSBpbiB0aGUgZnJlZVxcbitcXHQgKiBwYXRoLiBUaGUgcmVtYWluaW5nIFpPTkVfREVWSUNFIHR5cGVzIHN0YXJ0IGZyb20gMCBoZXJlIGFuZCByYWlzZVxcbitcXHQgKiB0aGUgY291bnQgYWdhaW4gd2hlbiB0aGUgYWxsb2NhdG9yIG9yIGRyaXZlciBoYW5kcyB0aGUgcGFnZSBvdXQuXFxuK1xcdCAqL1xcbitcXHRzd2l0Y2ggKHBnbWFwLVxcdTAwM2V0eXBlKSB7XFxuK1xcdGNhc2UgTUVNT1JZX0RFVklDRV9GU19EQVg6XFxuK1xcdGNhc2UgTUVNT1JZX0RFVklDRV9QUklWQVRFOlxcbitcXHRjYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6XFxuK1xcdGNhc2UgTUVNT1JZX0RFVklDRV9QQ0lfUDJQRE1BOlxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0Y2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBfX3JlZiBfX3pvbmVfZGV2aWNlX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXFxuIFxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcXG4gXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxcbiB7XFxuLVxcbiBcXHRfX2luaXRfc2luZ2xlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkKTtcXG4gXFxuIFxcdC8qXFxuQEAgLTEwMjgsMjcgKzEwNTQsNTQgQEAgc3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbiBcXHQgKi9cXG4gXFx0cGFnZV9mb2xpbyhwYWdlKS1cXHUwMDNlcGdtYXAgPSBwZ21hcDtcXG4gXFx0cGFnZS1cXHUwMDNlem9uZV9kZXZpY2VfZGF0YSA9IE5VTEw7XFxuK31cXG4gXFxuLVxcdC8qXFxuLVxcdCAqIFpPTkVfREVWSUNFIHBhZ2VzIG90aGVyIHRoYW4gTUVNT1JZX1RZUEVfR0VORVJJQyBhcmUgcmVsZWFzZWRcXG4tXFx0ICogZGlyZWN0bHkgdG8gdGhlIGRyaXZlciBwYWdlIGFsbG9jYXRvciB3aGljaCB3aWxsIHNldCB0aGUgcGFnZSBjb3VudFxcbi1cXHQgKiB0byAxIHdoZW4gYWxsb2NhdGluZyB0aGUgcGFnZS5cXG4tXFx0ICpcXG4tXFx0ICogTUVNT1JZX1RZUEVfR0VORVJJQyBhbmQgTUVNT1JZX1RZUEVfRlNfREFYIHBhZ2VzIGF1dG9tYXRpY2FsbHkgaGF2ZVxcbi1cXHQgKiB0aGVpciByZWZjb3VudCByZXNldCB0byBvbmUgd2hlbmV2ZXIgdGhleSBhcmUgZnJlZWQgKGllLiBhZnRlclxcbi1cXHQgKiB0aGVpciByZWZjb3VudCBkcm9wcyB0byAwKS5cXG4tXFx0ICovXFxuLVxcdHN3aXRjaCAocGdtYXAtXFx1MDAzZXR5cGUpIHtcXG4tXFx0Y2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDpcXG4tXFx0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XFxuLVxcdGNhc2UgTUVNT1JZX0RFVklDRV9DT0hFUkVOVDpcXG4tXFx0Y2FzZSBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE6XFxuK3N0YXRpYyB2b2lkIF9fcmVmIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHN0cnVjdCBwYWdlICpwYWdlLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcXG4rXFx0XFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG4re1xcbitcXHRfX3pvbmVfZGV2aWNlX3BhZ2VfaW5pdChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcXG4rXFx0aWYgKHBhZ2VtYXBfcmVxdWlyZXNfcmVmY291bnRfcmVzZXQocGdtYXApKVxcbiBcXHRcXHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcXG4tXFx0XFx0YnJlYWs7XFxuK31cXG4gXFxuLVxcdGNhc2UgTUVNT1JZX0RFVklDRV9HRU5FUklDOlxcbi1cXHRcXHRicmVhaztcXG4tXFx0fVxcbitzdGF0aWMgaW5saW5lIHZvaWQgem9uZV9kZXZpY2VfdGFpbF9wYWdlX2luaXQoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHpvbmVfaWR4LCBpbnQgbmlkLFxcbitcXHRcXHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBjb25zdCBzdHJ1Y3QgcGFnZSAqaGVhZCxcXG4rXFx0XFx0dW5zaWduZWQgaW50IG9yZGVyKVxcbit7XFxuK1xcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xcbitcXHRwcmVwX2NvbXBvdW5kX3RhaWwocGFnZSwgaGVhZCwgb3JkZXIpO1xcbitcXHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcXG4rfVxcbitcXG4rLypcXG4rICogJ3RlbXBsYXRlJyBpcyBhIHJldXNhYmxlIHBhZ2UgcHJvdG90eXBlIHJhdGhlciB0aGFuIGEgc3RyaWN0bHkgaW1tdXRhYmxlXFxuKyAqIG9iamVjdC4gTW9zdCBaT05FX0RFVklDRSBmaWVsZHMgc3RheSBjb25zdGFudCBhY3Jvc3MgdGhlIHBhZ2VzIGNvdmVyZWQgYnlcXG4rICogdGhlIGN1cnJlbnQgdGVtcGxhdGUsIGJ1dCBzZWN0aW9uIGJpdHMgYW5kIHBhZ2UtXFx1MDAzZXZpcnR1YWwgbWF5IHN0aWxsIGRlcGVuZFxcbisgKiBvbiB0aGUgUEZOLiBSZWZyZXNoIHRob3NlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHRoZSB0ZW1wbGF0ZSBiZWZvcmVcXG4rICogY29weWluZyBpdCBpbnRvIEBwYWdlLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlKHN0cnVjdCBwYWdlICp0ZW1wbGF0ZSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBwZm4pXFxuK3tcXG4rXFx0c2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3Bmbih0ZW1wbGF0ZSwgcGZuKTtcXG4rI2lmZGVmIFdBTlRfUEFHRV9WSVJUVUFMXFxuK1xcdGlmICghaXNfaGlnaG1lbV9pZHgoWk9ORV9ERVZJQ0UpKVxcbitcXHRcXHRzZXRfcGFnZV9hZGRyZXNzKHRlbXBsYXRlLCBfX3ZhKHBmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSk7XFxuKyNlbmRpZlxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlICp0ZW1wbGF0ZSlcXG4re1xcbitcXHQvKlxcbitcXHQgKiAndGVtcGxhdGUnIGNhcnJpZXMgdGhlIGludmFyaWFudCBwb3J0aW9uIG9mIGEgWk9ORV9ERVZJQ0Ugc3RydWN0XFxuK1xcdCAqIHBhZ2UuIFVwZGF0ZSB0aGUgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gcGxhY2UgYmVmb3JlIGNvcHlpbmcgaXRcXG4rXFx0ICogdG8gdGhlIGRlc3RpbmF0aW9uIHBhZ2UuXFxuK1xcdCAqL1xcbitcXHR6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZSh0ZW1wbGF0ZSwgcGZuKTtcXG4rXFx0bWVtY3B5X25vbnRlbXBvcmFsKHBhZ2UsIHRlbXBsYXRlLCBzaXplb2YoKnBhZ2UpKTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtMTA4Myw2ICsxMTM2LDcgQEAgc3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm4gPSBoZWFkX3BmbiArIG5yX3BhZ2VzO1xcbiBcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBwZ21hcC1cXHUwMDNldm1lbW1hcF9zaGlmdDtcXG4rXFx0c3RydWN0IHBhZ2UgdGVtcGxhdGU7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBXZSBoYXZlIHRvIGluaXRpYWxpemUgdGhlIHBhZ2VzLCBpbmNsdWRpbmcgc2V0dGluZyB1cCBwYWdlIGxpbmtzLlxcbkBAIC0xMDkxLDEyICsxMTQ1LDI2IEBAIHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxcbiBcXHQgKiB0aGUgcGFnZXMgaW4gdGhlIHNhbWUgZ28uXFxuIFxcdCAqL1xcbiBcXHRfX1NldFBhZ2VIZWFkKGhlYWQpO1xcbitcXG4gXFx0Zm9yIChwZm4gPSBoZWFkX3BmbiArIDE7IHBmbiBcXHUwMDNjIGVuZF9wZm47IHBmbisrKSB7XFxuIFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcXG4gXFxuLVxcdFxcdF9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xcbi1cXHRcXHRwcmVwX2NvbXBvdW5kX3RhaWwocGFnZSwgaGVhZCwgb3JkZXIpO1xcbi1cXHRcXHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcXG4rXFx0XFx0aWYgKHBmbiA9PSBoZWFkX3BmbiArIDEpIHtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogQWxsIHRhaWxzIG9mIHRoZSBzYW1lIGNvbXBvdW5kIHBhZ2Ugc2hhcmUgdGhlXFxuK1xcdFxcdFxcdCAqIHN0YXRlIGVzdGFibGlzaGVkIGJ5IHByZXBfY29tcG91bmRfdGFpbCgpLiBSZXVzZVxcbitcXHRcXHRcXHQgKiBvbmUgdGFpbCB0ZW1wbGF0ZSBmb3IgdGhlIHdob2xlIHJhbmdlIGFuZFxcbitcXHRcXHRcXHQgKiByZWZyZXNoIG9ubHkgdGhlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHRoYXRcXG4rXFx0XFx0XFx0ICogdGVtcGxhdGUgYmVmb3JlIGVhY2ggY29weS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgcGdtYXAsIGhlYWQsIG9yZGVyKTtcXG4rXFx0XFx0XFx0LyogaW5pdCB0ZW1wbGF0ZSBwYWdlICovXFxuK1xcdFxcdFxcdG1lbWNweShcXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHR6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShwYWdlLCBwZm4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2dGVtcGxhdGUpO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFx0cHJlcF9jb21wb3VuZF9oZWFkKGhlYWQsIG9yZGVyKTtcXG4gfVxcbkBAIC0xMTEzLDYgKzExODEsNyBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxcbiBcXHR1bnNpZ25lZCBsb25nIHpvbmVfaWR4ID0gem9uZV9pZHgoem9uZSk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzO1xcbiBcXHRpbnQgbmlkID0gcGdkYXQtXFx1MDAzZW5vZGVfaWQ7XFxuK1xcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xcbiBcXG4gXFx0aWYgKFdBUk5fT05fT05DRSghcGdtYXAgfHwgem9uZV9pZHggIT0gWk9ORV9ERVZJQ0UpKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTExMzAsNyArMTE5OSwyMSBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxcbiBcXHRmb3IgKHBmbiA9IHN0YXJ0X3BmbjsgcGZuIFxcdTAwM2MgZW5kX3BmbjsgcGZuICs9IHBmbnNfcGVyX2NvbXBvdW5kKSB7XFxuIFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcXG4gXFxuLVxcdFxcdF9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xcbitcXHRcXHRpZiAocGZuID09IHN0YXJ0X3Bmbikge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBTZWVkIHRoZSByZXVzYWJsZSBoZWFkLXBhZ2UgdGVtcGxhdGUgZnJvbSB0aGVcXG4rXFx0XFx0XFx0ICogZmlyc3QgcmVhbCBzdHJ1Y3QgcGFnZSwgYmVjYXVzZSB0aGUgZXhpc3RpbmdcXG4rXFx0XFx0XFx0ICogcGFnZS1pbml0IGFuZCBwYWdlYmxvY2sgaGVscGVycyBleHBlY3QgYSByZWFsXFxuK1xcdFxcdFxcdCAqIG1lbW1hcCBlbnRyeSByYXRoZXIgdGhhbiBhIHN0YWNrIG9iamVjdC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHBhZ2UsIHBmbiwgem9uZV9pZHgsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIG5pZCwgcGdtYXApO1xcbitcXHRcXHRcXHQvKiBpbml0IHRlbXBsYXRlIHBhZ2UgKi9cXG4rXFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBhZ2UsIHBmbixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZ0ZW1wbGF0ZSk7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChJU19BTElHTkVEKHBmbiwgUEFHRVNfUEVSX1NFQ1RJT04pKVxcbiBcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MjY6NDQuNzkyNzcwNDA1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQzMTU4MDk1MTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJQQ0lfUDJQRE1BXCIsXG4gICAgXCJEQVhcIixcbiAgICBcIkRFVl9EQVhcIixcbiAgICBcIkZTX0RBWFwiLFxuICAgIFwiTUVNT1JZX0hPVFBMVUdcIixcbiAgICBcIlNQQVJTRU1FTV9WTUVNTUFQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtbWFwX2luaXRfem9uZV9kZXZpY2VcIixcbiAgICBcIm1lbW1hcF9pbml0X2NvbXBvdW5kXCIsXG4gICAgXCJ6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZVwiLFxuICAgIFwiem9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIFpPTkVfREVWSUNFIHBhZ2VzIGJ5IHVzaW5nIGEgdGVtcGxhdGUgYW5kIG5vbi10ZW1wb3JhbCBtZW1jcHkuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB3aGVuIHByb2JpbmcgZGV2aWNlcyBsaWtlIFBNRU0sIERBWCwgb3IgUENJIFAyUERNQS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWZhMzAwMDdhYmFhMTg3ZjQ4ODIzN2Q3MDkxNTE4MDBjNzJmZjI2MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDI4IDAxOjI2OjQyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxuaW5kZXggNDYzNTYxNjg2M2Y1M2QuLmJjNmE5ZjM0YjM0NmFmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXG5AQCAtODIsNyArODIsMzUgQEAgaW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xuICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG4gI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRSAxXG4gdm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV84KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuK3tcbitcdGFzbSB2b2xhdGlsZShcIm1vdm50aXEgJTEsICUwXCJcbitcdFx0ICAgICA6IFwiPW1cIigqKHU2NCAqKWRzdClcbitcdFx0ICAgICA6IFwiclwiKCooY29uc3QgdTY0ICopc3JjKVxuK1x0XHQgICAgIDogXCJtZW1vcnlcIik7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfMTYodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXG4re1xuK1x0bW92bnRpXzgoZHN0LCBzcmMpO1xuK1x0bW92bnRpXzgoZHN0ICsgOCwgc3JjICsgOCk7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfMzIodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXG4re1xuK1x0bW92bnRpXzE2KGRzdCwgc3JjKTtcbitcdG1vdm50aV8xNihkc3QgKyAxNiwgc3JjICsgMTYpO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuK3tcbitcdG1vdm50aV8zMihkc3QsIHNyYyk7XG4rXHRtb3ZudGlfMzIoZHN0ICsgMzIsIHNyYyArIDMyKTtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLFxuK1x0XHRcdFx0XHQgICAgICBzaXplX3QgY250KVxuIHtcbiBcdGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKSB7XG4gXHRcdHN3aXRjaCAoY250KSB7XG5AQCAtOTYsMTAgKzEyNCw0OCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdFxuIFx0XHRcdFx0YXNtIChcIm1vdm50aXEgJTEsICUwXCIgOiBcIj1tXCIoKih1NjQgKilkc3QpIDogXCJyXCIoKih1NjQgKilzcmMpKTtcbiBcdFx0XHRcdGFzbSAoXCJtb3ZudGlxICUxLCAlMFwiIDogXCI9bVwiKCoodTY0ICopKGRzdCArIDgpKSA6IFwiclwiKCoodTY0ICopKHNyYyArIDgpKSk7XG4gXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0LypcbitcdFx0XHQgKiBUaGUgcmVsZXZhbnQgZml4ZWQtc2l6ZSBjb3BpZXMgaGVyZSBhcmUgdGhlXG4rXHRcdFx0ICogeDg2XzY0IHN0cnVjdCBwYWdlIHNpemVzOiA2NCwgODAsIGFuZCA5NiBieXRlcy5cbitcdFx0XHQgKiBLZWVwIDMyLWJ5dGUgYW5kIDQ4LWJ5dGUgY29waWVzIGlubGluZSBhcyB3ZWxsXG4rXHRcdFx0ICogaW5zdGVhZCBvZiBzZW5kaW5nIHRob3NlIG5lYXJieSBmaXhlZC1zaXplXG4rXHRcdFx0ICogY2FzZXMgYmFjayB0byBfX21lbWNweV9mbHVzaGNhY2hlKCkuXG4rXHRcdFx0ICovXG4rXHRcdFx0Y2FzZSAzMjpcbitcdFx0XHRcdG1vdm50aV8zMihkc3QsIHNyYyk7XG4rXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0Y2FzZSA0ODpcbitcdFx0XHRcdG1vdm50aV8zMihkc3QsIHNyYyk7XG4rXHRcdFx0XHRtb3ZudGlfMTYoZHN0ICsgMzIsIHNyYyArIDMyKTtcbitcdFx0XHRcdHJldHVybjtcbitcdFx0XHRjYXNlIDY0OlxuK1x0XHRcdFx0bW92bnRpXzY0KGRzdCwgc3JjKTtcbitcdFx0XHRcdHJldHVybjtcbitcdFx0XHRjYXNlIDgwOlxuK1x0XHRcdFx0bW92bnRpXzY0KGRzdCwgc3JjKTtcbitcdFx0XHRcdG1vdm50aV8xNihkc3QgKyA2NCwgc3JjICsgNjQpO1xuK1x0XHRcdFx0cmV0dXJuO1xuK1x0XHRcdGNhc2UgOTY6XG4rXHRcdFx0XHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xuK1x0XHRcdFx0bW92bnRpXzMyKGRzdCArIDY0LCBzcmMgKyA2NCk7XG4rXHRcdFx0XHRyZXR1cm47XG4gXHRcdH1cbiBcdH1cbitcbiBcdF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XG4gfVxuK1xuKyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsIG1lbWNweV9ub250ZW1wb3JhbFxuKy8qXG4rICogUmV1c2UgdGhlIGV4aXN0aW5nIHg4NiBmbHVzaGNhY2hlIGJhY2tlbmQgYXMgdGhlIG5vbi10ZW1wb3JhbCBjb3B5XG4rICogcHJpbWl0aXZlLlxuKyAqL1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfbm9udGVtcG9yYWwodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXG4rXHRcdHNpemVfdCBjbnQpXG4re1xuK1x0bWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XG4rfVxuK1xuICNlbmRpZlxuIFxuICNlbmRpZiAvKiBfX0tFUk5FTF9fICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCA0ODVkZjljMmRiZGRiMy4uNDMzNDNiZmNlNDkzNmUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTI1NDEsMTEgKzI1NDEsMjIgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb24oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgc2VjdGlvbilcbiBcdHBhZ2UtXHUwMDNlZmxhZ3MuZiB8PSAoc2VjdGlvbiBcdTAwMjYgU0VDVElPTlNfTUFTSykgXHUwMDNjXHUwMDNjIFNFQ1RJT05TX1BHU0hJRlQ7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLFxuK1x0XHR1bnNpZ25lZCBsb25nIHBmbilcbit7XG4rXHRzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4ge1xuIFx0cmV0dXJuIChtZGYuZiBcdTAwM2VcdTAwM2UgU0VDVElPTlNfUEdTSElGVCkgXHUwMDI2IFNFQ1RJT05TX01BU0s7XG4gfVxuICNlbHNlIC8qICFTRUNUSU9OX0lOX1BBR0VfRkxBR1MgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSxcbitcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4re1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4ge1xuIFx0cmV0dXJuIDA7XG5AQCAtMjc2OCw5ICsyNzc5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX2xpbmtzKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHpvbmVfdHlwZSB6b25lLFxuIHtcbiBcdHNldF9wYWdlX3pvbmUocGFnZSwgem9uZSk7XG4gXHRzZXRfcGFnZV9ub2RlKHBhZ2UsIG5vZGUpO1xuLSNpZmRlZiBTRUNUSU9OX0lOX1BBR0VfRkxBR1Ncbi1cdHNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7XG4tI2VuZGlmXG4rXHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHBhZ2UsIHBmbik7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5pbmRleCA1NzAyZGFjYTQzMjZiNy4uNmNiNWNkZDAxMTU4YjIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5AQCAtMjc4LDYgKzI3OCwxOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG4gfVxuICNlbmRpZlxuIFxuKyNpZm5kZWYgbWVtY3B5X25vbnRlbXBvcmFsXG4rLypcbisgKiBtZW1jcHlfbm9udGVtcG9yYWwoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlXG4rICogYXJjaGl0ZWN0dXJlIGhhcyBhIHN1aXRhYmxlIGJhY2tlbmQuIEFyY2hpdGVjdHVyZXMgd2l0aG91dCBhXG4rICogc3BlY2lhbGl6ZWQgYmFja2VuZCBmYWxsIGJhY2sgdG8gbWVtY3B5KCkuIEtlZXAgdGhpcyBhcyBhXG4rICogZnVuY3Rpb24tbGlrZSBtYWNybyBzbyB0aGUgY29tcGlsZXIgY2FuIHN0aWxsIHNlZSB0aGUgb3JpZ2luYWxcbisgKiBtZW1jcHkoKSBjYWxsIHNpdGUgYW5kIHByZXNlcnZlIHRoZSB1c3VhbCBGT1JUSUZZIGNvdmVyYWdlIHdoZW5cbisgKiBvYmplY3Qgc2l6ZXMgcmVtYWluIHZpc2libGUgdGhlcmUsIHdoaWxlIGtlZXBpbmcgdGhlIEFQSSB2b2lkLlxuKyAqL1xuKyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsKGRzdCwgc3JjLCBsZW4pIFxcXG4rXHQoKHZvaWQpbWVtY3B5KGRzdCwgc3JjLCBsZW4pKVxuKyNlbmRpZlxuK1xuIHZvaWQgKm1lbWNocl9pbnYoY29uc3Qgdm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTtcbiBjaGFyICpzdHJyZXBsYWNlKGNoYXIgKnN0ciwgY2hhciBvbGQsIGNoYXIgbmV3KTtcbiBcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IDBmNjQ5MDllOGQyMGUyLi5hZTQyYTEzMTFlMWQxOCAxMDA2NDRcbi0tLSBhL21tL21tX2luaXQuY1xuKysrIGIvbW0vbW1faW5pdC5jXG5AQCAtMTAwNSwxMSArMTAwNSwzNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbWVtbWFwX2luaXQodm9pZClcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxuLXN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcbisvKlxuKyAqIFJldHVybiB0cnVlIHdoZW4gbWVtbWFwX2luaXRfem9uZV9kZXZpY2UoKSBtdXN0IGluaXRpYWxpemUgdGhlIHBhZ2VcbisgKiByZWZjb3VudCB0byAwLiBNRU1PUllfREVWSUNFX0dFTkVSSUMgcGFnZXMgcmVnYWluIGEgcmVmY291bnQgb2YgMSBpblxuKyAqIHRoZSBmcmVlIHBhdGgsIHdoaWxlIHRoZSByZW1haW5pbmcgWk9ORV9ERVZJQ0UgdHlwZXMgc3RhcnQgZnJvbSAwIGhlcmVcbisgKiBhbmQgcmFpc2UgdGhlIGNvdW50IGFnYWluIHdoZW4gdGhlIGFsbG9jYXRvciBvciBkcml2ZXIgaGFuZHMgdGhlIHBhZ2VcbisgKiBvdXQuXG4rICovXG4rc3RhdGljIGlubGluZSBib29sIHBhZ2VtYXBfcmVxdWlyZXNfcmVmY291bnRfcmVzZXQoY29uc3Qgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbit7XG4rXHQvKlxuK1x0ICogTUVNT1JZX0RFVklDRV9HRU5FUklDIHBhZ2VzIHJlZ2FpbiBhIHJlZmNvdW50IG9mIDEgaW4gdGhlIGZyZWVcbitcdCAqIHBhdGguIFRoZSByZW1haW5pbmcgWk9ORV9ERVZJQ0UgdHlwZXMgc3RhcnQgZnJvbSAwIGhlcmUgYW5kIHJhaXNlXG4rXHQgKiB0aGUgY291bnQgYWdhaW4gd2hlbiB0aGUgYWxsb2NhdG9yIG9yIGRyaXZlciBoYW5kcyB0aGUgcGFnZSBvdXQuXG4rXHQgKi9cbitcdHN3aXRjaCAocGdtYXAtXHUwMDNldHlwZSkge1xuK1x0Y2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDpcbitcdGNhc2UgTUVNT1JZX0RFVklDRV9QUklWQVRFOlxuK1x0Y2FzZSBNRU1PUllfREVWSUNFX0NPSEVSRU5UOlxuK1x0Y2FzZSBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE6XG4rXHRcdHJldHVybiB0cnVlO1xuK1x0Y2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgX19yZWYgX196b25lX2RldmljZV9wYWdlX2luaXQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXG4gXHRcdFx0XHRcdCAgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbiB7XG4tXG4gXHRfX2luaXRfc2luZ2xlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkKTtcbiBcbiBcdC8qXG5AQCAtMTAyOCwyNyArMTA1NCw1NCBAQCBzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHQgKi9cbiBcdHBhZ2VfZm9saW8ocGFnZSktXHUwMDNlcGdtYXAgPSBwZ21hcDtcbiBcdHBhZ2UtXHUwMDNlem9uZV9kZXZpY2VfZGF0YSA9IE5VTEw7XG4rfVxuIFxuLVx0Lypcbi1cdCAqIFpPTkVfREVWSUNFIHBhZ2VzIG90aGVyIHRoYW4gTUVNT1JZX1RZUEVfR0VORVJJQyBhcmUgcmVsZWFzZWRcbi1cdCAqIGRpcmVjdGx5IHRvIHRoZSBkcml2ZXIgcGFnZSBhbGxvY2F0b3Igd2hpY2ggd2lsbCBzZXQgdGhlIHBhZ2UgY291bnRcbi1cdCAqIHRvIDEgd2hlbiBhbGxvY2F0aW5nIHRoZSBwYWdlLlxuLVx0ICpcbi1cdCAqIE1FTU9SWV9UWVBFX0dFTkVSSUMgYW5kIE1FTU9SWV9UWVBFX0ZTX0RBWCBwYWdlcyBhdXRvbWF0aWNhbGx5IGhhdmVcbi1cdCAqIHRoZWlyIHJlZmNvdW50IHJlc2V0IHRvIG9uZSB3aGVuZXZlciB0aGV5IGFyZSBmcmVlZCAoaWUuIGFmdGVyXG4tXHQgKiB0aGVpciByZWZjb3VudCBkcm9wcyB0byAwKS5cbi1cdCAqL1xuLVx0c3dpdGNoIChwZ21hcC1cdTAwM2V0eXBlKSB7XG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOlxuLVx0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6XG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQTpcbitzdGF0aWMgdm9pZCBfX3JlZiB6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhzdHJ1Y3QgcGFnZSAqcGFnZSxcbitcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXG4rXHRcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4re1xuK1x0X196b25lX2RldmljZV9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4rXHRpZiAocGFnZW1hcF9yZXF1aXJlc19yZWZjb3VudF9yZXNldChwZ21hcCkpXG4gXHRcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xuLVx0XHRicmVhaztcbit9XG4gXG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfR0VORVJJQzpcbi1cdFx0YnJlYWs7XG4tXHR9XG4rc3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLFxuK1x0XHR1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcbitcdFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgY29uc3Qgc3RydWN0IHBhZ2UgKmhlYWQsXG4rXHRcdHVuc2lnbmVkIGludCBvcmRlcilcbit7XG4rXHR6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbitcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XG4rXHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcbit9XG4rXG4rLypcbisgKiAndGVtcGxhdGUnIGlzIGEgcmV1c2FibGUgcGFnZSBwcm90b3R5cGUgcmF0aGVyIHRoYW4gYSBzdHJpY3RseSBpbW11dGFibGVcbisgKiBvYmplY3QuIE1vc3QgWk9ORV9ERVZJQ0UgZmllbGRzIHN0YXkgY29uc3RhbnQgYWNyb3NzIHRoZSBwYWdlcyBjb3ZlcmVkIGJ5XG4rICogdGhlIGN1cnJlbnQgdGVtcGxhdGUsIGJ1dCBzZWN0aW9uIGJpdHMgYW5kIHBhZ2UtXHUwMDNldmlydHVhbCBtYXkgc3RpbGwgZGVwZW5kXG4rICogb24gdGhlIFBGTi4gUmVmcmVzaCB0aG9zZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGUgdGVtcGxhdGUgYmVmb3JlXG4rICogY29weWluZyBpdCBpbnRvIEBwYWdlLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCB6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUsXG4rXHRcdHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbitcdHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4odGVtcGxhdGUsIHBmbik7XG4rI2lmZGVmIFdBTlRfUEFHRV9WSVJUVUFMXG4rXHRpZiAoIWlzX2hpZ2htZW1faWR4KFpPTkVfREVWSUNFKSlcbitcdFx0c2V0X3BhZ2VfYWRkcmVzcyh0ZW1wbGF0ZSwgX192YShwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKTtcbisjZW5kaWZcbit9XG4rXG4rc3RhdGljIHZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4rXHRcdHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpXG4re1xuK1x0LypcbitcdCAqICd0ZW1wbGF0ZScgY2FycmllcyB0aGUgaW52YXJpYW50IHBvcnRpb24gb2YgYSBaT05FX0RFVklDRSBzdHJ1Y3RcbitcdCAqIHBhZ2UuIFVwZGF0ZSB0aGUgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gcGxhY2UgYmVmb3JlIGNvcHlpbmcgaXRcbitcdCAqIHRvIHRoZSBkZXN0aW5hdGlvbiBwYWdlLlxuK1x0ICovXG4rXHR6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZSh0ZW1wbGF0ZSwgcGZuKTtcbitcdG1lbWNweV9ub250ZW1wb3JhbChwYWdlLCB0ZW1wbGF0ZSwgc2l6ZW9mKCpwYWdlKSk7XG4gfVxuIFxuIC8qXG5AQCAtMTA4Myw2ICsxMTM2LDcgQEAgc3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm4gPSBoZWFkX3BmbiArIG5yX3BhZ2VzO1xuIFx0dW5zaWduZWQgaW50IG9yZGVyID0gcGdtYXAtXHUwMDNldm1lbW1hcF9zaGlmdDtcbitcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xuIFxuIFx0LypcbiBcdCAqIFdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgcGFnZXMsIGluY2x1ZGluZyBzZXR0aW5nIHVwIHBhZ2UgbGlua3MuXG5AQCAtMTA5MSwxMiArMTE0NSwyNiBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcbiBcdCAqIHRoZSBwYWdlcyBpbiB0aGUgc2FtZSBnby5cbiBcdCAqL1xuIFx0X19TZXRQYWdlSGVhZChoZWFkKTtcbitcbiBcdGZvciAocGZuID0gaGVhZF9wZm4gKyAxOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbisrKSB7XG4gXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcbiBcbi1cdFx0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4tXHRcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XG4tXHRcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xuK1x0XHRpZiAocGZuID09IGhlYWRfcGZuICsgMSkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogQWxsIHRhaWxzIG9mIHRoZSBzYW1lIGNvbXBvdW5kIHBhZ2Ugc2hhcmUgdGhlXG4rXHRcdFx0ICogc3RhdGUgZXN0YWJsaXNoZWQgYnkgcHJlcF9jb21wb3VuZF90YWlsKCkuIFJldXNlXG4rXHRcdFx0ICogb25lIHRhaWwgdGVtcGxhdGUgZm9yIHRoZSB3aG9sZSByYW5nZSBhbmRcbitcdFx0XHQgKiByZWZyZXNoIG9ubHkgdGhlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHRoYXRcbitcdFx0XHQgKiB0ZW1wbGF0ZSBiZWZvcmUgZWFjaCBjb3B5LlxuK1x0XHRcdCAqL1xuK1x0XHRcdHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCxcbitcdFx0XHRcdFx0XHQgICBwZ21hcCwgaGVhZCwgb3JkZXIpO1xuK1x0XHRcdC8qIGluaXQgdGVtcGxhdGUgcGFnZSAqL1xuK1x0XHRcdG1lbWNweShcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLFxuK1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnRlbXBsYXRlKTtcbitcdFx0fVxuIFx0fVxuIFx0cHJlcF9jb21wb3VuZF9oZWFkKGhlYWQsIG9yZGVyKTtcbiB9XG5AQCAtMTExMyw2ICsxMTgxLDcgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcbiBcdHVuc2lnbmVkIGxvbmcgem9uZV9pZHggPSB6b25lX2lkeCh6b25lKTtcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzO1xuIFx0aW50IG5pZCA9IHBnZGF0LVx1MDAzZW5vZGVfaWQ7XG4rXHRzdHJ1Y3QgcGFnZSB0ZW1wbGF0ZTtcbiBcbiBcdGlmIChXQVJOX09OX09OQ0UoIXBnbWFwIHx8IHpvbmVfaWR4ICE9IFpPTkVfREVWSUNFKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTExMzAsNyArMTE5OSwyMSBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuIFx0Zm9yIChwZm4gPSBzdGFydF9wZm47IHBmbiBcdTAwM2MgZW5kX3BmbjsgcGZuICs9IHBmbnNfcGVyX2NvbXBvdW5kKSB7XG4gXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcbiBcbi1cdFx0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4rXHRcdGlmIChwZm4gPT0gc3RhcnRfcGZuKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBTZWVkIHRoZSByZXVzYWJsZSBoZWFkLXBhZ2UgdGVtcGxhdGUgZnJvbSB0aGVcbitcdFx0XHQgKiBmaXJzdCByZWFsIHN0cnVjdCBwYWdlLCBiZWNhdXNlIHRoZSBleGlzdGluZ1xuK1x0XHRcdCAqIHBhZ2UtaW5pdCBhbmQgcGFnZWJsb2NrIGhlbHBlcnMgZXhwZWN0IGEgcmVhbFxuK1x0XHRcdCAqIG1lbW1hcCBlbnRyeSByYXRoZXIgdGhhbiBhIHN0YWNrIG9iamVjdC5cbitcdFx0XHQgKi9cbitcdFx0XHR6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LFxuK1x0XHRcdFx0XHRcdCAgIG5pZCwgcGdtYXApO1xuK1x0XHRcdC8qIGluaXQgdGVtcGxhdGUgcGFnZSAqL1xuK1x0XHRcdG1lbWNweShcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLFxuK1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnRlbXBsYXRlKTtcbitcdFx0fVxuIFxuIFx0XHRpZiAoSVNfQUxJR05FRChwZm4sIFBBR0VTX1BFUl9TRUNUSU9OKSlcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI2OjQ0Ljc5Mjc3MTk4NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MzU1ODM3ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIE9wdGltaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBvcHRpbWl6ZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBzdHJ1Y3QgcGFnZWAgZm9yIGBaT05FX0RFVklDRWAgbWVtb3J5LiBJdCdzIHVzaW5nIGBtZW1jcHlfbm9udGVtcG9yYWxgIHRvIGNvcHkgYSBwcmUtZGVmaW5lZCB0ZW1wbGF0ZSBpbnN0ZWFkIG9mIHBhaW5zdGFraW5nbHkgaW5pdGlhbGl6aW5nIGVhY2ggcGFnZSBpbmRpdmlkdWFsbHksIHdoaWNoIGlzIGEgY2xldmVyIGFwcHJvYWNoLiBUaGlzIG9wdGltaXphdGlvbiB0YXJnZXRzIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYW5kIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAsIGJvdGggb2Ygd2hpY2ggYXJlIGNyaXRpY2FsIGluIG1lbW9yeSBtYW5hZ2VtZW50LiBJdCBhbHNvIGxvb2tzIGxpa2UgdGhlcmUncyBhbiB4ODYtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgYG1lbWNweV9ub250ZW1wb3JhbGAgdXNpbmcgYG1vdm50aWAgaW5zdHJ1Y3Rpb25zLCBhIG5pY2UgbG93LWxldmVsIG9wdGltaXphdGlvbi5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlzIHRoaXMgcmVhY2hhYmxlIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgd29ydGggZnV6emluZz8gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyB0cmlnZ2VyZWQgd2hlbiBgWk9ORV9ERVZJQ0VgIG1lbW9yeSBpcyBob3RwbHVnZ2VkLiBUaGF0J3MgdHlwaWNhbGx5IGZvciBEQVgsIFBNRU0sIGFuZCB0aGUgbGlrZS4gTm93LCBjYW4gdGhpcyBiZSByZWFjaGVkIGluIGEgY29tbW9uIHNldHVwIGxpa2UgUUVNVT8gQWJzb2x1dGVseSEgV2UgY2FuIGVtdWxhdGUgUE1FTS9OVkRJTU0gZGV2aWNlcyBpbiBRRU1VLCB3ZSBjYW4gdXNlIHRoZSBgbWVtbWFwPWAga2VybmVsIHBhcmFtZXRlciBvciBldmVuIHV0aWxpemUgYG1tYXBgIHdpdGggREFYLiBIbW0sIHdhaXQgYSBtaW51dGUsIEkgcmVtZW1iZXIgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyBjYWxsZWQgZnJvbSBgZGV2bV9tZW1yZW1hcF9wYWdlc2AuIExldCdzIGRpZyBkZWVwZXIgYW5kIHNlZSB3aGF0IGNhbGxzIHRoYXQgZnVuY3Rpb24uICpjaGVja3MgY29kZSogT2theSwgaXQncyBjYWxsZWQgZnJvbSBgZHJpdmVycy9kYXgvc3VwZXIuY2AsIGBkcml2ZXJzL252ZGltbS9wbWVtLmNgLCBhbmQgYGRyaXZlcnMvcGNpL3AycGRtYS5jYC4gSW50ZXJlc3RpbmchXG5cblRoZSBiaWcgcXVlc3Rpb24gbm93IGlzLCBjYW4gc3l6a2FsbGVyIHRyaWdnZXIgYGRldm1fbWVtcmVtYXBfcGFnZXNgIHRocm91Z2gsIHBlcmhhcHMsIHNvbWUgbG9vcCBkZXZpY2UsIGEgcG1lbSBkZXZpY2UsIG9yIGV2ZW4gcDJwZG1hPyBBY3R1YWxseSwgd2FpdCwgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyBhIGNvcmUgTU0gZnVuY3Rpb24sIHNvIGl0J3MgYSBkZWZpbml0ZSBcInllc1wiIHRvIGNvcmUga2VybmVsIGxvZ2ljLiBOb3csIGxldCdzIHJlZm9jdXMuIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uLCB5ZXMsIGJ1dCBpdCBjaGFuZ2VzIGhvdyBwYWdlcyBhcmUgaW5pdGlhbGl6ZWQsIG1lYW5pbmcgaXQgdG91Y2hlcyBjb3JlIE1NIGxvZ2ljLiBBYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBoZXJlIGFyZSBkZWZpbml0ZWx5IGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYW5kIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayBpZiBgWk9ORV9ERVZJQ0VgIGlzIGV2ZW4gZW5hYmxlZCBpbiB0eXBpY2FsIGNvbmZpZ3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19aT05FX0RFVklDRWAgaXMgc2V0LiBMZXQgbWUganVzdCBjaGVjayBgbW0vbW1faW5pdC5jYCB0byBjb25maXJtIHdoZXJlIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgaXMgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkyNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI2OjUzLjIyODM1NzQzOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc5NzE4NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtbWFwX2luaXRfem9uZV9kZXZpY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXJlbWFwLmM9MTQ0PXN0YXRpYyBpbnQgcGFnZW1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxubW0vbWVtcmVtYXAuYy0yNDEtXFx0ICovXFxubW0vbWVtcmVtYXAuYzoyNDI6XFx0bWVtbWFwX2luaXRfem9uZV9kZXZpY2UoXFx1MDAyNk5PREVfREFUQShuaWQpLVxcdTAwM2Vub2RlX3pvbmVzW1pPTkVfREVWSUNFXSxcXG5tbS9tZW1yZW1hcC5jLTI0My1cXHRcXHRcXHRcXHRQSFlTX1BGTihyYW5nZS1cXHUwMDNlc3RhcnQpLFxcbi0tXFxubW0vbW1faW5pdC5jPTk2OD1zdGF0aWMgdm9pZCBfX2luaXQgbWVtbWFwX2luaXQodm9pZClcXG4tLVxcbm1tL21tX2luaXQuYy0xMDA4LS8qXFxubW0vbW1faW5pdC5jOjEwMDk6ICogUmV0dXJuIHRydWUgd2hlbiBtZW1tYXBfaW5pdF96b25lX2RldmljZSgpIG11c3QgaW5pdGlhbGl6ZSB0aGUgcGFnZVxcbm1tL21tX2luaXQuYy0xMDEwLSAqIHJlZmNvdW50IHRvIDAuIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluXFxuLS1cXG5tbS9tbV9pbml0LmM9MTEzMT1zdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcXG4tLVxcbm1tL21tX2luaXQuYy0xMTcxLVxcbm1tL21tX2luaXQuYzoxMTcyOnZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxubW0vbW1faW5pdC5jLTExNzMtXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI2OjUzLjM3NjMzMzgwNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjIyMjUzMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYW5kIGl0cyBVc2FnZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGh1bmNoIHRlbGxzIG1lIHRoaXMgaXMgd2hlcmUgc29tZSBjcml0aWNhbCBpbml0aWFsaXphdGlvbiBvciBzZXR1cCBmb3IgbWVtb3J5IG1hcHBpbmcgaXMgaGFuZGxlZCB3aXRoaW4gYSBzcGVjaWZpYyB6b25lIG9yIGRldmljZSBjb250ZXh0LiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kICpob3cqIGl0J3MgYmVpbmcgdXNlZC4gVGhlIGNhbGwgZ3JhcGggaXMgd2hhdCBJIHdpbGwgbG9vayBhdC5cblxuTm93LCBJIG5lZWQgdG8gdHJhY2UgdGhlIGNvbnRyb2wgZmxvdy4gTGV0J3Mgc2VlLi4uYGRldm1fbWVtcmVtYXBfcGFnZXNgIGlzIGEgbGlrZWx5IHN0YXJ0aW5nIHBvaW50IGJlY2F1c2UgdGhhdCdzIHdoYXQgc2VlbXMgdG8gcmVsYXRlIHRvIHRoZSAnZGV2aWNlIG1hbmFnZWQgbWVtb3J5IHJlbWFwcGluZycuIFRoYXQgY2FsbHMgYHBhZ2VtYXBfcmFuZ2VgLiBBbmQgKmFoYSEqIGBwYWdlbWFwX3JhbmdlYCBjYWxscyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiBTbyB0aGUgZGVwZW5kZW5jeSBpcyBjbGVhci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgZGV2bV9tZW1yZW1hcF9wYWdlc2AgZG9lcyBhdCB0aGUgdG9wLCBzaW5jZSBpdCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQgaW4gd2hpY2ggYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyBiZWluZyBpbnZva2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjkwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MjY6NTcuMTM4NTYwODA5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNzMwNzU2NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2bV9tZW1yZW1hcF9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTI3ND1UaGVzZSBjYW4gYmUgYWxsb2NhdGVkIGFuZCBmcmVlZCB3aXRoOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yOTAtXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjI5MTpUaGVyZSBhcmUgYWxzbyBkZXZtX3JlcXVlc3RfZnJlZV9tZW1fcmVnaW9uKCksIGRldm1fbWVtcmVtYXBfcGFnZXMoKSxcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjkyLWRldm1fbWVtdW5tYXBfcGFnZXMoKSwgYW5kIGRldm1fcmVsZWFzZV9tZW1fcmVnaW9uKCkgd2hlbiB0aGUgcmVzb3VyY2VzIGNhblxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0PTE0MT10byBrZWVwIHRoZSBtZW1vcnkgcGlubmVkIGZvciBhY3RpdmUgdXNlLiBgWk9ORV9ERVZJQ0VgLCB2aWFcXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q6MTQyOjpjOmZ1bmM6YGRldm1fbWVtcmVtYXBfcGFnZXNgLCBwZXJmb3JtcyBqdXN0IGVub3VnaCBtZW1vcnkgaG90cGx1ZyB0b1xcbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdC0xNDMtdHVybiBvbiA6YzpmdW5jOmBwZm5fdG9fcGFnZWAsIDpjOmZ1bmM6YHBhZ2VfdG9fcGZuYCwgYW5kXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q9MTU3PW1lbW9yeSBob3RwbHVnLiBTdWItc2VjdGlvbiBzdXBwb3J0IGFsbG93cyBmb3IgMk1CIGFzIHRoZSBjcm9zcy1hcmNoXFxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0OjE1ODpjb21tb24gYWxpZ25tZW50IGdyYW51bGFyaXR5IGZvciA6YzpmdW5jOmBkZXZtX21lbXJlbWFwX3BhZ2VzYC5cXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3QtMTU5LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdD0yMjA9bWlncmF0ZV92bWFfZmluYWxpemUoKSDlh73mlbDml6jlnKjkvb/pqbHliqjnqIvluo/mm7TmmJPkuo7nvJblhpnlubbpm4bkuK3ot6jpqbHliqjnqIvluo/nmoTpgJrnlKjku6PnoIHjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjQxLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjQyOui/mOaciWRldm1fcmVxdWVzdF9mcmVlX21lbV9yZWdpb24oKSwgZGV2bV9tZW1yZW1hcF9wYWdlcygpLFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjQzLWRldm1fbWVtdW5tYXBfcGFnZXMoKSDlkowgZGV2bV9yZWxlYXNlX21lbV9yZWdpb24oKSDlvZPotYTmupDlj6/ku6Xnu5HlrprliLAgYGBzdHJ1Y3QgZGV2aWNlYGAuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0PTEwNz1aT05FX0RFVklDRVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdC0xMTEt5LqL5a6e5pyJ5YWz77ya6L+Z5Lqb5Zyw5Z2A6IyD5Zu055qE6aG16Z2i5a+56LGh5LuO5pyq6KKr5Zyo57q/5qCH6K6w6L+H77yM6ICM5LiU5b+F6aG75a+56K6+5aSH6L+b6KGM5byV55So77yM6ICM5LiN5LuF5LuFXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdDoxMTI65piv6aG16Z2i77yM5Lul5L+d5oyB5YaF5a2Y6KKr4oCc6ZSB5a6a4oCd5Lul5L6/5L2/55So44CCIGBaT05FX0RFVklDRWAg77yM6YCa6L+HIDpjOmZ1bmM6YGRldm1fbWVtcmVtYXBfcGFnZXNgIO+8jFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtMTEzLeS4uue7meWumueahHBmbnPojIPlm7TmiafooYzotrPlpJ/nmoTlhoXlrZjng63mj5Lmi5TmnaXlvIDlkK8gOmM6ZnVuYzpgcGZuX3RvX3BhZ2Vg77yMXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0LTEyMi06YzpmdW5jOmBhcmNoX2FkZF9tZW1vcnlgIO+8jOWNs+WGheWtmOeDreaPkuaLlOeahOS4iuWNiumDqOWIhuOAguWtkOauteaUr+aMgeWFgeiuuDJNQuS9nOS4ulxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3Q6MTIzOjpjOmZ1bmM6YGRldm1fbWVtcmVtYXBfcGFnZXNgIOeahOi3qOaetuaehOmAmueUqOWvuem9kOmil+eykuW6puOAglxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtMTI0LVxcbi0tXFxuZHJpdmVycy9kYXgvZGV2aWNlLmM9MzgwPXN0YXRpYyBpbnQgZGV2X2RheF9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcXG4tLVxcbmRyaXZlcnMvZGF4L2RldmljZS5jLTQzNC1cXHRcXHRcXHRvcmRlcl9iYXNlXzIoZGV2X2RheC1cXHUwMDNlYWxpZ24gXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuZHJpdmVycy9kYXgvZGV2aWNlLmM6NDM1OlxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGdtYXApO1xcbmRyaXZlcnMvZGF4L2RldmljZS5jLTQzNi1cXHRpZiAoSVNfRVJSKGFkZHIpKVxcbi0tXFxuZHJpdmVycy9kYXgvZnNkZXYuYz0yMDc9c3RhdGljIGludCBmc2Rldl9kYXhfcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXFxuLS1cXG5kcml2ZXJzL2RheC9mc2Rldi5jLTI3My1cXG5kcml2ZXJzL2RheC9mc2Rldi5jOjI3NDpcXHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBnbWFwKTtcXG5kcml2ZXJzL2RheC9mc2Rldi5jLTI3NS1cXHRpZiAoSVNfRVJSKGFkZHIpKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYz0xMDI2PWludCBrZ2Qya2ZkX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTEwNjctXFx0ICovXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYzoxMDY4OlxcdHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGFkZXYtXFx1MDAzZWRldiwgcGdtYXApO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtMTA2OS1cXHRpZiAoSVNfRVJSKHIpKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9MTc2MD1zdGF0aWMgc3RydWN0IHhlX3BhZ2VtYXAgKnhlX3BhZ2VtYXBfY3JlYXRlKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCBzdHJ1Y3QgeGVfdnJhbV9yZWdpb24gKnZyKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE4MDEtXFx0cGFnZW1hcC1cXHUwMDNlb3BzID0gZHJtX3BhZ2VtYXBfcGFnZW1hcF9vcHNfZ2V0KCk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjE4MDI6XFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBwYWdlbWFwKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTgwMy1cXHRpZiAoSVNfRVJSKGFkZHIpKSB7XFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYz0zODE9c3RhdGljIGludCBtc2h2X3Z0bF9pb2N0bF9hZGRfdnRsMF9tZW0oc3RydWN0IG1zaHZfdnRsICp2dGwsIHZvaWQgX191c2VyICphcmcpXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MTktXFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmM6NDIwOlxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKG1lbV9kZXYsIHBnbWFwKTtcXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MjEtXFx0aWYgKElTX0VSUihhZGRyKSkge1xcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jOjQyMjpcXHRcXHRkZXZfZXJyKHZ0bC1cXHUwMDNlbW9kdWxlX2RldiwgXFxcImRldm1fbWVtcmVtYXBfcGFnZXMgZXJyb3I6ICVsZFxcXFxuXFxcIiwgUFRSX0VSUihhZGRyKSk7XFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDIzLVxcdFxcdGtmcmVlKHBnbWFwKTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWc9MTQzPWNvbmZpZyBOVkRJTU1fVEVTVF9CVUlMRFxcbi0tXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0xNTEtXFx0ICBvdGhlcndpc2UgaGVscHMgY2F0Y2ggYnVpbGQgZXJyb3JzIGluZHVjZWQgYnkgY2hhbmdlcyB0byB0aGVcXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjE1MjpcXHQgIGNvcmUgZGV2bV9tZW1yZW1hcF9wYWdlcygpIGltcGxlbWVudGF0aW9uIGFuZCBvdGhlclxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTUzLVxcdCAgaW5mcmFzdHJ1Y3R1cmUuXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9NDQ4PXN0YXRpYyBpbnQgcG1lbV9hdHRhY2hfZGlzayhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTE3LVxcdFxcdHBtZW0tXFx1MDAzZXBnbWFwLm9wcyA9IFxcdTAwMjZmc2RheF9wYWdlbWFwX29wcztcXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NTE4OlxcdFxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgXFx1MDAyNnBtZW0tXFx1MDAzZXBnbWFwKTtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTE5LVxcdFxcdHBmbl9zYiA9IG5kX3Bmbi1cXHUwMDNlcGZuX3NiO1xcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUzMC1cXHRcXHRwbWVtLVxcdTAwM2VwZ21hcC5vcHMgPSBcXHUwMDI2ZnNkYXhfcGFnZW1hcF9vcHM7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjUzMTpcXHRcXHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIFxcdTAwMjZwbWVtLVxcdTAwM2VwZ21hcCk7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUzMi1cXHRcXHRiYl9yYW5nZSA9IHBtZW0tXFx1MDAzZXBnbWFwLnJhbmdlO1xcbi0tXFxuZHJpdmVycy9wY2kvcDJwZG1hLmM9Mzg3PWludCBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhciwgc2l6ZV90IHNpemUsXFxuLS1cXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy00MzYtXFxuZHJpdmVycy9wY2kvcDJwZG1hLmM6NDM3OlxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBnbWFwKTtcXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy00MzgtXFx0aWYgKElTX0VSUihhZGRyKSkge1xcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYz01NTM9ZGNzc2Jsa19hZGRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jLTY5Ni1cXHRcXHRkZXZfaW5mby1cXHUwMDNlcGdtYXAubnJfcmFuZ2VcXHQ9IDE7XFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYzo2OTc6XFx0XFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoXFx1MDAyNmRldl9pbmZvLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXZfaW5mby1cXHUwMDNlcGdtYXApO1xcbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmMtNjk4LVxcdFxcdGlmIChJU19FUlIoYWRkcikpIHtcXG4tLVxcbmZzL2Z1c2UvdmlydGlvX2ZzLmM9MTA3Nj1zdGF0aWMgaW50IHZpcnRpb19mc19zZXR1cF9kYXgoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsIHN0cnVjdCB2aXJ0aW9fZnMgKmZzKVxcbi0tXFxuZnMvZnVzZS92aXJ0aW9fZnMuYy0xMTE2LVxcdC8qIElkZWFsbHkgd2Ugd291bGQgZGlyZWN0bHkgdXNlIHRoZSBQQ0kgQkFSIHJlc291cmNlIGJ1dFxcbmZzL2Z1c2UvdmlydGlvX2ZzLmM6MTExNzpcXHQgKiBkZXZtX21lbXJlbWFwX3BhZ2VzKCkgd2FudHMgaXRzIG93biBjb3B5IGluIHBnbWFwLiAgU29cXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMTgtXFx0ICogaW5pdGlhbGl6ZSBhIHN0cnVjdCByZXNvdXJjZSBmcm9tIHNjcmF0Y2ggKG9ubHkgdGhlIHN0YXJ0XFxuLS1cXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMjYtXFxuZnMvZnVzZS92aXJ0aW9fZnMuYzoxMTI3OlxcdGZzLVxcdTAwM2V3aW5kb3dfa2FkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKFxcdTAwMjZ2ZGV2LVxcdTAwM2VkZXYsIHBnbWFwKTtcXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMjgtXFx0aWYgKElTX0VSUihmcy1cXHUwMDNld2luZG93X2thZGRyKSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD03Nz1zdHJ1Y3QgZGV2X3BhZ2VtYXBfb3BzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0xMTUtICogQGFsdG1hcDogcHJlLWFsbG9jYXRlZC9yZXNlcnZlZCBtZW1vcnkgZm9yIHZtZW1tYXAgYWxsb2NhdGlvbnNcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MTE2OiAqIEByZWY6IHJlZmVyZW5jZSBjb3VudCB0aGF0IHBpbnMgdGhlIGRldm1fbWVtcmVtYXBfcGFnZXMoKSBtYXBwaW5nXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTExNy0gKiBAZG9uZTogY29tcGxldGlvbiBmb3IgQHJlZlxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTIzMD12b2lkIG1lbXVubWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApO1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyMzE6dm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApO1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yMzItdm9pZCBkZXZtX21lbXVubWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9MjQ3PXN0YXRpYyBpbmxpbmUgdm9pZCB6b25lX2RldmljZV9wcml2YXRlX3NwbGl0X2NiKHN0cnVjdCBmb2xpbyAqb3JpZ2luYWxfZm9saW8sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjY0LSNlbHNlXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjI2NTpzdGF0aWMgaW5saW5lIHZvaWQgKmRldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LFxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNjYtXFx0XFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNjgtXFx0LypcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjY5OlxcdCAqIEZhaWwgYXR0ZW1wdHMgdG8gY2FsbCBkZXZtX21lbXJlbWFwX3BhZ2VzKCkgd2l0aG91dFxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNzAtXFx0ICogWk9ORV9ERVZJQ0Ugc3VwcG9ydCBlbmFibGVkLCB0aGlzIHJlcXVpcmVzIGNhbGxlcnMgdG8gZmFsbFxcbi0tXFxubW0vbWVtcmVtYXAuYz0xMzA9RVhQT1JUX1NZTUJPTF9HUEwobWVtdW5tYXBfcGFnZXMpO1xcbm1tL21lbXJlbWFwLmMtMTMxLVxcbm1tL21lbXJlbWFwLmM6MTMyOnN0YXRpYyB2b2lkIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSh2b2lkICpkYXRhKVxcbm1tL21lbXJlbWFwLmMtMTMzLXtcXG4tLVxcbm1tL21lbXJlbWFwLmM9MTQ0PXN0YXRpYyBpbnQgcGFnZW1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxubW0vbWVtcmVtYXAuYy0yNjEtLypcXG5tbS9tZW1yZW1hcC5jOjI2MjogKiBOb3QgZGV2aWNlIG1hbmFnZWQgdmVyc2lvbiBvZiBkZXZtX21lbXJlbWFwX3BhZ2VzLCB1bmRvbmUgYnlcXG5tbS9tZW1yZW1hcC5jOjI2MzogKiBtZW11bm1hcF9wYWdlcygpLiAgUGxlYXNlIHVzZSBkZXZtX21lbXJlbWFwX3BhZ2VzIGlmIHlvdSBoYXZlIGEgc3RydWN0XFxubW0vbWVtcmVtYXAuYy0yNjQtICogZGV2aWNlIGF2YWlsYWJsZS5cXG4tLVxcbm1tL21lbXJlbWFwLmM9MzUyPUVYUE9SVF9TWU1CT0xfR1BMKG1lbXJlbWFwX3BhZ2VzKTtcXG4tLVxcbm1tL21lbXJlbWFwLmMtMzU0LS8qKlxcbm1tL21lbXJlbWFwLmM6MzU1OiAqIGRldm1fbWVtcmVtYXBfcGFnZXMgLSByZW1hcCBhbmQgcHJvdmlkZSBtZW1tYXAgYmFja2luZyBmb3IgdGhlIGdpdmVuIHJlc291cmNlXFxubW0vbWVtcmVtYXAuYy0zNTYtICogQGRldjogaG9zdGluZyBkZXZpY2UgZm9yIEByZXNcXG4tLVxcbm1tL21lbXJlbWFwLmMtMzY3LSAqICAgICdsaXZlJyBvbiBlbnRyeSBhbmQgd2lsbCBiZSBraWxsZWQgYW5kIHJlYXBlZCBhdFxcbm1tL21lbXJlbWFwLmM6MzY4OiAqICAgIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSgpIHRpbWUsIG9yIGlmIHRoaXMgcm91dGluZSBmYWlscy5cXG5tbS9tZW1yZW1hcC5jLTM2OS0gKlxcbi0tXFxubW0vbWVtcmVtYXAuYy0zNzMtICovXFxubW0vbWVtcmVtYXAuYzozNzQ6dm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxubW0vbWVtcmVtYXAuYy0zNzUte1xcbi0tXFxubW0vbWVtcmVtYXAuYy0zODItXFxubW0vbWVtcmVtYXAuYzozODM6XFx0ZXJyb3IgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UsXFxubW0vbWVtcmVtYXAuYy0zODQtXFx0XFx0XFx0cGdtYXApO1xcbi0tXFxubW0vbWVtcmVtYXAuYy0zODgtfVxcbm1tL21lbXJlbWFwLmM6Mzg5OkVYUE9SVF9TWU1CT0xfR1BMKGRldm1fbWVtcmVtYXBfcGFnZXMpO1xcbm1tL21lbXJlbWFwLmMtMzkwLVxcbm1tL21lbXJlbWFwLmM9MzkxPXZvaWQgZGV2bV9tZW11bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxubW0vbWVtcmVtYXAuYy0zOTIte1xcbm1tL21lbXJlbWFwLmM6MzkzOlxcdGRldm1fcmVsZWFzZV9hY3Rpb24oZGV2LCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UsIHBnbWFwKTtcXG5tbS9tZW1yZW1hcC5jLTM5NC19XFxuLS1cXG50b29scy90ZXN0aW5nL252ZGltbS9LYnVpbGQ9MTM9bGRmbGFncy15ICs9IC0td3JhcD1fX3JlbGVhc2VfcmVnaW9uXFxudG9vbHMvdGVzdGluZy9udmRpbW0vS2J1aWxkOjE0OmxkZmxhZ3MteSArPSAtLXdyYXA9ZGV2bV9tZW1yZW1hcF9wYWdlc1xcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL0tidWlsZC0xNS1sZGZsYWdzLXkgKz0gLS13cmFwPWluc2VydF9yZXNvdXJjZVxcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jPTEwOD1zdGF0aWMgdm9pZCBkZXZfcGFnZW1hcF9wZXJjcHVfcmVsZWFzZShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTExNC1cXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM6MTE1OnZvaWQgKl9fd3JhcF9kZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTE2LXtcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMjEtXFx0aWYgKCFuZml0X3JlcylcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM6MTIyOlxcdFxcdHJldHVybiBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGdtYXApO1xcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMjMtXFxuLS1cXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTM0LX1cXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM6MTM1OkVYUE9SVF9TWU1CT0xfR1BMKF9fd3JhcF9kZXZtX21lbXJlbWFwX3BhZ2VzKTtcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTM2LVxcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0X3Rlc3QuaD0yMTI9dm9pZCAqX193cmFwX2Rldm1fbWVtcmVtYXAoc3RydWN0IGRldmljZSAqZGV2LCByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LFxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdF90ZXN0LmgtMjEzLVxcdFxcdHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKTtcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L25maXRfdGVzdC5oOjIxNDp2b2lkICpfX3dyYXBfZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApO1xcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdF90ZXN0LmgtMjE1LXZvaWQgKl9fd3JhcF9tZW1yZW1hcChyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6Mjc6MDAuMjExNjQzMjk4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYxMjIyMDYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgZGV2bV9tZW1yZW1hcF9wYWdlc2AgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGNhbGwgc2l0ZXMgb2YgYGRldm1fbWVtcmVtYXBfcGFnZXNgLiBJIHNlZSB0aGF0IGBkcml2ZXJzL3BjaS9wMnBkbWEuY2AsIGBkcml2ZXJzL2RheC9kZXZpY2UuY2AsIGBkcml2ZXJzL252ZGltbS9wbWVtLmNgLCBgZnMvZnVzZS92aXJ0aW9fZnMuY2AsIGFuZCBgZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuY2AgYWxsIHVzZSB0aGlzIGZ1bmN0aW9uLiBOb3csIGEga2V5IHF1ZXN0aW9uIGZvciBtZSBpcyB3aGV0aGVyIHN5emthbGxlciBjYW4gcmVhbGlzdGljYWxseSB0cmlnZ2VyIGBkZXZtX21lbXJlbWFwX3BhZ2VzYC4gVGhlIGFuc3dlciBzZWVtcyB0byBiZSB5ZXMg4oCTIGNyZWF0aW5nIGEgbG9vcCBkZXZpY2UsIHBsYXlpbmcgd2l0aCBwbWVtL2RheCBpZiBlbmFibGVkLCB2aXJ0aW9fZnMsIG9yIHAycGRtYSBhcmUgcG90ZW50aWFsIGF2ZW51ZXMuXG5cbk5vdywgdGhpcyBwYXRjaCBtb2RpZmllcyBgbWVtbWFwX2luaXRfY29tcG91bmRgLCB3aGljaCBpcyBjYWxsZWQgd2l0aGluIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIFRoYXQncyBpbnRlcmVzdGluZywgYW5kIEkgbmVlZCB0byBleHBsb3JlIHRoaXMgcmVsYXRpb25zaGlwIGZ1cnRoZXIuIEkgcmVhbGl6ZSB0aGF0IGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgaXMgb25seSBhY3R1YWxseSByZWFjaGVkIGZyb20gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpZiBgcGdtYXAtXHUwMDNldm1lbW1hcF9zaGlmdGAgaXMgc2V0LiBTbywgdGhpcyBzZXRzIHVwIGEgY29uZGl0aW9uYWwgcGF0aC5cblxuVGhlcmVmb3JlLCB0aGUgbmV4dCBxdWVzdGlvbiBpcywgaXMgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCByZWFjaGFibGU/IEl0IHNlZW1zIHRoZSBjcnVjaWFsIGZhY3RvciBoZXJlIGlzIHRoZSBgdm1lbW1hcF9zaGlmdGAgdmFyaWFibGUuIElmIGl0J3Mgc2V0LCB0aGVuLCB5ZXMsIGl0IGlzLlxuXG5TbywgSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgdG8gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZSBgdm1lbW1hcF9zaGlmdGAgaXMgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTcyOSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToyNzowNS44MjM4NjY0NjhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5ODY1MTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbW1hcF9pbml0X2NvbXBvdW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tbV9pbml0LmM9MTExNT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY29tcG91bmRfbnJfcGFnZXModW5zaWduZWQgbG9uZyBwZm4sXFxuLS1cXG5tbS9tbV9pbml0LmMtMTEzMC1cXG5tbS9tbV9pbml0LmM6MTEzMTpzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcXG5tbS9tbV9pbml0LmMtMTEzMi1cXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBoZWFkX3BmbixcXG4tLVxcbm1tL21tX2luaXQuYz0xMTcyPXZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTIyMy1cXG5tbS9tbV9pbml0LmM6MTIyNDpcXHRcXHRtZW1tYXBfaW5pdF9jb21wb3VuZChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwLFxcbm1tL21tX2luaXQuYy0xMjI1LVxcdFxcdFxcdFxcdCAgICAgY29tcG91bmRfbnJfcGFnZXMocGZuLCBhbHRtYXAsIHBnbWFwKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI3OjA1LjkzMzczNzcyNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NDgxNzcwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBLZXJuZWwgTWVtb3J5IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBtZW1jcHlfbm9udGVtcG9yYWxgIGFuZCBpbnRlZ3JhdGVzIGl0IGludG8gYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYC4gRXNzZW50aWFsbHksIGl0J3MgYW4gb3B0aW1pemF0aW9uIGZvciBpbml0aWFsaXppbmcgYHN0cnVjdCBwYWdlYCBzcGVjaWZpY2FsbHkgZm9yIFpPTkVfREVWSUNFIG1lbW9yeS4gSXTigJlzIGRlZmluaXRlbHkgY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmssIFwiV29ydGggZnV6emluZz9cIiBBYnNvbHV0ZWx5LCBpdCdzIHBhcnQgb2YgdGhlIGtlcm5lbCdzIGZ1bmN0aW9uYWwgY29yZS5cblxuTGV04oCZcyB6ZXJvIGluIG9uIHNvbWUga2V5IHN5bWJvbHMuIEknbSB0aGlua2luZyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFuZCBgbWVtbWFwX2luaXRfY29tcG91bmRgLiBOb3csIHRoZXNlIGFyZSBjYWxsZWQgZHVyaW5nIGRldmljZSBwcm9iZSDigJMgdGhpbmsgUGVyc2lzdGVudCBNZW1vcnksIERpcmVjdCBBY2Nlc3MgKERBWCksIGFuZCBwb3RlbnRpYWxseSBwZWVyLXRvLXBlZXIgRE1BLiBBcmUgdGhleSAqaG90KiBwYXRocywgbWVhbmluZyBoZWF2aWx5IHVzZWQgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24/IE5vLCB0aGV5J3JlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucywgc28gdGhleSBhcmUgbm90IGhvdC4gQnV0LCBhcmUgdGhleSAqcmVhY2hhYmxlKj8gWWVzLCBkZWZpbml0ZWx5LiBFdmVyeSB0aW1lIGEgZGV2aWNlIHV0aWxpemluZyB0aGVzZSBtZW1vcnkgdHlwZXMgaXMgcHJvYmVkLCBvciBtZW1vcnkgaXMgaG90cGx1Z2dlZCwgdGhlc2UgZnVuY3Rpb25zIGNvbWUgaW50byBwbGF5LlxuXG5UbyBhY3R1YWxseSBnZXQgdG8gdGhpcyBjb2RlLCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5IGlzIGBDT05GSUdfWk9ORV9ERVZJQ0VgLiBUaW1lIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYENPTkZJR19aT05FX0RFVklDRWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTc5LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI3OjEwLjU4MTkxNzcwOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwNDc4NjQwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWk9ORV9ERVZJQ0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTIzMT1jb25maWcgWk9ORV9ETUEzMlxcbi0tXFxubW0vS2NvbmZpZy0xMjM1LVxcbm1tL0tjb25maWc6MTIzNjpjb25maWcgWk9ORV9ERVZJQ0VcXG5tbS9LY29uZmlnLTEyMzctXFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6Mjc6MTIuNTg2NzA4NTkxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NTQwMzYxNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIFpPTkVfREVWSUNFIGluIG1tL0tjb25maWcqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBzdHJhaWdodCBpbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGBaT05FX0RFVklDRWAgaXMgY29uZmlndXJlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBkaXJlY3RseSB0byBgbW0vS2NvbmZpZ2AuIEl0J3MgdGhlIGNlbnRyYWwgcGxhY2UgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwncyBLY29uZmlnIHN5c3RlbSwgYW5kIHRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpb24gYW5kIGFueSBhY2NvbXBhbnlpbmcgZGVwZW5kZW5jaWVzIG9yIGRlZmF1bHQgdmFsdWVzIGZvciBhIG1lbW9yeSB6b25lIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoYXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiBzeXN0ZW0gYmVoYXZpb3IuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGF0IGZpbGUgYW5kIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxMzgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToyNzoxNS41NDA3NDcwNjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTIzNixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIzNjpcXHRjb25maWcgWk9ORV9ERVZJQ0VcXG4xMjM3OlxcdFxcdGJvb2wgXFxcIkRldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcXFwiXFxuMTIzODpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHXFxuMTIzOTpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcXG4xMjQwOlxcdFxcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcXG4xMjQxOlxcdFxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4xMjQyOlxcdFxcbjEyNDM6XFx0XFx0aGVscFxcbjEyNDQ6XFx0XFx0ICBEZXZpY2UgbWVtb3J5IGhvdHBsdWcgc3VwcG9ydCBhbGxvd3MgZm9yIGVzdGFibGlzaGluZyBwbWVtLFxcbjEyNDU6XFx0XFx0ICBvciBvdGhlciBkZXZpY2UgZHJpdmVyIGRpc2NvdmVyZWQgbWVtb3J5IHJlZ2lvbnMsIGluIHRoZVxcbjEyNDY6XFx0XFx0ICBtZW1tYXAuIFRoaXMgYWxsb3dzIHBmbl90b19wYWdlKCkgbG9va3VwcyBvZiBvdGhlcndpc2VcXG4xMjQ3OlxcdFxcdCAgXFxcImRldmljZS1waHlzaWNhbFxcXCIgYWRkcmVzc2VzIHdoaWNoIGlzIG5lZWRlZCBmb3IgREFYLCBQQ0lfUDJQRE1BLCBhbmRcXG4xMjQ4OlxcdFxcdCAgREVWSUNFX1BSSVZBVEUgZmVhdHVyZXMgYW1vbmcgb3RoZXJzLlxcbjEyNDk6XFx0XFxuMTI1MDpcXHRcXHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgcmVkdWNlIHRoZSBlbnRyb3B5IG9mIHg4NiBLQVNMUiBtZW1vcnlcXG4xMjUxOlxcdFxcdCAgcmVnaW9ucy4gRm9yIGV4YW1wbGUgLSBvbiBhIDQ2IGJpdCBzeXN0ZW0sIHRoZSBlbnRyb3B5IGdvZXMgZG93blxcbjEyNTI6XFx0XFx0ICBmcm9tIDE2IGJpdHMgdG8gMTUgYml0cy4gVGhlIGFjdHVhbCByZWR1Y3Rpb24gaW4gZW50cm9weSBkZXBlbmRzXFxuMTI1MzpcXHRcXHQgIG9uIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMsIG9uIHByb2Nlc3NvciBmZWF0dXJlcywga2VybmVsIGNvbmZpZ1xcbjEyNTQ6XFx0XFx0ICAoNSBsZXZlbCBwYWdlIHRhYmxlKSBhbmQgcGh5c2ljYWwgbWVtb3J5IHByZXNlbnQgb24gdGhlIHN5c3RlbS5cXG4xMjU1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToyNzoxNS41NDA4NTMyOTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE3MDY3Mjg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEFuYWx5c2lzIG9mIFpPTkVfREVWSUNFIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYFpPTkVfREVWSUNFYCBhbmQgd2hhdCBpdCBuZWVkcyB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIEl0IGxvb2tzIGxpa2UgYFpPTkVfREVWSUNFYCBoYXMgYSBwcmV0dHkgY2xlYXIgZGVwZW5kZW5jeSB0cmVlIOKAkyBpdCdzIGZ1bmRhbWVudGFsbHkgbGlua2VkIHRvIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBTUEFSU0VNRU1fVk1FTU1BUGAuIE1ha2VzIHNlbnNlLCBjb25zaWRlcmluZyBpdCdzIGRlYWxpbmcgd2l0aCBtZW1vcnkgcmVnaW9ucyB0aGF0IGFyZSBhZGRlZCBhbmQgcmVtb3ZlZCBkeW5hbWljYWxseS4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBaT05FX0RFVklDRWAgaXMgZGVmaW5pdGVseSBlbmFibGVkIGluIG15IGNvbmZpZ3VyYXRpb24uXG5cbk5vdywgdGhlIHRyaWNrIGlzIGZpZ3VyaW5nIG91dCAqaG93KiB0byBhY3R1YWxseSB0cmlnZ2VyIHRoaXMgZnVuY3Rpb25hbGl0eS4gSXQgc2VlbXMgbGlrZSB3ZSdsbCBuZWVkIGEgZGV2aWNlIGRyaXZlciB0aGF0J3Mgc3BlY2lmaWNhbGx5IHdyaXR0ZW4gdG8gdXRpbGl6ZSBgZGV2bV9tZW1yZW1hcF9wYWdlc2AuIFRoYXQncyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLlxuXG5CZXlvbmQgdGhlIGRyaXZlciwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSB3aWRlciBlY29zeXN0ZW0gdGhhdCB3b3VsZCBzdXBwb3J0IHRoaXMuIFRoZSB3YXkgdG8gZG8gdGhhdCBsb29rcyB0byBiZSB0aHJvdWdoOiBgQ09ORklHX1BDSV9QMlBETUFgIG9yIGBDT05GSUdfREFYYCBvciBgQ09ORklHX05WRElNTV9EQVhgIG9yIGBDT05GSUdfREVWX0RBWGAgb3IgYENPTkZJR19GU19EQVhgLiBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZWFjaCBvZiB0aGVzZSBvcHRpb25zIGRvZXMsIGluIG9yZGVyIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5JIHRoaW5rIGEgZ29vZCBzdGFydGluZyBwb2ludCBpcyBwcm9iYWJseSBgQ09ORklHX1BDSV9QMlBETUFgLiBJIHdpbGwgc3RhcnQgYnkgbG9va2luZyBpbnRvIHRoYXQgb25lIGZpcnN0LCB0byBzZWUgd2hlcmUgaXQgbGVhZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjk4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6Mjc6MTkuNzExNTI4OTQ2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc2MzY1ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQ0lfUDJQRE1BXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3BjaS9LY29uZmlnPTE5Nz1jb25maWcgUENJRV9UUEhcXG4tLVxcbmRyaXZlcnMvcGNpL0tjb25maWctMjA1LVxcbmRyaXZlcnMvcGNpL0tjb25maWc6MjA2OmNvbmZpZyBQQ0lfUDJQRE1BXFxuZHJpdmVycy9wY2kvS2NvbmZpZy0yMDctXFx0Ym9vbCBcXFwiUENJIHBlZXItdG8tcGVlciB0cmFuc2ZlciBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToyNzoyMS41ODc5MDA0NzNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0NDE0OTIwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipQQ0lfUDJQRE1BIENvbmZpZ3VyYXRpb24gSW5zcGVjdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBQQ0kgUGVlci10by1QZWVyIERNQSBzdXBwb3J0LiBUaGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtIGlzIGEgYmVhc3QsIGJ1dCB0aGUgdXN1YWwgc3RhcnRpbmcgcG9pbnQgZm9yIFBDSS1yZWxhdGVkIG9wdGlvbnMgaXMgdGhlIGBkcml2ZXJzL3BjaS9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8gaGVhZCBvdmVyIHRoZXJlIHRvIHNlZSB3aGF0J3MgZGVmaW5lZCBmb3IgYFBDSV9QMlBETUFgLiBIb3BlZnVsbHksIHRoZSBkZXNjcmlwdGlvbiBpbiBgS2NvbmZpZ2AgaXMgY2xlYXIgZW5vdWdoIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgaXQuIEkgZXhwZWN0IGl0IHdpbGwgcmVmZXJlbmNlIHNvbWUgdW5kZXJseWluZyBETUEgY29udHJvbGxlciBvcHRpb25zIG9yIHBlcmhhcHMgc3BlY2lmaWMgaGFyZHdhcmUgcmVxdWlyZW1lbnRzLiBUaGVuIEknbGwgY29ycmVsYXRlIGl0IHdpdGggdGhlIGNvZGUgdG8gZ2V0IGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGFjdCB0byB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI0MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI3OjI0LjYzMjA1MjE4MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3BjaS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwNixcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwNjpcXHRjb25maWcgUENJX1AyUERNQVxcbiAyMDc6XFx0XFx0Ym9vbCBcXFwiUENJIHBlZXItdG8tcGVlciB0cmFuc2ZlciBzdXBwb3J0XFxcIlxcbiAyMDg6XFx0XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbiAyMDk6XFx0XFx0I1xcbiAyMTA6XFx0XFx0IyBUaGUgbmVlZCBmb3IgdGhlIHNjYXR0ZXJsaXN0IERNQSBidXMgYWRkcmVzcyBmbGFnIG1lYW5zIFBDSSBQMlBETUFcXG4gMjExOlxcdFxcdCMgcmVxdWlyZXMgNjRiaXRcXG4gMjEyOlxcdFxcdCNcXG4gMjEzOlxcdFxcdGRlcGVuZHMgb24gNjRCSVRcXG4gMjE0OlxcdFxcdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxcbiAyMTU6XFx0XFx0c2VsZWN0IE5FRURfU0dfRE1BX0ZMQUdTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI3OjI0LjYzMjExNTc2MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDg0MDEwODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkNvbnNpZGVyaW5nIERlcGVuZGVuY2llcyBmb3IgUENJX1AyUERNQSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYFBDSV9QMlBETUFgLCBhbmQgaW1tZWRpYXRlbHksIG15IG1pbmQganVtcHMgdG8gaXRzIGRlcGVuZGVuY2llcy4gSSBrbm93IGl0IGxlYW5zIGhlYXZpbHkgb24gYFpPTkVfREVWSUNFYCDigJMgdGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlIGZvciBkaXJlY3QgYWNjZXNzLiBBbmQsIG5hdHVyYWxseSwgYDY0QklUYCBpcyBlc3NlbnRpYWw7IHdlJ3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBsYXJnZSBhZGRyZXNzIHNwYWNlcyBoZXJlLiBCdXQuLi4gd2hhdCBhYm91dCB0aGUgYnJvYWRlciBjb250ZXh0PyBJcyBpdCBmdWxseSBjb21wYXRpYmxlIHdpdGggZXZlcnl0aGluZyB3aXRoaW4gYENPTkZJR19EQVhgPyBJcyBpdCBqdXN0IGEgZGVwZW5kZW5jeSBvciBpcyB0aGVyZSBhbnkgaW50ZXJhY3Rpb24/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMgdGhhdCBhcmlzZSBhdCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aG9zZSB0d28gZmVhdHVyZXM/IEkgbmVlZCB0byBkaWcgaW50byB0aGUgZGV0YWlscyBhIGJpdCBtb3JlIHRvIGJlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBjcml0aWNhbCBjb25mbGljdHMgb3IgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBQZXJoYXBzIHRoZXJlIGFyZSBzb21lIGludGVyYWN0aW9uIHNjZW5hcmlvcywgbGlrZSB3aGF0IGhhcHBlbiB3aGVuIERNQSBoYXBwZW5zIGFnYWluc3QgREFYLWVuYWJsZWQgc3RvcmFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MDgsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI3OjI4LjExNjEyOTI0MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyMDc4MTI5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RheC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9kYXgvS2NvbmZpZzoyOm1lbnVjb25maWcgREFYXFxuZHJpdmVycy9kYXgvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJEQVg6IGRpcmVjdCBhY2Nlc3MgdG8gZGlmZmVyZW50aWF0ZWQgbWVtb3J5XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToyNzoyOS45MzY5MTUzNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTAzNjEzODgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBEaXZlIGZvciBEQVggRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgREFYIGRyaXZlci4gVGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBoZWFkIGRpcmVjdGx5IHRvIHRoZSBgS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBjZW50cmFsIGh1YiBmb3IgZGVmaW5pbmcgYW5kIGRvY3VtZW50aW5nIHRoZXNlIHRoaW5ncy4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBhdCBgZHJpdmVycy9kYXgvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBkZXNjcmlwdGlvbnMgdGhhdCBnb3Zlcm4gaG93IHRoZSBEQVggZHJpdmVyIGJlaGF2ZXMgYW5kIGlzIGNvbmZpZ3VyZWQgYXQgY29tcGlsZSB0aW1lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGtub2JzIEkgaGF2ZSBhdmFpbGFibGUgdG8gdHdlYWsgdGhpcyBkcml2ZXIuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTQxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6Mjc6MzIuODQwNTMxNTAyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZGF4L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMjpcXHRtZW51Y29uZmlnIERBWFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIkRBWDogZGlyZWN0IGFjY2VzcyB0byBkaWZmZXJlbnRpYXRlZCBtZW1vcnlcXFwiXFxuICAgNDpcXHRcXHRkZWZhdWx0IG0gaWYgTlZESU1NX0RBWFxcbiAgIDU6XFx0XFxuICAgNjpcXHRpZiBEQVhcXG4gICA3OlxcdFxcbiAgIDg6XFx0Y29uZmlnIERFVl9EQVhcXG4gICA5OlxcdFxcdHRyaXN0YXRlIFxcXCJEZXZpY2UgREFYOiBkaXJlY3QgYWNjZXNzIG1hcHBpbmcgZGV2aWNlXFxcIlxcbiAgMTA6XFx0XFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiAgMTE6XFx0XFx0aGVscFxcbiAgMTI6XFx0XFx0ICBTdXBwb3J0IHJhdyBhY2Nlc3MgdG8gZGlmZmVyZW50aWF0ZWQgKHBlcnNpc3RlbmNlLCBiYW5kd2lkdGgsXFxuICAxMzpcXHRcXHQgIGxhdGVuY3kuLi4pIG1lbW9yeSB2aWEgYW4gbW1hcCgyKSBjYXBhYmxlIGNoYXJhY3RlclxcbiAgMTQ6XFx0XFx0ICBkZXZpY2UuICBQbGF0Zm9ybSBmaXJtd2FyZSBvciBhIGRldmljZSBkcml2ZXIgbWF5IGlkZW50aWZ5IGFcXG4gIDE1OlxcdFxcdCAgcGxhdGZvcm0gbWVtb3J5IHJlc291cmNlIHRoYXQgaXMgZGlmZmVyZW50aWF0ZWQgZnJvbSB0aGVcXG4gIDE2OlxcdFxcdCAgYmFzZWxpbmUgbWVtb3J5IHBvb2wuICBNYXBwaW5ncyBvZiBhIC9kZXYvZGF4WC5ZIGRldmljZSBpbXBvc2VcXG4gIDE3OlxcdFxcdCAgcmVzdHJpY3Rpb25zIHRoYXQgbWFrZSB0aGUgbWFwcGluZyBiZWhhdmlvciBkZXRlcm1pbmlzdGljLlxcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgREVWX0RBWF9QTUVNXFxuICAyMDpcXHRcXHR0cmlzdGF0ZSBcXFwiUE1FTSBEQVg6IGRpcmVjdCBhY2Nlc3MgdG8gcGVyc2lzdGVudCBtZW1vcnlcXFwiXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIExJQk5WRElNTSBcXHUwMDI2XFx1MDAyNiBOVkRJTU1fREFYIFxcdTAwMjZcXHUwMDI2IERFVl9EQVhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6Mjc6MzIuODQwNTk4MzMyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyOTIxNTg5NTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBsaWtlIHlvdXJzZWxmOlxuXG4qKkRBWCBDb25zaWRlcmF0aW9ucyoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBEaXJlY3QgQWNjZXNzIChEQVgpLiBgREVWX0RBWGAsIGRlZmluaXRlbHkgYSBzb2xpZCBhcHByb2FjaCwgcHJvdmVuIGFuZCB3ZWxsLXVuZGVyc3Rvb2QuIEl0J3MgdXN1YWxseSB0aGUgZmlyc3QgdGhpbmcgdGhhdCBjb21lcyB0byBtaW5kIHdoZW4geW91J3JlIG9wdGltaXppbmcgZm9yIGRpcmVjdCBibG9jay1kZXZpY2UgYWNjZXNzLiBCdXQuLi5hbmQgaGVyZSdzIHdoZXJlIG15IG1pbmQgc3RhcnRzIHRvIHdhbmRlci4uLndoYXQgYWJvdXQgYENPTkZJR19GU19EQVhgPyBUaGF0IG9wdGlvbiByZWFsbHkgbWFrZXMgeW91IGNvbnNpZGVyIHRoZSBmaWxlc3lzdGVtLWxldmVsIERBWCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBnaXZlcyBtb3JlIGZpbmUgZ3JhaW5lZCBjb250cm9sLlxuXG5JJ20gZXZhbHVhdGluZyB3aGljaCBnaXZlcyBtZSB0aGUgYmVzdCB0cmFkZS1vZmYgYmV0d2VlbiBpbXBsZW1lbnRhdGlvbiBjb21wbGV4aXR5LCBwZXJmb3JtYW5jZSwgYW5kIGZsZXhpYmlsaXR5IGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWMgYXBwbGljYXRpb24gc2NlbmFyaW8uIEl0J3MgYSBrZXkgY29uc2lkZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MzMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI4OjM1Ljc2MjE4OTcyNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0MzQ2MDI0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlNfREFYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTU2PWVuZGlmICMgQkxPQ0tcXG5mcy9LY29uZmlnLTU3LVxcbmZzL0tjb25maWc6NTg6Y29uZmlnIEZTX0RBWFxcbmZzL0tjb25maWctNTktXFx0Ym9vbCBcXFwiRmlsZSBzeXN0ZW0gYmFzZWQgRGlyZWN0IEFjY2VzcyAoREFYKSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvS2NvbmZpZy04OS1cXG5mcy9LY29uZmlnOjkwOmNvbmZpZyBGU19EQVhfUE1EXFxuZnMvS2NvbmZpZy05MS1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI4OjM4LjAwNTY1Njc2NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODE5MTgyNjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYEZTX0RBWGAgS2NvbmZpZyBPcHRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBjb25maWd1cmVkIGZvciBEaXJlY3QgQWNjZXNzIChEQVgpIGZpbGUgc3lzdGVtcy4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyOiBgZnMvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgYWxsIHRoZSBmaWxlIHN5c3RlbS1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gSSB3YW50IHRvIGNoZWNrIGZvciB0aGUgcHJlc2VuY2UgYW5kIGRldGFpbHMgb2YgYEZTX0RBWGAuIEknbSBleHBlY3RpbmcgdG8gZmluZCBpdHMgZGVmaW5pdGlvbiB0aGVyZS4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoaXMgZmlsZSB3aWxsIGNvbnRhaW4gdGhlIG5lY2Vzc2FyeSBzZXR0aW5ncyBjb250cm9sbGluZyBob3cgREFYIHN1cHBvcnQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhbmQgYW55IGFjY29tcGFueWluZyBkZXBlbmRlbmNpZXMgb3IgZGVmYXVsdCB2YWx1ZXMuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3NDksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToyODo0MC44MjQ4NDEzMjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1OCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1ODpcXHRjb25maWcgRlNfREFYXFxuICA1OTpcXHRcXHRib29sIFxcXCJGaWxlIHN5c3RlbSBiYXNlZCBEaXJlY3QgQWNjZXNzIChEQVgpIHN1cHBvcnRcXFwiXFxuICA2MDpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbiAgNjE6XFx0XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbiAgNjI6XFx0XFx0c2VsZWN0IEZTX0lPTUFQXFxuICA2MzpcXHRcXHRzZWxlY3QgREFYXFxuICA2NDpcXHRcXHRoZWxwXFxuICA2NTpcXHRcXHQgIERpcmVjdCBBY2Nlc3MgKERBWCkgY2FuIGJlIHVzZWQgb24gbWVtb3J5LWJhY2tlZCBibG9jayBkZXZpY2VzLlxcbiAgNjY6XFx0XFx0ICBJZiB0aGUgYmxvY2sgZGV2aWNlIHN1cHBvcnRzIERBWCBhbmQgdGhlIGZpbGVzeXN0ZW0gc3VwcG9ydHMgREFYLFxcbiAgNjc6XFx0XFx0ICB0aGVuIHlvdSBjYW4gYXZvaWQgdXNpbmcgdGhlIHBhZ2VjYWNoZSB0byBidWZmZXIgSS9Pcy4gIFR1cm5pbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6Mjg6NDAuODI0OTA4MDI4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MjUxNDA4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBSZXZpZXcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29uZmlndXJhdGlvbiBhbmQgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGF0IGZpcnN0IGdsYW5jZS4gSXQgbG9va3MgbGlrZSBgRlNfREFYYCBpcyBidWlsdCBvbiB0b3Agb2YgYFpPTkVfREVWSUNFYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gVG8gZW5hYmxlIGV2ZXJ5dGhpbmcgY29ycmVjdGx5LCBJIG5lZWQgdG8gaW5jbHVkZSBgWk9ORV9ERVZJQ0VgLCBgUENJX1AyUERNQWAsIGBEQVhgLCBgREVWX0RBWGAsIGFuZCBgRlNfREFYYCBpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBUaGF0IGNvdmVycyB0aGUgZGVwZW5kZW5jaWVzIG5pY2VseS5cblxuQnV0IHRoZW4gdGhlcmUncyB0aGlzIGNoYW5nZSB0byBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgLiBBaCwgYG1lbWNweV9ub250ZW1wb3JhbGAgdXNpbmcgYG1vdm50aWAgaW5zdHJ1Y3Rpb25zLiBUaGlzIGlzIHg4Ni1zcGVjaWZpYywgd2hpY2ggbWVhbnMgSSBuZWVkIHRvIGJlIGNhcmVmdWwuIEkga25vdyBJIG5lZWQgdG8gbG9vayBmb3IgYW55IGV4aXN0aW5nIGNvbmZpZyBvcHRpb25zIGFyb3VuZCBgbWVtY3B5X25vbnRlbXBvcmFsYCwgdG8gZW5zdXJlIHRoaXMgaXMgaGFuZGxlZCBjb3JyZWN0bHkuIExldCdzIHNlZS4uLiBpdCdzIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFYC4gT2theSwgc28gdGhhdCdzIHRoZSBrZXkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB0YWtlIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uc3RyYWludCBpbnRvIGNvbnNpZGVyYXRpb24uIEkgbmVlZCB0byByZXZpZXcgYW5kIGVuc3VyZSB0aGF0IHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpcyBhcHByb3ByaWF0ZWx5IGhhbmRsZWQgdG8gcHJldmVudCBhbnkgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjExMywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI4OjQ1LjQ1MDA1MDY0MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzOTkyMDQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZz01NDI9Y29uZmlnIFVBQ0NFU1NfTUVNQ1BZXFxuLS1cXG5saWIvS2NvbmZpZy01NDQtXFxubGliL0tjb25maWc6NTQ1OmNvbmZpZyBBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcXG5saWIvS2NvbmZpZy01NDYtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToyODo0Ny4yODk5NzY2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDI1NzY1NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFYCBpbiB0aGUgS2NvbmZpZyoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBsaWIvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gbG9va2luZyBmb3IgdGhlIGRlZmluaXRpb24sIG9yIGF0IGxlYXN0IHRoZSBwcmVzZW5jZSwgb2YgYEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRWAuIFRoaXMgaXMgdGhlIGtleSBwaWVjZSBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gSSdtIGFzc3VtaW5nLCBnaXZlbiB0aGUgbmFtaW5nLCB0aGF0IGl0J3MgcmVsYXRlZCB0byBjYWNoZSBjb2hlcmVuY3kgYW5kIGRhdGEgYWNjZXNzLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvbnRleHQgb2YgdXNlci1zcGFjZSBpbnRlcmFjdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgc29tZXRoaW5nIGJlaW5nIGRlZmluZWQgYXQgdGhlIGFyY2hpdGVjdHVyZSBsZXZlbC4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcCBmb3IgZmlndXJpbmcgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIHJlbGF0aW5nIHRvIHRoaXMgZmVhdHVyZS4gSSdsbCBuZWVkIHRvIHNlZSBob3cgaXQncyBkZWZpbmVkLCB1bmRlciB3aGF0IGNvbmRpdGlvbnMgaXQncyBlbmFibGVkLCBhbmQgd2hpY2ggYXJjaGl0ZWN0dXJlcyBvciBib2FyZHMgYXJlIGFmZmVjdGVkLiBMZXQncyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBoYXMgdG8gc2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYxMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI4OjUwLjUzMjU1NjI4NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTQ1LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTQ1OlxcdGNvbmZpZyBBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcXG4gNTQ2OlxcdFxcdGJvb2xcXG4gNTQ3OlxcdFxcbiA1NDg6XFx0IyBhcmNoIGhhcyBhIGNvbmNlcHQgb2YgYSByZWNvdmVyYWJsZSBzeW5jaHJvbm91cyBleGNlcHRpb24gZHVlIHRvIGFcXG4gNTQ5OlxcdCMgbWVtb3J5LXJlYWQgZXJyb3IgbGlrZSB4ODYgbWFjaGluZS1jaGVjayBvciBBUk0gZGF0YS1hYm9ydCwgYW5kXFxuIDU1MDpcXHQjIGltcGxlbWVudHMgY29weV9tY190b197dXNlcixrZXJuZWx9IHRvIGFib3J0IGFuZCByZXBvcnRcXG4gNTUxOlxcdCMgJ2J5dGVzLXRyYW5zZmVycmVkJyBpZiB0aGF0IGV4Y2VwdGlvbiBmaXJlcyB3aGVuIGFjY2Vzc2luZyB0aGUgc291cmNlXFxuIDU1MjpcXHQjIGJ1ZmZlci5cXG4gNTUzOlxcdGNvbmZpZyBBUkNIX0hBU19DT1BZX01DXFxuIDU1NDpcXHRcXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI4OjUwLjUzMjY2MDg5NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDAxMDIwNTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqQXJjaGl0ZWN0dXJlIFNlbGVjdGlvbiBBbmFseXNpcyoqXG5cbk9rYXksIHNvIHNvbWV0aGluZyBoYXMgYmVlbiBzZWxlY3RlZCwgYW5kIHRoZSBrZXkgZHJpdmVyIHNlZW1zIHRvIGJlIFwiYXJjaGl0ZWN0dXJlcy5cIiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBzZWxlY3Rpb24gcHJvY2Vzcy4gV2hvIGV4YWN0bHkgbWFkZSB0aGlzIGNob2ljZT8gV2hhdCBhcmNoaXRlY3RzIG9yIGFyY2hpdGVjdHVyYWwgdGVhbXMgd2VyZSBpbnZvbHZlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlY2lzaW9uLW1ha2Vycy4gTXkgYW5hbHlzaXMgd2lsbCBiZWdpbiBieSBpZGVudGlmeWluZyB0aGUgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlcyBvciBhcmNoaXRlY3R1cmFsIHN0eWxlcyB0aGF0IGluZmx1ZW5jZWQgdGhpcyBzZWxlY3Rpb24uIEFyZSB3ZSB0YWxraW5nIGFib3V0IHNvZnR3YXJlIGFyY2hpdGVjdHVyZXMsIHN5c3RlbSBhcmNoaXRlY3R1cmVzLCBuZXR3b3JrIGFyY2hpdGVjdHVyZXMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBVbmRlcnN0YW5kaW5nIHRoZSBkb21haW4gaXMgY3J1Y2lhbC4gRnJvbSB0aGVyZSwgSSdsbCB0cnkgdG8gZmluZCBvdXQgd2hvIHRoZSBrZXkgcGxheWVycyBpbiB0aG9zZSBhcmNoaXRlY3R1cmFsIGNvbnRleHRzIGFyZS4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGluZm9ybSBteSBpbnZlc3RpZ2F0aW9uIGludG8gdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIGRlY2lzaW9uIGFuZCBhbnkgcG90ZW50aWFsIGltcGxpY2F0aW9ucyB0aGF0IHRoZSBhcmNoaXRlY3R1cmUgc2VsZWN0aW9uIG1pZ2h0IGhhdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDYwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToyODo1My41MzM2ODQ0ODZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NDE4Nzc0NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9LY29uZmlnPTE5MjI9Y29uZmlnIEFSTTY0X1BNRU1cXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xOTI0LVxcdHNlbGVjdCBBUkNIX0hBU19QTUVNX0FQSVxcbmFyY2gvYXJtNjQvS2NvbmZpZzoxOTI1OlxcdHNlbGVjdCBBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcXG5hcmNoL2FybTY0L0tjb25maWctMTkyNi1cXHRoZWxwXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWctMTU4LVxcdHNlbGVjdCBBUkNIX0hBU19USUNLX0JST0FEQ0FTVFxcdFxcdGlmIEdFTkVSSUNfQ0xPQ0tFVkVOVFNfQlJPQURDQVNUXFxuYXJjaC9wb3dlcnBjL0tjb25maWc6MTU5OlxcdHNlbGVjdCBBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xNjAtXFx0c2VsZWN0IEFSQ0hfSEFTX1VCU0FOXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTU4PWNvbmZpZyBYODZcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTAyLVxcdHNlbGVjdCBBUkNIX0hBU19OT05MRUFGX1BNRF9ZT1VOR1xcdGlmIFBHVEFCTEVfTEVWRUxTIFxcdTAwM2UgMlxcbmFyY2gveDg2L0tjb25maWc6MTAzOlxcdHNlbGVjdCBBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcXHRpZiBYODZfNjRcXG5hcmNoL3g4Ni9LY29uZmlnLTEwNC1cXHRzZWxlY3QgQVJDSF9IQVNfQ09QWV9NQ1xcdFxcdFxcdGlmIFg4Nl82NFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToyODo1Ni4zNzU1Njc5NzJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc0NTA0MjAyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyB0aGlzIGNvZGUgaXMgYmVpbmcgdGFyZ2V0ZWQgc3BlY2lmaWNhbGx5IGZvciBgWDg2XzY0YCBhcmNoaXRlY3R1cmUsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHdlJ3JlIGxpa2VseSBkZWFsaW5nIHdpdGguIFRoZSBmYWN0IHRoYXQgaXQncyBzZWxlY3RlZCBsaWtlIHRoYXQgaW5kaWNhdGVzIGEgcmVhbCwgbGl2ZSBzY2VuYXJpby4gVGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGFuZCByaXBlIGZvciBmdXp6aW5nLiBXZSBoYXZlIGEgc2V0IG9mIGludGVyZXN0aW5nIGZvY3VzIHN5bWJvbHMgaWRlbnRpZmllZDogYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCwgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCwgYHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0YCwgYW5kIGB6b25lX2RldmljZV9wYWdlX2luaXRfc2xvd2AuIFRoZXNlIHNlZW0gbGlrZSBnb29kIGVudHJ5IHBvaW50cyB0byBleHBvc2UgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzLiBIb3dldmVyLCBoYW5nIG9uLi4uIGB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZWAgaXMgbWFya2VkIGFzIGBzdGF0aWMgaW5saW5lYD8gVGhhdCBtZWFucyBpdCdzIHByb2JhYmx5IGV4cGFuZGVkIGF0IHRoZSBjYWxsIHNpdGUsIHdoaWNoIGhhcyBpbXBsaWNhdGlvbnMgZm9yIGhvdyB0aGUgZnV6emVyIHdpbGwgYmVoYXZlIGFuZCBmb3IgY29udHJvbCBmbG93IHRyYWNraW5nLiBHb3R0YSBjaGVjayBgbW0vbW1faW5pdC5jYCB0byBzZWUgaG93IGl0J3MgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MDEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6Mjk6MDAuMTIwNjEyNTg1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tbV9pbml0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA4OCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA4ODpcXHRcXHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHRlbXBsYXRlLCBwZm4pO1xcbjEwODk6XFx0I2lmZGVmIFdBTlRfUEFHRV9WSVJUVUFMXFxuMTA5MDpcXHRcXHRpZiAoIWlzX2hpZ2htZW1faWR4KFpPTkVfREVWSUNFKSlcXG4xMDkxOlxcdFxcdFxcdHNldF9wYWdlX2FkZHJlc3ModGVtcGxhdGUsIF9fdmEocGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpKTtcXG4xMDkyOlxcdCNlbmRpZlxcbjEwOTM6XFx0fVxcbjEwOTQ6XFx0XFxuMTA5NTpcXHRzdGF0aWMgdm9pZCB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4xMDk2OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpXFxuMTA5NzpcXHR7XFxuMTA5ODpcXHRcXHQvKlxcbjEwOTk6XFx0XFx0ICogJ3RlbXBsYXRlJyBjYXJyaWVzIHRoZSBpbnZhcmlhbnQgcG9ydGlvbiBvZiBhIFpPTkVfREVWSUNFIHN0cnVjdFxcbjExMDA6XFx0XFx0ICogcGFnZS4gVXBkYXRlIHRoZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiBwbGFjZSBiZWZvcmUgY29weWluZyBpdFxcbjExMDE6XFx0XFx0ICogdG8gdGhlIGRlc3RpbmF0aW9uIHBhZ2UuXFxuMTEwMjpcXHRcXHQgKi9cXG4xMTAzOlxcdFxcdHpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlKHRlbXBsYXRlLCBwZm4pO1xcbjExMDQ6XFx0XFx0bWVtY3B5X25vbnRlbXBvcmFsKHBhZ2UsIHRlbXBsYXRlLCBzaXplb2YoKnBhZ2UpKTtcXG4xMTA1OlxcdH1cXG4xMTA2OlxcdFxcbjExMDc6XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6Mjk6MDAuMTIwNzU2ODI1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NTU0NjMzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTeW1ib2wgTGFuZHNjYXBlKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGNvZGUuIEknbSBzZWVpbmcgYSBwYXR0ZXJuIGhlcmUgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGV2aWNlIGludGVncmF0aW9uLiBGaXJzdCwgbG9va2luZyBhdCB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zLCBgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVgIGlzIGRlY2xhcmVkIHN0YXRpYywgYnV0ICpub3QqIGlubGluZSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIE9uIHRoZSBvdGhlciBoYW5kLCBgem9uZV9kZXZpY2VfdGFpbF9wYWdlX2luaXRgIGlzIHN0YXRpYyBpbmxpbmUsIGFuZCBgem9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3dgIGlzIHNpbXBseSBzdGF0aWMuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIHRyYWNpbmcgY2FsbHMgYW5kIHN5bWJvbCB2aXNpYmlsaXR5LlxuXG5NeSBpbml0aWFsIGZvY3VzIG5lZWRzIHRvIGJlIG9uOlxuKiAgIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWBcbiogICBgbWVtbWFwX2luaXRfY29tcG91bmRgXG4qICAgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYFxuKiAgIGB6b25lX2RldmljZV9wYWdlX2luaXRfc2xvd2BcblxuV2FpdCwgaGFuZyBvbi4gVGhpcyBwYXRjaCBhbHNvIG1vZGlmaWVzIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAuIEl0J3MgYWRkaW5nIGEgYnVuY2ggb2YgbmV3IGlubGluZSBmdW5jdGlvbnMgLSBgbW92bnRpXzhgLCBgbW92bnRpXzE2YCwgYG1vdm50aV8zMmAsIGBtb3ZudGlfNjRgLCBgbWVtY3B5X2ZsdXNoY2FjaGVgLCBhbmQgYG1lbWNweV9ub250ZW1wb3JhbGAuIFRoZXNlIGFyZSAqYWxsKiBgc3RhdGljIF9fYWx3YXlzX2lubGluZWAsIHNvIHRoZXkgd29uJ3QgaGF2ZSB0aGVpciBvd24gZXhwb3J0ZWQgc3ltYm9scy4gVGhhdCByZWluZm9yY2VzIG15IG9yaWdpbmFsIGxpc3QgYXMgdGhlIGtleSBzeW1ib2xzIHRvIHRyYWNrLlxuXG5Ob3csIEkgbmVlZCB0byBjb25maXJtIHRoZSByZWFjaGFiaWxpdHkgb2YgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gTGV0J3Mgc2VlLi4uIFllcywgaXQncyBjYWxsZWQgZnJvbSBgcGFnZW1hcF9yYW5nZWAgaW4gYG1tL21lbXJlbWFwLmNgLiBBbmQgYHBhZ2VtYXBfcmFuZ2VgIGlzIGNhbGxlZCBmcm9tIGBkZXZtX21lbXJlbWFwX3BhZ2VzYC4gRXhjZWxsZW50LiBgZGV2bV9tZW1yZW1hcF9wYWdlc2AgaXMgZXhwb3J0ZWQsIGFuZCBpdCdzIHVzZWQgYnkgdmFyaW91cyBkcml2ZXJzLiBHb29kLCB0aGlzIGlzIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludC5cblxuRmluYWxseSwgcmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24sIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyByZWxhdGVkIHRvIHRoZXNlIG9wdGlvbnM6IGBaT05FX0RFVklDRWAsIGBQQ0lfUDJQRE1BYCwgYERBWGAsIGBERVZfREFYYCwgYW5kIGBGU19EQVhgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBzeXN0ZW0gaXMgcHJvcGVybHkgY29uZmlndXJlZC4gTGV0J3MgbWFrZSBzdXJlIGBaT05FX0RFVklDRWAgZG9lc24ndCBoYXZlIGFueSBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGFkZHJlc3MuIEhtbW0sIHllcywgaXQgZGVwZW5kcyBvbiBgTUVNT1JZX0hPVFBMVUdgLCBhbmQgYE1FTU9SWV9IT1RSRU1PVkVgIGFuZCBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBTbywgdG8gYmUgc2FmZSwgSSdsbCBhZGQgYE1FTU9SWV9IT1RQTFVHYCBhbmQgYFNQQVJTRU1FTV9WTUVNTUFQYCB0byB0aGUgY29uZmlnLCBqdXN0IGluIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4Mjk0LCJPdXRwdXRUb2tlbnMiOjE3NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI5OjA3Ljg3NjIyMjUwN1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NjQwMDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiUENJX1AyUERNQVwiLFxuICAgIFwiREFYXCIsXG4gICAgXCJERVZfREFYXCIsXG4gICAgXCJGU19EQVhcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJTUEFSU0VNRU1fVk1FTU1BUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW1hcF9pbml0X3pvbmVfZGV2aWNlXCIsXG4gICAgXCJtZW1tYXBfaW5pdF9jb21wb3VuZFwiLFxuICAgIFwiem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVcIixcbiAgICBcInpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb3B0aW1pemVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBaT05FX0RFVklDRSBwYWdlcyBieSB1c2luZyBhIHRlbXBsYXRlIGFuZCBub24tdGVtcG9yYWwgbWVtY3B5LiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgd2hlbiBwcm9iaW5nIGRldmljZXMgbGlrZSBQTUVNLCBEQVgsIG9yIFBDSSBQMlBETUEuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIlBDSV9QMlBETUFcIixcbiAgICBcIkRBWFwiLFxuICAgIFwiREVWX0RBWFwiLFxuICAgIFwiRlNfREFYXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiU1BBUlNFTUVNX1ZNRU1NQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1tYXBfaW5pdF96b25lX2RldmljZVwiLFxuICAgIFwibWVtbWFwX2luaXRfY29tcG91bmRcIixcbiAgICBcInpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlXCIsXG4gICAgXCJ6b25lX2RldmljZV9wYWdlX2luaXRfc2xvd1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgWk9ORV9ERVZJQ0UgcGFnZXMgYnkgdXNpbmcgYSB0ZW1wbGF0ZSBhbmQgbm9uLXRlbXBvcmFsIG1lbWNweS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIHdoZW4gcHJvYmluZyBkZXZpY2VzIGxpa2UgUE1FTSwgREFYLCBvciBQQ0kgUDJQRE1BLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xzxd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-28 01:03:07 +0000 UTC FinishedAt: 2026-07-28 01:29:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9c66085e6dcfb44b70970aa4e323003fc7f2b738", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZONE_DEVICE", "PCI_P2PDMA", "DAX", "DEV_DAX", "FS_DAX", "MEMORY_HOTPLUG", "SPARSEMEM_VMEMMAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9c66085e6dcfb44b70970aa4e323003fc7f2b738", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZONE_DEVICE", "PCI_P2PDMA", "DAX", "DEV_DAX", "FS_DAX", "MEMORY_HOTPLUG", "SPARSEMEM_VMEMMAP" ], "series_id": "d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memmap_init_zone_device", "memmap_init_compound", "zone_device_page_init_from_template", "zone_device_page_init_slow" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O1BDSV9QMlBETUEmIzM0OywKICAgICYjMzQ7REFYJiMzNDssCiAgICAmIzM0O0RFVl9EQVgmIzM0OywKICAgICYjMzQ7RlNfREFYJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDssCiAgICAmIzM0O1NQQVJTRU1FTV9WTUVNTUFQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtbWFwX2luaXRfem9uZV9kZXZpY2UmIzM0OywKICAgICYjMzQ7bWVtbWFwX2luaXRfY29tcG91bmQmIzM0OywKICAgICYjMzQ7em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUmIzM0OywKICAgICYjMzQ7em9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb3B0aW1pemVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBaT05FX0RFVklDRSBwYWdlcyBieSB1c2luZyBhIHRlbXBsYXRlIGFuZCBub24tdGVtcG9yYWwgbWVtY3B5LiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgd2hlbiBwcm9iaW5nIGRldmljZXMgbGlrZSBQTUVNLCBEQVgsIG9yIFBDSSBQMlBETUEuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxZmEzMDAwN2FiYWExODdmNDg4MjM3ZDcwOTE1MTgwMGM3MmZmMjYyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMDE6MjY6NDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxuaW5kZXggNDYzNTYxNjg2M2Y1M2QuLmJjNmE5ZjM0YjM0NmFmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXG5AQCAtODIsNyAmIzQzOzgyLDM1IEBAIGludCBzdHJjbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KTtcbiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxuICNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZX0ZMVVNIQ0FDSEUgMVxuIHZvaWQgX19tZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCk7XG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV84KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlKFwmIzM0O21vdm50aXEgJTEsICUwXCYjMzQ7XG4mIzQzO1x0XHQgICAgIDogXCYjMzQ7PW1cJiMzNDsoKih1NjQgKilkc3QpXG4mIzQzO1x0XHQgICAgIDogXCYjMzQ7clwmIzM0OygqKGNvbnN0IHU2NCAqKXNyYylcbiYjNDM7XHRcdCAgICAgOiBcJiMzNDttZW1vcnlcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzE2KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuJiM0Mzt7XG4mIzQzO1x0bW92bnRpXzgoZHN0LCBzcmMpO1xuJiM0MztcdG1vdm50aV84KGRzdCAmIzQzOyA4LCBzcmMgJiM0MzsgOCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfMzIodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXG4mIzQzO3tcbiYjNDM7XHRtb3ZudGlfMTYoZHN0LCBzcmMpO1xuJiM0MztcdG1vdm50aV8xNihkc3QgJiM0MzsgMTYsIHNyYyAmIzQzOyAxNik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfNjQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXG4mIzQzO3tcbiYjNDM7XHRtb3ZudGlfMzIoZHN0LCBzcmMpO1xuJiM0MztcdG1vdm50aV8zMihkc3QgJiM0MzsgMzIsIHNyYyAmIzQzOyAzMik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHNpemVfdCBjbnQpXG4ge1xuIFx0aWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGNudCkpIHtcbiBcdFx0c3dpdGNoIChjbnQpIHtcbkBAIC05NiwxMCAmIzQzOzEyNCw0OCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdFxuIFx0XHRcdFx0YXNtIChcJiMzNDttb3ZudGlxICUxLCAlMFwmIzM0OyA6IFwmIzM0Oz1tXCYjMzQ7KCoodTY0ICopZHN0KSA6IFwmIzM0O3JcJiMzNDsoKih1NjQgKilzcmMpKTtcbiBcdFx0XHRcdGFzbSAoXCYjMzQ7bW92bnRpcSAlMSwgJTBcJiMzNDsgOiBcJiMzNDs9bVwmIzM0OygqKHU2NCAqKShkc3QgJiM0MzsgOCkpIDogXCYjMzQ7clwmIzM0OygqKHU2NCAqKShzcmMgJiM0MzsgOCkpKTtcbiBcdFx0XHRcdHJldHVybjtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogVGhlIHJlbGV2YW50IGZpeGVkLXNpemUgY29waWVzIGhlcmUgYXJlIHRoZVxuJiM0MztcdFx0XHQgKiB4ODZfNjQgc3RydWN0IHBhZ2Ugc2l6ZXM6IDY0LCA4MCwgYW5kIDk2IGJ5dGVzLlxuJiM0MztcdFx0XHQgKiBLZWVwIDMyLWJ5dGUgYW5kIDQ4LWJ5dGUgY29waWVzIGlubGluZSBhcyB3ZWxsXG4mIzQzO1x0XHRcdCAqIGluc3RlYWQgb2Ygc2VuZGluZyB0aG9zZSBuZWFyYnkgZml4ZWQtc2l6ZVxuJiM0MztcdFx0XHQgKiBjYXNlcyBiYWNrIHRvIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGNhc2UgMzI6XG4mIzQzO1x0XHRcdFx0bW92bnRpXzMyKGRzdCwgc3JjKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdGNhc2UgNDg6XG4mIzQzO1x0XHRcdFx0bW92bnRpXzMyKGRzdCwgc3JjKTtcbiYjNDM7XHRcdFx0XHRtb3ZudGlfMTYoZHN0ICYjNDM7IDMyLCBzcmMgJiM0MzsgMzIpO1xuJiM0MztcdFx0XHRcdHJldHVybjtcbiYjNDM7XHRcdFx0Y2FzZSA2NDpcbiYjNDM7XHRcdFx0XHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xuJiM0MztcdFx0XHRcdHJldHVybjtcbiYjNDM7XHRcdFx0Y2FzZSA4MDpcbiYjNDM7XHRcdFx0XHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xuJiM0MztcdFx0XHRcdG1vdm50aV8xNihkc3QgJiM0MzsgNjQsIHNyYyAmIzQzOyA2NCk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHRjYXNlIDk2OlxuJiM0MztcdFx0XHRcdG1vdm50aV82NChkc3QsIHNyYyk7XG4mIzQzO1x0XHRcdFx0bW92bnRpXzMyKGRzdCAmIzQzOyA2NCwgc3JjICYjNDM7IDY0KTtcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4gXHRcdH1cbiBcdH1cbiYjNDM7XG4gXHRfX21lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpO1xuIH1cbiYjNDM7XG4mIzQzOyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsIG1lbWNweV9ub250ZW1wb3JhbFxuJiM0MzsvKlxuJiM0MzsgKiBSZXVzZSB0aGUgZXhpc3RpbmcgeDg2IGZsdXNoY2FjaGUgYmFja2VuZCBhcyB0aGUgbm9uLXRlbXBvcmFsIGNvcHlcbiYjNDM7ICogcHJpbWl0aXZlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9ub250ZW1wb3JhbCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyxcbiYjNDM7XHRcdHNpemVfdCBjbnQpXG4mIzQzO3tcbiYjNDM7XHRtZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcbiYjNDM7fVxuJiM0MztcbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogX19LRVJORUxfXyAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggNDg1ZGY5YzJkYmRkYjMuLjQzMzQzYmZjZTQ5MzZlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC0yNTQxLDExICYjNDM7MjU0MSwyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxuIFx0cGFnZS1cdTAwM2VmbGFncy5mIHw9IChzZWN0aW9uIFx1MDAyNiBTRUNUSU9OU19NQVNLKSBcdTAwM2NcdTAwM2MgU0VDVElPTlNfUEdTSElGVDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4mIzQzO3tcbiYjNDM7XHRzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24obWVtZGVzY19mbGFnc190IG1kZilcbiB7XG4gXHRyZXR1cm4gKG1kZi5mIFx1MDAzZVx1MDAzZSBTRUNUSU9OU19QR1NISUZUKSBcdTAwMjYgU0VDVElPTlNfTUFTSztcbiB9XG4gI2Vsc2UgLyogIVNFQ1RJT05fSU5fUEFHRV9GTEFHUyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcGZuKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuIHtcbiBcdHJldHVybiAwO1xuQEAgLTI3NjgsOSAmIzQzOzI3NzksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfbGlua3Moc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gem9uZV90eXBlIHpvbmUsXG4ge1xuIFx0c2V0X3BhZ2Vfem9uZShwYWdlLCB6b25lKTtcbiBcdHNldF9wYWdlX25vZGUocGFnZSwgbm9kZSk7XG4tI2lmZGVmIFNFQ1RJT05fSU5fUEFHRV9GTEFHU1xuLVx0c2V0X3BhZ2Vfc2VjdGlvbihwYWdlLCBwZm5fdG9fc2VjdGlvbl9ucihwZm4pKTtcbi0jZW5kaWZcbiYjNDM7XHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHBhZ2UsIHBmbik7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5pbmRleCA1NzAyZGFjYTQzMjZiNy4uNmNiNWNkZDAxMTU4YjIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5AQCAtMjc4LDYgJiM0MzsyNzgsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxuIH1cbiAjZW5kaWZcbiBcbiYjNDM7I2lmbmRlZiBtZW1jcHlfbm9udGVtcG9yYWxcbiYjNDM7LypcbiYjNDM7ICogbWVtY3B5X25vbnRlbXBvcmFsKCkgcmVxdWVzdHMgYSBub24tdGVtcG9yYWwgY29weSB3aGVuIHRoZVxuJiM0MzsgKiBhcmNoaXRlY3R1cmUgaGFzIGEgc3VpdGFibGUgYmFja2VuZC4gQXJjaGl0ZWN0dXJlcyB3aXRob3V0IGFcbiYjNDM7ICogc3BlY2lhbGl6ZWQgYmFja2VuZCBmYWxsIGJhY2sgdG8gbWVtY3B5KCkuIEtlZXAgdGhpcyBhcyBhXG4mIzQzOyAqIGZ1bmN0aW9uLWxpa2UgbWFjcm8gc28gdGhlIGNvbXBpbGVyIGNhbiBzdGlsbCBzZWUgdGhlIG9yaWdpbmFsXG4mIzQzOyAqIG1lbWNweSgpIGNhbGwgc2l0ZSBhbmQgcHJlc2VydmUgdGhlIHVzdWFsIEZPUlRJRlkgY292ZXJhZ2Ugd2hlblxuJiM0MzsgKiBvYmplY3Qgc2l6ZXMgcmVtYWluIHZpc2libGUgdGhlcmUsIHdoaWxlIGtlZXBpbmcgdGhlIEFQSSB2b2lkLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBtZW1jcHlfbm9udGVtcG9yYWwoZHN0LCBzcmMsIGxlbikgXFxcbiYjNDM7XHQoKHZvaWQpbWVtY3B5KGRzdCwgc3JjLCBsZW4pKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gdm9pZCAqbWVtY2hyX2ludihjb25zdCB2b2lkICpzLCBpbnQgYywgc2l6ZV90IG4pO1xuIGNoYXIgKnN0cnJlcGxhY2UoY2hhciAqc3RyLCBjaGFyIG9sZCwgY2hhciBuZXcpO1xuIFxuZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuY1xuaW5kZXggMGY2NDkwOWU4ZDIwZTIuLmFlNDJhMTMxMWUxZDE4IDEwMDY0NFxuLS0tIGEvbW0vbW1faW5pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tbV9pbml0LmNcbkBAIC0xMDA1LDExICYjNDM7MTAwNSwzNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbWVtbWFwX2luaXQodm9pZClcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxuLXN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcbiYjNDM7LypcbiYjNDM7ICogUmV0dXJuIHRydWUgd2hlbiBtZW1tYXBfaW5pdF96b25lX2RldmljZSgpIG11c3QgaW5pdGlhbGl6ZSB0aGUgcGFnZVxuJiM0MzsgKiByZWZjb3VudCB0byAwLiBNRU1PUllfREVWSUNFX0dFTkVSSUMgcGFnZXMgcmVnYWluIGEgcmVmY291bnQgb2YgMSBpblxuJiM0MzsgKiB0aGUgZnJlZSBwYXRoLCB3aGlsZSB0aGUgcmVtYWluaW5nIFpPTkVfREVWSUNFIHR5cGVzIHN0YXJ0IGZyb20gMCBoZXJlXG4mIzQzOyAqIGFuZCByYWlzZSB0aGUgY291bnQgYWdhaW4gd2hlbiB0aGUgYWxsb2NhdG9yIG9yIGRyaXZlciBoYW5kcyB0aGUgcGFnZVxuJiM0MzsgKiBvdXQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcGFnZW1hcF9yZXF1aXJlc19yZWZjb3VudF9yZXNldChjb25zdCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNRU1PUllfREVWSUNFX0dFTkVSSUMgcGFnZXMgcmVnYWluIGEgcmVmY291bnQgb2YgMSBpbiB0aGUgZnJlZVxuJiM0MztcdCAqIHBhdGguIFRoZSByZW1haW5pbmcgWk9ORV9ERVZJQ0UgdHlwZXMgc3RhcnQgZnJvbSAwIGhlcmUgYW5kIHJhaXNlXG4mIzQzO1x0ICogdGhlIGNvdW50IGFnYWluIHdoZW4gdGhlIGFsbG9jYXRvciBvciBkcml2ZXIgaGFuZHMgdGhlIHBhZ2Ugb3V0LlxuJiM0MztcdCAqL1xuJiM0MztcdHN3aXRjaCAocGdtYXAtXHUwMDNldHlwZSkge1xuJiM0MztcdGNhc2UgTUVNT1JZX0RFVklDRV9GU19EQVg6XG4mIzQzO1x0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XG4mIzQzO1x0Y2FzZSBNRU1PUllfREVWSUNFX0NPSEVSRU5UOlxuJiM0MztcdGNhc2UgTUVNT1JZX0RFVklDRV9QQ0lfUDJQRE1BOlxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0Y2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIF9fcmVmIF9fem9uZV9kZXZpY2VfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcbiBcdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIHpvbmVfaWR4LCBpbnQgbmlkLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4ge1xuLVxuIFx0X19pbml0X3NpbmdsZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCk7XG4gXG4gXHQvKlxuQEAgLTEwMjgsMjcgJiM0MzsxMDU0LDU0IEBAIHN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcbiBcdCAqL1xuIFx0cGFnZV9mb2xpbyhwYWdlKS1cdTAwM2VwZ21hcCA9IHBnbWFwO1xuIFx0cGFnZS1cdTAwM2V6b25lX2RldmljZV9kYXRhID0gTlVMTDtcbiYjNDM7fVxuIFxuLVx0Lypcbi1cdCAqIFpPTkVfREVWSUNFIHBhZ2VzIG90aGVyIHRoYW4gTUVNT1JZX1RZUEVfR0VORVJJQyBhcmUgcmVsZWFzZWRcbi1cdCAqIGRpcmVjdGx5IHRvIHRoZSBkcml2ZXIgcGFnZSBhbGxvY2F0b3Igd2hpY2ggd2lsbCBzZXQgdGhlIHBhZ2UgY291bnRcbi1cdCAqIHRvIDEgd2hlbiBhbGxvY2F0aW5nIHRoZSBwYWdlLlxuLVx0ICpcbi1cdCAqIE1FTU9SWV9UWVBFX0dFTkVSSUMgYW5kIE1FTU9SWV9UWVBFX0ZTX0RBWCBwYWdlcyBhdXRvbWF0aWNhbGx5IGhhdmVcbi1cdCAqIHRoZWlyIHJlZmNvdW50IHJlc2V0IHRvIG9uZSB3aGVuZXZlciB0aGV5IGFyZSBmcmVlZCAoaWUuIGFmdGVyXG4tXHQgKiB0aGVpciByZWZjb3VudCBkcm9wcyB0byAwKS5cbi1cdCAqL1xuLVx0c3dpdGNoIChwZ21hcC1cdTAwM2V0eXBlKSB7XG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOlxuLVx0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6XG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQTpcbiYjNDM7c3RhdGljIHZvaWQgX19yZWYgem9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3coc3RydWN0IHBhZ2UgKnBhZ2UsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcbiYjNDM7XHRcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4mIzQzO3tcbiYjNDM7XHRfX3pvbmVfZGV2aWNlX3BhZ2VfaW5pdChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbiYjNDM7XHRpZiAocGFnZW1hcF9yZXF1aXJlc19yZWZjb3VudF9yZXNldChwZ21hcCkpXG4gXHRcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xuLVx0XHRicmVhaztcbiYjNDM7fVxuIFxuLVx0Y2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6XG4tXHRcdGJyZWFrO1xuLVx0fVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgem9uZV9kZXZpY2VfdGFpbF9wYWdlX2luaXQoc3RydWN0IHBhZ2UgKnBhZ2UsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcbiYjNDM7XHRcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGNvbnN0IHN0cnVjdCBwYWdlICpoZWFkLFxuJiM0MztcdFx0dW5zaWduZWQgaW50IG9yZGVyKVxuJiM0Mzt7XG4mIzQzO1x0em9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3cocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4mIzQzO1x0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcbiYjNDM7XHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogJiMzOTt0ZW1wbGF0ZSYjMzk7IGlzIGEgcmV1c2FibGUgcGFnZSBwcm90b3R5cGUgcmF0aGVyIHRoYW4gYSBzdHJpY3RseSBpbW11dGFibGVcbiYjNDM7ICogb2JqZWN0LiBNb3N0IFpPTkVfREVWSUNFIGZpZWxkcyBzdGF5IGNvbnN0YW50IGFjcm9zcyB0aGUgcGFnZXMgY292ZXJlZCBieVxuJiM0MzsgKiB0aGUgY3VycmVudCB0ZW1wbGF0ZSwgYnV0IHNlY3Rpb24gYml0cyBhbmQgcGFnZS1cdTAwM2V2aXJ0dWFsIG1heSBzdGlsbCBkZXBlbmRcbiYjNDM7ICogb24gdGhlIFBGTi4gUmVmcmVzaCB0aG9zZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGUgdGVtcGxhdGUgYmVmb3JlXG4mIzQzOyAqIGNvcHlpbmcgaXQgaW50byBAcGFnZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHBmbilcbiYjNDM7e1xuJiM0MztcdHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4odGVtcGxhdGUsIHBmbik7XG4mIzQzOyNpZmRlZiBXQU5UX1BBR0VfVklSVFVBTFxuJiM0MztcdGlmICghaXNfaGlnaG1lbV9pZHgoWk9ORV9ERVZJQ0UpKVxuJiM0MztcdFx0c2V0X3BhZ2VfYWRkcmVzcyh0ZW1wbGF0ZSwgX192YShwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKTtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlICp0ZW1wbGF0ZSlcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogJiMzOTt0ZW1wbGF0ZSYjMzk7IGNhcnJpZXMgdGhlIGludmFyaWFudCBwb3J0aW9uIG9mIGEgWk9ORV9ERVZJQ0Ugc3RydWN0XG4mIzQzO1x0ICogcGFnZS4gVXBkYXRlIHRoZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiBwbGFjZSBiZWZvcmUgY29weWluZyBpdFxuJiM0MztcdCAqIHRvIHRoZSBkZXN0aW5hdGlvbiBwYWdlLlxuJiM0MztcdCAqL1xuJiM0MztcdHpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlKHRlbXBsYXRlLCBwZm4pO1xuJiM0MztcdG1lbWNweV9ub250ZW1wb3JhbChwYWdlLCB0ZW1wbGF0ZSwgc2l6ZW9mKCpwYWdlKSk7XG4gfVxuIFxuIC8qXG5AQCAtMTA4Myw2ICYjNDM7MTEzNiw3IEBAIHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgcGZuLCBlbmRfcGZuID0gaGVhZF9wZm4gJiM0MzsgbnJfcGFnZXM7XG4gXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBwZ21hcC1cdTAwM2V2bWVtbWFwX3NoaWZ0O1xuJiM0MztcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xuIFxuIFx0LypcbiBcdCAqIFdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgcGFnZXMsIGluY2x1ZGluZyBzZXR0aW5nIHVwIHBhZ2UgbGlua3MuXG5AQCAtMTA5MSwxMiAmIzQzOzExNDUsMjYgQEAgc3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXG4gXHQgKiB0aGUgcGFnZXMgaW4gdGhlIHNhbWUgZ28uXG4gXHQgKi9cbiBcdF9fU2V0UGFnZUhlYWQoaGVhZCk7XG4mIzQzO1xuIFx0Zm9yIChwZm4gPSBoZWFkX3BmbiAmIzQzOyAxOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbiYjNDM7JiM0MzspIHtcbiBcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuIFxuLVx0XHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbi1cdFx0cHJlcF9jb21wb3VuZF90YWlsKHBhZ2UsIGhlYWQsIG9yZGVyKTtcbi1cdFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XG4mIzQzO1x0XHRpZiAocGZuID09IGhlYWRfcGZuICYjNDM7IDEpIHtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogQWxsIHRhaWxzIG9mIHRoZSBzYW1lIGNvbXBvdW5kIHBhZ2Ugc2hhcmUgdGhlXG4mIzQzO1x0XHRcdCAqIHN0YXRlIGVzdGFibGlzaGVkIGJ5IHByZXBfY29tcG91bmRfdGFpbCgpLiBSZXVzZVxuJiM0MztcdFx0XHQgKiBvbmUgdGFpbCB0ZW1wbGF0ZSBmb3IgdGhlIHdob2xlIHJhbmdlIGFuZFxuJiM0MztcdFx0XHQgKiByZWZyZXNoIG9ubHkgdGhlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHRoYXRcbiYjNDM7XHRcdFx0ICogdGVtcGxhdGUgYmVmb3JlIGVhY2ggY29weS5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcGdtYXAsIGhlYWQsIG9yZGVyKTtcbiYjNDM7XHRcdFx0LyogaW5pdCB0ZW1wbGF0ZSBwYWdlICovXG4mIzQzO1x0XHRcdG1lbWNweShcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHR6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShwYWdlLCBwZm4sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnRlbXBsYXRlKTtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcdHByZXBfY29tcG91bmRfaGVhZChoZWFkLCBvcmRlcik7XG4gfVxuQEAgLTExMTMsNiAmIzQzOzExODEsNyBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuIFx0dW5zaWduZWQgbG9uZyB6b25lX2lkeCA9IHpvbmVfaWR4KHpvbmUpO1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7XG4gXHRpbnQgbmlkID0gcGdkYXQtXHUwMDNlbm9kZV9pZDtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSB0ZW1wbGF0ZTtcbiBcbiBcdGlmIChXQVJOX09OX09OQ0UoIXBnbWFwIHx8IHpvbmVfaWR4ICE9IFpPTkVfREVWSUNFKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTExMzAsNyAmIzQzOzExOTksMjEgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcbiBcdGZvciAocGZuID0gc3RhcnRfcGZuOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbiAmIzQzOz0gcGZuc19wZXJfY29tcG91bmQpIHtcbiBcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuIFxuLVx0XHRfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbiYjNDM7XHRcdGlmIChwZm4gPT0gc3RhcnRfcGZuKSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFNlZWQgdGhlIHJldXNhYmxlIGhlYWQtcGFnZSB0ZW1wbGF0ZSBmcm9tIHRoZVxuJiM0MztcdFx0XHQgKiBmaXJzdCByZWFsIHN0cnVjdCBwYWdlLCBiZWNhdXNlIHRoZSBleGlzdGluZ1xuJiM0MztcdFx0XHQgKiBwYWdlLWluaXQgYW5kIHBhZ2VibG9jayBoZWxwZXJzIGV4cGVjdCBhIHJlYWxcbiYjNDM7XHRcdFx0ICogbWVtbWFwIGVudHJ5IHJhdGhlciB0aGFuIGEgc3RhY2sgb2JqZWN0LlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3cocGFnZSwgcGZuLCB6b25lX2lkeCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgbmlkLCBwZ21hcCk7XG4mIzQzO1x0XHRcdC8qIGluaXQgdGVtcGxhdGUgcGFnZSAqL1xuJiM0MztcdFx0XHRtZW1jcHkoXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZ0ZW1wbGF0ZSk7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdGlmIChJU19BTElHTkVEKHBmbiwgUEFHRVNfUEVSX1NFQ1RJT04pKVxuIFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtQQ0lfUDJQRE1BJiMzNDssCiAgICAmIzM0O0RBWCYjMzQ7LAogICAgJiMzNDtERVZfREFYJiMzNDssCiAgICAmIzM0O0ZTX0RBWCYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7LAogICAgJiMzNDtTUEFSU0VNRU1fVk1FTU1BUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW1hcF9pbml0X3pvbmVfZGV2aWNlJiMzNDssCiAgICAmIzM0O21lbW1hcF9pbml0X2NvbXBvdW5kJiMzNDssCiAgICAmIzM0O3pvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlJiMzNDssCiAgICAmIzM0O3pvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgWk9ORV9ERVZJQ0UgcGFnZXMgYnkgdXNpbmcgYSB0ZW1wbGF0ZSBhbmQgbm9uLXRlbXBvcmFsIG1lbWNweS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIHdoZW4gcHJvYmluZyBkZXZpY2VzIGxpa2UgUE1FTSwgREFYLCBvciBQQ0kgUDJQRE1BLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMWZhMzAwMDdhYmFhMTg3ZjQ4ODIzN2Q3MDkxNTE4MDBjNzJmZjI2MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDI4IDAxOjI2OjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaAppbmRleCA0NjM1NjE2ODYzZjUzZC4uYmM2YTlmMzRiMzQ2YWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oCkBAIC04Miw3ICYjNDM7ODIsMzUgQEAgaW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpOwogI2lmZGVmIENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEUKICNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZX0ZMVVNIQ0FDSEUgMQogdm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTsKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCkKJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzgodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUoJiMzNDttb3ZudGlxICUxLCAlMCYjMzQ7CiYjNDM7CQkgICAgIDogJiMzNDs9bSYjMzQ7KCoodTY0ICopZHN0KQomIzQzOwkJICAgICA6ICYjMzQ7ciYjMzQ7KCooY29uc3QgdTY0ICopc3JjKQomIzQzOwkJICAgICA6ICYjMzQ7bWVtb3J5JiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzE2KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQomIzQzO3sKJiM0MzsJbW92bnRpXzgoZHN0LCBzcmMpOwomIzQzOwltb3ZudGlfOChkc3QgJiM0MzsgOCwgc3JjICYjNDM7IDgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzMyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQomIzQzO3sKJiM0MzsJbW92bnRpXzE2KGRzdCwgc3JjKTsKJiM0MzsJbW92bnRpXzE2KGRzdCAmIzQzOyAxNiwgc3JjICYjNDM7IDE2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV82NCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKJiM0Mzt7CiYjNDM7CW1vdm50aV8zMihkc3QsIHNyYyk7CiYjNDM7CW1vdm50aV8zMihkc3QgJiM0MzsgMzIsIHNyYyAmIzQzOyAzMik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywKJiM0MzsJCQkJCSAgICAgIHNpemVfdCBjbnQpCiB7CiAJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGNudCkpIHsKIAkJc3dpdGNoIChjbnQpIHsKQEAgLTk2LDEwICYjNDM7MTI0LDQ4IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90CiAJCQkJYXNtICgmIzM0O21vdm50aXEgJTEsICUwJiMzNDsgOiAmIzM0Oz1tJiMzNDsoKih1NjQgKilkc3QpIDogJiMzNDtyJiMzNDsoKih1NjQgKilzcmMpKTsKIAkJCQlhc20gKCYjMzQ7bW92bnRpcSAlMSwgJTAmIzM0OyA6ICYjMzQ7PW0mIzM0OygqKHU2NCAqKShkc3QgJiM0MzsgOCkpIDogJiMzNDtyJiMzNDsoKih1NjQgKikoc3JjICYjNDM7IDgpKSk7CiAJCQkJcmV0dXJuOwomIzQzOwkJCS8qCiYjNDM7CQkJICogVGhlIHJlbGV2YW50IGZpeGVkLXNpemUgY29waWVzIGhlcmUgYXJlIHRoZQomIzQzOwkJCSAqIHg4Nl82NCBzdHJ1Y3QgcGFnZSBzaXplczogNjQsIDgwLCBhbmQgOTYgYnl0ZXMuCiYjNDM7CQkJICogS2VlcCAzMi1ieXRlIGFuZCA0OC1ieXRlIGNvcGllcyBpbmxpbmUgYXMgd2VsbAomIzQzOwkJCSAqIGluc3RlYWQgb2Ygc2VuZGluZyB0aG9zZSBuZWFyYnkgZml4ZWQtc2l6ZQomIzQzOwkJCSAqIGNhc2VzIGJhY2sgdG8gX19tZW1jcHlfZmx1c2hjYWNoZSgpLgomIzQzOwkJCSAqLwomIzQzOwkJCWNhc2UgMzI6CiYjNDM7CQkJCW1vdm50aV8zMihkc3QsIHNyYyk7CiYjNDM7CQkJCXJldHVybjsKJiM0MzsJCQljYXNlIDQ4OgomIzQzOwkJCQltb3ZudGlfMzIoZHN0LCBzcmMpOwomIzQzOwkJCQltb3ZudGlfMTYoZHN0ICYjNDM7IDMyLCBzcmMgJiM0MzsgMzIpOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJY2FzZSA2NDoKJiM0MzsJCQkJbW92bnRpXzY0KGRzdCwgc3JjKTsKJiM0MzsJCQkJcmV0dXJuOwomIzQzOwkJCWNhc2UgODA6CiYjNDM7CQkJCW1vdm50aV82NChkc3QsIHNyYyk7CiYjNDM7CQkJCW1vdm50aV8xNihkc3QgJiM0MzsgNjQsIHNyYyAmIzQzOyA2NCk7CiYjNDM7CQkJCXJldHVybjsKJiM0MzsJCQljYXNlIDk2OgomIzQzOwkJCQltb3ZudGlfNjQoZHN0LCBzcmMpOwomIzQzOwkJCQltb3ZudGlfMzIoZHN0ICYjNDM7IDY0LCBzcmMgJiM0MzsgNjQpOwomIzQzOwkJCQlyZXR1cm47CiAJCX0KIAl9CiYjNDM7CiAJX19tZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTsKIH0KJiM0MzsKJiM0MzsjZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbCBtZW1jcHlfbm9udGVtcG9yYWwKJiM0MzsvKgomIzQzOyAqIFJldXNlIHRoZSBleGlzdGluZyB4ODYgZmx1c2hjYWNoZSBiYWNrZW5kIGFzIHRoZSBub24tdGVtcG9yYWwgY29weQomIzQzOyAqIHByaW1pdGl2ZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X25vbnRlbXBvcmFsKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLAomIzQzOwkJc2l6ZV90IGNudCkKJiM0Mzt7CiYjNDM7CW1lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpOwomIzQzO30KJiM0MzsKICNlbmRpZgogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IDQ4NWRmOWMyZGJkZGIzLi40MzM0M2JmY2U0OTM2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtMjU0MSwxMSAmIzQzOzI1NDEsMjIgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb24oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgc2VjdGlvbikKIAlwYWdlLSZndDtmbGFncy5mIHw9IChzZWN0aW9uICZhbXA7IFNFQ1RJT05TX01BU0spICZsdDsmbHQ7IFNFQ1RJT05TX1BHU0hJRlQ7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGZuKQomIzQzO3sKJiM0MzsJc2V0X3BhZ2Vfc2VjdGlvbihwYWdlLCBwZm5fdG9fc2VjdGlvbl9ucihwZm4pKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpCiB7CiAJcmV0dXJuIChtZGYuZiAmZ3Q7Jmd0OyBTRUNUSU9OU19QR1NISUZUKSAmYW1wOyBTRUNUSU9OU19NQVNLOwogfQogI2Vsc2UgLyogIVNFQ1RJT05fSU5fUEFHRV9GTEFHUyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJdW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24obWVtZGVzY19mbGFnc190IG1kZikKIHsKIAlyZXR1cm4gMDsKQEAgLTI3NjgsOSAmIzQzOzI3NzksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfbGlua3Moc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gem9uZV90eXBlIHpvbmUsCiB7CiAJc2V0X3BhZ2Vfem9uZShwYWdlLCB6b25lKTsKIAlzZXRfcGFnZV9ub2RlKHBhZ2UsIG5vZGUpOwotI2lmZGVmIFNFQ1RJT05fSU5fUEFHRV9GTEFHUwotCXNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7Ci0jZW5kaWYKJiM0MzsJc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihwYWdlLCBwZm4pOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCmluZGV4IDU3MDJkYWNhNDMyNmI3Li42Y2I1Y2RkMDExNThiMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCkBAIC0yNzgsNiAmIzQzOzI3OCwxOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpCiB9CiAjZW5kaWYKIAomIzQzOyNpZm5kZWYgbWVtY3B5X25vbnRlbXBvcmFsCiYjNDM7LyoKJiM0MzsgKiBtZW1jcHlfbm9udGVtcG9yYWwoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlCiYjNDM7ICogYXJjaGl0ZWN0dXJlIGhhcyBhIHN1aXRhYmxlIGJhY2tlbmQuIEFyY2hpdGVjdHVyZXMgd2l0aG91dCBhCiYjNDM7ICogc3BlY2lhbGl6ZWQgYmFja2VuZCBmYWxsIGJhY2sgdG8gbWVtY3B5KCkuIEtlZXAgdGhpcyBhcyBhCiYjNDM7ICogZnVuY3Rpb24tbGlrZSBtYWNybyBzbyB0aGUgY29tcGlsZXIgY2FuIHN0aWxsIHNlZSB0aGUgb3JpZ2luYWwKJiM0MzsgKiBtZW1jcHkoKSBjYWxsIHNpdGUgYW5kIHByZXNlcnZlIHRoZSB1c3VhbCBGT1JUSUZZIGNvdmVyYWdlIHdoZW4KJiM0MzsgKiBvYmplY3Qgc2l6ZXMgcmVtYWluIHZpc2libGUgdGhlcmUsIHdoaWxlIGtlZXBpbmcgdGhlIEFQSSB2b2lkLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsKGRzdCwgc3JjLCBsZW4pIFwKJiM0MzsJKCh2b2lkKW1lbWNweShkc3QsIHNyYywgbGVuKSkKJiM0MzsjZW5kaWYKJiM0MzsKIHZvaWQgKm1lbWNocl9pbnYoY29uc3Qgdm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTsKIGNoYXIgKnN0cnJlcGxhY2UoY2hhciAqc3RyLCBjaGFyIG9sZCwgY2hhciBuZXcpOwogCmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmMKaW5kZXggMGY2NDkwOWU4ZDIwZTIuLmFlNDJhMTMxMWUxZDE4IDEwMDY0NAotLS0gYS9tbS9tbV9pbml0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW1faW5pdC5jCkBAIC0xMDA1LDExICYjNDM7MTAwNSwzNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbWVtbWFwX2luaXQodm9pZCkKIH0KIAogI2lmZGVmIENPTkZJR19aT05FX0RFVklDRQotc3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLAomIzQzOy8qCiYjNDM7ICogUmV0dXJuIHRydWUgd2hlbiBtZW1tYXBfaW5pdF96b25lX2RldmljZSgpIG11c3QgaW5pdGlhbGl6ZSB0aGUgcGFnZQomIzQzOyAqIHJlZmNvdW50IHRvIDAuIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluCiYjNDM7ICogdGhlIGZyZWUgcGF0aCwgd2hpbGUgdGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZQomIzQzOyAqIGFuZCByYWlzZSB0aGUgY291bnQgYWdhaW4gd2hlbiB0aGUgYWxsb2NhdG9yIG9yIGRyaXZlciBoYW5kcyB0aGUgcGFnZQomIzQzOyAqIG91dC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcGFnZW1hcF9yZXF1aXJlc19yZWZjb3VudF9yZXNldChjb25zdCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogTUVNT1JZX0RFVklDRV9HRU5FUklDIHBhZ2VzIHJlZ2FpbiBhIHJlZmNvdW50IG9mIDEgaW4gdGhlIGZyZWUKJiM0MzsJICogcGF0aC4gVGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZSBhbmQgcmFpc2UKJiM0MzsJICogdGhlIGNvdW50IGFnYWluIHdoZW4gdGhlIGFsbG9jYXRvciBvciBkcml2ZXIgaGFuZHMgdGhlIHBhZ2Ugb3V0LgomIzQzOwkgKi8KJiM0MzsJc3dpdGNoIChwZ21hcC0mZ3Q7dHlwZSkgewomIzQzOwljYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOgomIzQzOwljYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURToKJiM0MzsJY2FzZSBNRU1PUllfREVWSUNFX0NPSEVSRU5UOgomIzQzOwljYXNlIE1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQToKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwljYXNlIE1FTU9SWV9ERVZJQ0VfR0VORVJJQzoKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9fcmVmIF9fem9uZV9kZXZpY2VfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbiwKIAkJCQkJICB1bnNpZ25lZCBsb25nIHpvbmVfaWR4LCBpbnQgbmlkLAogCQkJCQkgIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApCiB7Ci0KIAlfX2luaXRfc2luZ2xlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkKTsKIAogCS8qCkBAIC0xMDI4LDI3ICYjNDM7MTA1NCw1NCBAQCBzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sCiAJICovCiAJcGFnZV9mb2xpbyhwYWdlKS0mZ3Q7cGdtYXAgPSBwZ21hcDsKIAlwYWdlLSZndDt6b25lX2RldmljZV9kYXRhID0gTlVMTDsKJiM0Mzt9CiAKLQkvKgotCSAqIFpPTkVfREVWSUNFIHBhZ2VzIG90aGVyIHRoYW4gTUVNT1JZX1RZUEVfR0VORVJJQyBhcmUgcmVsZWFzZWQKLQkgKiBkaXJlY3RseSB0byB0aGUgZHJpdmVyIHBhZ2UgYWxsb2NhdG9yIHdoaWNoIHdpbGwgc2V0IHRoZSBwYWdlIGNvdW50Ci0JICogdG8gMSB3aGVuIGFsbG9jYXRpbmcgdGhlIHBhZ2UuCi0JICoKLQkgKiBNRU1PUllfVFlQRV9HRU5FUklDIGFuZCBNRU1PUllfVFlQRV9GU19EQVggcGFnZXMgYXV0b21hdGljYWxseSBoYXZlCi0JICogdGhlaXIgcmVmY291bnQgcmVzZXQgdG8gb25lIHdoZW5ldmVyIHRoZXkgYXJlIGZyZWVkIChpZS4gYWZ0ZXIKLQkgKiB0aGVpciByZWZjb3VudCBkcm9wcyB0byAwKS4KLQkgKi8KLQlzd2l0Y2ggKHBnbWFwLSZndDt0eXBlKSB7Ci0JY2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDoKLQljYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURToKLQljYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6Ci0JY2FzZSBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE6CiYjNDM7c3RhdGljIHZvaWQgX19yZWYgem9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3coc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQl1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCwKJiM0MzsJCXN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApCiYjNDM7ewomIzQzOwlfX3pvbmVfZGV2aWNlX3BhZ2VfaW5pdChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTsKJiM0MzsJaWYgKHBhZ2VtYXBfcmVxdWlyZXNfcmVmY291bnRfcmVzZXQocGdtYXApKQogCQlzZXRfcGFnZV9jb3VudChwYWdlLCAwKTsKLQkJYnJlYWs7CiYjNDM7fQogCi0JY2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6Ci0JCWJyZWFrOwotCX0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgem9uZV9kZXZpY2VfdGFpbF9wYWdlX2luaXQoc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQl1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCwKJiM0MzsJCXN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGNvbnN0IHN0cnVjdCBwYWdlICpoZWFkLAomIzQzOwkJdW5zaWduZWQgaW50IG9yZGVyKQomIzQzO3sKJiM0MzsJem9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3cocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7CiYjNDM7CXByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7CiYjNDM7CXNldF9wYWdlX2NvdW50KHBhZ2UsIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqICYjMzk7dGVtcGxhdGUmIzM5OyBpcyBhIHJldXNhYmxlIHBhZ2UgcHJvdG90eXBlIHJhdGhlciB0aGFuIGEgc3RyaWN0bHkgaW1tdXRhYmxlCiYjNDM7ICogb2JqZWN0LiBNb3N0IFpPTkVfREVWSUNFIGZpZWxkcyBzdGF5IGNvbnN0YW50IGFjcm9zcyB0aGUgcGFnZXMgY292ZXJlZCBieQomIzQzOyAqIHRoZSBjdXJyZW50IHRlbXBsYXRlLCBidXQgc2VjdGlvbiBiaXRzIGFuZCBwYWdlLSZndDt2aXJ0dWFsIG1heSBzdGlsbCBkZXBlbmQKJiM0MzsgKiBvbiB0aGUgUEZOLiBSZWZyZXNoIHRob3NlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHRoZSB0ZW1wbGF0ZSBiZWZvcmUKJiM0MzsgKiBjb3B5aW5nIGl0IGludG8gQHBhZ2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlKHN0cnVjdCBwYWdlICp0ZW1wbGF0ZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGZuKQomIzQzO3sKJiM0MzsJc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3Bmbih0ZW1wbGF0ZSwgcGZuKTsKJiM0MzsjaWZkZWYgV0FOVF9QQUdFX1ZJUlRVQUwKJiM0MzsJaWYgKCFpc19oaWdobWVtX2lkeChaT05FX0RFVklDRSkpCiYjNDM7CQlzZXRfcGFnZV9hZGRyZXNzKHRlbXBsYXRlLCBfX3ZhKHBmbiAmbHQ7Jmx0OyBQQUdFX1NISUZUKSk7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJdW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlICp0ZW1wbGF0ZSkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqICYjMzk7dGVtcGxhdGUmIzM5OyBjYXJyaWVzIHRoZSBpbnZhcmlhbnQgcG9ydGlvbiBvZiBhIFpPTkVfREVWSUNFIHN0cnVjdAomIzQzOwkgKiBwYWdlLiBVcGRhdGUgdGhlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHBsYWNlIGJlZm9yZSBjb3B5aW5nIGl0CiYjNDM7CSAqIHRvIHRoZSBkZXN0aW5hdGlvbiBwYWdlLgomIzQzOwkgKi8KJiM0MzsJem9uZV9kZXZpY2VfcGFnZV91cGRhdGVfdGVtcGxhdGUodGVtcGxhdGUsIHBmbik7CiYjNDM7CW1lbWNweV9ub250ZW1wb3JhbChwYWdlLCB0ZW1wbGF0ZSwgc2l6ZW9mKCpwYWdlKSk7CiB9CiAKIC8qCkBAIC0xMDgzLDYgJiM0MzsxMTM2LDcgQEAgc3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsCiB7CiAJdW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm4gPSBoZWFkX3BmbiAmIzQzOyBucl9wYWdlczsKIAl1bnNpZ25lZCBpbnQgb3JkZXIgPSBwZ21hcC0mZ3Q7dm1lbW1hcF9zaGlmdDsKJiM0MzsJc3RydWN0IHBhZ2UgdGVtcGxhdGU7CiAKIAkvKgogCSAqIFdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgcGFnZXMsIGluY2x1ZGluZyBzZXR0aW5nIHVwIHBhZ2UgbGlua3MuCkBAIC0xMDkxLDEyICYjNDM7MTE0NSwyNiBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCwKIAkgKiB0aGUgcGFnZXMgaW4gdGhlIHNhbWUgZ28uCiAJICovCiAJX19TZXRQYWdlSGVhZChoZWFkKTsKJiM0MzsKIAlmb3IgKHBmbiA9IGhlYWRfcGZuICYjNDM7IDE7IHBmbiAmbHQ7IGVuZF9wZm47IHBmbiYjNDM7JiM0MzspIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwogCi0JCV9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApOwotCQlwcmVwX2NvbXBvdW5kX3RhaWwocGFnZSwgaGVhZCwgb3JkZXIpOwotCQlzZXRfcGFnZV9jb3VudChwYWdlLCAwKTsKJiM0MzsJCWlmIChwZm4gPT0gaGVhZF9wZm4gJiM0MzsgMSkgewomIzQzOwkJCS8qCiYjNDM7CQkJICogQWxsIHRhaWxzIG9mIHRoZSBzYW1lIGNvbXBvdW5kIHBhZ2Ugc2hhcmUgdGhlCiYjNDM7CQkJICogc3RhdGUgZXN0YWJsaXNoZWQgYnkgcHJlcF9jb21wb3VuZF90YWlsKCkuIFJldXNlCiYjNDM7CQkJICogb25lIHRhaWwgdGVtcGxhdGUgZm9yIHRoZSB3aG9sZSByYW5nZSBhbmQKJiM0MzsJCQkgKiByZWZyZXNoIG9ubHkgdGhlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHRoYXQKJiM0MzsJCQkgKiB0ZW1wbGF0ZSBiZWZvcmUgZWFjaCBjb3B5LgomIzQzOwkJCSAqLwomIzQzOwkJCXpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwKJiM0MzsJCQkJCQkgICBwZ21hcCwgaGVhZCwgb3JkZXIpOwomIzQzOwkJCS8qIGluaXQgdGVtcGxhdGUgcGFnZSAqLwomIzQzOwkJCW1lbWNweSgmYW1wO3RlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLAomIzQzOwkJCQkJCQkgICAgJmFtcDt0ZW1wbGF0ZSk7CiYjNDM7CQl9CiAJfQogCXByZXBfY29tcG91bmRfaGVhZChoZWFkLCBvcmRlcik7CiB9CkBAIC0xMTEzLDYgJiM0MzsxMTgxLDcgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSwKIAl1bnNpZ25lZCBsb25nIHpvbmVfaWR4ID0gem9uZV9pZHgoem9uZSk7CiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7CiAJaW50IG5pZCA9IHBnZGF0LSZndDtub2RlX2lkOwomIzQzOwlzdHJ1Y3QgcGFnZSB0ZW1wbGF0ZTsKIAogCWlmIChXQVJOX09OX09OQ0UoIXBnbWFwIHx8IHpvbmVfaWR4ICE9IFpPTkVfREVWSUNFKSkKIAkJcmV0dXJuOwpAQCAtMTEzMCw3ICYjNDM7MTE5OSwyMSBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLAogCWZvciAocGZuID0gc3RhcnRfcGZuOyBwZm4gJmx0OyBlbmRfcGZuOyBwZm4gJiM0Mzs9IHBmbnNfcGVyX2NvbXBvdW5kKSB7CiAJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKIAotCQlfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTsKJiM0MzsJCWlmIChwZm4gPT0gc3RhcnRfcGZuKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBTZWVkIHRoZSByZXVzYWJsZSBoZWFkLXBhZ2UgdGVtcGxhdGUgZnJvbSB0aGUKJiM0MzsJCQkgKiBmaXJzdCByZWFsIHN0cnVjdCBwYWdlLCBiZWNhdXNlIHRoZSBleGlzdGluZwomIzQzOwkJCSAqIHBhZ2UtaW5pdCBhbmQgcGFnZWJsb2NrIGhlbHBlcnMgZXhwZWN0IGEgcmVhbAomIzQzOwkJCSAqIG1lbW1hcCBlbnRyeSByYXRoZXIgdGhhbiBhIHN0YWNrIG9iamVjdC4KJiM0MzsJCQkgKi8KJiM0MzsJCQl6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LAomIzQzOwkJCQkJCSAgIG5pZCwgcGdtYXApOwomIzQzOwkJCS8qIGluaXQgdGVtcGxhdGUgcGFnZSAqLwomIzQzOwkJCW1lbWNweSgmYW1wO3RlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLAomIzQzOwkJCQkJCQkgICAgJmFtcDt0ZW1wbGF0ZSk7CiYjNDM7CQl9CiAKIAkJaWYgKElTX0FMSUdORUQocGZuLCBQQUdFU19QRVJfU0VDVElPTikpCiAJCQljb25kX3Jlc2NoZWQoKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkyNQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQ1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgT3B0aW1pemF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgb3B0aW1pemVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IHBhZ2VgIGZvciBgWk9ORV9ERVZJQ0VgIG1lbW9yeS4gSXQmIzM5O3MgdXNpbmcgYG1lbWNweV9ub250ZW1wb3JhbGAgdG8gY29weSBhIHByZS1kZWZpbmVkIHRlbXBsYXRlIGluc3RlYWQgb2YgcGFpbnN0YWtpbmdseSBpbml0aWFsaXppbmcgZWFjaCBwYWdlIGluZGl2aWR1YWxseSwgd2hpY2ggaXMgYSBjbGV2ZXIgYXBwcm9hY2guIFRoaXMgb3B0aW1pemF0aW9uIHRhcmdldHMgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBhbmQgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCwgYm90aCBvZiB3aGljaCBhcmUgY3JpdGljYWwgaW4gbWVtb3J5IG1hbmFnZW1lbnQuIEl0IGFsc28gbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBhbiB4ODYtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgYG1lbWNweV9ub250ZW1wb3JhbGAgdXNpbmcgYG1vdm50aWAgaW5zdHJ1Y3Rpb25zLCBhIG5pY2UgbG93LWxldmVsIG9wdGltaXphdGlvbi4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpcyB0aGlzIHJlYWNoYWJsZSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHdvcnRoIGZ1enppbmc/IGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgaXMgdHJpZ2dlcmVkIHdoZW4gYFpPTkVfREVWSUNFYCBtZW1vcnkgaXMgaG90cGx1Z2dlZC4gVGhhdCYjMzk7cyB0eXBpY2FsbHkgZm9yIERBWCwgUE1FTSwgYW5kIHRoZSBsaWtlLiBOb3csIGNhbiB0aGlzIGJlIHJlYWNoZWQgaW4gYSBjb21tb24gc2V0dXAgbGlrZSBRRU1VPyBBYnNvbHV0ZWx5ISBXZSBjYW4gZW11bGF0ZSBQTUVNL05WRElNTSBkZXZpY2VzIGluIFFFTVUsIHdlIGNhbiB1c2UgdGhlIGBtZW1tYXA9YCBrZXJuZWwgcGFyYW1ldGVyIG9yIGV2ZW4gdXRpbGl6ZSBgbW1hcGAgd2l0aCBEQVguIEhtbSwgd2FpdCBhIG1pbnV0ZSwgSSByZW1lbWJlciBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIGNhbGxlZCBmcm9tIGBkZXZtX21lbXJlbWFwX3BhZ2VzYC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgYW5kIHNlZSB3aGF0IGNhbGxzIHRoYXQgZnVuY3Rpb24uICpjaGVja3MgY29kZSogT2theSwgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGRyaXZlcnMvZGF4L3N1cGVyLmNgLCBgZHJpdmVycy9udmRpbW0vcG1lbS5jYCwgYW5kIGBkcml2ZXJzL3BjaS9wMnBkbWEuY2AuIEludGVyZXN0aW5nIQoKVGhlIGJpZyBxdWVzdGlvbiBub3cgaXMsIGNhbiBzeXprYWxsZXIgdHJpZ2dlciBgZGV2bV9tZW1yZW1hcF9wYWdlc2AgdGhyb3VnaCwgcGVyaGFwcywgc29tZSBsb29wIGRldmljZSwgYSBwbWVtIGRldmljZSwgb3IgZXZlbiBwMnBkbWE/IEFjdHVhbGx5LCB3YWl0LCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIGEgY29yZSBNTSBmdW5jdGlvbiwgc28gaXQmIzM5O3MgYSBkZWZpbml0ZSAmIzM0O3llcyYjMzQ7IHRvIGNvcmUga2VybmVsIGxvZ2ljLiBOb3csIGxldCYjMzk7cyByZWZvY3VzLiBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiwgeWVzLCBidXQgaXQgY2hhbmdlcyBob3cgcGFnZXMgYXJlIGluaXRpYWxpemVkLCBtZWFuaW5nIGl0IHRvdWNoZXMgY29yZSBNTSBsb2dpYy4gQWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gaGVyZSBhcmUgZGVmaW5pdGVseSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFuZCBgbWVtbWFwX2luaXRfY29tcG91bmRgLgoKRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIGlmIGBaT05FX0RFVklDRWAgaXMgZXZlbiBlbmFibGVkIGluIHR5cGljYWwgY29uZmlncy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX1pPTkVfREVWSUNFYCBpcyBzZXQuIExldCBtZSBqdXN0IGNoZWNrIGBtbS9tbV9pbml0LmNgIHRvIGNvbmZpcm0gd2hlcmUgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW1hcF9pbml0X3pvbmVfZGV2aWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXJlbWFwLmM9MTQ0PXN0YXRpYyBpbnQgcGFnZW1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zLFxuLS1cbm1tL21lbXJlbWFwLmMtMjQxLVx0ICovXG5tbS9tZW1yZW1hcC5jOjI0MjpcdG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKFx1MDAyNk5PREVfREFUQShuaWQpLVx1MDAzZW5vZGVfem9uZXNbWk9ORV9ERVZJQ0VdLFxubW0vbWVtcmVtYXAuYy0yNDMtXHRcdFx0XHRQSFlTX1BGTihyYW5nZS1cdTAwM2VzdGFydCksXG4tLVxubW0vbW1faW5pdC5jPTk2OD1zdGF0aWMgdm9pZCBfX2luaXQgbWVtbWFwX2luaXQodm9pZClcbi0tXG5tbS9tbV9pbml0LmMtMTAwOC0vKlxubW0vbW1faW5pdC5jOjEwMDk6ICogUmV0dXJuIHRydWUgd2hlbiBtZW1tYXBfaW5pdF96b25lX2RldmljZSgpIG11c3QgaW5pdGlhbGl6ZSB0aGUgcGFnZVxubW0vbW1faW5pdC5jLTEwMTAtICogcmVmY291bnQgdG8gMC4gTUVNT1JZX0RFVklDRV9HRU5FUklDIHBhZ2VzIHJlZ2FpbiBhIHJlZmNvdW50IG9mIDEgaW5cbi0tXG5tbS9tbV9pbml0LmM9MTEzMT1zdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcbi0tXG5tbS9tbV9pbml0LmMtMTE3MS1cbm1tL21tX2luaXQuYzoxMTcyOnZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG5tbS9tbV9pbml0LmMtMTE3My1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyOTAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBhbmQgaXRzIFVzYWdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCBodW5jaCB0ZWxscyBtZSB0aGlzIGlzIHdoZXJlIHNvbWUgY3JpdGljYWwgaW5pdGlhbGl6YXRpb24gb3Igc2V0dXAgZm9yIG1lbW9yeSBtYXBwaW5nIGlzIGhhbmRsZWQgd2l0aGluIGEgc3BlY2lmaWMgem9uZSBvciBkZXZpY2UgY29udGV4dC4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgKmhvdyogaXQmIzM5O3MgYmVpbmcgdXNlZC4gVGhlIGNhbGwgZ3JhcGggaXMgd2hhdCBJIHdpbGwgbG9vayBhdC4KCk5vdywgSSBuZWVkIHRvIHRyYWNlIHRoZSBjb250cm9sIGZsb3cuIExldCYjMzk7cyBzZWUuLi5gZGV2bV9tZW1yZW1hcF9wYWdlc2AgaXMgYSBsaWtlbHkgc3RhcnRpbmcgcG9pbnQgYmVjYXVzZSB0aGF0JiMzOTtzIHdoYXQgc2VlbXMgdG8gcmVsYXRlIHRvIHRoZSAmIzM5O2RldmljZSBtYW5hZ2VkIG1lbW9yeSByZW1hcHBpbmcmIzM5Oy4gVGhhdCBjYWxscyBgcGFnZW1hcF9yYW5nZWAuIEFuZCAqYWhhISogYHBhZ2VtYXBfcmFuZ2VgIGNhbGxzIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIFNvIHRoZSBkZXBlbmRlbmN5IGlzIGNsZWFyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBkZXZtX21lbXJlbWFwX3BhZ2VzYCBkb2VzIGF0IHRoZSB0b3AsIHNpbmNlIGl0IGlzIHRoZSBzdGFydGluZyBwb2ludC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udGV4dCBpbiB3aGljaCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIGJlaW5nIGludm9rZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2bV9tZW1yZW1hcF9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9Mjc0PVRoZXNlIGNhbiBiZSBhbGxvY2F0ZWQgYW5kIGZyZWVkIHdpdGg6OlxuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yOTAtXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjkxOlRoZXJlIGFyZSBhbHNvIGRldm1fcmVxdWVzdF9mcmVlX21lbV9yZWdpb24oKSwgZGV2bV9tZW1yZW1hcF9wYWdlcygpLFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI5Mi1kZXZtX21lbXVubWFwX3BhZ2VzKCksIGFuZCBkZXZtX3JlbGVhc2VfbWVtX3JlZ2lvbigpIHdoZW4gdGhlIHJlc291cmNlcyBjYW5cbi0tXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q9MTQxPXRvIGtlZXAgdGhlIG1lbW9yeSBwaW5uZWQgZm9yIGFjdGl2ZSB1c2UuIGBaT05FX0RFVklDRWAsIHZpYVxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0OjE0Mjo6YzpmdW5jOmBkZXZtX21lbXJlbWFwX3BhZ2VzYCwgcGVyZm9ybXMganVzdCBlbm91Z2ggbWVtb3J5IGhvdHBsdWcgdG9cbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdC0xNDMtdHVybiBvbiA6YzpmdW5jOmBwZm5fdG9fcGFnZWAsIDpjOmZ1bmM6YHBhZ2VfdG9fcGZuYCwgYW5kXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0PTE1Nz1tZW1vcnkgaG90cGx1Zy4gU3ViLXNlY3Rpb24gc3VwcG9ydCBhbGxvd3MgZm9yIDJNQiBhcyB0aGUgY3Jvc3MtYXJjaFxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0OjE1ODpjb21tb24gYWxpZ25tZW50IGdyYW51bGFyaXR5IGZvciA6YzpmdW5jOmBkZXZtX21lbXJlbWFwX3BhZ2VzYC5cbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdC0xNTktXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdD0yMjA9bWlncmF0ZV92bWFfZmluYWxpemUoKSDlh73mlbDml6jlnKjkvb/pqbHliqjnqIvluo/mm7TmmJPkuo7nvJblhpnlubbpm4bkuK3ot6jpqbHliqjnqIvluo/nmoTpgJrnlKjku6PnoIHjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI0MS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjQyOui/mOaciWRldm1fcmVxdWVzdF9mcmVlX21lbV9yZWdpb24oKSwgZGV2bV9tZW1yZW1hcF9wYWdlcygpLFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNDMtZGV2bV9tZW11bm1hcF9wYWdlcygpIOWSjCBkZXZtX3JlbGVhc2VfbWVtX3JlZ2lvbigpIOW9k+i1hOa6kOWPr+S7pee7keWumuWIsCBgYHN0cnVjdCBkZXZpY2VgYC5cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0PTEwNz1aT05FX0RFVklDRVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtMTExLeS6i+WunuacieWFs++8mui/meS6m+WcsOWdgOiMg+WbtOeahOmhtemdouWvueixoeS7juacquiiq+WcqOe6v+agh+iusOi/h++8jOiAjOS4lOW/hemhu+WvueiuvuWkh+i/m+ihjOW8leeUqO+8jOiAjOS4jeS7heS7hVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdDoxMTI65piv6aG16Z2i77yM5Lul5L+d5oyB5YaF5a2Y6KKr4oCc6ZSB5a6a4oCd5Lul5L6/5L2/55So44CCIGBaT05FX0RFVklDRWAg77yM6YCa6L+HIDpjOmZ1bmM6YGRldm1fbWVtcmVtYXBfcGFnZXNgIO+8jFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdC0xMTMt5Li657uZ5a6a55qEcGZuc+iMg+WbtOaJp+ihjOi2s+Wkn+eahOWGheWtmOeDreaPkuaLlOadpeW8gOWQryA6YzpmdW5jOmBwZm5fdG9fcGFnZWDvvIxcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0LTEyMi06YzpmdW5jOmBhcmNoX2FkZF9tZW1vcnlgIO+8jOWNs+WGheWtmOeDreaPkuaLlOeahOS4iuWNiumDqOWIhuOAguWtkOauteaUr+aMgeWFgeiuuDJNQuS9nOS4ulxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdDoxMjM6OmM6ZnVuYzpgZGV2bV9tZW1yZW1hcF9wYWdlc2Ag55qE6Leo5p625p6E6YCa55So5a+56b2Q6aKX57KS5bqm44CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0LTEyNC1cbi0tXG5kcml2ZXJzL2RheC9kZXZpY2UuYz0zODA9c3RhdGljIGludCBkZXZfZGF4X3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxuLS1cbmRyaXZlcnMvZGF4L2RldmljZS5jLTQzNC1cdFx0XHRvcmRlcl9iYXNlXzIoZGV2X2RheC1cdTAwM2VhbGlnbiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5kcml2ZXJzL2RheC9kZXZpY2UuYzo0MzU6XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBnbWFwKTtcbmRyaXZlcnMvZGF4L2RldmljZS5jLTQzNi1cdGlmIChJU19FUlIoYWRkcikpXG4tLVxuZHJpdmVycy9kYXgvZnNkZXYuYz0yMDc9c3RhdGljIGludCBmc2Rldl9kYXhfcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXG4tLVxuZHJpdmVycy9kYXgvZnNkZXYuYy0yNzMtXG5kcml2ZXJzL2RheC9mc2Rldi5jOjI3NDpcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGdtYXApO1xuZHJpdmVycy9kYXgvZnNkZXYuYy0yNzUtXHRpZiAoSVNfRVJSKGFkZHIpKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9MTAyNj1pbnQga2dkMmtmZF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtMTA2Ny1cdCAqL1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYzoxMDY4Olx0ciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoYWRldi1cdTAwM2VkZXYsIHBnbWFwKTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtMTA2OS1cdGlmIChJU19FUlIocikpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9MTc2MD1zdGF0aWMgc3RydWN0IHhlX3BhZ2VtYXAgKnhlX3BhZ2VtYXBfY3JlYXRlKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCBzdHJ1Y3QgeGVfdnJhbV9yZWdpb24gKnZyKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xODAxLVx0cGFnZW1hcC1cdTAwM2VvcHMgPSBkcm1fcGFnZW1hcF9wYWdlbWFwX29wc19nZXQoKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxODAyOlx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBwYWdlbWFwKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xODAzLVx0aWYgKElTX0VSUihhZGRyKSkge1xuLS1cbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jPTM4MT1zdGF0aWMgaW50IG1zaHZfdnRsX2lvY3RsX2FkZF92dGwwX21lbShzdHJ1Y3QgbXNodl92dGwgKnZ0bCwgdm9pZCBfX3VzZXIgKmFyZylcbi0tXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MTktXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYzo0MjA6XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhtZW1fZGV2LCBwZ21hcCk7XG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MjEtXHRpZiAoSVNfRVJSKGFkZHIpKSB7XG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYzo0MjI6XHRcdGRldl9lcnIodnRsLVx1MDAzZW1vZHVsZV9kZXYsIFwmIzM0O2Rldm1fbWVtcmVtYXBfcGFnZXMgZXJyb3I6ICVsZFxcblwmIzM0OywgUFRSX0VSUihhZGRyKSk7XG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MjMtXHRcdGtmcmVlKHBnbWFwKTtcbi0tXG5kcml2ZXJzL252ZGltbS9LY29uZmlnPTE0Mz1jb25maWcgTlZESU1NX1RFU1RfQlVJTERcbi0tXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTE1MS1cdCAgb3RoZXJ3aXNlIGhlbHBzIGNhdGNoIGJ1aWxkIGVycm9ycyBpbmR1Y2VkIGJ5IGNoYW5nZXMgdG8gdGhlXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjE1MjpcdCAgY29yZSBkZXZtX21lbXJlbWFwX3BhZ2VzKCkgaW1wbGVtZW50YXRpb24gYW5kIG90aGVyXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTE1My1cdCAgaW5mcmFzdHJ1Y3R1cmUuXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTQ0OD1zdGF0aWMgaW50IHBtZW1fYXR0YWNoX2Rpc2soc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01MTctXHRcdHBtZW0tXHUwMDNlcGdtYXAub3BzID0gXHUwMDI2ZnNkYXhfcGFnZW1hcF9vcHM7XG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NTE4Olx0XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIFx1MDAyNnBtZW0tXHUwMDNlcGdtYXApO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUxOS1cdFx0cGZuX3NiID0gbmRfcGZuLVx1MDAzZXBmbl9zYjtcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTMwLVx0XHRwbWVtLVx1MDAzZXBnbWFwLm9wcyA9IFx1MDAyNmZzZGF4X3BhZ2VtYXBfb3BzO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jOjUzMTpcdFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBcdTAwMjZwbWVtLVx1MDAzZXBnbWFwKTtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01MzItXHRcdGJiX3JhbmdlID0gcG1lbS1cdTAwM2VwZ21hcC5yYW5nZTtcbi0tXG5kcml2ZXJzL3BjaS9wMnBkbWEuYz0zODc9aW50IHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyLCBzaXplX3Qgc2l6ZSxcbi0tXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy00MzYtXG5kcml2ZXJzL3BjaS9wMnBkbWEuYzo0Mzc6XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGdtYXApO1xuZHJpdmVycy9wY2kvcDJwZG1hLmMtNDM4LVx0aWYgKElTX0VSUihhZGRyKSkge1xuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmM9NTUzPWRjc3NibGtfYWRkX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmMtNjk2LVx0XHRkZXZfaW5mby1cdTAwM2VwZ21hcC5ucl9yYW5nZVx0PSAxO1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYzo2OTc6XHRcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKFx1MDAyNmRldl9pbmZvLVx1MDAzZWRldiwgXHUwMDI2ZGV2X2luZm8tXHUwMDNlcGdtYXApO1xuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYy02OTgtXHRcdGlmIChJU19FUlIoYWRkcikpIHtcbi0tXG5mcy9mdXNlL3ZpcnRpb19mcy5jPTEwNzY9c3RhdGljIGludCB2aXJ0aW9fZnNfc2V0dXBfZGF4KHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2LCBzdHJ1Y3QgdmlydGlvX2ZzICpmcylcbi0tXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMTYtXHQvKiBJZGVhbGx5IHdlIHdvdWxkIGRpcmVjdGx5IHVzZSB0aGUgUENJIEJBUiByZXNvdXJjZSBidXRcbmZzL2Z1c2UvdmlydGlvX2ZzLmM6MTExNzpcdCAqIGRldm1fbWVtcmVtYXBfcGFnZXMoKSB3YW50cyBpdHMgb3duIGNvcHkgaW4gcGdtYXAuICBTb1xuZnMvZnVzZS92aXJ0aW9fZnMuYy0xMTE4LVx0ICogaW5pdGlhbGl6ZSBhIHN0cnVjdCByZXNvdXJjZSBmcm9tIHNjcmF0Y2ggKG9ubHkgdGhlIHN0YXJ0XG4tLVxuZnMvZnVzZS92aXJ0aW9fZnMuYy0xMTI2LVxuZnMvZnVzZS92aXJ0aW9fZnMuYzoxMTI3Olx0ZnMtXHUwMDNld2luZG93X2thZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhcdTAwMjZ2ZGV2LVx1MDAzZWRldiwgcGdtYXApO1xuZnMvZnVzZS92aXJ0aW9fZnMuYy0xMTI4LVx0aWYgKElTX0VSUihmcy1cdTAwM2V3aW5kb3dfa2FkZHIpKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD03Nz1zdHJ1Y3QgZGV2X3BhZ2VtYXBfb3BzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTE1LSAqIEBhbHRtYXA6IHByZS1hbGxvY2F0ZWQvcmVzZXJ2ZWQgbWVtb3J5IGZvciB2bWVtbWFwIGFsbG9jYXRpb25zXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MTE2OiAqIEByZWY6IHJlZmVyZW5jZSBjb3VudCB0aGF0IHBpbnMgdGhlIGRldm1fbWVtcmVtYXBfcGFnZXMoKSBtYXBwaW5nXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTE3LSAqIEBkb25lOiBjb21wbGV0aW9uIGZvciBAcmVmXG4tLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTIzMD12b2lkIG1lbXVubWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApO1xuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjIzMTp2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCk7XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjMyLXZvaWQgZGV2bV9tZW11bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0yNDc9c3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3ByaXZhdGVfc3BsaXRfY2Ioc3RydWN0IGZvbGlvICpvcmlnaW5hbF9mb2xpbyxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjY0LSNlbHNlXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjY1OnN0YXRpYyBpbmxpbmUgdm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjY2LVx0XHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNjgtXHQvKlxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjI2OTpcdCAqIEZhaWwgYXR0ZW1wdHMgdG8gY2FsbCBkZXZtX21lbXJlbWFwX3BhZ2VzKCkgd2l0aG91dFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI3MC1cdCAqIFpPTkVfREVWSUNFIHN1cHBvcnQgZW5hYmxlZCwgdGhpcyByZXF1aXJlcyBjYWxsZXJzIHRvIGZhbGxcbi0tXG5tbS9tZW1yZW1hcC5jPTEzMD1FWFBPUlRfU1lNQk9MX0dQTChtZW11bm1hcF9wYWdlcyk7XG5tbS9tZW1yZW1hcC5jLTEzMS1cbm1tL21lbXJlbWFwLmM6MTMyOnN0YXRpYyB2b2lkIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSh2b2lkICpkYXRhKVxubW0vbWVtcmVtYXAuYy0xMzMte1xuLS1cbm1tL21lbXJlbWFwLmM9MTQ0PXN0YXRpYyBpbnQgcGFnZW1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zLFxuLS1cbm1tL21lbXJlbWFwLmMtMjYxLS8qXG5tbS9tZW1yZW1hcC5jOjI2MjogKiBOb3QgZGV2aWNlIG1hbmFnZWQgdmVyc2lvbiBvZiBkZXZtX21lbXJlbWFwX3BhZ2VzLCB1bmRvbmUgYnlcbm1tL21lbXJlbWFwLmM6MjYzOiAqIG1lbXVubWFwX3BhZ2VzKCkuICBQbGVhc2UgdXNlIGRldm1fbWVtcmVtYXBfcGFnZXMgaWYgeW91IGhhdmUgYSBzdHJ1Y3Rcbm1tL21lbXJlbWFwLmMtMjY0LSAqIGRldmljZSBhdmFpbGFibGUuXG4tLVxubW0vbWVtcmVtYXAuYz0zNTI9RVhQT1JUX1NZTUJPTF9HUEwobWVtcmVtYXBfcGFnZXMpO1xuLS1cbm1tL21lbXJlbWFwLmMtMzU0LS8qKlxubW0vbWVtcmVtYXAuYzozNTU6ICogZGV2bV9tZW1yZW1hcF9wYWdlcyAtIHJlbWFwIGFuZCBwcm92aWRlIG1lbW1hcCBiYWNraW5nIGZvciB0aGUgZ2l2ZW4gcmVzb3VyY2Vcbm1tL21lbXJlbWFwLmMtMzU2LSAqIEBkZXY6IGhvc3RpbmcgZGV2aWNlIGZvciBAcmVzXG4tLVxubW0vbWVtcmVtYXAuYy0zNjctICogICAgJiMzOTtsaXZlJiMzOTsgb24gZW50cnkgYW5kIHdpbGwgYmUga2lsbGVkIGFuZCByZWFwZWQgYXRcbm1tL21lbXJlbWFwLmM6MzY4OiAqICAgIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSgpIHRpbWUsIG9yIGlmIHRoaXMgcm91dGluZSBmYWlscy5cbm1tL21lbXJlbWFwLmMtMzY5LSAqXG4tLVxubW0vbWVtcmVtYXAuYy0zNzMtICovXG5tbS9tZW1yZW1hcC5jOjM3NDp2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbm1tL21lbXJlbWFwLmMtMzc1LXtcbi0tXG5tbS9tZW1yZW1hcC5jLTM4Mi1cbm1tL21lbXJlbWFwLmM6MzgzOlx0ZXJyb3IgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UsXG5tbS9tZW1yZW1hcC5jLTM4NC1cdFx0XHRwZ21hcCk7XG4tLVxubW0vbWVtcmVtYXAuYy0zODgtfVxubW0vbWVtcmVtYXAuYzozODk6RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9tZW1yZW1hcF9wYWdlcyk7XG5tbS9tZW1yZW1hcC5jLTM5MC1cbm1tL21lbXJlbWFwLmM9MzkxPXZvaWQgZGV2bV9tZW11bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG5tbS9tZW1yZW1hcC5jLTM5Mi17XG5tbS9tZW1yZW1hcC5jOjM5MzpcdGRldm1fcmVsZWFzZV9hY3Rpb24oZGV2LCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UsIHBnbWFwKTtcbm1tL21lbXJlbWFwLmMtMzk0LX1cbi0tXG50b29scy90ZXN0aW5nL252ZGltbS9LYnVpbGQ9MTM9bGRmbGFncy15ICYjNDM7PSAtLXdyYXA9X19yZWxlYXNlX3JlZ2lvblxudG9vbHMvdGVzdGluZy9udmRpbW0vS2J1aWxkOjE0OmxkZmxhZ3MteSAmIzQzOz0gLS13cmFwPWRldm1fbWVtcmVtYXBfcGFnZXNcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL0tidWlsZC0xNS1sZGZsYWdzLXkgJiM0Mzs9IC0td3JhcD1pbnNlcnRfcmVzb3VyY2Vcbi0tXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM9MTA4PXN0YXRpYyB2b2lkIGRldl9wYWdlbWFwX3BlcmNwdV9yZWxlYXNlKHN0cnVjdCBwZXJjcHVfcmVmICpyZWYpXG4tLVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTExNC1cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYzoxMTU6dm9pZCAqX193cmFwX2Rldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTExNi17XG4tLVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTEyMS1cdGlmICghbmZpdF9yZXMpXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM6MTIyOlx0XHRyZXR1cm4gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBnbWFwKTtcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMjMtXG4tLVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTEzNC19XG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM6MTM1OkVYUE9SVF9TWU1CT0xfR1BMKF9fd3JhcF9kZXZtX21lbXJlbWFwX3BhZ2VzKTtcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMzYtXG4tLVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0X3Rlc3QuaD0yMTI9dm9pZCAqX193cmFwX2Rldm1fbWVtcmVtYXAoc3RydWN0IGRldmljZSAqZGV2LCByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0X3Rlc3QuaC0yMTMtXHRcdHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKTtcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdF90ZXN0Lmg6MjE0OnZvaWQgKl9fd3JhcF9kZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCk7XG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L25maXRfdGVzdC5oLTIxNS12b2lkICpfX3dyYXBfbWVtcmVtYXAocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3MjkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYGRldm1fbWVtcmVtYXBfcGFnZXNgIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGNhbGwgc2l0ZXMgb2YgYGRldm1fbWVtcmVtYXBfcGFnZXNgLiBJIHNlZSB0aGF0IGBkcml2ZXJzL3BjaS9wMnBkbWEuY2AsIGBkcml2ZXJzL2RheC9kZXZpY2UuY2AsIGBkcml2ZXJzL252ZGltbS9wbWVtLmNgLCBgZnMvZnVzZS92aXJ0aW9fZnMuY2AsIGFuZCBgZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuY2AgYWxsIHVzZSB0aGlzIGZ1bmN0aW9uLiBOb3csIGEga2V5IHF1ZXN0aW9uIGZvciBtZSBpcyB3aGV0aGVyIHN5emthbGxlciBjYW4gcmVhbGlzdGljYWxseSB0cmlnZ2VyIGBkZXZtX21lbXJlbWFwX3BhZ2VzYC4gVGhlIGFuc3dlciBzZWVtcyB0byBiZSB5ZXMg4oCTIGNyZWF0aW5nIGEgbG9vcCBkZXZpY2UsIHBsYXlpbmcgd2l0aCBwbWVtL2RheCBpZiBlbmFibGVkLCB2aXJ0aW9fZnMsIG9yIHAycGRtYSBhcmUgcG90ZW50aWFsIGF2ZW51ZXMuCgpOb3csIHRoaXMgcGF0Y2ggbW9kaWZpZXMgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCwgd2hpY2ggaXMgY2FsbGVkIHdpdGhpbiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgSSBuZWVkIHRvIGV4cGxvcmUgdGhpcyByZWxhdGlvbnNoaXAgZnVydGhlci4gSSByZWFsaXplIHRoYXQgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCBpcyBvbmx5IGFjdHVhbGx5IHJlYWNoZWQgZnJvbSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlmIGBwZ21hcC0mZ3Q7dm1lbW1hcF9zaGlmdGAgaXMgc2V0LiBTbywgdGhpcyBzZXRzIHVwIGEgY29uZGl0aW9uYWwgcGF0aC4KClRoZXJlZm9yZSwgdGhlIG5leHQgcXVlc3Rpb24gaXMsIGlzIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgcmVhY2hhYmxlPyBJdCBzZWVtcyB0aGUgY3J1Y2lhbCBmYWN0b3IgaGVyZSBpcyB0aGUgYHZtZW1tYXBfc2hpZnRgIHZhcmlhYmxlLiBJZiBpdCYjMzk7cyBzZXQsIHRoZW4sIHllcywgaXQgaXMuCgpTbywgSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgdG8gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZSBgdm1lbW1hcF9zaGlmdGAgaXMgc2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW1hcF9pbml0X2NvbXBvdW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21tX2luaXQuYz0xMTE1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjb21wb3VuZF9ucl9wYWdlcyh1bnNpZ25lZCBsb25nIHBmbixcbi0tXG5tbS9tbV9pbml0LmMtMTEzMC1cbm1tL21tX2luaXQuYzoxMTMxOnN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxubW0vbW1faW5pdC5jLTExMzItXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBoZWFkX3Bmbixcbi0tXG5tbS9tbV9pbml0LmM9MTE3Mj12b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuLS1cbm1tL21tX2luaXQuYy0xMjIzLVxubW0vbW1faW5pdC5jOjEyMjQ6XHRcdG1lbW1hcF9pbml0X2NvbXBvdW5kKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXAsXG5tbS9tbV9pbml0LmMtMTIyNS1cdFx0XHRcdCAgICAgY29tcG91bmRfbnJfcGFnZXMocGZuLCBhbHRtYXAsIHBnbWFwKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NzkKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBLZXJuZWwgTWVtb3J5IEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgbWVtY3B5X25vbnRlbXBvcmFsYCBhbmQgaW50ZWdyYXRlcyBpdCBpbnRvIGB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZWAuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBhbiBvcHRpbWl6YXRpb24gZm9yIGluaXRpYWxpemluZyBgc3RydWN0IHBhZ2VgIHNwZWNpZmljYWxseSBmb3IgWk9ORV9ERVZJQ0UgbWVtb3J5LiBJdOKAmXMgZGVmaW5pdGVseSBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5LCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluaywgJiMzNDtXb3J0aCBmdXp6aW5nPyYjMzQ7IEFic29sdXRlbHksIGl0JiMzOTtzIHBhcnQgb2YgdGhlIGtlcm5lbCYjMzk7cyBmdW5jdGlvbmFsIGNvcmUuCgpMZXTigJlzIHplcm8gaW4gb24gc29tZSBrZXkgc3ltYm9scy4gSSYjMzk7bSB0aGlua2luZyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFuZCBgbWVtbWFwX2luaXRfY29tcG91bmRgLiBOb3csIHRoZXNlIGFyZSBjYWxsZWQgZHVyaW5nIGRldmljZSBwcm9iZSDigJMgdGhpbmsgUGVyc2lzdGVudCBNZW1vcnksIERpcmVjdCBBY2Nlc3MgKERBWCksIGFuZCBwb3RlbnRpYWxseSBwZWVyLXRvLXBlZXIgRE1BLiBBcmUgdGhleSAqaG90KiBwYXRocywgbWVhbmluZyBoZWF2aWx5IHVzZWQgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24/IE5vLCB0aGV5JiMzOTtyZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMsIHNvIHRoZXkgYXJlIG5vdCBob3QuIEJ1dCwgYXJlIHRoZXkgKnJlYWNoYWJsZSo/IFllcywgZGVmaW5pdGVseS4gRXZlcnkgdGltZSBhIGRldmljZSB1dGlsaXppbmcgdGhlc2UgbWVtb3J5IHR5cGVzIGlzIHByb2JlZCwgb3IgbWVtb3J5IGlzIGhvdHBsdWdnZWQsIHRoZXNlIGZ1bmN0aW9ucyBjb21lIGludG8gcGxheS4KClRvIGFjdHVhbGx5IGdldCB0byB0aGlzIGNvZGUsIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kgaXMgYENPTkZJR19aT05FX0RFVklDRWAuIFRpbWUgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgQ09ORklHX1pPTkVfREVWSUNFYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpPTkVfREVWSUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTIzMT1jb25maWcgWk9ORV9ETUEzMlxuLS1cbm1tL0tjb25maWctMTIzNS1cbm1tL0tjb25maWc6MTIzNjpjb25maWcgWk9ORV9ERVZJQ0Vcbm1tL0tjb25maWctMTIzNy1cdGJvb2wgXCYjMzQ7RGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzEzOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIFpPTkVfREVWSUNFIGluIG1tL0tjb25maWcqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIHN0cmFpZ2h0IGluLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgYFpPTkVfREVWSUNFYCBpcyBjb25maWd1cmVkLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIGRpcmVjdGx5IHRvIGBtbS9LY29uZmlnYC4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgcGxhY2UgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBzeXN0ZW0sIGFuZCB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpb24gYW5kIGFueSBhY2NvbXBhbnlpbmcgZGVwZW5kZW5jaWVzIG9yIGRlZmF1bHQgdmFsdWVzIGZvciBhIG1lbW9yeSB6b25lIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb24gc3lzdGVtIGJlaGF2aW9yLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBmaWxlIGFuZCBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMzYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIzNjpcdGNvbmZpZyBaT05FX0RFVklDRVxuMTIzNzpcdFx0Ym9vbCBcJiMzNDtEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XCYjMzQ7XG4xMjM4Olx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHXG4xMjM5Olx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcbjEyNDA6XHRcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcbjEyNDE6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbjEyNDI6XHRcbjEyNDM6XHRcdGhlbHBcbjEyNDQ6XHRcdCAgRGV2aWNlIG1lbW9yeSBob3RwbHVnIHN1cHBvcnQgYWxsb3dzIGZvciBlc3RhYmxpc2hpbmcgcG1lbSxcbjEyNDU6XHRcdCAgb3Igb3RoZXIgZGV2aWNlIGRyaXZlciBkaXNjb3ZlcmVkIG1lbW9yeSByZWdpb25zLCBpbiB0aGVcbjEyNDY6XHRcdCAgbWVtbWFwLiBUaGlzIGFsbG93cyBwZm5fdG9fcGFnZSgpIGxvb2t1cHMgb2Ygb3RoZXJ3aXNlXG4xMjQ3Olx0XHQgIFwmIzM0O2RldmljZS1waHlzaWNhbFwmIzM0OyBhZGRyZXNzZXMgd2hpY2ggaXMgbmVlZGVkIGZvciBEQVgsIFBDSV9QMlBETUEsIGFuZFxuMTI0ODpcdFx0ICBERVZJQ0VfUFJJVkFURSBmZWF0dXJlcyBhbW9uZyBvdGhlcnMuXG4xMjQ5Olx0XG4xMjUwOlx0XHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgcmVkdWNlIHRoZSBlbnRyb3B5IG9mIHg4NiBLQVNMUiBtZW1vcnlcbjEyNTE6XHRcdCAgcmVnaW9ucy4gRm9yIGV4YW1wbGUgLSBvbiBhIDQ2IGJpdCBzeXN0ZW0sIHRoZSBlbnRyb3B5IGdvZXMgZG93blxuMTI1MjpcdFx0ICBmcm9tIDE2IGJpdHMgdG8gMTUgYml0cy4gVGhlIGFjdHVhbCByZWR1Y3Rpb24gaW4gZW50cm9weSBkZXBlbmRzXG4xMjUzOlx0XHQgIG9uIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMsIG9uIHByb2Nlc3NvciBmZWF0dXJlcywga2VybmVsIGNvbmZpZ1xuMTI1NDpcdFx0ICAoNSBsZXZlbCBwYWdlIHRhYmxlKSBhbmQgcGh5c2ljYWwgbWVtb3J5IHByZXNlbnQgb24gdGhlIHN5c3RlbS5cbjEyNTU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2OTgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBBbmFseXNpcyBvZiBaT05FX0RFVklDRSBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYFpPTkVfREVWSUNFYCBhbmQgd2hhdCBpdCBuZWVkcyB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIEl0IGxvb2tzIGxpa2UgYFpPTkVfREVWSUNFYCBoYXMgYSBwcmV0dHkgY2xlYXIgZGVwZW5kZW5jeSB0cmVlIOKAkyBpdCYjMzk7cyBmdW5kYW1lbnRhbGx5IGxpbmtlZCB0byBgTUVNT1JZX0hPVFBMVUdgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGFuZCBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBNYWtlcyBzZW5zZSwgY29uc2lkZXJpbmcgaXQmIzM5O3MgZGVhbGluZyB3aXRoIG1lbW9yeSByZWdpb25zIHRoYXQgYXJlIGFkZGVkIGFuZCByZW1vdmVkIGR5bmFtaWNhbGx5LiBUaGVyZWZvcmUsIEkgbmVlZCB0byBtYWtlIHN1cmUgYFpPTkVfREVWSUNFYCBpcyBkZWZpbml0ZWx5IGVuYWJsZWQgaW4gbXkgY29uZmlndXJhdGlvbi4KCk5vdywgdGhlIHRyaWNrIGlzIGZpZ3VyaW5nIG91dCAqaG93KiB0byBhY3R1YWxseSB0cmlnZ2VyIHRoaXMgZnVuY3Rpb25hbGl0eS4gSXQgc2VlbXMgbGlrZSB3ZSYjMzk7bGwgbmVlZCBhIGRldmljZSBkcml2ZXIgdGhhdCYjMzk7cyBzcGVjaWZpY2FsbHkgd3JpdHRlbiB0byB1dGlsaXplIGBkZXZtX21lbXJlbWFwX3BhZ2VzYC4gVGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLgoKQmV5b25kIHRoZSBkcml2ZXIsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHdpZGVyIGVjb3N5c3RlbSB0aGF0IHdvdWxkIHN1cHBvcnQgdGhpcy4gVGhlIHdheSB0byBkbyB0aGF0IGxvb2tzIHRvIGJlIHRocm91Z2g6IGBDT05GSUdfUENJX1AyUERNQWAgb3IgYENPTkZJR19EQVhgIG9yIGBDT05GSUdfTlZESU1NX0RBWGAgb3IgYENPTkZJR19ERVZfREFYYCBvciBgQ09ORklHX0ZTX0RBWGAuIEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBlYWNoIG9mIHRoZXNlIG9wdGlvbnMgZG9lcywgaW4gb3JkZXIgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuCgpJIHRoaW5rIGEgZ29vZCBzdGFydGluZyBwb2ludCBpcyBwcm9iYWJseSBgQ09ORklHX1BDSV9QMlBETUFgLiBJIHdpbGwgc3RhcnQgYnkgbG9va2luZyBpbnRvIHRoYXQgb25lIGZpcnN0LCB0byBzZWUgd2hlcmUgaXQgbGVhZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQ0lfUDJQRE1BJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGNpL0tjb25maWc9MTk3PWNvbmZpZyBQQ0lFX1RQSFxuLS1cbmRyaXZlcnMvcGNpL0tjb25maWctMjA1LVxuZHJpdmVycy9wY2kvS2NvbmZpZzoyMDY6Y29uZmlnIFBDSV9QMlBETUFcbmRyaXZlcnMvcGNpL0tjb25maWctMjA3LVx0Ym9vbCBcJiMzNDtQQ0kgcGVlci10by1wZWVyIHRyYW5zZmVyIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyNDAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKlBDSV9QMlBETUEgQ29uZmlndXJhdGlvbiBJbnNwZWN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBQQ0kgUGVlci10by1QZWVyIERNQSBzdXBwb3J0LiBUaGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtIGlzIGEgYmVhc3QsIGJ1dCB0aGUgdXN1YWwgc3RhcnRpbmcgcG9pbnQgZm9yIFBDSS1yZWxhdGVkIG9wdGlvbnMgaXMgdGhlIGBkcml2ZXJzL3BjaS9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIGhlYWQgb3ZlciB0aGVyZSB0byBzZWUgd2hhdCYjMzk7cyBkZWZpbmVkIGZvciBgUENJX1AyUERNQWAuIEhvcGVmdWxseSwgdGhlIGRlc2NyaXB0aW9uIGluIGBLY29uZmlnYCBpcyBjbGVhciBlbm91Z2ggdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdC4gSSBleHBlY3QgaXQgd2lsbCByZWZlcmVuY2Ugc29tZSB1bmRlcmx5aW5nIERNQSBjb250cm9sbGVyIG9wdGlvbnMgb3IgcGVyaGFwcyBzcGVjaWZpYyBoYXJkd2FyZSByZXF1aXJlbWVudHMuIFRoZW4gSSYjMzk7bGwgY29ycmVsYXRlIGl0IHdpdGggdGhlIGNvZGUgdG8gZ2V0IGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGFjdCB0byB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvcGNpL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwNjpcdGNvbmZpZyBQQ0lfUDJQRE1BXG4gMjA3Olx0XHRib29sIFwmIzM0O1BDSSBwZWVyLXRvLXBlZXIgdHJhbnNmZXIgc3VwcG9ydFwmIzM0O1xuIDIwODpcdFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxuIDIwOTpcdFx0I1xuIDIxMDpcdFx0IyBUaGUgbmVlZCBmb3IgdGhlIHNjYXR0ZXJsaXN0IERNQSBidXMgYWRkcmVzcyBmbGFnIG1lYW5zIFBDSSBQMlBETUFcbiAyMTE6XHRcdCMgcmVxdWlyZXMgNjRiaXRcbiAyMTI6XHRcdCNcbiAyMTM6XHRcdGRlcGVuZHMgb24gNjRCSVRcbiAyMTQ6XHRcdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxuIDIxNTpcdFx0c2VsZWN0IE5FRURfU0dfRE1BX0ZMQUdTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjA4CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipDb25zaWRlcmluZyBEZXBlbmRlbmNpZXMgZm9yIFBDSV9QMlBETUEqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBQQ0lfUDJQRE1BYCwgYW5kIGltbWVkaWF0ZWx5LCBteSBtaW5kIGp1bXBzIHRvIGl0cyBkZXBlbmRlbmNpZXMuIEkga25vdyBpdCBsZWFucyBoZWF2aWx5IG9uIGBaT05FX0RFVklDRWAg4oCTIHRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZSBmb3IgZGlyZWN0IGFjY2Vzcy4gQW5kLCBuYXR1cmFsbHksIGA2NEJJVGAgaXMgZXNzZW50aWFsOyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IGxhcmdlIGFkZHJlc3Mgc3BhY2VzIGhlcmUuIEJ1dC4uLiB3aGF0IGFib3V0IHRoZSBicm9hZGVyIGNvbnRleHQ/IElzIGl0IGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBldmVyeXRoaW5nIHdpdGhpbiBgQ09ORklHX0RBWGA/IElzIGl0IGp1c3QgYSBkZXBlbmRlbmN5IG9yIGlzIHRoZXJlIGFueSBpbnRlcmFjdGlvbj8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBjb25zaWRlcmF0aW9ucyB0aGF0IGFyaXNlIGF0IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRob3NlIHR3byBmZWF0dXJlcz8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIGEgYml0IG1vcmUgdG8gYmUgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBjcml0aWNhbCBjb25mbGljdHMgb3IgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBQZXJoYXBzIHRoZXJlIGFyZSBzb21lIGludGVyYWN0aW9uIHNjZW5hcmlvcywgbGlrZSB3aGF0IGhhcHBlbiB3aGVuIERNQSBoYXBwZW5zIGFnYWluc3QgREFYLWVuYWJsZWQgc3RvcmFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RheC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2RheC9LY29uZmlnOjI6bWVudWNvbmZpZyBEQVhcbmRyaXZlcnMvZGF4L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0RBWDogZGlyZWN0IGFjY2VzcyB0byBkaWZmZXJlbnRpYXRlZCBtZW1vcnlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5NDEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqS2NvbmZpZyBEaXZlIGZvciBEQVggRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIERBWCBkcml2ZXIuIFRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gaGVhZCBkaXJlY3RseSB0byB0aGUgYEtjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGNlbnRyYWwgaHViIGZvciBkZWZpbmluZyBhbmQgZG9jdW1lbnRpbmcgdGhlc2UgdGhpbmdzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBgZHJpdmVycy9kYXgvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgZGVzY3JpcHRpb25zIHRoYXQgZ292ZXJuIGhvdyB0aGUgREFYIGRyaXZlciBiZWhhdmVzIGFuZCBpcyBjb25maWd1cmVkIGF0IGNvbXBpbGUgdGltZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBrbm9icyBJIGhhdmUgYXZhaWxhYmxlIHRvIHR3ZWFrIHRoaXMgZHJpdmVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9kYXgvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMjpcdG1lbnVjb25maWcgREFYXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtEQVg6IGRpcmVjdCBhY2Nlc3MgdG8gZGlmZmVyZW50aWF0ZWQgbWVtb3J5XCYjMzQ7XG4gICA0Olx0XHRkZWZhdWx0IG0gaWYgTlZESU1NX0RBWFxuICAgNTpcdFxuICAgNjpcdGlmIERBWFxuICAgNzpcdFxuICAgODpcdGNvbmZpZyBERVZfREFYXG4gICA5Olx0XHR0cmlzdGF0ZSBcJiMzNDtEZXZpY2UgREFYOiBkaXJlY3QgYWNjZXNzIG1hcHBpbmcgZGV2aWNlXCYjMzQ7XG4gIDEwOlx0XHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gIDExOlx0XHRoZWxwXG4gIDEyOlx0XHQgIFN1cHBvcnQgcmF3IGFjY2VzcyB0byBkaWZmZXJlbnRpYXRlZCAocGVyc2lzdGVuY2UsIGJhbmR3aWR0aCxcbiAgMTM6XHRcdCAgbGF0ZW5jeS4uLikgbWVtb3J5IHZpYSBhbiBtbWFwKDIpIGNhcGFibGUgY2hhcmFjdGVyXG4gIDE0Olx0XHQgIGRldmljZS4gIFBsYXRmb3JtIGZpcm13YXJlIG9yIGEgZGV2aWNlIGRyaXZlciBtYXkgaWRlbnRpZnkgYVxuICAxNTpcdFx0ICBwbGF0Zm9ybSBtZW1vcnkgcmVzb3VyY2UgdGhhdCBpcyBkaWZmZXJlbnRpYXRlZCBmcm9tIHRoZVxuICAxNjpcdFx0ICBiYXNlbGluZSBtZW1vcnkgcG9vbC4gIE1hcHBpbmdzIG9mIGEgL2Rldi9kYXhYLlkgZGV2aWNlIGltcG9zZVxuICAxNzpcdFx0ICByZXN0cmljdGlvbnMgdGhhdCBtYWtlIHRoZSBtYXBwaW5nIGJlaGF2aW9yIGRldGVybWluaXN0aWMuXG4gIDE4Olx0XG4gIDE5Olx0Y29uZmlnIERFVl9EQVhfUE1FTVxuICAyMDpcdFx0dHJpc3RhdGUgXCYjMzQ7UE1FTSBEQVg6IGRpcmVjdCBhY2Nlc3MgdG8gcGVyc2lzdGVudCBtZW1vcnlcJiMzNDtcbiAgMjE6XHRcdGRlcGVuZHMgb24gTElCTlZESU1NIFx1MDAyNlx1MDAyNiBOVkRJTU1fREFYIFx1MDAyNlx1MDAyNiBERVZfREFYXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDMzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBsaWtlIHlvdXJzZWxmOgoKKipEQVggQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBEaXJlY3QgQWNjZXNzIChEQVgpLiBgREVWX0RBWGAsIGRlZmluaXRlbHkgYSBzb2xpZCBhcHByb2FjaCwgcHJvdmVuIGFuZCB3ZWxsLXVuZGVyc3Rvb2QuIEl0JiMzOTtzIHVzdWFsbHkgdGhlIGZpcnN0IHRoaW5nIHRoYXQgY29tZXMgdG8gbWluZCB3aGVuIHlvdSYjMzk7cmUgb3B0aW1pemluZyBmb3IgZGlyZWN0IGJsb2NrLWRldmljZSBhY2Nlc3MuIEJ1dC4uLmFuZCBoZXJlJiMzOTtzIHdoZXJlIG15IG1pbmQgc3RhcnRzIHRvIHdhbmRlci4uLndoYXQgYWJvdXQgYENPTkZJR19GU19EQVhgPyBUaGF0IG9wdGlvbiByZWFsbHkgbWFrZXMgeW91IGNvbnNpZGVyIHRoZSBmaWxlc3lzdGVtLWxldmVsIERBWCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBnaXZlcyBtb3JlIGZpbmUgZ3JhaW5lZCBjb250cm9sLgoKSSYjMzk7bSBldmFsdWF0aW5nIHdoaWNoIGdpdmVzIG1lIHRoZSBiZXN0IHRyYWRlLW9mZiBiZXR3ZWVuIGltcGxlbWVudGF0aW9uIGNvbXBsZXhpdHksIHBlcmZvcm1hbmNlLCBhbmQgZmxleGliaWxpdHkgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpYyBhcHBsaWNhdGlvbiBzY2VuYXJpby4gSXQmIzM5O3MgYSBrZXkgY29uc2lkZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZTX0RBWCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTU2PWVuZGlmICMgQkxPQ0tcbmZzL0tjb25maWctNTctXG5mcy9LY29uZmlnOjU4OmNvbmZpZyBGU19EQVhcbmZzL0tjb25maWctNTktXHRib29sIFwmIzM0O0ZpbGUgc3lzdGVtIGJhc2VkIERpcmVjdCBBY2Nlc3MgKERBWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL0tjb25maWctODktXG5mcy9LY29uZmlnOjkwOmNvbmZpZyBGU19EQVhfUE1EXG5mcy9LY29uZmlnLTkxLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTc0OQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgRlNfREFYYCBLY29uZmlnIE9wdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBjb25maWd1cmVkIGZvciBEaXJlY3QgQWNjZXNzIChEQVgpIGZpbGUgc3lzdGVtcy4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyOiBgZnMvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgYWxsIHRoZSBmaWxlIHN5c3RlbS1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gSSB3YW50IHRvIGNoZWNrIGZvciB0aGUgcHJlc2VuY2UgYW5kIGRldGFpbHMgb2YgYEZTX0RBWGAuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgaXRzIGRlZmluaXRpb24gdGhlcmUuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCB0aGlzIGZpbGUgd2lsbCBjb250YWluIHRoZSBuZWNlc3Nhcnkgc2V0dGluZ3MgY29udHJvbGxpbmcgaG93IERBWCBzdXBwb3J0IGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYW5kIGFueSBhY2NvbXBhbnlpbmcgZGVwZW5kZW5jaWVzIG9yIGRlZmF1bHQgdmFsdWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1ODpcdGNvbmZpZyBGU19EQVhcbiAgNTk6XHRcdGJvb2wgXCYjMzQ7RmlsZSBzeXN0ZW0gYmFzZWQgRGlyZWN0IEFjY2VzcyAoREFYKSBzdXBwb3J0XCYjMzQ7XG4gIDYwOlx0XHRkZXBlbmRzIG9uIE1NVVxuICA2MTpcdFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxuICA2MjpcdFx0c2VsZWN0IEZTX0lPTUFQXG4gIDYzOlx0XHRzZWxlY3QgREFYXG4gIDY0Olx0XHRoZWxwXG4gIDY1Olx0XHQgIERpcmVjdCBBY2Nlc3MgKERBWCkgY2FuIGJlIHVzZWQgb24gbWVtb3J5LWJhY2tlZCBibG9jayBkZXZpY2VzLlxuICA2NjpcdFx0ICBJZiB0aGUgYmxvY2sgZGV2aWNlIHN1cHBvcnRzIERBWCBhbmQgdGhlIGZpbGVzeXN0ZW0gc3VwcG9ydHMgREFYLFxuICA2NzpcdFx0ICB0aGVuIHlvdSBjYW4gYXZvaWQgdXNpbmcgdGhlIHBhZ2VjYWNoZSB0byBidWZmZXIgSS9Pcy4gIFR1cm5pbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxMTMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBSZXZpZXcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb25maWd1cmF0aW9uIGFuZCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGF0IGZpcnN0IGdsYW5jZS4gSXQgbG9va3MgbGlrZSBgRlNfREFYYCBpcyBidWlsdCBvbiB0b3Agb2YgYFpPTkVfREVWSUNFYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gVG8gZW5hYmxlIGV2ZXJ5dGhpbmcgY29ycmVjdGx5LCBJIG5lZWQgdG8gaW5jbHVkZSBgWk9ORV9ERVZJQ0VgLCBgUENJX1AyUERNQWAsIGBEQVhgLCBgREVWX0RBWGAsIGFuZCBgRlNfREFYYCBpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBUaGF0IGNvdmVycyB0aGUgZGVwZW5kZW5jaWVzIG5pY2VseS4KCkJ1dCB0aGVuIHRoZXJlJiMzOTtzIHRoaXMgY2hhbmdlIHRvIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAuIEFoLCBgbWVtY3B5X25vbnRlbXBvcmFsYCB1c2luZyBgbW92bnRpYCBpbnN0cnVjdGlvbnMuIFRoaXMgaXMgeDg2LXNwZWNpZmljLCB3aGljaCBtZWFucyBJIG5lZWQgdG8gYmUgY2FyZWZ1bC4gSSBrbm93IEkgbmVlZCB0byBsb29rIGZvciBhbnkgZXhpc3RpbmcgY29uZmlnIG9wdGlvbnMgYXJvdW5kIGBtZW1jcHlfbm9udGVtcG9yYWxgLCB0byBlbnN1cmUgdGhpcyBpcyBoYW5kbGVkIGNvcnJlY3RseS4gTGV0JiMzOTtzIHNlZS4uLiBpdCYjMzk7cyBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRWAuIE9rYXksIHNvIHRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHRha2UgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25zdHJhaW50IGludG8gY29uc2lkZXJhdGlvbi4gSSBuZWVkIHRvIHJldmlldyBhbmQgZW5zdXJlIHRoYXQgdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGlzIGFwcHJvcHJpYXRlbHkgaGFuZGxlZCB0byBwcmV2ZW50IGFueSBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL0tjb25maWc9NTQyPWNvbmZpZyBVQUNDRVNTX01FTUNQWVxuLS1cbmxpYi9LY29uZmlnLTU0NC1cbmxpYi9LY29uZmlnOjU0NTpjb25maWcgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG5saWIvS2NvbmZpZy01NDYtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjEwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgYEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRWAgaW4gdGhlIEtjb25maWcqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBsaWIvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9uLCBvciBhdCBsZWFzdCB0aGUgcHJlc2VuY2UsIG9mIGBBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVgLiBUaGlzIGlzIHRoZSBrZXkgcGllY2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQuIEkmIzM5O20gYXNzdW1pbmcsIGdpdmVuIHRoZSBuYW1pbmcsIHRoYXQgaXQmIzM5O3MgcmVsYXRlZCB0byBjYWNoZSBjb2hlcmVuY3kgYW5kIGRhdGEgYWNjZXNzLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvbnRleHQgb2YgdXNlci1zcGFjZSBpbnRlcmFjdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgc29tZXRoaW5nIGJlaW5nIGRlZmluZWQgYXQgdGhlIGFyY2hpdGVjdHVyZSBsZXZlbC4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcCBmb3IgZmlndXJpbmcgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIHJlbGF0aW5nIHRvIHRoaXMgZmVhdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IGl0JiMzOTtzIGRlZmluZWQsIHVuZGVyIHdoYXQgY29uZGl0aW9ucyBpdCYjMzk7cyBlbmFibGVkLCBhbmQgd2hpY2ggYXJjaGl0ZWN0dXJlcyBvciBib2FyZHMgYXJlIGFmZmVjdGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgaGFzIHRvIHNheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTQ1Olx0Y29uZmlnIEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxuIDU0NjpcdFx0Ym9vbFxuIDU0NzpcdFxuIDU0ODpcdCMgYXJjaCBoYXMgYSBjb25jZXB0IG9mIGEgcmVjb3ZlcmFibGUgc3luY2hyb25vdXMgZXhjZXB0aW9uIGR1ZSB0byBhXG4gNTQ5Olx0IyBtZW1vcnktcmVhZCBlcnJvciBsaWtlIHg4NiBtYWNoaW5lLWNoZWNrIG9yIEFSTSBkYXRhLWFib3J0LCBhbmRcbiA1NTA6XHQjIGltcGxlbWVudHMgY29weV9tY190b197dXNlcixrZXJuZWx9IHRvIGFib3J0IGFuZCByZXBvcnRcbiA1NTE6XHQjICYjMzk7Ynl0ZXMtdHJhbnNmZXJyZWQmIzM5OyBpZiB0aGF0IGV4Y2VwdGlvbiBmaXJlcyB3aGVuIGFjY2Vzc2luZyB0aGUgc291cmNlXG4gNTUyOlx0IyBidWZmZXIuXG4gNTUzOlx0Y29uZmlnIEFSQ0hfSEFTX0NPUFlfTUNcbiA1NTQ6XHRcdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwNjAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqQXJjaGl0ZWN0dXJlIFNlbGVjdGlvbiBBbmFseXNpcyoqCgpPa2F5LCBzbyBzb21ldGhpbmcgaGFzIGJlZW4gc2VsZWN0ZWQsIGFuZCB0aGUga2V5IGRyaXZlciBzZWVtcyB0byBiZSAmIzM0O2FyY2hpdGVjdHVyZXMuJiMzNDsgTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGVsdmUgaW50byB0aGUgc2VsZWN0aW9uIHByb2Nlc3MuIFdobyBleGFjdGx5IG1hZGUgdGhpcyBjaG9pY2U/IFdoYXQgYXJjaGl0ZWN0cyBvciBhcmNoaXRlY3R1cmFsIHRlYW1zIHdlcmUgaW52b2x2ZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZWNpc2lvbi1tYWtlcnMuIE15IGFuYWx5c2lzIHdpbGwgYmVnaW4gYnkgaWRlbnRpZnlpbmcgdGhlIHNwZWNpZmljIGFyY2hpdGVjdHVyZXMgb3IgYXJjaGl0ZWN0dXJhbCBzdHlsZXMgdGhhdCBpbmZsdWVuY2VkIHRoaXMgc2VsZWN0aW9uLiBBcmUgd2UgdGFsa2luZyBhYm91dCBzb2Z0d2FyZSBhcmNoaXRlY3R1cmVzLCBzeXN0ZW0gYXJjaGl0ZWN0dXJlcywgbmV0d29yayBhcmNoaXRlY3R1cmVzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVW5kZXJzdGFuZGluZyB0aGUgZG9tYWluIGlzIGNydWNpYWwuIEZyb20gdGhlcmUsIEkmIzM5O2xsIHRyeSB0byBmaW5kIG91dCB3aG8gdGhlIGtleSBwbGF5ZXJzIGluIHRob3NlIGFyY2hpdGVjdHVyYWwgY29udGV4dHMgYXJlLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaW5mb3JtIG15IGludmVzdGlnYXRpb24gaW50byB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGUgZGVjaXNpb24gYW5kIGFueSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIHRoYXQgdGhlIGFyY2hpdGVjdHVyZSBzZWxlY3Rpb24gbWlnaHQgaGF2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMDE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L0tjb25maWc9MTkyMj1jb25maWcgQVJNNjRfUE1FTVxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy0xOTI0LVx0c2VsZWN0IEFSQ0hfSEFTX1BNRU1fQVBJXG5hcmNoL2FybTY0L0tjb25maWc6MTkyNTpcdHNlbGVjdCBBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcbmFyY2gvYXJtNjQvS2NvbmZpZy0xOTI2LVx0aGVscFxuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnPTExOD1jb25maWcgUFBDXG4tLVxuYXJjaC9wb3dlcnBjL0tjb25maWctMTU4LVx0c2VsZWN0IEFSQ0hfSEFTX1RJQ0tfQlJPQURDQVNUXHRcdGlmIEdFTkVSSUNfQ0xPQ0tFVkVOVFNfQlJPQURDQVNUXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzoxNTk6XHRzZWxlY3QgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xNjAtXHRzZWxlY3QgQVJDSF9IQVNfVUJTQU5cbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTU4PWNvbmZpZyBYODZcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTEwMi1cdHNlbGVjdCBBUkNIX0hBU19OT05MRUFGX1BNRF9ZT1VOR1x0aWYgUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDJcbmFyY2gveDg2L0tjb25maWc6MTAzOlx0c2VsZWN0IEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVx0aWYgWDg2XzY0XG5hcmNoL3g4Ni9LY29uZmlnLTEwNC1cdHNlbGVjdCBBUkNIX0hBU19DT1BZX01DXHRcdFx0aWYgWDg2XzY0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjAxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyB0aGlzIGNvZGUgaXMgYmVpbmcgdGFyZ2V0ZWQgc3BlY2lmaWNhbGx5IGZvciBgWDg2XzY0YCBhcmNoaXRlY3R1cmUsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIHNlbGVjdGVkIGxpa2UgdGhhdCBpbmRpY2F0ZXMgYSByZWFsLCBsaXZlIHNjZW5hcmlvLiBUaGUgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgYW5kIHJpcGUgZm9yIGZ1enppbmcuIFdlIGhhdmUgYSBzZXQgb2YgaW50ZXJlc3RpbmcgZm9jdXMgc3ltYm9scyBpZGVudGlmaWVkOiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLCBgbWVtbWFwX2luaXRfY29tcG91bmRgLCBgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVgLCBgem9uZV9kZXZpY2VfdGFpbF9wYWdlX2luaXRgLCBhbmQgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93YC4gVGhlc2Ugc2VlbSBsaWtlIGdvb2QgZW50cnkgcG9pbnRzIHRvIGV4cG9zZSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMuIEhvd2V2ZXIsIGhhbmcgb24uLi4gYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCBpcyBtYXJrZWQgYXMgYHN0YXRpYyBpbmxpbmVgPyBUaGF0IG1lYW5zIGl0JiMzOTtzIHByb2JhYmx5IGV4cGFuZGVkIGF0IHRoZSBjYWxsIHNpdGUsIHdoaWNoIGhhcyBpbXBsaWNhdGlvbnMgZm9yIGhvdyB0aGUgZnV6emVyIHdpbGwgYmVoYXZlIGFuZCBmb3IgY29udHJvbCBmbG93IHRyYWNraW5nLiBHb3R0YSBjaGVjayBgbW0vbW1faW5pdC5jYCB0byBzZWUgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbW1faW5pdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDg4Olx0XHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHRlbXBsYXRlLCBwZm4pO1xuMTA4OTpcdCNpZmRlZiBXQU5UX1BBR0VfVklSVFVBTFxuMTA5MDpcdFx0aWYgKCFpc19oaWdobWVtX2lkeChaT05FX0RFVklDRSkpXG4xMDkxOlx0XHRcdHNldF9wYWdlX2FkZHJlc3ModGVtcGxhdGUsIF9fdmEocGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSk7XG4xMDkyOlx0I2VuZGlmXG4xMDkzOlx0fVxuMTA5NDpcdFxuMTA5NTpcdHN0YXRpYyB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHN0cnVjdCBwYWdlICpwYWdlLFxuMTA5NjpcdFx0XHR1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnRlbXBsYXRlKVxuMTA5NzpcdHtcbjEwOTg6XHRcdC8qXG4xMDk5Olx0XHQgKiAmIzM5O3RlbXBsYXRlJiMzOTsgY2FycmllcyB0aGUgaW52YXJpYW50IHBvcnRpb24gb2YgYSBaT05FX0RFVklDRSBzdHJ1Y3RcbjExMDA6XHRcdCAqIHBhZ2UuIFVwZGF0ZSB0aGUgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gcGxhY2UgYmVmb3JlIGNvcHlpbmcgaXRcbjExMDE6XHRcdCAqIHRvIHRoZSBkZXN0aW5hdGlvbiBwYWdlLlxuMTEwMjpcdFx0ICovXG4xMTAzOlx0XHR6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZSh0ZW1wbGF0ZSwgcGZuKTtcbjExMDQ6XHRcdG1lbWNweV9ub250ZW1wb3JhbChwYWdlLCB0ZW1wbGF0ZSwgc2l6ZW9mKCpwYWdlKSk7XG4xMTA1Olx0fVxuMTEwNjpcdFxuMTEwNzpcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDAxOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4Mjk0CgkJCQkJCQlvdXRwdXQ6IDE3NAoJCQkJCQkJdGhvdWdodHM6IDQyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN5bWJvbCBMYW5kc2NhcGUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBjb2RlLiBJJiMzOTttIHNlZWluZyBhIHBhdHRlcm4gaGVyZSB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkZXZpY2UgaW50ZWdyYXRpb24uIEZpcnN0LCBsb29raW5nIGF0IHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMsIGB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZWAgaXMgZGVjbGFyZWQgc3RhdGljLCBidXQgKm5vdCogaW5saW5lLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gT24gdGhlIG90aGVyIGhhbmQsIGB6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdGAgaXMgc3RhdGljIGlubGluZSwgYW5kIGB6b25lX2RldmljZV9wYWdlX2luaXRfc2xvd2AgaXMgc2ltcGx5IHN0YXRpYy4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gdHJhY2luZyBjYWxscyBhbmQgc3ltYm9sIHZpc2liaWxpdHkuCgpNeSBpbml0aWFsIGZvY3VzIG5lZWRzIHRvIGJlIG9uOgoqICAgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYAoqICAgYG1lbW1hcF9pbml0X2NvbXBvdW5kYAoqICAgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYAoqICAgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93YAoKV2FpdCwgaGFuZyBvbi4gVGhpcyBwYXRjaCBhbHNvIG1vZGlmaWVzIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAuIEl0JiMzOTtzIGFkZGluZyBhIGJ1bmNoIG9mIG5ldyBpbmxpbmUgZnVuY3Rpb25zIC0gYG1vdm50aV84YCwgYG1vdm50aV8xNmAsIGBtb3ZudGlfMzJgLCBgbW92bnRpXzY0YCwgYG1lbWNweV9mbHVzaGNhY2hlYCwgYW5kIGBtZW1jcHlfbm9udGVtcG9yYWxgLiBUaGVzZSBhcmUgKmFsbCogYHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVgLCBzbyB0aGV5IHdvbiYjMzk7dCBoYXZlIHRoZWlyIG93biBleHBvcnRlZCBzeW1ib2xzLiBUaGF0IHJlaW5mb3JjZXMgbXkgb3JpZ2luYWwgbGlzdCBhcyB0aGUga2V5IHN5bWJvbHMgdG8gdHJhY2suCgpOb3csIEkgbmVlZCB0byBjb25maXJtIHRoZSByZWFjaGFiaWxpdHkgb2YgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gTGV0JiMzOTtzIHNlZS4uLiBZZXMsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBwYWdlbWFwX3JhbmdlYCBpbiBgbW0vbWVtcmVtYXAuY2AuIEFuZCBgcGFnZW1hcF9yYW5nZWAgaXMgY2FsbGVkIGZyb20gYGRldm1fbWVtcmVtYXBfcGFnZXNgLiBFeGNlbGxlbnQuIGBkZXZtX21lbXJlbWFwX3BhZ2VzYCBpcyBleHBvcnRlZCwgYW5kIGl0JiMzOTtzIHVzZWQgYnkgdmFyaW91cyBkcml2ZXJzLiBHb29kLCB0aGlzIGlzIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludC4KCkZpbmFsbHksIHJlZ2FyZGluZyBjb25maWd1cmF0aW9uLCBpdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgcmVsYXRlZCB0byB0aGVzZSBvcHRpb25zOiBgWk9ORV9ERVZJQ0VgLCBgUENJX1AyUERNQWAsIGBEQVhgLCBgREVWX0RBWGAsIGFuZCBgRlNfREFYYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgc3lzdGVtIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQuIExldCYjMzk7cyBtYWtlIHN1cmUgYFpPTkVfREVWSUNFYCBkb2VzbiYjMzk7dCBoYXZlIGFueSBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGFkZHJlc3MuIEhtbW0sIHllcywgaXQgZGVwZW5kcyBvbiBgTUVNT1JZX0hPVFBMVUdgLCBhbmQgYE1FTU9SWV9IT1RSRU1PVkVgIGFuZCBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBTbywgdG8gYmUgc2FmZSwgSSYjMzk7bGwgYWRkIGBNRU1PUllfSE9UUExVR2AgYW5kIGBTUEFSU0VNRU1fVk1FTU1BUGAgdG8gdGhlIGNvbmZpZywganVzdCBpbiBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAwMToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7UENJX1AyUERNQSYjMzQ7LAogICAgJiMzNDtEQVgmIzM0OywKICAgICYjMzQ7REVWX0RBWCYjMzQ7LAogICAgJiMzNDtGU19EQVgmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7U1BBUlNFTUVNX1ZNRU1NQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1tYXBfaW5pdF96b25lX2RldmljZSYjMzQ7LAogICAgJiMzNDttZW1tYXBfaW5pdF9jb21wb3VuZCYjMzQ7LAogICAgJiMzNDt6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZSYjMzQ7LAogICAgJiMzNDt6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIFpPTkVfREVWSUNFIHBhZ2VzIGJ5IHVzaW5nIGEgdGVtcGxhdGUgYW5kIG5vbi10ZW1wb3JhbCBtZW1jcHkuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB3aGVuIHByb2JpbmcgZGV2aWNlcyBsaWtlIFBNRU0sIERBWCwgb3IgUENJIFAyUERNQS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7UENJX1AyUERNQSYjMzQ7LAogICAgJiMzNDtEQVgmIzM0OywKICAgICYjMzQ7REVWX0RBWCYjMzQ7LAogICAgJiMzNDtGU19EQVgmIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OywKICAgICYjMzQ7U1BBUlNFTUVNX1ZNRU1NQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1tYXBfaW5pdF96b25lX2RldmljZSYjMzQ7LAogICAgJiMzNDttZW1tYXBfaW5pdF9jb21wb3VuZCYjMzQ7LAogICAgJiMzNDt6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZSYjMzQ7LAogICAgJiMzNDt6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIFpPTkVfREVWSUNFIHBhZ2VzIGJ5IHVzaW5nIGEgdGVtcGxhdGUgYW5kIG5vbi10ZW1wb3JhbCBtZW1jcHkuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB3aGVuIHByb2JpbmcgZGV2aWNlcyBsaWtlIFBNRU0sIERBWCwgb3IgUENJIFAyUERNQS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI2OjQ0LjIxMjE3OTg5OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzczODY5MzIxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiUENJX1AyUERNQVwiLFxuICAgIFwiREFYXCIsXG4gICAgXCJERVZfREFYXCIsXG4gICAgXCJGU19EQVhcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJTUEFSU0VNRU1fVk1FTU1BUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW1hcF9pbml0X3pvbmVfZGV2aWNlXCIsXG4gICAgXCJtZW1tYXBfaW5pdF9jb21wb3VuZFwiLFxuICAgIFwiem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVcIixcbiAgICBcInpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb3B0aW1pemVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBaT05FX0RFVklDRSBwYWdlcyBieSB1c2luZyBhIHRlbXBsYXRlIGFuZCBub24tdGVtcG9yYWwgbWVtY3B5LiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgd2hlbiBwcm9iaW5nIGRldmljZXMgbGlrZSBQTUVNLCBEQVgsIG9yIFBDSSBQMlBETUEuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI2OjQ0LjIxMjE4NjAwOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc5OTM2MTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMWZhMzAwMDdhYmFhMTg3ZjQ4ODIzN2Q3MDkxNTE4MDBjNzJmZjI2MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAyOCAwMToyNjo0MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXFxuaW5kZXggNDYzNTYxNjg2M2Y1M2QuLmJjNmE5ZjM0YjM0NmFmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcXG5AQCAtODIsNyArODIsMzUgQEAgaW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xcbiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxcbiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFIDFcXG4gdm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV84KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZShcXFwibW92bnRpcSAlMSwgJTBcXFwiXFxuK1xcdFxcdCAgICAgOiBcXFwiPW1cXFwiKCoodTY0ICopZHN0KVxcbitcXHRcXHQgICAgIDogXFxcInJcXFwiKCooY29uc3QgdTY0ICopc3JjKVxcbitcXHRcXHQgICAgIDogXFxcIm1lbW9yeVxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzE2KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxcbit7XFxuK1xcdG1vdm50aV84KGRzdCwgc3JjKTtcXG4rXFx0bW92bnRpXzgoZHN0ICsgOCwgc3JjICsgOCk7XFxuK31cXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfMzIodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXFxuK3tcXG4rXFx0bW92bnRpXzE2KGRzdCwgc3JjKTtcXG4rXFx0bW92bnRpXzE2KGRzdCArIDE2LCBzcmMgKyAxNik7XFxuK31cXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfNjQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXFxuK3tcXG4rXFx0bW92bnRpXzMyKGRzdCwgc3JjKTtcXG4rXFx0bW92bnRpXzMyKGRzdCArIDMyLCBzcmMgKyAzMik7XFxuK31cXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZV90IGNudClcXG4ge1xcbiBcXHRpZiAoX19idWlsdGluX2NvbnN0YW50X3AoY250KSkge1xcbiBcXHRcXHRzd2l0Y2ggKGNudCkge1xcbkBAIC05NiwxMCArMTI0LDQ4IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90XFxuIFxcdFxcdFxcdFxcdGFzbSAoXFxcIm1vdm50aXEgJTEsICUwXFxcIiA6IFxcXCI9bVxcXCIoKih1NjQgKilkc3QpIDogXFxcInJcXFwiKCoodTY0ICopc3JjKSk7XFxuIFxcdFxcdFxcdFxcdGFzbSAoXFxcIm1vdm50aXEgJTEsICUwXFxcIiA6IFxcXCI9bVxcXCIoKih1NjQgKikoZHN0ICsgOCkpIDogXFxcInJcXFwiKCoodTY0ICopKHNyYyArIDgpKSk7XFxuIFxcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogVGhlIHJlbGV2YW50IGZpeGVkLXNpemUgY29waWVzIGhlcmUgYXJlIHRoZVxcbitcXHRcXHRcXHQgKiB4ODZfNjQgc3RydWN0IHBhZ2Ugc2l6ZXM6IDY0LCA4MCwgYW5kIDk2IGJ5dGVzLlxcbitcXHRcXHRcXHQgKiBLZWVwIDMyLWJ5dGUgYW5kIDQ4LWJ5dGUgY29waWVzIGlubGluZSBhcyB3ZWxsXFxuK1xcdFxcdFxcdCAqIGluc3RlYWQgb2Ygc2VuZGluZyB0aG9zZSBuZWFyYnkgZml4ZWQtc2l6ZVxcbitcXHRcXHRcXHQgKiBjYXNlcyBiYWNrIHRvIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGNhc2UgMzI6XFxuK1xcdFxcdFxcdFxcdG1vdm50aV8zMihkc3QsIHNyYyk7XFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0Y2FzZSA0ODpcXG4rXFx0XFx0XFx0XFx0bW92bnRpXzMyKGRzdCwgc3JjKTtcXG4rXFx0XFx0XFx0XFx0bW92bnRpXzE2KGRzdCArIDMyLCBzcmMgKyAzMik7XFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0Y2FzZSA2NDpcXG4rXFx0XFx0XFx0XFx0bW92bnRpXzY0KGRzdCwgc3JjKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRjYXNlIDgwOlxcbitcXHRcXHRcXHRcXHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xcbitcXHRcXHRcXHRcXHRtb3ZudGlfMTYoZHN0ICsgNjQsIHNyYyArIDY0KTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRjYXNlIDk2OlxcbitcXHRcXHRcXHRcXHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xcbitcXHRcXHRcXHRcXHRtb3ZudGlfMzIoZHN0ICsgNjQsIHNyYyArIDY0KTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4rXFxuIFxcdF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XFxuIH1cXG4rXFxuKyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsIG1lbWNweV9ub250ZW1wb3JhbFxcbisvKlxcbisgKiBSZXVzZSB0aGUgZXhpc3RpbmcgeDg2IGZsdXNoY2FjaGUgYmFja2VuZCBhcyB0aGUgbm9uLXRlbXBvcmFsIGNvcHlcXG4rICogcHJpbWl0aXZlLlxcbisgKi9cXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9ub250ZW1wb3JhbCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyxcXG4rXFx0XFx0c2l6ZV90IGNudClcXG4re1xcbitcXHRtZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcXG4rfVxcbitcXG4gI2VuZGlmXFxuIFxcbiAjZW5kaWYgLyogX19LRVJORUxfXyAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5pbmRleCA0ODVkZjljMmRiZGRiMy4uNDMzNDNiZmNlNDkzNmUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuQEAgLTI1NDEsMTEgKzI1NDEsMjIgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb24oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgc2VjdGlvbilcXG4gXFx0cGFnZS1cXHUwMDNlZmxhZ3MuZiB8PSAoc2VjdGlvbiBcXHUwMDI2IFNFQ1RJT05TX01BU0spIFxcdTAwM2NcXHUwMDNjIFNFQ1RJT05TX1BHU0hJRlQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIHBmbilcXG4re1xcbitcXHRzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXFxuIHtcXG4gXFx0cmV0dXJuIChtZGYuZiBcXHUwMDNlXFx1MDAzZSBTRUNUSU9OU19QR1NISUZUKSBcXHUwMDI2IFNFQ1RJT05TX01BU0s7XFxuIH1cXG4gI2Vsc2UgLyogIVNFQ1RJT05fSU5fUEFHRV9GTEFHUyAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBwZm4pXFxuK3tcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbkBAIC0yNzY4LDkgKzI3NzksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfbGlua3Moc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gem9uZV90eXBlIHpvbmUsXFxuIHtcXG4gXFx0c2V0X3BhZ2Vfem9uZShwYWdlLCB6b25lKTtcXG4gXFx0c2V0X3BhZ2Vfbm9kZShwYWdlLCBub2RlKTtcXG4tI2lmZGVmIFNFQ1RJT05fSU5fUEFHRV9GTEFHU1xcbi1cXHRzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpO1xcbi0jZW5kaWZcXG4rXFx0c2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihwYWdlLCBwZm4pO1xcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaCBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmhcXG5pbmRleCA1NzAyZGFjYTQzMjZiNy4uNmNiNWNkZDAxMTU4YjIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmhcXG5AQCAtMjc4LDYgKzI3OCwxOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXFxuIH1cXG4gI2VuZGlmXFxuIFxcbisjaWZuZGVmIG1lbWNweV9ub250ZW1wb3JhbFxcbisvKlxcbisgKiBtZW1jcHlfbm9udGVtcG9yYWwoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlXFxuKyAqIGFyY2hpdGVjdHVyZSBoYXMgYSBzdWl0YWJsZSBiYWNrZW5kLiBBcmNoaXRlY3R1cmVzIHdpdGhvdXQgYVxcbisgKiBzcGVjaWFsaXplZCBiYWNrZW5kIGZhbGwgYmFjayB0byBtZW1jcHkoKS4gS2VlcCB0aGlzIGFzIGFcXG4rICogZnVuY3Rpb24tbGlrZSBtYWNybyBzbyB0aGUgY29tcGlsZXIgY2FuIHN0aWxsIHNlZSB0aGUgb3JpZ2luYWxcXG4rICogbWVtY3B5KCkgY2FsbCBzaXRlIGFuZCBwcmVzZXJ2ZSB0aGUgdXN1YWwgRk9SVElGWSBjb3ZlcmFnZSB3aGVuXFxuKyAqIG9iamVjdCBzaXplcyByZW1haW4gdmlzaWJsZSB0aGVyZSwgd2hpbGUga2VlcGluZyB0aGUgQVBJIHZvaWQuXFxuKyAqL1xcbisjZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbChkc3QsIHNyYywgbGVuKSBcXFxcXFxuK1xcdCgodm9pZCltZW1jcHkoZHN0LCBzcmMsIGxlbikpXFxuKyNlbmRpZlxcbitcXG4gdm9pZCAqbWVtY2hyX2ludihjb25zdCB2b2lkICpzLCBpbnQgYywgc2l6ZV90IG4pO1xcbiBjaGFyICpzdHJyZXBsYWNlKGNoYXIgKnN0ciwgY2hhciBvbGQsIGNoYXIgbmV3KTtcXG4gXFxuZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuY1xcbmluZGV4IDBmNjQ5MDllOGQyMGUyLi5hZTQyYTEzMTFlMWQxOCAxMDA2NDRcXG4tLS0gYS9tbS9tbV9pbml0LmNcXG4rKysgYi9tbS9tbV9pbml0LmNcXG5AQCAtMTAwNSwxMSArMTAwNSwzNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbWVtbWFwX2luaXQodm9pZClcXG4gfVxcbiBcXG4gI2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxcbi1zdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXFxuKy8qXFxuKyAqIFJldHVybiB0cnVlIHdoZW4gbWVtbWFwX2luaXRfem9uZV9kZXZpY2UoKSBtdXN0IGluaXRpYWxpemUgdGhlIHBhZ2VcXG4rICogcmVmY291bnQgdG8gMC4gTUVNT1JZX0RFVklDRV9HRU5FUklDIHBhZ2VzIHJlZ2FpbiBhIHJlZmNvdW50IG9mIDEgaW5cXG4rICogdGhlIGZyZWUgcGF0aCwgd2hpbGUgdGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZVxcbisgKiBhbmQgcmFpc2UgdGhlIGNvdW50IGFnYWluIHdoZW4gdGhlIGFsbG9jYXRvciBvciBkcml2ZXIgaGFuZHMgdGhlIHBhZ2VcXG4rICogb3V0LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sIHBhZ2VtYXBfcmVxdWlyZXNfcmVmY291bnRfcmVzZXQoY29uc3Qgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG4re1xcbitcXHQvKlxcbitcXHQgKiBNRU1PUllfREVWSUNFX0dFTkVSSUMgcGFnZXMgcmVnYWluIGEgcmVmY291bnQgb2YgMSBpbiB0aGUgZnJlZVxcbitcXHQgKiBwYXRoLiBUaGUgcmVtYWluaW5nIFpPTkVfREVWSUNFIHR5cGVzIHN0YXJ0IGZyb20gMCBoZXJlIGFuZCByYWlzZVxcbitcXHQgKiB0aGUgY291bnQgYWdhaW4gd2hlbiB0aGUgYWxsb2NhdG9yIG9yIGRyaXZlciBoYW5kcyB0aGUgcGFnZSBvdXQuXFxuK1xcdCAqL1xcbitcXHRzd2l0Y2ggKHBnbWFwLVxcdTAwM2V0eXBlKSB7XFxuK1xcdGNhc2UgTUVNT1JZX0RFVklDRV9GU19EQVg6XFxuK1xcdGNhc2UgTUVNT1JZX0RFVklDRV9QUklWQVRFOlxcbitcXHRjYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6XFxuK1xcdGNhc2UgTUVNT1JZX0RFVklDRV9QQ0lfUDJQRE1BOlxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0Y2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBfX3JlZiBfX3pvbmVfZGV2aWNlX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXFxuIFxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcXG4gXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxcbiB7XFxuLVxcbiBcXHRfX2luaXRfc2luZ2xlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkKTtcXG4gXFxuIFxcdC8qXFxuQEAgLTEwMjgsMjcgKzEwNTQsNTQgQEAgc3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbiBcXHQgKi9cXG4gXFx0cGFnZV9mb2xpbyhwYWdlKS1cXHUwMDNlcGdtYXAgPSBwZ21hcDtcXG4gXFx0cGFnZS1cXHUwMDNlem9uZV9kZXZpY2VfZGF0YSA9IE5VTEw7XFxuK31cXG4gXFxuLVxcdC8qXFxuLVxcdCAqIFpPTkVfREVWSUNFIHBhZ2VzIG90aGVyIHRoYW4gTUVNT1JZX1RZUEVfR0VORVJJQyBhcmUgcmVsZWFzZWRcXG4tXFx0ICogZGlyZWN0bHkgdG8gdGhlIGRyaXZlciBwYWdlIGFsbG9jYXRvciB3aGljaCB3aWxsIHNldCB0aGUgcGFnZSBjb3VudFxcbi1cXHQgKiB0byAxIHdoZW4gYWxsb2NhdGluZyB0aGUgcGFnZS5cXG4tXFx0ICpcXG4tXFx0ICogTUVNT1JZX1RZUEVfR0VORVJJQyBhbmQgTUVNT1JZX1RZUEVfRlNfREFYIHBhZ2VzIGF1dG9tYXRpY2FsbHkgaGF2ZVxcbi1cXHQgKiB0aGVpciByZWZjb3VudCByZXNldCB0byBvbmUgd2hlbmV2ZXIgdGhleSBhcmUgZnJlZWQgKGllLiBhZnRlclxcbi1cXHQgKiB0aGVpciByZWZjb3VudCBkcm9wcyB0byAwKS5cXG4tXFx0ICovXFxuLVxcdHN3aXRjaCAocGdtYXAtXFx1MDAzZXR5cGUpIHtcXG4tXFx0Y2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDpcXG4tXFx0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XFxuLVxcdGNhc2UgTUVNT1JZX0RFVklDRV9DT0hFUkVOVDpcXG4tXFx0Y2FzZSBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE6XFxuK3N0YXRpYyB2b2lkIF9fcmVmIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHN0cnVjdCBwYWdlICpwYWdlLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcXG4rXFx0XFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG4re1xcbitcXHRfX3pvbmVfZGV2aWNlX3BhZ2VfaW5pdChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcXG4rXFx0aWYgKHBhZ2VtYXBfcmVxdWlyZXNfcmVmY291bnRfcmVzZXQocGdtYXApKVxcbiBcXHRcXHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcXG4tXFx0XFx0YnJlYWs7XFxuK31cXG4gXFxuLVxcdGNhc2UgTUVNT1JZX0RFVklDRV9HRU5FUklDOlxcbi1cXHRcXHRicmVhaztcXG4tXFx0fVxcbitzdGF0aWMgaW5saW5lIHZvaWQgem9uZV9kZXZpY2VfdGFpbF9wYWdlX2luaXQoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHpvbmVfaWR4LCBpbnQgbmlkLFxcbitcXHRcXHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBjb25zdCBzdHJ1Y3QgcGFnZSAqaGVhZCxcXG4rXFx0XFx0dW5zaWduZWQgaW50IG9yZGVyKVxcbit7XFxuK1xcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xcbitcXHRwcmVwX2NvbXBvdW5kX3RhaWwocGFnZSwgaGVhZCwgb3JkZXIpO1xcbitcXHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcXG4rfVxcbitcXG4rLypcXG4rICogJ3RlbXBsYXRlJyBpcyBhIHJldXNhYmxlIHBhZ2UgcHJvdG90eXBlIHJhdGhlciB0aGFuIGEgc3RyaWN0bHkgaW1tdXRhYmxlXFxuKyAqIG9iamVjdC4gTW9zdCBaT05FX0RFVklDRSBmaWVsZHMgc3RheSBjb25zdGFudCBhY3Jvc3MgdGhlIHBhZ2VzIGNvdmVyZWQgYnlcXG4rICogdGhlIGN1cnJlbnQgdGVtcGxhdGUsIGJ1dCBzZWN0aW9uIGJpdHMgYW5kIHBhZ2UtXFx1MDAzZXZpcnR1YWwgbWF5IHN0aWxsIGRlcGVuZFxcbisgKiBvbiB0aGUgUEZOLiBSZWZyZXNoIHRob3NlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHRoZSB0ZW1wbGF0ZSBiZWZvcmVcXG4rICogY29weWluZyBpdCBpbnRvIEBwYWdlLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlKHN0cnVjdCBwYWdlICp0ZW1wbGF0ZSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBwZm4pXFxuK3tcXG4rXFx0c2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3Bmbih0ZW1wbGF0ZSwgcGZuKTtcXG4rI2lmZGVmIFdBTlRfUEFHRV9WSVJUVUFMXFxuK1xcdGlmICghaXNfaGlnaG1lbV9pZHgoWk9ORV9ERVZJQ0UpKVxcbitcXHRcXHRzZXRfcGFnZV9hZGRyZXNzKHRlbXBsYXRlLCBfX3ZhKHBmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSk7XFxuKyNlbmRpZlxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlICp0ZW1wbGF0ZSlcXG4re1xcbitcXHQvKlxcbitcXHQgKiAndGVtcGxhdGUnIGNhcnJpZXMgdGhlIGludmFyaWFudCBwb3J0aW9uIG9mIGEgWk9ORV9ERVZJQ0Ugc3RydWN0XFxuK1xcdCAqIHBhZ2UuIFVwZGF0ZSB0aGUgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gcGxhY2UgYmVmb3JlIGNvcHlpbmcgaXRcXG4rXFx0ICogdG8gdGhlIGRlc3RpbmF0aW9uIHBhZ2UuXFxuK1xcdCAqL1xcbitcXHR6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZSh0ZW1wbGF0ZSwgcGZuKTtcXG4rXFx0bWVtY3B5X25vbnRlbXBvcmFsKHBhZ2UsIHRlbXBsYXRlLCBzaXplb2YoKnBhZ2UpKTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtMTA4Myw2ICsxMTM2LDcgQEAgc3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm4gPSBoZWFkX3BmbiArIG5yX3BhZ2VzO1xcbiBcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBwZ21hcC1cXHUwMDNldm1lbW1hcF9zaGlmdDtcXG4rXFx0c3RydWN0IHBhZ2UgdGVtcGxhdGU7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBXZSBoYXZlIHRvIGluaXRpYWxpemUgdGhlIHBhZ2VzLCBpbmNsdWRpbmcgc2V0dGluZyB1cCBwYWdlIGxpbmtzLlxcbkBAIC0xMDkxLDEyICsxMTQ1LDI2IEBAIHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxcbiBcXHQgKiB0aGUgcGFnZXMgaW4gdGhlIHNhbWUgZ28uXFxuIFxcdCAqL1xcbiBcXHRfX1NldFBhZ2VIZWFkKGhlYWQpO1xcbitcXG4gXFx0Zm9yIChwZm4gPSBoZWFkX3BmbiArIDE7IHBmbiBcXHUwMDNjIGVuZF9wZm47IHBmbisrKSB7XFxuIFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcXG4gXFxuLVxcdFxcdF9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xcbi1cXHRcXHRwcmVwX2NvbXBvdW5kX3RhaWwocGFnZSwgaGVhZCwgb3JkZXIpO1xcbi1cXHRcXHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcXG4rXFx0XFx0aWYgKHBmbiA9PSBoZWFkX3BmbiArIDEpIHtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogQWxsIHRhaWxzIG9mIHRoZSBzYW1lIGNvbXBvdW5kIHBhZ2Ugc2hhcmUgdGhlXFxuK1xcdFxcdFxcdCAqIHN0YXRlIGVzdGFibGlzaGVkIGJ5IHByZXBfY29tcG91bmRfdGFpbCgpLiBSZXVzZVxcbitcXHRcXHRcXHQgKiBvbmUgdGFpbCB0ZW1wbGF0ZSBmb3IgdGhlIHdob2xlIHJhbmdlIGFuZFxcbitcXHRcXHRcXHQgKiByZWZyZXNoIG9ubHkgdGhlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHRoYXRcXG4rXFx0XFx0XFx0ICogdGVtcGxhdGUgYmVmb3JlIGVhY2ggY29weS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgcGdtYXAsIGhlYWQsIG9yZGVyKTtcXG4rXFx0XFx0XFx0LyogaW5pdCB0ZW1wbGF0ZSBwYWdlICovXFxuK1xcdFxcdFxcdG1lbWNweShcXHUwMDI2dGVtcGxhdGUsIHBhZ2UsIHNpemVvZigqcGFnZSkpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHR6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShwYWdlLCBwZm4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2dGVtcGxhdGUpO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFx0cHJlcF9jb21wb3VuZF9oZWFkKGhlYWQsIG9yZGVyKTtcXG4gfVxcbkBAIC0xMTEzLDYgKzExODEsNyBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxcbiBcXHR1bnNpZ25lZCBsb25nIHpvbmVfaWR4ID0gem9uZV9pZHgoem9uZSk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzO1xcbiBcXHRpbnQgbmlkID0gcGdkYXQtXFx1MDAzZW5vZGVfaWQ7XFxuK1xcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xcbiBcXG4gXFx0aWYgKFdBUk5fT05fT05DRSghcGdtYXAgfHwgem9uZV9pZHggIT0gWk9ORV9ERVZJQ0UpKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTExMzAsNyArMTE5OSwyMSBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxcbiBcXHRmb3IgKHBmbiA9IHN0YXJ0X3BmbjsgcGZuIFxcdTAwM2MgZW5kX3BmbjsgcGZuICs9IHBmbnNfcGVyX2NvbXBvdW5kKSB7XFxuIFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcXG4gXFxuLVxcdFxcdF9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xcbitcXHRcXHRpZiAocGZuID09IHN0YXJ0X3Bmbikge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBTZWVkIHRoZSByZXVzYWJsZSBoZWFkLXBhZ2UgdGVtcGxhdGUgZnJvbSB0aGVcXG4rXFx0XFx0XFx0ICogZmlyc3QgcmVhbCBzdHJ1Y3QgcGFnZSwgYmVjYXVzZSB0aGUgZXhpc3RpbmdcXG4rXFx0XFx0XFx0ICogcGFnZS1pbml0IGFuZCBwYWdlYmxvY2sgaGVscGVycyBleHBlY3QgYSByZWFsXFxuK1xcdFxcdFxcdCAqIG1lbW1hcCBlbnRyeSByYXRoZXIgdGhhbiBhIHN0YWNrIG9iamVjdC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93KHBhZ2UsIHBmbiwgem9uZV9pZHgsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIG5pZCwgcGdtYXApO1xcbitcXHRcXHRcXHQvKiBpbml0IHRlbXBsYXRlIHBhZ2UgKi9cXG4rXFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBhZ2UsIHBmbixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZ0ZW1wbGF0ZSk7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChJU19BTElHTkVEKHBmbiwgUEFHRVNfUEVSX1NFQ1RJT04pKVxcbiBcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MjY6NDQuNzkyNzcwNDA1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQzMTU4MDk1MTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJQQ0lfUDJQRE1BXCIsXG4gICAgXCJEQVhcIixcbiAgICBcIkRFVl9EQVhcIixcbiAgICBcIkZTX0RBWFwiLFxuICAgIFwiTUVNT1JZX0hPVFBMVUdcIixcbiAgICBcIlNQQVJTRU1FTV9WTUVNTUFQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtbWFwX2luaXRfem9uZV9kZXZpY2VcIixcbiAgICBcIm1lbW1hcF9pbml0X2NvbXBvdW5kXCIsXG4gICAgXCJ6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZVwiLFxuICAgIFwiem9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIFpPTkVfREVWSUNFIHBhZ2VzIGJ5IHVzaW5nIGEgdGVtcGxhdGUgYW5kIG5vbi10ZW1wb3JhbCBtZW1jcHkuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB3aGVuIHByb2JpbmcgZGV2aWNlcyBsaWtlIFBNRU0sIERBWCwgb3IgUENJIFAyUERNQS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWZhMzAwMDdhYmFhMTg3ZjQ4ODIzN2Q3MDkxNTE4MDBjNzJmZjI2MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDI4IDAxOjI2OjQyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxuaW5kZXggNDYzNTYxNjg2M2Y1M2QuLmJjNmE5ZjM0YjM0NmFmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXG5AQCAtODIsNyArODIsMzUgQEAgaW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xuICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG4gI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRSAxXG4gdm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV84KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuK3tcbitcdGFzbSB2b2xhdGlsZShcIm1vdm50aXEgJTEsICUwXCJcbitcdFx0ICAgICA6IFwiPW1cIigqKHU2NCAqKWRzdClcbitcdFx0ICAgICA6IFwiclwiKCooY29uc3QgdTY0ICopc3JjKVxuK1x0XHQgICAgIDogXCJtZW1vcnlcIik7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfMTYodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXG4re1xuK1x0bW92bnRpXzgoZHN0LCBzcmMpO1xuK1x0bW92bnRpXzgoZHN0ICsgOCwgc3JjICsgOCk7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfMzIodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXG4re1xuK1x0bW92bnRpXzE2KGRzdCwgc3JjKTtcbitcdG1vdm50aV8xNihkc3QgKyAxNiwgc3JjICsgMTYpO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuK3tcbitcdG1vdm50aV8zMihkc3QsIHNyYyk7XG4rXHRtb3ZudGlfMzIoZHN0ICsgMzIsIHNyYyArIDMyKTtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLFxuK1x0XHRcdFx0XHQgICAgICBzaXplX3QgY250KVxuIHtcbiBcdGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKSB7XG4gXHRcdHN3aXRjaCAoY250KSB7XG5AQCAtOTYsMTAgKzEyNCw0OCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdFxuIFx0XHRcdFx0YXNtIChcIm1vdm50aXEgJTEsICUwXCIgOiBcIj1tXCIoKih1NjQgKilkc3QpIDogXCJyXCIoKih1NjQgKilzcmMpKTtcbiBcdFx0XHRcdGFzbSAoXCJtb3ZudGlxICUxLCAlMFwiIDogXCI9bVwiKCoodTY0ICopKGRzdCArIDgpKSA6IFwiclwiKCoodTY0ICopKHNyYyArIDgpKSk7XG4gXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0LypcbitcdFx0XHQgKiBUaGUgcmVsZXZhbnQgZml4ZWQtc2l6ZSBjb3BpZXMgaGVyZSBhcmUgdGhlXG4rXHRcdFx0ICogeDg2XzY0IHN0cnVjdCBwYWdlIHNpemVzOiA2NCwgODAsIGFuZCA5NiBieXRlcy5cbitcdFx0XHQgKiBLZWVwIDMyLWJ5dGUgYW5kIDQ4LWJ5dGUgY29waWVzIGlubGluZSBhcyB3ZWxsXG4rXHRcdFx0ICogaW5zdGVhZCBvZiBzZW5kaW5nIHRob3NlIG5lYXJieSBmaXhlZC1zaXplXG4rXHRcdFx0ICogY2FzZXMgYmFjayB0byBfX21lbWNweV9mbHVzaGNhY2hlKCkuXG4rXHRcdFx0ICovXG4rXHRcdFx0Y2FzZSAzMjpcbitcdFx0XHRcdG1vdm50aV8zMihkc3QsIHNyYyk7XG4rXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0Y2FzZSA0ODpcbitcdFx0XHRcdG1vdm50aV8zMihkc3QsIHNyYyk7XG4rXHRcdFx0XHRtb3ZudGlfMTYoZHN0ICsgMzIsIHNyYyArIDMyKTtcbitcdFx0XHRcdHJldHVybjtcbitcdFx0XHRjYXNlIDY0OlxuK1x0XHRcdFx0bW92bnRpXzY0KGRzdCwgc3JjKTtcbitcdFx0XHRcdHJldHVybjtcbitcdFx0XHRjYXNlIDgwOlxuK1x0XHRcdFx0bW92bnRpXzY0KGRzdCwgc3JjKTtcbitcdFx0XHRcdG1vdm50aV8xNihkc3QgKyA2NCwgc3JjICsgNjQpO1xuK1x0XHRcdFx0cmV0dXJuO1xuK1x0XHRcdGNhc2UgOTY6XG4rXHRcdFx0XHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xuK1x0XHRcdFx0bW92bnRpXzMyKGRzdCArIDY0LCBzcmMgKyA2NCk7XG4rXHRcdFx0XHRyZXR1cm47XG4gXHRcdH1cbiBcdH1cbitcbiBcdF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XG4gfVxuK1xuKyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsIG1lbWNweV9ub250ZW1wb3JhbFxuKy8qXG4rICogUmV1c2UgdGhlIGV4aXN0aW5nIHg4NiBmbHVzaGNhY2hlIGJhY2tlbmQgYXMgdGhlIG5vbi10ZW1wb3JhbCBjb3B5XG4rICogcHJpbWl0aXZlLlxuKyAqL1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfbm9udGVtcG9yYWwodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXG4rXHRcdHNpemVfdCBjbnQpXG4re1xuK1x0bWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XG4rfVxuK1xuICNlbmRpZlxuIFxuICNlbmRpZiAvKiBfX0tFUk5FTF9fICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCA0ODVkZjljMmRiZGRiMy4uNDMzNDNiZmNlNDkzNmUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTI1NDEsMTEgKzI1NDEsMjIgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb24oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgc2VjdGlvbilcbiBcdHBhZ2UtXHUwMDNlZmxhZ3MuZiB8PSAoc2VjdGlvbiBcdTAwMjYgU0VDVElPTlNfTUFTSykgXHUwMDNjXHUwMDNjIFNFQ1RJT05TX1BHU0hJRlQ7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLFxuK1x0XHR1bnNpZ25lZCBsb25nIHBmbilcbit7XG4rXHRzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4ge1xuIFx0cmV0dXJuIChtZGYuZiBcdTAwM2VcdTAwM2UgU0VDVElPTlNfUEdTSElGVCkgXHUwMDI2IFNFQ1RJT05TX01BU0s7XG4gfVxuICNlbHNlIC8qICFTRUNUSU9OX0lOX1BBR0VfRkxBR1MgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSxcbitcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4re1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4ge1xuIFx0cmV0dXJuIDA7XG5AQCAtMjc2OCw5ICsyNzc5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX2xpbmtzKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHpvbmVfdHlwZSB6b25lLFxuIHtcbiBcdHNldF9wYWdlX3pvbmUocGFnZSwgem9uZSk7XG4gXHRzZXRfcGFnZV9ub2RlKHBhZ2UsIG5vZGUpO1xuLSNpZmRlZiBTRUNUSU9OX0lOX1BBR0VfRkxBR1Ncbi1cdHNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7XG4tI2VuZGlmXG4rXHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHBhZ2UsIHBmbik7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5pbmRleCA1NzAyZGFjYTQzMjZiNy4uNmNiNWNkZDAxMTU4YjIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5AQCAtMjc4LDYgKzI3OCwxOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG4gfVxuICNlbmRpZlxuIFxuKyNpZm5kZWYgbWVtY3B5X25vbnRlbXBvcmFsXG4rLypcbisgKiBtZW1jcHlfbm9udGVtcG9yYWwoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlXG4rICogYXJjaGl0ZWN0dXJlIGhhcyBhIHN1aXRhYmxlIGJhY2tlbmQuIEFyY2hpdGVjdHVyZXMgd2l0aG91dCBhXG4rICogc3BlY2lhbGl6ZWQgYmFja2VuZCBmYWxsIGJhY2sgdG8gbWVtY3B5KCkuIEtlZXAgdGhpcyBhcyBhXG4rICogZnVuY3Rpb24tbGlrZSBtYWNybyBzbyB0aGUgY29tcGlsZXIgY2FuIHN0aWxsIHNlZSB0aGUgb3JpZ2luYWxcbisgKiBtZW1jcHkoKSBjYWxsIHNpdGUgYW5kIHByZXNlcnZlIHRoZSB1c3VhbCBGT1JUSUZZIGNvdmVyYWdlIHdoZW5cbisgKiBvYmplY3Qgc2l6ZXMgcmVtYWluIHZpc2libGUgdGhlcmUsIHdoaWxlIGtlZXBpbmcgdGhlIEFQSSB2b2lkLlxuKyAqL1xuKyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsKGRzdCwgc3JjLCBsZW4pIFxcXG4rXHQoKHZvaWQpbWVtY3B5KGRzdCwgc3JjLCBsZW4pKVxuKyNlbmRpZlxuK1xuIHZvaWQgKm1lbWNocl9pbnYoY29uc3Qgdm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTtcbiBjaGFyICpzdHJyZXBsYWNlKGNoYXIgKnN0ciwgY2hhciBvbGQsIGNoYXIgbmV3KTtcbiBcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IDBmNjQ5MDllOGQyMGUyLi5hZTQyYTEzMTFlMWQxOCAxMDA2NDRcbi0tLSBhL21tL21tX2luaXQuY1xuKysrIGIvbW0vbW1faW5pdC5jXG5AQCAtMTAwNSwxMSArMTAwNSwzNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbWVtbWFwX2luaXQodm9pZClcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxuLXN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcbisvKlxuKyAqIFJldHVybiB0cnVlIHdoZW4gbWVtbWFwX2luaXRfem9uZV9kZXZpY2UoKSBtdXN0IGluaXRpYWxpemUgdGhlIHBhZ2VcbisgKiByZWZjb3VudCB0byAwLiBNRU1PUllfREVWSUNFX0dFTkVSSUMgcGFnZXMgcmVnYWluIGEgcmVmY291bnQgb2YgMSBpblxuKyAqIHRoZSBmcmVlIHBhdGgsIHdoaWxlIHRoZSByZW1haW5pbmcgWk9ORV9ERVZJQ0UgdHlwZXMgc3RhcnQgZnJvbSAwIGhlcmVcbisgKiBhbmQgcmFpc2UgdGhlIGNvdW50IGFnYWluIHdoZW4gdGhlIGFsbG9jYXRvciBvciBkcml2ZXIgaGFuZHMgdGhlIHBhZ2VcbisgKiBvdXQuXG4rICovXG4rc3RhdGljIGlubGluZSBib29sIHBhZ2VtYXBfcmVxdWlyZXNfcmVmY291bnRfcmVzZXQoY29uc3Qgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbit7XG4rXHQvKlxuK1x0ICogTUVNT1JZX0RFVklDRV9HRU5FUklDIHBhZ2VzIHJlZ2FpbiBhIHJlZmNvdW50IG9mIDEgaW4gdGhlIGZyZWVcbitcdCAqIHBhdGguIFRoZSByZW1haW5pbmcgWk9ORV9ERVZJQ0UgdHlwZXMgc3RhcnQgZnJvbSAwIGhlcmUgYW5kIHJhaXNlXG4rXHQgKiB0aGUgY291bnQgYWdhaW4gd2hlbiB0aGUgYWxsb2NhdG9yIG9yIGRyaXZlciBoYW5kcyB0aGUgcGFnZSBvdXQuXG4rXHQgKi9cbitcdHN3aXRjaCAocGdtYXAtXHUwMDNldHlwZSkge1xuK1x0Y2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDpcbitcdGNhc2UgTUVNT1JZX0RFVklDRV9QUklWQVRFOlxuK1x0Y2FzZSBNRU1PUllfREVWSUNFX0NPSEVSRU5UOlxuK1x0Y2FzZSBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE6XG4rXHRcdHJldHVybiB0cnVlO1xuK1x0Y2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgX19yZWYgX196b25lX2RldmljZV9wYWdlX2luaXQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXG4gXHRcdFx0XHRcdCAgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbiB7XG4tXG4gXHRfX2luaXRfc2luZ2xlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkKTtcbiBcbiBcdC8qXG5AQCAtMTAyOCwyNyArMTA1NCw1NCBAQCBzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHQgKi9cbiBcdHBhZ2VfZm9saW8ocGFnZSktXHUwMDNlcGdtYXAgPSBwZ21hcDtcbiBcdHBhZ2UtXHUwMDNlem9uZV9kZXZpY2VfZGF0YSA9IE5VTEw7XG4rfVxuIFxuLVx0Lypcbi1cdCAqIFpPTkVfREVWSUNFIHBhZ2VzIG90aGVyIHRoYW4gTUVNT1JZX1RZUEVfR0VORVJJQyBhcmUgcmVsZWFzZWRcbi1cdCAqIGRpcmVjdGx5IHRvIHRoZSBkcml2ZXIgcGFnZSBhbGxvY2F0b3Igd2hpY2ggd2lsbCBzZXQgdGhlIHBhZ2UgY291bnRcbi1cdCAqIHRvIDEgd2hlbiBhbGxvY2F0aW5nIHRoZSBwYWdlLlxuLVx0ICpcbi1cdCAqIE1FTU9SWV9UWVBFX0dFTkVSSUMgYW5kIE1FTU9SWV9UWVBFX0ZTX0RBWCBwYWdlcyBhdXRvbWF0aWNhbGx5IGhhdmVcbi1cdCAqIHRoZWlyIHJlZmNvdW50IHJlc2V0IHRvIG9uZSB3aGVuZXZlciB0aGV5IGFyZSBmcmVlZCAoaWUuIGFmdGVyXG4tXHQgKiB0aGVpciByZWZjb3VudCBkcm9wcyB0byAwKS5cbi1cdCAqL1xuLVx0c3dpdGNoIChwZ21hcC1cdTAwM2V0eXBlKSB7XG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOlxuLVx0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6XG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQTpcbitzdGF0aWMgdm9pZCBfX3JlZiB6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhzdHJ1Y3QgcGFnZSAqcGFnZSxcbitcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXG4rXHRcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4re1xuK1x0X196b25lX2RldmljZV9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4rXHRpZiAocGFnZW1hcF9yZXF1aXJlc19yZWZjb3VudF9yZXNldChwZ21hcCkpXG4gXHRcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xuLVx0XHRicmVhaztcbit9XG4gXG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfR0VORVJJQzpcbi1cdFx0YnJlYWs7XG4tXHR9XG4rc3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLFxuK1x0XHR1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcbitcdFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgY29uc3Qgc3RydWN0IHBhZ2UgKmhlYWQsXG4rXHRcdHVuc2lnbmVkIGludCBvcmRlcilcbit7XG4rXHR6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbitcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XG4rXHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcbit9XG4rXG4rLypcbisgKiAndGVtcGxhdGUnIGlzIGEgcmV1c2FibGUgcGFnZSBwcm90b3R5cGUgcmF0aGVyIHRoYW4gYSBzdHJpY3RseSBpbW11dGFibGVcbisgKiBvYmplY3QuIE1vc3QgWk9ORV9ERVZJQ0UgZmllbGRzIHN0YXkgY29uc3RhbnQgYWNyb3NzIHRoZSBwYWdlcyBjb3ZlcmVkIGJ5XG4rICogdGhlIGN1cnJlbnQgdGVtcGxhdGUsIGJ1dCBzZWN0aW9uIGJpdHMgYW5kIHBhZ2UtXHUwMDNldmlydHVhbCBtYXkgc3RpbGwgZGVwZW5kXG4rICogb24gdGhlIFBGTi4gUmVmcmVzaCB0aG9zZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGUgdGVtcGxhdGUgYmVmb3JlXG4rICogY29weWluZyBpdCBpbnRvIEBwYWdlLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCB6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUsXG4rXHRcdHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbitcdHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4odGVtcGxhdGUsIHBmbik7XG4rI2lmZGVmIFdBTlRfUEFHRV9WSVJUVUFMXG4rXHRpZiAoIWlzX2hpZ2htZW1faWR4KFpPTkVfREVWSUNFKSlcbitcdFx0c2V0X3BhZ2VfYWRkcmVzcyh0ZW1wbGF0ZSwgX192YShwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKTtcbisjZW5kaWZcbit9XG4rXG4rc3RhdGljIHZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4rXHRcdHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpXG4re1xuK1x0LypcbitcdCAqICd0ZW1wbGF0ZScgY2FycmllcyB0aGUgaW52YXJpYW50IHBvcnRpb24gb2YgYSBaT05FX0RFVklDRSBzdHJ1Y3RcbitcdCAqIHBhZ2UuIFVwZGF0ZSB0aGUgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gcGxhY2UgYmVmb3JlIGNvcHlpbmcgaXRcbitcdCAqIHRvIHRoZSBkZXN0aW5hdGlvbiBwYWdlLlxuK1x0ICovXG4rXHR6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZSh0ZW1wbGF0ZSwgcGZuKTtcbitcdG1lbWNweV9ub250ZW1wb3JhbChwYWdlLCB0ZW1wbGF0ZSwgc2l6ZW9mKCpwYWdlKSk7XG4gfVxuIFxuIC8qXG5AQCAtMTA4Myw2ICsxMTM2LDcgQEAgc3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm4gPSBoZWFkX3BmbiArIG5yX3BhZ2VzO1xuIFx0dW5zaWduZWQgaW50IG9yZGVyID0gcGdtYXAtXHUwMDNldm1lbW1hcF9zaGlmdDtcbitcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xuIFxuIFx0LypcbiBcdCAqIFdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgcGFnZXMsIGluY2x1ZGluZyBzZXR0aW5nIHVwIHBhZ2UgbGlua3MuXG5AQCAtMTA5MSwxMiArMTE0NSwyNiBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcbiBcdCAqIHRoZSBwYWdlcyBpbiB0aGUgc2FtZSBnby5cbiBcdCAqL1xuIFx0X19TZXRQYWdlSGVhZChoZWFkKTtcbitcbiBcdGZvciAocGZuID0gaGVhZF9wZm4gKyAxOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbisrKSB7XG4gXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcbiBcbi1cdFx0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4tXHRcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XG4tXHRcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xuK1x0XHRpZiAocGZuID09IGhlYWRfcGZuICsgMSkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogQWxsIHRhaWxzIG9mIHRoZSBzYW1lIGNvbXBvdW5kIHBhZ2Ugc2hhcmUgdGhlXG4rXHRcdFx0ICogc3RhdGUgZXN0YWJsaXNoZWQgYnkgcHJlcF9jb21wb3VuZF90YWlsKCkuIFJldXNlXG4rXHRcdFx0ICogb25lIHRhaWwgdGVtcGxhdGUgZm9yIHRoZSB3aG9sZSByYW5nZSBhbmRcbitcdFx0XHQgKiByZWZyZXNoIG9ubHkgdGhlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHRoYXRcbitcdFx0XHQgKiB0ZW1wbGF0ZSBiZWZvcmUgZWFjaCBjb3B5LlxuK1x0XHRcdCAqL1xuK1x0XHRcdHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCxcbitcdFx0XHRcdFx0XHQgICBwZ21hcCwgaGVhZCwgb3JkZXIpO1xuK1x0XHRcdC8qIGluaXQgdGVtcGxhdGUgcGFnZSAqL1xuK1x0XHRcdG1lbWNweShcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLFxuK1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnRlbXBsYXRlKTtcbitcdFx0fVxuIFx0fVxuIFx0cHJlcF9jb21wb3VuZF9oZWFkKGhlYWQsIG9yZGVyKTtcbiB9XG5AQCAtMTExMyw2ICsxMTgxLDcgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcbiBcdHVuc2lnbmVkIGxvbmcgem9uZV9pZHggPSB6b25lX2lkeCh6b25lKTtcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzO1xuIFx0aW50IG5pZCA9IHBnZGF0LVx1MDAzZW5vZGVfaWQ7XG4rXHRzdHJ1Y3QgcGFnZSB0ZW1wbGF0ZTtcbiBcbiBcdGlmIChXQVJOX09OX09OQ0UoIXBnbWFwIHx8IHpvbmVfaWR4ICE9IFpPTkVfREVWSUNFKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTExMzAsNyArMTE5OSwyMSBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuIFx0Zm9yIChwZm4gPSBzdGFydF9wZm47IHBmbiBcdTAwM2MgZW5kX3BmbjsgcGZuICs9IHBmbnNfcGVyX2NvbXBvdW5kKSB7XG4gXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcbiBcbi1cdFx0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4rXHRcdGlmIChwZm4gPT0gc3RhcnRfcGZuKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBTZWVkIHRoZSByZXVzYWJsZSBoZWFkLXBhZ2UgdGVtcGxhdGUgZnJvbSB0aGVcbitcdFx0XHQgKiBmaXJzdCByZWFsIHN0cnVjdCBwYWdlLCBiZWNhdXNlIHRoZSBleGlzdGluZ1xuK1x0XHRcdCAqIHBhZ2UtaW5pdCBhbmQgcGFnZWJsb2NrIGhlbHBlcnMgZXhwZWN0IGEgcmVhbFxuK1x0XHRcdCAqIG1lbW1hcCBlbnRyeSByYXRoZXIgdGhhbiBhIHN0YWNrIG9iamVjdC5cbitcdFx0XHQgKi9cbitcdFx0XHR6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LFxuK1x0XHRcdFx0XHRcdCAgIG5pZCwgcGdtYXApO1xuK1x0XHRcdC8qIGluaXQgdGVtcGxhdGUgcGFnZSAqL1xuK1x0XHRcdG1lbWNweShcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLFxuK1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnRlbXBsYXRlKTtcbitcdFx0fVxuIFxuIFx0XHRpZiAoSVNfQUxJR05FRChwZm4sIFBBR0VTX1BFUl9TRUNUSU9OKSlcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI2OjQ0Ljc5Mjc3MTk4NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MzU1ODM3ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIE9wdGltaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBvcHRpbWl6ZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBzdHJ1Y3QgcGFnZWAgZm9yIGBaT05FX0RFVklDRWAgbWVtb3J5LiBJdCdzIHVzaW5nIGBtZW1jcHlfbm9udGVtcG9yYWxgIHRvIGNvcHkgYSBwcmUtZGVmaW5lZCB0ZW1wbGF0ZSBpbnN0ZWFkIG9mIHBhaW5zdGFraW5nbHkgaW5pdGlhbGl6aW5nIGVhY2ggcGFnZSBpbmRpdmlkdWFsbHksIHdoaWNoIGlzIGEgY2xldmVyIGFwcHJvYWNoLiBUaGlzIG9wdGltaXphdGlvbiB0YXJnZXRzIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYW5kIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAsIGJvdGggb2Ygd2hpY2ggYXJlIGNyaXRpY2FsIGluIG1lbW9yeSBtYW5hZ2VtZW50LiBJdCBhbHNvIGxvb2tzIGxpa2UgdGhlcmUncyBhbiB4ODYtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgYG1lbWNweV9ub250ZW1wb3JhbGAgdXNpbmcgYG1vdm50aWAgaW5zdHJ1Y3Rpb25zLCBhIG5pY2UgbG93LWxldmVsIG9wdGltaXphdGlvbi5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlzIHRoaXMgcmVhY2hhYmxlIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgd29ydGggZnV6emluZz8gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyB0cmlnZ2VyZWQgd2hlbiBgWk9ORV9ERVZJQ0VgIG1lbW9yeSBpcyBob3RwbHVnZ2VkLiBUaGF0J3MgdHlwaWNhbGx5IGZvciBEQVgsIFBNRU0sIGFuZCB0aGUgbGlrZS4gTm93LCBjYW4gdGhpcyBiZSByZWFjaGVkIGluIGEgY29tbW9uIHNldHVwIGxpa2UgUUVNVT8gQWJzb2x1dGVseSEgV2UgY2FuIGVtdWxhdGUgUE1FTS9OVkRJTU0gZGV2aWNlcyBpbiBRRU1VLCB3ZSBjYW4gdXNlIHRoZSBgbWVtbWFwPWAga2VybmVsIHBhcmFtZXRlciBvciBldmVuIHV0aWxpemUgYG1tYXBgIHdpdGggREFYLiBIbW0sIHdhaXQgYSBtaW51dGUsIEkgcmVtZW1iZXIgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyBjYWxsZWQgZnJvbSBgZGV2bV9tZW1yZW1hcF9wYWdlc2AuIExldCdzIGRpZyBkZWVwZXIgYW5kIHNlZSB3aGF0IGNhbGxzIHRoYXQgZnVuY3Rpb24uICpjaGVja3MgY29kZSogT2theSwgaXQncyBjYWxsZWQgZnJvbSBgZHJpdmVycy9kYXgvc3VwZXIuY2AsIGBkcml2ZXJzL252ZGltbS9wbWVtLmNgLCBhbmQgYGRyaXZlcnMvcGNpL3AycGRtYS5jYC4gSW50ZXJlc3RpbmchXG5cblRoZSBiaWcgcXVlc3Rpb24gbm93IGlzLCBjYW4gc3l6a2FsbGVyIHRyaWdnZXIgYGRldm1fbWVtcmVtYXBfcGFnZXNgIHRocm91Z2gsIHBlcmhhcHMsIHNvbWUgbG9vcCBkZXZpY2UsIGEgcG1lbSBkZXZpY2UsIG9yIGV2ZW4gcDJwZG1hPyBBY3R1YWxseSwgd2FpdCwgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyBhIGNvcmUgTU0gZnVuY3Rpb24sIHNvIGl0J3MgYSBkZWZpbml0ZSBcInllc1wiIHRvIGNvcmUga2VybmVsIGxvZ2ljLiBOb3csIGxldCdzIHJlZm9jdXMuIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uLCB5ZXMsIGJ1dCBpdCBjaGFuZ2VzIGhvdyBwYWdlcyBhcmUgaW5pdGlhbGl6ZWQsIG1lYW5pbmcgaXQgdG91Y2hlcyBjb3JlIE1NIGxvZ2ljLiBBYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBoZXJlIGFyZSBkZWZpbml0ZWx5IGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYW5kIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayBpZiBgWk9ORV9ERVZJQ0VgIGlzIGV2ZW4gZW5hYmxlZCBpbiB0eXBpY2FsIGNvbmZpZ3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19aT05FX0RFVklDRWAgaXMgc2V0LiBMZXQgbWUganVzdCBjaGVjayBgbW0vbW1faW5pdC5jYCB0byBjb25maXJtIHdoZXJlIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgaXMgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkyNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI2OjUzLjIyODM1NzQzOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc5NzE4NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtbWFwX2luaXRfem9uZV9kZXZpY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXJlbWFwLmM9MTQ0PXN0YXRpYyBpbnQgcGFnZW1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxubW0vbWVtcmVtYXAuYy0yNDEtXFx0ICovXFxubW0vbWVtcmVtYXAuYzoyNDI6XFx0bWVtbWFwX2luaXRfem9uZV9kZXZpY2UoXFx1MDAyNk5PREVfREFUQShuaWQpLVxcdTAwM2Vub2RlX3pvbmVzW1pPTkVfREVWSUNFXSxcXG5tbS9tZW1yZW1hcC5jLTI0My1cXHRcXHRcXHRcXHRQSFlTX1BGTihyYW5nZS1cXHUwMDNlc3RhcnQpLFxcbi0tXFxubW0vbW1faW5pdC5jPTk2OD1zdGF0aWMgdm9pZCBfX2luaXQgbWVtbWFwX2luaXQodm9pZClcXG4tLVxcbm1tL21tX2luaXQuYy0xMDA4LS8qXFxubW0vbW1faW5pdC5jOjEwMDk6ICogUmV0dXJuIHRydWUgd2hlbiBtZW1tYXBfaW5pdF96b25lX2RldmljZSgpIG11c3QgaW5pdGlhbGl6ZSB0aGUgcGFnZVxcbm1tL21tX2luaXQuYy0xMDEwLSAqIHJlZmNvdW50IHRvIDAuIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluXFxuLS1cXG5tbS9tbV9pbml0LmM9MTEzMT1zdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcXG4tLVxcbm1tL21tX2luaXQuYy0xMTcxLVxcbm1tL21tX2luaXQuYzoxMTcyOnZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxubW0vbW1faW5pdC5jLTExNzMtXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI2OjUzLjM3NjMzMzgwNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjIyMjUzMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYW5kIGl0cyBVc2FnZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGh1bmNoIHRlbGxzIG1lIHRoaXMgaXMgd2hlcmUgc29tZSBjcml0aWNhbCBpbml0aWFsaXphdGlvbiBvciBzZXR1cCBmb3IgbWVtb3J5IG1hcHBpbmcgaXMgaGFuZGxlZCB3aXRoaW4gYSBzcGVjaWZpYyB6b25lIG9yIGRldmljZSBjb250ZXh0LiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kICpob3cqIGl0J3MgYmVpbmcgdXNlZC4gVGhlIGNhbGwgZ3JhcGggaXMgd2hhdCBJIHdpbGwgbG9vayBhdC5cblxuTm93LCBJIG5lZWQgdG8gdHJhY2UgdGhlIGNvbnRyb2wgZmxvdy4gTGV0J3Mgc2VlLi4uYGRldm1fbWVtcmVtYXBfcGFnZXNgIGlzIGEgbGlrZWx5IHN0YXJ0aW5nIHBvaW50IGJlY2F1c2UgdGhhdCdzIHdoYXQgc2VlbXMgdG8gcmVsYXRlIHRvIHRoZSAnZGV2aWNlIG1hbmFnZWQgbWVtb3J5IHJlbWFwcGluZycuIFRoYXQgY2FsbHMgYHBhZ2VtYXBfcmFuZ2VgLiBBbmQgKmFoYSEqIGBwYWdlbWFwX3JhbmdlYCBjYWxscyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiBTbyB0aGUgZGVwZW5kZW5jeSBpcyBjbGVhci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgZGV2bV9tZW1yZW1hcF9wYWdlc2AgZG9lcyBhdCB0aGUgdG9wLCBzaW5jZSBpdCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQgaW4gd2hpY2ggYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyBiZWluZyBpbnZva2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjkwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6MjY6NTcuMTM4NTYwODA5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNzMwNzU2NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2bV9tZW1yZW1hcF9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTI3ND1UaGVzZSBjYW4gYmUgYWxsb2NhdGVkIGFuZCBmcmVlZCB3aXRoOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yOTAtXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjI5MTpUaGVyZSBhcmUgYWxzbyBkZXZtX3JlcXVlc3RfZnJlZV9tZW1fcmVnaW9uKCksIGRldm1fbWVtcmVtYXBfcGFnZXMoKSxcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjkyLWRldm1fbWVtdW5tYXBfcGFnZXMoKSwgYW5kIGRldm1fcmVsZWFzZV9tZW1fcmVnaW9uKCkgd2hlbiB0aGUgcmVzb3VyY2VzIGNhblxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0PTE0MT10byBrZWVwIHRoZSBtZW1vcnkgcGlubmVkIGZvciBhY3RpdmUgdXNlLiBgWk9ORV9ERVZJQ0VgLCB2aWFcXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q6MTQyOjpjOmZ1bmM6YGRldm1fbWVtcmVtYXBfcGFnZXNgLCBwZXJmb3JtcyBqdXN0IGVub3VnaCBtZW1vcnkgaG90cGx1ZyB0b1xcbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdC0xNDMtdHVybiBvbiA6YzpmdW5jOmBwZm5fdG9fcGFnZWAsIDpjOmZ1bmM6YHBhZ2VfdG9fcGZuYCwgYW5kXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q9MTU3PW1lbW9yeSBob3RwbHVnLiBTdWItc2VjdGlvbiBzdXBwb3J0IGFsbG93cyBmb3IgMk1CIGFzIHRoZSBjcm9zcy1hcmNoXFxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0OjE1ODpjb21tb24gYWxpZ25tZW50IGdyYW51bGFyaXR5IGZvciA6YzpmdW5jOmBkZXZtX21lbXJlbWFwX3BhZ2VzYC5cXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3QtMTU5LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdD0yMjA9bWlncmF0ZV92bWFfZmluYWxpemUoKSDlh73mlbDml6jlnKjkvb/pqbHliqjnqIvluo/mm7TmmJPkuo7nvJblhpnlubbpm4bkuK3ot6jpqbHliqjnqIvluo/nmoTpgJrnlKjku6PnoIHjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjQxLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjQyOui/mOaciWRldm1fcmVxdWVzdF9mcmVlX21lbV9yZWdpb24oKSwgZGV2bV9tZW1yZW1hcF9wYWdlcygpLFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjQzLWRldm1fbWVtdW5tYXBfcGFnZXMoKSDlkowgZGV2bV9yZWxlYXNlX21lbV9yZWdpb24oKSDlvZPotYTmupDlj6/ku6Xnu5HlrprliLAgYGBzdHJ1Y3QgZGV2aWNlYGAuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0PTEwNz1aT05FX0RFVklDRVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdC0xMTEt5LqL5a6e5pyJ5YWz77ya6L+Z5Lqb5Zyw5Z2A6IyD5Zu055qE6aG16Z2i5a+56LGh5LuO5pyq6KKr5Zyo57q/5qCH6K6w6L+H77yM6ICM5LiU5b+F6aG75a+56K6+5aSH6L+b6KGM5byV55So77yM6ICM5LiN5LuF5LuFXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdDoxMTI65piv6aG16Z2i77yM5Lul5L+d5oyB5YaF5a2Y6KKr4oCc6ZSB5a6a4oCd5Lul5L6/5L2/55So44CCIGBaT05FX0RFVklDRWAg77yM6YCa6L+HIDpjOmZ1bmM6YGRldm1fbWVtcmVtYXBfcGFnZXNgIO+8jFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtMTEzLeS4uue7meWumueahHBmbnPojIPlm7TmiafooYzotrPlpJ/nmoTlhoXlrZjng63mj5Lmi5TmnaXlvIDlkK8gOmM6ZnVuYzpgcGZuX3RvX3BhZ2Vg77yMXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0LTEyMi06YzpmdW5jOmBhcmNoX2FkZF9tZW1vcnlgIO+8jOWNs+WGheWtmOeDreaPkuaLlOeahOS4iuWNiumDqOWIhuOAguWtkOauteaUr+aMgeWFgeiuuDJNQuS9nOS4ulxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3Q6MTIzOjpjOmZ1bmM6YGRldm1fbWVtcmVtYXBfcGFnZXNgIOeahOi3qOaetuaehOmAmueUqOWvuem9kOmil+eykuW6puOAglxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtMTI0LVxcbi0tXFxuZHJpdmVycy9kYXgvZGV2aWNlLmM9MzgwPXN0YXRpYyBpbnQgZGV2X2RheF9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcXG4tLVxcbmRyaXZlcnMvZGF4L2RldmljZS5jLTQzNC1cXHRcXHRcXHRvcmRlcl9iYXNlXzIoZGV2X2RheC1cXHUwMDNlYWxpZ24gXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuZHJpdmVycy9kYXgvZGV2aWNlLmM6NDM1OlxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGdtYXApO1xcbmRyaXZlcnMvZGF4L2RldmljZS5jLTQzNi1cXHRpZiAoSVNfRVJSKGFkZHIpKVxcbi0tXFxuZHJpdmVycy9kYXgvZnNkZXYuYz0yMDc9c3RhdGljIGludCBmc2Rldl9kYXhfcHJvYmUoc3RydWN0IGRldl9kYXggKmRldl9kYXgpXFxuLS1cXG5kcml2ZXJzL2RheC9mc2Rldi5jLTI3My1cXG5kcml2ZXJzL2RheC9mc2Rldi5jOjI3NDpcXHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBnbWFwKTtcXG5kcml2ZXJzL2RheC9mc2Rldi5jLTI3NS1cXHRpZiAoSVNfRVJSKGFkZHIpKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYz0xMDI2PWludCBrZ2Qya2ZkX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTEwNjctXFx0ICovXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYzoxMDY4OlxcdHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGFkZXYtXFx1MDAzZWRldiwgcGdtYXApO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtMTA2OS1cXHRpZiAoSVNfRVJSKHIpKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9MTc2MD1zdGF0aWMgc3RydWN0IHhlX3BhZ2VtYXAgKnhlX3BhZ2VtYXBfY3JlYXRlKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCBzdHJ1Y3QgeGVfdnJhbV9yZWdpb24gKnZyKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE4MDEtXFx0cGFnZW1hcC1cXHUwMDNlb3BzID0gZHJtX3BhZ2VtYXBfcGFnZW1hcF9vcHNfZ2V0KCk7XFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jOjE4MDI6XFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBwYWdlbWFwKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTgwMy1cXHRpZiAoSVNfRVJSKGFkZHIpKSB7XFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYz0zODE9c3RhdGljIGludCBtc2h2X3Z0bF9pb2N0bF9hZGRfdnRsMF9tZW0oc3RydWN0IG1zaHZfdnRsICp2dGwsIHZvaWQgX191c2VyICphcmcpXFxuLS1cXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MTktXFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmM6NDIwOlxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKG1lbV9kZXYsIHBnbWFwKTtcXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MjEtXFx0aWYgKElTX0VSUihhZGRyKSkge1xcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jOjQyMjpcXHRcXHRkZXZfZXJyKHZ0bC1cXHUwMDNlbW9kdWxlX2RldiwgXFxcImRldm1fbWVtcmVtYXBfcGFnZXMgZXJyb3I6ICVsZFxcXFxuXFxcIiwgUFRSX0VSUihhZGRyKSk7XFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDIzLVxcdFxcdGtmcmVlKHBnbWFwKTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWc9MTQzPWNvbmZpZyBOVkRJTU1fVEVTVF9CVUlMRFxcbi0tXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0xNTEtXFx0ICBvdGhlcndpc2UgaGVscHMgY2F0Y2ggYnVpbGQgZXJyb3JzIGluZHVjZWQgYnkgY2hhbmdlcyB0byB0aGVcXG5kcml2ZXJzL252ZGltbS9LY29uZmlnOjE1MjpcXHQgIGNvcmUgZGV2bV9tZW1yZW1hcF9wYWdlcygpIGltcGxlbWVudGF0aW9uIGFuZCBvdGhlclxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTUzLVxcdCAgaW5mcmFzdHJ1Y3R1cmUuXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9NDQ4PXN0YXRpYyBpbnQgcG1lbV9hdHRhY2hfZGlzayhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTE3LVxcdFxcdHBtZW0tXFx1MDAzZXBnbWFwLm9wcyA9IFxcdTAwMjZmc2RheF9wYWdlbWFwX29wcztcXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NTE4OlxcdFxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgXFx1MDAyNnBtZW0tXFx1MDAzZXBnbWFwKTtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTE5LVxcdFxcdHBmbl9zYiA9IG5kX3Bmbi1cXHUwMDNlcGZuX3NiO1xcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUzMC1cXHRcXHRwbWVtLVxcdTAwM2VwZ21hcC5vcHMgPSBcXHUwMDI2ZnNkYXhfcGFnZW1hcF9vcHM7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjUzMTpcXHRcXHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIFxcdTAwMjZwbWVtLVxcdTAwM2VwZ21hcCk7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUzMi1cXHRcXHRiYl9yYW5nZSA9IHBtZW0tXFx1MDAzZXBnbWFwLnJhbmdlO1xcbi0tXFxuZHJpdmVycy9wY2kvcDJwZG1hLmM9Mzg3PWludCBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhciwgc2l6ZV90IHNpemUsXFxuLS1cXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy00MzYtXFxuZHJpdmVycy9wY2kvcDJwZG1hLmM6NDM3OlxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBnbWFwKTtcXG5kcml2ZXJzL3BjaS9wMnBkbWEuYy00MzgtXFx0aWYgKElTX0VSUihhZGRyKSkge1xcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYz01NTM9ZGNzc2Jsa19hZGRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jLTY5Ni1cXHRcXHRkZXZfaW5mby1cXHUwMDNlcGdtYXAubnJfcmFuZ2VcXHQ9IDE7XFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYzo2OTc6XFx0XFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoXFx1MDAyNmRldl9pbmZvLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXZfaW5mby1cXHUwMDNlcGdtYXApO1xcbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmMtNjk4LVxcdFxcdGlmIChJU19FUlIoYWRkcikpIHtcXG4tLVxcbmZzL2Z1c2UvdmlydGlvX2ZzLmM9MTA3Nj1zdGF0aWMgaW50IHZpcnRpb19mc19zZXR1cF9kYXgoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsIHN0cnVjdCB2aXJ0aW9fZnMgKmZzKVxcbi0tXFxuZnMvZnVzZS92aXJ0aW9fZnMuYy0xMTE2LVxcdC8qIElkZWFsbHkgd2Ugd291bGQgZGlyZWN0bHkgdXNlIHRoZSBQQ0kgQkFSIHJlc291cmNlIGJ1dFxcbmZzL2Z1c2UvdmlydGlvX2ZzLmM6MTExNzpcXHQgKiBkZXZtX21lbXJlbWFwX3BhZ2VzKCkgd2FudHMgaXRzIG93biBjb3B5IGluIHBnbWFwLiAgU29cXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMTgtXFx0ICogaW5pdGlhbGl6ZSBhIHN0cnVjdCByZXNvdXJjZSBmcm9tIHNjcmF0Y2ggKG9ubHkgdGhlIHN0YXJ0XFxuLS1cXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMjYtXFxuZnMvZnVzZS92aXJ0aW9fZnMuYzoxMTI3OlxcdGZzLVxcdTAwM2V3aW5kb3dfa2FkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKFxcdTAwMjZ2ZGV2LVxcdTAwM2VkZXYsIHBnbWFwKTtcXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMjgtXFx0aWYgKElTX0VSUihmcy1cXHUwMDNld2luZG93X2thZGRyKSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD03Nz1zdHJ1Y3QgZGV2X3BhZ2VtYXBfb3BzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0xMTUtICogQGFsdG1hcDogcHJlLWFsbG9jYXRlZC9yZXNlcnZlZCBtZW1vcnkgZm9yIHZtZW1tYXAgYWxsb2NhdGlvbnNcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MTE2OiAqIEByZWY6IHJlZmVyZW5jZSBjb3VudCB0aGF0IHBpbnMgdGhlIGRldm1fbWVtcmVtYXBfcGFnZXMoKSBtYXBwaW5nXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTExNy0gKiBAZG9uZTogY29tcGxldGlvbiBmb3IgQHJlZlxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTIzMD12b2lkIG1lbXVubWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApO1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyMzE6dm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApO1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yMzItdm9pZCBkZXZtX21lbXVubWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9MjQ3PXN0YXRpYyBpbmxpbmUgdm9pZCB6b25lX2RldmljZV9wcml2YXRlX3NwbGl0X2NiKHN0cnVjdCBmb2xpbyAqb3JpZ2luYWxfZm9saW8sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjY0LSNlbHNlXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjI2NTpzdGF0aWMgaW5saW5lIHZvaWQgKmRldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LFxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNjYtXFx0XFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNjgtXFx0LypcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjY5OlxcdCAqIEZhaWwgYXR0ZW1wdHMgdG8gY2FsbCBkZXZtX21lbXJlbWFwX3BhZ2VzKCkgd2l0aG91dFxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNzAtXFx0ICogWk9ORV9ERVZJQ0Ugc3VwcG9ydCBlbmFibGVkLCB0aGlzIHJlcXVpcmVzIGNhbGxlcnMgdG8gZmFsbFxcbi0tXFxubW0vbWVtcmVtYXAuYz0xMzA9RVhQT1JUX1NZTUJPTF9HUEwobWVtdW5tYXBfcGFnZXMpO1xcbm1tL21lbXJlbWFwLmMtMTMxLVxcbm1tL21lbXJlbWFwLmM6MTMyOnN0YXRpYyB2b2lkIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSh2b2lkICpkYXRhKVxcbm1tL21lbXJlbWFwLmMtMTMzLXtcXG4tLVxcbm1tL21lbXJlbWFwLmM9MTQ0PXN0YXRpYyBpbnQgcGFnZW1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxubW0vbWVtcmVtYXAuYy0yNjEtLypcXG5tbS9tZW1yZW1hcC5jOjI2MjogKiBOb3QgZGV2aWNlIG1hbmFnZWQgdmVyc2lvbiBvZiBkZXZtX21lbXJlbWFwX3BhZ2VzLCB1bmRvbmUgYnlcXG5tbS9tZW1yZW1hcC5jOjI2MzogKiBtZW11bm1hcF9wYWdlcygpLiAgUGxlYXNlIHVzZSBkZXZtX21lbXJlbWFwX3BhZ2VzIGlmIHlvdSBoYXZlIGEgc3RydWN0XFxubW0vbWVtcmVtYXAuYy0yNjQtICogZGV2aWNlIGF2YWlsYWJsZS5cXG4tLVxcbm1tL21lbXJlbWFwLmM9MzUyPUVYUE9SVF9TWU1CT0xfR1BMKG1lbXJlbWFwX3BhZ2VzKTtcXG4tLVxcbm1tL21lbXJlbWFwLmMtMzU0LS8qKlxcbm1tL21lbXJlbWFwLmM6MzU1OiAqIGRldm1fbWVtcmVtYXBfcGFnZXMgLSByZW1hcCBhbmQgcHJvdmlkZSBtZW1tYXAgYmFja2luZyBmb3IgdGhlIGdpdmVuIHJlc291cmNlXFxubW0vbWVtcmVtYXAuYy0zNTYtICogQGRldjogaG9zdGluZyBkZXZpY2UgZm9yIEByZXNcXG4tLVxcbm1tL21lbXJlbWFwLmMtMzY3LSAqICAgICdsaXZlJyBvbiBlbnRyeSBhbmQgd2lsbCBiZSBraWxsZWQgYW5kIHJlYXBlZCBhdFxcbm1tL21lbXJlbWFwLmM6MzY4OiAqICAgIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSgpIHRpbWUsIG9yIGlmIHRoaXMgcm91dGluZSBmYWlscy5cXG5tbS9tZW1yZW1hcC5jLTM2OS0gKlxcbi0tXFxubW0vbWVtcmVtYXAuYy0zNzMtICovXFxubW0vbWVtcmVtYXAuYzozNzQ6dm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxubW0vbWVtcmVtYXAuYy0zNzUte1xcbi0tXFxubW0vbWVtcmVtYXAuYy0zODItXFxubW0vbWVtcmVtYXAuYzozODM6XFx0ZXJyb3IgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UsXFxubW0vbWVtcmVtYXAuYy0zODQtXFx0XFx0XFx0cGdtYXApO1xcbi0tXFxubW0vbWVtcmVtYXAuYy0zODgtfVxcbm1tL21lbXJlbWFwLmM6Mzg5OkVYUE9SVF9TWU1CT0xfR1BMKGRldm1fbWVtcmVtYXBfcGFnZXMpO1xcbm1tL21lbXJlbWFwLmMtMzkwLVxcbm1tL21lbXJlbWFwLmM9MzkxPXZvaWQgZGV2bV9tZW11bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxubW0vbWVtcmVtYXAuYy0zOTIte1xcbm1tL21lbXJlbWFwLmM6MzkzOlxcdGRldm1fcmVsZWFzZV9hY3Rpb24oZGV2LCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UsIHBnbWFwKTtcXG5tbS9tZW1yZW1hcC5jLTM5NC19XFxuLS1cXG50b29scy90ZXN0aW5nL252ZGltbS9LYnVpbGQ9MTM9bGRmbGFncy15ICs9IC0td3JhcD1fX3JlbGVhc2VfcmVnaW9uXFxudG9vbHMvdGVzdGluZy9udmRpbW0vS2J1aWxkOjE0OmxkZmxhZ3MteSArPSAtLXdyYXA9ZGV2bV9tZW1yZW1hcF9wYWdlc1xcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL0tidWlsZC0xNS1sZGZsYWdzLXkgKz0gLS13cmFwPWluc2VydF9yZXNvdXJjZVxcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jPTEwOD1zdGF0aWMgdm9pZCBkZXZfcGFnZW1hcF9wZXJjcHVfcmVsZWFzZShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKVxcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTExNC1cXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM6MTE1OnZvaWQgKl9fd3JhcF9kZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTE2LXtcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMjEtXFx0aWYgKCFuZml0X3JlcylcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM6MTIyOlxcdFxcdHJldHVybiBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGdtYXApO1xcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMjMtXFxuLS1cXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTM0LX1cXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM6MTM1OkVYUE9SVF9TWU1CT0xfR1BMKF9fd3JhcF9kZXZtX21lbXJlbWFwX3BhZ2VzKTtcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTM2LVxcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0X3Rlc3QuaD0yMTI9dm9pZCAqX193cmFwX2Rldm1fbWVtcmVtYXAoc3RydWN0IGRldmljZSAqZGV2LCByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LFxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdF90ZXN0LmgtMjEzLVxcdFxcdHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKTtcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L25maXRfdGVzdC5oOjIxNDp2b2lkICpfX3dyYXBfZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApO1xcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdF90ZXN0LmgtMjE1LXZvaWQgKl9fd3JhcF9tZW1yZW1hcChyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6Mjc6MDAuMjExNjQzMjk4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYxMjIyMDYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgZGV2bV9tZW1yZW1hcF9wYWdlc2AgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGNhbGwgc2l0ZXMgb2YgYGRldm1fbWVtcmVtYXBfcGFnZXNgLiBJIHNlZSB0aGF0IGBkcml2ZXJzL3BjaS9wMnBkbWEuY2AsIGBkcml2ZXJzL2RheC9kZXZpY2UuY2AsIGBkcml2ZXJzL252ZGltbS9wbWVtLmNgLCBgZnMvZnVzZS92aXJ0aW9fZnMuY2AsIGFuZCBgZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuY2AgYWxsIHVzZSB0aGlzIGZ1bmN0aW9uLiBOb3csIGEga2V5IHF1ZXN0aW9uIGZvciBtZSBpcyB3aGV0aGVyIHN5emthbGxlciBjYW4gcmVhbGlzdGljYWxseSB0cmlnZ2VyIGBkZXZtX21lbXJlbWFwX3BhZ2VzYC4gVGhlIGFuc3dlciBzZWVtcyB0byBiZSB5ZXMg4oCTIGNyZWF0aW5nIGEgbG9vcCBkZXZpY2UsIHBsYXlpbmcgd2l0aCBwbWVtL2RheCBpZiBlbmFibGVkLCB2aXJ0aW9fZnMsIG9yIHAycGRtYSBhcmUgcG90ZW50aWFsIGF2ZW51ZXMuXG5cbk5vdywgdGhpcyBwYXRjaCBtb2RpZmllcyBgbWVtbWFwX2luaXRfY29tcG91bmRgLCB3aGljaCBpcyBjYWxsZWQgd2l0aGluIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIFRoYXQncyBpbnRlcmVzdGluZywgYW5kIEkgbmVlZCB0byBleHBsb3JlIHRoaXMgcmVsYXRpb25zaGlwIGZ1cnRoZXIuIEkgcmVhbGl6ZSB0aGF0IGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgaXMgb25seSBhY3R1YWxseSByZWFjaGVkIGZyb20gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpZiBgcGdtYXAtXHUwMDNldm1lbW1hcF9zaGlmdGAgaXMgc2V0LiBTbywgdGhpcyBzZXRzIHVwIGEgY29uZGl0aW9uYWwgcGF0aC5cblxuVGhlcmVmb3JlLCB0aGUgbmV4dCBxdWVzdGlvbiBpcywgaXMgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCByZWFjaGFibGU/IEl0IHNlZW1zIHRoZSBjcnVjaWFsIGZhY3RvciBoZXJlIGlzIHRoZSBgdm1lbW1hcF9zaGlmdGAgdmFyaWFibGUuIElmIGl0J3Mgc2V0LCB0aGVuLCB5ZXMsIGl0IGlzLlxuXG5TbywgSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgdG8gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZSBgdm1lbW1hcF9zaGlmdGAgaXMgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTcyOSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToyNzowNS44MjM4NjY0NjhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5ODY1MTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbW1hcF9pbml0X2NvbXBvdW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tbV9pbml0LmM9MTExNT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY29tcG91bmRfbnJfcGFnZXModW5zaWduZWQgbG9uZyBwZm4sXFxuLS1cXG5tbS9tbV9pbml0LmMtMTEzMC1cXG5tbS9tbV9pbml0LmM6MTEzMTpzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcXG5tbS9tbV9pbml0LmMtMTEzMi1cXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBoZWFkX3BmbixcXG4tLVxcbm1tL21tX2luaXQuYz0xMTcyPXZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTIyMy1cXG5tbS9tbV9pbml0LmM6MTIyNDpcXHRcXHRtZW1tYXBfaW5pdF9jb21wb3VuZChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwLFxcbm1tL21tX2luaXQuYy0xMjI1LVxcdFxcdFxcdFxcdCAgICAgY29tcG91bmRfbnJfcGFnZXMocGZuLCBhbHRtYXAsIHBnbWFwKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI3OjA1LjkzMzczNzcyNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NDgxNzcwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBLZXJuZWwgTWVtb3J5IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBtZW1jcHlfbm9udGVtcG9yYWxgIGFuZCBpbnRlZ3JhdGVzIGl0IGludG8gYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYC4gRXNzZW50aWFsbHksIGl0J3MgYW4gb3B0aW1pemF0aW9uIGZvciBpbml0aWFsaXppbmcgYHN0cnVjdCBwYWdlYCBzcGVjaWZpY2FsbHkgZm9yIFpPTkVfREVWSUNFIG1lbW9yeS4gSXTigJlzIGRlZmluaXRlbHkgY29yZSBrZXJuZWwgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmssIFwiV29ydGggZnV6emluZz9cIiBBYnNvbHV0ZWx5LCBpdCdzIHBhcnQgb2YgdGhlIGtlcm5lbCdzIGZ1bmN0aW9uYWwgY29yZS5cblxuTGV04oCZcyB6ZXJvIGluIG9uIHNvbWUga2V5IHN5bWJvbHMuIEknbSB0aGlua2luZyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFuZCBgbWVtbWFwX2luaXRfY29tcG91bmRgLiBOb3csIHRoZXNlIGFyZSBjYWxsZWQgZHVyaW5nIGRldmljZSBwcm9iZSDigJMgdGhpbmsgUGVyc2lzdGVudCBNZW1vcnksIERpcmVjdCBBY2Nlc3MgKERBWCksIGFuZCBwb3RlbnRpYWxseSBwZWVyLXRvLXBlZXIgRE1BLiBBcmUgdGhleSAqaG90KiBwYXRocywgbWVhbmluZyBoZWF2aWx5IHVzZWQgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24/IE5vLCB0aGV5J3JlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucywgc28gdGhleSBhcmUgbm90IGhvdC4gQnV0LCBhcmUgdGhleSAqcmVhY2hhYmxlKj8gWWVzLCBkZWZpbml0ZWx5LiBFdmVyeSB0aW1lIGEgZGV2aWNlIHV0aWxpemluZyB0aGVzZSBtZW1vcnkgdHlwZXMgaXMgcHJvYmVkLCBvciBtZW1vcnkgaXMgaG90cGx1Z2dlZCwgdGhlc2UgZnVuY3Rpb25zIGNvbWUgaW50byBwbGF5LlxuXG5UbyBhY3R1YWxseSBnZXQgdG8gdGhpcyBjb2RlLCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5IGlzIGBDT05GSUdfWk9ORV9ERVZJQ0VgLiBUaW1lIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYENPTkZJR19aT05FX0RFVklDRWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTc5LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI3OjEwLjU4MTkxNzcwOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwNDc4NjQwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWk9ORV9ERVZJQ0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTIzMT1jb25maWcgWk9ORV9ETUEzMlxcbi0tXFxubW0vS2NvbmZpZy0xMjM1LVxcbm1tL0tjb25maWc6MTIzNjpjb25maWcgWk9ORV9ERVZJQ0VcXG5tbS9LY29uZmlnLTEyMzctXFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6Mjc6MTIuNTg2NzA4NTkxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NTQwMzYxNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIFpPTkVfREVWSUNFIGluIG1tL0tjb25maWcqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBzdHJhaWdodCBpbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGBaT05FX0RFVklDRWAgaXMgY29uZmlndXJlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBkaXJlY3RseSB0byBgbW0vS2NvbmZpZ2AuIEl0J3MgdGhlIGNlbnRyYWwgcGxhY2UgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwncyBLY29uZmlnIHN5c3RlbSwgYW5kIHRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRlZmluaXRpb24gYW5kIGFueSBhY2NvbXBhbnlpbmcgZGVwZW5kZW5jaWVzIG9yIGRlZmF1bHQgdmFsdWVzIGZvciBhIG1lbW9yeSB6b25lIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoYXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiBzeXN0ZW0gYmVoYXZpb3IuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGF0IGZpbGUgYW5kIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxMzgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToyNzoxNS41NDA3NDcwNjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTIzNixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIzNjpcXHRjb25maWcgWk9ORV9ERVZJQ0VcXG4xMjM3OlxcdFxcdGJvb2wgXFxcIkRldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcXFwiXFxuMTIzODpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHXFxuMTIzOTpcXHRcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcXG4xMjQwOlxcdFxcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcXG4xMjQxOlxcdFxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4xMjQyOlxcdFxcbjEyNDM6XFx0XFx0aGVscFxcbjEyNDQ6XFx0XFx0ICBEZXZpY2UgbWVtb3J5IGhvdHBsdWcgc3VwcG9ydCBhbGxvd3MgZm9yIGVzdGFibGlzaGluZyBwbWVtLFxcbjEyNDU6XFx0XFx0ICBvciBvdGhlciBkZXZpY2UgZHJpdmVyIGRpc2NvdmVyZWQgbWVtb3J5IHJlZ2lvbnMsIGluIHRoZVxcbjEyNDY6XFx0XFx0ICBtZW1tYXAuIFRoaXMgYWxsb3dzIHBmbl90b19wYWdlKCkgbG9va3VwcyBvZiBvdGhlcndpc2VcXG4xMjQ3OlxcdFxcdCAgXFxcImRldmljZS1waHlzaWNhbFxcXCIgYWRkcmVzc2VzIHdoaWNoIGlzIG5lZWRlZCBmb3IgREFYLCBQQ0lfUDJQRE1BLCBhbmRcXG4xMjQ4OlxcdFxcdCAgREVWSUNFX1BSSVZBVEUgZmVhdHVyZXMgYW1vbmcgb3RoZXJzLlxcbjEyNDk6XFx0XFxuMTI1MDpcXHRcXHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgcmVkdWNlIHRoZSBlbnRyb3B5IG9mIHg4NiBLQVNMUiBtZW1vcnlcXG4xMjUxOlxcdFxcdCAgcmVnaW9ucy4gRm9yIGV4YW1wbGUgLSBvbiBhIDQ2IGJpdCBzeXN0ZW0sIHRoZSBlbnRyb3B5IGdvZXMgZG93blxcbjEyNTI6XFx0XFx0ICBmcm9tIDE2IGJpdHMgdG8gMTUgYml0cy4gVGhlIGFjdHVhbCByZWR1Y3Rpb24gaW4gZW50cm9weSBkZXBlbmRzXFxuMTI1MzpcXHRcXHQgIG9uIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGJpdHMsIG9uIHByb2Nlc3NvciBmZWF0dXJlcywga2VybmVsIGNvbmZpZ1xcbjEyNTQ6XFx0XFx0ICAoNSBsZXZlbCBwYWdlIHRhYmxlKSBhbmQgcGh5c2ljYWwgbWVtb3J5IHByZXNlbnQgb24gdGhlIHN5c3RlbS5cXG4xMjU1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToyNzoxNS41NDA4NTMyOTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE3MDY3Mjg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEFuYWx5c2lzIG9mIFpPTkVfREVWSUNFIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYFpPTkVfREVWSUNFYCBhbmQgd2hhdCBpdCBuZWVkcyB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIEl0IGxvb2tzIGxpa2UgYFpPTkVfREVWSUNFYCBoYXMgYSBwcmV0dHkgY2xlYXIgZGVwZW5kZW5jeSB0cmVlIOKAkyBpdCdzIGZ1bmRhbWVudGFsbHkgbGlua2VkIHRvIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBTUEFSU0VNRU1fVk1FTU1BUGAuIE1ha2VzIHNlbnNlLCBjb25zaWRlcmluZyBpdCdzIGRlYWxpbmcgd2l0aCBtZW1vcnkgcmVnaW9ucyB0aGF0IGFyZSBhZGRlZCBhbmQgcmVtb3ZlZCBkeW5hbWljYWxseS4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBaT05FX0RFVklDRWAgaXMgZGVmaW5pdGVseSBlbmFibGVkIGluIG15IGNvbmZpZ3VyYXRpb24uXG5cbk5vdywgdGhlIHRyaWNrIGlzIGZpZ3VyaW5nIG91dCAqaG93KiB0byBhY3R1YWxseSB0cmlnZ2VyIHRoaXMgZnVuY3Rpb25hbGl0eS4gSXQgc2VlbXMgbGlrZSB3ZSdsbCBuZWVkIGEgZGV2aWNlIGRyaXZlciB0aGF0J3Mgc3BlY2lmaWNhbGx5IHdyaXR0ZW4gdG8gdXRpbGl6ZSBgZGV2bV9tZW1yZW1hcF9wYWdlc2AuIFRoYXQncyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLlxuXG5CZXlvbmQgdGhlIGRyaXZlciwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSB3aWRlciBlY29zeXN0ZW0gdGhhdCB3b3VsZCBzdXBwb3J0IHRoaXMuIFRoZSB3YXkgdG8gZG8gdGhhdCBsb29rcyB0byBiZSB0aHJvdWdoOiBgQ09ORklHX1BDSV9QMlBETUFgIG9yIGBDT05GSUdfREFYYCBvciBgQ09ORklHX05WRElNTV9EQVhgIG9yIGBDT05GSUdfREVWX0RBWGAgb3IgYENPTkZJR19GU19EQVhgLiBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZWFjaCBvZiB0aGVzZSBvcHRpb25zIGRvZXMsIGluIG9yZGVyIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5JIHRoaW5rIGEgZ29vZCBzdGFydGluZyBwb2ludCBpcyBwcm9iYWJseSBgQ09ORklHX1BDSV9QMlBETUFgLiBJIHdpbGwgc3RhcnQgYnkgbG9va2luZyBpbnRvIHRoYXQgb25lIGZpcnN0LCB0byBzZWUgd2hlcmUgaXQgbGVhZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjk4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6Mjc6MTkuNzExNTI4OTQ2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc2MzY1ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQ0lfUDJQRE1BXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3BjaS9LY29uZmlnPTE5Nz1jb25maWcgUENJRV9UUEhcXG4tLVxcbmRyaXZlcnMvcGNpL0tjb25maWctMjA1LVxcbmRyaXZlcnMvcGNpL0tjb25maWc6MjA2OmNvbmZpZyBQQ0lfUDJQRE1BXFxuZHJpdmVycy9wY2kvS2NvbmZpZy0yMDctXFx0Ym9vbCBcXFwiUENJIHBlZXItdG8tcGVlciB0cmFuc2ZlciBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToyNzoyMS41ODc5MDA0NzNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0NDE0OTIwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipQQ0lfUDJQRE1BIENvbmZpZ3VyYXRpb24gSW5zcGVjdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBQQ0kgUGVlci10by1QZWVyIERNQSBzdXBwb3J0LiBUaGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtIGlzIGEgYmVhc3QsIGJ1dCB0aGUgdXN1YWwgc3RhcnRpbmcgcG9pbnQgZm9yIFBDSS1yZWxhdGVkIG9wdGlvbnMgaXMgdGhlIGBkcml2ZXJzL3BjaS9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8gaGVhZCBvdmVyIHRoZXJlIHRvIHNlZSB3aGF0J3MgZGVmaW5lZCBmb3IgYFBDSV9QMlBETUFgLiBIb3BlZnVsbHksIHRoZSBkZXNjcmlwdGlvbiBpbiBgS2NvbmZpZ2AgaXMgY2xlYXIgZW5vdWdoIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgaXQuIEkgZXhwZWN0IGl0IHdpbGwgcmVmZXJlbmNlIHNvbWUgdW5kZXJseWluZyBETUEgY29udHJvbGxlciBvcHRpb25zIG9yIHBlcmhhcHMgc3BlY2lmaWMgaGFyZHdhcmUgcmVxdWlyZW1lbnRzLiBUaGVuIEknbGwgY29ycmVsYXRlIGl0IHdpdGggdGhlIGNvZGUgdG8gZ2V0IGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGFjdCB0byB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI0MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI3OjI0LjYzMjA1MjE4MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3BjaS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwNixcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwNjpcXHRjb25maWcgUENJX1AyUERNQVxcbiAyMDc6XFx0XFx0Ym9vbCBcXFwiUENJIHBlZXItdG8tcGVlciB0cmFuc2ZlciBzdXBwb3J0XFxcIlxcbiAyMDg6XFx0XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbiAyMDk6XFx0XFx0I1xcbiAyMTA6XFx0XFx0IyBUaGUgbmVlZCBmb3IgdGhlIHNjYXR0ZXJsaXN0IERNQSBidXMgYWRkcmVzcyBmbGFnIG1lYW5zIFBDSSBQMlBETUFcXG4gMjExOlxcdFxcdCMgcmVxdWlyZXMgNjRiaXRcXG4gMjEyOlxcdFxcdCNcXG4gMjEzOlxcdFxcdGRlcGVuZHMgb24gNjRCSVRcXG4gMjE0OlxcdFxcdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxcbiAyMTU6XFx0XFx0c2VsZWN0IE5FRURfU0dfRE1BX0ZMQUdTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI3OjI0LjYzMjExNTc2MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDg0MDEwODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkNvbnNpZGVyaW5nIERlcGVuZGVuY2llcyBmb3IgUENJX1AyUERNQSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYFBDSV9QMlBETUFgLCBhbmQgaW1tZWRpYXRlbHksIG15IG1pbmQganVtcHMgdG8gaXRzIGRlcGVuZGVuY2llcy4gSSBrbm93IGl0IGxlYW5zIGhlYXZpbHkgb24gYFpPTkVfREVWSUNFYCDigJMgdGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlIGZvciBkaXJlY3QgYWNjZXNzLiBBbmQsIG5hdHVyYWxseSwgYDY0QklUYCBpcyBlc3NlbnRpYWw7IHdlJ3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBsYXJnZSBhZGRyZXNzIHNwYWNlcyBoZXJlLiBCdXQuLi4gd2hhdCBhYm91dCB0aGUgYnJvYWRlciBjb250ZXh0PyBJcyBpdCBmdWxseSBjb21wYXRpYmxlIHdpdGggZXZlcnl0aGluZyB3aXRoaW4gYENPTkZJR19EQVhgPyBJcyBpdCBqdXN0IGEgZGVwZW5kZW5jeSBvciBpcyB0aGVyZSBhbnkgaW50ZXJhY3Rpb24/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMgdGhhdCBhcmlzZSBhdCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aG9zZSB0d28gZmVhdHVyZXM/IEkgbmVlZCB0byBkaWcgaW50byB0aGUgZGV0YWlscyBhIGJpdCBtb3JlIHRvIGJlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBjcml0aWNhbCBjb25mbGljdHMgb3IgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBQZXJoYXBzIHRoZXJlIGFyZSBzb21lIGludGVyYWN0aW9uIHNjZW5hcmlvcywgbGlrZSB3aGF0IGhhcHBlbiB3aGVuIERNQSBoYXBwZW5zIGFnYWluc3QgREFYLWVuYWJsZWQgc3RvcmFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MDgsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI3OjI4LjExNjEyOTI0MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyMDc4MTI5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RheC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9kYXgvS2NvbmZpZzoyOm1lbnVjb25maWcgREFYXFxuZHJpdmVycy9kYXgvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJEQVg6IGRpcmVjdCBhY2Nlc3MgdG8gZGlmZmVyZW50aWF0ZWQgbWVtb3J5XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToyNzoyOS45MzY5MTUzNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTAzNjEzODgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBEaXZlIGZvciBEQVggRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgREFYIGRyaXZlci4gVGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBoZWFkIGRpcmVjdGx5IHRvIHRoZSBgS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBjZW50cmFsIGh1YiBmb3IgZGVmaW5pbmcgYW5kIGRvY3VtZW50aW5nIHRoZXNlIHRoaW5ncy4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBhdCBgZHJpdmVycy9kYXgvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBkZXNjcmlwdGlvbnMgdGhhdCBnb3Zlcm4gaG93IHRoZSBEQVggZHJpdmVyIGJlaGF2ZXMgYW5kIGlzIGNvbmZpZ3VyZWQgYXQgY29tcGlsZSB0aW1lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGtub2JzIEkgaGF2ZSBhdmFpbGFibGUgdG8gdHdlYWsgdGhpcyBkcml2ZXIuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTQxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6Mjc6MzIuODQwNTMxNTAyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZGF4L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMjpcXHRtZW51Y29uZmlnIERBWFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIkRBWDogZGlyZWN0IGFjY2VzcyB0byBkaWZmZXJlbnRpYXRlZCBtZW1vcnlcXFwiXFxuICAgNDpcXHRcXHRkZWZhdWx0IG0gaWYgTlZESU1NX0RBWFxcbiAgIDU6XFx0XFxuICAgNjpcXHRpZiBEQVhcXG4gICA3OlxcdFxcbiAgIDg6XFx0Y29uZmlnIERFVl9EQVhcXG4gICA5OlxcdFxcdHRyaXN0YXRlIFxcXCJEZXZpY2UgREFYOiBkaXJlY3QgYWNjZXNzIG1hcHBpbmcgZGV2aWNlXFxcIlxcbiAgMTA6XFx0XFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiAgMTE6XFx0XFx0aGVscFxcbiAgMTI6XFx0XFx0ICBTdXBwb3J0IHJhdyBhY2Nlc3MgdG8gZGlmZmVyZW50aWF0ZWQgKHBlcnNpc3RlbmNlLCBiYW5kd2lkdGgsXFxuICAxMzpcXHRcXHQgIGxhdGVuY3kuLi4pIG1lbW9yeSB2aWEgYW4gbW1hcCgyKSBjYXBhYmxlIGNoYXJhY3RlclxcbiAgMTQ6XFx0XFx0ICBkZXZpY2UuICBQbGF0Zm9ybSBmaXJtd2FyZSBvciBhIGRldmljZSBkcml2ZXIgbWF5IGlkZW50aWZ5IGFcXG4gIDE1OlxcdFxcdCAgcGxhdGZvcm0gbWVtb3J5IHJlc291cmNlIHRoYXQgaXMgZGlmZmVyZW50aWF0ZWQgZnJvbSB0aGVcXG4gIDE2OlxcdFxcdCAgYmFzZWxpbmUgbWVtb3J5IHBvb2wuICBNYXBwaW5ncyBvZiBhIC9kZXYvZGF4WC5ZIGRldmljZSBpbXBvc2VcXG4gIDE3OlxcdFxcdCAgcmVzdHJpY3Rpb25zIHRoYXQgbWFrZSB0aGUgbWFwcGluZyBiZWhhdmlvciBkZXRlcm1pbmlzdGljLlxcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgREVWX0RBWF9QTUVNXFxuICAyMDpcXHRcXHR0cmlzdGF0ZSBcXFwiUE1FTSBEQVg6IGRpcmVjdCBhY2Nlc3MgdG8gcGVyc2lzdGVudCBtZW1vcnlcXFwiXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIExJQk5WRElNTSBcXHUwMDI2XFx1MDAyNiBOVkRJTU1fREFYIFxcdTAwMjZcXHUwMDI2IERFVl9EQVhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6Mjc6MzIuODQwNTk4MzMyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyOTIxNTg5NTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBsaWtlIHlvdXJzZWxmOlxuXG4qKkRBWCBDb25zaWRlcmF0aW9ucyoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBEaXJlY3QgQWNjZXNzIChEQVgpLiBgREVWX0RBWGAsIGRlZmluaXRlbHkgYSBzb2xpZCBhcHByb2FjaCwgcHJvdmVuIGFuZCB3ZWxsLXVuZGVyc3Rvb2QuIEl0J3MgdXN1YWxseSB0aGUgZmlyc3QgdGhpbmcgdGhhdCBjb21lcyB0byBtaW5kIHdoZW4geW91J3JlIG9wdGltaXppbmcgZm9yIGRpcmVjdCBibG9jay1kZXZpY2UgYWNjZXNzLiBCdXQuLi5hbmQgaGVyZSdzIHdoZXJlIG15IG1pbmQgc3RhcnRzIHRvIHdhbmRlci4uLndoYXQgYWJvdXQgYENPTkZJR19GU19EQVhgPyBUaGF0IG9wdGlvbiByZWFsbHkgbWFrZXMgeW91IGNvbnNpZGVyIHRoZSBmaWxlc3lzdGVtLWxldmVsIERBWCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBnaXZlcyBtb3JlIGZpbmUgZ3JhaW5lZCBjb250cm9sLlxuXG5JJ20gZXZhbHVhdGluZyB3aGljaCBnaXZlcyBtZSB0aGUgYmVzdCB0cmFkZS1vZmYgYmV0d2VlbiBpbXBsZW1lbnRhdGlvbiBjb21wbGV4aXR5LCBwZXJmb3JtYW5jZSwgYW5kIGZsZXhpYmlsaXR5IGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWMgYXBwbGljYXRpb24gc2NlbmFyaW8uIEl0J3MgYSBrZXkgY29uc2lkZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MzMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI4OjM1Ljc2MjE4OTcyNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0MzQ2MDI0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlNfREFYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTU2PWVuZGlmICMgQkxPQ0tcXG5mcy9LY29uZmlnLTU3LVxcbmZzL0tjb25maWc6NTg6Y29uZmlnIEZTX0RBWFxcbmZzL0tjb25maWctNTktXFx0Ym9vbCBcXFwiRmlsZSBzeXN0ZW0gYmFzZWQgRGlyZWN0IEFjY2VzcyAoREFYKSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvS2NvbmZpZy04OS1cXG5mcy9LY29uZmlnOjkwOmNvbmZpZyBGU19EQVhfUE1EXFxuZnMvS2NvbmZpZy05MS1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI4OjM4LjAwNTY1Njc2NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODE5MTgyNjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYEZTX0RBWGAgS2NvbmZpZyBPcHRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBjb25maWd1cmVkIGZvciBEaXJlY3QgQWNjZXNzIChEQVgpIGZpbGUgc3lzdGVtcy4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyOiBgZnMvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgYWxsIHRoZSBmaWxlIHN5c3RlbS1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gSSB3YW50IHRvIGNoZWNrIGZvciB0aGUgcHJlc2VuY2UgYW5kIGRldGFpbHMgb2YgYEZTX0RBWGAuIEknbSBleHBlY3RpbmcgdG8gZmluZCBpdHMgZGVmaW5pdGlvbiB0aGVyZS4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoaXMgZmlsZSB3aWxsIGNvbnRhaW4gdGhlIG5lY2Vzc2FyeSBzZXR0aW5ncyBjb250cm9sbGluZyBob3cgREFYIHN1cHBvcnQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhbmQgYW55IGFjY29tcGFueWluZyBkZXBlbmRlbmNpZXMgb3IgZGVmYXVsdCB2YWx1ZXMuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3NDksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToyODo0MC44MjQ4NDEzMjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1OCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1ODpcXHRjb25maWcgRlNfREFYXFxuICA1OTpcXHRcXHRib29sIFxcXCJGaWxlIHN5c3RlbSBiYXNlZCBEaXJlY3QgQWNjZXNzIChEQVgpIHN1cHBvcnRcXFwiXFxuICA2MDpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbiAgNjE6XFx0XFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbiAgNjI6XFx0XFx0c2VsZWN0IEZTX0lPTUFQXFxuICA2MzpcXHRcXHRzZWxlY3QgREFYXFxuICA2NDpcXHRcXHRoZWxwXFxuICA2NTpcXHRcXHQgIERpcmVjdCBBY2Nlc3MgKERBWCkgY2FuIGJlIHVzZWQgb24gbWVtb3J5LWJhY2tlZCBibG9jayBkZXZpY2VzLlxcbiAgNjY6XFx0XFx0ICBJZiB0aGUgYmxvY2sgZGV2aWNlIHN1cHBvcnRzIERBWCBhbmQgdGhlIGZpbGVzeXN0ZW0gc3VwcG9ydHMgREFYLFxcbiAgNjc6XFx0XFx0ICB0aGVuIHlvdSBjYW4gYXZvaWQgdXNpbmcgdGhlIHBhZ2VjYWNoZSB0byBidWZmZXIgSS9Pcy4gIFR1cm5pbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6Mjg6NDAuODI0OTA4MDI4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MjUxNDA4MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBSZXZpZXcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29uZmlndXJhdGlvbiBhbmQgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGF0IGZpcnN0IGdsYW5jZS4gSXQgbG9va3MgbGlrZSBgRlNfREFYYCBpcyBidWlsdCBvbiB0b3Agb2YgYFpPTkVfREVWSUNFYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gVG8gZW5hYmxlIGV2ZXJ5dGhpbmcgY29ycmVjdGx5LCBJIG5lZWQgdG8gaW5jbHVkZSBgWk9ORV9ERVZJQ0VgLCBgUENJX1AyUERNQWAsIGBEQVhgLCBgREVWX0RBWGAsIGFuZCBgRlNfREFYYCBpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBUaGF0IGNvdmVycyB0aGUgZGVwZW5kZW5jaWVzIG5pY2VseS5cblxuQnV0IHRoZW4gdGhlcmUncyB0aGlzIGNoYW5nZSB0byBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgLiBBaCwgYG1lbWNweV9ub250ZW1wb3JhbGAgdXNpbmcgYG1vdm50aWAgaW5zdHJ1Y3Rpb25zLiBUaGlzIGlzIHg4Ni1zcGVjaWZpYywgd2hpY2ggbWVhbnMgSSBuZWVkIHRvIGJlIGNhcmVmdWwuIEkga25vdyBJIG5lZWQgdG8gbG9vayBmb3IgYW55IGV4aXN0aW5nIGNvbmZpZyBvcHRpb25zIGFyb3VuZCBgbWVtY3B5X25vbnRlbXBvcmFsYCwgdG8gZW5zdXJlIHRoaXMgaXMgaGFuZGxlZCBjb3JyZWN0bHkuIExldCdzIHNlZS4uLiBpdCdzIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFYC4gT2theSwgc28gdGhhdCdzIHRoZSBrZXkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB0YWtlIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uc3RyYWludCBpbnRvIGNvbnNpZGVyYXRpb24uIEkgbmVlZCB0byByZXZpZXcgYW5kIGVuc3VyZSB0aGF0IHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpcyBhcHByb3ByaWF0ZWx5IGhhbmRsZWQgdG8gcHJldmVudCBhbnkgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjExMywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI4OjQ1LjQ1MDA1MDY0MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzOTkyMDQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZz01NDI9Y29uZmlnIFVBQ0NFU1NfTUVNQ1BZXFxuLS1cXG5saWIvS2NvbmZpZy01NDQtXFxubGliL0tjb25maWc6NTQ1OmNvbmZpZyBBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcXG5saWIvS2NvbmZpZy01NDYtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToyODo0Ny4yODk5NzY2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDI1NzY1NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFYCBpbiB0aGUgS2NvbmZpZyoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBsaWIvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gbG9va2luZyBmb3IgdGhlIGRlZmluaXRpb24sIG9yIGF0IGxlYXN0IHRoZSBwcmVzZW5jZSwgb2YgYEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRWAuIFRoaXMgaXMgdGhlIGtleSBwaWVjZSBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gSSdtIGFzc3VtaW5nLCBnaXZlbiB0aGUgbmFtaW5nLCB0aGF0IGl0J3MgcmVsYXRlZCB0byBjYWNoZSBjb2hlcmVuY3kgYW5kIGRhdGEgYWNjZXNzLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvbnRleHQgb2YgdXNlci1zcGFjZSBpbnRlcmFjdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaXMgc29tZXRoaW5nIGJlaW5nIGRlZmluZWQgYXQgdGhlIGFyY2hpdGVjdHVyZSBsZXZlbC4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcCBmb3IgZmlndXJpbmcgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIHJlbGF0aW5nIHRvIHRoaXMgZmVhdHVyZS4gSSdsbCBuZWVkIHRvIHNlZSBob3cgaXQncyBkZWZpbmVkLCB1bmRlciB3aGF0IGNvbmRpdGlvbnMgaXQncyBlbmFibGVkLCBhbmQgd2hpY2ggYXJjaGl0ZWN0dXJlcyBvciBib2FyZHMgYXJlIGFmZmVjdGVkLiBMZXQncyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBoYXMgdG8gc2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYxMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI4OjUwLjUzMjU1NjI4NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTQ1LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTQ1OlxcdGNvbmZpZyBBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcXG4gNTQ2OlxcdFxcdGJvb2xcXG4gNTQ3OlxcdFxcbiA1NDg6XFx0IyBhcmNoIGhhcyBhIGNvbmNlcHQgb2YgYSByZWNvdmVyYWJsZSBzeW5jaHJvbm91cyBleGNlcHRpb24gZHVlIHRvIGFcXG4gNTQ5OlxcdCMgbWVtb3J5LXJlYWQgZXJyb3IgbGlrZSB4ODYgbWFjaGluZS1jaGVjayBvciBBUk0gZGF0YS1hYm9ydCwgYW5kXFxuIDU1MDpcXHQjIGltcGxlbWVudHMgY29weV9tY190b197dXNlcixrZXJuZWx9IHRvIGFib3J0IGFuZCByZXBvcnRcXG4gNTUxOlxcdCMgJ2J5dGVzLXRyYW5zZmVycmVkJyBpZiB0aGF0IGV4Y2VwdGlvbiBmaXJlcyB3aGVuIGFjY2Vzc2luZyB0aGUgc291cmNlXFxuIDU1MjpcXHQjIGJ1ZmZlci5cXG4gNTUzOlxcdGNvbmZpZyBBUkNIX0hBU19DT1BZX01DXFxuIDU1NDpcXHRcXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI4OjUwLjUzMjY2MDg5NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDAxMDIwNTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqQXJjaGl0ZWN0dXJlIFNlbGVjdGlvbiBBbmFseXNpcyoqXG5cbk9rYXksIHNvIHNvbWV0aGluZyBoYXMgYmVlbiBzZWxlY3RlZCwgYW5kIHRoZSBrZXkgZHJpdmVyIHNlZW1zIHRvIGJlIFwiYXJjaGl0ZWN0dXJlcy5cIiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBzZWxlY3Rpb24gcHJvY2Vzcy4gV2hvIGV4YWN0bHkgbWFkZSB0aGlzIGNob2ljZT8gV2hhdCBhcmNoaXRlY3RzIG9yIGFyY2hpdGVjdHVyYWwgdGVhbXMgd2VyZSBpbnZvbHZlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlY2lzaW9uLW1ha2Vycy4gTXkgYW5hbHlzaXMgd2lsbCBiZWdpbiBieSBpZGVudGlmeWluZyB0aGUgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlcyBvciBhcmNoaXRlY3R1cmFsIHN0eWxlcyB0aGF0IGluZmx1ZW5jZWQgdGhpcyBzZWxlY3Rpb24uIEFyZSB3ZSB0YWxraW5nIGFib3V0IHNvZnR3YXJlIGFyY2hpdGVjdHVyZXMsIHN5c3RlbSBhcmNoaXRlY3R1cmVzLCBuZXR3b3JrIGFyY2hpdGVjdHVyZXMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBVbmRlcnN0YW5kaW5nIHRoZSBkb21haW4gaXMgY3J1Y2lhbC4gRnJvbSB0aGVyZSwgSSdsbCB0cnkgdG8gZmluZCBvdXQgd2hvIHRoZSBrZXkgcGxheWVycyBpbiB0aG9zZSBhcmNoaXRlY3R1cmFsIGNvbnRleHRzIGFyZS4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGluZm9ybSBteSBpbnZlc3RpZ2F0aW9uIGludG8gdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIGRlY2lzaW9uIGFuZCBhbnkgcG90ZW50aWFsIGltcGxpY2F0aW9ucyB0aGF0IHRoZSBhcmNoaXRlY3R1cmUgc2VsZWN0aW9uIG1pZ2h0IGhhdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDYwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToyODo1My41MzM2ODQ0ODZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NDE4Nzc0NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9LY29uZmlnPTE5MjI9Y29uZmlnIEFSTTY0X1BNRU1cXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xOTI0LVxcdHNlbGVjdCBBUkNIX0hBU19QTUVNX0FQSVxcbmFyY2gvYXJtNjQvS2NvbmZpZzoxOTI1OlxcdHNlbGVjdCBBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcXG5hcmNoL2FybTY0L0tjb25maWctMTkyNi1cXHRoZWxwXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWctMTU4LVxcdHNlbGVjdCBBUkNIX0hBU19USUNLX0JST0FEQ0FTVFxcdFxcdGlmIEdFTkVSSUNfQ0xPQ0tFVkVOVFNfQlJPQURDQVNUXFxuYXJjaC9wb3dlcnBjL0tjb25maWc6MTU5OlxcdHNlbGVjdCBBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xNjAtXFx0c2VsZWN0IEFSQ0hfSEFTX1VCU0FOXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTU4PWNvbmZpZyBYODZcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMTAyLVxcdHNlbGVjdCBBUkNIX0hBU19OT05MRUFGX1BNRF9ZT1VOR1xcdGlmIFBHVEFCTEVfTEVWRUxTIFxcdTAwM2UgMlxcbmFyY2gveDg2L0tjb25maWc6MTAzOlxcdHNlbGVjdCBBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcXHRpZiBYODZfNjRcXG5hcmNoL3g4Ni9LY29uZmlnLTEwNC1cXHRzZWxlY3QgQVJDSF9IQVNfQ09QWV9NQ1xcdFxcdFxcdGlmIFg4Nl82NFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQwMToyODo1Ni4zNzU1Njc5NzJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc0NTA0MjAyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyB0aGlzIGNvZGUgaXMgYmVpbmcgdGFyZ2V0ZWQgc3BlY2lmaWNhbGx5IGZvciBgWDg2XzY0YCBhcmNoaXRlY3R1cmUsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHdlJ3JlIGxpa2VseSBkZWFsaW5nIHdpdGguIFRoZSBmYWN0IHRoYXQgaXQncyBzZWxlY3RlZCBsaWtlIHRoYXQgaW5kaWNhdGVzIGEgcmVhbCwgbGl2ZSBzY2VuYXJpby4gVGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGFuZCByaXBlIGZvciBmdXp6aW5nLiBXZSBoYXZlIGEgc2V0IG9mIGludGVyZXN0aW5nIGZvY3VzIHN5bWJvbHMgaWRlbnRpZmllZDogYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCwgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCwgYHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0YCwgYW5kIGB6b25lX2RldmljZV9wYWdlX2luaXRfc2xvd2AuIFRoZXNlIHNlZW0gbGlrZSBnb29kIGVudHJ5IHBvaW50cyB0byBleHBvc2UgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzLiBIb3dldmVyLCBoYW5nIG9uLi4uIGB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZWAgaXMgbWFya2VkIGFzIGBzdGF0aWMgaW5saW5lYD8gVGhhdCBtZWFucyBpdCdzIHByb2JhYmx5IGV4cGFuZGVkIGF0IHRoZSBjYWxsIHNpdGUsIHdoaWNoIGhhcyBpbXBsaWNhdGlvbnMgZm9yIGhvdyB0aGUgZnV6emVyIHdpbGwgYmVoYXZlIGFuZCBmb3IgY29udHJvbCBmbG93IHRyYWNraW5nLiBHb3R0YSBjaGVjayBgbW0vbW1faW5pdC5jYCB0byBzZWUgaG93IGl0J3MgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MDEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6Mjk6MDAuMTIwNjEyNTg1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tbV9pbml0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA4OCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA4ODpcXHRcXHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHRlbXBsYXRlLCBwZm4pO1xcbjEwODk6XFx0I2lmZGVmIFdBTlRfUEFHRV9WSVJUVUFMXFxuMTA5MDpcXHRcXHRpZiAoIWlzX2hpZ2htZW1faWR4KFpPTkVfREVWSUNFKSlcXG4xMDkxOlxcdFxcdFxcdHNldF9wYWdlX2FkZHJlc3ModGVtcGxhdGUsIF9fdmEocGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpKTtcXG4xMDkyOlxcdCNlbmRpZlxcbjEwOTM6XFx0fVxcbjEwOTQ6XFx0XFxuMTA5NTpcXHRzdGF0aWMgdm9pZCB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4xMDk2OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpXFxuMTA5NzpcXHR7XFxuMTA5ODpcXHRcXHQvKlxcbjEwOTk6XFx0XFx0ICogJ3RlbXBsYXRlJyBjYXJyaWVzIHRoZSBpbnZhcmlhbnQgcG9ydGlvbiBvZiBhIFpPTkVfREVWSUNFIHN0cnVjdFxcbjExMDA6XFx0XFx0ICogcGFnZS4gVXBkYXRlIHRoZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiBwbGFjZSBiZWZvcmUgY29weWluZyBpdFxcbjExMDE6XFx0XFx0ICogdG8gdGhlIGRlc3RpbmF0aW9uIHBhZ2UuXFxuMTEwMjpcXHRcXHQgKi9cXG4xMTAzOlxcdFxcdHpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlKHRlbXBsYXRlLCBwZm4pO1xcbjExMDQ6XFx0XFx0bWVtY3B5X25vbnRlbXBvcmFsKHBhZ2UsIHRlbXBsYXRlLCBzaXplb2YoKnBhZ2UpKTtcXG4xMTA1OlxcdH1cXG4xMTA2OlxcdFxcbjExMDc6XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMDE6Mjk6MDAuMTIwNzU2ODI1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NTU0NjMzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTeW1ib2wgTGFuZHNjYXBlKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGNvZGUuIEknbSBzZWVpbmcgYSBwYXR0ZXJuIGhlcmUgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGV2aWNlIGludGVncmF0aW9uLiBGaXJzdCwgbG9va2luZyBhdCB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zLCBgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVgIGlzIGRlY2xhcmVkIHN0YXRpYywgYnV0ICpub3QqIGlubGluZSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIE9uIHRoZSBvdGhlciBoYW5kLCBgem9uZV9kZXZpY2VfdGFpbF9wYWdlX2luaXRgIGlzIHN0YXRpYyBpbmxpbmUsIGFuZCBgem9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3dgIGlzIHNpbXBseSBzdGF0aWMuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIHRyYWNpbmcgY2FsbHMgYW5kIHN5bWJvbCB2aXNpYmlsaXR5LlxuXG5NeSBpbml0aWFsIGZvY3VzIG5lZWRzIHRvIGJlIG9uOlxuKiAgIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWBcbiogICBgbWVtbWFwX2luaXRfY29tcG91bmRgXG4qICAgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYFxuKiAgIGB6b25lX2RldmljZV9wYWdlX2luaXRfc2xvd2BcblxuV2FpdCwgaGFuZyBvbi4gVGhpcyBwYXRjaCBhbHNvIG1vZGlmaWVzIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAuIEl0J3MgYWRkaW5nIGEgYnVuY2ggb2YgbmV3IGlubGluZSBmdW5jdGlvbnMgLSBgbW92bnRpXzhgLCBgbW92bnRpXzE2YCwgYG1vdm50aV8zMmAsIGBtb3ZudGlfNjRgLCBgbWVtY3B5X2ZsdXNoY2FjaGVgLCBhbmQgYG1lbWNweV9ub250ZW1wb3JhbGAuIFRoZXNlIGFyZSAqYWxsKiBgc3RhdGljIF9fYWx3YXlzX2lubGluZWAsIHNvIHRoZXkgd29uJ3QgaGF2ZSB0aGVpciBvd24gZXhwb3J0ZWQgc3ltYm9scy4gVGhhdCByZWluZm9yY2VzIG15IG9yaWdpbmFsIGxpc3QgYXMgdGhlIGtleSBzeW1ib2xzIHRvIHRyYWNrLlxuXG5Ob3csIEkgbmVlZCB0byBjb25maXJtIHRoZSByZWFjaGFiaWxpdHkgb2YgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gTGV0J3Mgc2VlLi4uIFllcywgaXQncyBjYWxsZWQgZnJvbSBgcGFnZW1hcF9yYW5nZWAgaW4gYG1tL21lbXJlbWFwLmNgLiBBbmQgYHBhZ2VtYXBfcmFuZ2VgIGlzIGNhbGxlZCBmcm9tIGBkZXZtX21lbXJlbWFwX3BhZ2VzYC4gRXhjZWxsZW50LiBgZGV2bV9tZW1yZW1hcF9wYWdlc2AgaXMgZXhwb3J0ZWQsIGFuZCBpdCdzIHVzZWQgYnkgdmFyaW91cyBkcml2ZXJzLiBHb29kLCB0aGlzIGlzIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludC5cblxuRmluYWxseSwgcmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24sIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyByZWxhdGVkIHRvIHRoZXNlIG9wdGlvbnM6IGBaT05FX0RFVklDRWAsIGBQQ0lfUDJQRE1BYCwgYERBWGAsIGBERVZfREFYYCwgYW5kIGBGU19EQVhgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBzeXN0ZW0gaXMgcHJvcGVybHkgY29uZmlndXJlZC4gTGV0J3MgbWFrZSBzdXJlIGBaT05FX0RFVklDRWAgZG9lc24ndCBoYXZlIGFueSBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGFkZHJlc3MuIEhtbW0sIHllcywgaXQgZGVwZW5kcyBvbiBgTUVNT1JZX0hPVFBMVUdgLCBhbmQgYE1FTU9SWV9IT1RSRU1PVkVgIGFuZCBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBTbywgdG8gYmUgc2FmZSwgSSdsbCBhZGQgYE1FTU9SWV9IT1RQTFVHYCBhbmQgYFNQQVJTRU1FTV9WTUVNTUFQYCB0byB0aGUgY29uZmlnLCBqdXN0IGluIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4Mjk0LCJPdXRwdXRUb2tlbnMiOjE3NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDAxOjI5OjA3Ljg3NjIyMjUwN1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NjQwMDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiUENJX1AyUERNQVwiLFxuICAgIFwiREFYXCIsXG4gICAgXCJERVZfREFYXCIsXG4gICAgXCJGU19EQVhcIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCIsXG4gICAgXCJTUEFSU0VNRU1fVk1FTU1BUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW1hcF9pbml0X3pvbmVfZGV2aWNlXCIsXG4gICAgXCJtZW1tYXBfaW5pdF9jb21wb3VuZFwiLFxuICAgIFwiem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVcIixcbiAgICBcInpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9zbG93XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb3B0aW1pemVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBaT05FX0RFVklDRSBwYWdlcyBieSB1c2luZyBhIHRlbXBsYXRlIGFuZCBub24tdGVtcG9yYWwgbWVtY3B5LiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgd2hlbiBwcm9iaW5nIGRldmljZXMgbGlrZSBQTUVNLCBEQVgsIG9yIFBDSSBQMlBETUEuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIlBDSV9QMlBETUFcIixcbiAgICBcIkRBWFwiLFxuICAgIFwiREVWX0RBWFwiLFxuICAgIFwiRlNfREFYXCIsXG4gICAgXCJNRU1PUllfSE9UUExVR1wiLFxuICAgIFwiU1BBUlNFTUVNX1ZNRU1NQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1tYXBfaW5pdF96b25lX2RldmljZVwiLFxuICAgIFwibWVtbWFwX2luaXRfY29tcG91bmRcIixcbiAgICBcInpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlXCIsXG4gICAgXCJ6b25lX2RldmljZV9wYWdlX2luaXRfc2xvd1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgWk9ORV9ERVZJQ0UgcGFnZXMgYnkgdXNpbmcgYSB0ZW1wbGF0ZSBhbmQgbm9uLXRlbXBvcmFsIG1lbWNweS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIHdoZW4gcHJvYmluZyBkZXZpY2VzIGxpa2UgUE1FTSwgREFYLCBvciBQQ0kgUDJQRE1BLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xzxd[1] Phase: Succeeded StartedAt: 2026-07-28 01:29:20 +0000 UTC FinishedAt: 2026-07-28 01:29:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xzxd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-28 01:29:20 +0000 UTC FinishedAt: 2026-07-28 01:29:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xzxd[2] Phase: Succeeded StartedAt: 2026-07-28 01:29:20 +0000 UTC FinishedAt: 2026-07-28 06:17:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-28 01:29:20 +0000 UTC FinishedAt: 2026-07-28 06:17:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-28 01:29:20 +0000 UTC FinishedAt: 2026-07-28 01:29:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-28 01:29:20 +0000 UTC FinishedAt: 2026-07-28 01:29:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5xzxd/series-workflow5xzxd-convert-artifact-1444757405/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-28 01:29:30 +0000 UTC FinishedAt: 2026-07-28 02:12:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-28 01:29:30 +0000 UTC FinishedAt: 2026-07-28 02:12:56 +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:*36b629cb-5a78-4da7-9815-c2891c810f02,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-workflow5xzxd/series-workflow5xzxd-convert-artifact-1444757405/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": "80e6eae9-dc6b-4f66-ab9c-76733c6661c3", "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-workflow5xzxd/series-workflow5xzxd-build-action-1456582867/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-28 01:29:30 +0000 UTC FinishedAt: 2026-07-28 02:12:46 +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:*36b629cb-5a78-4da7-9815-c2891c810f02,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-workflow5xzxd/series-workflow5xzxd-convert-artifact-1444757405/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": "80e6eae9-dc6b-4f66-ab9c-76733c6661c3", "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-workflow5xzxd/series-workflow5xzxd-build-action-1456582867/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-28 02:12:56 +0000 UTC FinishedAt: 2026-07-28 02:12:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-28 02:12:56 +0000 UTC FinishedAt: 2026-07-28 02:12:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-28 02:12:56 +0000 UTC FinishedAt: 2026-07-28 02:13:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-28 02:12:56 +0000 UTC FinishedAt: 2026-07-28 02:13:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5xzxd/series-workflow5xzxd-convert-artifact-616152696/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-28 02:13:17 +0000 UTC FinishedAt: 2026-07-28 02:15:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-28 02:13:17 +0000 UTC FinishedAt: 2026-07-28 02:15:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*80e6eae9-dc6b-4f66-ab9c-76733c6661c3,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-workflow5xzxd/series-workflow5xzxd-build-action-1456582867/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-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-28 02:15:22 +0000 UTC FinishedAt: 2026-07-28 02:15:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-28 02:15:22 +0000 UTC FinishedAt: 2026-07-28 02:15:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-28 02:15:22 +0000 UTC FinishedAt: 2026-07-28 03:06:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-28 02:15:22 +0000 UTC FinishedAt: 2026-07-28 03:06:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*36b629cb-5a78-4da7-9815-c2891c810f02,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-workflow5xzxd/series-workflow5xzxd-convert-artifact-616152696/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": "5a53d5fa-fa09-4036-8303-c30731884f0c", "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-workflow5xzxd/series-workflow5xzxd-build-action-2925749092/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-28 02:15:22 +0000 UTC FinishedAt: 2026-07-28 03:06:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*36b629cb-5a78-4da7-9815-c2891c810f02,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-workflow5xzxd/series-workflow5xzxd-convert-artifact-616152696/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": "5a53d5fa-fa09-4036-8303-c30731884f0c", "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-workflow5xzxd/series-workflow5xzxd-build-action-2925749092/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-28 03:06:33 +0000 UTC FinishedAt: 2026-07-28 03:06:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-28 03:06:33 +0000 UTC FinishedAt: 2026-07-28 03:06:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-28 03:06:33 +0000 UTC FinishedAt: 2026-07-28 03:08:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-28 03:06:33 +0000 UTC FinishedAt: 2026-07-28 03:08:28 +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:*5a53d5fa-fa09-4036-8303-c30731884f0c,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-workflow5xzxd/series-workflow5xzxd-build-action-2925749092/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-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-28 03:08:35 +0000 UTC FinishedAt: 2026-07-28 06:17:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-28 03:08:35 +0000 UTC FinishedAt: 2026-07-28 06:17:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},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:*80e6eae9-dc6b-4f66-ab9c-76733c6661c3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5a53d5fa-fa09-4036-8303-c30731884f0c,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-workflow5xzxd/series-workflow5xzxd-build-action-1456582867/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-workflow5xzxd/series-workflow5xzxd-build-action-2925749092/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-28 03:08:35 +0000 UTC FinishedAt: 2026-07-28 03:08:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-28 03:08:35 +0000 UTC FinishedAt: 2026-07-28 03:08:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},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-workflow5xzxd/series-workflow5xzxd-convert-artifact-3840593873/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-28 03:08:35 +0000 UTC FinishedAt: 2026-07-28 03:08:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-28 03:08:35 +0000 UTC FinishedAt: 2026-07-28 03:08:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-28 03:08:35 +0000 UTC FinishedAt: 2026-07-28 03:08:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-28 03:08:46 +0000 UTC FinishedAt: 2026-07-28 06:17:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5xzxd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memmap_init_zone_device","memmap_init_compound","zone_device_page_init_from_template","zone_device_page_init_slow"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9c66085e6dcfb44b70970aa4e323003fc7f2b738","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE","PCI_P2PDMA","DAX","DEV_DAX","FS_DAX","MEMORY_HOTPLUG","SPARSEMEM_VMEMMAP"],"series_id":"d45c4c63-98e4-43f2-a6aa-e81aa8dfb6f9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-28 03:08:46 +0000 UTC FinishedAt: 2026-07-28 06:16:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*80e6eae9-dc6b-4f66-ab9c-76733c6661c3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5a53d5fa-fa09-4036-8303-c30731884f0c,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-workflow5xzxd/series-workflow5xzxd-build-action-1456582867/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-workflow5xzxd/series-workflow5xzxd-build-action-2925749092/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-workflow5xzxd/series-workflow5xzxd-convert-artifact-3840593873/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,}