Name: series-workflowlv4fr Phase: Succeeded StartedAt: 2026-08-17 00:03:11 +0000 UTC FinishedAt: 2026-08-17 03:48:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlv4fr[0] Phase: Succeeded StartedAt: 2026-08-17 00:03:11 +0000 UTC FinishedAt: 2026-08-17 00:07:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlv4fr[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 00:03:11 +0000 UTC FinishedAt: 2026-08-17 00:07:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "e6a5d573d24cd375e09d24f136523cb3cc85c9d3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OF", "PHYLIB", "OF_MDIO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "e6a5d573d24cd375e09d24f136523cb3cc85c9d3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OF", "PHYLIB", "OF_MDIO" ], "series_id": "5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "device_links_drop_sync_state_only", "__of_mdiobus_register", "device_links_driver_bound" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09GJiMzNDssCiAgICAmIzM0O1BIWUxJQiYjMzQ7LAogICAgJiMzNDtPRl9NRElPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5JiMzNDssCiAgICAmIzM0O19fb2ZfbWRpb2J1c19yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRldmljZSBsaW5rIGZyYW1ld29yaywgTURJTyBidXMgcmVnaXN0cmF0aW9uLCBhbmQgT0YgcHJvcGVydHkgcGFyc2luZyB0byBoYW5kbGUgc3luYy1zdGF0ZS1vbmx5IGxpbmtzIGFuZCBldGhlcm5ldC1waHktcGFja2FnZSBub2Rlcy4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGtlcm5lbC1pbnRlcm5hbCBzdHJ1Y3R1cmVzIChkZXZpY2UgbGlua3MsIGRldmljZSB0cmVlIG5vZGVzLCBsaXN0cykgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBtb2RpZnkgYm91bmRzIGNoZWNraW5nIG9yIGJ1ZmZlciBhbGxvY2F0aW9ucyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbG9ja2luZyBpc3N1ZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkZXZpY2UgbGluayBtYW5hZ2VtZW50IGZ1bmN0aW9uIGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgIGFuZCBtb2RpZmllcyBgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZGAgYW5kIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgIHRvIHVzZSBpdC4gSXQgYWxzbyBjaGFuZ2VzIE9GIHByb3BlcnR5IHBhcnNpbmcgdG8gaGFuZGxlICYjMzk7ZXRoZXJuZXQtcGh5LXBhY2thZ2UmIzM5OyBub2Rlcy4gVGhlc2UgYXJlIGNvcmUga2VybmVsIGFuZCBzdWJzeXN0ZW0gY2hhbmdlcyB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTdiOWYxNGVmNTBkNjNlMTY0ZTQyY2RjNmQxZDUyMzJiZDVlZTMxOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDAwOjA1OjA0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jb3JlLmMgYi9kcml2ZXJzL2Jhc2UvY29yZS5jXG5pbmRleCA0ZDAyNjY4Mjk0NGYyLi42MjdmY2ZhMjc0ZjBlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9iYXNlL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9iYXNlL2NvcmUuY1xuQEAgLTEzMDUsNiAmIzQzOzEzMDUsNTcgQEAgc3RhdGljIHZvaWQgZGV2aWNlX2xpbmtfZHJvcF9tYW5hZ2VkKHN0cnVjdCBkZXZpY2VfbGluayAqbGluaylcbiBcdGtyZWZfcHV0KFx1MDAyNmxpbmstXHUwMDNla3JlZiwgX19kZXZpY2VfbGlua19kZWwpO1xuIH1cbiBcbiYjNDM7LyogQ2FsbGVyIG11c3QgaG9sZCB0aGUgZGV2aWNlIGxpbmtzIHdyaXRlIGxvY2suICovXG4mIzQzO3N0YXRpYyB2b2lkIF9fZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KHN0cnVjdCBkZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHRcdFx0c3RydWN0IGxpc3RfaGVhZCAqc3luY19saXN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZV9saW5rICpsaW5rLCAqbG47XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsaW5rLCBsbiwgXHUwMDI2ZGV2LVx1MDAzZWxpbmtzLnN1cHBsaWVycywgY19ub2RlKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZGV2aWNlICpzdXBwbGllcjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWRldmljZV9saW5rX3Rlc3QobGluaywgRExfRkxBR19NQU5BR0VEKSB8fFxuJiM0MztcdFx0ICAgICFkZXZpY2VfbGlua190ZXN0KGxpbmssIERMX0ZMQUdfU1lOQ19TVEFURV9PTkxZKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIERMX0ZMQUdfU1lOQ19TVEFURV9PTkxZIGV4Y2x1ZGVzIGFsbCBvdGhlciBtYW5hZ2VkIGxpbmsgZmxhZ3MsXG4mIzQzO1x0XHQgKiBzbyBpdCBpcyBzYWZlIHRvIGRyb3AgdGhlIG1hbmFnZWQgbGluayBjb21wbGV0ZWx5LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRzdXBwbGllciA9IGxpbmstXHUwMDNlc3VwcGxpZXI7XG4mIzQzO1x0XHRkZXZpY2VfbGlua19kcm9wX21hbmFnZWQobGluayk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGRlZmVyX3N5bmNfc3RhdGVfY291bnQpXG4mIzQzO1x0XHRcdF9fZGV2aWNlX2xpbmtzX3N1cHBsaWVyX2RlZmVyX3N5bmMoc3VwcGxpZXIpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRfX2RldmljZV9saW5rc19xdWV1ZV9zeW5jX3N0YXRlKHN1cHBsaWVyLCBzeW5jX2xpc3QpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seSAtIERyb3AgbWFuYWdlZCBzeW5jLXN0YXRlLW9ubHkgbGlua3NcbiYjNDM7ICogQGRldjogQ29uc3VtZXIgZGV2aWNlIHdob3NlIHByb3h5IGxpbmtzIHNob3VsZCBiZSBkcm9wcGVkXG4mIzQzOyAqXG4mIzQzOyAqIEZyYW1ld29ya3Mgd2hpY2ggcG9wdWxhdGUgY2hpbGQgZGV2aWNlcyBiZWxvdyBhIGRyaXZlcmxlc3MgZGV2aWNlIGNhbiBjYWxsXG4mIzQzOyAqIHRoaXMgYWZ0ZXIgYWRkaW5nIGFsbCBvZiB0aGUgY2hpbGRyZW4uIFRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgYWNxdWlyZWQgdGhlaXJcbiYjNDM7ICogb3duIGxpbmtzIGJ5IHRoZW4sIHNvIHRoZSB0ZW1wb3JhcnkgbGlua3Mgd2hpY2ggb25seSBwcmV2ZW50IHN1cHBsaWVycyBmcm9tXG4mIzQzOyAqIHJlY2VpdmluZyBzeW5jX3N0YXRlKCkgY2FsbGJhY2tzIGFyZSBubyBsb25nZXIgbmVlZGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZS1ldmFsdWF0ZSBlYWNoIGFmZmVjdGVkIHN1cHBsaWVyIGZvciBhIHN5bmNfc3RhdGUoKSBjYWxsYmFjayBhZnRlciBpdHNcbiYjNDM7ICogbGluayBpcyBkcm9wcGVkLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkoc3RydWN0IGRldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0TElTVF9IRUFEKHN5bmNfbGlzdCk7XG4mIzQzO1xuJiM0MztcdGRldmljZV9saW5rc193cml0ZV9sb2NrKCk7XG4mIzQzO1x0X19kZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkoZGV2LCBcdTAwMjZzeW5jX2xpc3QpO1xuJiM0MztcdGRldmljZV9saW5rc193cml0ZV91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0ZGV2aWNlX2xpbmtzX2ZsdXNoX3N5bmNfbGlzdChcdTAwMjZzeW5jX2xpc3QsIE5VTEwpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seSk7XG4mIzQzO1xuIHN0YXRpYyBzc2l6ZV90IHdhaXRpbmdfZm9yX3N1cHBsaWVyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4gXHRcdFx0XHRcdCBjaGFyICpidWYpXG5AQCAtMTQxOCw2ICYjNDM7MTQ2OSw4IEBAIHZvaWQgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRlbHNlXG4gXHRcdF9fZGV2aWNlX2xpbmtzX3F1ZXVlX3N5bmNfc3RhdGUoZGV2LCBcdTAwMjZzeW5jX2xpc3QpO1xuIFxuJiM0MztcdF9fZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KGRldiwgXHUwMDI2c3luY19saXN0KTtcbiYjNDM7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobGluaywgbG4sIFx1MDAyNmRldi1cdTAwM2VsaW5rcy5zdXBwbGllcnMsIGNfbm9kZSkge1xuIFx0XHRzdHJ1Y3QgZGV2aWNlICpzdXBwbGllcjtcbiBcbkBAIC0xNDI1LDE3ICYjNDM7MTQ3OCwxMCBAQCB2b2lkIGRldmljZV9saW5rc19kcml2ZXJfYm91bmQoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRzdXBwbGllciA9IGxpbmstXHUwMDNlc3VwcGxpZXI7XG4tXHRcdGlmIChkZXZpY2VfbGlua190ZXN0KGxpbmssIERMX0ZMQUdfU1lOQ19TVEFURV9PTkxZKSkge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogV2hlbiBETF9GTEFHX1NZTkNfU1RBVEVfT05MWSBpcyBzZXQsIGl0IG1lYW5zIG5vXG4tXHRcdFx0ICogb3RoZXIgRExfTUFOQUdFRF9MSU5LX0ZMQUdTIGhhdmUgYmVlbiBzZXQuIFNvLCBpdCYjMzk7c1xuLVx0XHRcdCAqIHNhdmUgdG8gZHJvcCB0aGUgbWFuYWdlZCBsaW5rIGNvbXBsZXRlbHkuXG4tXHRcdFx0ICovXG4tXHRcdFx0ZGV2aWNlX2xpbmtfZHJvcF9tYW5hZ2VkKGxpbmspO1xuLVx0XHR9IGVsc2UgaWYgKGRldl9pc19iZXN0X2VmZm9ydChkZXYpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgIGRldmljZV9saW5rX3Rlc3QobGluaywgRExfRkxBR19JTkZFUlJFRCkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgbGluay1cdTAwM2VzdGF0dXMgIT0gRExfU1RBVEVfQ09OU1VNRVJfUFJPQkUgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIWRldl9jYW5fbWF0Y2gobGluay1cdTAwM2VzdXBwbGllcikpIHtcbiYjNDM7XHRcdGlmIChkZXZfaXNfYmVzdF9lZmZvcnQoZGV2KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBkZXZpY2VfbGlua190ZXN0KGxpbmssIERMX0ZMQUdfSU5GRVJSRUQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGxpbmstXHUwMDNlc3RhdHVzICE9IERMX1NUQVRFX0NPTlNVTUVSX1BST0JFIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFkZXZfY2FuX21hdGNoKGxpbmstXHUwMDNlc3VwcGxpZXIpKSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBXaGVuIGRldl9pc19iZXN0X2VmZm9ydCgpIGlzIHRydWUsIHdlIGlnbm9yZSBkZXZpY2VcbiBcdFx0XHQgKiBsaW5rcyB0byBzdXBwbGllcnMgdGhhdCBkb24mIzM5O3QgaGF2ZSBhIGRyaXZlci4gIElmIHRoZVxuQEAgLTE0NDksMTIgJiM0MzsxNDk1LDYgQEAgdm9pZCBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdFx0XHRXUklURV9PTkNFKGxpbmstXHUwMDNlc3RhdHVzLCBETF9TVEFURV9BQ1RJVkUpO1xuIFx0XHR9XG4gXG4tXHRcdC8qXG4tXHRcdCAqIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBldmVuIGZvciB0aGUgZGVsZXRlZFxuLVx0XHQgKiBETF9GTEFHX1NZTkNfU1RBVEVfT05MWSBkZXZpY2UgbGluayBpbiBjYXNlIGl0IHdhcyB0aGUgbGFzdFxuLVx0XHQgKiBkZXZpY2UgbGluayB0aGF0IHdhcyBwcmV2ZW50aW5nIHRoZSBzdXBwbGllciBmcm9tIGdldHRpbmcgYVxuLVx0XHQgKiBzeW5jX3N0YXRlKCkgY2FsbC5cbi1cdFx0ICovXG4gXHRcdGlmIChkZWZlcl9zeW5jX3N0YXRlX2NvdW50KVxuIFx0XHRcdF9fZGV2aWNlX2xpbmtzX3N1cHBsaWVyX2RlZmVyX3N5bmMoc3VwcGxpZXIpO1xuIFx0XHRlbHNlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMgYi9kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uY1xuaW5kZXggYjhkMjk4YzA0ZDNmZi4uNDlmOWI0MDYyY2Y1YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uY1xuQEAgLTIyOSw3ICYjNDM7MjI5LDcgQEAgaW50IF9fb2ZfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCxcbiBcdFx0Z290byB1bnJlZ2lzdGVyO1xuIFxuIFx0aWYgKCFzY2FucGh5cylcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRnb3RvIGRvbmU7XG4gXG4gXHQvKiBhdXRvIHNjYW4gZm9yIFBIWXMgd2l0aCBlbXB0eSByZWcgcHJvcGVydHkgKi9cbiBcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKG5wLCBjaGlsZCkge1xuQEAgLTI2MSw2ICYjNDM7MjYxLDkgQEAgaW50IF9fb2ZfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCxcbiBcdFx0fVxuIFx0fVxuIFxuJiM0Mztkb25lOlxuJiM0MztcdGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seShcdTAwMjZtZGlvLVx1MDAzZWRldik7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gXG4gcHV0X3VucmVnaXN0ZXI6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9wcm9wZXJ0eS5jIGIvZHJpdmVycy9vZi9wcm9wZXJ0eS5jXG5pbmRleCA3MmNmMTI5MDdkZTAzLi5kNTliY2IxZjI5ZGUwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9vZi9wcm9wZXJ0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL29mL3Byb3BlcnR5LmNcbkBAIC0xMjcyLDYgJiM0MzsxMjcyLDIwIEBAIHN0YXRpYyB2b2lkIG9mX2xpbmtfdG9fcGhhbmRsZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvbl9ucCxcbiBcdFx0dG1wX25wID0gb2ZfZ2V0X25leHRfcGFyZW50KHRtcF9ucCk7XG4gXHR9XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBbiBFdGhlcm5ldCBQSFkgcGFja2FnZSBub2RlIGRlc2NyaWJlcyByZXNvdXJjZXMgc2hhcmVkIGJ5IGl0cyBtZW1iZXJcbiYjNDM7XHQgKiBQSFlzLCBidXQgaXMgbm90IHBvcHVsYXRlZCBhcyBhIHN0cnVjdCBkZXZpY2UuIExpbmsgZXZlcnkgZW5hYmxlZFxuJiM0MztcdCAqIG1lbWJlciBQSFkgdG8gdGhvc2Ugc3VwcGxpZXJzIHNvIGZ3X2RldmxpbmsgY2FuIHVzZSB0aGUgcmVhbCBjb25zdW1lclxuJiM0MztcdCAqIGRldmljZXMgaW5zdGVhZCBvZiBsZWF2aW5nIGEgcHJveHkgbGluayBvbiB0aGUgTURJTyBidXMgaW5kZWZpbml0ZWx5LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChvZl9ub2RlX25hbWVfZXEoY29uX25wLCBcJiMzNDtldGhlcm5ldC1waHktcGFja2FnZVwmIzM0OykpIHtcbiYjNDM7XHRcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlX3Njb3BlZChjb25fbnAsIGNoaWxkKVxuJiM0MztcdFx0XHRmd25vZGVfbGlua19hZGQob2ZfZndub2RlX2hhbmRsZShjaGlsZCksXG4mIzQzO1x0XHRcdFx0XHRvZl9md25vZGVfaGFuZGxlKHN1cF9ucCksIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiBcdGZ3bm9kZV9saW5rX2FkZChvZl9md25vZGVfaGFuZGxlKGNvbl9ucCksIG9mX2Z3bm9kZV9oYW5kbGUoc3VwX25wKSwgZmxhZ3MpO1xuIH1cbiBcbkBAIC0xNjIwLDcgJiM0MzsxNjM0LDkgQEAgc3RhdGljIGludCBvZl9saW5rX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29uX25wLCBjb25zdCBjaGFyICpwcm9wX25hbWUpXG4gXG4gXHRcdFx0bWF0Y2hlZCA9IHRydWU7XG4gXHRcdFx0aSYjNDM7JiM0Mzs7XG4tXHRcdFx0b2ZfbGlua190b19waGFuZGxlKGNvbl9kZXZfbnAsIHBoYW5kbGUsIHMtXHUwMDNlZndsaW5rX2ZsYWdzKTtcbiYjNDM7XHRcdFx0aWYgKGNvbl9kZXZfbnApXG4mIzQzO1x0XHRcdFx0b2ZfbGlua190b19waGFuZGxlKGNvbl9kZXZfbnAsIHBoYW5kbGUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHMtXHUwMDNlZndsaW5rX2ZsYWdzKTtcbiBcdFx0XHRvZl9ub2RlX3B1dChwaGFuZGxlKTtcbiBcdFx0fVxuIFx0XHRzJiM0MzsmIzQzOztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaFxuaW5kZXggYWVlNzlmZDZiMzJiNC4uOGFmYjlmMmIwZDgyNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmhcbkBAIC0xMzgxLDYgJiM0MzsxMzgxLDcgQEAgc3RydWN0IGRldmljZV9saW5rICpkZXZpY2VfbGlua19hZGQoc3RydWN0IGRldmljZSAqY29uc3VtZXIsXG4gXHRcdFx0XHQgICAgc3RydWN0IGRldmljZSAqc3VwcGxpZXIsIHUzMiBmbGFncyk7XG4gdm9pZCBkZXZpY2VfbGlua19kZWwoc3RydWN0IGRldmljZV9saW5rICpsaW5rKTtcbiB2b2lkIGRldmljZV9saW5rX3JlbW92ZSh2b2lkICpjb25zdW1lciwgc3RydWN0IGRldmljZSAqc3VwcGxpZXIpO1xuJiM0Mzt2b2lkIGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuIHZvaWQgZGV2aWNlX2xpbmtzX3N1cHBsaWVyX3N5bmNfc3RhdGVfcGF1c2Uodm9pZCk7XG4gdm9pZCBkZXZpY2VfbGlua3Nfc3VwcGxpZXJfc3luY19zdGF0ZV9yZXN1bWUodm9pZCk7XG4gdm9pZCBkZXZpY2VfbGlua193YWl0X3JlbW92YWwodm9pZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09GJiMzNDssCiAgICAmIzM0O1BIWUxJQiYjMzQ7LAogICAgJiMzNDtPRl9NRElPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5JiMzNDssCiAgICAmIzM0O19fb2ZfbWRpb2J1c19yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZGV2aWNlIGxpbmsgbWFuYWdlbWVudCBmdW5jdGlvbiBgZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5YCBhbmQgbW9kaWZpZXMgYGRldmljZV9saW5rc19kcml2ZXJfYm91bmRgIGFuZCBgX19vZl9tZGlvYnVzX3JlZ2lzdGVyYCB0byB1c2UgaXQuIEl0IGFsc28gY2hhbmdlcyBPRiBwcm9wZXJ0eSBwYXJzaW5nIHRvIGhhbmRsZSAmIzM5O2V0aGVybmV0LXBoeS1wYWNrYWdlJiMzOTsgbm9kZXMuIFRoZXNlIGFyZSBjb3JlIGtlcm5lbCBhbmQgc3Vic3lzdGVtIGNoYW5nZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE3YjlmMTRlZjUwZDYzZTE2NGU0MmNkYzZkMWQ1MjMyYmQ1ZWUzMTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAwMDowNTowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jb3JlLmMgYi9kcml2ZXJzL2Jhc2UvY29yZS5jCmluZGV4IDRkMDI2NjgyOTQ0ZjIuLjYyN2ZjZmEyNzRmMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9iYXNlL2NvcmUuYwpAQCAtMTMwNSw2ICYjNDM7MTMwNSw1NyBAQCBzdGF0aWMgdm9pZCBkZXZpY2VfbGlua19kcm9wX21hbmFnZWQoc3RydWN0IGRldmljZV9saW5rICpsaW5rKQogCWtyZWZfcHV0KCZhbXA7bGluay0mZ3Q7a3JlZiwgX19kZXZpY2VfbGlua19kZWwpOwogfQogCiYjNDM7LyogQ2FsbGVyIG11c3QgaG9sZCB0aGUgZGV2aWNlIGxpbmtzIHdyaXRlIGxvY2suICovCiYjNDM7c3RhdGljIHZvaWQgX19kZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkoc3RydWN0IGRldmljZSAqZGV2LAomIzQzOwkJCQkJCXN0cnVjdCBsaXN0X2hlYWQgKnN5bmNfbGlzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2VfbGluayAqbGluaywgKmxuOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobGluaywgbG4sICZhbXA7ZGV2LSZndDtsaW5rcy5zdXBwbGllcnMsIGNfbm9kZSkgewomIzQzOwkJc3RydWN0IGRldmljZSAqc3VwcGxpZXI7CiYjNDM7CiYjNDM7CQlpZiAoIWRldmljZV9saW5rX3Rlc3QobGluaywgRExfRkxBR19NQU5BR0VEKSB8fAomIzQzOwkJICAgICFkZXZpY2VfbGlua190ZXN0KGxpbmssIERMX0ZMQUdfU1lOQ19TVEFURV9PTkxZKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBETF9GTEFHX1NZTkNfU1RBVEVfT05MWSBleGNsdWRlcyBhbGwgb3RoZXIgbWFuYWdlZCBsaW5rIGZsYWdzLAomIzQzOwkJICogc28gaXQgaXMgc2FmZSB0byBkcm9wIHRoZSBtYW5hZ2VkIGxpbmsgY29tcGxldGVseS4KJiM0MzsJCSAqLwomIzQzOwkJc3VwcGxpZXIgPSBsaW5rLSZndDtzdXBwbGllcjsKJiM0MzsJCWRldmljZV9saW5rX2Ryb3BfbWFuYWdlZChsaW5rKTsKJiM0MzsKJiM0MzsJCWlmIChkZWZlcl9zeW5jX3N0YXRlX2NvdW50KQomIzQzOwkJCV9fZGV2aWNlX2xpbmtzX3N1cHBsaWVyX2RlZmVyX3N5bmMoc3VwcGxpZXIpOwomIzQzOwkJZWxzZQomIzQzOwkJCV9fZGV2aWNlX2xpbmtzX3F1ZXVlX3N5bmNfc3RhdGUoc3VwcGxpZXIsIHN5bmNfbGlzdCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5IC0gRHJvcCBtYW5hZ2VkIHN5bmMtc3RhdGUtb25seSBsaW5rcwomIzQzOyAqIEBkZXY6IENvbnN1bWVyIGRldmljZSB3aG9zZSBwcm94eSBsaW5rcyBzaG91bGQgYmUgZHJvcHBlZAomIzQzOyAqCiYjNDM7ICogRnJhbWV3b3JrcyB3aGljaCBwb3B1bGF0ZSBjaGlsZCBkZXZpY2VzIGJlbG93IGEgZHJpdmVybGVzcyBkZXZpY2UgY2FuIGNhbGwKJiM0MzsgKiB0aGlzIGFmdGVyIGFkZGluZyBhbGwgb2YgdGhlIGNoaWxkcmVuLiBUaGUgY2hpbGRyZW4gd2lsbCBoYXZlIGFjcXVpcmVkIHRoZWlyCiYjNDM7ICogb3duIGxpbmtzIGJ5IHRoZW4sIHNvIHRoZSB0ZW1wb3JhcnkgbGlua3Mgd2hpY2ggb25seSBwcmV2ZW50IHN1cHBsaWVycyBmcm9tCiYjNDM7ICogcmVjZWl2aW5nIHN5bmNfc3RhdGUoKSBjYWxsYmFja3MgYXJlIG5vIGxvbmdlciBuZWVkZWQuCiYjNDM7ICoKJiM0MzsgKiBSZS1ldmFsdWF0ZSBlYWNoIGFmZmVjdGVkIHN1cHBsaWVyIGZvciBhIHN5bmNfc3RhdGUoKSBjYWxsYmFjayBhZnRlciBpdHMKJiM0MzsgKiBsaW5rIGlzIGRyb3BwZWQuCiYjNDM7ICovCiYjNDM7dm9pZCBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkoc3RydWN0IGRldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJTElTVF9IRUFEKHN5bmNfbGlzdCk7CiYjNDM7CiYjNDM7CWRldmljZV9saW5rc193cml0ZV9sb2NrKCk7CiYjNDM7CV9fZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KGRldiwgJmFtcDtzeW5jX2xpc3QpOwomIzQzOwlkZXZpY2VfbGlua3Nfd3JpdGVfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CWRldmljZV9saW5rc19mbHVzaF9zeW5jX2xpc3QoJmFtcDtzeW5jX2xpc3QsIE5VTEwpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkpOwomIzQzOwogc3RhdGljIHNzaXplX3Qgd2FpdGluZ19mb3Jfc3VwcGxpZXJfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJCSBjb25zdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkJIGNoYXIgKmJ1ZikKQEAgLTE0MTgsNiAmIzQzOzE0NjksOCBAQCB2b2lkIGRldmljZV9saW5rc19kcml2ZXJfYm91bmQoc3RydWN0IGRldmljZSAqZGV2KQogCWVsc2UKIAkJX19kZXZpY2VfbGlua3NfcXVldWVfc3luY19zdGF0ZShkZXYsICZhbXA7c3luY19saXN0KTsKIAomIzQzOwlfX2RldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seShkZXYsICZhbXA7c3luY19saXN0KTsKJiM0MzsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobGluaywgbG4sICZhbXA7ZGV2LSZndDtsaW5rcy5zdXBwbGllcnMsIGNfbm9kZSkgewogCQlzdHJ1Y3QgZGV2aWNlICpzdXBwbGllcjsKIApAQCAtMTQyNSwxNyAmIzQzOzE0NzgsMTAgQEAgdm9pZCBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIAkJCWNvbnRpbnVlOwogCiAJCXN1cHBsaWVyID0gbGluay0mZ3Q7c3VwcGxpZXI7Ci0JCWlmIChkZXZpY2VfbGlua190ZXN0KGxpbmssIERMX0ZMQUdfU1lOQ19TVEFURV9PTkxZKSkgewotCQkJLyoKLQkJCSAqIFdoZW4gRExfRkxBR19TWU5DX1NUQVRFX09OTFkgaXMgc2V0LCBpdCBtZWFucyBubwotCQkJICogb3RoZXIgRExfTUFOQUdFRF9MSU5LX0ZMQUdTIGhhdmUgYmVlbiBzZXQuIFNvLCBpdCYjMzk7cwotCQkJICogc2F2ZSB0byBkcm9wIHRoZSBtYW5hZ2VkIGxpbmsgY29tcGxldGVseS4KLQkJCSAqLwotCQkJZGV2aWNlX2xpbmtfZHJvcF9tYW5hZ2VkKGxpbmspOwotCQl9IGVsc2UgaWYgKGRldl9pc19iZXN0X2VmZm9ydChkZXYpICZhbXA7JmFtcDsKLQkJCSAgIGRldmljZV9saW5rX3Rlc3QobGluaywgRExfRkxBR19JTkZFUlJFRCkgJmFtcDsmYW1wOwotCQkJICAgbGluay0mZ3Q7c3RhdHVzICE9IERMX1NUQVRFX0NPTlNVTUVSX1BST0JFICZhbXA7JmFtcDsKLQkJCSAgICFkZXZfY2FuX21hdGNoKGxpbmstJmd0O3N1cHBsaWVyKSkgewomIzQzOwkJaWYgKGRldl9pc19iZXN0X2VmZm9ydChkZXYpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBkZXZpY2VfbGlua190ZXN0KGxpbmssIERMX0ZMQUdfSU5GRVJSRUQpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBsaW5rLSZndDtzdGF0dXMgIT0gRExfU1RBVEVfQ09OU1VNRVJfUFJPQkUgJmFtcDsmYW1wOwomIzQzOwkJICAgICFkZXZfY2FuX21hdGNoKGxpbmstJmd0O3N1cHBsaWVyKSkgewogCQkJLyoKIAkJCSAqIFdoZW4gZGV2X2lzX2Jlc3RfZWZmb3J0KCkgaXMgdHJ1ZSwgd2UgaWdub3JlIGRldmljZQogCQkJICogbGlua3MgdG8gc3VwcGxpZXJzIHRoYXQgZG9uJiMzOTt0IGhhdmUgYSBkcml2ZXIuICBJZiB0aGUKQEAgLTE0NDksMTIgJiM0MzsxNDk1LDYgQEAgdm9pZCBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIAkJCVdSSVRFX09OQ0UobGluay0mZ3Q7c3RhdHVzLCBETF9TVEFURV9BQ1RJVkUpOwogCQl9CiAKLQkJLyoKLQkJICogVGhpcyBuZWVkcyB0byBiZSBkb25lIGV2ZW4gZm9yIHRoZSBkZWxldGVkCi0JCSAqIERMX0ZMQUdfU1lOQ19TVEFURV9PTkxZIGRldmljZSBsaW5rIGluIGNhc2UgaXQgd2FzIHRoZSBsYXN0Ci0JCSAqIGRldmljZSBsaW5rIHRoYXQgd2FzIHByZXZlbnRpbmcgdGhlIHN1cHBsaWVyIGZyb20gZ2V0dGluZyBhCi0JCSAqIHN5bmNfc3RhdGUoKSBjYWxsLgotCQkgKi8KIAkJaWYgKGRlZmVyX3N5bmNfc3RhdGVfY291bnQpCiAJCQlfX2RldmljZV9saW5rc19zdXBwbGllcl9kZWZlcl9zeW5jKHN1cHBsaWVyKTsKIAkJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMgYi9kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYwppbmRleCBiOGQyOThjMDRkM2ZmLi40OWY5YjQwNjJjZjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYwpAQCAtMjI5LDcgJiM0MzsyMjksNyBAQCBpbnQgX19vZl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQlnb3RvIHVucmVnaXN0ZXI7CiAKIAlpZiAoIXNjYW5waHlzKQotCQlyZXR1cm4gMDsKJiM0MzsJCWdvdG8gZG9uZTsKIAogCS8qIGF1dG8gc2NhbiBmb3IgUEhZcyB3aXRoIGVtcHR5IHJlZyBwcm9wZXJ0eSAqLwogCWZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKG5wLCBjaGlsZCkgewpAQCAtMjYxLDYgJiM0MzsyNjEsOSBAQCBpbnQgX19vZl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQl9CiAJfQogCiYjNDM7ZG9uZToKJiM0MzsJZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KCZhbXA7bWRpby0mZ3Q7ZGV2KTsKJiM0MzsKIAlyZXR1cm4gMDsKIAogcHV0X3VucmVnaXN0ZXI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL3Byb3BlcnR5LmMgYi9kcml2ZXJzL29mL3Byb3BlcnR5LmMKaW5kZXggNzJjZjEyOTA3ZGUwMy4uZDU5YmNiMWYyOWRlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9wcm9wZXJ0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvb2YvcHJvcGVydHkuYwpAQCAtMTI3Miw2ICYjNDM7MTI3MiwyMCBAQCBzdGF0aWMgdm9pZCBvZl9saW5rX3RvX3BoYW5kbGUoc3RydWN0IGRldmljZV9ub2RlICpjb25fbnAsCiAJCXRtcF9ucCA9IG9mX2dldF9uZXh0X3BhcmVudCh0bXBfbnApOwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBBbiBFdGhlcm5ldCBQSFkgcGFja2FnZSBub2RlIGRlc2NyaWJlcyByZXNvdXJjZXMgc2hhcmVkIGJ5IGl0cyBtZW1iZXIKJiM0MzsJICogUEhZcywgYnV0IGlzIG5vdCBwb3B1bGF0ZWQgYXMgYSBzdHJ1Y3QgZGV2aWNlLiBMaW5rIGV2ZXJ5IGVuYWJsZWQKJiM0MzsJICogbWVtYmVyIFBIWSB0byB0aG9zZSBzdXBwbGllcnMgc28gZndfZGV2bGluayBjYW4gdXNlIHRoZSByZWFsIGNvbnN1bWVyCiYjNDM7CSAqIGRldmljZXMgaW5zdGVhZCBvZiBsZWF2aW5nIGEgcHJveHkgbGluayBvbiB0aGUgTURJTyBidXMgaW5kZWZpbml0ZWx5LgomIzQzOwkgKi8KJiM0MzsJaWYgKG9mX25vZGVfbmFtZV9lcShjb25fbnAsICYjMzQ7ZXRoZXJuZXQtcGh5LXBhY2thZ2UmIzM0OykpIHsKJiM0MzsJCWZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlX3Njb3BlZChjb25fbnAsIGNoaWxkKQomIzQzOwkJCWZ3bm9kZV9saW5rX2FkZChvZl9md25vZGVfaGFuZGxlKGNoaWxkKSwKJiM0MzsJCQkJCW9mX2Z3bm9kZV9oYW5kbGUoc3VwX25wKSwgZmxhZ3MpOwomIzQzOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJZndub2RlX2xpbmtfYWRkKG9mX2Z3bm9kZV9oYW5kbGUoY29uX25wKSwgb2ZfZndub2RlX2hhbmRsZShzdXBfbnApLCBmbGFncyk7CiB9CiAKQEAgLTE2MjAsNyAmIzQzOzE2MzQsOSBAQCBzdGF0aWMgaW50IG9mX2xpbmtfcHJvcGVydHkoc3RydWN0IGRldmljZV9ub2RlICpjb25fbnAsIGNvbnN0IGNoYXIgKnByb3BfbmFtZSkKIAogCQkJbWF0Y2hlZCA9IHRydWU7CiAJCQlpJiM0MzsmIzQzOzsKLQkJCW9mX2xpbmtfdG9fcGhhbmRsZShjb25fZGV2X25wLCBwaGFuZGxlLCBzLSZndDtmd2xpbmtfZmxhZ3MpOwomIzQzOwkJCWlmIChjb25fZGV2X25wKQomIzQzOwkJCQlvZl9saW5rX3RvX3BoYW5kbGUoY29uX2Rldl9ucCwgcGhhbmRsZSwKJiM0MzsJCQkJCQkgICBzLSZndDtmd2xpbmtfZmxhZ3MpOwogCQkJb2Zfbm9kZV9wdXQocGhhbmRsZSk7CiAJCX0KIAkJcyYjNDM7JiM0Mzs7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaAppbmRleCBhZWU3OWZkNmIzMmI0Li44YWZiOWYyYjBkODI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKQEAgLTEzODEsNiAmIzQzOzEzODEsNyBAQCBzdHJ1Y3QgZGV2aWNlX2xpbmsgKmRldmljZV9saW5rX2FkZChzdHJ1Y3QgZGV2aWNlICpjb25zdW1lciwKIAkJCQkgICAgc3RydWN0IGRldmljZSAqc3VwcGxpZXIsIHUzMiBmbGFncyk7CiB2b2lkIGRldmljZV9saW5rX2RlbChzdHJ1Y3QgZGV2aWNlX2xpbmsgKmxpbmspOwogdm9pZCBkZXZpY2VfbGlua19yZW1vdmUodm9pZCAqY29uc3VtZXIsIHN0cnVjdCBkZXZpY2UgKnN1cHBsaWVyKTsKJiM0Mzt2b2lkIGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogdm9pZCBkZXZpY2VfbGlua3Nfc3VwcGxpZXJfc3luY19zdGF0ZV9wYXVzZSh2b2lkKTsKIHZvaWQgZGV2aWNlX2xpbmtzX3N1cHBsaWVyX3N5bmNfc3RhdGVfcmVzdW1lKHZvaWQpOwogdm9pZCBkZXZpY2VfbGlua193YWl0X3JlbW92YWwodm9pZCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMzcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBGaXJzdCwgd2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaW50cm9kdWNlcyBhbnkgKmZ1bmN0aW9uYWwqIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHdhcnJhbnQgZnV6emluZy4gTG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWUgbW9kaWZpY2F0aW9ucyB0byBgZHJpdmVycy9iYXNlL2NvcmUuY2AsIGBkcml2ZXJzL25ldC9tZGlvL29mX21kaW8uY2AsIGBkcml2ZXJzL29mL3Byb3BlcnR5LmNgLCBhbmQgdGhlIGBpbmNsdWRlL2xpbnV4L2RldmljZS5oYCBoZWFkZXIuCgpTcGVjaWZpY2FsbHksIHdlJiMzOTt2ZSBnb3QgYSBuZXcgZnVuY3Rpb24sIGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgLCBpbnRyb2R1Y2VkIGFuZCBleHBvcnRlZCBpbiBgZGV2aWNlLmhgLCBhbmQgdXNlZCBpbiBgb2ZfbWRpby5jYCB3aXRoaW4gYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAuICBUaGF0IGFsb25lIGlzIGludGVyZXN0aW5nLCBhcyBhbnkgY2hhbmdlIHRvIHRoZSBkZXZpY2UgbGluayBoYW5kbGluZyBpcyBhIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldC4gQWRkaXRpb25hbGx5LCB0aGVyZSBhcmUgc29tZSBjaGFuZ2VzIGluIGBvZl9saW5rX3RvX3BoYW5kbGVgIHJlbGF0ZWQgdG8gJiMzNDtldGhlcm5ldC1waHktcGFja2FnZSYjMzQ7IG5vZGVzLiAgVGhpcyBzb3VuZHMgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBkZXZpY2UgY29yZSBhbmQgaG93IHRoZSBzeXN0ZW0gcGFyc2VzIE9GIHByb3BlcnRpZXMuCgpUaGUga2V5IHF1ZXN0aW9uIGlzLCBhcmUgdGhlc2UgY2hhbmdlcyByZWFjaGFibGUgd2l0aGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VPyAgQ29uc2lkZXJpbmcgdGhhdCB0aGUgT0YgcHJvcGVydHkgcGFyc2luZyBhbmQgZGV2aWNlIGxpbmtzIGFyZSBjb3JlIGtlcm5lbCBmZWF0dXJlcywgSSYjMzk7ZCBzYXkgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgJiMzNDt5ZXMmIzM0Oy4gIGBvZl9tZGlvLmNgIGlzIGdvaW5nIHRvIGJlIHJlbGV2YW50IGZvciBNRElPIGJ1c2VzIGRlZmluZWQgaW4gdGhlIGRldmljZSB0cmVlLCBhbmQgZGV2aWNlIGxpbmsgY2hhbmdlcyBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBjb25zaWRlcmVkLgoKU28sIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgbmVlZCBmb2N1cyBmb3IgZnV6emluZy4gIEJhc2VkIG9uIHRoZSBwYXRjaCwgdGhlc2UgYXJlIHRoZSBwcmltYXJ5IGNhbmRpZGF0ZXM6CgoqICAgYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAgLSB0aGlzIGlzIHRoZSBuZXcgb25lLCBhbmQgaXRzIGluY2x1c2lvbiBpbiBkZXZpY2UgbGluayBoYW5kbGluZyBtYWtlcyBpdCBhIGhpZ2gtcHJpb3JpdHkuCiogICBgX19vZl9tZGlvYnVzX3JlZ2lzdGVyYCAtIHNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGluZyBgZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5YCwgaXQmIzM5O3MgYW5vdGhlciBpbXBvcnRhbnQgZnVuY3Rpb24gdGhhdCBuZWVkcyBpbnZlc3RpZ2F0aW9uLgoqICAgYG9mX2xpbmtfdG9fcGhhbmRsZWAgLSB0aGlzIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBJdCBtaWdodCBiZSB3b3J0aHdoaWxlIHRvIGV4YW1pbmUgdGhlIGNhbGxlcnMgZm9yIHRoaXMgYXMgd2VsbCwgcGVyaGFwcyBgb2ZfbGlua19wcm9wZXJ0eWAgb3IgYG9mX2Z3bm9kZV9hZGRfbGlua3NgLCB0aG91Z2ggYG9mX2xpbmtfdG9fcGhhbmRsZWAgaXMgbGlrZWx5IHRoZSBjb3JlIGZvY3VzLgoKTm93LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBkcml2ZXJzL29mL3Byb3BlcnR5LmNgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvZl9saW5rX3RvX3BoYW5kbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL29mL3Byb3BlcnR5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTEyNTI9b2ZfZndub2RlX2RldmljZV9nZXRfbWF0Y2hfZGF0YShjb25zdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLFxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xMjU3LVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjEyNTg6c3RhdGljIHZvaWQgb2ZfbGlua190b19waGFuZGxlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29uX25wLFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTEyNTktXHRcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpzdXBfbnAsXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTE2MTc9c3RhdGljIGludCBvZl9saW5rX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29uX25wLCBjb25zdCBjaGFyICpwcm9wX25hbWUpXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2MzctXHRcdFx0aWYgKGNvbl9kZXZfbnApXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MTYzODpcdFx0XHRcdG9mX2xpbmtfdG9fcGhhbmRsZShjb25fZGV2X25wLCBwaGFuZGxlLFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2MzktXHRcdFx0XHRcdFx0ICAgcy1cdTAwM2Vmd2xpbmtfZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzNTEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyB5b3VyIHN1bW1hcnk6CgoqKlN0YXRpYyBQcm9wZXJ0eSBJbnF1aXJ5KioKCkhtbSwgaXMgYG9mX2xpbmtfcHJvcGVydHlgIGFsc28gYSBzdGF0aWMgcHJvcGVydHk/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2suIEl0JiMzOTtzIGltcG9ydGFudCB0byBiZSBhY2N1cmF0ZSB3aXRoIHRoZXNlIGFzc3VtcHRpb25zLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHByb3BlcnRpZXMgdGhhdCBwb3RlbnRpYWxseSBpbXBhY3Qgb3RoZXIgYXJlYXMgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvZl9saW5rX3Byb3BlcnR5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9vZi9wcm9wZXJ0eS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvb2YvcHJvcGVydHkuYz0xNTU1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwcGxpZXJfYmluZGluZ3Mgb2Zfc3VwcGxpZXJfYmluZGluZ3NbXSA9IHtcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTU5OC0vKipcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoxNTk5OiAqIG9mX2xpbmtfcHJvcGVydHkgLSBDcmVhdGUgZGV2aWNlIGxpbmtzIHRvIHN1cHBsaWVycyBsaXN0ZWQgaW4gYSBwcm9wZXJ0eVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2MDAtICogQGNvbl9ucDogVGhlIGNvbnN1bWVyIGRldmljZSB0cmVlIG5vZGUgd2hpY2ggY29udGFpbnMgdGhlIHByb3BlcnR5XG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2MTItICogQW55IGZhaWxlZCBhdHRlbXB0IHRvIGNyZWF0ZSBhIGZ3bm9kZSBsaW5rIHdpbGwgTk9UIHJlc3VsdCBpbiBhbiBpbW1lZGlhdGVcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoxNjEzOiAqIHJldHVybi4gIG9mX2xpbmtfcHJvcGVydHkoKSBtdXN0IGNyZWF0ZSBsaW5rcyB0byBhbGwgdGhlIGF2YWlsYWJsZSBzdXBwbGllclxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2MTQtICogZGV2aWNlIHRyZWUgbm9kZXMgZXZlbiB3aGVuIGF0dGVtcHRzIHRvIGNyZWF0ZSBhIGxpbmsgdG8gb25lIG9yIG1vcmVcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTYxNi0gKi9cbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoxNjE3OnN0YXRpYyBpbnQgb2ZfbGlua19wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvbl9ucCwgY29uc3QgY2hhciAqcHJvcF9uYW1lKVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2MTgte1xuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYz0xNjg2PXN0YXRpYyBpbnQgb2ZfZndub2RlX2FkZF9saW5rcyhzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNjk3LVx0Zm9yX2VhY2hfcHJvcGVydHlfb2Zfbm9kZShjb25fbnAsIHApXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MTY5ODpcdFx0b2ZfbGlua19wcm9wZXJ0eShjb25fbnAsIHAtXHUwMDNlbmFtZSk7XG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTY5OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODYxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDoKCioqU3RhdGljIEZ1bmN0aW9uIENvbnVuZHJ1bSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG9mX2Z3bm9kZV9hZGRfbGlua3NgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXM6IGlzIHRoaXMgZnVuY3Rpb24gZGVjbGFyZWQgYXMgYHN0YXRpY2A/IFRoYXQmIzM5O3MgdGhlIGtleSBwb2ludC4gS25vd2luZyBpZiBpdCYjMzk7cyBzdGF0aWMgY2hhbmdlcyAqZXZlcnl0aGluZyogYWJvdXQgaG93IEkgdW5kZXJzdGFuZCBpdHMgcHVycG9zZSwgc2NvcGUsIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBJZiBpdCAqaXMqIHN0YXRpYywgdGhlbiBpdCYjMzk7cyBsaW1pdGVkIGluIGl0cyB2aXNpYmlsaXR5IGFuZCB1c2FnZTsgaXQmIzM5O3Mgc2NvcGVkIHRvIHRoZSBjdXJyZW50IHRyYW5zbGF0aW9uIHVuaXQsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHNvbWV0aGluZyBzcGVjaWZpYyBhYm91dCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSByZXN0IG9mIHRoZSBjb2RlLiBJZiBpdCAqaXNuJiMzOTt0KiBzdGF0aWMsIHRoZW4gaXQgaGFzIGV4dGVybmFsIGxpbmthZ2UsIG1lYW5pbmcgYW55IG90aGVyIHBhcnQgb2YgdGhlIHByb2plY3QgY291bGQgY2FsbCBpdCwgZHJhbWF0aWNhbGx5IGluY3JlYXNpbmcgdGhlIGNvbXBsZXhpdHkgSSBuZWVkIHRvIGNvbnNpZGVyIHdoZW4gSSYjMzk7bSBsb29raW5nIGF0IHdoYXQgaXQgZG9lcywgYW5kIGhvdyBpdCBpcyB1c2VkLCBhbmQgd2hhdCBlZmZlY3QgaXRzIGNoYW5nZXMgd2lsbCBoYXZlLiBUaGlzIHdpbGwgaW5mbHVlbmNlIGlmIEkgbmVlZCB0byB3b3JyeSBhYm91dCBnbG9iYWwgbmFtZXNwYWNlIHBvbGx1dGlvbiwgcmUtZW50cmFudCBjYXBhYmlsaXRpZXMsIGFuZCBjb25jdXJyZW5jeSBjb25zaWRlcmF0aW9ucywgZm9yIGV4YW1wbGUuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBrbm93IHRoaXMgYmVmb3JlIEkgY2FuIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2ZfZndub2RlX2FkZF9saW5rcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvb2YvcHJvcGVydHkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL29mL3Byb3BlcnR5LmM9MTY3MD1zdGF0aWMgYm9vbCBvZl9pc19md25vZGVfYWRkX2xpbmtzX3N1cHBvcnRlZCh2b2lkKVxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNjg1LVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjE2ODY6c3RhdGljIGludCBvZl9md25vZGVfYWRkX2xpbmtzKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTY4Ny17XG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTE3MDM9Y29uc3Qgc3RydWN0IGZ3bm9kZV9vcGVyYXRpb25zIG9mX2Z3bm9kZV9vcHMgPSB7XG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE3MjUtXHQuaXJxX2dldCA9IG9mX2Z3bm9kZV9pcnFfZ2V0LFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjE3MjY6XHQuYWRkX2xpbmtzID0gb2ZfZndub2RlX2FkZF9saW5rcyxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNzI3LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM3OQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGJyb2tlbiBkb3duIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdCB0aHJvdWdoOgoKKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIENhbGwgU3RhY2sgYW5kIEtleSBSZWdpc3RyYXRpb25zKioKCk9rYXksIGxldCBtZSBwaWVjZSB0aGlzIHRvZ2V0aGVyLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGBvZl9md25vZGVfYWRkX2xpbmtzYCBpcyBpbnZva2VkIHRocm91Z2ggdGhlIGBmd25vZGVfb3BlcmF0aW9uc2AgaW50ZXJmYWNlLCB3aGljaCBpcyB0aGUgZXhwZWN0ZWQgcGF0dGVybiBmb3IgZGV2aWNlIHRyZWUgaW50ZXJhY3Rpb24uIFRoZSBjcnVjaWFsIGZ1bmN0aW9uIGJlaW5nIGludGVncmF0ZWQgaGVyZSBpcyBgZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5YC4gSW50ZXJlc3RpbmcsIHNvIHRoaXMgbXVzdCBiZSByZWxhdGVkIHRvIGxpbmsgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsbHkgZHJvcHBpbmcgc3luY2hyb25pemF0aW9uIHN0YXRlcywgcG9zc2libHkgZHVyaW5nIGRldmljZSBkaXNjb3Zlcnkgb3IgcmVtb3ZhbC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gd2hhdCBzcGVjaWZpYyBzeW5jaHJvbml6YXRpb24gc3RhdGUgaXQmIzM5O3MgcmVmZXJyaW5nIHRvLiBJdCYjMzk7cyBwcm9iYWJseSB3b3J0aCBpbnZlc3RpZ2F0aW5nIHdoYXQgY2FsbHMgYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAsIHNvIHRoYXQgSSBoYXZlIHRoZSBmdWxsIGNvbnRleHQuCgpGdXJ0aGVybW9yZSwgSSBub3RlIHRoZSBwcmVzZW5jZSBvZiBgX19vZl9tZGlvYnVzX3JlZ2lzdGVyYCB3aXRoaW4gYGRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBkZXZpY2UgdHJlZS1iYXNlZCBNRElPIGJ1cyByZWdpc3RyYXRpb24uIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2UgaW4gdGhlc2Ugc3lzdGVtcy4gVGhlIGZhY3QgdGhhdCBpdHMgdW5kZXJzY29yZS1wcmVmaXhlZCBpbXBsaWVzIGl0cyBhbiBpbnRlcm5hbCBBUEkgc28gdGhlIEFQSSB0aGF0IGludm9rZXMgaXQgaXMgbGlrZWx5IHRoZSBtb3JlIHJlbGV2YW50IG9uZSBpbiB0aGlzIGNhc2UsIHBhcnRpY3VsYXJseSBzaW5jZSB0aGlzIGNhbGwgaXMgcHJvYmFibHkgaW52b2x2ZWQgaW4gaW5pdGlhbGl6aW5nIHRoZSBoYXJkd2FyZSB0byBjb25uZWN0IHRvIHRoZSBuZXR3b3JrLgoKTm93LCBob3cgZG9lcyBgX19vZl9tZGlvYnVzX3JlZ2lzdGVyYCBmaXQgaW50byB0aGUgZ3JhbmQgc2NoZW1lIG9mIGBvZl9md25vZGVfYWRkX2xpbmtzYCBhbmQgYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWA/IE15IGludHVpdGlvbiBzYXlzIHRoYXQgdGhlIE1ESU8gYnVzIHJlZ2lzdHJhdGlvbiBsaWtlbHkgZXN0YWJsaXNoZXMgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgaW5mcmFzdHJ1Y3R1cmUsIGFuZCB0aGUgbGluayBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBhcmUgdGhlbiB1c2VkIHRvIG1hbmFnZSB0aGUgZGV2aWNlIGNvbm5lY3Rpb25zIG9uIHRoYXQgYnVzLiBJIHNob3VsZCBrZWVwIGFuIGV5ZSBvbiBob3cgdGhlc2UgYXJlIGNvbm5lY3RlZCBpbiBwcmFjdGljZSB0byBiZSBjZXJ0YWluLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVzZSBtb2R1bGVzLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSBkZXZpY2UgdHJlZSBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgTURJTyBhbmQgcG90ZW50aWFsbHkgUEhZIGRldmljZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fb2ZfbWRpb2J1c19yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jPTEzOT1zdGF0aWMgaW50IF9fb2ZfbWRpb2J1c19wYXJzZV9waHlzKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuLS1cbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTE4Ni0vKipcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjE4NzogKiBfX29mX21kaW9idXNfcmVnaXN0ZXIgLSBSZWdpc3RlciBtaWlfYnVzIGFuZCBjcmVhdGUgUEhZcyBmcm9tIHRoZSBkZXZpY2UgdHJlZVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMTg4LSAqIEBtZGlvOiBwb2ludGVyIHRvIG1paV9idXMgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMTk0LSAqL1xuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6MTk1OmludCBfX29mX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0xOTYtXHRcdFx0ICBzdHJ1Y3QgbW9kdWxlICpvd25lcilcbi0tXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0yNzQtfVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6Mjc1OkVYUE9SVF9TWU1CT0woX19vZl9tZGlvYnVzX3JlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTI3Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIxMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGlzOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgRHJpdmVyIFJlZ2lzdHJhdGlvbiBhbmQgTGluayBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIHNvbWUga2V5IGZ1bmN0aW9ucyBiZWluZyBleHBvc2VkIGhlcmUuIEZpcnN0LCBgX19vZl9tZGlvYnVzX3JlZ2lzdGVyYCBpcyBiZWluZyBleHBvcnRlZC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIG1vZHVsZSBpcyBoYW5kbGluZyB0aGUgcmVnaXN0cmF0aW9uIG9mIGFuIE1ESU8gYnVzLCBsaWtlbHkgZm9yIGNvbW11bmljYXRpb24gd2l0aCBQSFlzIG9yIG90aGVyIE1ESU8tY29ubmVjdGVkIGRldmljZXMuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB3aGVuIEkmIzM5O20gZGVidWdnaW5nIE1ESU8tcmVsYXRlZCBkcml2ZXIgaW50ZXJhY3Rpb25zLiBUaGVuLCBpdCBsb29rcyBsaWtlIGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgIGlzIGFsc28gZXhwb3J0ZWQuIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIGEgdGFyZ2V0ZWQgd2F5IHRvIG1hbmFnZSB0aGUgc3luY2hyb25pemF0aW9uIHN0YXRlIG9mIGRldmljZSBsaW5rcywgcG90ZW50aWFsbHkgZm9yIHNpdHVhdGlvbnMgd2hlcmUgYSBmdWxsIHJlc2V0IG9yIHJlLWVudW1lcmF0aW9uIGlzbiYjMzk7dCBuZWVkZWQuIEZpbmFsbHksIEkgc2VlIHRoYXQgYGRldmljZV9saW5rc19kcml2ZXJfYm91bmRgIGhhcyBiZWVuIG1vZGlmaWVkIGFuZCBleHBvcnRlZC4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IGluZGljYXRvci4gR2l2ZW4gdGhlIG5hbWUsIHRoaXMgZnVuY3Rpb24gcHJvYmFibHkgZGVhbHMgd2l0aCB0aGUgYmluZGluZyBwcm9jZXNzIGJldHdlZW4gYSBkcml2ZXIgYW5kIGEgZGV2aWNlIHRocm91Z2ggZGV2aWNlIGxpbmtzLiBUaGUgbW9kaWZpY2F0aW9uIGNvdWxkIGJlIGFueXRoaW5nLCBidXQgaXQgc3VnZ2VzdHMgZW5oYW5jZW1lbnRzIHRvIHRoZSBiaW5kaW5nIGxvZ2ljLCBwb3RlbnRpYWxseSBoYW5kbGluZyBkZXBlbmRlbmN5IG1hbmFnZW1lbnQsIGVycm9yIGhhbmRsaW5nIGR1cmluZyBiaW5kaW5nLCBvciBldmVuIG9wdGltaXphdGlvbnMgaW4gaG93IGxpbmtzIGFyZSBlc3RhYmxpc2hlZC4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2sg4oCTIGl0JiMzOTtzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkZXZpY2UgbGlua3MgbWVjaGFuaXNtIHdvcmtzIHdpdGhpbiB0aGUgbmV3IG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL2NvcmUuYz0xMzg3PXZvaWQgZGV2aWNlX2xpbmtzX2ZvcmNlX2JpbmQoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvYmFzZS9jb3JlLmMtMTQwOC0vKipcbmRyaXZlcnMvYmFzZS9jb3JlLmM6MTQwOTogKiBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kIC0gVXBkYXRlIGRldmljZSBsaW5rcyBhZnRlciBwcm9iaW5nIGl0cyBkcml2ZXIuXG5kcml2ZXJzL2Jhc2UvY29yZS5jLTE0MTAtICogQGRldjogRGV2aWNlIHRvIHVwZGF0ZSB0aGUgbGlua3MgZm9yLlxuLS1cbmRyaXZlcnMvYmFzZS9jb3JlLmMtMTQxOC0gKi9cbmRyaXZlcnMvYmFzZS9jb3JlLmM6MTQxOTp2b2lkIGRldmljZV9saW5rc19kcml2ZXJfYm91bmQoc3RydWN0IGRldmljZSAqZGV2KVxuZHJpdmVycy9iYXNlL2NvcmUuYy0xNDIwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzczMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXkgU3ltYm9scyBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIHN5bWJvbHM6IGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgLCBgX19vZl9tZGlvYnVzX3JlZ2lzdGVyYCwgYW5kIGBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kYC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHRoZXNlIGFyZSBjZW50cmFsIHRvIHNvbWV0aGluZywgcHJvYmFibHkgcmVsYXRlZCB0byBkZXZpY2UgbGlua2luZywgTURJTyBidXMgcmVnaXN0cmF0aW9uLCBhbmQgZHJpdmVyIGJpbmRpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXNlIHJlcXVpcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KClNwZWNpZmljYWxseSwgSSByZW1lbWJlciB0aGF0IGBkcml2ZXJzL25ldC9tZGlvL29mX21kaW8uY2AgaGFzIGEgZGVwZW5kZW5jeSBvbiBgQ09ORklHX09GX01ESU9gLiBJIHNob3VsZCBwcm9iYWJseSBjb25maXJtIHRoYXQgaW4gYGRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ2AuIEl0JiMzOTtzIGxpa2VseSB0aGF0IHRoZXNlIHN5bWJvbHMgSSYjMzk7bSBsb29raW5nIGF0IGFyZSB0aWVkIHRvIGEgc2ltaWxhciBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgaXMgYWNjdXJhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPRl9NRElPJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz05PWNvbmZpZyBGV05PREVfTURJT1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xMy1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxNDpjb25maWcgT0ZfTURJT1xuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE1LVx0ZGVmX3RyaXN0YXRlIE9GXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxMTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zLCBzcGVjaWZpY2FsbHkgYE9GX01ESU9gLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgT0ZfTURJT2AgaXMgZGVmaW5lZCBhcyBhIGBkZWZfdHJpc3RhdGVgIG9mIGBPRmAuIFRoYXQgbWVhbnMgaXRzIHN0YXRlIChlbmFibGVkLCBkaXNhYmxlZCwgb3IgbW9kdWxlKSBkZWZhdWx0cyB0byB0aGUgc3RhdGUgb2YgYE9GYC4gTWFrZXMgc2Vuc2UuCgpJIGtub3cgYGRyaXZlcnMvYmFzZS9jb3JlLmNgIGlzIGFsd2F5cyBjb21waWxlZCwgd2hpY2ggaXMgcHJvYmFibHkgYSBiYXNlIGNvbXBvbmVudC4gQW5kIEkgc2VlIHRoYXQgYGRyaXZlcnMvb2YvcHJvcGVydHkuY2AgZGVwZW5kcyBvbiBgQ09ORklHX09GYC4gU28gd2UmIzM5O3JlIHJlYWxseSBkZWFsaW5nIHdpdGggYE9GYCBhbmQgYE9GX01ESU9gIGFzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb25zIGluIHRoaXMgYXJlYS4gQWN0dWFsbHksIHdhaXQgYSBtaW51dGUsIHNpbmNlIGBPRl9NRElPYCBpcyBkaXJlY3RseSB0aWVkIHRvIGBPRmAsIGl0JiMzOTtzIGVzc2VudGlhbGx5IGVuYWJsZWQgaWYgYE9GYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBhbmQgdGhlIE1ESU8gZHJpdmVyIGl0c2VsZi4gVGhlIGtleSBpcyBnb2luZyB0byBiZSBmaWd1cmluZyBvdXQgd2hldGhlciBgTURJT19ERVZJQ0VgIG9yIGBNRElPX0JVU2AgYXJlIHJlcXVpcmVkIGFuZCBob3cgdGhleSBpbnRlcmFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE9GX01ESU8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9LY29uZmlnPTk9Y29uZmlnIEZXTk9ERV9NRElPXG4tLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEzLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjE0OmNvbmZpZyBPRl9NRElPXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTUtXHRkZWZfdHJpc3RhdGUgT0ZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU4OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBNRElPIENvbXBpbGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgb2ZfbWRpby5vYCBpcyBiZWluZyBidWlsdC4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIGFsd2F5cywgaXMgdGhlIGBNYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBjb21waWxhdGlvbiBpbnN0cnVjdGlvbnMgZm9yIHRoaXMgcGFydCBvZiB0aGUgbmV0d29ya2luZyBkcml2ZXIgYXJlIGRlZmluZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgbmF2aWdhdGUgdG8gYGRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGVgIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gaXMgaGFuZGxpbmcgdGhhdCBwYXJ0aWN1bGFyIG9iamVjdCBmaWxlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSByZWxldmFudCBmbGFncywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IG90aGVyIGJ1aWxkLXJlbGF0ZWQgZGV0YWlscyBpbiB0aGVyZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvZl9tZGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlPTU9b2JqLSQoQ09ORklHX0ZXTk9ERV9NRElPKVx0JiM0Mzs9IGZ3bm9kZV9tZGlvLm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6NjpvYmotJChDT05GSUdfT0ZfTURJTylcdFx0JiM0Mzs9IG9mX21kaW8ub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZS03LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODc5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBlbWJlZGRlZCBzeXN0ZW1zIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgTURJTyBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKgoKQWxyaWdodCwgdGhlIGJ1aWxkIHN5c3RlbSYjMzk7cyBhc2tpbmcgZm9yIGBDT05GSUdfT0ZfTURJT2AsIHJpZ2h0PyBNeSBmaXJzdCBpbnN0aW5jdCBpcywgJiMzNDtZZXMsIG9mIGNvdXJzZSwgdGhhdCYjMzk7cyB3aGF0IHdlIG5lZWQmIzM0Oy4gVGhlbiBJIHBhdXNlLCBiZWNhdXNlIEkga25vdyB0aGVzZSB0aGluZ3MgYXJlIHJhcmVseSB0aGF0IHNpbXBsZS4gQWgsIHJpZ2h0LCBgT0ZfTURJT2AgaXRzZWxmIGlzIGRlZmluZWQgYXMgYSBgZGVmX3RyaXN0YXRlIE9GYC4gVGhhdCB1c3VhbGx5IG1lYW5zIGl0IGhhcyBkZXBlbmRlbmNpZXMuIE9rYXksIGEgcXVpY2sgY2hlY2sgb2YgdGhlIGRvY3VtZW50YXRpb24uIEJ1dCBoZXJlLCBsZXQmIzM5O3MgbG9vayBhdCBgZHJpdmVycy9uZXQvbWRpby9LY29uZmlnYCB0byBjb25maXJtIHdoYXQgSSByZW1lbWJlci4gSSBrbm93IHRoaXMgaXMgZ29pbmcgdG8gZGVwZW5kIG9uIGVpdGhlciBgUEhZTElCYCBvciBgTURJT19ERVZJQ0VgLiBHb3R0YSBtYWtlIHN1cmUgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc2VsZWN0ZWQgdG9vLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIE1ESU8gTGF5ZXIgQ29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51IFwmIzM0O01ESU8gY29udHJvbGxlciBkcml2ZXJzXCYjMzQ7XG4gICA3Olx0XHRkZXBlbmRzIG9uIFBIWUxJQlxuICAgODpcdFxuICAgOTpcdGNvbmZpZyBGV05PREVfTURJT1xuICAxMDpcdFx0ZGVmX3RyaXN0YXRlIChBQ1BJIHx8IE9GKSB8fCBDT01QSUxFX1RFU1RcbiAgMTE6XHRcdGhlbHBcbiAgMTI6XHRcdCAgRldOT0RFIE1ESU8gYnVzIChFdGhlcm5ldCBQSFkpIGFjY2Vzc29yc1xuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBPRl9NRElPXG4gIDE1Olx0XHRkZWZfdHJpc3RhdGUgT0ZcbiAgMTY6XHRcdHNlbGVjdCBGSVhFRF9QSFlcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgT3BlbkZpcm13YXJlIE1ESU8gYnVzIChFdGhlcm5ldCBQSFkpIGFjY2Vzc29yc1xuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBBQ1BJX01ESU9cbiAgMjE6XHRcdGRlZl90cmlzdGF0ZSBBQ1BJXG4gIDIyOlx0XHRoZWxwXG4gIDIzOlx0XHQgIEFDUEkgTURJTyBidXMgKEV0aGVybmV0IFBIWSkgYWNjZXNzb3JzXG4gIDI0Olx0XG4gIDI1Olx0Y29uZmlnIE1ESU9fQUlST0hBXG4gIDI2Olx0XHR0cmlzdGF0ZSBcJiMzNDtBaXJvaGEgQU43NTgzIE1ESU8gYnVzIGNvbnRyb2xsZXJcJiMzNDtcbiAgMjc6XHRcdGRlcGVuZHMgb24gQVJDSF9BSVJPSEEgfHwgQ09NUElMRV9URVNUXG4gIDI4Olx0XHRoZWxwXG4gIDI5Olx0XHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHJpdmVyIGZvciB0aGUgTURJTyBidXNzZXMgZm91bmQgaW4gdGhlXG4gIDMwOlx0XHQgIEFpcm9oYSBBTjc1ODMgU29DJiMzOTtzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTMwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNRElPIENvbnRyb2xsZXIgRHJpdmVyIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBNRElPIGNvbnRyb2xsZXIgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIFJpZ2h0LCBpdCYjMzk7cyBuZXN0ZWQgd2l0aGluIHRoZSAmIzM0O01ESU8gY29udHJvbGxlciBkcml2ZXJzJiMzNDsgbWVudSwgd2hpY2ggaXRzZWxmICpkZXBlbmRzIG9uIFBIWUxJQiouIFNvLCBpbmhlcmVudGx5LCBJIG5lZWQgUEhZTElCIGVuYWJsZWQgZm9yIHRoaXMgZHJpdmVyLCBhbmQgT0YsIHNpbmNlIE9GIGlzIGEgcHJlLXJlcXVpc2l0ZSBmb3IgUEhZTElCLiAKCkFscmlnaHQsIGxldCYjMzk7cyBjb25maXJtIHRoaXMgUEhZTElCIGRlcGVuZGVuY3kuIFl1cCwgbG9va3MgbGlrZSBpdCYjMzk7cyB0aGUgZW5jb21wYXNzaW5nIG1lbnUgdGhhdCBkaWN0YXRlcyB0aGUgcmVxdWlyZW1lbnQuIEhhbmcgb24uLi4gYW5kIHRoZSAqbWVudSogZGVwZW5kZW5jeSBhZmZlY3RzIGV2ZXJ5dGhpbmcgKndpdGhpbiogaXQuIFNvLCB0aGF0IG1lYW5zIGJvdGggYENPTkZJR19QSFlMSUJgICphbmQqIGBDT05GSUdfT0ZgIGFyZSBkZWZpbml0ZWx5IHJlcXVpcmVkIGZvciBhbnl0aGluZyB1bmRlciB0aGF0IG1lbnUsIGluY2x1ZGluZyB0aGlzIE1ESU8gY29udHJvbGxlciBkcml2ZXIuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSYjMzk7bGwgZ28gY2hlY2sgYGRyaXZlcnMvb2YvcHJvcGVydHkuY2AgdG8gc2VlIGhvdyBpdHMgYnVpbGQgaXMgY29uZGl0aW9uZWQuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGV4cGVjdGVkIGBDT05GSUdfT0ZgIGlzIGFjdHVhbGx5IGNvbXBpbGluZyB0aGUgcmVsZXZhbnQgY29kZS4gR29vZCBwcmFjdGljZSB0byBkb3VibGUgY2hlY2sgdGhhdCBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9wZXJ0eS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9vZi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL29mL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy9vZi9NYWtlZmlsZToyOm9iai15ID0gYmFzZS5vIGNwdS5vIGRldmljZS5vIG1vZHVsZS5vIHBsYXRmb3JtLm8gcHJvcGVydHkub1xuZHJpdmVycy9vZi9NYWtlZmlsZS0zLW9iai0kKENPTkZJR19PRl9LT0JKKSAmIzQzOz0ga29iai5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5ODMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0ODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIGZ1enphYmxlLiBGaXJzdCwgSSBjb25maXJtZWQgdGhhdCBgZHJpdmVycy9vZi9wcm9wZXJ0eS5jYCBnZXRzIGNvbXBpbGVkIGlmIGBDT05GSUdfT0ZgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LiBJIGFsc28gc2VlIHRoYXQgYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAgaXMgaW4gYGRyaXZlcnMvYmFzZS9jb3JlLmNgLCB3aGljaCBpcyBhbHdheXMgY29tcGlsZWQuIFRoYXQgaGVscHMgbmFycm93IHRoaW5ncyBkb3duLgoKVGhlIGltcG9ydGFudCBjb25maWdzIHNlZW0gdG8gYmUgYE9GYCwgYFBIWUxJQmAsIGFuZCBgT0ZfTURJT2AsIGFsdGhvdWdoIGBPRmAgYW5kIGBQSFlMSUJgIGFsb25lIHNob3VsZCBiZSBzdWZmaWNpZW50LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBidWlsZGluZyB0aGUgZnV6emluZyBlbnZpcm9ubWVudC4KClRoZSBwYXRjaCBpdHNlbGYgbW9kaWZpZXMgYGRyaXZlcnMvYmFzZS9jb3JlLmNgICh3aGljaCBpcyBjb3JlIGtlcm5lbCBsb2dpYyEpIGFuZCBhZGRzIGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgLCBhbmQgbW9kaWZpZXMgYGRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jYC4gVGhlIGNoYW5nZXMgdG8gYG9mX2xpbmtfdG9fcGhhbmRsZWAgdG8gaGFuZGxlICYjMzQ7ZXRoZXJuZXQtcGh5LXBhY2thZ2UmIzM0OyBub2RlcyBhcmUgYWxzbyBpbnRlcmVzdGluZy4gVGhpcyBsb29rcyBsaWtlIGl0IHRvdWNoZXMgY29yZSBkZXZpY2UgbGluayBsb2dpYyBhbmQgT0YgcHJvcGVydHkgcGFyc2luZywgc28gdGhpcyBpcyB3b3J0aCBmdXp6aW5nLgoKTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAsIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgLCBhbmQgYGRldmljZV9saW5rc19kcml2ZXJfYm91bmRgLgoKSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kYCDigJMgaXQmIzM5O3MgY2FsbGVkIGR1cmluZyBkcml2ZXIgYmluZGluZyBhbmQgZGV2aWNlIHByb2JlLCBub3QgYSBzdXBlciBob3QgcGF0aCwgYnV0IGRlZmluaXRlbHkgaW1wb3J0YW50IGR1cmluZyBib290LiBJdCYjMzk7cyBzYWZlIHRvIGluY2x1ZGUuCgpJIGFsc28gbmVlZCB0byBjaGVjayBmb3IgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLiBgX19kZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgIGlzIHN0YXRpYywgc28gSSBjYW4ganVzdCB1c2UgYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAuIFNpbWlsYXJseSwgYG9mX2xpbmtfdG9fcGhhbmRsZWAgaXMgc3RhdGljLCBzbyBJIGNhbiYjMzk7dCB1c2UgaXQgZGlyZWN0bHkuIGBvZl9saW5rX3Byb3BlcnR5YCBhbmQgYG9mX2Z3bm9kZV9hZGRfbGlua3NgIGFyZSBhbHNvIHN0YXRpYy4gQXJlIHRoZXJlIGFueSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIGluIGBkcml2ZXJzL29mL3Byb3BlcnR5LmNgIHRoYXQgY2FsbCBgb2ZfbGlua19wcm9wZXJ0eWA/IFRoYXQgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGV4cGxvcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29mX2xpbmtfcHJvcGVydHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL29mL3Byb3BlcnR5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTE1NTU9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBwbGllcl9iaW5kaW5ncyBvZl9zdXBwbGllcl9iaW5kaW5nc1tdID0ge1xuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNTk4LS8qKlxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjE1OTk6ICogb2ZfbGlua19wcm9wZXJ0eSAtIENyZWF0ZSBkZXZpY2UgbGlua3MgdG8gc3VwcGxpZXJzIGxpc3RlZCBpbiBhIHByb3BlcnR5XG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTYwMC0gKiBAY29uX25wOiBUaGUgY29uc3VtZXIgZGV2aWNlIHRyZWUgbm9kZSB3aGljaCBjb250YWlucyB0aGUgcHJvcGVydHlcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTYxMi0gKiBBbnkgZmFpbGVkIGF0dGVtcHQgdG8gY3JlYXRlIGEgZndub2RlIGxpbmsgd2lsbCBOT1QgcmVzdWx0IGluIGFuIGltbWVkaWF0ZVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjE2MTM6ICogcmV0dXJuLiAgb2ZfbGlua19wcm9wZXJ0eSgpIG11c3QgY3JlYXRlIGxpbmtzIHRvIGFsbCB0aGUgYXZhaWxhYmxlIHN1cHBsaWVyXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTYxNC0gKiBkZXZpY2UgdHJlZSBub2RlcyBldmVuIHdoZW4gYXR0ZW1wdHMgdG8gY3JlYXRlIGEgbGluayB0byBvbmUgb3IgbW9yZVxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNjE2LSAqL1xuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjE2MTc6c3RhdGljIGludCBvZl9saW5rX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29uX25wLCBjb25zdCBjaGFyICpwcm9wX25hbWUpXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTYxOC17XG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTE2ODY9c3RhdGljIGludCBvZl9md25vZGVfYWRkX2xpbmtzKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2OTctXHRmb3JfZWFjaF9wcm9wZXJ0eV9vZl9ub2RlKGNvbl9ucCwgcClcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoxNjk4Olx0XHRvZl9saW5rX3Byb3BlcnR5KGNvbl9ucCwgcC1cdTAwM2VuYW1lKTtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNjk5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM2OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgb2ZfZndub2RlX2FkZF9saW5rc2AgYW5kIGl0cyBQbGFjZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYG9mX2Z3bm9kZV9hZGRfbGlua3NgIGZ1bmN0aW9uLiBJdCYjMzk7cyBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggbWVhbnMgaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhlIGN1cnJlbnQgZmlsZS4gQnV0IHRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHdoZXJlIGl0JiMzOTtzICp1c2VkKi4gSXQmIzM5O3MgYXNzaWduZWQgdG8gdGhlIGBhZGRfbGlua3NgIGZpZWxkIHdpdGhpbiB0aGUgYG9mX2Z3bm9kZV9vcHNgIHN0cnVjdHVyZSwgcmlnaHQ/IE5vdyBJIG5lZWQgdG8gY2hlY2sg4oCTIGlzIGBvZl9md25vZGVfb3BzYCBleHBvcnRlZD8gVGhhdCBhc3NpZ25tZW50IHNlZW1zIGEgYml0IG9kZCBpZiB0aGUgc3RydWN0dXJlIGlzbiYjMzk7dCBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGBzdGF0aWNgIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQgZXh0ZXJuYWxseSB0aHJvdWdoIHRoYXQgc3RydWN0dXJlLiBJZiBpdCBpcywgd2h5IHRoZSBgc3RhdGljYCBkZWNsYXJhdGlvbj8gTWF5YmUgdGhlcmUmIzM5O3Mgc29tZSBjbGV2ZXIgZGVzaWduIHJlYXNvbiwgbGlrZSBsaW1pdGluZyB0aGUgbmFtZXNwYWNlIHBvbGx1dGlvbiB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIGZpbGUgYW5kIHVzaW5nIHRoZSBmdW5jdGlvbiBpbmRpcmVjdGx5IHRocm91Z2ggYSBzcGVjaWZpYyBzdHJ1Y3R1cmUuIE9yIHBlcmhhcHMgSSYjMzk7bSBtaXNzaW5nIHNvbWV0aGluZyBtb3JlIGZ1bmRhbWVudGFsIGFib3V0IGhvdyB0aGlzIHBvcnRpb24gb2YgdGhlIGNvZGUgd29ya3MuIEkmIzM5O20gZ29pbmcgdG8gdHJhY2sgZG93biB3aGVyZSBgb2ZfZndub2RlX29wc2AgaXMgZGVmaW5lZCBhbmQgdXNlZCB0byBiZXR0ZXIgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29mX2Z3bm9kZV9vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL29mL3Byb3BlcnR5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTE2ODY9c3RhdGljIGludCBvZl9md25vZGVfYWRkX2xpbmtzKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE3MDItXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MTcwMzpjb25zdCBzdHJ1Y3QgZndub2RlX29wZXJhdGlvbnMgb2ZfZndub2RlX29wcyA9IHtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNzA0LVx0LmdldCA9IG9mX2Z3bm9kZV9nZXQsXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE3MjctfTtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoxNzI4OkVYUE9SVF9TWU1CT0xfR1BMKG9mX2Z3bm9kZV9vcHMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg2NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqVmVyaWZ5aW5nIHRoZSBDYWxsIHRvIGBhZGRfbGlua3NgKioKCk9rYXksIHNvIEkmIzM5O20gcHJldHR5IHN1cmUgYG9mX2Z3bm9kZV9vcHNgIGlzIGV4cG9ydGVkLCB0aGF0IG11Y2ggSSByZW1lbWJlci4gTm93LCB0aGUga2V5IGlzIGZpZ3VyaW5nIG91dCAqd2hlcmUqIGBhZGRfbGlua3NgIGFjdHVhbGx5IGdldHMgY2FsbGVkIGZyb20sIGluIHJlbGF0aW9uIHRvIHRoYXQgc3RydWN0dXJlLiBJIGJlbGlldmUgdGhlIGZ1bmN0aW9uIGluIGBkcml2ZXJzL2Jhc2UvY29yZS5jYCB0aGF0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciB0aGUgdHJhbnNsYXRpb24gYmV0d2VlbiB0aGUgZGV2bGluayBhbmQgZmlybXdhcmUgbm9kZSBpcyBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIGBmd19kZXZsaW5rX3BhcnNlX2Z3bm9kZWAuIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCByaWdodCBub3csIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBmdW5jdGlvbiBjYWxsLiBMZXQmIzM5O3MgZ28gY2hlY2sgdGhlIGNvZGUgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWRkX2xpbmtzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvY29yZS5jPTE4MzA9c3RhdGljIHZvaWQgZndfZGV2bGlua19wYXJzZV9md25vZGUoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcbi0tXG5kcml2ZXJzL2Jhc2UvY29yZS5jLTE4MzQtXG5kcml2ZXJzL2Jhc2UvY29yZS5jOjE4MzU6XHRmd25vZGVfY2FsbF9pbnRfb3AoZndub2RlLCBhZGRfbGlua3MpO1xuZHJpdmVycy9iYXNlL2NvcmUuYy0xODM2LVx0Zndub2RlX3NldF9mbGFnKGZ3bm9kZSwgRldOT0RFX0ZMQUdfTElOS1NfQURERUQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIzOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCBhaW1pbmcgZm9yIGEgZnVsc29tZSByZW5kZXJpbmc6CgoqKkRlZXAgRGl2ZSBvbiBgZndfZGV2bGlua19wYXJzZV9md25vZGVgKioKClJpZ2h0LCBsZXQgbWUgc2VlLi4uIEkmIzM5O20gbG9va2luZyBhdCBgZndfZGV2bGlua19wYXJzZV9md25vZGVgLiBPa2F5LCAqdGhhdCogZnVuY3Rpb24gaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIEludGVyZXN0aW5nLiBTdGF0aWMsIHNvIGl0JiMzOTtzIG9ubHkgYWNjZXNzaWJsZSB3aXRoaW4gdGhpcyB0cmFuc2xhdGlvbiB1bml0LiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiBwYXJzaW5nIGEgZGV2aWNlJiMzOTtzIGZpcm13YXJlIG5vZGUgYW5kIGxpbmtpbmcgaXRzIHJlc291cmNlcy4gTm93LCB0aGUgcXVlc3Rpb24gaXMsICp3aG8mIzM5O3MgY2FsbGluZyBpdCo/IFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIHBpZWNlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZmlybXdhcmUgbGlua2luZyBwcm9jZXNzIGlzIGluaXRpYXRlZCBhbmQgaG93IHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgZmxvdy4gSXMgaXQgY2FsbGVkIGRpcmVjdGx5IGZyb20gYSByZWdpc3RyYXRpb24gZnVuY3Rpb24sIG9yIG1heWJlIGZyb20gYSBnZW5lcmljIGRyaXZlciBjb3JlIGhlbHBlcj8gT3IgcGVyaGFwcyBpdCYjMzk7cyBhbiBpbmRpcmVjdCBjYWxsIHRocm91Z2ggYSBjaGFpbiBvZiBmdW5jdGlvbnM/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2ssIGFuZCB0aGUgY29udGV4dHMgaW4gd2hpY2ggdGhpcyBzdGF0aWMgZnVuY3Rpb24gaXMgdXRpbGl6ZWQgaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoZSBwb2ludCBvZiBkZWNsYXJhdGlvbiB0byBmaW5kIHRoZSBjYWxsZXJzIHRvIHRydWx5IHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGlzIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z3X2RldmxpbmtfcGFyc2VfZndub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvY29yZS5jPTE4MjU9Ym9vbCBmd19kZXZsaW5rX2lzX3N0cmljdCh2b2lkKVxuLS1cbmRyaXZlcnMvYmFzZS9jb3JlLmMtMTgyOS1cbmRyaXZlcnMvYmFzZS9jb3JlLmM6MTgzMDpzdGF0aWMgdm9pZCBmd19kZXZsaW5rX3BhcnNlX2Z3bm9kZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxuZHJpdmVycy9iYXNlL2NvcmUuYy0xODMxLXtcbi0tXG5kcml2ZXJzL2Jhc2UvY29yZS5jPTE4Mzk9c3RhdGljIHZvaWQgZndfZGV2bGlua19wYXJzZV9md3RyZWUoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcbi0tXG5kcml2ZXJzL2Jhc2UvY29yZS5jLTE4NDItXG5kcml2ZXJzL2Jhc2UvY29yZS5jOjE4NDM6XHRmd19kZXZsaW5rX3BhcnNlX2Z3bm9kZShmd25vZGUpO1xuZHJpdmVycy9iYXNlL2NvcmUuYy0xODQ0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjczNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKlN0YXRpYyBGdW5jdGlvbiBJbnZlc3RpZ2F0aW9uOiBmd19kZXZsaW5rX3BhcnNlX2Z3dHJlZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGZ3X2RldmxpbmtfcGFyc2VfZnd0cmVlYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgbm90aWNlIGl0JiMzOTtzIGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rLCAmIzM0O0htbSwgc3RhdGljLi4uIHNvIGl0JiMzOTtzIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhpcyBjb21waWxhdGlvbiB1bml0LiYjMzQ7IFRoaXMgbmFycm93cyBkb3duIHdoZXJlIEkgbmVlZCB0byBsb29rIGZvciBjYWxscyB0byBpdC4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgKip3aGF0KiogYWN0dWFsbHkgY2FsbHMgdGhpcyBmdW5jdGlvbi4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IHBvaW50IHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGltcGFjdC4gV2hlcmUgYXJlIHdlIGNhbGxpbmcgdGhpcyBmcm9tPyBMZXQmIzM5O3MgdHJhY2UgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZndfZGV2bGlua19wYXJzZV9md3RyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9jb3JlLmM9MTgzMD1zdGF0aWMgdm9pZCBmd19kZXZsaW5rX3BhcnNlX2Z3bm9kZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxuLS1cbmRyaXZlcnMvYmFzZS9jb3JlLmMtMTgzOC1cbmRyaXZlcnMvYmFzZS9jb3JlLmM6MTgzOTpzdGF0aWMgdm9pZCBmd19kZXZsaW5rX3BhcnNlX2Z3dHJlZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxuZHJpdmVycy9iYXNlL2NvcmUuYy0xODQwLXtcbi0tXG5kcml2ZXJzL2Jhc2UvY29yZS5jLTE4NDUtXHR3aGlsZSAoKGNoaWxkID0gZndub2RlX2dldF9uZXh0X2F2YWlsYWJsZV9jaGlsZF9ub2RlKGZ3bm9kZSwgY2hpbGQpKSlcbmRyaXZlcnMvYmFzZS9jb3JlLmM6MTg0NjpcdFx0ZndfZGV2bGlua19wYXJzZV9md3RyZWUoY2hpbGQpO1xuZHJpdmVycy9iYXNlL2NvcmUuYy0xODQ3LX1cbi0tXG5kcml2ZXJzL2Jhc2UvY29yZS5jPTI0MjI9c3RhdGljIHZvaWQgZndfZGV2bGlua19saW5rX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9iYXNlL2NvcmUuYy0yNDI4LVxuZHJpdmVycy9iYXNlL2NvcmUuYzoyNDI5Olx0ZndfZGV2bGlua19wYXJzZV9md3RyZWUoZndub2RlKTtcbmRyaXZlcnMvYmFzZS9jb3JlLmMtMjQzMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMjEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6CgoqKlRoaW5raW5nIEFib3V0IGBmd19kZXZsaW5rX2xpbmtfZGV2aWNlYCoqCgpPa2F5LCBzbyBgZndfZGV2bGlua19saW5rX2RldmljZWAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBCZWluZyBgc3RhdGljYCBtZWFucyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQsIHNvIGl0JiMzOTtzIG5vdCBtZWFudCB0byBiZSBjYWxsZWQgZnJvbSBhbnl3aGVyZSBlbHNlIGluIHRoZSBrZXJuZWwgZGlyZWN0bHkuIFRoaXMgbGltaXRzIGl0cyBzY29wZSBhbmQgbWFrZXMgbWUgd29uZGVyICp3aHkqIHRoaXMgZGVzaWduIGRlY2lzaW9uIHdhcyBtYWRlLiBJcyBpdCBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gZm9yIGEgc3BlY2lmaWMgbW9kdWxlIG9yIHN1YnN5c3RlbT8gSXMgaXQgbWVhbnQgdG8gcHJldmVudCBhY2NpZGVudGFsIGV4dGVybmFsIGNhbGxzIHRoYXQgY291bGQgYnJlYWsgc29tZSBpbnRlcm5hbCBzdGF0ZSBvciBpbnZhcmlhbnQ/CgpUaGUgY3J1Y2lhbCBxdWVzdGlvbiBub3cgYmVjb21lczogKldoYXQqIGlzIGNhbGxpbmcgdGhpcyBzdGF0aWMgZnVuY3Rpb24/IEkgbmVlZCB0byB0cmFjayBkb3duIGFsbCB0aGUgY2FsbCBzaXRlcyB3aXRoaW4gdGhlIHNvdXJjZSBmaWxlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGdvaW5nIHRvIGJlIHZpdGFsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb24gdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBjb2RlIGFuZCBzdGFydCB0cmFjaW5nIHRoZSBleGVjdXRpb24gZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB3aGF0ZXZlciBkZXZpY2UgbGluayBmcmFtZXdvcmsgaXMgYmVpbmcgdXNlZC4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZndfZGV2bGlua19saW5rX2RldmljZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL2NvcmUuYz0yMzk0PXN0YXRpYyB2b2lkIF9fZndfZGV2bGlua19saW5rX3RvX3N1cHBsaWVycyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9iYXNlL2NvcmUuYy0yNDIxLVxuZHJpdmVycy9iYXNlL2NvcmUuYzoyNDIyOnN0YXRpYyB2b2lkIGZ3X2RldmxpbmtfbGlua19kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KVxuZHJpdmVycy9iYXNlL2NvcmUuYy0yNDIzLXtcbi0tXG5kcml2ZXJzL2Jhc2UvY29yZS5jPTM2Nzk9aW50IGRldmljZV9hZGQoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvYmFzZS9jb3JlLmMtMzc5My1cdFx0ZGV2LVx1MDAzZWZ3bm9kZS1cdTAwM2VkZXYgPSBkZXY7XG5kcml2ZXJzL2Jhc2UvY29yZS5jOjM3OTQ6XHRcdGZ3X2RldmxpbmtfbGlua19kZXZpY2UoZGV2KTtcbmRyaXZlcnMvYmFzZS9jb3JlLmMtMzc5NS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3MDEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIERldmljZSBMaW5rIEludGVncmF0aW9uIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBkZXZpY2VfYWRkYCBmdW5jdGlvbi4gSXQmIzM5O3MgZXhwb3J0ZWQsIGFuZCBpdCBlbmRzIHVwIGNhbGxpbmcgYGZ3X2RldmxpbmtfbGlua19kZXZpY2VgLCB3aGljaCBtYWtlcyBpdCBhIHNlbnNpYmxlIHN0YXJ0aW5nIHBvaW50LiBIb3dldmVyLCBgZGV2aWNlX2FkZGAgaXMgYSBzdXBlciBnZW5lcmljIGVudHJ5IHBvaW50IOKAkyBpdCYjMzk7cyBnb2luZyB0byBiZSBoaXQgYWxsIHRoZSB0aW1lLCB3aGljaCBpc24mIzM5O3QgaWRlYWwgZm9yIHRoaXMgc3BlY2lmaWMgdGFzay4gSSB3YW50IHNvbWV0aGluZyBtb3JlIGZvY3VzZWQuCgpMZXQmIzM5O3Mgc2Vl4oCmIEkgdGhpbmsgSSBjYW4gYnlwYXNzIHNvbWUgb2YgdGhlIG5vaXNlIGFuZCB1c2UgYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAsIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgLCBhbmQgYGRldmljZV9saW5rc19kcml2ZXJfYm91bmRgIGRpcmVjdGx5LiBUaGlzIHNob3VsZCBhbGxvdyBtZSB0byBmb2N1cyBtb3JlIHRpZ2h0bHkgb24gd2hhdCBJIGFjdHVhbGx5IG5lZWQgdG8gZ2V0IGRvbmUsIHJpZ2h0PwoKQWxyaWdodCwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgdmVyaWZ5IGlmIHRob3NlIHN5bWJvbHMgYXJlIGV4cG9ydGVkLiBHb29kLCBgZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5YCBpcyBleHBvcnRlZCB3aXRoIGBFWFBPUlRfU1lNQk9MX0dQTGAuIEFuZCwgY29uZmlybWluZywgYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAgaXMgYWxzbyBleHBvcnRlZCB3aXRoIGBFWFBPUlRfU1lNQk9MYC4gRXhjZWxsZW50LgoKTm93LCB0aGF0IGJyaW5ncyB1cyB0byBgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZGAuICBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgb25lIGlzbiYjMzk7dCBleHBvcnRlZC4uLiBMZXQgbWUganVzdC4uLiB5ZXMsIGl0JiMzOTtzIG5vdCBleHBvcnRlZCwgYnV0IGl0JiMzOTtzICpub3QqIHN0YXRpYywgc28gSSBjYW4gc3RpbGwgYWNjZXNzIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvY29yZS5jPTEzODc9dm9pZCBkZXZpY2VfbGlua3NfZm9yY2VfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9iYXNlL2NvcmUuYy0xNDA4LS8qKlxuZHJpdmVycy9iYXNlL2NvcmUuYzoxNDA5OiAqIGRldmljZV9saW5rc19kcml2ZXJfYm91bmQgLSBVcGRhdGUgZGV2aWNlIGxpbmtzIGFmdGVyIHByb2JpbmcgaXRzIGRyaXZlci5cbmRyaXZlcnMvYmFzZS9jb3JlLmMtMTQxMC0gKiBAZGV2OiBEZXZpY2UgdG8gdXBkYXRlIHRoZSBsaW5rcyBmb3IuXG4tLVxuZHJpdmVycy9iYXNlL2NvcmUuYy0xNDE4LSAqL1xuZHJpdmVycy9iYXNlL2NvcmUuYzoxNDE5OnZvaWQgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL2Jhc2UvY29yZS5jLTE0MjAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM5OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIGEgcmVsZXZhbnQgZmllbGQ6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogRXhwb3J0YWJpbGl0eSoqCgpSaWdodCwgc28gdGhlIGNvcmUgcXVlc3Rpb24gaGVyZSBpczogaXMgdGhpcyB0aGluZywgd2hhdGV2ZXIgJiMzNDt0aGlzJiMzNDsgcmVmZXJzIHRvIGluIHRoZSBjb250ZXh0LCBkZXNpZ25lZCBmb3IgZXhwb3J0PyBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBtYXJrZXRhYmlsaXR5IGJleW9uZCB0aGUgaW1tZWRpYXRlIGVudmlyb25tZW50LCB0aGUgZG9tZXN0aWMgc3BoZXJlLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IHdoZXRoZXIgaXQgKmNvdWxkKiBiZSBleHBvcnRlZCwgd2hpY2ggaXMgYSBydWRpbWVudGFyeSBmaXJzdCBzdGVwLiBXZSBuZWVkIHRvIGRpc3NlY3QgdGhlIGludGVudCBiZWhpbmQgaXRzIGNyZWF0aW9uLiBXYXMgZ2xvYmFsIGRpc3RyaWJ1dGlvbiBldmVuIGEgY29uc2lkZXJhdGlvbiBkdXJpbmcgdGhlIGRlc2lnbiBwaGFzZT8gVGhlIGltcGxpY2F0aW9ucyBhcmUgc2lnbmlmaWNhbnQuIElmIGl0ICp3YXNuJiMzOTt0KiBpbnRlbmRlZCBmb3IgZXhwb3J0LCB0aGVyZSBhcmUgYSBob3N0IG9mIHBvdGVudGlhbCBpc3N1ZXMgdG8gZXZhbHVhdGU6IHJlZ3VsYXRvcnkgY29tcGxpYW5jZSwgbGluZ3Vpc3RpYyBiYXJyaWVycyBpbiBkb2N1bWVudGF0aW9uIGFuZCBtYXJrZXRpbmcsIGN1bHR1cmFsIGFkYXB0YXRpb25zIG5lZWRlZCBmb3IgdXNlciBhY2NlcHRhbmNlLCBsb2dpc3RpY2FsIGNoYWxsZW5nZXMgd2l0aCB0cmFuc3BvcnRhdGlvbiBhbmQgaGFuZGxpbmcuLi4gdGhlIGxpc3QgaXMgbG9uZy4gQ29udmVyc2VseSwgaWYgZXhwb3J0ICp3YXMqIGEgZGVzaWduIHBhcmFtZXRlciwgdGhhdCBvcGVucyBhIGRpZmZlcmVudCBsaW5lIG9mIGlucXVpcnk6IHdoYXQgc3BlY2lmaWMgbWFya2V0cyB3ZXJlIHRhcmdldGVkPyBXaGF0IGFkanVzdG1lbnRzIHdlcmUgbWFkZSB0byBmYWNpbGl0YXRlIGludGVybmF0aW9uYWwgc2FsZXM/IFRoZSBkZXB0aCBvZiB0aGUgZXhwb3J0IHJlYWRpbmVzcyBpcyBwYXJhbW91bnQgdG8gZGV0ZXJtaW5pbmcgdGhlIGVmZm9ydCByZXF1aXJlZCB0byBnZXQgaXQgb3V0IHRoZXJlLiBUaGlzIGlzIGEgY3JpdGljYWwgZmlyc3QgcXVlc3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY5MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgZ2l2ZW4gd2hhdCBJJiMzOTttIHNlZWluZzoKCioqQW5hbHl6aW5nIGEgTm9uLUV4cG9ydGVkLCBOb24tU3RhdGljIEZ1bmN0aW9uIENhbGwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgZnVuY3Rpb24gdGhhdCYjMzk7cyAqbm90KiBleHBvcnRlZCwgbWVhbmluZyBpdCYjMzk7cyBub3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBvdXRzaWRlIG9mIGl0cyBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IGtleSBwb2ludC4gQnV0LCBpdCYjMzk7cyAqYWxzbyogbm90IHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFN0YXRpYyB3b3VsZCBsaW1pdCBpdHMgc2NvcGUgZXZlbiBmdXJ0aGVyLCB0byB0aGUgc3BlY2lmaWMgZmlsZS4gQmVjYXVzZSBpdCYjMzk7cyBub24tc3RhdGljIGJ1dCBub3QgZXhwb3J0ZWQsIG15IGh1bmNoIGlzIHRoYXQgaXQmIzM5O3MgbWVhbnQgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gdGhlIG1vZHVsZSBvciBsaWJyYXJ5IGl0IHJlc2lkZXMuIFRoZSBmYWN0IHRoYXQgaXQgaXNuJiMzOTt0IGV4cG9ydGVkIGluZGljYXRlcyBhIGRlZ3JlZSBvZiBlbmNhcHN1bGF0aW9uIGFuZCBsaWtlbHkgYSBjb25zY2lvdXMgZGVzaWduIGNob2ljZSB0byBoaWRlIGl0IGZyb20gZ2VuZXJhbCB1c2UsIHBlcmhhcHMgdG8gcHJvdGVjdCBhZ2FpbnN0IHVuaW50ZW5kZWQgdXNlIG9yIHRvIHNpZ25hbCB0aGF0IHRoZSBmdW5jdGlvbiYjMzk7cyBpbnRlcmZhY2UgbWlnaHQgY2hhbmdlIHdpdGhvdXQgbm90aWNlLiBUaGUgc2Vjb25kIHRoaW5nIHRoYXQgSSBoYXZlIGlzIGEgcmVmZXJlbmNlIHRvIGl0cyBjYWxsZXI6IGBkcml2ZXJzL2Jhc2UvZGQuY2AuIFRoaXMgdGVsbHMgbWUgKmV4YWN0bHkqIHdoZXJlIHRoZSBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLCBnaXZpbmcgbWUgYSBjcnVjaWFsIHBvaW50IG9mIGNvbnRleHQuIE5vdyBJIGNhbiBkaXZlIGludG8gdGhhdCBzcGVjaWZpYyBmaWxlIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBoaWRkZW4gZnVuY3Rpb24gaXMgbmVjZXNzYXJ5LCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBvdmVyYWxsIHN5c3RlbSwgYW5kIHdoYXQgc3BlY2lmaWMgcHVycG9zZSBpdCBzZXJ2ZXMgd2l0aGluIHRoYXQgZHJpdmVyJiMzOTtzIGNvZGUgYmFzZS4gVGhpcyBtYWtlcyBkZWJ1Z2dpbmcgb3IgbW9kaWZpY2F0aW9uIGVhc2llciBhcyBpdCBzaWduaWZpY2FudGx5IHJlZHVjZXMgdGhlIHNlYXJjaCBzcGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9kZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9kZC5jPTQ0Nj1zdGF0aWMgdm9pZCBkcml2ZXJfYm91bmQoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvYmFzZS9kZC5jLTQ1Ni1cdGtsaXN0X2FkZF90YWlsKFx1MDAyNmRldi1cdTAwM2VwLVx1MDAzZWtub2RlX2RyaXZlciwgXHUwMDI2ZGV2LVx1MDAzZWRyaXZlci1cdTAwM2VwLVx1MDAzZWtsaXN0X2RldmljZXMpO1xuZHJpdmVycy9iYXNlL2RkLmM6NDU3Olx0ZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZChkZXYpO1xuZHJpdmVycy9iYXNlL2RkLmMtNDU4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE0OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipFeGFtaW5pbmcgRHJpdmVyIEJpbmRpbmcgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIHRoZSBpbW1lZGlhdGUgaXNzdWUgaXNuJiMzOTt0IHdpdGggYGRldmljZV9saW5rc19kcml2ZXJfYm91bmRgLiBJdCYjMzk7cyBub24tc3RhdGljLCBzbyBpbmNsdXNpb24gaXNuJiMzOTt0IGEgcHJvYmxlbSwgd2hpY2ggaXMgZ29vZC4gVGhhdCYjMzk7cyBhIHJlbGllZi4KCkJ1dCBub3cgSSYjMzk7bSBzZWVpbmcgYSBwb3RlbnRpYWwgc25hZy4gYG9mX2xpbmtfdG9fcGhhbmRsZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQmIzM5O3Mgbm90IGlkZWFsIGlmIEkgbmVlZCB0byB1c2UgaXQgZGlyZWN0bHksIGJ1dCB3YWl0Li4uIEl0JiMzOTtzICp1c2VkKiBieSBgb2ZfbGlua19wcm9wZXJ0eWAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBvZl9md25vZGVfYWRkX2xpbmtzYC4gT2theSwgYG9mX2Z3bm9kZV9hZGRfbGlua3NgIGlzIHRoZSBrZXkuIEFuZCAqdGhhdCogaXMgY2FsbGVkIHZpYSB0aGUgZ2VuZXJpYyBgZndub2RlX2NhbGxfaW50X29wKGZ3bm9kZSwgYWRkX2xpbmtzKWAgY29uc3RydWN0LiBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSXMgdGhlcmUgKmFueXRoaW5nKiB3aXRoaW4gYGRyaXZlcnMvb2YvcHJvcGVydHkuY2AgdGhhdCYjMzk7cyBhY2Nlc3NpYmxlLCBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gSSBjb3VsZCBwb3RlbnRpYWxseSBsZXZlcmFnZT8gVGhhdCYjMzk7cyB0aGUgcmVhbCBxdWVzdGlvbiBub3cuIExldCBtZSBjaGVjayB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2ZfZndub2RlX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvb2YvcHJvcGVydHkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL29mL3Byb3BlcnR5LmM9MTY4Nj1zdGF0aWMgaW50IG9mX2Z3bm9kZV9hZGRfbGlua3Moc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTcwMi1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoxNzAzOmNvbnN0IHN0cnVjdCBmd25vZGVfb3BlcmF0aW9ucyBvZl9md25vZGVfb3BzID0ge1xuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE3MDQtXHQuZ2V0ID0gb2ZfZndub2RlX2dldCxcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTcyNy19O1xuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjE3Mjg6RVhQT1JUX1NZTUJPTF9HUEwob2ZfZndub2RlX29wcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzA5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYG9mX2Z3bm9kZV9vcHNgIFN0cnVjdHVyZSoqCgpSaWdodCwgYG9mX2Z3bm9kZV9vcHNgIGlzIGV4cG9ydGVkLCBidXQgaXQmIzM5O3MgYSAqc3RydWN0dXJlKi4gVGhhdCBpbW1lZGlhdGVseSBzZXRzIG9mZiBhIG1lbnRhbCBmbGFnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgKnVzZWQqLCB3aGF0IGZ1bmN0aW9ucyBhcmUgKmFwcGxpZWQqIHRvIGl0LCBub3QganVzdCB0aGUgc3RydWN0dXJlIGl0c2VsZi4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSBhIGNvbGxlY3Rpb24gb2YgZnVuY3Rpb24gcG9pbnRlcnMsIG9yIGF0IGxlYXN0IGEgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZS4gU28sIGxldCYjMzk7cyBiYWNrIHVwIGEgYml0IGFuZCBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiBgZHJpdmVycy9vZi9wcm9wZXJ0eS5jYC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBleHBvcnRlZCBzdWdnZXN0cyBpdCYjMzk7cyBhIGNydWNpYWwgcGFydCBvZiB0aGUgT0ZXIGZyYW1ld29yaywgYnV0IHRoZSBjb250ZXh0IGlzIG1pc3NpbmcsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIHRoaXMgZmlsZS4gSSBuZWVkIHRvIGh1bnQgZm9yIGFueXRoaW5nICplbHNlKiB0aGF0IG1pZ2h0IGJlIGV4cG9ydGVkIGFuZCByZWxhdGVkLCBvciBhbnkgZnVuY3Rpb25zIHRoYXQgdGFrZSBvciByZXR1cm4gYW4gYG9mX2Z3bm9kZV9vcHNgIHBvaW50ZXIgb3Igc3RydWN0dXJlIGFzIGFuIGFyZ3VtZW50LiBJ4oCZbSB0aGlua2luZyB0aGVyZSBtdXN0IGJlIHNvbWUgc3VwcG9ydGluZyBmdW5jdGlvbnMgdGhhdCBvcGVyYXRlIG9uIGl0LCBzb21lIHdheSB0byBzZXQgb3IgZ2V0IHByb3BlcnRpZXMsIGVudW1lcmF0ZSBjaGlsZHJlbiwgdGhhdCBzb3J0IG9mIHRoaW5nLiBJIHdhbnQgdG8gYnVpbGQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBPRlcgaW50ZXJmYWNlLCBhbmQgdGhpcyBgb2ZfZndub2RlX29wc2Agc3RydWN0dXJlIGlzIG9idmlvdXNseSBhIGtleSBlbGVtZW50LiBJIHN1c3BlY3QgaXQmIzM5O3MgdGhlIGNvcmUgb2YgaG93IGRldmljZSB0cmVlIG5vZGVzIGFuZCB0aGVpciBwcm9wZXJ0aWVzIGFyZSBtYW5hZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9vZi9wcm9wZXJ0eS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvb2YvcHJvcGVydHkuYz00NT1ib29sIG9mX3Byb3BlcnR5X3JlYWRfYm9vbChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjb25zdCBjaGFyICpwcm9wbmFtZSlcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNTgtfVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjU5OkVYUE9SVF9TWU1CT0wob2ZfcHJvcGVydHlfcmVhZF9ib29sKTtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy02MC1cbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9Njg9Ym9vbCBvZl9ncmFwaF9pc19wcmVzZW50KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNzgtfVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjc5OkVYUE9SVF9TWU1CT0wob2ZfZ3JhcGhfaXNfcHJlc2VudCk7XG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtODAtXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTk1PWludCBvZl9wcm9wZXJ0eV9jb3VudF9lbGVtc19vZl9zaXplKGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTExMi19XG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MTEzOkVYUE9SVF9TWU1CT0xfR1BMKG9mX3Byb3BlcnR5X2NvdW50X2VsZW1zX29mX3NpemUpO1xuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTExNC1cbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9MTY4PWludCBvZl9wcm9wZXJ0eV9yZWFkX3U4X2luZGV4KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE4MS19XG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MTgyOkVYUE9SVF9TWU1CT0xfR1BMKG9mX3Byb3BlcnR5X3JlYWRfdThfaW5kZXgpO1xuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE4My1cbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9MjAxPWludCBvZl9wcm9wZXJ0eV9yZWFkX3UxNl9pbmRleChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0yMTQtfVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjIxNTpFWFBPUlRfU1lNQk9MX0dQTChvZl9wcm9wZXJ0eV9yZWFkX3UxNl9pbmRleCk7XG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMjE2LVxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYz0yMzQ9aW50IG9mX3Byb3BlcnR5X3JlYWRfdTMyX2luZGV4KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTI0OC19XG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MjQ5OkVYUE9SVF9TWU1CT0xfR1BMKG9mX3Byb3BlcnR5X3JlYWRfdTMyX2luZGV4KTtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0yNTAtXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTI2OD1pbnQgb2ZfcHJvcGVydHlfcmVhZF91NjRfaW5kZXgoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCxcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMjgxLX1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoyODI6RVhQT1JUX1NZTUJPTF9HUEwob2ZfcHJvcGVydHlfcmVhZF91NjRfaW5kZXgpO1xuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTI4My1cbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9MzA4PWludCBvZl9wcm9wZXJ0eV9yZWFkX3ZhcmlhYmxlX3U4X2FycmF5KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTMzMS19XG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MzMyOkVYUE9SVF9TWU1CT0xfR1BMKG9mX3Byb3BlcnR5X3JlYWRfdmFyaWFibGVfdThfYXJyYXkpO1xuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTMzMy1cbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9MzU4PWludCBvZl9wcm9wZXJ0eV9yZWFkX3ZhcmlhYmxlX3UxNl9hcnJheShjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0zODEtfVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjM4MjpFWFBPUlRfU1lNQk9MX0dQTChvZl9wcm9wZXJ0eV9yZWFkX3ZhcmlhYmxlX3UxNl9hcnJheSk7XG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMzgzLVxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYz00MDU9aW50IG9mX3Byb3BlcnR5X3JlYWRfdmFyaWFibGVfdTMyX2FycmF5KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTQyOC19XG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6NDI5OkVYUE9SVF9TWU1CT0xfR1BMKG9mX3Byb3BlcnR5X3JlYWRfdmFyaWFibGVfdTMyX2FycmF5KTtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy00MzAtXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTQ0Nj1pbnQgb2ZfcHJvcGVydHlfcmVhZF91NjQoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqcHJvcG5hbWUsXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTQ1OS19XG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6NDYwOkVYUE9SVF9TWU1CT0xfR1BMKG9mX3Byb3BlcnR5X3JlYWRfdTY0KTtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy00NjEtXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTQ4Mz1pbnQgb2ZfcHJvcGVydHlfcmVhZF92YXJpYWJsZV91NjRfYXJyYXkoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCxcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNTA4LX1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYzo1MDk6RVhQT1JUX1NZTUJPTF9HUEwob2ZfcHJvcGVydHlfcmVhZF92YXJpYWJsZV91NjRfYXJyYXkpO1xuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTUxMC1cbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9NTMwPWludCBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjb25zdCBjaGFyICpwcm9wbmFtZSxcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNTQzLX1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYzo1NDQ6RVhQT1JUX1NZTUJPTF9HUEwob2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcpO1xuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTU0NS1cbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9NTYwPWludCBvZl9wcm9wZXJ0eV9tYXRjaF9zdHJpbmcoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqcHJvcG5hbWUsXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTU4NS19XG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6NTg2OkVYUE9SVF9TWU1CT0xfR1BMKG9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyk7XG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNTg3LVxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYz01OTk9aW50IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2hlbHBlcihjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYy02MjMtfVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjYyNDpFWFBPUlRfU1lNQk9MX0dQTChvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19oZWxwZXIpO1xuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTYyNS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYz02MjY9Y29uc3QgX19iZTMyICpvZl9wcm9wX25leHRfdTMyKGNvbnN0IHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCwgY29uc3QgX19iZTMyICpjdXIsXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTY0Ni19XG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6NjQ3OkVYUE9SVF9TWU1CT0xfR1BMKG9mX3Byb3BfbmV4dF91MzIpO1xuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTY0OC1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYz02NDk9Y29uc3QgY2hhciAqb2ZfcHJvcF9uZXh0X3N0cmluZyhjb25zdCBzdHJ1Y3QgcHJvcGVydHkgKnByb3AsIGNvbnN0IGNoYXIgKmN1cilcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNjc5LX1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYzo2ODA6RVhQT1JUX1NZTUJPTF9HUEwob2ZfcHJvcF9uZXh0X3N0cmluZyk7XG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNjgxLVxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYz02ODk9aW50IG9mX2dyYXBoX3BhcnNlX2VuZHBvaW50KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSxcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNzA5LX1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYzo3MTA6RVhQT1JUX1NZTUJPTChvZl9ncmFwaF9wYXJzZV9lbmRwb2ludCk7XG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNzExLVxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYz03MjA9c3RydWN0IGRldmljZV9ub2RlICpvZl9ncmFwaF9nZXRfcG9ydF9ieV9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCwgdTMyIGlkKVxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYy03MzgtfVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjczOTpFWFBPUlRfU1lNQk9MKG9mX2dyYXBoX2dldF9wb3J0X2J5X2lkKTtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy03NDAtXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTc1Mj1zdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2dyYXBoX2dldF9uZXh0X3BvcnQoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQsXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTc3NS19XG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6Nzc2OkVYUE9SVF9TWU1CT0wob2ZfZ3JhcGhfZ2V0X25leHRfcG9ydCk7XG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNzc3LVxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYz03ODc9c3RydWN0IGRldmljZV9ub2RlICpvZl9ncmFwaF9nZXRfbmV4dF9wb3J0X2VuZHBvaW50KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqcG9ydCxcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtODAyLX1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYzo4MDM6RVhQT1JUX1NZTUJPTChvZl9ncmFwaF9nZXRfbmV4dF9wb3J0X2VuZHBvaW50KTtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy04MDQtXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTgxMz1zdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2dyYXBoX2dldF9uZXh0X2VuZHBvaW50KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50LFxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYy04NTktfVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjg2MDpFWFBPUlRfU1lNQk9MKG9mX2dyYXBoX2dldF9uZXh0X2VuZHBvaW50KTtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy04NjEtXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTg3Mj1zdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2dyYXBoX2dldF9lbmRwb2ludF9ieV9yZWdzKFxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYy04ODYtfVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjg4NzpFWFBPUlRfU1lNQk9MKG9mX2dyYXBoX2dldF9lbmRwb2ludF9ieV9yZWdzKTtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy04ODgtXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTg5Nj1zdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2dyYXBoX2dldF9yZW1vdGVfZW5kcG9pbnQoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYy05MDAtfVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjkwMTpFWFBPUlRfU1lNQk9MKG9mX2dyYXBoX2dldF9yZW1vdGVfZW5kcG9pbnQpO1xuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTkwMi1cbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9OTEwPXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZ3JhcGhfZ2V0X3BvcnRfcGFyZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtOTMyLX1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYzo5MzM6RVhQT1JUX1NZTUJPTChvZl9ncmFwaF9nZXRfcG9ydF9wYXJlbnQpO1xuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTkzNC1cbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9OTQyPXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3BhcmVudChcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtOTUwLX1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYzo5NTE6RVhQT1JUX1NZTUJPTChvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KTtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy05NTItXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTk2MD1zdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTk2OS19XG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6OTcwOkVYUE9SVF9TWU1CT0wob2ZfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0KTtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy05NzEtXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTk3OD11bnNpZ25lZCBpbnQgb2ZfZ3JhcGhfZ2V0X2VuZHBvaW50X2NvdW50KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTk4Ny19XG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6OTg4OkVYUE9SVF9TWU1CT0wob2ZfZ3JhcGhfZ2V0X2VuZHBvaW50X2NvdW50KTtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy05ODktXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTk5Nj11bnNpZ25lZCBpbnQgb2ZfZ3JhcGhfZ2V0X3BvcnRfY291bnQoc3RydWN0IGRldmljZV9ub2RlICpucClcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTAwNC19XG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MTAwNTpFWFBPUlRfU1lNQk9MKG9mX2dyYXBoX2dldF9wb3J0X2NvdW50KTtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xMDA2LVxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYz0xMDE2PXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9ub2RlKGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSxcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTA0Mi19XG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MTA0MzpFWFBPUlRfU1lNQk9MKG9mX2dyYXBoX2dldF9yZW1vdGVfbm9kZSk7XG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTA0NC1cbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9MTcwMz1jb25zdCBzdHJ1Y3QgZndub2RlX29wZXJhdGlvbnMgb2ZfZndub2RlX29wcyA9IHtcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTcyNy19O1xuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjE3Mjg6RVhQT1JUX1NZTUJPTF9HUEwob2ZfZndub2RlX29wcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTgxCgkJCQkJCQlvdXRwdXQ6IDE2MQoJCQkJCQkJdGhvdWdodHM6IDQ2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoZXNlIGNoYW5nZXMsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgYG9mX2xpbmtfdG9fcGhhbmRsZWAsIGJ1dCBpdCYjMzk7cyBjbGVhciB0aGUgcmVhbCBhY3Rpb24gaXMgaGFwcGVuaW5nIGVsc2V3aGVyZS4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAsIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgLCBhbmQgYGRldmljZV9saW5rc19kcml2ZXJfYm91bmRgLiBUaG9zZSBhcmUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgc2VlIGBPRmAsIGBQSFlMSUJgLCBhbmQgYE9GX01ESU9gLiBBaCwgYE9GX01ESU9gIGlzIHRyaXN0YXRlLCBtZWFuaW5nIGl0IGNhbiBiZSBhIG1vZHVsZS4gSWYgd2UgbmVlZCBpdCBidWlsdC1pbiwgd2UganVzdCB3YW50IHRvIHNwZWNpZnkgYE9GX01ESU9gIGRpcmVjdGx5LiBEb3VibGUtY2hlY2tpbmcuLi4geWVzLCBgQ09ORklHX09GX01ESU9gIGlzIGNvcnJlY3QuCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgcmVhY2hhYmlsaXR5LiBgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZGAgaXMgdHJpZ2dlcmVkIHdoZW4gYSBkcml2ZXIgYmluZHMgdG8gYSBkZXZpY2Ug4oCTIHN0cmFpZ2h0Zm9yd2FyZC4gYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAgaXMgcmVhY2hhYmxlIGR1cmluZyBkZXZpY2UgdHJlZS1iYXNlZCBNRElPIGJ1cyByZWdpc3RyYXRpb24uIEFuZCBhcyBJIGV4cGVjdGVkLCBgZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5YCBpcyBjYWxsZWQgZnJvbSBib3RoIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgIGFuZCBgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZGAsIHNvIGl0JiMzOTtzIGEgY2VudHJhbCBwb2ludCBvZiB0aGUgbW9kaWZpY2F0aW9ucy4KCkdpdmVuIHRoZXNlIGRlcGVuZGVuY2llcyBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gVGhleSByZXByZXNlbnQgYSBzaWduaWZpY2FudCBzaGlmdCBpbiBob3cgdGhlc2Ugc3Vic3lzdGVtcyBmdW5jdGlvbi4gVGhleSBhcmUgZ29pbmcgdG8gbmVlZCBtb3JlIGluLWRlcHRoIHRlc3RpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPRiYjMzQ7LAogICAgJiMzNDtQSFlMSUImIzM0OywKICAgICYjMzQ7T0ZfTURJTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seSYjMzQ7LAogICAgJiMzNDtfX29mX21kaW9idXNfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7ZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRldmljZSBsaW5rIG1hbmFnZW1lbnQgZnVuY3Rpb24gYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAgYW5kIG1vZGlmaWVzIGBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kYCBhbmQgYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAgdG8gdXNlIGl0LiBJdCBhbHNvIGNoYW5nZXMgT0YgcHJvcGVydHkgcGFyc2luZyB0byBoYW5kbGUgJiMzOTtldGhlcm5ldC1waHktcGFja2FnZSYjMzk7IG5vZGVzLiBUaGVzZSBhcmUgY29yZSBrZXJuZWwgYW5kIHN1YnN5c3RlbSBjaGFuZ2VzIHRoYXQgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09GJiMzNDssCiAgICAmIzM0O1BIWUxJQiYjMzQ7LAogICAgJiMzNDtPRl9NRElPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5JiMzNDssCiAgICAmIzM0O19fb2ZfbWRpb2J1c19yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZGV2aWNlIGxpbmsgbWFuYWdlbWVudCBmdW5jdGlvbiBgZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5YCBhbmQgbW9kaWZpZXMgYGRldmljZV9saW5rc19kcml2ZXJfYm91bmRgIGFuZCBgX19vZl9tZGlvYnVzX3JlZ2lzdGVyYCB0byB1c2UgaXQuIEl0IGFsc28gY2hhbmdlcyBPRiBwcm9wZXJ0eSBwYXJzaW5nIHRvIGhhbmRsZSAmIzM5O2V0aGVybmV0LXBoeS1wYWNrYWdlJiMzOTsgbm9kZXMuIFRoZXNlIGFyZSBjb3JlIGtlcm5lbCBhbmQgc3Vic3lzdGVtIGNoYW5nZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZGV2aWNlIGxpbmsgZnJhbWV3b3JrLCBNRElPIGJ1cyByZWdpc3RyYXRpb24sIGFuZCBPRiBwcm9wZXJ0eSBwYXJzaW5nIHRvIGhhbmRsZSBzeW5jLXN0YXRlLW9ubHkgbGlua3MgYW5kIGV0aGVybmV0LXBoeS1wYWNrYWdlIG5vZGVzLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUga2VybmVsLWludGVybmFsIHN0cnVjdHVyZXMgKGRldmljZSBsaW5rcywgZGV2aWNlIHRyZWUgbm9kZXMsIGxpc3RzKSBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IG1vZGlmeSBib3VuZHMgY2hlY2tpbmcgb3IgYnVmZmVyIGFsbG9jYXRpb25zIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIHVzZS1hZnRlci1mcmVlLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBsb2NraW5nIGlzc3Vlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxN2I5ZjE0ZWY1MGQ2M2UxNjRlNDJjZGM2ZDFkNTIzMmJkNWVlMzE5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMDA6MDU6MDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY29yZS5jIGIvZHJpdmVycy9iYXNlL2NvcmUuYwppbmRleCA0ZDAyNjY4Mjk0NGYyLi42MjdmY2ZhMjc0ZjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKQEAgLTEzMDUsNiAmIzQzOzEzMDUsNTcgQEAgc3RhdGljIHZvaWQgZGV2aWNlX2xpbmtfZHJvcF9tYW5hZ2VkKHN0cnVjdCBkZXZpY2VfbGluayAqbGluaykKIAlrcmVmX3B1dCgmYW1wO2xpbmstJmd0O2tyZWYsIF9fZGV2aWNlX2xpbmtfZGVsKTsKIH0KIAomIzQzOy8qIENhbGxlciBtdXN0IGhvbGQgdGhlIGRldmljZSBsaW5rcyB3cml0ZSBsb2NrLiAqLwomIzQzO3N0YXRpYyB2b2lkIF9fZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KHN0cnVjdCBkZXZpY2UgKmRldiwKJiM0MzsJCQkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpzeW5jX2xpc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlX2xpbmsgKmxpbmssICpsbjsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxpbmssIGxuLCAmYW1wO2Rldi0mZ3Q7bGlua3Muc3VwcGxpZXJzLCBjX25vZGUpIHsKJiM0MzsJCXN0cnVjdCBkZXZpY2UgKnN1cHBsaWVyOwomIzQzOwomIzQzOwkJaWYgKCFkZXZpY2VfbGlua190ZXN0KGxpbmssIERMX0ZMQUdfTUFOQUdFRCkgfHwKJiM0MzsJCSAgICAhZGV2aWNlX2xpbmtfdGVzdChsaW5rLCBETF9GTEFHX1NZTkNfU1RBVEVfT05MWSkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogRExfRkxBR19TWU5DX1NUQVRFX09OTFkgZXhjbHVkZXMgYWxsIG90aGVyIG1hbmFnZWQgbGluayBmbGFncywKJiM0MzsJCSAqIHNvIGl0IGlzIHNhZmUgdG8gZHJvcCB0aGUgbWFuYWdlZCBsaW5rIGNvbXBsZXRlbHkuCiYjNDM7CQkgKi8KJiM0MzsJCXN1cHBsaWVyID0gbGluay0mZ3Q7c3VwcGxpZXI7CiYjNDM7CQlkZXZpY2VfbGlua19kcm9wX21hbmFnZWQobGluayk7CiYjNDM7CiYjNDM7CQlpZiAoZGVmZXJfc3luY19zdGF0ZV9jb3VudCkKJiM0MzsJCQlfX2RldmljZV9saW5rc19zdXBwbGllcl9kZWZlcl9zeW5jKHN1cHBsaWVyKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlfX2RldmljZV9saW5rc19xdWV1ZV9zeW5jX3N0YXRlKHN1cHBsaWVyLCBzeW5jX2xpc3QpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seSAtIERyb3AgbWFuYWdlZCBzeW5jLXN0YXRlLW9ubHkgbGlua3MKJiM0MzsgKiBAZGV2OiBDb25zdW1lciBkZXZpY2Ugd2hvc2UgcHJveHkgbGlua3Mgc2hvdWxkIGJlIGRyb3BwZWQKJiM0MzsgKgomIzQzOyAqIEZyYW1ld29ya3Mgd2hpY2ggcG9wdWxhdGUgY2hpbGQgZGV2aWNlcyBiZWxvdyBhIGRyaXZlcmxlc3MgZGV2aWNlIGNhbiBjYWxsCiYjNDM7ICogdGhpcyBhZnRlciBhZGRpbmcgYWxsIG9mIHRoZSBjaGlsZHJlbi4gVGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSBhY3F1aXJlZCB0aGVpcgomIzQzOyAqIG93biBsaW5rcyBieSB0aGVuLCBzbyB0aGUgdGVtcG9yYXJ5IGxpbmtzIHdoaWNoIG9ubHkgcHJldmVudCBzdXBwbGllcnMgZnJvbQomIzQzOyAqIHJlY2VpdmluZyBzeW5jX3N0YXRlKCkgY2FsbGJhY2tzIGFyZSBubyBsb25nZXIgbmVlZGVkLgomIzQzOyAqCiYjNDM7ICogUmUtZXZhbHVhdGUgZWFjaCBhZmZlY3RlZCBzdXBwbGllciBmb3IgYSBzeW5jX3N0YXRlKCkgY2FsbGJhY2sgYWZ0ZXIgaXRzCiYjNDM7ICogbGluayBpcyBkcm9wcGVkLgomIzQzOyAqLwomIzQzO3ZvaWQgZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KHN0cnVjdCBkZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CUxJU1RfSEVBRChzeW5jX2xpc3QpOwomIzQzOwomIzQzOwlkZXZpY2VfbGlua3Nfd3JpdGVfbG9jaygpOwomIzQzOwlfX2RldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seShkZXYsICZhbXA7c3luY19saXN0KTsKJiM0MzsJZGV2aWNlX2xpbmtzX3dyaXRlX3VubG9jaygpOwomIzQzOwomIzQzOwlkZXZpY2VfbGlua3NfZmx1c2hfc3luY19saXN0KCZhbXA7c3luY19saXN0LCBOVUxMKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KTsKJiM0MzsKIHN0YXRpYyBzc2l6ZV90IHdhaXRpbmdfZm9yX3N1cHBsaWVyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCQkgY29uc3Qgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJCSBjaGFyICpidWYpCkBAIC0xNDE4LDYgJiM0MzsxNDY5LDggQEAgdm9pZCBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIAllbHNlCiAJCV9fZGV2aWNlX2xpbmtzX3F1ZXVlX3N5bmNfc3RhdGUoZGV2LCAmYW1wO3N5bmNfbGlzdCk7CiAKJiM0MzsJX19kZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkoZGV2LCAmYW1wO3N5bmNfbGlzdCk7CiYjNDM7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxpbmssIGxuLCAmYW1wO2Rldi0mZ3Q7bGlua3Muc3VwcGxpZXJzLCBjX25vZGUpIHsKIAkJc3RydWN0IGRldmljZSAqc3VwcGxpZXI7CiAKQEAgLTE0MjUsMTcgJiM0MzsxNDc4LDEwIEBAIHZvaWQgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJCQljb250aW51ZTsKIAogCQlzdXBwbGllciA9IGxpbmstJmd0O3N1cHBsaWVyOwotCQlpZiAoZGV2aWNlX2xpbmtfdGVzdChsaW5rLCBETF9GTEFHX1NZTkNfU1RBVEVfT05MWSkpIHsKLQkJCS8qCi0JCQkgKiBXaGVuIERMX0ZMQUdfU1lOQ19TVEFURV9PTkxZIGlzIHNldCwgaXQgbWVhbnMgbm8KLQkJCSAqIG90aGVyIERMX01BTkFHRURfTElOS19GTEFHUyBoYXZlIGJlZW4gc2V0LiBTbywgaXQmIzM5O3MKLQkJCSAqIHNhdmUgdG8gZHJvcCB0aGUgbWFuYWdlZCBsaW5rIGNvbXBsZXRlbHkuCi0JCQkgKi8KLQkJCWRldmljZV9saW5rX2Ryb3BfbWFuYWdlZChsaW5rKTsKLQkJfSBlbHNlIGlmIChkZXZfaXNfYmVzdF9lZmZvcnQoZGV2KSAmYW1wOyZhbXA7Ci0JCQkgICBkZXZpY2VfbGlua190ZXN0KGxpbmssIERMX0ZMQUdfSU5GRVJSRUQpICZhbXA7JmFtcDsKLQkJCSAgIGxpbmstJmd0O3N0YXR1cyAhPSBETF9TVEFURV9DT05TVU1FUl9QUk9CRSAmYW1wOyZhbXA7Ci0JCQkgICAhZGV2X2Nhbl9tYXRjaChsaW5rLSZndDtzdXBwbGllcikpIHsKJiM0MzsJCWlmIChkZXZfaXNfYmVzdF9lZmZvcnQoZGV2KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgZGV2aWNlX2xpbmtfdGVzdChsaW5rLCBETF9GTEFHX0lORkVSUkVEKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbGluay0mZ3Q7c3RhdHVzICE9IERMX1NUQVRFX0NPTlNVTUVSX1BST0JFICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhZGV2X2Nhbl9tYXRjaChsaW5rLSZndDtzdXBwbGllcikpIHsKIAkJCS8qCiAJCQkgKiBXaGVuIGRldl9pc19iZXN0X2VmZm9ydCgpIGlzIHRydWUsIHdlIGlnbm9yZSBkZXZpY2UKIAkJCSAqIGxpbmtzIHRvIHN1cHBsaWVycyB0aGF0IGRvbiYjMzk7dCBoYXZlIGEgZHJpdmVyLiAgSWYgdGhlCkBAIC0xNDQ5LDEyICYjNDM7MTQ5NSw2IEBAIHZvaWQgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJCQlXUklURV9PTkNFKGxpbmstJmd0O3N0YXR1cywgRExfU1RBVEVfQUNUSVZFKTsKIAkJfQogCi0JCS8qCi0JCSAqIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBldmVuIGZvciB0aGUgZGVsZXRlZAotCQkgKiBETF9GTEFHX1NZTkNfU1RBVEVfT05MWSBkZXZpY2UgbGluayBpbiBjYXNlIGl0IHdhcyB0aGUgbGFzdAotCQkgKiBkZXZpY2UgbGluayB0aGF0IHdhcyBwcmV2ZW50aW5nIHRoZSBzdXBwbGllciBmcm9tIGdldHRpbmcgYQotCQkgKiBzeW5jX3N0YXRlKCkgY2FsbC4KLQkJICovCiAJCWlmIChkZWZlcl9zeW5jX3N0YXRlX2NvdW50KQogCQkJX19kZXZpY2VfbGlua3Nfc3VwcGxpZXJfZGVmZXJfc3luYyhzdXBwbGllcik7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jIGIvZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMKaW5kZXggYjhkMjk4YzA0ZDNmZi4uNDlmOWI0MDYyY2Y1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMKQEAgLTIyOSw3ICYjNDM7MjI5LDcgQEAgaW50IF9fb2ZfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJZ290byB1bnJlZ2lzdGVyOwogCiAJaWYgKCFzY2FucGh5cykKLQkJcmV0dXJuIDA7CiYjNDM7CQlnb3RvIGRvbmU7CiAKIAkvKiBhdXRvIHNjYW4gZm9yIFBIWXMgd2l0aCBlbXB0eSByZWcgcHJvcGVydHkgKi8KIAlmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZShucCwgY2hpbGQpIHsKQEAgLTI2MSw2ICYjNDM7MjYxLDkgQEAgaW50IF9fb2ZfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJfQogCX0KIAomIzQzO2RvbmU6CiYjNDM7CWRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seSgmYW1wO21kaW8tJmd0O2Rldik7CiYjNDM7CiAJcmV0dXJuIDA7CiAKIHB1dF91bnJlZ2lzdGVyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9wcm9wZXJ0eS5jIGIvZHJpdmVycy9vZi9wcm9wZXJ0eS5jCmluZGV4IDcyY2YxMjkwN2RlMDMuLmQ1OWJjYjFmMjlkZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2YvcHJvcGVydHkuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL29mL3Byb3BlcnR5LmMKQEAgLTEyNzIsNiAmIzQzOzEyNzIsMjAgQEAgc3RhdGljIHZvaWQgb2ZfbGlua190b19waGFuZGxlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29uX25wLAogCQl0bXBfbnAgPSBvZl9nZXRfbmV4dF9wYXJlbnQodG1wX25wKTsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogQW4gRXRoZXJuZXQgUEhZIHBhY2thZ2Ugbm9kZSBkZXNjcmliZXMgcmVzb3VyY2VzIHNoYXJlZCBieSBpdHMgbWVtYmVyCiYjNDM7CSAqIFBIWXMsIGJ1dCBpcyBub3QgcG9wdWxhdGVkIGFzIGEgc3RydWN0IGRldmljZS4gTGluayBldmVyeSBlbmFibGVkCiYjNDM7CSAqIG1lbWJlciBQSFkgdG8gdGhvc2Ugc3VwcGxpZXJzIHNvIGZ3X2RldmxpbmsgY2FuIHVzZSB0aGUgcmVhbCBjb25zdW1lcgomIzQzOwkgKiBkZXZpY2VzIGluc3RlYWQgb2YgbGVhdmluZyBhIHByb3h5IGxpbmsgb24gdGhlIE1ESU8gYnVzIGluZGVmaW5pdGVseS4KJiM0MzsJICovCiYjNDM7CWlmIChvZl9ub2RlX25hbWVfZXEoY29uX25wLCAmIzM0O2V0aGVybmV0LXBoeS1wYWNrYWdlJiMzNDspKSB7CiYjNDM7CQlmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZV9zY29wZWQoY29uX25wLCBjaGlsZCkKJiM0MzsJCQlmd25vZGVfbGlua19hZGQob2ZfZndub2RlX2hhbmRsZShjaGlsZCksCiYjNDM7CQkJCQlvZl9md25vZGVfaGFuZGxlKHN1cF9ucCksIGZsYWdzKTsKJiM0MzsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCWZ3bm9kZV9saW5rX2FkZChvZl9md25vZGVfaGFuZGxlKGNvbl9ucCksIG9mX2Z3bm9kZV9oYW5kbGUoc3VwX25wKSwgZmxhZ3MpOwogfQogCkBAIC0xNjIwLDcgJiM0MzsxNjM0LDkgQEAgc3RhdGljIGludCBvZl9saW5rX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29uX25wLCBjb25zdCBjaGFyICpwcm9wX25hbWUpCiAKIAkJCW1hdGNoZWQgPSB0cnVlOwogCQkJaSYjNDM7JiM0Mzs7Ci0JCQlvZl9saW5rX3RvX3BoYW5kbGUoY29uX2Rldl9ucCwgcGhhbmRsZSwgcy0mZ3Q7ZndsaW5rX2ZsYWdzKTsKJiM0MzsJCQlpZiAoY29uX2Rldl9ucCkKJiM0MzsJCQkJb2ZfbGlua190b19waGFuZGxlKGNvbl9kZXZfbnAsIHBoYW5kbGUsCiYjNDM7CQkJCQkJICAgcy0mZ3Q7ZndsaW5rX2ZsYWdzKTsKIAkJCW9mX25vZGVfcHV0KHBoYW5kbGUpOwogCQl9CiAJCXMmIzQzOyYjNDM7OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKaW5kZXggYWVlNzlmZDZiMzJiNC4uOGFmYjlmMmIwZDgyNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCkBAIC0xMzgxLDYgJiM0MzsxMzgxLDcgQEAgc3RydWN0IGRldmljZV9saW5rICpkZXZpY2VfbGlua19hZGQoc3RydWN0IGRldmljZSAqY29uc3VtZXIsCiAJCQkJICAgIHN0cnVjdCBkZXZpY2UgKnN1cHBsaWVyLCB1MzIgZmxhZ3MpOwogdm9pZCBkZXZpY2VfbGlua19kZWwoc3RydWN0IGRldmljZV9saW5rICpsaW5rKTsKIHZvaWQgZGV2aWNlX2xpbmtfcmVtb3ZlKHZvaWQgKmNvbnN1bWVyLCBzdHJ1Y3QgZGV2aWNlICpzdXBwbGllcik7CiYjNDM7dm9pZCBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkoc3RydWN0IGRldmljZSAqZGV2KTsKIHZvaWQgZGV2aWNlX2xpbmtzX3N1cHBsaWVyX3N5bmNfc3RhdGVfcGF1c2Uodm9pZCk7CiB2b2lkIGRldmljZV9saW5rc19zdXBwbGllcl9zeW5jX3N0YXRlX3Jlc3VtZSh2b2lkKTsKIHZvaWQgZGV2aWNlX2xpbmtfd2FpdF9yZW1vdmFsKHZvaWQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEzNAoJCQkJCQkJb3V0cHV0OiAxNTcKCQkJCQkJCXRob3VnaHRzOiAzNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRGV2aWNlIExpbmsgRnJhbWV3b3JrIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBpbmZyYXN0cnVjdHVyZTogdGhlIGRldmljZSBsaW5rIGZyYW1ld29yayBpbiBgY29yZS5jYCwgTURJTyBidXMgcmVnaXN0cmF0aW9uLCBhbmQgT0YgcHJvcGVydHkgcGFyc2luZy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBpbnRyb2R1Y2luZyB0aGlzIG5ldyBgZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KClgIGZ1bmN0aW9uLCBhbmQgY2FsbGluZyBpdCBkdXJpbmcgTURJTyBidXMgcmVnaXN0cmF0aW9uLiBJdCYjMzk7cyBhbHNvIG1ha2luZyBhIHNtYWxsIHR3ZWFrIHRvIGBvZl9saW5rX3RvX3BoYW5kbGUoKWAgdG8gaGFuZGxlICYjMzQ7ZXRoZXJuZXQtcGh5LXBhY2thZ2UmIzM0OyBub2Rlcy4KCk15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBCdXQgZnJvbSB3aGF0IEkgY2FuIHNlZSwgdGhpcyBpcyBwdXJlbHkgbG9naWNhbC4gSXQmIzM5O3Mgd29ya2luZyB3aXRoIGRldmljZSBsaW5rcywgbGlzdHMsIGFuZCB0aGUgZGV2aWNlIHRyZWUg4oCTIGFsbCBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlcy4gTm90aGluZyBuZXcgaXMgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCBhbmQgcGFydGlhbGx5IGluaXRpYWxpemVkLiBUaGUgY29kZSBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIGludHJvZHVjaW5nIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gYnVmZmVyIG92ZXJmbG93cyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlIHByaW1hcnkgcmlza3MgaGVyZSBhcmUgdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGxvZ2ljYWwgZXJyb3JzIGxpa2UgZGVhZGxvY2tzIG9yIGluY29ycmVjdCBzdGF0ZSB0cmFuc2l0aW9ucy4gVGhlc2UgYXJlIGV4YWN0bHkgdGhlIHR5cGVzIG9mIHByb2JsZW1zIEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgYXJlIGRlc2lnbmVkIHRvIGNhdGNoLiBTbywgYmFzZWQgb24gdGhlIHNjb3BlIGFuZCBuYXR1cmUgb2YgdGhlIG1vZGlmaWNhdGlvbnMsIEkgc2VlIG5vIHJlYXNvbiB0byBzcGluIHVwIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBmb3IgdGhpcy4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIGZpbmFsIGNoZWNrIGZvciBhbnkgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBqdXN0IHRvIGJlIGV4dHJhIHN1cmUuIGB3YWl0aW5nX2Zvcl9zdXBwbGllcl9zaG93YCBpc24mIzM5O3QgbW9kaWZpZWQsIG9ubHkgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQsIHdoaWNoIGlzIGdvb2QuIGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgIGlzIGV4cG9ydGVkLCBidXQgaXQmIzM5O3MganVzdCBtYW5pcHVsYXRpbmcgaW50ZXJuYWwgbGlzdHMsIHNvIHRoYXQmIzM5O3Mgbm90IGEgY29uY2Vybi4gYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAgaXMgaW50ZXJuYWwsIGFuZCBgb2ZfbGlua19wcm9wZXJ0eWAgaXMgaW50ZXJuYWwgYXMgd2VsbC4KCkFscmlnaHQsIG5vIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gYW5kIG5vIGFwcGFyZW50IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBXZSBzaG91bGQgYmUgZ29vZCB0byBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRldmljZSBsaW5rIGZyYW1ld29yaywgTURJTyBidXMgcmVnaXN0cmF0aW9uLCBhbmQgT0YgcHJvcGVydHkgcGFyc2luZyB0byBoYW5kbGUgc3luYy1zdGF0ZS1vbmx5IGxpbmtzIGFuZCBldGhlcm5ldC1waHktcGFja2FnZSBub2Rlcy4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGtlcm5lbC1pbnRlcm5hbCBzdHJ1Y3R1cmVzIChkZXZpY2UgbGlua3MsIGRldmljZSB0cmVlIG5vZGVzLCBsaXN0cykgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBtb2RpZnkgYm91bmRzIGNoZWNraW5nIG9yIGJ1ZmZlciBhbGxvY2F0aW9ucyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbG9ja2luZyBpc3N1ZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkZXZpY2UgbGluayBmcmFtZXdvcmssIE1ESU8gYnVzIHJlZ2lzdHJhdGlvbiwgYW5kIE9GIHByb3BlcnR5IHBhcnNpbmcgdG8gaGFuZGxlIHN5bmMtc3RhdGUtb25seSBsaW5rcyBhbmQgZXRoZXJuZXQtcGh5LXBhY2thZ2Ugbm9kZXMuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBrZXJuZWwtaW50ZXJuYWwgc3RydWN0dXJlcyAoZGV2aWNlIGxpbmtzLCBkZXZpY2UgdHJlZSBub2RlcywgbGlzdHMpIGFuZCBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgbW9kaWZ5IGJvdW5kcyBjaGVja2luZyBvciBidWZmZXIgYWxsb2NhdGlvbnMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGxvY2tpbmcgaXNzdWVzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA1OjA0LjkwODM1MjMwMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjU5ODg1NzY4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPRlwiLFxuICAgIFwiUEhZTElCXCIsXG4gICAgXCJPRl9NRElPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5XCIsXG4gICAgXCJfX29mX21kaW9idXNfcmVnaXN0ZXJcIixcbiAgICBcImRldmljZV9saW5rc19kcml2ZXJfYm91bmRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkZXZpY2UgbGluayBmcmFtZXdvcmssIE1ESU8gYnVzIHJlZ2lzdHJhdGlvbiwgYW5kIE9GIHByb3BlcnR5IHBhcnNpbmcgdG8gaGFuZGxlIHN5bmMtc3RhdGUtb25seSBsaW5rcyBhbmQgZXRoZXJuZXQtcGh5LXBhY2thZ2Ugbm9kZXMuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBrZXJuZWwtaW50ZXJuYWwgc3RydWN0dXJlcyAoZGV2aWNlIGxpbmtzLCBkZXZpY2UgdHJlZSBub2RlcywgbGlzdHMpIGFuZCBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgbW9kaWZ5IGJvdW5kcyBjaGVja2luZyBvciBidWZmZXIgYWxsb2NhdGlvbnMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGxvY2tpbmcgaXNzdWVzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkZXZpY2UgbGluayBtYW5hZ2VtZW50IGZ1bmN0aW9uIGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgIGFuZCBtb2RpZmllcyBgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZGAgYW5kIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgIHRvIHVzZSBpdC4gSXQgYWxzbyBjaGFuZ2VzIE9GIHByb3BlcnR5IHBhcnNpbmcgdG8gaGFuZGxlICdldGhlcm5ldC1waHktcGFja2FnZScgbm9kZXMuIFRoZXNlIGFyZSBjb3JlIGtlcm5lbCBhbmQgc3Vic3lzdGVtIGNoYW5nZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDU6MDQuOTA4MzU5MjkyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTc5NDkzNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxN2I5ZjE0ZWY1MGQ2M2UxNjRlNDJjZGM2ZDFkNTIzMmJkNWVlMzE5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDE3IDAwOjA1OjA0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jb3JlLmMgYi9kcml2ZXJzL2Jhc2UvY29yZS5jXFxuaW5kZXggNGQwMjY2ODI5NDRmMi4uNjI3ZmNmYTI3NGYwZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jhc2UvY29yZS5jXFxuKysrIGIvZHJpdmVycy9iYXNlL2NvcmUuY1xcbkBAIC0xMzA1LDYgKzEzMDUsNTcgQEAgc3RhdGljIHZvaWQgZGV2aWNlX2xpbmtfZHJvcF9tYW5hZ2VkKHN0cnVjdCBkZXZpY2VfbGluayAqbGluaylcXG4gXFx0a3JlZl9wdXQoXFx1MDAyNmxpbmstXFx1MDAzZWtyZWYsIF9fZGV2aWNlX2xpbmtfZGVsKTtcXG4gfVxcbiBcXG4rLyogQ2FsbGVyIG11c3QgaG9sZCB0aGUgZGV2aWNlIGxpbmtzIHdyaXRlIGxvY2suICovXFxuK3N0YXRpYyB2b2lkIF9fZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KHN0cnVjdCBkZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqc3luY19saXN0KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2VfbGluayAqbGluaywgKmxuO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxpbmssIGxuLCBcXHUwMDI2ZGV2LVxcdTAwM2VsaW5rcy5zdXBwbGllcnMsIGNfbm9kZSkge1xcbitcXHRcXHRzdHJ1Y3QgZGV2aWNlICpzdXBwbGllcjtcXG4rXFxuK1xcdFxcdGlmICghZGV2aWNlX2xpbmtfdGVzdChsaW5rLCBETF9GTEFHX01BTkFHRUQpIHx8XFxuK1xcdFxcdCAgICAhZGV2aWNlX2xpbmtfdGVzdChsaW5rLCBETF9GTEFHX1NZTkNfU1RBVEVfT05MWSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRExfRkxBR19TWU5DX1NUQVRFX09OTFkgZXhjbHVkZXMgYWxsIG90aGVyIG1hbmFnZWQgbGluayBmbGFncyxcXG4rXFx0XFx0ICogc28gaXQgaXMgc2FmZSB0byBkcm9wIHRoZSBtYW5hZ2VkIGxpbmsgY29tcGxldGVseS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHN1cHBsaWVyID0gbGluay1cXHUwMDNlc3VwcGxpZXI7XFxuK1xcdFxcdGRldmljZV9saW5rX2Ryb3BfbWFuYWdlZChsaW5rKTtcXG4rXFxuK1xcdFxcdGlmIChkZWZlcl9zeW5jX3N0YXRlX2NvdW50KVxcbitcXHRcXHRcXHRfX2RldmljZV9saW5rc19zdXBwbGllcl9kZWZlcl9zeW5jKHN1cHBsaWVyKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRfX2RldmljZV9saW5rc19xdWV1ZV9zeW5jX3N0YXRlKHN1cHBsaWVyLCBzeW5jX2xpc3QpO1xcbitcXHR9XFxuK31cXG4rXFxuKy8qKlxcbisgKiBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkgLSBEcm9wIG1hbmFnZWQgc3luYy1zdGF0ZS1vbmx5IGxpbmtzXFxuKyAqIEBkZXY6IENvbnN1bWVyIGRldmljZSB3aG9zZSBwcm94eSBsaW5rcyBzaG91bGQgYmUgZHJvcHBlZFxcbisgKlxcbisgKiBGcmFtZXdvcmtzIHdoaWNoIHBvcHVsYXRlIGNoaWxkIGRldmljZXMgYmVsb3cgYSBkcml2ZXJsZXNzIGRldmljZSBjYW4gY2FsbFxcbisgKiB0aGlzIGFmdGVyIGFkZGluZyBhbGwgb2YgdGhlIGNoaWxkcmVuLiBUaGUgY2hpbGRyZW4gd2lsbCBoYXZlIGFjcXVpcmVkIHRoZWlyXFxuKyAqIG93biBsaW5rcyBieSB0aGVuLCBzbyB0aGUgdGVtcG9yYXJ5IGxpbmtzIHdoaWNoIG9ubHkgcHJldmVudCBzdXBwbGllcnMgZnJvbVxcbisgKiByZWNlaXZpbmcgc3luY19zdGF0ZSgpIGNhbGxiYWNrcyBhcmUgbm8gbG9uZ2VyIG5lZWRlZC5cXG4rICpcXG4rICogUmUtZXZhbHVhdGUgZWFjaCBhZmZlY3RlZCBzdXBwbGllciBmb3IgYSBzeW5jX3N0YXRlKCkgY2FsbGJhY2sgYWZ0ZXIgaXRzXFxuKyAqIGxpbmsgaXMgZHJvcHBlZC5cXG4rICovXFxuK3ZvaWQgZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KHN0cnVjdCBkZXZpY2UgKmRldilcXG4re1xcbitcXHRMSVNUX0hFQUQoc3luY19saXN0KTtcXG4rXFxuK1xcdGRldmljZV9saW5rc193cml0ZV9sb2NrKCk7XFxuK1xcdF9fZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KGRldiwgXFx1MDAyNnN5bmNfbGlzdCk7XFxuK1xcdGRldmljZV9saW5rc193cml0ZV91bmxvY2soKTtcXG4rXFxuK1xcdGRldmljZV9saW5rc19mbHVzaF9zeW5jX2xpc3QoXFx1MDAyNnN5bmNfbGlzdCwgTlVMTCk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KTtcXG4rXFxuIHN0YXRpYyBzc2l6ZV90IHdhaXRpbmdfZm9yX3N1cHBsaWVyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuIFxcdFxcdFxcdFxcdFxcdCBjaGFyICpidWYpXFxuQEAgLTE0MTgsNiArMTQ2OSw4IEBAIHZvaWQgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdGVsc2VcXG4gXFx0XFx0X19kZXZpY2VfbGlua3NfcXVldWVfc3luY19zdGF0ZShkZXYsIFxcdTAwMjZzeW5jX2xpc3QpO1xcbiBcXG4rXFx0X19kZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkoZGV2LCBcXHUwMDI2c3luY19saXN0KTtcXG4rXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsaW5rLCBsbiwgXFx1MDAyNmRldi1cXHUwMDNlbGlua3Muc3VwcGxpZXJzLCBjX25vZGUpIHtcXG4gXFx0XFx0c3RydWN0IGRldmljZSAqc3VwcGxpZXI7XFxuIFxcbkBAIC0xNDI1LDE3ICsxNDc4LDEwIEBAIHZvaWQgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0c3VwcGxpZXIgPSBsaW5rLVxcdTAwM2VzdXBwbGllcjtcXG4tXFx0XFx0aWYgKGRldmljZV9saW5rX3Rlc3QobGluaywgRExfRkxBR19TWU5DX1NUQVRFX09OTFkpKSB7XFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIFdoZW4gRExfRkxBR19TWU5DX1NUQVRFX09OTFkgaXMgc2V0LCBpdCBtZWFucyBub1xcbi1cXHRcXHRcXHQgKiBvdGhlciBETF9NQU5BR0VEX0xJTktfRkxBR1MgaGF2ZSBiZWVuIHNldC4gU28sIGl0J3NcXG4tXFx0XFx0XFx0ICogc2F2ZSB0byBkcm9wIHRoZSBtYW5hZ2VkIGxpbmsgY29tcGxldGVseS5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGRldmljZV9saW5rX2Ryb3BfbWFuYWdlZChsaW5rKTtcXG4tXFx0XFx0fSBlbHNlIGlmIChkZXZfaXNfYmVzdF9lZmZvcnQoZGV2KSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICBkZXZpY2VfbGlua190ZXN0KGxpbmssIERMX0ZMQUdfSU5GRVJSRUQpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgIGxpbmstXFx1MDAzZXN0YXR1cyAhPSBETF9TVEFURV9DT05TVU1FUl9QUk9CRSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAhZGV2X2Nhbl9tYXRjaChsaW5rLVxcdTAwM2VzdXBwbGllcikpIHtcXG4rXFx0XFx0aWYgKGRldl9pc19iZXN0X2VmZm9ydChkZXYpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBkZXZpY2VfbGlua190ZXN0KGxpbmssIERMX0ZMQUdfSU5GRVJSRUQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBsaW5rLVxcdTAwM2VzdGF0dXMgIT0gRExfU1RBVEVfQ09OU1VNRVJfUFJPQkUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFkZXZfY2FuX21hdGNoKGxpbmstXFx1MDAzZXN1cHBsaWVyKSkge1xcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBXaGVuIGRldl9pc19iZXN0X2VmZm9ydCgpIGlzIHRydWUsIHdlIGlnbm9yZSBkZXZpY2VcXG4gXFx0XFx0XFx0ICogbGlua3MgdG8gc3VwcGxpZXJzIHRoYXQgZG9uJ3QgaGF2ZSBhIGRyaXZlci4gIElmIHRoZVxcbkBAIC0xNDQ5LDEyICsxNDk1LDYgQEAgdm9pZCBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0XFx0XFx0V1JJVEVfT05DRShsaW5rLVxcdTAwM2VzdGF0dXMsIERMX1NUQVRFX0FDVElWRSk7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBldmVuIGZvciB0aGUgZGVsZXRlZFxcbi1cXHRcXHQgKiBETF9GTEFHX1NZTkNfU1RBVEVfT05MWSBkZXZpY2UgbGluayBpbiBjYXNlIGl0IHdhcyB0aGUgbGFzdFxcbi1cXHRcXHQgKiBkZXZpY2UgbGluayB0aGF0IHdhcyBwcmV2ZW50aW5nIHRoZSBzdXBwbGllciBmcm9tIGdldHRpbmcgYVxcbi1cXHRcXHQgKiBzeW5jX3N0YXRlKCkgY2FsbC5cXG4tXFx0XFx0ICovXFxuIFxcdFxcdGlmIChkZWZlcl9zeW5jX3N0YXRlX2NvdW50KVxcbiBcXHRcXHRcXHRfX2RldmljZV9saW5rc19zdXBwbGllcl9kZWZlcl9zeW5jKHN1cHBsaWVyKTtcXG4gXFx0XFx0ZWxzZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYyBiL2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jXFxuaW5kZXggYjhkMjk4YzA0ZDNmZi4uNDlmOWI0MDYyY2Y1YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uY1xcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jXFxuQEAgLTIyOSw3ICsyMjksNyBAQCBpbnQgX19vZl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbiBcXHRcXHRnb3RvIHVucmVnaXN0ZXI7XFxuIFxcbiBcXHRpZiAoIXNjYW5waHlzKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0Z290byBkb25lO1xcbiBcXG4gXFx0LyogYXV0byBzY2FuIGZvciBQSFlzIHdpdGggZW1wdHkgcmVnIHByb3BlcnR5ICovXFxuIFxcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKG5wLCBjaGlsZCkge1xcbkBAIC0yNjEsNiArMjYxLDkgQEAgaW50IF9fb2ZfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitkb25lOlxcbitcXHRkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkoXFx1MDAyNm1kaW8tXFx1MDAzZWRldik7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIHB1dF91bnJlZ2lzdGVyOlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL3Byb3BlcnR5LmMgYi9kcml2ZXJzL29mL3Byb3BlcnR5LmNcXG5pbmRleCA3MmNmMTI5MDdkZTAzLi5kNTliY2IxZjI5ZGUwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvb2YvcHJvcGVydHkuY1xcbisrKyBiL2RyaXZlcnMvb2YvcHJvcGVydHkuY1xcbkBAIC0xMjcyLDYgKzEyNzIsMjAgQEAgc3RhdGljIHZvaWQgb2ZfbGlua190b19waGFuZGxlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29uX25wLFxcbiBcXHRcXHR0bXBfbnAgPSBvZl9nZXRfbmV4dF9wYXJlbnQodG1wX25wKTtcXG4gXFx0fVxcbiBcXG4rXFx0LypcXG4rXFx0ICogQW4gRXRoZXJuZXQgUEhZIHBhY2thZ2Ugbm9kZSBkZXNjcmliZXMgcmVzb3VyY2VzIHNoYXJlZCBieSBpdHMgbWVtYmVyXFxuK1xcdCAqIFBIWXMsIGJ1dCBpcyBub3QgcG9wdWxhdGVkIGFzIGEgc3RydWN0IGRldmljZS4gTGluayBldmVyeSBlbmFibGVkXFxuK1xcdCAqIG1lbWJlciBQSFkgdG8gdGhvc2Ugc3VwcGxpZXJzIHNvIGZ3X2RldmxpbmsgY2FuIHVzZSB0aGUgcmVhbCBjb25zdW1lclxcbitcXHQgKiBkZXZpY2VzIGluc3RlYWQgb2YgbGVhdmluZyBhIHByb3h5IGxpbmsgb24gdGhlIE1ESU8gYnVzIGluZGVmaW5pdGVseS5cXG4rXFx0ICovXFxuK1xcdGlmIChvZl9ub2RlX25hbWVfZXEoY29uX25wLCBcXFwiZXRoZXJuZXQtcGh5LXBhY2thZ2VcXFwiKSkge1xcbitcXHRcXHRmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZV9zY29wZWQoY29uX25wLCBjaGlsZClcXG4rXFx0XFx0XFx0Zndub2RlX2xpbmtfYWRkKG9mX2Z3bm9kZV9oYW5kbGUoY2hpbGQpLFxcbitcXHRcXHRcXHRcXHRcXHRvZl9md25vZGVfaGFuZGxlKHN1cF9ucCksIGZsYWdzKTtcXG4rXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4gXFx0Zndub2RlX2xpbmtfYWRkKG9mX2Z3bm9kZV9oYW5kbGUoY29uX25wKSwgb2ZfZndub2RlX2hhbmRsZShzdXBfbnApLCBmbGFncyk7XFxuIH1cXG4gXFxuQEAgLTE2MjAsNyArMTYzNCw5IEBAIHN0YXRpYyBpbnQgb2ZfbGlua19wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvbl9ucCwgY29uc3QgY2hhciAqcHJvcF9uYW1lKVxcbiBcXG4gXFx0XFx0XFx0bWF0Y2hlZCA9IHRydWU7XFxuIFxcdFxcdFxcdGkrKztcXG4tXFx0XFx0XFx0b2ZfbGlua190b19waGFuZGxlKGNvbl9kZXZfbnAsIHBoYW5kbGUsIHMtXFx1MDAzZWZ3bGlua19mbGFncyk7XFxuK1xcdFxcdFxcdGlmIChjb25fZGV2X25wKVxcbitcXHRcXHRcXHRcXHRvZl9saW5rX3RvX3BoYW5kbGUoY29uX2Rldl9ucCwgcGhhbmRsZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgcy1cXHUwMDNlZndsaW5rX2ZsYWdzKTtcXG4gXFx0XFx0XFx0b2Zfbm9kZV9wdXQocGhhbmRsZSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cysrO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaFxcbmluZGV4IGFlZTc5ZmQ2YjMyYjQuLjhhZmI5ZjJiMGQ4MjUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmhcXG5AQCAtMTM4MSw2ICsxMzgxLDcgQEAgc3RydWN0IGRldmljZV9saW5rICpkZXZpY2VfbGlua19hZGQoc3RydWN0IGRldmljZSAqY29uc3VtZXIsXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZGV2aWNlICpzdXBwbGllciwgdTMyIGZsYWdzKTtcXG4gdm9pZCBkZXZpY2VfbGlua19kZWwoc3RydWN0IGRldmljZV9saW5rICpsaW5rKTtcXG4gdm9pZCBkZXZpY2VfbGlua19yZW1vdmUodm9pZCAqY29uc3VtZXIsIHN0cnVjdCBkZXZpY2UgKnN1cHBsaWVyKTtcXG4rdm9pZCBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkoc3RydWN0IGRldmljZSAqZGV2KTtcXG4gdm9pZCBkZXZpY2VfbGlua3Nfc3VwcGxpZXJfc3luY19zdGF0ZV9wYXVzZSh2b2lkKTtcXG4gdm9pZCBkZXZpY2VfbGlua3Nfc3VwcGxpZXJfc3luY19zdGF0ZV9yZXN1bWUodm9pZCk7XFxuIHZvaWQgZGV2aWNlX2xpbmtfd2FpdF9yZW1vdmFsKHZvaWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNTowNS4zMjcwNjc3MzhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4NzcwMjM2Njc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPRlwiLFxuICAgIFwiUEhZTElCXCIsXG4gICAgXCJPRl9NRElPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5XCIsXG4gICAgXCJfX29mX21kaW9idXNfcmVnaXN0ZXJcIixcbiAgICBcImRldmljZV9saW5rc19kcml2ZXJfYm91bmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRldmljZSBsaW5rIG1hbmFnZW1lbnQgZnVuY3Rpb24gYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAgYW5kIG1vZGlmaWVzIGBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kYCBhbmQgYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAgdG8gdXNlIGl0LiBJdCBhbHNvIGNoYW5nZXMgT0YgcHJvcGVydHkgcGFyc2luZyB0byBoYW5kbGUgJ2V0aGVybmV0LXBoeS1wYWNrYWdlJyBub2Rlcy4gVGhlc2UgYXJlIGNvcmUga2VybmVsIGFuZCBzdWJzeXN0ZW0gY2hhbmdlcyB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxN2I5ZjE0ZWY1MGQ2M2UxNjRlNDJjZGM2ZDFkNTIzMmJkNWVlMzE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDA6MDU6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY29yZS5jIGIvZHJpdmVycy9iYXNlL2NvcmUuY1xuaW5kZXggNGQwMjY2ODI5NDRmMi4uNjI3ZmNmYTI3NGYwZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmFzZS9jb3JlLmNcbisrKyBiL2RyaXZlcnMvYmFzZS9jb3JlLmNcbkBAIC0xMzA1LDYgKzEzMDUsNTcgQEAgc3RhdGljIHZvaWQgZGV2aWNlX2xpbmtfZHJvcF9tYW5hZ2VkKHN0cnVjdCBkZXZpY2VfbGluayAqbGluaylcbiBcdGtyZWZfcHV0KFx1MDAyNmxpbmstXHUwMDNla3JlZiwgX19kZXZpY2VfbGlua19kZWwpO1xuIH1cbiBcbisvKiBDYWxsZXIgbXVzdCBob2xkIHRoZSBkZXZpY2UgbGlua3Mgd3JpdGUgbG9jay4gKi9cbitzdGF0aWMgdm9pZCBfX2RldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRcdFx0c3RydWN0IGxpc3RfaGVhZCAqc3luY19saXN0KVxuK3tcbitcdHN0cnVjdCBkZXZpY2VfbGluayAqbGluaywgKmxuO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxpbmssIGxuLCBcdTAwMjZkZXYtXHUwMDNlbGlua3Muc3VwcGxpZXJzLCBjX25vZGUpIHtcbitcdFx0c3RydWN0IGRldmljZSAqc3VwcGxpZXI7XG4rXG4rXHRcdGlmICghZGV2aWNlX2xpbmtfdGVzdChsaW5rLCBETF9GTEFHX01BTkFHRUQpIHx8XG4rXHRcdCAgICAhZGV2aWNlX2xpbmtfdGVzdChsaW5rLCBETF9GTEFHX1NZTkNfU1RBVEVfT05MWSkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIERMX0ZMQUdfU1lOQ19TVEFURV9PTkxZIGV4Y2x1ZGVzIGFsbCBvdGhlciBtYW5hZ2VkIGxpbmsgZmxhZ3MsXG4rXHRcdCAqIHNvIGl0IGlzIHNhZmUgdG8gZHJvcCB0aGUgbWFuYWdlZCBsaW5rIGNvbXBsZXRlbHkuXG4rXHRcdCAqL1xuK1x0XHRzdXBwbGllciA9IGxpbmstXHUwMDNlc3VwcGxpZXI7XG4rXHRcdGRldmljZV9saW5rX2Ryb3BfbWFuYWdlZChsaW5rKTtcbitcbitcdFx0aWYgKGRlZmVyX3N5bmNfc3RhdGVfY291bnQpXG4rXHRcdFx0X19kZXZpY2VfbGlua3Nfc3VwcGxpZXJfZGVmZXJfc3luYyhzdXBwbGllcik7XG4rXHRcdGVsc2VcbitcdFx0XHRfX2RldmljZV9saW5rc19xdWV1ZV9zeW5jX3N0YXRlKHN1cHBsaWVyLCBzeW5jX2xpc3QpO1xuK1x0fVxuK31cbitcbisvKipcbisgKiBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkgLSBEcm9wIG1hbmFnZWQgc3luYy1zdGF0ZS1vbmx5IGxpbmtzXG4rICogQGRldjogQ29uc3VtZXIgZGV2aWNlIHdob3NlIHByb3h5IGxpbmtzIHNob3VsZCBiZSBkcm9wcGVkXG4rICpcbisgKiBGcmFtZXdvcmtzIHdoaWNoIHBvcHVsYXRlIGNoaWxkIGRldmljZXMgYmVsb3cgYSBkcml2ZXJsZXNzIGRldmljZSBjYW4gY2FsbFxuKyAqIHRoaXMgYWZ0ZXIgYWRkaW5nIGFsbCBvZiB0aGUgY2hpbGRyZW4uIFRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgYWNxdWlyZWQgdGhlaXJcbisgKiBvd24gbGlua3MgYnkgdGhlbiwgc28gdGhlIHRlbXBvcmFyeSBsaW5rcyB3aGljaCBvbmx5IHByZXZlbnQgc3VwcGxpZXJzIGZyb21cbisgKiByZWNlaXZpbmcgc3luY19zdGF0ZSgpIGNhbGxiYWNrcyBhcmUgbm8gbG9uZ2VyIG5lZWRlZC5cbisgKlxuKyAqIFJlLWV2YWx1YXRlIGVhY2ggYWZmZWN0ZWQgc3VwcGxpZXIgZm9yIGEgc3luY19zdGF0ZSgpIGNhbGxiYWNrIGFmdGVyIGl0c1xuKyAqIGxpbmsgaXMgZHJvcHBlZC5cbisgKi9cbit2b2lkIGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4re1xuK1x0TElTVF9IRUFEKHN5bmNfbGlzdCk7XG4rXG4rXHRkZXZpY2VfbGlua3Nfd3JpdGVfbG9jaygpO1xuK1x0X19kZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkoZGV2LCBcdTAwMjZzeW5jX2xpc3QpO1xuK1x0ZGV2aWNlX2xpbmtzX3dyaXRlX3VubG9jaygpO1xuK1xuK1x0ZGV2aWNlX2xpbmtzX2ZsdXNoX3N5bmNfbGlzdChcdTAwMjZzeW5jX2xpc3QsIE5VTEwpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkpO1xuK1xuIHN0YXRpYyBzc2l6ZV90IHdhaXRpbmdfZm9yX3N1cHBsaWVyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4gXHRcdFx0XHRcdCBjaGFyICpidWYpXG5AQCAtMTQxOCw2ICsxNDY5LDggQEAgdm9pZCBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdGVsc2VcbiBcdFx0X19kZXZpY2VfbGlua3NfcXVldWVfc3luY19zdGF0ZShkZXYsIFx1MDAyNnN5bmNfbGlzdCk7XG4gXG4rXHRfX2RldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seShkZXYsIFx1MDAyNnN5bmNfbGlzdCk7XG4rXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobGluaywgbG4sIFx1MDAyNmRldi1cdTAwM2VsaW5rcy5zdXBwbGllcnMsIGNfbm9kZSkge1xuIFx0XHRzdHJ1Y3QgZGV2aWNlICpzdXBwbGllcjtcbiBcbkBAIC0xNDI1LDE3ICsxNDc4LDEwIEBAIHZvaWQgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHN1cHBsaWVyID0gbGluay1cdTAwM2VzdXBwbGllcjtcbi1cdFx0aWYgKGRldmljZV9saW5rX3Rlc3QobGluaywgRExfRkxBR19TWU5DX1NUQVRFX09OTFkpKSB7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBXaGVuIERMX0ZMQUdfU1lOQ19TVEFURV9PTkxZIGlzIHNldCwgaXQgbWVhbnMgbm9cbi1cdFx0XHQgKiBvdGhlciBETF9NQU5BR0VEX0xJTktfRkxBR1MgaGF2ZSBiZWVuIHNldC4gU28sIGl0J3Ncbi1cdFx0XHQgKiBzYXZlIHRvIGRyb3AgdGhlIG1hbmFnZWQgbGluayBjb21wbGV0ZWx5LlxuLVx0XHRcdCAqL1xuLVx0XHRcdGRldmljZV9saW5rX2Ryb3BfbWFuYWdlZChsaW5rKTtcbi1cdFx0fSBlbHNlIGlmIChkZXZfaXNfYmVzdF9lZmZvcnQoZGV2KSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICBkZXZpY2VfbGlua190ZXN0KGxpbmssIERMX0ZMQUdfSU5GRVJSRUQpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgIGxpbmstXHUwMDNlc3RhdHVzICE9IERMX1NUQVRFX0NPTlNVTUVSX1BST0JFIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICFkZXZfY2FuX21hdGNoKGxpbmstXHUwMDNlc3VwcGxpZXIpKSB7XG4rXHRcdGlmIChkZXZfaXNfYmVzdF9lZmZvcnQoZGV2KSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGRldmljZV9saW5rX3Rlc3QobGluaywgRExfRkxBR19JTkZFUlJFRCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBsaW5rLVx1MDAzZXN0YXR1cyAhPSBETF9TVEFURV9DT05TVU1FUl9QUk9CRSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFkZXZfY2FuX21hdGNoKGxpbmstXHUwMDNlc3VwcGxpZXIpKSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBXaGVuIGRldl9pc19iZXN0X2VmZm9ydCgpIGlzIHRydWUsIHdlIGlnbm9yZSBkZXZpY2VcbiBcdFx0XHQgKiBsaW5rcyB0byBzdXBwbGllcnMgdGhhdCBkb24ndCBoYXZlIGEgZHJpdmVyLiAgSWYgdGhlXG5AQCAtMTQ0OSwxMiArMTQ5NSw2IEBAIHZvaWQgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRcdFx0V1JJVEVfT05DRShsaW5rLVx1MDAzZXN0YXR1cywgRExfU1RBVEVfQUNUSVZFKTtcbiBcdFx0fVxuIFxuLVx0XHQvKlxuLVx0XHQgKiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgZXZlbiBmb3IgdGhlIGRlbGV0ZWRcbi1cdFx0ICogRExfRkxBR19TWU5DX1NUQVRFX09OTFkgZGV2aWNlIGxpbmsgaW4gY2FzZSBpdCB3YXMgdGhlIGxhc3Rcbi1cdFx0ICogZGV2aWNlIGxpbmsgdGhhdCB3YXMgcHJldmVudGluZyB0aGUgc3VwcGxpZXIgZnJvbSBnZXR0aW5nIGFcbi1cdFx0ICogc3luY19zdGF0ZSgpIGNhbGwuXG4tXHRcdCAqL1xuIFx0XHRpZiAoZGVmZXJfc3luY19zdGF0ZV9jb3VudClcbiBcdFx0XHRfX2RldmljZV9saW5rc19zdXBwbGllcl9kZWZlcl9zeW5jKHN1cHBsaWVyKTtcbiBcdFx0ZWxzZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jIGIvZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmNcbmluZGV4IGI4ZDI5OGMwNGQzZmYuLjQ5ZjliNDA2MmNmNWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uY1xuKysrIGIvZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmNcbkBAIC0yMjksNyArMjI5LDcgQEAgaW50IF9fb2ZfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCxcbiBcdFx0Z290byB1bnJlZ2lzdGVyO1xuIFxuIFx0aWYgKCFzY2FucGh5cylcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdGdvdG8gZG9uZTtcbiBcbiBcdC8qIGF1dG8gc2NhbiBmb3IgUEhZcyB3aXRoIGVtcHR5IHJlZyBwcm9wZXJ0eSAqL1xuIFx0Zm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGUobnAsIGNoaWxkKSB7XG5AQCAtMjYxLDYgKzI2MSw5IEBAIGludCBfX29mX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4gXHRcdH1cbiBcdH1cbiBcbitkb25lOlxuK1x0ZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KFx1MDAyNm1kaW8tXHUwMDNlZGV2KTtcbitcbiBcdHJldHVybiAwO1xuIFxuIHB1dF91bnJlZ2lzdGVyOlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2YvcHJvcGVydHkuYyBiL2RyaXZlcnMvb2YvcHJvcGVydHkuY1xuaW5kZXggNzJjZjEyOTA3ZGUwMy4uZDU5YmNiMWYyOWRlMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvb2YvcHJvcGVydHkuY1xuKysrIGIvZHJpdmVycy9vZi9wcm9wZXJ0eS5jXG5AQCAtMTI3Miw2ICsxMjcyLDIwIEBAIHN0YXRpYyB2b2lkIG9mX2xpbmtfdG9fcGhhbmRsZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvbl9ucCxcbiBcdFx0dG1wX25wID0gb2ZfZ2V0X25leHRfcGFyZW50KHRtcF9ucCk7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogQW4gRXRoZXJuZXQgUEhZIHBhY2thZ2Ugbm9kZSBkZXNjcmliZXMgcmVzb3VyY2VzIHNoYXJlZCBieSBpdHMgbWVtYmVyXG4rXHQgKiBQSFlzLCBidXQgaXMgbm90IHBvcHVsYXRlZCBhcyBhIHN0cnVjdCBkZXZpY2UuIExpbmsgZXZlcnkgZW5hYmxlZFxuK1x0ICogbWVtYmVyIFBIWSB0byB0aG9zZSBzdXBwbGllcnMgc28gZndfZGV2bGluayBjYW4gdXNlIHRoZSByZWFsIGNvbnN1bWVyXG4rXHQgKiBkZXZpY2VzIGluc3RlYWQgb2YgbGVhdmluZyBhIHByb3h5IGxpbmsgb24gdGhlIE1ESU8gYnVzIGluZGVmaW5pdGVseS5cbitcdCAqL1xuK1x0aWYgKG9mX25vZGVfbmFtZV9lcShjb25fbnAsIFwiZXRoZXJuZXQtcGh5LXBhY2thZ2VcIikpIHtcbitcdFx0Zm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGVfc2NvcGVkKGNvbl9ucCwgY2hpbGQpXG4rXHRcdFx0Zndub2RlX2xpbmtfYWRkKG9mX2Z3bm9kZV9oYW5kbGUoY2hpbGQpLFxuK1x0XHRcdFx0XHRvZl9md25vZGVfaGFuZGxlKHN1cF9ucCksIGZsYWdzKTtcbitcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0Zndub2RlX2xpbmtfYWRkKG9mX2Z3bm9kZV9oYW5kbGUoY29uX25wKSwgb2ZfZndub2RlX2hhbmRsZShzdXBfbnApLCBmbGFncyk7XG4gfVxuIFxuQEAgLTE2MjAsNyArMTYzNCw5IEBAIHN0YXRpYyBpbnQgb2ZfbGlua19wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvbl9ucCwgY29uc3QgY2hhciAqcHJvcF9uYW1lKVxuIFxuIFx0XHRcdG1hdGNoZWQgPSB0cnVlO1xuIFx0XHRcdGkrKztcbi1cdFx0XHRvZl9saW5rX3RvX3BoYW5kbGUoY29uX2Rldl9ucCwgcGhhbmRsZSwgcy1cdTAwM2Vmd2xpbmtfZmxhZ3MpO1xuK1x0XHRcdGlmIChjb25fZGV2X25wKVxuK1x0XHRcdFx0b2ZfbGlua190b19waGFuZGxlKGNvbl9kZXZfbnAsIHBoYW5kbGUsXG4rXHRcdFx0XHRcdFx0ICAgcy1cdTAwM2Vmd2xpbmtfZmxhZ3MpO1xuIFx0XHRcdG9mX25vZGVfcHV0KHBoYW5kbGUpO1xuIFx0XHR9XG4gXHRcdHMrKztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaFxuaW5kZXggYWVlNzlmZDZiMzJiNC4uOGFmYjlmMmIwZDgyNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmhcbkBAIC0xMzgxLDYgKzEzODEsNyBAQCBzdHJ1Y3QgZGV2aWNlX2xpbmsgKmRldmljZV9saW5rX2FkZChzdHJ1Y3QgZGV2aWNlICpjb25zdW1lcixcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlICpzdXBwbGllciwgdTMyIGZsYWdzKTtcbiB2b2lkIGRldmljZV9saW5rX2RlbChzdHJ1Y3QgZGV2aWNlX2xpbmsgKmxpbmspO1xuIHZvaWQgZGV2aWNlX2xpbmtfcmVtb3ZlKHZvaWQgKmNvbnN1bWVyLCBzdHJ1Y3QgZGV2aWNlICpzdXBwbGllcik7XG4rdm9pZCBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkoc3RydWN0IGRldmljZSAqZGV2KTtcbiB2b2lkIGRldmljZV9saW5rc19zdXBwbGllcl9zeW5jX3N0YXRlX3BhdXNlKHZvaWQpO1xuIHZvaWQgZGV2aWNlX2xpbmtzX3N1cHBsaWVyX3N5bmNfc3RhdGVfcmVzdW1lKHZvaWQpO1xuIHZvaWQgZGV2aWNlX2xpbmtfd2FpdF9yZW1vdmFsKHZvaWQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDU6MDUuMzI3MDY5NjA4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUwMzc5NjY5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBGaXJzdCwgd2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaW50cm9kdWNlcyBhbnkgKmZ1bmN0aW9uYWwqIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHdhcnJhbnQgZnV6emluZy4gTG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggc29tZSBtb2RpZmljYXRpb25zIHRvIGBkcml2ZXJzL2Jhc2UvY29yZS5jYCwgYGRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jYCwgYGRyaXZlcnMvb2YvcHJvcGVydHkuY2AsIGFuZCB0aGUgYGluY2x1ZGUvbGludXgvZGV2aWNlLmhgIGhlYWRlci5cblxuU3BlY2lmaWNhbGx5LCB3ZSd2ZSBnb3QgYSBuZXcgZnVuY3Rpb24sIGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgLCBpbnRyb2R1Y2VkIGFuZCBleHBvcnRlZCBpbiBgZGV2aWNlLmhgLCBhbmQgdXNlZCBpbiBgb2ZfbWRpby5jYCB3aXRoaW4gYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAuICBUaGF0IGFsb25lIGlzIGludGVyZXN0aW5nLCBhcyBhbnkgY2hhbmdlIHRvIHRoZSBkZXZpY2UgbGluayBoYW5kbGluZyBpcyBhIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldC4gQWRkaXRpb25hbGx5LCB0aGVyZSBhcmUgc29tZSBjaGFuZ2VzIGluIGBvZl9saW5rX3RvX3BoYW5kbGVgIHJlbGF0ZWQgdG8gXCJldGhlcm5ldC1waHktcGFja2FnZVwiIG5vZGVzLiAgVGhpcyBzb3VuZHMgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBkZXZpY2UgY29yZSBhbmQgaG93IHRoZSBzeXN0ZW0gcGFyc2VzIE9GIHByb3BlcnRpZXMuXG5cblRoZSBrZXkgcXVlc3Rpb24gaXMsIGFyZSB0aGVzZSBjaGFuZ2VzIHJlYWNoYWJsZSB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVU/ICBDb25zaWRlcmluZyB0aGF0IHRoZSBPRiBwcm9wZXJ0eSBwYXJzaW5nIGFuZCBkZXZpY2UgbGlua3MgYXJlIGNvcmUga2VybmVsIGZlYXR1cmVzLCBJJ2Qgc2F5IHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIFwieWVzXCIuICBgb2ZfbWRpby5jYCBpcyBnb2luZyB0byBiZSByZWxldmFudCBmb3IgTURJTyBidXNlcyBkZWZpbmVkIGluIHRoZSBkZXZpY2UgdHJlZSwgYW5kIGRldmljZSBsaW5rIGNoYW5nZXMgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgY29uc2lkZXJlZC5cblxuU28sIGxldCdzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBuZWVkIGZvY3VzIGZvciBmdXp6aW5nLiAgQmFzZWQgb24gdGhlIHBhdGNoLCB0aGVzZSBhcmUgdGhlIHByaW1hcnkgY2FuZGlkYXRlczpcblxuKiAgIGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgIC0gdGhpcyBpcyB0aGUgbmV3IG9uZSwgYW5kIGl0cyBpbmNsdXNpb24gaW4gZGV2aWNlIGxpbmsgaGFuZGxpbmcgbWFrZXMgaXQgYSBoaWdoLXByaW9yaXR5LlxuKiAgIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgIC0gc2luY2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsaW5nIGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgLCBpdCdzIGFub3RoZXIgaW1wb3J0YW50IGZ1bmN0aW9uIHRoYXQgbmVlZHMgaW52ZXN0aWdhdGlvbi5cbiogICBgb2ZfbGlua190b19waGFuZGxlYCAtIHRoaXMgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIEl0IG1pZ2h0IGJlIHdvcnRod2hpbGUgdG8gZXhhbWluZSB0aGUgY2FsbGVycyBmb3IgdGhpcyBhcyB3ZWxsLCBwZXJoYXBzIGBvZl9saW5rX3Byb3BlcnR5YCBvciBgb2ZfZndub2RlX2FkZF9saW5rc2AsIHRob3VnaCBgb2ZfbGlua190b19waGFuZGxlYCBpcyBsaWtlbHkgdGhlIGNvcmUgZm9jdXMuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBkcml2ZXJzL29mL3Byb3BlcnR5LmNgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEzNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA1OjExLjgzMDg2OTgxMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk3OTI1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvZl9saW5rX3RvX3BoYW5kbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9vZi9wcm9wZXJ0eS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvb2YvcHJvcGVydHkuYz0xMjUyPW9mX2Z3bm9kZV9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoY29uc3Qgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSxcXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xMjU3LVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoxMjU4OnN0YXRpYyB2b2lkIG9mX2xpbmtfdG9fcGhhbmRsZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvbl9ucCxcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTI1OS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnN1cF9ucCxcXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYz0xNjE3PXN0YXRpYyBpbnQgb2ZfbGlua19wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvbl9ucCwgY29uc3QgY2hhciAqcHJvcF9uYW1lKVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2MzctXFx0XFx0XFx0aWYgKGNvbl9kZXZfbnApXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjE2Mzg6XFx0XFx0XFx0XFx0b2ZfbGlua190b19waGFuZGxlKGNvbl9kZXZfbnAsIHBoYW5kbGUsXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2MzktXFx0XFx0XFx0XFx0XFx0XFx0ICAgcy1cXHUwMDNlZndsaW5rX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDU6MTEuODc2ODUzMzE4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI5MzkxMjAwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIHlvdXIgc3VtbWFyeTpcblxuKipTdGF0aWMgUHJvcGVydHkgSW5xdWlyeSoqXG5cbkhtbSwgaXMgYG9mX2xpbmtfcHJvcGVydHlgIGFsc28gYSBzdGF0aWMgcHJvcGVydHk/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2suIEl0J3MgaW1wb3J0YW50IHRvIGJlIGFjY3VyYXRlIHdpdGggdGhlc2UgYXNzdW1wdGlvbnMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggcHJvcGVydGllcyB0aGF0IHBvdGVudGlhbGx5IGltcGFjdCBvdGhlciBhcmVhcyBvZiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzUxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDU6MTQuMTcwNzY3OTk2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDc3OTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9mX2xpbmtfcHJvcGVydHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9vZi9wcm9wZXJ0eS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvb2YvcHJvcGVydHkuYz0xNTU1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwcGxpZXJfYmluZGluZ3Mgb2Zfc3VwcGxpZXJfYmluZGluZ3NbXSA9IHtcXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNTk4LS8qKlxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoxNTk5OiAqIG9mX2xpbmtfcHJvcGVydHkgLSBDcmVhdGUgZGV2aWNlIGxpbmtzIHRvIHN1cHBsaWVycyBsaXN0ZWQgaW4gYSBwcm9wZXJ0eVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNjAwLSAqIEBjb25fbnA6IFRoZSBjb25zdW1lciBkZXZpY2UgdHJlZSBub2RlIHdoaWNoIGNvbnRhaW5zIHRoZSBwcm9wZXJ0eVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2MTItICogQW55IGZhaWxlZCBhdHRlbXB0IHRvIGNyZWF0ZSBhIGZ3bm9kZSBsaW5rIHdpbGwgTk9UIHJlc3VsdCBpbiBhbiBpbW1lZGlhdGVcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MTYxMzogKiByZXR1cm4uICBvZl9saW5rX3Byb3BlcnR5KCkgbXVzdCBjcmVhdGUgbGlua3MgdG8gYWxsIHRoZSBhdmFpbGFibGUgc3VwcGxpZXJcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTYxNC0gKiBkZXZpY2UgdHJlZSBub2RlcyBldmVuIHdoZW4gYXR0ZW1wdHMgdG8gY3JlYXRlIGEgbGluayB0byBvbmUgb3IgbW9yZVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2MTYtICovXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjE2MTc6c3RhdGljIGludCBvZl9saW5rX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29uX25wLCBjb25zdCBjaGFyICpwcm9wX25hbWUpXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2MTgte1xcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTE2ODY9c3RhdGljIGludCBvZl9md25vZGVfYWRkX2xpbmtzKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTY5Ny1cXHRmb3JfZWFjaF9wcm9wZXJ0eV9vZl9ub2RlKGNvbl9ucCwgcClcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MTY5ODpcXHRcXHRvZl9saW5rX3Byb3BlcnR5KGNvbl9ucCwgcC1cXHUwMDNlbmFtZSk7XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2OTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA1OjE0LjIxNjI1MTY4MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjEwODMzNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQ6XG5cbioqU3RhdGljIEZ1bmN0aW9uIENvbnVuZHJ1bSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBvZl9md25vZGVfYWRkX2xpbmtzYC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzOiBpcyB0aGlzIGZ1bmN0aW9uIGRlY2xhcmVkIGFzIGBzdGF0aWNgPyBUaGF0J3MgdGhlIGtleSBwb2ludC4gS25vd2luZyBpZiBpdCdzIHN0YXRpYyBjaGFuZ2VzICpldmVyeXRoaW5nKiBhYm91dCBob3cgSSB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlLCBzY29wZSwgYW5kIHBvdGVudGlhbCBpbXBhY3QuIElmIGl0ICppcyogc3RhdGljLCB0aGVuIGl0J3MgbGltaXRlZCBpbiBpdHMgdmlzaWJpbGl0eSBhbmQgdXNhZ2U7IGl0J3Mgc2NvcGVkIHRvIHRoZSBjdXJyZW50IHRyYW5zbGF0aW9uIHVuaXQsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHNvbWV0aGluZyBzcGVjaWZpYyBhYm91dCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSByZXN0IG9mIHRoZSBjb2RlLiBJZiBpdCAqaXNuJ3QqIHN0YXRpYywgdGhlbiBpdCBoYXMgZXh0ZXJuYWwgbGlua2FnZSwgbWVhbmluZyBhbnkgb3RoZXIgcGFydCBvZiB0aGUgcHJvamVjdCBjb3VsZCBjYWxsIGl0LCBkcmFtYXRpY2FsbHkgaW5jcmVhc2luZyB0aGUgY29tcGxleGl0eSBJIG5lZWQgdG8gY29uc2lkZXIgd2hlbiBJJ20gbG9va2luZyBhdCB3aGF0IGl0IGRvZXMsIGFuZCBob3cgaXQgaXMgdXNlZCwgYW5kIHdoYXQgZWZmZWN0IGl0cyBjaGFuZ2VzIHdpbGwgaGF2ZS4gVGhpcyB3aWxsIGluZmx1ZW5jZSBpZiBJIG5lZWQgdG8gd29ycnkgYWJvdXQgZ2xvYmFsIG5hbWVzcGFjZSBwb2xsdXRpb24sIHJlLWVudHJhbnQgY2FwYWJpbGl0aWVzLCBhbmQgY29uY3VycmVuY3kgY29uc2lkZXJhdGlvbnMsIGZvciBleGFtcGxlLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBrbm93IHRoaXMgYmVmb3JlIEkgY2FuIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg2MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA1OjE3LjM3NzMzNzI0OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU0MTA2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvZl9md25vZGVfYWRkX2xpbmtzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvb2YvcHJvcGVydHkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL29mL3Byb3BlcnR5LmM9MTY3MD1zdGF0aWMgYm9vbCBvZl9pc19md25vZGVfYWRkX2xpbmtzX3N1cHBvcnRlZCh2b2lkKVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2ODUtXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjE2ODY6c3RhdGljIGludCBvZl9md25vZGVfYWRkX2xpbmtzKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2ODcte1xcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTE3MDM9Y29uc3Qgc3RydWN0IGZ3bm9kZV9vcGVyYXRpb25zIG9mX2Z3bm9kZV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTcyNS1cXHQuaXJxX2dldCA9IG9mX2Z3bm9kZV9pcnFfZ2V0LFxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoxNzI2OlxcdC5hZGRfbGlua3MgPSBvZl9md25vZGVfYWRkX2xpbmtzLFxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNzI3LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA1OjE3LjQyMjg4Mjc4M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjMyOTYxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBicm9rZW4gZG93biBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQgdGhyb3VnaDpcblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIENhbGwgU3RhY2sgYW5kIEtleSBSZWdpc3RyYXRpb25zKipcblxuT2theSwgbGV0IG1lIHBpZWNlIHRoaXMgdG9nZXRoZXIuIEZyb20gd2hhdCBJJ20gc2VlaW5nLCBgb2ZfZndub2RlX2FkZF9saW5rc2AgaXMgaW52b2tlZCB0aHJvdWdoIHRoZSBgZndub2RlX29wZXJhdGlvbnNgIGludGVyZmFjZSwgd2hpY2ggaXMgdGhlIGV4cGVjdGVkIHBhdHRlcm4gZm9yIGRldmljZSB0cmVlIGludGVyYWN0aW9uLiBUaGUgY3J1Y2lhbCBmdW5jdGlvbiBiZWluZyBpbnRlZ3JhdGVkIGhlcmUgaXMgYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAuIEludGVyZXN0aW5nLCBzbyB0aGlzIG11c3QgYmUgcmVsYXRlZCB0byBsaW5rIG1hbmFnZW1lbnQgYW5kIHBvdGVudGlhbGx5IGRyb3BwaW5nIHN5bmNocm9uaXphdGlvbiBzdGF0ZXMsIHBvc3NpYmx5IGR1cmluZyBkZXZpY2UgZGlzY292ZXJ5IG9yIHJlbW92YWwuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gd2hhdCBzcGVjaWZpYyBzeW5jaHJvbml6YXRpb24gc3RhdGUgaXQncyByZWZlcnJpbmcgdG8uIEl0J3MgcHJvYmFibHkgd29ydGggaW52ZXN0aWdhdGluZyB3aGF0IGNhbGxzIGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgLCBzbyB0aGF0IEkgaGF2ZSB0aGUgZnVsbCBjb250ZXh0LlxuXG5GdXJ0aGVybW9yZSwgSSBub3RlIHRoZSBwcmVzZW5jZSBvZiBgX19vZl9tZGlvYnVzX3JlZ2lzdGVyYCB3aXRoaW4gYGRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGRldmljZSB0cmVlLWJhc2VkIE1ESU8gYnVzIHJlZ2lzdHJhdGlvbi4gVGhpcyBpcyBzdGFuZGFyZCBwcmFjdGljZSBpbiB0aGVzZSBzeXN0ZW1zLiBUaGUgZmFjdCB0aGF0IGl0cyB1bmRlcnNjb3JlLXByZWZpeGVkIGltcGxpZXMgaXRzIGFuIGludGVybmFsIEFQSSBzbyB0aGUgQVBJIHRoYXQgaW52b2tlcyBpdCBpcyBsaWtlbHkgdGhlIG1vcmUgcmVsZXZhbnQgb25lIGluIHRoaXMgY2FzZSwgcGFydGljdWxhcmx5IHNpbmNlIHRoaXMgY2FsbCBpcyBwcm9iYWJseSBpbnZvbHZlZCBpbiBpbml0aWFsaXppbmcgdGhlIGhhcmR3YXJlIHRvIGNvbm5lY3QgdG8gdGhlIG5ldHdvcmsuXG5cbk5vdywgaG93IGRvZXMgYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAgZml0IGludG8gdGhlIGdyYW5kIHNjaGVtZSBvZiBgb2ZfZndub2RlX2FkZF9saW5rc2AgYW5kIGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgPyBNeSBpbnR1aXRpb24gc2F5cyB0aGF0IHRoZSBNRElPIGJ1cyByZWdpc3RyYXRpb24gbGlrZWx5IGVzdGFibGlzaGVzIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGluZnJhc3RydWN0dXJlLCBhbmQgdGhlIGxpbmsgbWFuYWdlbWVudCBmdW5jdGlvbnMgYXJlIHRoZW4gdXNlZCB0byBtYW5hZ2UgdGhlIGRldmljZSBjb25uZWN0aW9ucyBvbiB0aGF0IGJ1cy4gSSBzaG91bGQga2VlcCBhbiBleWUgb24gaG93IHRoZXNlIGFyZSBjb25uZWN0ZWQgaW4gcHJhY3RpY2UgdG8gYmUgY2VydGFpbi4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVzZSBtb2R1bGVzLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSBkZXZpY2UgdHJlZSBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgTURJTyBhbmQgcG90ZW50aWFsbHkgUEhZIGRldmljZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNzksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNToyMS40ODYxODA5NTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTEyMzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fb2ZfbWRpb2J1c19yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tZGlvL29mX21kaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYz0xMzk9c3RhdGljIGludCBfX29mX21kaW9idXNfcGFyc2VfcGh5cyhzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCxcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTE4Ni0vKipcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzoxODc6ICogX19vZl9tZGlvYnVzX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgbWlpX2J1cyBhbmQgY3JlYXRlIFBIWXMgZnJvbSB0aGUgZGV2aWNlIHRyZWVcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0xODgtICogQG1kaW86IHBvaW50ZXIgdG8gbWlpX2J1cyBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTE5NC0gKi9cXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzoxOTU6aW50IF9fb2ZfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCxcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0xOTYtXFx0XFx0XFx0ICBzdHJ1Y3QgbW9kdWxlICpvd25lcilcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTI3NC19XFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6Mjc1OkVYUE9SVF9TWU1CT0woX19vZl9tZGlvYnVzX3JlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0yNzYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA1OjIxLjUzMjEwMjcxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDQ5OTg2NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhpczpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgRHJpdmVyIFJlZ2lzdHJhdGlvbiBhbmQgTGluayBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSdtIHNlZWluZyBzb21lIGtleSBmdW5jdGlvbnMgYmVpbmcgZXhwb3NlZCBoZXJlLiBGaXJzdCwgYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAgaXMgYmVpbmcgZXhwb3J0ZWQuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBtb2R1bGUgaXMgaGFuZGxpbmcgdGhlIHJlZ2lzdHJhdGlvbiBvZiBhbiBNRElPIGJ1cywgbGlrZWx5IGZvciBjb21tdW5pY2F0aW9uIHdpdGggUEhZcyBvciBvdGhlciBNRElPLWNvbm5lY3RlZCBkZXZpY2VzLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB3aGVuIEknbSBkZWJ1Z2dpbmcgTURJTy1yZWxhdGVkIGRyaXZlciBpbnRlcmFjdGlvbnMuIFRoZW4sIGl0IGxvb2tzIGxpa2UgYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAgaXMgYWxzbyBleHBvcnRlZC4gVGhhdCdzIGludGVyZXN0aW5nOyBpdCBzdWdnZXN0cyBhIHRhcmdldGVkIHdheSB0byBtYW5hZ2UgdGhlIHN5bmNocm9uaXphdGlvbiBzdGF0ZSBvZiBkZXZpY2UgbGlua3MsIHBvdGVudGlhbGx5IGZvciBzaXR1YXRpb25zIHdoZXJlIGEgZnVsbCByZXNldCBvciByZS1lbnVtZXJhdGlvbiBpc24ndCBuZWVkZWQuIEZpbmFsbHksIEkgc2VlIHRoYXQgYGRldmljZV9saW5rc19kcml2ZXJfYm91bmRgIGhhcyBiZWVuIG1vZGlmaWVkIGFuZCBleHBvcnRlZC4gVGhhdCdzIGEgc2lnbmlmaWNhbnQgaW5kaWNhdG9yLiBHaXZlbiB0aGUgbmFtZSwgdGhpcyBmdW5jdGlvbiBwcm9iYWJseSBkZWFscyB3aXRoIHRoZSBiaW5kaW5nIHByb2Nlc3MgYmV0d2VlbiBhIGRyaXZlciBhbmQgYSBkZXZpY2UgdGhyb3VnaCBkZXZpY2UgbGlua3MuIFRoZSBtb2RpZmljYXRpb24gY291bGQgYmUgYW55dGhpbmcsIGJ1dCBpdCBzdWdnZXN0cyBlbmhhbmNlbWVudHMgdG8gdGhlIGJpbmRpbmcgbG9naWMsIHBvdGVudGlhbGx5IGhhbmRsaW5nIGRlcGVuZGVuY3kgbWFuYWdlbWVudCwgZXJyb3IgaGFuZGxpbmcgZHVyaW5nIGJpbmRpbmcsIG9yIGV2ZW4gb3B0aW1pemF0aW9ucyBpbiBob3cgbGlua3MgYXJlIGVzdGFibGlzaGVkLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vayDigJMgaXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZGV2aWNlIGxpbmtzIG1lY2hhbmlzbSB3b3JrcyB3aXRoaW4gdGhlIG5ldyBtb2R1bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNToyNS4yNzcxMDU0NzVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDAxMTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldmljZV9saW5rc19kcml2ZXJfYm91bmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iYXNlL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jhc2UvY29yZS5jPTEzODc9dm9pZCBkZXZpY2VfbGlua3NfZm9yY2VfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2Jhc2UvY29yZS5jLTE0MDgtLyoqXFxuZHJpdmVycy9iYXNlL2NvcmUuYzoxNDA5OiAqIGRldmljZV9saW5rc19kcml2ZXJfYm91bmQgLSBVcGRhdGUgZGV2aWNlIGxpbmtzIGFmdGVyIHByb2JpbmcgaXRzIGRyaXZlci5cXG5kcml2ZXJzL2Jhc2UvY29yZS5jLTE0MTAtICogQGRldjogRGV2aWNlIHRvIHVwZGF0ZSB0aGUgbGlua3MgZm9yLlxcbi0tXFxuZHJpdmVycy9iYXNlL2NvcmUuYy0xNDE4LSAqL1xcbmRyaXZlcnMvYmFzZS9jb3JlLmM6MTQxOTp2b2lkIGRldmljZV9saW5rc19kcml2ZXJfYm91bmQoc3RydWN0IGRldmljZSAqZGV2KVxcbmRyaXZlcnMvYmFzZS9jb3JlLmMtMTQyMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA1OjI1LjMyMjExNDU2MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjI5MzM4NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXkgU3ltYm9scyBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBzeW1ib2xzOiBgZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5YCwgYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAsIGFuZCBgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZGAuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCB0aGVzZSBhcmUgY2VudHJhbCB0byBzb21ldGhpbmcsIHByb2JhYmx5IHJlbGF0ZWQgdG8gZGV2aWNlIGxpbmtpbmcsIE1ESU8gYnVzIHJlZ2lzdHJhdGlvbiwgYW5kIGRyaXZlciBiaW5kaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVzZSByZXF1aXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblNwZWNpZmljYWxseSwgSSByZW1lbWJlciB0aGF0IGBkcml2ZXJzL25ldC9tZGlvL29mX21kaW8uY2AgaGFzIGEgZGVwZW5kZW5jeSBvbiBgQ09ORklHX09GX01ESU9gLiBJIHNob3VsZCBwcm9iYWJseSBjb25maXJtIHRoYXQgaW4gYGRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ2AuIEl0J3MgbGlrZWx5IHRoYXQgdGhlc2Ugc3ltYm9scyBJJ20gbG9va2luZyBhdCBhcmUgdGllZCB0byBhIHNpbWlsYXIgY29uZmlndXJhdGlvbi4gTGV0J3Mgc2VlIGlmIHRoaXMgaXMgYWNjdXJhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MzMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNToyOC41NTE0NTYxN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc3Nzk0NTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPRl9NRElPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9OT1jb25maWcgRldOT0RFX01ESU9cXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xMy1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTQ6Y29uZmlnIE9GX01ESU9cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTUtXFx0ZGVmX3RyaXN0YXRlIE9GXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA1OjI4LjgyOTI2MDEzMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODU2Mzc3MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMsIHNwZWNpZmljYWxseSBgT0ZfTURJT2AuIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogYE9GX01ESU9gIGlzIGRlZmluZWQgYXMgYSBgZGVmX3RyaXN0YXRlYCBvZiBgT0ZgLiBUaGF0IG1lYW5zIGl0cyBzdGF0ZSAoZW5hYmxlZCwgZGlzYWJsZWQsIG9yIG1vZHVsZSkgZGVmYXVsdHMgdG8gdGhlIHN0YXRlIG9mIGBPRmAuIE1ha2VzIHNlbnNlLlxuXG5JIGtub3cgYGRyaXZlcnMvYmFzZS9jb3JlLmNgIGlzIGFsd2F5cyBjb21waWxlZCwgd2hpY2ggaXMgcHJvYmFibHkgYSBiYXNlIGNvbXBvbmVudC4gQW5kIEkgc2VlIHRoYXQgYGRyaXZlcnMvb2YvcHJvcGVydHkuY2AgZGVwZW5kcyBvbiBgQ09ORklHX09GYC4gU28gd2UncmUgcmVhbGx5IGRlYWxpbmcgd2l0aCBgT0ZgIGFuZCBgT0ZfTURJT2AgYXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbnMgaW4gdGhpcyBhcmVhLiBBY3R1YWxseSwgd2FpdCBhIG1pbnV0ZSwgc2luY2UgYE9GX01ESU9gIGlzIGRpcmVjdGx5IHRpZWQgdG8gYE9GYCwgaXQncyBlc3NlbnRpYWxseSBlbmFibGVkIGlmIGBPRmAgaXMgZW5hYmxlZCBieSBkZWZhdWx0LlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBhbmQgdGhlIE1ESU8gZHJpdmVyIGl0c2VsZi4gVGhlIGtleSBpcyBnb2luZyB0byBiZSBmaWd1cmluZyBvdXQgd2hldGhlciBgTURJT19ERVZJQ0VgIG9yIGBNRElPX0JVU2AgYXJlIHJlcXVpcmVkIGFuZCBob3cgdGhleSBpbnRlcmFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODExNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNTozMi42ODU2Mzk2NzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNjA1NTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPRl9NRElPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9OT1jb25maWcgRldOT0RFX01ESU9cXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xMy1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTQ6Y29uZmlnIE9GX01ESU9cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTUtXFx0ZGVmX3RyaXN0YXRlIE9GXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA1OjMyLjczNzI0ODQxOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODAxNTI2MDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTURJTyBDb21waWxhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgb2ZfbWRpby5vYCBpcyBiZWluZyBidWlsdC4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIGFsd2F5cywgaXMgdGhlIGBNYWtlZmlsZWAuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGNvbXBpbGF0aW9uIGluc3RydWN0aW9ucyBmb3IgdGhpcyBwYXJ0IG9mIHRoZSBuZXR3b3JraW5nIGRyaXZlciBhcmUgZGVmaW5lZC4gU3BlY2lmaWNhbGx5LCBJJ2xsIG5hdmlnYXRlIHRvIGBkcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlYCB0byBzZWUgaG93IHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIGlzIGhhbmRsaW5nIHRoYXQgcGFydGljdWxhciBvYmplY3QgZmlsZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSByZWxldmFudCBmbGFncywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IG90aGVyIGJ1aWxkLXJlbGF0ZWQgZGV0YWlscyBpbiB0aGVyZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1ODksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNTozNS41Mzg3Nzc0MTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjEwNzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9mX21kaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlPTU9b2JqLSQoQ09ORklHX0ZXTk9ERV9NRElPKVxcdCs9IGZ3bm9kZV9tZGlvLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX09GX01ESU8pXFx0XFx0Kz0gb2ZfbWRpby5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZS03LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNTozNS41ODUzOTQ1ODlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0MTkxMTAxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZW1iZWRkZWQgc3lzdGVtcyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgTURJTyBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKlxuXG5BbHJpZ2h0LCB0aGUgYnVpbGQgc3lzdGVtJ3MgYXNraW5nIGZvciBgQ09ORklHX09GX01ESU9gLCByaWdodD8gTXkgZmlyc3QgaW5zdGluY3QgaXMsIFwiWWVzLCBvZiBjb3Vyc2UsIHRoYXQncyB3aGF0IHdlIG5lZWRcIi4gVGhlbiBJIHBhdXNlLCBiZWNhdXNlIEkga25vdyB0aGVzZSB0aGluZ3MgYXJlIHJhcmVseSB0aGF0IHNpbXBsZS4gQWgsIHJpZ2h0LCBgT0ZfTURJT2AgaXRzZWxmIGlzIGRlZmluZWQgYXMgYSBgZGVmX3RyaXN0YXRlIE9GYC4gVGhhdCB1c3VhbGx5IG1lYW5zIGl0IGhhcyBkZXBlbmRlbmNpZXMuIE9rYXksIGEgcXVpY2sgY2hlY2sgb2YgdGhlIGRvY3VtZW50YXRpb24uIEJ1dCBoZXJlLCBsZXQncyBsb29rIGF0IGBkcml2ZXJzL25ldC9tZGlvL0tjb25maWdgIHRvIGNvbmZpcm0gd2hhdCBJIHJlbWVtYmVyLiBJIGtub3cgdGhpcyBpcyBnb2luZyB0byBkZXBlbmQgb24gZWl0aGVyIGBQSFlMSUJgIG9yIGBNRElPX0RFVklDRWAuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzZWxlY3RlZCB0b28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NzksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNTozOS4wMjczMDgzMDRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ESU8gTGF5ZXIgQ29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51IFxcXCJNRElPIGNvbnRyb2xsZXIgZHJpdmVyc1xcXCJcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gUEhZTElCXFxuICAgODpcXHRcXG4gICA5OlxcdGNvbmZpZyBGV05PREVfTURJT1xcbiAgMTA6XFx0XFx0ZGVmX3RyaXN0YXRlIChBQ1BJIHx8IE9GKSB8fCBDT01QSUxFX1RFU1RcXG4gIDExOlxcdFxcdGhlbHBcXG4gIDEyOlxcdFxcdCAgRldOT0RFIE1ESU8gYnVzIChFdGhlcm5ldCBQSFkpIGFjY2Vzc29yc1xcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgT0ZfTURJT1xcbiAgMTU6XFx0XFx0ZGVmX3RyaXN0YXRlIE9GXFxuICAxNjpcXHRcXHRzZWxlY3QgRklYRURfUEhZXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIE9wZW5GaXJtd2FyZSBNRElPIGJ1cyAoRXRoZXJuZXQgUEhZKSBhY2Nlc3NvcnNcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIEFDUElfTURJT1xcbiAgMjE6XFx0XFx0ZGVmX3RyaXN0YXRlIEFDUElcXG4gIDIyOlxcdFxcdGhlbHBcXG4gIDIzOlxcdFxcdCAgQUNQSSBNRElPIGJ1cyAoRXRoZXJuZXQgUEhZKSBhY2Nlc3NvcnNcXG4gIDI0OlxcdFxcbiAgMjU6XFx0Y29uZmlnIE1ESU9fQUlST0hBXFxuICAyNjpcXHRcXHR0cmlzdGF0ZSBcXFwiQWlyb2hhIEFONzU4MyBNRElPIGJ1cyBjb250cm9sbGVyXFxcIlxcbiAgMjc6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX0FJUk9IQSB8fCBDT01QSUxFX1RFU1RcXG4gIDI4OlxcdFxcdGhlbHBcXG4gIDI5OlxcdFxcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBkcml2ZXIgZm9yIHRoZSBNRElPIGJ1c3NlcyBmb3VuZCBpbiB0aGVcXG4gIDMwOlxcdFxcdCAgQWlyb2hhIEFONzU4MyBTb0Mncy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDU6MzkuMDI3Mzg3NjQ0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MzI3NzA1MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1ESU8gQ29udHJvbGxlciBEcml2ZXIgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBNRElPIGNvbnRyb2xsZXIgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIFJpZ2h0LCBpdCdzIG5lc3RlZCB3aXRoaW4gdGhlIFwiTURJTyBjb250cm9sbGVyIGRyaXZlcnNcIiBtZW51LCB3aGljaCBpdHNlbGYgKmRlcGVuZHMgb24gUEhZTElCKi4gU28sIGluaGVyZW50bHksIEkgbmVlZCBQSFlMSUIgZW5hYmxlZCBmb3IgdGhpcyBkcml2ZXIsIGFuZCBPRiwgc2luY2UgT0YgaXMgYSBwcmUtcmVxdWlzaXRlIGZvciBQSFlMSUIuIFxuXG5BbHJpZ2h0LCBsZXQncyBjb25maXJtIHRoaXMgUEhZTElCIGRlcGVuZGVuY3kuIFl1cCwgbG9va3MgbGlrZSBpdCdzIHRoZSBlbmNvbXBhc3NpbmcgbWVudSB0aGF0IGRpY3RhdGVzIHRoZSByZXF1aXJlbWVudC4gSGFuZyBvbi4uLiBhbmQgdGhlICptZW51KiBkZXBlbmRlbmN5IGFmZmVjdHMgZXZlcnl0aGluZyAqd2l0aGluKiBpdC4gU28sIHRoYXQgbWVhbnMgYm90aCBgQ09ORklHX1BIWUxJQmAgKmFuZCogYENPTkZJR19PRmAgYXJlIGRlZmluaXRlbHkgcmVxdWlyZWQgZm9yIGFueXRoaW5nIHVuZGVyIHRoYXQgbWVudSwgaW5jbHVkaW5nIHRoaXMgTURJTyBjb250cm9sbGVyIGRyaXZlci5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEknbGwgZ28gY2hlY2sgYGRyaXZlcnMvb2YvcHJvcGVydHkuY2AgdG8gc2VlIGhvdyBpdHMgYnVpbGQgaXMgY29uZGl0aW9uZWQuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGV4cGVjdGVkIGBDT05GSUdfT0ZgIGlzIGFjdHVhbGx5IGNvbXBpbGluZyB0aGUgcmVsZXZhbnQgY29kZS4gR29vZCBwcmFjdGljZSB0byBkb3VibGUgY2hlY2sgdGhhdCBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MzAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNTo0Mi42NjAxNjEwNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwNjI3MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJvcGVydHkub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL29mL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvb2YvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuZHJpdmVycy9vZi9NYWtlZmlsZToyOm9iai15ID0gYmFzZS5vIGNwdS5vIGRldmljZS5vIG1vZHVsZS5vIHBsYXRmb3JtLm8gcHJvcGVydHkub1xcbmRyaXZlcnMvb2YvTWFrZWZpbGUtMy1vYmotJChDT05GSUdfT0ZfS09CSikgKz0ga29iai5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA1OjQyLjcwNDIyOTg2NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTM4MTEyMjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBmdXp6YWJsZS4gRmlyc3QsIEkgY29uZmlybWVkIHRoYXQgYGRyaXZlcnMvb2YvcHJvcGVydHkuY2AgZ2V0cyBjb21waWxlZCBpZiBgQ09ORklHX09GYCBpcyBlbmFibGVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0LiBJIGFsc28gc2VlIHRoYXQgYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAgaXMgaW4gYGRyaXZlcnMvYmFzZS9jb3JlLmNgLCB3aGljaCBpcyBhbHdheXMgY29tcGlsZWQuIFRoYXQgaGVscHMgbmFycm93IHRoaW5ncyBkb3duLlxuXG5UaGUgaW1wb3J0YW50IGNvbmZpZ3Mgc2VlbSB0byBiZSBgT0ZgLCBgUEhZTElCYCwgYW5kIGBPRl9NRElPYCwgYWx0aG91Z2ggYE9GYCBhbmQgYFBIWUxJQmAgYWxvbmUgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIGJ1aWxkaW5nIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LlxuXG5UaGUgcGF0Y2ggaXRzZWxmIG1vZGlmaWVzIGBkcml2ZXJzL2Jhc2UvY29yZS5jYCAod2hpY2ggaXMgY29yZSBrZXJuZWwgbG9naWMhKSBhbmQgYWRkcyBgZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5YCwgYW5kIG1vZGlmaWVzIGBkcml2ZXJzL25ldC9tZGlvL29mX21kaW8uY2AuIFRoZSBjaGFuZ2VzIHRvIGBvZl9saW5rX3RvX3BoYW5kbGVgIHRvIGhhbmRsZSBcImV0aGVybmV0LXBoeS1wYWNrYWdlXCIgbm9kZXMgYXJlIGFsc28gaW50ZXJlc3RpbmcuIFRoaXMgbG9va3MgbGlrZSBpdCB0b3VjaGVzIGNvcmUgZGV2aWNlIGxpbmsgbG9naWMgYW5kIE9GIHByb3BlcnR5IHBhcnNpbmcsIHNvIHRoaXMgaXMgd29ydGggZnV6emluZy5cblxuTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAsIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgLCBhbmQgYGRldmljZV9saW5rc19kcml2ZXJfYm91bmRgLlxuXG5JJ2xsIGRvdWJsZS1jaGVjayBgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZGAg4oCTIGl0J3MgY2FsbGVkIGR1cmluZyBkcml2ZXIgYmluZGluZyBhbmQgZGV2aWNlIHByb2JlLCBub3QgYSBzdXBlciBob3QgcGF0aCwgYnV0IGRlZmluaXRlbHkgaW1wb3J0YW50IGR1cmluZyBib290LiBJdCdzIHNhZmUgdG8gaW5jbHVkZS5cblxuSSBhbHNvIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gYF9fZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5YCBpcyBzdGF0aWMsIHNvIEkgY2FuIGp1c3QgdXNlIGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgLiBTaW1pbGFybHksIGBvZl9saW5rX3RvX3BoYW5kbGVgIGlzIHN0YXRpYywgc28gSSBjYW4ndCB1c2UgaXQgZGlyZWN0bHkuIGBvZl9saW5rX3Byb3BlcnR5YCBhbmQgYG9mX2Z3bm9kZV9hZGRfbGlua3NgIGFyZSBhbHNvIHN0YXRpYy4gQXJlIHRoZXJlIGFueSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIGluIGBkcml2ZXJzL29mL3Byb3BlcnR5LmNgIHRoYXQgY2FsbCBgb2ZfbGlua19wcm9wZXJ0eWA/IFRoYXQgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGV4cGxvcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5ODMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDU6NDguODQyMzQ1MTE4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTAxNDkzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvZl9saW5rX3Byb3BlcnR5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvb2YvcHJvcGVydHkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL29mL3Byb3BlcnR5LmM9MTU1NT1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cHBsaWVyX2JpbmRpbmdzIG9mX3N1cHBsaWVyX2JpbmRpbmdzW10gPSB7XFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTU5OC0vKipcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MTU5OTogKiBvZl9saW5rX3Byb3BlcnR5IC0gQ3JlYXRlIGRldmljZSBsaW5rcyB0byBzdXBwbGllcnMgbGlzdGVkIGluIGEgcHJvcGVydHlcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTYwMC0gKiBAY29uX25wOiBUaGUgY29uc3VtZXIgZGV2aWNlIHRyZWUgbm9kZSB3aGljaCBjb250YWlucyB0aGUgcHJvcGVydHlcXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNjEyLSAqIEFueSBmYWlsZWQgYXR0ZW1wdCB0byBjcmVhdGUgYSBmd25vZGUgbGluayB3aWxsIE5PVCByZXN1bHQgaW4gYW4gaW1tZWRpYXRlXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjE2MTM6ICogcmV0dXJuLiAgb2ZfbGlua19wcm9wZXJ0eSgpIG11c3QgY3JlYXRlIGxpbmtzIHRvIGFsbCB0aGUgYXZhaWxhYmxlIHN1cHBsaWVyXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2MTQtICogZGV2aWNlIHRyZWUgbm9kZXMgZXZlbiB3aGVuIGF0dGVtcHRzIHRvIGNyZWF0ZSBhIGxpbmsgdG8gb25lIG9yIG1vcmVcXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNjE2LSAqL1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoxNjE3OnN0YXRpYyBpbnQgb2ZfbGlua19wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvbl9ucCwgY29uc3QgY2hhciAqcHJvcF9uYW1lKVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNjE4LXtcXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYz0xNjg2PXN0YXRpYyBpbnQgb2ZfZndub2RlX2FkZF9saW5rcyhzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2OTctXFx0Zm9yX2VhY2hfcHJvcGVydHlfb2Zfbm9kZShjb25fbnAsIHApXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjE2OTg6XFx0XFx0b2ZfbGlua19wcm9wZXJ0eShjb25fbnAsIHAtXFx1MDAzZW5hbWUpO1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNjk5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNTo0OC44OTEzNjQzODJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyMTc2NDQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBvZl9md25vZGVfYWRkX2xpbmtzYCBhbmQgaXRzIFBsYWNlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG9mX2Z3bm9kZV9hZGRfbGlua3NgIGZ1bmN0aW9uLiBJdCdzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBtZWFucyBpdHMgc2NvcGUgaXMgbGltaXRlZCB0byB0aGUgY3VycmVudCBmaWxlLiBCdXQgdGhlIGludGVyZXN0aW5nIHBhcnQgaXMgd2hlcmUgaXQncyAqdXNlZCouIEl0J3MgYXNzaWduZWQgdG8gdGhlIGBhZGRfbGlua3NgIGZpZWxkIHdpdGhpbiB0aGUgYG9mX2Z3bm9kZV9vcHNgIHN0cnVjdHVyZSwgcmlnaHQ/IE5vdyBJIG5lZWQgdG8gY2hlY2sg4oCTIGlzIGBvZl9md25vZGVfb3BzYCBleHBvcnRlZD8gVGhhdCBhc3NpZ25tZW50IHNlZW1zIGEgYml0IG9kZCBpZiB0aGUgc3RydWN0dXJlIGlzbid0IGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHRoaXMgYHN0YXRpY2AgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCBleHRlcm5hbGx5IHRocm91Z2ggdGhhdCBzdHJ1Y3R1cmUuIElmIGl0IGlzLCB3aHkgdGhlIGBzdGF0aWNgIGRlY2xhcmF0aW9uPyBNYXliZSB0aGVyZSdzIHNvbWUgY2xldmVyIGRlc2lnbiByZWFzb24sIGxpa2UgbGltaXRpbmcgdGhlIG5hbWVzcGFjZSBwb2xsdXRpb24gd2l0aGluIHRoaXMgcGFydGljdWxhciBmaWxlIGFuZCB1c2luZyB0aGUgZnVuY3Rpb24gaW5kaXJlY3RseSB0aHJvdWdoIGEgc3BlY2lmaWMgc3RydWN0dXJlLiBPciBwZXJoYXBzIEknbSBtaXNzaW5nIHNvbWV0aGluZyBtb3JlIGZ1bmRhbWVudGFsIGFib3V0IGhvdyB0aGlzIHBvcnRpb24gb2YgdGhlIGNvZGUgd29ya3MuIEknbSBnb2luZyB0byB0cmFjayBkb3duIHdoZXJlIGBvZl9md25vZGVfb3BzYCBpcyBkZWZpbmVkIGFuZCB1c2VkIHRvIGJldHRlciB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM2OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA1OjUyLjcxMzEzMjQyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjAwNDg3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvZl9md25vZGVfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvb2YvcHJvcGVydHkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL29mL3Byb3BlcnR5LmM9MTY4Nj1zdGF0aWMgaW50IG9mX2Z3bm9kZV9hZGRfbGlua3Moc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNzAyLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoxNzAzOmNvbnN0IHN0cnVjdCBmd25vZGVfb3BlcmF0aW9ucyBvZl9md25vZGVfb3BzID0ge1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNzA0LVxcdC5nZXQgPSBvZl9md25vZGVfZ2V0LFxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE3MjctfTtcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MTcyODpFWFBPUlRfU1lNQk9MX0dQTChvZl9md25vZGVfb3BzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDU6NTIuNzY1MTQzNjM0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzcxMDk1OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqVmVyaWZ5aW5nIHRoZSBDYWxsIHRvIGBhZGRfbGlua3NgKipcblxuT2theSwgc28gSSdtIHByZXR0eSBzdXJlIGBvZl9md25vZGVfb3BzYCBpcyBleHBvcnRlZCwgdGhhdCBtdWNoIEkgcmVtZW1iZXIuIE5vdywgdGhlIGtleSBpcyBmaWd1cmluZyBvdXQgKndoZXJlKiBgYWRkX2xpbmtzYCBhY3R1YWxseSBnZXRzIGNhbGxlZCBmcm9tLCBpbiByZWxhdGlvbiB0byB0aGF0IHN0cnVjdHVyZS4gSSBiZWxpZXZlIHRoZSBmdW5jdGlvbiBpbiBgZHJpdmVycy9iYXNlL2NvcmUuY2AgdGhhdCdzIHJlc3BvbnNpYmxlIGZvciB0aGUgdHJhbnNsYXRpb24gYmV0d2VlbiB0aGUgZGV2bGluayBhbmQgZmlybXdhcmUgbm9kZSBpcyBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIGBmd19kZXZsaW5rX3BhcnNlX2Z3bm9kZWAuIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCByaWdodCBub3csIGJlY2F1c2UgdGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGZ1bmN0aW9uIGNhbGwuIExldCdzIGdvIGNoZWNrIHRoZSBjb2RlIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODY0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDU6NTUuOTAyMjU2MDU0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQxODgxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZGRfbGlua3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iYXNlL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jhc2UvY29yZS5jPTE4MzA9c3RhdGljIHZvaWQgZndfZGV2bGlua19wYXJzZV9md25vZGUoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcXG4tLVxcbmRyaXZlcnMvYmFzZS9jb3JlLmMtMTgzNC1cXG5kcml2ZXJzL2Jhc2UvY29yZS5jOjE4MzU6XFx0Zndub2RlX2NhbGxfaW50X29wKGZ3bm9kZSwgYWRkX2xpbmtzKTtcXG5kcml2ZXJzL2Jhc2UvY29yZS5jLTE4MzYtXFx0Zndub2RlX3NldF9mbGFnKGZ3bm9kZSwgRldOT0RFX0ZMQUdfTElOS1NfQURERUQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNTo1NS45NTE2ODA0NjlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzOTgzODU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCBhaW1pbmcgZm9yIGEgZnVsc29tZSByZW5kZXJpbmc6XG5cbioqRGVlcCBEaXZlIG9uIGBmd19kZXZsaW5rX3BhcnNlX2Z3bm9kZWAqKlxuXG5SaWdodCwgbGV0IG1lIHNlZS4uLiBJJ20gbG9va2luZyBhdCBgZndfZGV2bGlua19wYXJzZV9md25vZGVgLiBPa2F5LCAqdGhhdCogZnVuY3Rpb24gaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIEludGVyZXN0aW5nLiBTdGF0aWMsIHNvIGl0J3Mgb25seSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGlzIHRyYW5zbGF0aW9uIHVuaXQuIEl0J3MgYSBrZXkgZnVuY3Rpb24gaW4gcGFyc2luZyBhIGRldmljZSdzIGZpcm13YXJlIG5vZGUgYW5kIGxpbmtpbmcgaXRzIHJlc291cmNlcy4gTm93LCB0aGUgcXVlc3Rpb24gaXMsICp3aG8ncyBjYWxsaW5nIGl0Kj8gVGhhdCdzIHRoZSBjcml0aWNhbCBwaWVjZSBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGZpcm13YXJlIGxpbmtpbmcgcHJvY2VzcyBpcyBpbml0aWF0ZWQgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIGZsb3cuIElzIGl0IGNhbGxlZCBkaXJlY3RseSBmcm9tIGEgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uLCBvciBtYXliZSBmcm9tIGEgZ2VuZXJpYyBkcml2ZXIgY29yZSBoZWxwZXI/IE9yIHBlcmhhcHMgaXQncyBhbiBpbmRpcmVjdCBjYWxsIHRocm91Z2ggYSBjaGFpbiBvZiBmdW5jdGlvbnM/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2ssIGFuZCB0aGUgY29udGV4dHMgaW4gd2hpY2ggdGhpcyBzdGF0aWMgZnVuY3Rpb24gaXMgdXRpbGl6ZWQgaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoZSBwb2ludCBvZiBkZWNsYXJhdGlvbiB0byBmaW5kIHRoZSBjYWxsZXJzIHRvIHRydWx5IHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGlzIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjM5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDU6NTkuMTkxNTIyMzM3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE2Mzc1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmd19kZXZsaW5rX3BhcnNlX2Z3bm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jhc2UvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmFzZS9jb3JlLmM9MTgyNT1ib29sIGZ3X2RldmxpbmtfaXNfc3RyaWN0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Jhc2UvY29yZS5jLTE4MjktXFxuZHJpdmVycy9iYXNlL2NvcmUuYzoxODMwOnN0YXRpYyB2b2lkIGZ3X2RldmxpbmtfcGFyc2VfZndub2RlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXFxuZHJpdmVycy9iYXNlL2NvcmUuYy0xODMxLXtcXG4tLVxcbmRyaXZlcnMvYmFzZS9jb3JlLmM9MTgzOT1zdGF0aWMgdm9pZCBmd19kZXZsaW5rX3BhcnNlX2Z3dHJlZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxcbi0tXFxuZHJpdmVycy9iYXNlL2NvcmUuYy0xODQyLVxcbmRyaXZlcnMvYmFzZS9jb3JlLmM6MTg0MzpcXHRmd19kZXZsaW5rX3BhcnNlX2Z3bm9kZShmd25vZGUpO1xcbmRyaXZlcnMvYmFzZS9jb3JlLmMtMTg0NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDU6NTkuMjM4NjkxMjczWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNzgzNTM3NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlN0YXRpYyBGdW5jdGlvbiBJbnZlc3RpZ2F0aW9uOiBmd19kZXZsaW5rX3BhcnNlX2Z3dHJlZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBmd19kZXZsaW5rX3BhcnNlX2Z3dHJlZWAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIG5vdGljZSBpdCdzIGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rLCBcIkhtbSwgc3RhdGljLi4uIHNvIGl0J3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGlzIGNvbXBpbGF0aW9uIHVuaXQuXCIgVGhpcyBuYXJyb3dzIGRvd24gd2hlcmUgSSBuZWVkIHRvIGxvb2sgZm9yIGNhbGxzIHRvIGl0LiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZmlndXJlIG91dCAqKndoYXQqKiBhY3R1YWxseSBjYWxscyB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgcG9pbnQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgaW1wYWN0LiBXaGVyZSBhcmUgd2UgY2FsbGluZyB0aGlzIGZyb20/IExldCdzIHRyYWNlIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzM3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDY6MDIuMzE3MDQ4MTg3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTI0MzM2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmd19kZXZsaW5rX3BhcnNlX2Z3dHJlZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jhc2UvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmFzZS9jb3JlLmM9MTgzMD1zdGF0aWMgdm9pZCBmd19kZXZsaW5rX3BhcnNlX2Z3bm9kZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxcbi0tXFxuZHJpdmVycy9iYXNlL2NvcmUuYy0xODM4LVxcbmRyaXZlcnMvYmFzZS9jb3JlLmM6MTgzOTpzdGF0aWMgdm9pZCBmd19kZXZsaW5rX3BhcnNlX2Z3dHJlZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxcbmRyaXZlcnMvYmFzZS9jb3JlLmMtMTg0MC17XFxuLS1cXG5kcml2ZXJzL2Jhc2UvY29yZS5jLTE4NDUtXFx0d2hpbGUgKChjaGlsZCA9IGZ3bm9kZV9nZXRfbmV4dF9hdmFpbGFibGVfY2hpbGRfbm9kZShmd25vZGUsIGNoaWxkKSkpXFxuZHJpdmVycy9iYXNlL2NvcmUuYzoxODQ2OlxcdFxcdGZ3X2RldmxpbmtfcGFyc2VfZnd0cmVlKGNoaWxkKTtcXG5kcml2ZXJzL2Jhc2UvY29yZS5jLTE4NDctfVxcbi0tXFxuZHJpdmVycy9iYXNlL2NvcmUuYz0yNDIyPXN0YXRpYyB2b2lkIGZ3X2RldmxpbmtfbGlua19kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9iYXNlL2NvcmUuYy0yNDI4LVxcbmRyaXZlcnMvYmFzZS9jb3JlLmM6MjQyOTpcXHRmd19kZXZsaW5rX3BhcnNlX2Z3dHJlZShmd25vZGUpO1xcbmRyaXZlcnMvYmFzZS9jb3JlLmMtMjQzMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDY6MDIuMzYyMjk1MzQyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMTU1MTY2MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqVGhpbmtpbmcgQWJvdXQgYGZ3X2RldmxpbmtfbGlua19kZXZpY2VgKipcblxuT2theSwgc28gYGZ3X2RldmxpbmtfbGlua19kZXZpY2VgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gQmVpbmcgYHN0YXRpY2AgbWVhbnMgaXQncyBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQsIHNvIGl0J3Mgbm90IG1lYW50IHRvIGJlIGNhbGxlZCBmcm9tIGFueXdoZXJlIGVsc2UgaW4gdGhlIGtlcm5lbCBkaXJlY3RseS4gVGhpcyBsaW1pdHMgaXRzIHNjb3BlIGFuZCBtYWtlcyBtZSB3b25kZXIgKndoeSogdGhpcyBkZXNpZ24gZGVjaXNpb24gd2FzIG1hZGUuIElzIGl0IGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiBmb3IgYSBzcGVjaWZpYyBtb2R1bGUgb3Igc3Vic3lzdGVtPyBJcyBpdCBtZWFudCB0byBwcmV2ZW50IGFjY2lkZW50YWwgZXh0ZXJuYWwgY2FsbHMgdGhhdCBjb3VsZCBicmVhayBzb21lIGludGVybmFsIHN0YXRlIG9yIGludmFyaWFudD9cblxuVGhlIGNydWNpYWwgcXVlc3Rpb24gbm93IGJlY29tZXM6ICpXaGF0KiBpcyBjYWxsaW5nIHRoaXMgc3RhdGljIGZ1bmN0aW9uPyBJIG5lZWQgdG8gdHJhY2sgZG93biBhbGwgdGhlIGNhbGwgc2l0ZXMgd2l0aGluIHRoZSBzb3VyY2UgZmlsZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBnb2luZyB0byBiZSB2aXRhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uIEkgbmVlZCB0byBnZXQgaW50byB0aGUgY29kZSBhbmQgc3RhcnQgdHJhY2luZyB0aGUgZXhlY3V0aW9uIGZsb3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gd2hhdGV2ZXIgZGV2aWNlIGxpbmsgZnJhbWV3b3JrIGlzIGJlaW5nIHVzZWQuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyMjEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNjowNS4zNzc4MTQ1MjRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NzU4MzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ3X2RldmxpbmtfbGlua19kZXZpY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iYXNlL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jhc2UvY29yZS5jPTIzOTQ9c3RhdGljIHZvaWQgX19md19kZXZsaW5rX2xpbmtfdG9fc3VwcGxpZXJzKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvYmFzZS9jb3JlLmMtMjQyMS1cXG5kcml2ZXJzL2Jhc2UvY29yZS5jOjI0MjI6c3RhdGljIHZvaWQgZndfZGV2bGlua19saW5rX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuZHJpdmVycy9iYXNlL2NvcmUuYy0yNDIzLXtcXG4tLVxcbmRyaXZlcnMvYmFzZS9jb3JlLmM9MzY3OT1pbnQgZGV2aWNlX2FkZChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2Jhc2UvY29yZS5jLTM3OTMtXFx0XFx0ZGV2LVxcdTAwM2Vmd25vZGUtXFx1MDAzZWRldiA9IGRldjtcXG5kcml2ZXJzL2Jhc2UvY29yZS5jOjM3OTQ6XFx0XFx0ZndfZGV2bGlua19saW5rX2RldmljZShkZXYpO1xcbmRyaXZlcnMvYmFzZS9jb3JlLmMtMzc5NS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA2OjA1LjQyNzU3OTMwOFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODgxMzk1NDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBEZXZpY2UgTGluayBJbnRlZ3JhdGlvbiBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGRldmljZV9hZGRgIGZ1bmN0aW9uLiBJdCdzIGV4cG9ydGVkLCBhbmQgaXQgZW5kcyB1cCBjYWxsaW5nIGBmd19kZXZsaW5rX2xpbmtfZGV2aWNlYCwgd2hpY2ggbWFrZXMgaXQgYSBzZW5zaWJsZSBzdGFydGluZyBwb2ludC4gSG93ZXZlciwgYGRldmljZV9hZGRgIGlzIGEgc3VwZXIgZ2VuZXJpYyBlbnRyeSBwb2ludCDigJMgaXQncyBnb2luZyB0byBiZSBoaXQgYWxsIHRoZSB0aW1lLCB3aGljaCBpc24ndCBpZGVhbCBmb3IgdGhpcyBzcGVjaWZpYyB0YXNrLiBJIHdhbnQgc29tZXRoaW5nIG1vcmUgZm9jdXNlZC5cblxuTGV0J3Mgc2Vl4oCmIEkgdGhpbmsgSSBjYW4gYnlwYXNzIHNvbWUgb2YgdGhlIG5vaXNlIGFuZCB1c2UgYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAsIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgLCBhbmQgYGRldmljZV9saW5rc19kcml2ZXJfYm91bmRgIGRpcmVjdGx5LiBUaGlzIHNob3VsZCBhbGxvdyBtZSB0byBmb2N1cyBtb3JlIHRpZ2h0bHkgb24gd2hhdCBJIGFjdHVhbGx5IG5lZWQgdG8gZ2V0IGRvbmUsIHJpZ2h0P1xuXG5BbHJpZ2h0LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIHZlcmlmeSBpZiB0aG9zZSBzeW1ib2xzIGFyZSBleHBvcnRlZC4gR29vZCwgYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAgaXMgZXhwb3J0ZWQgd2l0aCBgRVhQT1JUX1NZTUJPTF9HUExgLiBBbmQsIGNvbmZpcm1pbmcsIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgIGlzIGFsc28gZXhwb3J0ZWQgd2l0aCBgRVhQT1JUX1NZTUJPTGAuIEV4Y2VsbGVudC5cblxuTm93LCB0aGF0IGJyaW5ncyB1cyB0byBgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZGAuICBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgb25lIGlzbid0IGV4cG9ydGVkLi4uIExldCBtZSBqdXN0Li4uIHllcywgaXQncyBub3QgZXhwb3J0ZWQsIGJ1dCBpdCdzICpub3QqIHN0YXRpYywgc28gSSBjYW4gc3RpbGwgYWNjZXNzIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzcwMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNjoxMC4zMDg5NzY4NjVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzU3ODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldmljZV9saW5rc19kcml2ZXJfYm91bmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iYXNlL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jhc2UvY29yZS5jPTEzODc9dm9pZCBkZXZpY2VfbGlua3NfZm9yY2VfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2Jhc2UvY29yZS5jLTE0MDgtLyoqXFxuZHJpdmVycy9iYXNlL2NvcmUuYzoxNDA5OiAqIGRldmljZV9saW5rc19kcml2ZXJfYm91bmQgLSBVcGRhdGUgZGV2aWNlIGxpbmtzIGFmdGVyIHByb2JpbmcgaXRzIGRyaXZlci5cXG5kcml2ZXJzL2Jhc2UvY29yZS5jLTE0MTAtICogQGRldjogRGV2aWNlIHRvIHVwZGF0ZSB0aGUgbGlua3MgZm9yLlxcbi0tXFxuZHJpdmVycy9iYXNlL2NvcmUuYy0xNDE4LSAqL1xcbmRyaXZlcnMvYmFzZS9jb3JlLmM6MTQxOTp2b2lkIGRldmljZV9saW5rc19kcml2ZXJfYm91bmQoc3RydWN0IGRldmljZSAqZGV2KVxcbmRyaXZlcnMvYmFzZS9jb3JlLmMtMTQyMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA2OjEwLjM1NjczNzU5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTk5MDE4MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiBhIHJlbGV2YW50IGZpZWxkOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogRXhwb3J0YWJpbGl0eSoqXG5cblJpZ2h0LCBzbyB0aGUgY29yZSBxdWVzdGlvbiBoZXJlIGlzOiBpcyB0aGlzIHRoaW5nLCB3aGF0ZXZlciBcInRoaXNcIiByZWZlcnMgdG8gaW4gdGhlIGNvbnRleHQsIGRlc2lnbmVkIGZvciBleHBvcnQ/IFdlJ3JlIHRhbGtpbmcgYWJvdXQgbWFya2V0YWJpbGl0eSBiZXlvbmQgdGhlIGltbWVkaWF0ZSBlbnZpcm9ubWVudCwgdGhlIGRvbWVzdGljIHNwaGVyZS4gVGhpcyBpc24ndCBqdXN0IGFib3V0IHdoZXRoZXIgaXQgKmNvdWxkKiBiZSBleHBvcnRlZCwgd2hpY2ggaXMgYSBydWRpbWVudGFyeSBmaXJzdCBzdGVwLiBXZSBuZWVkIHRvIGRpc3NlY3QgdGhlIGludGVudCBiZWhpbmQgaXRzIGNyZWF0aW9uLiBXYXMgZ2xvYmFsIGRpc3RyaWJ1dGlvbiBldmVuIGEgY29uc2lkZXJhdGlvbiBkdXJpbmcgdGhlIGRlc2lnbiBwaGFzZT8gVGhlIGltcGxpY2F0aW9ucyBhcmUgc2lnbmlmaWNhbnQuIElmIGl0ICp3YXNuJ3QqIGludGVuZGVkIGZvciBleHBvcnQsIHRoZXJlIGFyZSBhIGhvc3Qgb2YgcG90ZW50aWFsIGlzc3VlcyB0byBldmFsdWF0ZTogcmVndWxhdG9yeSBjb21wbGlhbmNlLCBsaW5ndWlzdGljIGJhcnJpZXJzIGluIGRvY3VtZW50YXRpb24gYW5kIG1hcmtldGluZywgY3VsdHVyYWwgYWRhcHRhdGlvbnMgbmVlZGVkIGZvciB1c2VyIGFjY2VwdGFuY2UsIGxvZ2lzdGljYWwgY2hhbGxlbmdlcyB3aXRoIHRyYW5zcG9ydGF0aW9uIGFuZCBoYW5kbGluZy4uLiB0aGUgbGlzdCBpcyBsb25nLiBDb252ZXJzZWx5LCBpZiBleHBvcnQgKndhcyogYSBkZXNpZ24gcGFyYW1ldGVyLCB0aGF0IG9wZW5zIGEgZGlmZmVyZW50IGxpbmUgb2YgaW5xdWlyeTogd2hhdCBzcGVjaWZpYyBtYXJrZXRzIHdlcmUgdGFyZ2V0ZWQ/IFdoYXQgYWRqdXN0bWVudHMgd2VyZSBtYWRlIHRvIGZhY2lsaXRhdGUgaW50ZXJuYXRpb25hbCBzYWxlcz8gVGhlIGRlcHRoIG9mIHRoZSBleHBvcnQgcmVhZGluZXNzIGlzIHBhcmFtb3VudCB0byBkZXRlcm1pbmluZyB0aGUgZWZmb3J0IHJlcXVpcmVkIHRvIGdldCBpdCBvdXQgdGhlcmUuIFRoaXMgaXMgYSBjcml0aWNhbCBmaXJzdCBxdWVzdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzOTksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA2OjEzLjk1NjY0MjI3OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5NDQyODUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmRldmljZV9saW5rc19kcml2ZXJfYm91bmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iYXNlL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDY6MTQuMDA1NTk0NzI0WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTk4MTkyMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGdpdmVuIHdoYXQgSSdtIHNlZWluZzpcblxuKipBbmFseXppbmcgYSBOb24tRXhwb3J0ZWQsIE5vbi1TdGF0aWMgRnVuY3Rpb24gQ2FsbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgZnVuY3Rpb24gdGhhdCdzICpub3QqIGV4cG9ydGVkLCBtZWFuaW5nIGl0J3Mgbm90IG1lYW50IHRvIGJlIGRpcmVjdGx5IGFjY2Vzc2libGUgb3V0c2lkZSBvZiBpdHMgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBUaGF0J3MgdGhlIGZpcnN0IGtleSBwb2ludC4gQnV0LCBpdCdzICphbHNvKiBub3Qgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gU3RhdGljIHdvdWxkIGxpbWl0IGl0cyBzY29wZSBldmVuIGZ1cnRoZXIsIHRvIHRoZSBzcGVjaWZpYyBmaWxlLiBCZWNhdXNlIGl0J3Mgbm9uLXN0YXRpYyBidXQgbm90IGV4cG9ydGVkLCBteSBodW5jaCBpcyB0aGF0IGl0J3MgbWVhbnQgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gdGhlIG1vZHVsZSBvciBsaWJyYXJ5IGl0IHJlc2lkZXMuIFRoZSBmYWN0IHRoYXQgaXQgaXNuJ3QgZXhwb3J0ZWQgaW5kaWNhdGVzIGEgZGVncmVlIG9mIGVuY2Fwc3VsYXRpb24gYW5kIGxpa2VseSBhIGNvbnNjaW91cyBkZXNpZ24gY2hvaWNlIHRvIGhpZGUgaXQgZnJvbSBnZW5lcmFsIHVzZSwgcGVyaGFwcyB0byBwcm90ZWN0IGFnYWluc3QgdW5pbnRlbmRlZCB1c2Ugb3IgdG8gc2lnbmFsIHRoYXQgdGhlIGZ1bmN0aW9uJ3MgaW50ZXJmYWNlIG1pZ2h0IGNoYW5nZSB3aXRob3V0IG5vdGljZS4gVGhlIHNlY29uZCB0aGluZyB0aGF0IEkgaGF2ZSBpcyBhIHJlZmVyZW5jZSB0byBpdHMgY2FsbGVyOiBgZHJpdmVycy9iYXNlL2RkLmNgLiBUaGlzIHRlbGxzIG1lICpleGFjdGx5KiB3aGVyZSB0aGUgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCwgZ2l2aW5nIG1lIGEgY3J1Y2lhbCBwb2ludCBvZiBjb250ZXh0LiBOb3cgSSBjYW4gZGl2ZSBpbnRvIHRoYXQgc3BlY2lmaWMgZmlsZSB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgaGlkZGVuIGZ1bmN0aW9uIGlzIG5lY2Vzc2FyeSwgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgb3ZlcmFsbCBzeXN0ZW0sIGFuZCB3aGF0IHNwZWNpZmljIHB1cnBvc2UgaXQgc2VydmVzIHdpdGhpbiB0aGF0IGRyaXZlcidzIGNvZGUgYmFzZS4gVGhpcyBtYWtlcyBkZWJ1Z2dpbmcgb3IgbW9kaWZpY2F0aW9uIGVhc2llciBhcyBpdCBzaWduaWZpY2FudGx5IHJlZHVjZXMgdGhlIHNlYXJjaCBzcGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2OTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNjoxNy43MjU0MTc4NTFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTEzNzM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmFzZS9kZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmFzZS9kZC5jPTQ0Nj1zdGF0aWMgdm9pZCBkcml2ZXJfYm91bmQoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9iYXNlL2RkLmMtNDU2LVxcdGtsaXN0X2FkZF90YWlsKFxcdTAwMjZkZXYtXFx1MDAzZXAtXFx1MDAzZWtub2RlX2RyaXZlciwgXFx1MDAyNmRldi1cXHUwMDNlZHJpdmVyLVxcdTAwM2VwLVxcdTAwM2VrbGlzdF9kZXZpY2VzKTtcXG5kcml2ZXJzL2Jhc2UvZGQuYzo0NTc6XFx0ZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZChkZXYpO1xcbmRyaXZlcnMvYmFzZS9kZC5jLTQ1OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDY6MTguMDA0NTYwMDExWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMDM1NjY5NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkV4YW1pbmluZyBEcml2ZXIgQmluZGluZyBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW1tZWRpYXRlIGlzc3VlIGlzbid0IHdpdGggYGRldmljZV9saW5rc19kcml2ZXJfYm91bmRgLiBJdCdzIG5vbi1zdGF0aWMsIHNvIGluY2x1c2lvbiBpc24ndCBhIHByb2JsZW0sIHdoaWNoIGlzIGdvb2QuIFRoYXQncyBhIHJlbGllZi5cblxuQnV0IG5vdyBJJ20gc2VlaW5nIGEgcG90ZW50aWFsIHNuYWcuIGBvZl9saW5rX3RvX3BoYW5kbGVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0J3Mgbm90IGlkZWFsIGlmIEkgbmVlZCB0byB1c2UgaXQgZGlyZWN0bHksIGJ1dCB3YWl0Li4uIEl0J3MgKnVzZWQqIGJ5IGBvZl9saW5rX3Byb3BlcnR5YCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYG9mX2Z3bm9kZV9hZGRfbGlua3NgLiBPa2F5LCBgb2ZfZndub2RlX2FkZF9saW5rc2AgaXMgdGhlIGtleS4gQW5kICp0aGF0KiBpcyBjYWxsZWQgdmlhIHRoZSBnZW5lcmljIGBmd25vZGVfY2FsbF9pbnRfb3AoZndub2RlLCBhZGRfbGlua3MpYCBjb25zdHJ1Y3QuIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJcyB0aGVyZSAqYW55dGhpbmcqIHdpdGhpbiBgZHJpdmVycy9vZi9wcm9wZXJ0eS5jYCB0aGF0J3MgYWNjZXNzaWJsZSwgYSBub24tc3RhdGljIGZ1bmN0aW9uIEkgY291bGQgcG90ZW50aWFsbHkgbGV2ZXJhZ2U/IFRoYXQncyB0aGUgcmVhbCBxdWVzdGlvbiBub3cuIExldCBtZSBjaGVjayB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNDgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDY6MjIuMDA4MTI5NjU5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjA5MzUwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvZl9md25vZGVfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvb2YvcHJvcGVydHkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL29mL3Byb3BlcnR5LmM9MTY4Nj1zdGF0aWMgaW50IG9mX2Z3bm9kZV9hZGRfbGlua3Moc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNzAyLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoxNzAzOmNvbnN0IHN0cnVjdCBmd25vZGVfb3BlcmF0aW9ucyBvZl9md25vZGVfb3BzID0ge1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNzA0LVxcdC5nZXQgPSBvZl9md25vZGVfZ2V0LFxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE3MjctfTtcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MTcyODpFWFBPUlRfU1lNQk9MX0dQTChvZl9md25vZGVfb3BzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDY6MjIuMDYwMjMxNzk0WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMTg2NzE2MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYG9mX2Z3bm9kZV9vcHNgIFN0cnVjdHVyZSoqXG5cblJpZ2h0LCBgb2ZfZndub2RlX29wc2AgaXMgZXhwb3J0ZWQsIGJ1dCBpdCdzIGEgKnN0cnVjdHVyZSouIFRoYXQgaW1tZWRpYXRlbHkgc2V0cyBvZmYgYSBtZW50YWwgZmxhZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgKnVzZWQqLCB3aGF0IGZ1bmN0aW9ucyBhcmUgKmFwcGxpZWQqIHRvIGl0LCBub3QganVzdCB0aGUgc3RydWN0dXJlIGl0c2VsZi4gSXQncyBhbG1vc3QgY2VydGFpbmx5IGEgY29sbGVjdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVycywgb3IgYXQgbGVhc3QgYSByZWxhdGVkIGRhdGEgc3RydWN0dXJlLiBTbywgbGV0J3MgYmFjayB1cCBhIGJpdCBhbmQgc2VlIHdoYXQncyBnb2luZyBvbiBpbiBgZHJpdmVycy9vZi9wcm9wZXJ0eS5jYC4gVGhlIGZhY3QgdGhhdCBpdCdzIGV4cG9ydGVkIHN1Z2dlc3RzIGl0J3MgYSBjcnVjaWFsIHBhcnQgb2YgdGhlIE9GVyBmcmFtZXdvcmssIGJ1dCB0aGUgY29udGV4dCBpcyBtaXNzaW5nLCBzbyBsZXQncyBzdGFydCB3aXRoIHRoaXMgZmlsZS4gSSBuZWVkIHRvIGh1bnQgZm9yIGFueXRoaW5nICplbHNlKiB0aGF0IG1pZ2h0IGJlIGV4cG9ydGVkIGFuZCByZWxhdGVkLCBvciBhbnkgZnVuY3Rpb25zIHRoYXQgdGFrZSBvciByZXR1cm4gYW4gYG9mX2Z3bm9kZV9vcHNgIHBvaW50ZXIgb3Igc3RydWN0dXJlIGFzIGFuIGFyZ3VtZW50LiBJ4oCZbSB0aGlua2luZyB0aGVyZSBtdXN0IGJlIHNvbWUgc3VwcG9ydGluZyBmdW5jdGlvbnMgdGhhdCBvcGVyYXRlIG9uIGl0LCBzb21lIHdheSB0byBzZXQgb3IgZ2V0IHByb3BlcnRpZXMsIGVudW1lcmF0ZSBjaGlsZHJlbiwgdGhhdCBzb3J0IG9mIHRoaW5nLiBJIHdhbnQgdG8gYnVpbGQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBPRlcgaW50ZXJmYWNlLCBhbmQgdGhpcyBgb2ZfZndub2RlX29wc2Agc3RydWN0dXJlIGlzIG9idmlvdXNseSBhIGtleSBlbGVtZW50LiBJIHN1c3BlY3QgaXQncyB0aGUgY29yZSBvZiBob3cgZGV2aWNlIHRyZWUgbm9kZXMgYW5kIHRoZWlyIHByb3BlcnRpZXMgYXJlIG1hbmFnZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzA5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDY6MjYuMTc4OTA2NjU4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzY4NjM4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvb2YvcHJvcGVydHkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL29mL3Byb3BlcnR5LmM9NDU9Ym9vbCBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqcHJvcG5hbWUpXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNTgtfVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzo1OTpFWFBPUlRfU1lNQk9MKG9mX3Byb3BlcnR5X3JlYWRfYm9vbCk7XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTYwLVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTY4PWJvb2wgb2ZfZ3JhcGhfaXNfcHJlc2VudChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNzgtfVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzo3OTpFWFBPUlRfU1lNQk9MKG9mX2dyYXBoX2lzX3ByZXNlbnQpO1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy04MC1cXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYz05NT1pbnQgb2ZfcHJvcGVydHlfY291bnRfZWxlbXNfb2Zfc2l6ZShjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTExMi19XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjExMzpFWFBPUlRfU1lNQk9MX0dQTChvZl9wcm9wZXJ0eV9jb3VudF9lbGVtc19vZl9zaXplKTtcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTE0LVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTE2OD1pbnQgb2ZfcHJvcGVydHlfcmVhZF91OF9pbmRleChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE4MS19XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjE4MjpFWFBPUlRfU1lNQk9MX0dQTChvZl9wcm9wZXJ0eV9yZWFkX3U4X2luZGV4KTtcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTgzLVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTIwMT1pbnQgb2ZfcHJvcGVydHlfcmVhZF91MTZfaW5kZXgoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCxcXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0yMTQtfVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoyMTU6RVhQT1JUX1NZTUJPTF9HUEwob2ZfcHJvcGVydHlfcmVhZF91MTZfaW5kZXgpO1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0yMTYtXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9MjM0PWludCBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTI0OC19XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjI0OTpFWFBPUlRfU1lNQk9MX0dQTChvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleCk7XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTI1MC1cXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYz0yNjg9aW50IG9mX3Byb3BlcnR5X3JlYWRfdTY0X2luZGV4KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMjgxLX1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MjgyOkVYUE9SVF9TWU1CT0xfR1BMKG9mX3Byb3BlcnR5X3JlYWRfdTY0X2luZGV4KTtcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMjgzLVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTMwOD1pbnQgb2ZfcHJvcGVydHlfcmVhZF92YXJpYWJsZV91OF9hcnJheShjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTMzMS19XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjMzMjpFWFBPUlRfU1lNQk9MX0dQTChvZl9wcm9wZXJ0eV9yZWFkX3ZhcmlhYmxlX3U4X2FycmF5KTtcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMzMzLVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTM1OD1pbnQgb2ZfcHJvcGVydHlfcmVhZF92YXJpYWJsZV91MTZfYXJyYXkoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCxcXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0zODEtfVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzozODI6RVhQT1JUX1NZTUJPTF9HUEwob2ZfcHJvcGVydHlfcmVhZF92YXJpYWJsZV91MTZfYXJyYXkpO1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0zODMtXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9NDA1PWludCBvZl9wcm9wZXJ0eV9yZWFkX3ZhcmlhYmxlX3UzMl9hcnJheShjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTQyOC19XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjQyOTpFWFBPUlRfU1lNQk9MX0dQTChvZl9wcm9wZXJ0eV9yZWFkX3ZhcmlhYmxlX3UzMl9hcnJheSk7XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTQzMC1cXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYz00NDY9aW50IG9mX3Byb3BlcnR5X3JlYWRfdTY0KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGNvbnN0IGNoYXIgKnByb3BuYW1lLFxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTQ1OS19XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjQ2MDpFWFBPUlRfU1lNQk9MX0dQTChvZl9wcm9wZXJ0eV9yZWFkX3U2NCk7XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTQ2MS1cXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYz00ODM9aW50IG9mX3Byb3BlcnR5X3JlYWRfdmFyaWFibGVfdTY0X2FycmF5KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNTA4LX1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6NTA5OkVYUE9SVF9TWU1CT0xfR1BMKG9mX3Byb3BlcnR5X3JlYWRfdmFyaWFibGVfdTY0X2FycmF5KTtcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNTEwLVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTUzMD1pbnQgb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqcHJvcG5hbWUsXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNTQzLX1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6NTQ0OkVYUE9SVF9TWU1CT0xfR1BMKG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKTtcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNTQ1LVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTU2MD1pbnQgb2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGNvbnN0IGNoYXIgKnByb3BuYW1lLFxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTU4NS19XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjU4NjpFWFBPUlRfU1lNQk9MX0dQTChvZl9wcm9wZXJ0eV9tYXRjaF9zdHJpbmcpO1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy01ODctXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9NTk5PWludCBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19oZWxwZXIoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCxcXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy02MjMtfVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzo2MjQ6RVhQT1JUX1NZTUJPTF9HUEwob2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdfaGVscGVyKTtcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNjI1LVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYz02MjY9Y29uc3QgX19iZTMyICpvZl9wcm9wX25leHRfdTMyKGNvbnN0IHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCwgY29uc3QgX19iZTMyICpjdXIsXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNjQ2LX1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6NjQ3OkVYUE9SVF9TWU1CT0xfR1BMKG9mX3Byb3BfbmV4dF91MzIpO1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy02NDgtXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTY0OT1jb25zdCBjaGFyICpvZl9wcm9wX25leHRfc3RyaW5nKGNvbnN0IHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCwgY29uc3QgY2hhciAqY3VyKVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTY3OS19XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjY4MDpFWFBPUlRfU1lNQk9MX0dQTChvZl9wcm9wX25leHRfc3RyaW5nKTtcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNjgxLVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTY4OT1pbnQgb2ZfZ3JhcGhfcGFyc2VfZW5kcG9pbnQoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTcwOS19XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjcxMDpFWFBPUlRfU1lNQk9MKG9mX2dyYXBoX3BhcnNlX2VuZHBvaW50KTtcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNzExLVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTcyMD1zdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2dyYXBoX2dldF9wb3J0X2J5X2lkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50LCB1MzIgaWQpXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNzM4LX1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6NzM5OkVYUE9SVF9TWU1CT0wob2ZfZ3JhcGhfZ2V0X3BvcnRfYnlfaWQpO1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy03NDAtXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9NzUyPXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZ3JhcGhfZ2V0X25leHRfcG9ydChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCxcXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy03NzUtfVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzo3NzY6RVhQT1JUX1NZTUJPTChvZl9ncmFwaF9nZXRfbmV4dF9wb3J0KTtcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNzc3LVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTc4Nz1zdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2dyYXBoX2dldF9uZXh0X3BvcnRfZW5kcG9pbnQoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpwb3J0LFxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTgwMi19XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjgwMzpFWFBPUlRfU1lNQk9MKG9mX2dyYXBoX2dldF9uZXh0X3BvcnRfZW5kcG9pbnQpO1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy04MDQtXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9ODEzPXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZ3JhcGhfZ2V0X25leHRfZW5kcG9pbnQoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQsXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtODU5LX1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6ODYwOkVYUE9SVF9TWU1CT0wob2ZfZ3JhcGhfZ2V0X25leHRfZW5kcG9pbnQpO1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy04NjEtXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9ODcyPXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZ3JhcGhfZ2V0X2VuZHBvaW50X2J5X3JlZ3MoXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtODg2LX1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6ODg3OkVYUE9SVF9TWU1CT0wob2ZfZ3JhcGhfZ2V0X2VuZHBvaW50X2J5X3JlZ3MpO1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy04ODgtXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9ODk2PXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9lbmRwb2ludChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtOTAwLX1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6OTAxOkVYUE9SVF9TWU1CT0wob2ZfZ3JhcGhfZ2V0X3JlbW90ZV9lbmRwb2ludCk7XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTkwMi1cXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYz05MTA9c3RydWN0IGRldmljZV9ub2RlICpvZl9ncmFwaF9nZXRfcG9ydF9wYXJlbnQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTkzMi19XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjkzMzpFWFBPUlRfU1lNQk9MKG9mX2dyYXBoX2dldF9wb3J0X3BhcmVudCk7XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTkzNC1cXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYz05NDI9c3RydWN0IGRldmljZV9ub2RlICpvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KFxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTk1MC19XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjk1MTpFWFBPUlRfU1lNQk9MKG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJlbnQpO1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy05NTItXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9OTYwPXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy05NjktfVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzo5NzA6RVhQT1JUX1NZTUJPTChvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnQpO1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy05NzEtXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9OTc4PXVuc2lnbmVkIGludCBvZl9ncmFwaF9nZXRfZW5kcG9pbnRfY291bnQoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy05ODctfVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzo5ODg6RVhQT1JUX1NZTUJPTChvZl9ncmFwaF9nZXRfZW5kcG9pbnRfY291bnQpO1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy05ODktXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9OTk2PXVuc2lnbmVkIGludCBvZl9ncmFwaF9nZXRfcG9ydF9jb3VudChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTEwMDQtfVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoxMDA1OkVYUE9SVF9TWU1CT0wob2ZfZ3JhcGhfZ2V0X3BvcnRfY291bnQpO1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xMDA2LVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTEwMTY9c3RydWN0IGRldmljZV9ub2RlICpvZl9ncmFwaF9nZXRfcmVtb3RlX25vZGUoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTEwNDItfVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoxMDQzOkVYUE9SVF9TWU1CT0wob2ZfZ3JhcGhfZ2V0X3JlbW90ZV9ub2RlKTtcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTA0NC1cXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYz0xNzAzPWNvbnN0IHN0cnVjdCBmd25vZGVfb3BlcmF0aW9ucyBvZl9md25vZGVfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE3MjctfTtcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MTcyODpFWFBPUlRfU1lNQk9MX0dQTChvZl9md25vZGVfb3BzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDY6MjYuMjI2NTk3NzgzWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MjAzNTc1NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBgb2ZfbGlua190b19waGFuZGxlYCwgYnV0IGl0J3MgY2xlYXIgdGhlIHJlYWwgYWN0aW9uIGlzIGhhcHBlbmluZyBlbHNld2hlcmUuIE15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgLCBgX19vZl9tZGlvYnVzX3JlZ2lzdGVyYCwgYW5kIGBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kYC4gVGhvc2UgYXJlIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBzZWUgYE9GYCwgYFBIWUxJQmAsIGFuZCBgT0ZfTURJT2AuIEFoLCBgT0ZfTURJT2AgaXMgdHJpc3RhdGUsIG1lYW5pbmcgaXQgY2FuIGJlIGEgbW9kdWxlLiBJZiB3ZSBuZWVkIGl0IGJ1aWx0LWluLCB3ZSBqdXN0IHdhbnQgdG8gc3BlY2lmeSBgT0ZfTURJT2AgZGlyZWN0bHkuIERvdWJsZS1jaGVja2luZy4uLiB5ZXMsIGBDT05GSUdfT0ZfTURJT2AgaXMgY29ycmVjdC5cblxuTm93LCBsZXQncyB2ZXJpZnkgcmVhY2hhYmlsaXR5LiBgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZGAgaXMgdHJpZ2dlcmVkIHdoZW4gYSBkcml2ZXIgYmluZHMgdG8gYSBkZXZpY2Ug4oCTIHN0cmFpZ2h0Zm9yd2FyZC4gYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAgaXMgcmVhY2hhYmxlIGR1cmluZyBkZXZpY2UgdHJlZS1iYXNlZCBNRElPIGJ1cyByZWdpc3RyYXRpb24uIEFuZCBhcyBJIGV4cGVjdGVkLCBgZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5YCBpcyBjYWxsZWQgZnJvbSBib3RoIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgIGFuZCBgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZGAsIHNvIGl0J3MgYSBjZW50cmFsIHBvaW50IG9mIHRoZSBtb2RpZmljYXRpb25zLlxuXG5HaXZlbiB0aGVzZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMsIEknbSBjb25maWRlbnQgdGhhdCB0aGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gVGhleSByZXByZXNlbnQgYSBzaWduaWZpY2FudCBzaGlmdCBpbiBob3cgdGhlc2Ugc3Vic3lzdGVtcyBmdW5jdGlvbi4gVGhleSBhcmUgZ29pbmcgdG8gbmVlZCBtb3JlIGluLWRlcHRoIHRlc3RpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTgxLCJPdXRwdXRUb2tlbnMiOjE2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNjozMi45NDY5NTgyOTVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjQ3MzQxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT0ZcIixcbiAgICBcIlBIWUxJQlwiLFxuICAgIFwiT0ZfTURJT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seVwiLFxuICAgIFwiX19vZl9tZGlvYnVzX3JlZ2lzdGVyXCIsXG4gICAgXCJkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkZXZpY2UgbGluayBtYW5hZ2VtZW50IGZ1bmN0aW9uIGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgIGFuZCBtb2RpZmllcyBgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZGAgYW5kIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgIHRvIHVzZSBpdC4gSXQgYWxzbyBjaGFuZ2VzIE9GIHByb3BlcnR5IHBhcnNpbmcgdG8gaGFuZGxlICdldGhlcm5ldC1waHktcGFja2FnZScgbm9kZXMuIFRoZXNlIGFyZSBjb3JlIGtlcm5lbCBhbmQgc3Vic3lzdGVtIGNoYW5nZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPRlwiLFxuICAgIFwiUEhZTElCXCIsXG4gICAgXCJPRl9NRElPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5XCIsXG4gICAgXCJfX29mX21kaW9idXNfcmVnaXN0ZXJcIixcbiAgICBcImRldmljZV9saW5rc19kcml2ZXJfYm91bmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRldmljZSBsaW5rIG1hbmFnZW1lbnQgZnVuY3Rpb24gYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAgYW5kIG1vZGlmaWVzIGBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kYCBhbmQgYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAgdG8gdXNlIGl0LiBJdCBhbHNvIGNoYW5nZXMgT0YgcHJvcGVydHkgcGFyc2luZyB0byBoYW5kbGUgJ2V0aGVybmV0LXBoeS1wYWNrYWdlJyBub2Rlcy4gVGhlc2UgYXJlIGNvcmUga2VybmVsIGFuZCBzdWJzeXN0ZW0gY2hhbmdlcyB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNjozMy4wMjk0MzgwNDZaIiwiU2VxIjo0NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDc3NzQyNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDY6MzMuMDMwMDIzNTQ2WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ4NDc3MTUyMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZGV2aWNlIGxpbmsgZnJhbWV3b3JrLCBNRElPIGJ1cyByZWdpc3RyYXRpb24sIGFuZCBPRiBwcm9wZXJ0eSBwYXJzaW5nIHRvIGhhbmRsZSBzeW5jLXN0YXRlLW9ubHkgbGlua3MgYW5kIGV0aGVybmV0LXBoeS1wYWNrYWdlIG5vZGVzLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUga2VybmVsLWludGVybmFsIHN0cnVjdHVyZXMgKGRldmljZSBsaW5rcywgZGV2aWNlIHRyZWUgbm9kZXMsIGxpc3RzKSBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IG1vZGlmeSBib3VuZHMgY2hlY2tpbmcgb3IgYnVmZmVyIGFsbG9jYXRpb25zIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIHVzZS1hZnRlci1mcmVlLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBsb2NraW5nIGlzc3Vlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE3YjlmMTRlZjUwZDYzZTE2NGU0MmNkYzZkMWQ1MjMyYmQ1ZWUzMTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwMDowNTowNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jb3JlLmMgYi9kcml2ZXJzL2Jhc2UvY29yZS5jXG5pbmRleCA0ZDAyNjY4Mjk0NGYyLi42MjdmY2ZhMjc0ZjBlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9iYXNlL2NvcmUuY1xuKysrIGIvZHJpdmVycy9iYXNlL2NvcmUuY1xuQEAgLTEzMDUsNiArMTMwNSw1NyBAQCBzdGF0aWMgdm9pZCBkZXZpY2VfbGlua19kcm9wX21hbmFnZWQoc3RydWN0IGRldmljZV9saW5rICpsaW5rKVxuIFx0a3JlZl9wdXQoXHUwMDI2bGluay1cdTAwM2VrcmVmLCBfX2RldmljZV9saW5rX2RlbCk7XG4gfVxuIFxuKy8qIENhbGxlciBtdXN0IGhvbGQgdGhlIGRldmljZSBsaW5rcyB3cml0ZSBsb2NrLiAqL1xuK3N0YXRpYyB2b2lkIF9fZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KHN0cnVjdCBkZXZpY2UgKmRldixcbitcdFx0XHRcdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpzeW5jX2xpc3QpXG4re1xuK1x0c3RydWN0IGRldmljZV9saW5rICpsaW5rLCAqbG47XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobGluaywgbG4sIFx1MDAyNmRldi1cdTAwM2VsaW5rcy5zdXBwbGllcnMsIGNfbm9kZSkge1xuK1x0XHRzdHJ1Y3QgZGV2aWNlICpzdXBwbGllcjtcbitcbitcdFx0aWYgKCFkZXZpY2VfbGlua190ZXN0KGxpbmssIERMX0ZMQUdfTUFOQUdFRCkgfHxcbitcdFx0ICAgICFkZXZpY2VfbGlua190ZXN0KGxpbmssIERMX0ZMQUdfU1lOQ19TVEFURV9PTkxZKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LypcbitcdFx0ICogRExfRkxBR19TWU5DX1NUQVRFX09OTFkgZXhjbHVkZXMgYWxsIG90aGVyIG1hbmFnZWQgbGluayBmbGFncyxcbitcdFx0ICogc28gaXQgaXMgc2FmZSB0byBkcm9wIHRoZSBtYW5hZ2VkIGxpbmsgY29tcGxldGVseS5cbitcdFx0ICovXG4rXHRcdHN1cHBsaWVyID0gbGluay1cdTAwM2VzdXBwbGllcjtcbitcdFx0ZGV2aWNlX2xpbmtfZHJvcF9tYW5hZ2VkKGxpbmspO1xuK1xuK1x0XHRpZiAoZGVmZXJfc3luY19zdGF0ZV9jb3VudClcbitcdFx0XHRfX2RldmljZV9saW5rc19zdXBwbGllcl9kZWZlcl9zeW5jKHN1cHBsaWVyKTtcbitcdFx0ZWxzZVxuK1x0XHRcdF9fZGV2aWNlX2xpbmtzX3F1ZXVlX3N5bmNfc3RhdGUoc3VwcGxpZXIsIHN5bmNfbGlzdCk7XG4rXHR9XG4rfVxuK1xuKy8qKlxuKyAqIGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seSAtIERyb3AgbWFuYWdlZCBzeW5jLXN0YXRlLW9ubHkgbGlua3NcbisgKiBAZGV2OiBDb25zdW1lciBkZXZpY2Ugd2hvc2UgcHJveHkgbGlua3Mgc2hvdWxkIGJlIGRyb3BwZWRcbisgKlxuKyAqIEZyYW1ld29ya3Mgd2hpY2ggcG9wdWxhdGUgY2hpbGQgZGV2aWNlcyBiZWxvdyBhIGRyaXZlcmxlc3MgZGV2aWNlIGNhbiBjYWxsXG4rICogdGhpcyBhZnRlciBhZGRpbmcgYWxsIG9mIHRoZSBjaGlsZHJlbi4gVGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSBhY3F1aXJlZCB0aGVpclxuKyAqIG93biBsaW5rcyBieSB0aGVuLCBzbyB0aGUgdGVtcG9yYXJ5IGxpbmtzIHdoaWNoIG9ubHkgcHJldmVudCBzdXBwbGllcnMgZnJvbVxuKyAqIHJlY2VpdmluZyBzeW5jX3N0YXRlKCkgY2FsbGJhY2tzIGFyZSBubyBsb25nZXIgbmVlZGVkLlxuKyAqXG4rICogUmUtZXZhbHVhdGUgZWFjaCBhZmZlY3RlZCBzdXBwbGllciBmb3IgYSBzeW5jX3N0YXRlKCkgY2FsbGJhY2sgYWZ0ZXIgaXRzXG4rICogbGluayBpcyBkcm9wcGVkLlxuKyAqL1xuK3ZvaWQgZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KHN0cnVjdCBkZXZpY2UgKmRldilcbit7XG4rXHRMSVNUX0hFQUQoc3luY19saXN0KTtcbitcbitcdGRldmljZV9saW5rc193cml0ZV9sb2NrKCk7XG4rXHRfX2RldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seShkZXYsIFx1MDAyNnN5bmNfbGlzdCk7XG4rXHRkZXZpY2VfbGlua3Nfd3JpdGVfdW5sb2NrKCk7XG4rXG4rXHRkZXZpY2VfbGlua3NfZmx1c2hfc3luY19saXN0KFx1MDAyNnN5bmNfbGlzdCwgTlVMTCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seSk7XG4rXG4gc3RhdGljIHNzaXplX3Qgd2FpdGluZ19mb3Jfc3VwcGxpZXJfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiBcdFx0XHRcdFx0IGNoYXIgKmJ1ZilcbkBAIC0xNDE4LDYgKzE0NjksOCBAQCB2b2lkIGRldmljZV9saW5rc19kcml2ZXJfYm91bmQoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0ZWxzZVxuIFx0XHRfX2RldmljZV9saW5rc19xdWV1ZV9zeW5jX3N0YXRlKGRldiwgXHUwMDI2c3luY19saXN0KTtcbiBcbitcdF9fZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KGRldiwgXHUwMDI2c3luY19saXN0KTtcbitcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsaW5rLCBsbiwgXHUwMDI2ZGV2LVx1MDAzZWxpbmtzLnN1cHBsaWVycywgY19ub2RlKSB7XG4gXHRcdHN0cnVjdCBkZXZpY2UgKnN1cHBsaWVyO1xuIFxuQEAgLTE0MjUsMTcgKzE0NzgsMTAgQEAgdm9pZCBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0c3VwcGxpZXIgPSBsaW5rLVx1MDAzZXN1cHBsaWVyO1xuLVx0XHRpZiAoZGV2aWNlX2xpbmtfdGVzdChsaW5rLCBETF9GTEFHX1NZTkNfU1RBVEVfT05MWSkpIHtcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFdoZW4gRExfRkxBR19TWU5DX1NUQVRFX09OTFkgaXMgc2V0LCBpdCBtZWFucyBub1xuLVx0XHRcdCAqIG90aGVyIERMX01BTkFHRURfTElOS19GTEFHUyBoYXZlIGJlZW4gc2V0LiBTbywgaXQnc1xuLVx0XHRcdCAqIHNhdmUgdG8gZHJvcCB0aGUgbWFuYWdlZCBsaW5rIGNvbXBsZXRlbHkuXG4tXHRcdFx0ICovXG4tXHRcdFx0ZGV2aWNlX2xpbmtfZHJvcF9tYW5hZ2VkKGxpbmspO1xuLVx0XHR9IGVsc2UgaWYgKGRldl9pc19iZXN0X2VmZm9ydChkZXYpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgIGRldmljZV9saW5rX3Rlc3QobGluaywgRExfRkxBR19JTkZFUlJFRCkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgbGluay1cdTAwM2VzdGF0dXMgIT0gRExfU1RBVEVfQ09OU1VNRVJfUFJPQkUgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIWRldl9jYW5fbWF0Y2gobGluay1cdTAwM2VzdXBwbGllcikpIHtcbitcdFx0aWYgKGRldl9pc19iZXN0X2VmZm9ydChkZXYpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgZGV2aWNlX2xpbmtfdGVzdChsaW5rLCBETF9GTEFHX0lORkVSUkVEKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGxpbmstXHUwMDNlc3RhdHVzICE9IERMX1NUQVRFX0NPTlNVTUVSX1BST0JFIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIWRldl9jYW5fbWF0Y2gobGluay1cdTAwM2VzdXBwbGllcikpIHtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIFdoZW4gZGV2X2lzX2Jlc3RfZWZmb3J0KCkgaXMgdHJ1ZSwgd2UgaWdub3JlIGRldmljZVxuIFx0XHRcdCAqIGxpbmtzIHRvIHN1cHBsaWVycyB0aGF0IGRvbid0IGhhdmUgYSBkcml2ZXIuICBJZiB0aGVcbkBAIC0xNDQ5LDEyICsxNDk1LDYgQEAgdm9pZCBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdFx0XHRXUklURV9PTkNFKGxpbmstXHUwMDNlc3RhdHVzLCBETF9TVEFURV9BQ1RJVkUpO1xuIFx0XHR9XG4gXG4tXHRcdC8qXG4tXHRcdCAqIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBldmVuIGZvciB0aGUgZGVsZXRlZFxuLVx0XHQgKiBETF9GTEFHX1NZTkNfU1RBVEVfT05MWSBkZXZpY2UgbGluayBpbiBjYXNlIGl0IHdhcyB0aGUgbGFzdFxuLVx0XHQgKiBkZXZpY2UgbGluayB0aGF0IHdhcyBwcmV2ZW50aW5nIHRoZSBzdXBwbGllciBmcm9tIGdldHRpbmcgYVxuLVx0XHQgKiBzeW5jX3N0YXRlKCkgY2FsbC5cbi1cdFx0ICovXG4gXHRcdGlmIChkZWZlcl9zeW5jX3N0YXRlX2NvdW50KVxuIFx0XHRcdF9fZGV2aWNlX2xpbmtzX3N1cHBsaWVyX2RlZmVyX3N5bmMoc3VwcGxpZXIpO1xuIFx0XHRlbHNlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMgYi9kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uY1xuaW5kZXggYjhkMjk4YzA0ZDNmZi4uNDlmOWI0MDYyY2Y1YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jXG4rKysgYi9kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uY1xuQEAgLTIyOSw3ICsyMjksNyBAQCBpbnQgX19vZl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuIFx0XHRnb3RvIHVucmVnaXN0ZXI7XG4gXG4gXHRpZiAoIXNjYW5waHlzKVxuLVx0XHRyZXR1cm4gMDtcbitcdFx0Z290byBkb25lO1xuIFxuIFx0LyogYXV0byBzY2FuIGZvciBQSFlzIHdpdGggZW1wdHkgcmVnIHByb3BlcnR5ICovXG4gXHRmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZShucCwgY2hpbGQpIHtcbkBAIC0yNjEsNiArMjYxLDkgQEAgaW50IF9fb2ZfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCxcbiBcdFx0fVxuIFx0fVxuIFxuK2RvbmU6XG4rXHRkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkoXHUwMDI2bWRpby1cdTAwM2VkZXYpO1xuK1xuIFx0cmV0dXJuIDA7XG4gXG4gcHV0X3VucmVnaXN0ZXI6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9wcm9wZXJ0eS5jIGIvZHJpdmVycy9vZi9wcm9wZXJ0eS5jXG5pbmRleCA3MmNmMTI5MDdkZTAzLi5kNTliY2IxZjI5ZGUwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9vZi9wcm9wZXJ0eS5jXG4rKysgYi9kcml2ZXJzL29mL3Byb3BlcnR5LmNcbkBAIC0xMjcyLDYgKzEyNzIsMjAgQEAgc3RhdGljIHZvaWQgb2ZfbGlua190b19waGFuZGxlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29uX25wLFxuIFx0XHR0bXBfbnAgPSBvZl9nZXRfbmV4dF9wYXJlbnQodG1wX25wKTtcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBBbiBFdGhlcm5ldCBQSFkgcGFja2FnZSBub2RlIGRlc2NyaWJlcyByZXNvdXJjZXMgc2hhcmVkIGJ5IGl0cyBtZW1iZXJcbitcdCAqIFBIWXMsIGJ1dCBpcyBub3QgcG9wdWxhdGVkIGFzIGEgc3RydWN0IGRldmljZS4gTGluayBldmVyeSBlbmFibGVkXG4rXHQgKiBtZW1iZXIgUEhZIHRvIHRob3NlIHN1cHBsaWVycyBzbyBmd19kZXZsaW5rIGNhbiB1c2UgdGhlIHJlYWwgY29uc3VtZXJcbitcdCAqIGRldmljZXMgaW5zdGVhZCBvZiBsZWF2aW5nIGEgcHJveHkgbGluayBvbiB0aGUgTURJTyBidXMgaW5kZWZpbml0ZWx5LlxuK1x0ICovXG4rXHRpZiAob2Zfbm9kZV9uYW1lX2VxKGNvbl9ucCwgXCJldGhlcm5ldC1waHktcGFja2FnZVwiKSkge1xuK1x0XHRmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZV9zY29wZWQoY29uX25wLCBjaGlsZClcbitcdFx0XHRmd25vZGVfbGlua19hZGQob2ZfZndub2RlX2hhbmRsZShjaGlsZCksXG4rXHRcdFx0XHRcdG9mX2Z3bm9kZV9oYW5kbGUoc3VwX25wKSwgZmxhZ3MpO1xuK1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRmd25vZGVfbGlua19hZGQob2ZfZndub2RlX2hhbmRsZShjb25fbnApLCBvZl9md25vZGVfaGFuZGxlKHN1cF9ucCksIGZsYWdzKTtcbiB9XG4gXG5AQCAtMTYyMCw3ICsxNjM0LDkgQEAgc3RhdGljIGludCBvZl9saW5rX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29uX25wLCBjb25zdCBjaGFyICpwcm9wX25hbWUpXG4gXG4gXHRcdFx0bWF0Y2hlZCA9IHRydWU7XG4gXHRcdFx0aSsrO1xuLVx0XHRcdG9mX2xpbmtfdG9fcGhhbmRsZShjb25fZGV2X25wLCBwaGFuZGxlLCBzLVx1MDAzZWZ3bGlua19mbGFncyk7XG4rXHRcdFx0aWYgKGNvbl9kZXZfbnApXG4rXHRcdFx0XHRvZl9saW5rX3RvX3BoYW5kbGUoY29uX2Rldl9ucCwgcGhhbmRsZSxcbitcdFx0XHRcdFx0XHQgICBzLVx1MDAzZWZ3bGlua19mbGFncyk7XG4gXHRcdFx0b2Zfbm9kZV9wdXQocGhhbmRsZSk7XG4gXHRcdH1cbiBcdFx0cysrO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oXG5pbmRleCBhZWU3OWZkNmIzMmI0Li44YWZiOWYyYjBkODI1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaFxuQEAgLTEzODEsNiArMTM4MSw3IEBAIHN0cnVjdCBkZXZpY2VfbGluayAqZGV2aWNlX2xpbmtfYWRkKHN0cnVjdCBkZXZpY2UgKmNvbnN1bWVyLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBkZXZpY2UgKnN1cHBsaWVyLCB1MzIgZmxhZ3MpO1xuIHZvaWQgZGV2aWNlX2xpbmtfZGVsKHN0cnVjdCBkZXZpY2VfbGluayAqbGluayk7XG4gdm9pZCBkZXZpY2VfbGlua19yZW1vdmUodm9pZCAqY29uc3VtZXIsIHN0cnVjdCBkZXZpY2UgKnN1cHBsaWVyKTtcbit2b2lkIGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuIHZvaWQgZGV2aWNlX2xpbmtzX3N1cHBsaWVyX3N5bmNfc3RhdGVfcGF1c2Uodm9pZCk7XG4gdm9pZCBkZXZpY2VfbGlua3Nfc3VwcGxpZXJfc3luY19zdGF0ZV9yZXN1bWUodm9pZCk7XG4gdm9pZCBkZXZpY2VfbGlua193YWl0X3JlbW92YWwodm9pZCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNjozMy4wMzAwMjQzOTZaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg0NzcxMjMxMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRGV2aWNlIExpbmsgRnJhbWV3b3JrIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGNvcmUgaW5mcmFzdHJ1Y3R1cmU6IHRoZSBkZXZpY2UgbGluayBmcmFtZXdvcmsgaW4gYGNvcmUuY2AsIE1ESU8gYnVzIHJlZ2lzdHJhdGlvbiwgYW5kIE9GIHByb3BlcnR5IHBhcnNpbmcuIFNwZWNpZmljYWxseSwgaXQncyBpbnRyb2R1Y2luZyB0aGlzIG5ldyBgZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KClgIGZ1bmN0aW9uLCBhbmQgY2FsbGluZyBpdCBkdXJpbmcgTURJTyBidXMgcmVnaXN0cmF0aW9uLiBJdCdzIGFsc28gbWFraW5nIGEgc21hbGwgdHdlYWsgdG8gYG9mX2xpbmtfdG9fcGhhbmRsZSgpYCB0byBoYW5kbGUgXCJldGhlcm5ldC1waHktcGFja2FnZVwiIG5vZGVzLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gQnV0IGZyb20gd2hhdCBJIGNhbiBzZWUsIHRoaXMgaXMgcHVyZWx5IGxvZ2ljYWwuIEl0J3Mgd29ya2luZyB3aXRoIGRldmljZSBsaW5rcywgbGlzdHMsIGFuZCB0aGUgZGV2aWNlIHRyZWUg4oCTIGFsbCBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlcy4gTm90aGluZyBuZXcgaXMgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCBhbmQgcGFydGlhbGx5IGluaXRpYWxpemVkLiBUaGUgY29kZSBkb2Vzbid0IHNlZW0gdG8gYmUgaW50cm9kdWNpbmcgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBidWZmZXIgb3ZlcmZsb3dzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGUgcHJpbWFyeSByaXNrcyBoZXJlIGFyZSB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbG9naWNhbCBlcnJvcnMgbGlrZSBkZWFkbG9ja3Mgb3IgaW5jb3JyZWN0IHN0YXRlIHRyYW5zaXRpb25zLiBUaGVzZSBhcmUgZXhhY3RseSB0aGUgdHlwZXMgb2YgcHJvYmxlbXMgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBhcmUgZGVzaWduZWQgdG8gY2F0Y2guIFNvLCBiYXNlZCBvbiB0aGUgc2NvcGUgYW5kIG5hdHVyZSBvZiB0aGUgbW9kaWZpY2F0aW9ucywgSSBzZWUgbm8gcmVhc29uIHRvIHNwaW4gdXAgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGZvciB0aGlzLlxuXG5MZXQncyBkbyBhIHF1aWNrIGZpbmFsIGNoZWNrIGZvciBhbnkgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBqdXN0IHRvIGJlIGV4dHJhIHN1cmUuIGB3YWl0aW5nX2Zvcl9zdXBwbGllcl9zaG93YCBpc24ndCBtb2RpZmllZCwgb25seSB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgd2hpY2ggaXMgZ29vZC4gYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAgaXMgZXhwb3J0ZWQsIGJ1dCBpdCdzIGp1c3QgbWFuaXB1bGF0aW5nIGludGVybmFsIGxpc3RzLCBzbyB0aGF0J3Mgbm90IGEgY29uY2Vybi4gYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAgaXMgaW50ZXJuYWwsIGFuZCBgb2ZfbGlua19wcm9wZXJ0eWAgaXMgaW50ZXJuYWwgYXMgd2VsbC5cblxuQWxyaWdodCwgbm8gdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBhbmQgbm8gYXBwYXJlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFdlIHNob3VsZCBiZSBnb29kIHRvIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTM0LCJPdXRwdXRUb2tlbnMiOjE1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA3OjIxLjUwNzE1MTQxNloiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRldmljZSBsaW5rIGZyYW1ld29yaywgTURJTyBidXMgcmVnaXN0cmF0aW9uLCBhbmQgT0YgcHJvcGVydHkgcGFyc2luZyB0byBoYW5kbGUgc3luYy1zdGF0ZS1vbmx5IGxpbmtzIGFuZCBldGhlcm5ldC1waHktcGFja2FnZSBub2Rlcy4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGtlcm5lbC1pbnRlcm5hbCBzdHJ1Y3R1cmVzIChkZXZpY2UgbGlua3MsIGRldmljZSB0cmVlIG5vZGVzLCBsaXN0cykgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBtb2RpZnkgYm91bmRzIGNoZWNraW5nIG9yIGJ1ZmZlciBhbGxvY2F0aW9ucyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbG9ja2luZyBpc3N1ZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZGV2aWNlIGxpbmsgZnJhbWV3b3JrLCBNRElPIGJ1cyByZWdpc3RyYXRpb24sIGFuZCBPRiBwcm9wZXJ0eSBwYXJzaW5nIHRvIGhhbmRsZSBzeW5jLXN0YXRlLW9ubHkgbGlua3MgYW5kIGV0aGVybmV0LXBoeS1wYWNrYWdlIG5vZGVzLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUga2VybmVsLWludGVybmFsIHN0cnVjdHVyZXMgKGRldmljZSBsaW5rcywgZGV2aWNlIHRyZWUgbm9kZXMsIGxpc3RzKSBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IG1vZGlmeSBib3VuZHMgY2hlY2tpbmcgb3IgYnVmZmVyIGFsbG9jYXRpb25zIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIHVzZS1hZnRlci1mcmVlLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBsb2NraW5nIGlzc3Vlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowlv4fr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 00:03:11 +0000 UTC FinishedAt: 2026-08-17 00:07:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "e6a5d573d24cd375e09d24f136523cb3cc85c9d3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OF", "PHYLIB", "OF_MDIO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "e6a5d573d24cd375e09d24f136523cb3cc85c9d3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OF", "PHYLIB", "OF_MDIO" ], "series_id": "5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "device_links_drop_sync_state_only", "__of_mdiobus_register", "device_links_driver_bound" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09GJiMzNDssCiAgICAmIzM0O1BIWUxJQiYjMzQ7LAogICAgJiMzNDtPRl9NRElPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5JiMzNDssCiAgICAmIzM0O19fb2ZfbWRpb2J1c19yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRldmljZSBsaW5rIGZyYW1ld29yaywgTURJTyBidXMgcmVnaXN0cmF0aW9uLCBhbmQgT0YgcHJvcGVydHkgcGFyc2luZyB0byBoYW5kbGUgc3luYy1zdGF0ZS1vbmx5IGxpbmtzIGFuZCBldGhlcm5ldC1waHktcGFja2FnZSBub2Rlcy4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGtlcm5lbC1pbnRlcm5hbCBzdHJ1Y3R1cmVzIChkZXZpY2UgbGlua3MsIGRldmljZSB0cmVlIG5vZGVzLCBsaXN0cykgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBtb2RpZnkgYm91bmRzIGNoZWNraW5nIG9yIGJ1ZmZlciBhbGxvY2F0aW9ucyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbG9ja2luZyBpc3N1ZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkZXZpY2UgbGluayBtYW5hZ2VtZW50IGZ1bmN0aW9uIGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgIGFuZCBtb2RpZmllcyBgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZGAgYW5kIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgIHRvIHVzZSBpdC4gSXQgYWxzbyBjaGFuZ2VzIE9GIHByb3BlcnR5IHBhcnNpbmcgdG8gaGFuZGxlICYjMzk7ZXRoZXJuZXQtcGh5LXBhY2thZ2UmIzM5OyBub2Rlcy4gVGhlc2UgYXJlIGNvcmUga2VybmVsIGFuZCBzdWJzeXN0ZW0gY2hhbmdlcyB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMTdiOWYxNGVmNTBkNjNlMTY0ZTQyY2RjNmQxZDUyMzJiZDVlZTMxOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDAwOjA1OjA0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jb3JlLmMgYi9kcml2ZXJzL2Jhc2UvY29yZS5jXG5pbmRleCA0ZDAyNjY4Mjk0NGYyLi42MjdmY2ZhMjc0ZjBlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9iYXNlL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9iYXNlL2NvcmUuY1xuQEAgLTEzMDUsNiAmIzQzOzEzMDUsNTcgQEAgc3RhdGljIHZvaWQgZGV2aWNlX2xpbmtfZHJvcF9tYW5hZ2VkKHN0cnVjdCBkZXZpY2VfbGluayAqbGluaylcbiBcdGtyZWZfcHV0KFx1MDAyNmxpbmstXHUwMDNla3JlZiwgX19kZXZpY2VfbGlua19kZWwpO1xuIH1cbiBcbiYjNDM7LyogQ2FsbGVyIG11c3QgaG9sZCB0aGUgZGV2aWNlIGxpbmtzIHdyaXRlIGxvY2suICovXG4mIzQzO3N0YXRpYyB2b2lkIF9fZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KHN0cnVjdCBkZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHRcdFx0c3RydWN0IGxpc3RfaGVhZCAqc3luY19saXN0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZV9saW5rICpsaW5rLCAqbG47XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsaW5rLCBsbiwgXHUwMDI2ZGV2LVx1MDAzZWxpbmtzLnN1cHBsaWVycywgY19ub2RlKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZGV2aWNlICpzdXBwbGllcjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWRldmljZV9saW5rX3Rlc3QobGluaywgRExfRkxBR19NQU5BR0VEKSB8fFxuJiM0MztcdFx0ICAgICFkZXZpY2VfbGlua190ZXN0KGxpbmssIERMX0ZMQUdfU1lOQ19TVEFURV9PTkxZKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIERMX0ZMQUdfU1lOQ19TVEFURV9PTkxZIGV4Y2x1ZGVzIGFsbCBvdGhlciBtYW5hZ2VkIGxpbmsgZmxhZ3MsXG4mIzQzO1x0XHQgKiBzbyBpdCBpcyBzYWZlIHRvIGRyb3AgdGhlIG1hbmFnZWQgbGluayBjb21wbGV0ZWx5LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRzdXBwbGllciA9IGxpbmstXHUwMDNlc3VwcGxpZXI7XG4mIzQzO1x0XHRkZXZpY2VfbGlua19kcm9wX21hbmFnZWQobGluayk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGRlZmVyX3N5bmNfc3RhdGVfY291bnQpXG4mIzQzO1x0XHRcdF9fZGV2aWNlX2xpbmtzX3N1cHBsaWVyX2RlZmVyX3N5bmMoc3VwcGxpZXIpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRfX2RldmljZV9saW5rc19xdWV1ZV9zeW5jX3N0YXRlKHN1cHBsaWVyLCBzeW5jX2xpc3QpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seSAtIERyb3AgbWFuYWdlZCBzeW5jLXN0YXRlLW9ubHkgbGlua3NcbiYjNDM7ICogQGRldjogQ29uc3VtZXIgZGV2aWNlIHdob3NlIHByb3h5IGxpbmtzIHNob3VsZCBiZSBkcm9wcGVkXG4mIzQzOyAqXG4mIzQzOyAqIEZyYW1ld29ya3Mgd2hpY2ggcG9wdWxhdGUgY2hpbGQgZGV2aWNlcyBiZWxvdyBhIGRyaXZlcmxlc3MgZGV2aWNlIGNhbiBjYWxsXG4mIzQzOyAqIHRoaXMgYWZ0ZXIgYWRkaW5nIGFsbCBvZiB0aGUgY2hpbGRyZW4uIFRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgYWNxdWlyZWQgdGhlaXJcbiYjNDM7ICogb3duIGxpbmtzIGJ5IHRoZW4sIHNvIHRoZSB0ZW1wb3JhcnkgbGlua3Mgd2hpY2ggb25seSBwcmV2ZW50IHN1cHBsaWVycyBmcm9tXG4mIzQzOyAqIHJlY2VpdmluZyBzeW5jX3N0YXRlKCkgY2FsbGJhY2tzIGFyZSBubyBsb25nZXIgbmVlZGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZS1ldmFsdWF0ZSBlYWNoIGFmZmVjdGVkIHN1cHBsaWVyIGZvciBhIHN5bmNfc3RhdGUoKSBjYWxsYmFjayBhZnRlciBpdHNcbiYjNDM7ICogbGluayBpcyBkcm9wcGVkLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkoc3RydWN0IGRldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0TElTVF9IRUFEKHN5bmNfbGlzdCk7XG4mIzQzO1xuJiM0MztcdGRldmljZV9saW5rc193cml0ZV9sb2NrKCk7XG4mIzQzO1x0X19kZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkoZGV2LCBcdTAwMjZzeW5jX2xpc3QpO1xuJiM0MztcdGRldmljZV9saW5rc193cml0ZV91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0ZGV2aWNlX2xpbmtzX2ZsdXNoX3N5bmNfbGlzdChcdTAwMjZzeW5jX2xpc3QsIE5VTEwpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seSk7XG4mIzQzO1xuIHN0YXRpYyBzc2l6ZV90IHdhaXRpbmdfZm9yX3N1cHBsaWVyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4gXHRcdFx0XHRcdCBjaGFyICpidWYpXG5AQCAtMTQxOCw2ICYjNDM7MTQ2OSw4IEBAIHZvaWQgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRlbHNlXG4gXHRcdF9fZGV2aWNlX2xpbmtzX3F1ZXVlX3N5bmNfc3RhdGUoZGV2LCBcdTAwMjZzeW5jX2xpc3QpO1xuIFxuJiM0MztcdF9fZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KGRldiwgXHUwMDI2c3luY19saXN0KTtcbiYjNDM7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobGluaywgbG4sIFx1MDAyNmRldi1cdTAwM2VsaW5rcy5zdXBwbGllcnMsIGNfbm9kZSkge1xuIFx0XHRzdHJ1Y3QgZGV2aWNlICpzdXBwbGllcjtcbiBcbkBAIC0xNDI1LDE3ICYjNDM7MTQ3OCwxMCBAQCB2b2lkIGRldmljZV9saW5rc19kcml2ZXJfYm91bmQoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRzdXBwbGllciA9IGxpbmstXHUwMDNlc3VwcGxpZXI7XG4tXHRcdGlmIChkZXZpY2VfbGlua190ZXN0KGxpbmssIERMX0ZMQUdfU1lOQ19TVEFURV9PTkxZKSkge1xuLVx0XHRcdC8qXG4tXHRcdFx0ICogV2hlbiBETF9GTEFHX1NZTkNfU1RBVEVfT05MWSBpcyBzZXQsIGl0IG1lYW5zIG5vXG4tXHRcdFx0ICogb3RoZXIgRExfTUFOQUdFRF9MSU5LX0ZMQUdTIGhhdmUgYmVlbiBzZXQuIFNvLCBpdCYjMzk7c1xuLVx0XHRcdCAqIHNhdmUgdG8gZHJvcCB0aGUgbWFuYWdlZCBsaW5rIGNvbXBsZXRlbHkuXG4tXHRcdFx0ICovXG4tXHRcdFx0ZGV2aWNlX2xpbmtfZHJvcF9tYW5hZ2VkKGxpbmspO1xuLVx0XHR9IGVsc2UgaWYgKGRldl9pc19iZXN0X2VmZm9ydChkZXYpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgIGRldmljZV9saW5rX3Rlc3QobGluaywgRExfRkxBR19JTkZFUlJFRCkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgbGluay1cdTAwM2VzdGF0dXMgIT0gRExfU1RBVEVfQ09OU1VNRVJfUFJPQkUgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIWRldl9jYW5fbWF0Y2gobGluay1cdTAwM2VzdXBwbGllcikpIHtcbiYjNDM7XHRcdGlmIChkZXZfaXNfYmVzdF9lZmZvcnQoZGV2KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBkZXZpY2VfbGlua190ZXN0KGxpbmssIERMX0ZMQUdfSU5GRVJSRUQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGxpbmstXHUwMDNlc3RhdHVzICE9IERMX1NUQVRFX0NPTlNVTUVSX1BST0JFIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFkZXZfY2FuX21hdGNoKGxpbmstXHUwMDNlc3VwcGxpZXIpKSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBXaGVuIGRldl9pc19iZXN0X2VmZm9ydCgpIGlzIHRydWUsIHdlIGlnbm9yZSBkZXZpY2VcbiBcdFx0XHQgKiBsaW5rcyB0byBzdXBwbGllcnMgdGhhdCBkb24mIzM5O3QgaGF2ZSBhIGRyaXZlci4gIElmIHRoZVxuQEAgLTE0NDksMTIgJiM0MzsxNDk1LDYgQEAgdm9pZCBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdFx0XHRXUklURV9PTkNFKGxpbmstXHUwMDNlc3RhdHVzLCBETF9TVEFURV9BQ1RJVkUpO1xuIFx0XHR9XG4gXG4tXHRcdC8qXG4tXHRcdCAqIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBldmVuIGZvciB0aGUgZGVsZXRlZFxuLVx0XHQgKiBETF9GTEFHX1NZTkNfU1RBVEVfT05MWSBkZXZpY2UgbGluayBpbiBjYXNlIGl0IHdhcyB0aGUgbGFzdFxuLVx0XHQgKiBkZXZpY2UgbGluayB0aGF0IHdhcyBwcmV2ZW50aW5nIHRoZSBzdXBwbGllciBmcm9tIGdldHRpbmcgYVxuLVx0XHQgKiBzeW5jX3N0YXRlKCkgY2FsbC5cbi1cdFx0ICovXG4gXHRcdGlmIChkZWZlcl9zeW5jX3N0YXRlX2NvdW50KVxuIFx0XHRcdF9fZGV2aWNlX2xpbmtzX3N1cHBsaWVyX2RlZmVyX3N5bmMoc3VwcGxpZXIpO1xuIFx0XHRlbHNlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMgYi9kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uY1xuaW5kZXggYjhkMjk4YzA0ZDNmZi4uNDlmOWI0MDYyY2Y1YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uY1xuQEAgLTIyOSw3ICYjNDM7MjI5LDcgQEAgaW50IF9fb2ZfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCxcbiBcdFx0Z290byB1bnJlZ2lzdGVyO1xuIFxuIFx0aWYgKCFzY2FucGh5cylcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRnb3RvIGRvbmU7XG4gXG4gXHQvKiBhdXRvIHNjYW4gZm9yIFBIWXMgd2l0aCBlbXB0eSByZWcgcHJvcGVydHkgKi9cbiBcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKG5wLCBjaGlsZCkge1xuQEAgLTI2MSw2ICYjNDM7MjYxLDkgQEAgaW50IF9fb2ZfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCxcbiBcdFx0fVxuIFx0fVxuIFxuJiM0Mztkb25lOlxuJiM0MztcdGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seShcdTAwMjZtZGlvLVx1MDAzZWRldik7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gXG4gcHV0X3VucmVnaXN0ZXI6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9wcm9wZXJ0eS5jIGIvZHJpdmVycy9vZi9wcm9wZXJ0eS5jXG5pbmRleCA3MmNmMTI5MDdkZTAzLi5kNTliY2IxZjI5ZGUwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9vZi9wcm9wZXJ0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL29mL3Byb3BlcnR5LmNcbkBAIC0xMjcyLDYgJiM0MzsxMjcyLDIwIEBAIHN0YXRpYyB2b2lkIG9mX2xpbmtfdG9fcGhhbmRsZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvbl9ucCxcbiBcdFx0dG1wX25wID0gb2ZfZ2V0X25leHRfcGFyZW50KHRtcF9ucCk7XG4gXHR9XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBbiBFdGhlcm5ldCBQSFkgcGFja2FnZSBub2RlIGRlc2NyaWJlcyByZXNvdXJjZXMgc2hhcmVkIGJ5IGl0cyBtZW1iZXJcbiYjNDM7XHQgKiBQSFlzLCBidXQgaXMgbm90IHBvcHVsYXRlZCBhcyBhIHN0cnVjdCBkZXZpY2UuIExpbmsgZXZlcnkgZW5hYmxlZFxuJiM0MztcdCAqIG1lbWJlciBQSFkgdG8gdGhvc2Ugc3VwcGxpZXJzIHNvIGZ3X2RldmxpbmsgY2FuIHVzZSB0aGUgcmVhbCBjb25zdW1lclxuJiM0MztcdCAqIGRldmljZXMgaW5zdGVhZCBvZiBsZWF2aW5nIGEgcHJveHkgbGluayBvbiB0aGUgTURJTyBidXMgaW5kZWZpbml0ZWx5LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChvZl9ub2RlX25hbWVfZXEoY29uX25wLCBcJiMzNDtldGhlcm5ldC1waHktcGFja2FnZVwmIzM0OykpIHtcbiYjNDM7XHRcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlX3Njb3BlZChjb25fbnAsIGNoaWxkKVxuJiM0MztcdFx0XHRmd25vZGVfbGlua19hZGQob2ZfZndub2RlX2hhbmRsZShjaGlsZCksXG4mIzQzO1x0XHRcdFx0XHRvZl9md25vZGVfaGFuZGxlKHN1cF9ucCksIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiBcdGZ3bm9kZV9saW5rX2FkZChvZl9md25vZGVfaGFuZGxlKGNvbl9ucCksIG9mX2Z3bm9kZV9oYW5kbGUoc3VwX25wKSwgZmxhZ3MpO1xuIH1cbiBcbkBAIC0xNjIwLDcgJiM0MzsxNjM0LDkgQEAgc3RhdGljIGludCBvZl9saW5rX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29uX25wLCBjb25zdCBjaGFyICpwcm9wX25hbWUpXG4gXG4gXHRcdFx0bWF0Y2hlZCA9IHRydWU7XG4gXHRcdFx0aSYjNDM7JiM0Mzs7XG4tXHRcdFx0b2ZfbGlua190b19waGFuZGxlKGNvbl9kZXZfbnAsIHBoYW5kbGUsIHMtXHUwMDNlZndsaW5rX2ZsYWdzKTtcbiYjNDM7XHRcdFx0aWYgKGNvbl9kZXZfbnApXG4mIzQzO1x0XHRcdFx0b2ZfbGlua190b19waGFuZGxlKGNvbl9kZXZfbnAsIHBoYW5kbGUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIHMtXHUwMDNlZndsaW5rX2ZsYWdzKTtcbiBcdFx0XHRvZl9ub2RlX3B1dChwaGFuZGxlKTtcbiBcdFx0fVxuIFx0XHRzJiM0MzsmIzQzOztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaFxuaW5kZXggYWVlNzlmZDZiMzJiNC4uOGFmYjlmMmIwZDgyNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmhcbkBAIC0xMzgxLDYgJiM0MzsxMzgxLDcgQEAgc3RydWN0IGRldmljZV9saW5rICpkZXZpY2VfbGlua19hZGQoc3RydWN0IGRldmljZSAqY29uc3VtZXIsXG4gXHRcdFx0XHQgICAgc3RydWN0IGRldmljZSAqc3VwcGxpZXIsIHUzMiBmbGFncyk7XG4gdm9pZCBkZXZpY2VfbGlua19kZWwoc3RydWN0IGRldmljZV9saW5rICpsaW5rKTtcbiB2b2lkIGRldmljZV9saW5rX3JlbW92ZSh2b2lkICpjb25zdW1lciwgc3RydWN0IGRldmljZSAqc3VwcGxpZXIpO1xuJiM0Mzt2b2lkIGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuIHZvaWQgZGV2aWNlX2xpbmtzX3N1cHBsaWVyX3N5bmNfc3RhdGVfcGF1c2Uodm9pZCk7XG4gdm9pZCBkZXZpY2VfbGlua3Nfc3VwcGxpZXJfc3luY19zdGF0ZV9yZXN1bWUodm9pZCk7XG4gdm9pZCBkZXZpY2VfbGlua193YWl0X3JlbW92YWwodm9pZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09GJiMzNDssCiAgICAmIzM0O1BIWUxJQiYjMzQ7LAogICAgJiMzNDtPRl9NRElPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5JiMzNDssCiAgICAmIzM0O19fb2ZfbWRpb2J1c19yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZGV2aWNlIGxpbmsgbWFuYWdlbWVudCBmdW5jdGlvbiBgZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5YCBhbmQgbW9kaWZpZXMgYGRldmljZV9saW5rc19kcml2ZXJfYm91bmRgIGFuZCBgX19vZl9tZGlvYnVzX3JlZ2lzdGVyYCB0byB1c2UgaXQuIEl0IGFsc28gY2hhbmdlcyBPRiBwcm9wZXJ0eSBwYXJzaW5nIHRvIGhhbmRsZSAmIzM5O2V0aGVybmV0LXBoeS1wYWNrYWdlJiMzOTsgbm9kZXMuIFRoZXNlIGFyZSBjb3JlIGtlcm5lbCBhbmQgc3Vic3lzdGVtIGNoYW5nZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE3YjlmMTRlZjUwZDYzZTE2NGU0MmNkYzZkMWQ1MjMyYmQ1ZWUzMTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAwMDowNTowNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jb3JlLmMgYi9kcml2ZXJzL2Jhc2UvY29yZS5jCmluZGV4IDRkMDI2NjgyOTQ0ZjIuLjYyN2ZjZmEyNzRmMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9iYXNlL2NvcmUuYwpAQCAtMTMwNSw2ICYjNDM7MTMwNSw1NyBAQCBzdGF0aWMgdm9pZCBkZXZpY2VfbGlua19kcm9wX21hbmFnZWQoc3RydWN0IGRldmljZV9saW5rICpsaW5rKQogCWtyZWZfcHV0KCZhbXA7bGluay0mZ3Q7a3JlZiwgX19kZXZpY2VfbGlua19kZWwpOwogfQogCiYjNDM7LyogQ2FsbGVyIG11c3QgaG9sZCB0aGUgZGV2aWNlIGxpbmtzIHdyaXRlIGxvY2suICovCiYjNDM7c3RhdGljIHZvaWQgX19kZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkoc3RydWN0IGRldmljZSAqZGV2LAomIzQzOwkJCQkJCXN0cnVjdCBsaXN0X2hlYWQgKnN5bmNfbGlzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2VfbGluayAqbGluaywgKmxuOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobGluaywgbG4sICZhbXA7ZGV2LSZndDtsaW5rcy5zdXBwbGllcnMsIGNfbm9kZSkgewomIzQzOwkJc3RydWN0IGRldmljZSAqc3VwcGxpZXI7CiYjNDM7CiYjNDM7CQlpZiAoIWRldmljZV9saW5rX3Rlc3QobGluaywgRExfRkxBR19NQU5BR0VEKSB8fAomIzQzOwkJICAgICFkZXZpY2VfbGlua190ZXN0KGxpbmssIERMX0ZMQUdfU1lOQ19TVEFURV9PTkxZKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBETF9GTEFHX1NZTkNfU1RBVEVfT05MWSBleGNsdWRlcyBhbGwgb3RoZXIgbWFuYWdlZCBsaW5rIGZsYWdzLAomIzQzOwkJICogc28gaXQgaXMgc2FmZSB0byBkcm9wIHRoZSBtYW5hZ2VkIGxpbmsgY29tcGxldGVseS4KJiM0MzsJCSAqLwomIzQzOwkJc3VwcGxpZXIgPSBsaW5rLSZndDtzdXBwbGllcjsKJiM0MzsJCWRldmljZV9saW5rX2Ryb3BfbWFuYWdlZChsaW5rKTsKJiM0MzsKJiM0MzsJCWlmIChkZWZlcl9zeW5jX3N0YXRlX2NvdW50KQomIzQzOwkJCV9fZGV2aWNlX2xpbmtzX3N1cHBsaWVyX2RlZmVyX3N5bmMoc3VwcGxpZXIpOwomIzQzOwkJZWxzZQomIzQzOwkJCV9fZGV2aWNlX2xpbmtzX3F1ZXVlX3N5bmNfc3RhdGUoc3VwcGxpZXIsIHN5bmNfbGlzdCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5IC0gRHJvcCBtYW5hZ2VkIHN5bmMtc3RhdGUtb25seSBsaW5rcwomIzQzOyAqIEBkZXY6IENvbnN1bWVyIGRldmljZSB3aG9zZSBwcm94eSBsaW5rcyBzaG91bGQgYmUgZHJvcHBlZAomIzQzOyAqCiYjNDM7ICogRnJhbWV3b3JrcyB3aGljaCBwb3B1bGF0ZSBjaGlsZCBkZXZpY2VzIGJlbG93IGEgZHJpdmVybGVzcyBkZXZpY2UgY2FuIGNhbGwKJiM0MzsgKiB0aGlzIGFmdGVyIGFkZGluZyBhbGwgb2YgdGhlIGNoaWxkcmVuLiBUaGUgY2hpbGRyZW4gd2lsbCBoYXZlIGFjcXVpcmVkIHRoZWlyCiYjNDM7ICogb3duIGxpbmtzIGJ5IHRoZW4sIHNvIHRoZSB0ZW1wb3JhcnkgbGlua3Mgd2hpY2ggb25seSBwcmV2ZW50IHN1cHBsaWVycyBmcm9tCiYjNDM7ICogcmVjZWl2aW5nIHN5bmNfc3RhdGUoKSBjYWxsYmFja3MgYXJlIG5vIGxvbmdlciBuZWVkZWQuCiYjNDM7ICoKJiM0MzsgKiBSZS1ldmFsdWF0ZSBlYWNoIGFmZmVjdGVkIHN1cHBsaWVyIGZvciBhIHN5bmNfc3RhdGUoKSBjYWxsYmFjayBhZnRlciBpdHMKJiM0MzsgKiBsaW5rIGlzIGRyb3BwZWQuCiYjNDM7ICovCiYjNDM7dm9pZCBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkoc3RydWN0IGRldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJTElTVF9IRUFEKHN5bmNfbGlzdCk7CiYjNDM7CiYjNDM7CWRldmljZV9saW5rc193cml0ZV9sb2NrKCk7CiYjNDM7CV9fZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KGRldiwgJmFtcDtzeW5jX2xpc3QpOwomIzQzOwlkZXZpY2VfbGlua3Nfd3JpdGVfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CWRldmljZV9saW5rc19mbHVzaF9zeW5jX2xpc3QoJmFtcDtzeW5jX2xpc3QsIE5VTEwpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkpOwomIzQzOwogc3RhdGljIHNzaXplX3Qgd2FpdGluZ19mb3Jfc3VwcGxpZXJfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJCSBjb25zdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkJIGNoYXIgKmJ1ZikKQEAgLTE0MTgsNiAmIzQzOzE0NjksOCBAQCB2b2lkIGRldmljZV9saW5rc19kcml2ZXJfYm91bmQoc3RydWN0IGRldmljZSAqZGV2KQogCWVsc2UKIAkJX19kZXZpY2VfbGlua3NfcXVldWVfc3luY19zdGF0ZShkZXYsICZhbXA7c3luY19saXN0KTsKIAomIzQzOwlfX2RldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seShkZXYsICZhbXA7c3luY19saXN0KTsKJiM0MzsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobGluaywgbG4sICZhbXA7ZGV2LSZndDtsaW5rcy5zdXBwbGllcnMsIGNfbm9kZSkgewogCQlzdHJ1Y3QgZGV2aWNlICpzdXBwbGllcjsKIApAQCAtMTQyNSwxNyAmIzQzOzE0NzgsMTAgQEAgdm9pZCBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIAkJCWNvbnRpbnVlOwogCiAJCXN1cHBsaWVyID0gbGluay0mZ3Q7c3VwcGxpZXI7Ci0JCWlmIChkZXZpY2VfbGlua190ZXN0KGxpbmssIERMX0ZMQUdfU1lOQ19TVEFURV9PTkxZKSkgewotCQkJLyoKLQkJCSAqIFdoZW4gRExfRkxBR19TWU5DX1NUQVRFX09OTFkgaXMgc2V0LCBpdCBtZWFucyBubwotCQkJICogb3RoZXIgRExfTUFOQUdFRF9MSU5LX0ZMQUdTIGhhdmUgYmVlbiBzZXQuIFNvLCBpdCYjMzk7cwotCQkJICogc2F2ZSB0byBkcm9wIHRoZSBtYW5hZ2VkIGxpbmsgY29tcGxldGVseS4KLQkJCSAqLwotCQkJZGV2aWNlX2xpbmtfZHJvcF9tYW5hZ2VkKGxpbmspOwotCQl9IGVsc2UgaWYgKGRldl9pc19iZXN0X2VmZm9ydChkZXYpICZhbXA7JmFtcDsKLQkJCSAgIGRldmljZV9saW5rX3Rlc3QobGluaywgRExfRkxBR19JTkZFUlJFRCkgJmFtcDsmYW1wOwotCQkJICAgbGluay0mZ3Q7c3RhdHVzICE9IERMX1NUQVRFX0NPTlNVTUVSX1BST0JFICZhbXA7JmFtcDsKLQkJCSAgICFkZXZfY2FuX21hdGNoKGxpbmstJmd0O3N1cHBsaWVyKSkgewomIzQzOwkJaWYgKGRldl9pc19iZXN0X2VmZm9ydChkZXYpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBkZXZpY2VfbGlua190ZXN0KGxpbmssIERMX0ZMQUdfSU5GRVJSRUQpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBsaW5rLSZndDtzdGF0dXMgIT0gRExfU1RBVEVfQ09OU1VNRVJfUFJPQkUgJmFtcDsmYW1wOwomIzQzOwkJICAgICFkZXZfY2FuX21hdGNoKGxpbmstJmd0O3N1cHBsaWVyKSkgewogCQkJLyoKIAkJCSAqIFdoZW4gZGV2X2lzX2Jlc3RfZWZmb3J0KCkgaXMgdHJ1ZSwgd2UgaWdub3JlIGRldmljZQogCQkJICogbGlua3MgdG8gc3VwcGxpZXJzIHRoYXQgZG9uJiMzOTt0IGhhdmUgYSBkcml2ZXIuICBJZiB0aGUKQEAgLTE0NDksMTIgJiM0MzsxNDk1LDYgQEAgdm9pZCBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIAkJCVdSSVRFX09OQ0UobGluay0mZ3Q7c3RhdHVzLCBETF9TVEFURV9BQ1RJVkUpOwogCQl9CiAKLQkJLyoKLQkJICogVGhpcyBuZWVkcyB0byBiZSBkb25lIGV2ZW4gZm9yIHRoZSBkZWxldGVkCi0JCSAqIERMX0ZMQUdfU1lOQ19TVEFURV9PTkxZIGRldmljZSBsaW5rIGluIGNhc2UgaXQgd2FzIHRoZSBsYXN0Ci0JCSAqIGRldmljZSBsaW5rIHRoYXQgd2FzIHByZXZlbnRpbmcgdGhlIHN1cHBsaWVyIGZyb20gZ2V0dGluZyBhCi0JCSAqIHN5bmNfc3RhdGUoKSBjYWxsLgotCQkgKi8KIAkJaWYgKGRlZmVyX3N5bmNfc3RhdGVfY291bnQpCiAJCQlfX2RldmljZV9saW5rc19zdXBwbGllcl9kZWZlcl9zeW5jKHN1cHBsaWVyKTsKIAkJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMgYi9kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYwppbmRleCBiOGQyOThjMDRkM2ZmLi40OWY5YjQwNjJjZjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYwpAQCAtMjI5LDcgJiM0MzsyMjksNyBAQCBpbnQgX19vZl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQlnb3RvIHVucmVnaXN0ZXI7CiAKIAlpZiAoIXNjYW5waHlzKQotCQlyZXR1cm4gMDsKJiM0MzsJCWdvdG8gZG9uZTsKIAogCS8qIGF1dG8gc2NhbiBmb3IgUEhZcyB3aXRoIGVtcHR5IHJlZyBwcm9wZXJ0eSAqLwogCWZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKG5wLCBjaGlsZCkgewpAQCAtMjYxLDYgJiM0MzsyNjEsOSBAQCBpbnQgX19vZl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQl9CiAJfQogCiYjNDM7ZG9uZToKJiM0MzsJZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KCZhbXA7bWRpby0mZ3Q7ZGV2KTsKJiM0MzsKIAlyZXR1cm4gMDsKIAogcHV0X3VucmVnaXN0ZXI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL3Byb3BlcnR5LmMgYi9kcml2ZXJzL29mL3Byb3BlcnR5LmMKaW5kZXggNzJjZjEyOTA3ZGUwMy4uZDU5YmNiMWYyOWRlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9wcm9wZXJ0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvb2YvcHJvcGVydHkuYwpAQCAtMTI3Miw2ICYjNDM7MTI3MiwyMCBAQCBzdGF0aWMgdm9pZCBvZl9saW5rX3RvX3BoYW5kbGUoc3RydWN0IGRldmljZV9ub2RlICpjb25fbnAsCiAJCXRtcF9ucCA9IG9mX2dldF9uZXh0X3BhcmVudCh0bXBfbnApOwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBBbiBFdGhlcm5ldCBQSFkgcGFja2FnZSBub2RlIGRlc2NyaWJlcyByZXNvdXJjZXMgc2hhcmVkIGJ5IGl0cyBtZW1iZXIKJiM0MzsJICogUEhZcywgYnV0IGlzIG5vdCBwb3B1bGF0ZWQgYXMgYSBzdHJ1Y3QgZGV2aWNlLiBMaW5rIGV2ZXJ5IGVuYWJsZWQKJiM0MzsJICogbWVtYmVyIFBIWSB0byB0aG9zZSBzdXBwbGllcnMgc28gZndfZGV2bGluayBjYW4gdXNlIHRoZSByZWFsIGNvbnN1bWVyCiYjNDM7CSAqIGRldmljZXMgaW5zdGVhZCBvZiBsZWF2aW5nIGEgcHJveHkgbGluayBvbiB0aGUgTURJTyBidXMgaW5kZWZpbml0ZWx5LgomIzQzOwkgKi8KJiM0MzsJaWYgKG9mX25vZGVfbmFtZV9lcShjb25fbnAsICYjMzQ7ZXRoZXJuZXQtcGh5LXBhY2thZ2UmIzM0OykpIHsKJiM0MzsJCWZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlX3Njb3BlZChjb25fbnAsIGNoaWxkKQomIzQzOwkJCWZ3bm9kZV9saW5rX2FkZChvZl9md25vZGVfaGFuZGxlKGNoaWxkKSwKJiM0MzsJCQkJCW9mX2Z3bm9kZV9oYW5kbGUoc3VwX25wKSwgZmxhZ3MpOwomIzQzOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJZndub2RlX2xpbmtfYWRkKG9mX2Z3bm9kZV9oYW5kbGUoY29uX25wKSwgb2ZfZndub2RlX2hhbmRsZShzdXBfbnApLCBmbGFncyk7CiB9CiAKQEAgLTE2MjAsNyAmIzQzOzE2MzQsOSBAQCBzdGF0aWMgaW50IG9mX2xpbmtfcHJvcGVydHkoc3RydWN0IGRldmljZV9ub2RlICpjb25fbnAsIGNvbnN0IGNoYXIgKnByb3BfbmFtZSkKIAogCQkJbWF0Y2hlZCA9IHRydWU7CiAJCQlpJiM0MzsmIzQzOzsKLQkJCW9mX2xpbmtfdG9fcGhhbmRsZShjb25fZGV2X25wLCBwaGFuZGxlLCBzLSZndDtmd2xpbmtfZmxhZ3MpOwomIzQzOwkJCWlmIChjb25fZGV2X25wKQomIzQzOwkJCQlvZl9saW5rX3RvX3BoYW5kbGUoY29uX2Rldl9ucCwgcGhhbmRsZSwKJiM0MzsJCQkJCQkgICBzLSZndDtmd2xpbmtfZmxhZ3MpOwogCQkJb2Zfbm9kZV9wdXQocGhhbmRsZSk7CiAJCX0KIAkJcyYjNDM7JiM0Mzs7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaAppbmRleCBhZWU3OWZkNmIzMmI0Li44YWZiOWYyYjBkODI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKQEAgLTEzODEsNiAmIzQzOzEzODEsNyBAQCBzdHJ1Y3QgZGV2aWNlX2xpbmsgKmRldmljZV9saW5rX2FkZChzdHJ1Y3QgZGV2aWNlICpjb25zdW1lciwKIAkJCQkgICAgc3RydWN0IGRldmljZSAqc3VwcGxpZXIsIHUzMiBmbGFncyk7CiB2b2lkIGRldmljZV9saW5rX2RlbChzdHJ1Y3QgZGV2aWNlX2xpbmsgKmxpbmspOwogdm9pZCBkZXZpY2VfbGlua19yZW1vdmUodm9pZCAqY29uc3VtZXIsIHN0cnVjdCBkZXZpY2UgKnN1cHBsaWVyKTsKJiM0Mzt2b2lkIGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogdm9pZCBkZXZpY2VfbGlua3Nfc3VwcGxpZXJfc3luY19zdGF0ZV9wYXVzZSh2b2lkKTsKIHZvaWQgZGV2aWNlX2xpbmtzX3N1cHBsaWVyX3N5bmNfc3RhdGVfcmVzdW1lKHZvaWQpOwogdm9pZCBkZXZpY2VfbGlua193YWl0X3JlbW92YWwodm9pZCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMzcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBGaXJzdCwgd2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaW50cm9kdWNlcyBhbnkgKmZ1bmN0aW9uYWwqIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHdhcnJhbnQgZnV6emluZy4gTG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWUgbW9kaWZpY2F0aW9ucyB0byBgZHJpdmVycy9iYXNlL2NvcmUuY2AsIGBkcml2ZXJzL25ldC9tZGlvL29mX21kaW8uY2AsIGBkcml2ZXJzL29mL3Byb3BlcnR5LmNgLCBhbmQgdGhlIGBpbmNsdWRlL2xpbnV4L2RldmljZS5oYCBoZWFkZXIuCgpTcGVjaWZpY2FsbHksIHdlJiMzOTt2ZSBnb3QgYSBuZXcgZnVuY3Rpb24sIGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgLCBpbnRyb2R1Y2VkIGFuZCBleHBvcnRlZCBpbiBgZGV2aWNlLmhgLCBhbmQgdXNlZCBpbiBgb2ZfbWRpby5jYCB3aXRoaW4gYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAuICBUaGF0IGFsb25lIGlzIGludGVyZXN0aW5nLCBhcyBhbnkgY2hhbmdlIHRvIHRoZSBkZXZpY2UgbGluayBoYW5kbGluZyBpcyBhIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldC4gQWRkaXRpb25hbGx5LCB0aGVyZSBhcmUgc29tZSBjaGFuZ2VzIGluIGBvZl9saW5rX3RvX3BoYW5kbGVgIHJlbGF0ZWQgdG8gJiMzNDtldGhlcm5ldC1waHktcGFja2FnZSYjMzQ7IG5vZGVzLiAgVGhpcyBzb3VuZHMgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBkZXZpY2UgY29yZSBhbmQgaG93IHRoZSBzeXN0ZW0gcGFyc2VzIE9GIHByb3BlcnRpZXMuCgpUaGUga2V5IHF1ZXN0aW9uIGlzLCBhcmUgdGhlc2UgY2hhbmdlcyByZWFjaGFibGUgd2l0aGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VPyAgQ29uc2lkZXJpbmcgdGhhdCB0aGUgT0YgcHJvcGVydHkgcGFyc2luZyBhbmQgZGV2aWNlIGxpbmtzIGFyZSBjb3JlIGtlcm5lbCBmZWF0dXJlcywgSSYjMzk7ZCBzYXkgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgJiMzNDt5ZXMmIzM0Oy4gIGBvZl9tZGlvLmNgIGlzIGdvaW5nIHRvIGJlIHJlbGV2YW50IGZvciBNRElPIGJ1c2VzIGRlZmluZWQgaW4gdGhlIGRldmljZSB0cmVlLCBhbmQgZGV2aWNlIGxpbmsgY2hhbmdlcyBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBjb25zaWRlcmVkLgoKU28sIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgbmVlZCBmb2N1cyBmb3IgZnV6emluZy4gIEJhc2VkIG9uIHRoZSBwYXRjaCwgdGhlc2UgYXJlIHRoZSBwcmltYXJ5IGNhbmRpZGF0ZXM6CgoqICAgYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAgLSB0aGlzIGlzIHRoZSBuZXcgb25lLCBhbmQgaXRzIGluY2x1c2lvbiBpbiBkZXZpY2UgbGluayBoYW5kbGluZyBtYWtlcyBpdCBhIGhpZ2gtcHJpb3JpdHkuCiogICBgX19vZl9tZGlvYnVzX3JlZ2lzdGVyYCAtIHNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGluZyBgZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5YCwgaXQmIzM5O3MgYW5vdGhlciBpbXBvcnRhbnQgZnVuY3Rpb24gdGhhdCBuZWVkcyBpbnZlc3RpZ2F0aW9uLgoqICAgYG9mX2xpbmtfdG9fcGhhbmRsZWAgLSB0aGlzIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBJdCBtaWdodCBiZSB3b3J0aHdoaWxlIHRvIGV4YW1pbmUgdGhlIGNhbGxlcnMgZm9yIHRoaXMgYXMgd2VsbCwgcGVyaGFwcyBgb2ZfbGlua19wcm9wZXJ0eWAgb3IgYG9mX2Z3bm9kZV9hZGRfbGlua3NgLCB0aG91Z2ggYG9mX2xpbmtfdG9fcGhhbmRsZWAgaXMgbGlrZWx5IHRoZSBjb3JlIGZvY3VzLgoKTm93LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBkcml2ZXJzL29mL3Byb3BlcnR5LmNgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvZl9saW5rX3RvX3BoYW5kbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL29mL3Byb3BlcnR5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTEyNTI9b2ZfZndub2RlX2RldmljZV9nZXRfbWF0Y2hfZGF0YShjb25zdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLFxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xMjU3LVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjEyNTg6c3RhdGljIHZvaWQgb2ZfbGlua190b19waGFuZGxlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29uX25wLFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTEyNTktXHRcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpzdXBfbnAsXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTE2MTc9c3RhdGljIGludCBvZl9saW5rX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29uX25wLCBjb25zdCBjaGFyICpwcm9wX25hbWUpXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2MzctXHRcdFx0aWYgKGNvbl9kZXZfbnApXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MTYzODpcdFx0XHRcdG9mX2xpbmtfdG9fcGhhbmRsZShjb25fZGV2X25wLCBwaGFuZGxlLFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2MzktXHRcdFx0XHRcdFx0ICAgcy1cdTAwM2Vmd2xpbmtfZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzNTEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyB5b3VyIHN1bW1hcnk6CgoqKlN0YXRpYyBQcm9wZXJ0eSBJbnF1aXJ5KioKCkhtbSwgaXMgYG9mX2xpbmtfcHJvcGVydHlgIGFsc28gYSBzdGF0aWMgcHJvcGVydHk/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2suIEl0JiMzOTtzIGltcG9ydGFudCB0byBiZSBhY2N1cmF0ZSB3aXRoIHRoZXNlIGFzc3VtcHRpb25zLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHByb3BlcnRpZXMgdGhhdCBwb3RlbnRpYWxseSBpbXBhY3Qgb3RoZXIgYXJlYXMgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvZl9saW5rX3Byb3BlcnR5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9vZi9wcm9wZXJ0eS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvb2YvcHJvcGVydHkuYz0xNTU1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwcGxpZXJfYmluZGluZ3Mgb2Zfc3VwcGxpZXJfYmluZGluZ3NbXSA9IHtcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTU5OC0vKipcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoxNTk5OiAqIG9mX2xpbmtfcHJvcGVydHkgLSBDcmVhdGUgZGV2aWNlIGxpbmtzIHRvIHN1cHBsaWVycyBsaXN0ZWQgaW4gYSBwcm9wZXJ0eVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2MDAtICogQGNvbl9ucDogVGhlIGNvbnN1bWVyIGRldmljZSB0cmVlIG5vZGUgd2hpY2ggY29udGFpbnMgdGhlIHByb3BlcnR5XG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2MTItICogQW55IGZhaWxlZCBhdHRlbXB0IHRvIGNyZWF0ZSBhIGZ3bm9kZSBsaW5rIHdpbGwgTk9UIHJlc3VsdCBpbiBhbiBpbW1lZGlhdGVcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoxNjEzOiAqIHJldHVybi4gIG9mX2xpbmtfcHJvcGVydHkoKSBtdXN0IGNyZWF0ZSBsaW5rcyB0byBhbGwgdGhlIGF2YWlsYWJsZSBzdXBwbGllclxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2MTQtICogZGV2aWNlIHRyZWUgbm9kZXMgZXZlbiB3aGVuIGF0dGVtcHRzIHRvIGNyZWF0ZSBhIGxpbmsgdG8gb25lIG9yIG1vcmVcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTYxNi0gKi9cbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoxNjE3OnN0YXRpYyBpbnQgb2ZfbGlua19wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvbl9ucCwgY29uc3QgY2hhciAqcHJvcF9uYW1lKVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2MTgte1xuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYz0xNjg2PXN0YXRpYyBpbnQgb2ZfZndub2RlX2FkZF9saW5rcyhzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNjk3LVx0Zm9yX2VhY2hfcHJvcGVydHlfb2Zfbm9kZShjb25fbnAsIHApXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MTY5ODpcdFx0b2ZfbGlua19wcm9wZXJ0eShjb25fbnAsIHAtXHUwMDNlbmFtZSk7XG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTY5OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODYxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDoKCioqU3RhdGljIEZ1bmN0aW9uIENvbnVuZHJ1bSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG9mX2Z3bm9kZV9hZGRfbGlua3NgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXM6IGlzIHRoaXMgZnVuY3Rpb24gZGVjbGFyZWQgYXMgYHN0YXRpY2A/IFRoYXQmIzM5O3MgdGhlIGtleSBwb2ludC4gS25vd2luZyBpZiBpdCYjMzk7cyBzdGF0aWMgY2hhbmdlcyAqZXZlcnl0aGluZyogYWJvdXQgaG93IEkgdW5kZXJzdGFuZCBpdHMgcHVycG9zZSwgc2NvcGUsIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBJZiBpdCAqaXMqIHN0YXRpYywgdGhlbiBpdCYjMzk7cyBsaW1pdGVkIGluIGl0cyB2aXNpYmlsaXR5IGFuZCB1c2FnZTsgaXQmIzM5O3Mgc2NvcGVkIHRvIHRoZSBjdXJyZW50IHRyYW5zbGF0aW9uIHVuaXQsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHNvbWV0aGluZyBzcGVjaWZpYyBhYm91dCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSByZXN0IG9mIHRoZSBjb2RlLiBJZiBpdCAqaXNuJiMzOTt0KiBzdGF0aWMsIHRoZW4gaXQgaGFzIGV4dGVybmFsIGxpbmthZ2UsIG1lYW5pbmcgYW55IG90aGVyIHBhcnQgb2YgdGhlIHByb2plY3QgY291bGQgY2FsbCBpdCwgZHJhbWF0aWNhbGx5IGluY3JlYXNpbmcgdGhlIGNvbXBsZXhpdHkgSSBuZWVkIHRvIGNvbnNpZGVyIHdoZW4gSSYjMzk7bSBsb29raW5nIGF0IHdoYXQgaXQgZG9lcywgYW5kIGhvdyBpdCBpcyB1c2VkLCBhbmQgd2hhdCBlZmZlY3QgaXRzIGNoYW5nZXMgd2lsbCBoYXZlLiBUaGlzIHdpbGwgaW5mbHVlbmNlIGlmIEkgbmVlZCB0byB3b3JyeSBhYm91dCBnbG9iYWwgbmFtZXNwYWNlIHBvbGx1dGlvbiwgcmUtZW50cmFudCBjYXBhYmlsaXRpZXMsIGFuZCBjb25jdXJyZW5jeSBjb25zaWRlcmF0aW9ucywgZm9yIGV4YW1wbGUuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBrbm93IHRoaXMgYmVmb3JlIEkgY2FuIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2ZfZndub2RlX2FkZF9saW5rcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvb2YvcHJvcGVydHkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL29mL3Byb3BlcnR5LmM9MTY3MD1zdGF0aWMgYm9vbCBvZl9pc19md25vZGVfYWRkX2xpbmtzX3N1cHBvcnRlZCh2b2lkKVxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNjg1LVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjE2ODY6c3RhdGljIGludCBvZl9md25vZGVfYWRkX2xpbmtzKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTY4Ny17XG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTE3MDM9Y29uc3Qgc3RydWN0IGZ3bm9kZV9vcGVyYXRpb25zIG9mX2Z3bm9kZV9vcHMgPSB7XG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE3MjUtXHQuaXJxX2dldCA9IG9mX2Z3bm9kZV9pcnFfZ2V0LFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjE3MjY6XHQuYWRkX2xpbmtzID0gb2ZfZndub2RlX2FkZF9saW5rcyxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNzI3LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM3OQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGJyb2tlbiBkb3duIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdCB0aHJvdWdoOgoKKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIENhbGwgU3RhY2sgYW5kIEtleSBSZWdpc3RyYXRpb25zKioKCk9rYXksIGxldCBtZSBwaWVjZSB0aGlzIHRvZ2V0aGVyLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGBvZl9md25vZGVfYWRkX2xpbmtzYCBpcyBpbnZva2VkIHRocm91Z2ggdGhlIGBmd25vZGVfb3BlcmF0aW9uc2AgaW50ZXJmYWNlLCB3aGljaCBpcyB0aGUgZXhwZWN0ZWQgcGF0dGVybiBmb3IgZGV2aWNlIHRyZWUgaW50ZXJhY3Rpb24uIFRoZSBjcnVjaWFsIGZ1bmN0aW9uIGJlaW5nIGludGVncmF0ZWQgaGVyZSBpcyBgZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5YC4gSW50ZXJlc3RpbmcsIHNvIHRoaXMgbXVzdCBiZSByZWxhdGVkIHRvIGxpbmsgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsbHkgZHJvcHBpbmcgc3luY2hyb25pemF0aW9uIHN0YXRlcywgcG9zc2libHkgZHVyaW5nIGRldmljZSBkaXNjb3Zlcnkgb3IgcmVtb3ZhbC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gd2hhdCBzcGVjaWZpYyBzeW5jaHJvbml6YXRpb24gc3RhdGUgaXQmIzM5O3MgcmVmZXJyaW5nIHRvLiBJdCYjMzk7cyBwcm9iYWJseSB3b3J0aCBpbnZlc3RpZ2F0aW5nIHdoYXQgY2FsbHMgYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAsIHNvIHRoYXQgSSBoYXZlIHRoZSBmdWxsIGNvbnRleHQuCgpGdXJ0aGVybW9yZSwgSSBub3RlIHRoZSBwcmVzZW5jZSBvZiBgX19vZl9tZGlvYnVzX3JlZ2lzdGVyYCB3aXRoaW4gYGRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBkZXZpY2UgdHJlZS1iYXNlZCBNRElPIGJ1cyByZWdpc3RyYXRpb24uIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2UgaW4gdGhlc2Ugc3lzdGVtcy4gVGhlIGZhY3QgdGhhdCBpdHMgdW5kZXJzY29yZS1wcmVmaXhlZCBpbXBsaWVzIGl0cyBhbiBpbnRlcm5hbCBBUEkgc28gdGhlIEFQSSB0aGF0IGludm9rZXMgaXQgaXMgbGlrZWx5IHRoZSBtb3JlIHJlbGV2YW50IG9uZSBpbiB0aGlzIGNhc2UsIHBhcnRpY3VsYXJseSBzaW5jZSB0aGlzIGNhbGwgaXMgcHJvYmFibHkgaW52b2x2ZWQgaW4gaW5pdGlhbGl6aW5nIHRoZSBoYXJkd2FyZSB0byBjb25uZWN0IHRvIHRoZSBuZXR3b3JrLgoKTm93LCBob3cgZG9lcyBgX19vZl9tZGlvYnVzX3JlZ2lzdGVyYCBmaXQgaW50byB0aGUgZ3JhbmQgc2NoZW1lIG9mIGBvZl9md25vZGVfYWRkX2xpbmtzYCBhbmQgYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWA/IE15IGludHVpdGlvbiBzYXlzIHRoYXQgdGhlIE1ESU8gYnVzIHJlZ2lzdHJhdGlvbiBsaWtlbHkgZXN0YWJsaXNoZXMgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgaW5mcmFzdHJ1Y3R1cmUsIGFuZCB0aGUgbGluayBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBhcmUgdGhlbiB1c2VkIHRvIG1hbmFnZSB0aGUgZGV2aWNlIGNvbm5lY3Rpb25zIG9uIHRoYXQgYnVzLiBJIHNob3VsZCBrZWVwIGFuIGV5ZSBvbiBob3cgdGhlc2UgYXJlIGNvbm5lY3RlZCBpbiBwcmFjdGljZSB0byBiZSBjZXJ0YWluLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVzZSBtb2R1bGVzLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSBkZXZpY2UgdHJlZSBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgTURJTyBhbmQgcG90ZW50aWFsbHkgUEhZIGRldmljZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fb2ZfbWRpb2J1c19yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jPTEzOT1zdGF0aWMgaW50IF9fb2ZfbWRpb2J1c19wYXJzZV9waHlzKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuLS1cbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTE4Ni0vKipcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjE4NzogKiBfX29mX21kaW9idXNfcmVnaXN0ZXIgLSBSZWdpc3RlciBtaWlfYnVzIGFuZCBjcmVhdGUgUEhZcyBmcm9tIHRoZSBkZXZpY2UgdHJlZVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMTg4LSAqIEBtZGlvOiBwb2ludGVyIHRvIG1paV9idXMgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMTk0LSAqL1xuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6MTk1OmludCBfX29mX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0xOTYtXHRcdFx0ICBzdHJ1Y3QgbW9kdWxlICpvd25lcilcbi0tXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0yNzQtfVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6Mjc1OkVYUE9SVF9TWU1CT0woX19vZl9tZGlvYnVzX3JlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTI3Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIxMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGlzOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgRHJpdmVyIFJlZ2lzdHJhdGlvbiBhbmQgTGluayBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIHNvbWUga2V5IGZ1bmN0aW9ucyBiZWluZyBleHBvc2VkIGhlcmUuIEZpcnN0LCBgX19vZl9tZGlvYnVzX3JlZ2lzdGVyYCBpcyBiZWluZyBleHBvcnRlZC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIG1vZHVsZSBpcyBoYW5kbGluZyB0aGUgcmVnaXN0cmF0aW9uIG9mIGFuIE1ESU8gYnVzLCBsaWtlbHkgZm9yIGNvbW11bmljYXRpb24gd2l0aCBQSFlzIG9yIG90aGVyIE1ESU8tY29ubmVjdGVkIGRldmljZXMuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB3aGVuIEkmIzM5O20gZGVidWdnaW5nIE1ESU8tcmVsYXRlZCBkcml2ZXIgaW50ZXJhY3Rpb25zLiBUaGVuLCBpdCBsb29rcyBsaWtlIGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgIGlzIGFsc28gZXhwb3J0ZWQuIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIGEgdGFyZ2V0ZWQgd2F5IHRvIG1hbmFnZSB0aGUgc3luY2hyb25pemF0aW9uIHN0YXRlIG9mIGRldmljZSBsaW5rcywgcG90ZW50aWFsbHkgZm9yIHNpdHVhdGlvbnMgd2hlcmUgYSBmdWxsIHJlc2V0IG9yIHJlLWVudW1lcmF0aW9uIGlzbiYjMzk7dCBuZWVkZWQuIEZpbmFsbHksIEkgc2VlIHRoYXQgYGRldmljZV9saW5rc19kcml2ZXJfYm91bmRgIGhhcyBiZWVuIG1vZGlmaWVkIGFuZCBleHBvcnRlZC4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IGluZGljYXRvci4gR2l2ZW4gdGhlIG5hbWUsIHRoaXMgZnVuY3Rpb24gcHJvYmFibHkgZGVhbHMgd2l0aCB0aGUgYmluZGluZyBwcm9jZXNzIGJldHdlZW4gYSBkcml2ZXIgYW5kIGEgZGV2aWNlIHRocm91Z2ggZGV2aWNlIGxpbmtzLiBUaGUgbW9kaWZpY2F0aW9uIGNvdWxkIGJlIGFueXRoaW5nLCBidXQgaXQgc3VnZ2VzdHMgZW5oYW5jZW1lbnRzIHRvIHRoZSBiaW5kaW5nIGxvZ2ljLCBwb3RlbnRpYWxseSBoYW5kbGluZyBkZXBlbmRlbmN5IG1hbmFnZW1lbnQsIGVycm9yIGhhbmRsaW5nIGR1cmluZyBiaW5kaW5nLCBvciBldmVuIG9wdGltaXphdGlvbnMgaW4gaG93IGxpbmtzIGFyZSBlc3RhYmxpc2hlZC4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2sg4oCTIGl0JiMzOTtzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkZXZpY2UgbGlua3MgbWVjaGFuaXNtIHdvcmtzIHdpdGhpbiB0aGUgbmV3IG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL2NvcmUuYz0xMzg3PXZvaWQgZGV2aWNlX2xpbmtzX2ZvcmNlX2JpbmQoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvYmFzZS9jb3JlLmMtMTQwOC0vKipcbmRyaXZlcnMvYmFzZS9jb3JlLmM6MTQwOTogKiBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kIC0gVXBkYXRlIGRldmljZSBsaW5rcyBhZnRlciBwcm9iaW5nIGl0cyBkcml2ZXIuXG5kcml2ZXJzL2Jhc2UvY29yZS5jLTE0MTAtICogQGRldjogRGV2aWNlIHRvIHVwZGF0ZSB0aGUgbGlua3MgZm9yLlxuLS1cbmRyaXZlcnMvYmFzZS9jb3JlLmMtMTQxOC0gKi9cbmRyaXZlcnMvYmFzZS9jb3JlLmM6MTQxOTp2b2lkIGRldmljZV9saW5rc19kcml2ZXJfYm91bmQoc3RydWN0IGRldmljZSAqZGV2KVxuZHJpdmVycy9iYXNlL2NvcmUuYy0xNDIwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzczMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXkgU3ltYm9scyBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIHN5bWJvbHM6IGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgLCBgX19vZl9tZGlvYnVzX3JlZ2lzdGVyYCwgYW5kIGBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kYC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHRoZXNlIGFyZSBjZW50cmFsIHRvIHNvbWV0aGluZywgcHJvYmFibHkgcmVsYXRlZCB0byBkZXZpY2UgbGlua2luZywgTURJTyBidXMgcmVnaXN0cmF0aW9uLCBhbmQgZHJpdmVyIGJpbmRpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXNlIHJlcXVpcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KClNwZWNpZmljYWxseSwgSSByZW1lbWJlciB0aGF0IGBkcml2ZXJzL25ldC9tZGlvL29mX21kaW8uY2AgaGFzIGEgZGVwZW5kZW5jeSBvbiBgQ09ORklHX09GX01ESU9gLiBJIHNob3VsZCBwcm9iYWJseSBjb25maXJtIHRoYXQgaW4gYGRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ2AuIEl0JiMzOTtzIGxpa2VseSB0aGF0IHRoZXNlIHN5bWJvbHMgSSYjMzk7bSBsb29raW5nIGF0IGFyZSB0aWVkIHRvIGEgc2ltaWxhciBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgaXMgYWNjdXJhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPRl9NRElPJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz05PWNvbmZpZyBGV05PREVfTURJT1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xMy1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxNDpjb25maWcgT0ZfTURJT1xuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE1LVx0ZGVmX3RyaXN0YXRlIE9GXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxMTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zLCBzcGVjaWZpY2FsbHkgYE9GX01ESU9gLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgT0ZfTURJT2AgaXMgZGVmaW5lZCBhcyBhIGBkZWZfdHJpc3RhdGVgIG9mIGBPRmAuIFRoYXQgbWVhbnMgaXRzIHN0YXRlIChlbmFibGVkLCBkaXNhYmxlZCwgb3IgbW9kdWxlKSBkZWZhdWx0cyB0byB0aGUgc3RhdGUgb2YgYE9GYC4gTWFrZXMgc2Vuc2UuCgpJIGtub3cgYGRyaXZlcnMvYmFzZS9jb3JlLmNgIGlzIGFsd2F5cyBjb21waWxlZCwgd2hpY2ggaXMgcHJvYmFibHkgYSBiYXNlIGNvbXBvbmVudC4gQW5kIEkgc2VlIHRoYXQgYGRyaXZlcnMvb2YvcHJvcGVydHkuY2AgZGVwZW5kcyBvbiBgQ09ORklHX09GYC4gU28gd2UmIzM5O3JlIHJlYWxseSBkZWFsaW5nIHdpdGggYE9GYCBhbmQgYE9GX01ESU9gIGFzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb25zIGluIHRoaXMgYXJlYS4gQWN0dWFsbHksIHdhaXQgYSBtaW51dGUsIHNpbmNlIGBPRl9NRElPYCBpcyBkaXJlY3RseSB0aWVkIHRvIGBPRmAsIGl0JiMzOTtzIGVzc2VudGlhbGx5IGVuYWJsZWQgaWYgYE9GYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBhbmQgdGhlIE1ESU8gZHJpdmVyIGl0c2VsZi4gVGhlIGtleSBpcyBnb2luZyB0byBiZSBmaWd1cmluZyBvdXQgd2hldGhlciBgTURJT19ERVZJQ0VgIG9yIGBNRElPX0JVU2AgYXJlIHJlcXVpcmVkIGFuZCBob3cgdGhleSBpbnRlcmFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE9GX01ESU8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9LY29uZmlnPTk9Y29uZmlnIEZXTk9ERV9NRElPXG4tLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEzLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjE0OmNvbmZpZyBPRl9NRElPXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTUtXHRkZWZfdHJpc3RhdGUgT0ZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU4OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBNRElPIENvbXBpbGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgb2ZfbWRpby5vYCBpcyBiZWluZyBidWlsdC4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIGFsd2F5cywgaXMgdGhlIGBNYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBjb21waWxhdGlvbiBpbnN0cnVjdGlvbnMgZm9yIHRoaXMgcGFydCBvZiB0aGUgbmV0d29ya2luZyBkcml2ZXIgYXJlIGRlZmluZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgbmF2aWdhdGUgdG8gYGRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGVgIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gaXMgaGFuZGxpbmcgdGhhdCBwYXJ0aWN1bGFyIG9iamVjdCBmaWxlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSByZWxldmFudCBmbGFncywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IG90aGVyIGJ1aWxkLXJlbGF0ZWQgZGV0YWlscyBpbiB0aGVyZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvZl9tZGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlPTU9b2JqLSQoQ09ORklHX0ZXTk9ERV9NRElPKVx0JiM0Mzs9IGZ3bm9kZV9tZGlvLm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6NjpvYmotJChDT05GSUdfT0ZfTURJTylcdFx0JiM0Mzs9IG9mX21kaW8ub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZS03LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODc5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBlbWJlZGRlZCBzeXN0ZW1zIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgTURJTyBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKgoKQWxyaWdodCwgdGhlIGJ1aWxkIHN5c3RlbSYjMzk7cyBhc2tpbmcgZm9yIGBDT05GSUdfT0ZfTURJT2AsIHJpZ2h0PyBNeSBmaXJzdCBpbnN0aW5jdCBpcywgJiMzNDtZZXMsIG9mIGNvdXJzZSwgdGhhdCYjMzk7cyB3aGF0IHdlIG5lZWQmIzM0Oy4gVGhlbiBJIHBhdXNlLCBiZWNhdXNlIEkga25vdyB0aGVzZSB0aGluZ3MgYXJlIHJhcmVseSB0aGF0IHNpbXBsZS4gQWgsIHJpZ2h0LCBgT0ZfTURJT2AgaXRzZWxmIGlzIGRlZmluZWQgYXMgYSBgZGVmX3RyaXN0YXRlIE9GYC4gVGhhdCB1c3VhbGx5IG1lYW5zIGl0IGhhcyBkZXBlbmRlbmNpZXMuIE9rYXksIGEgcXVpY2sgY2hlY2sgb2YgdGhlIGRvY3VtZW50YXRpb24uIEJ1dCBoZXJlLCBsZXQmIzM5O3MgbG9vayBhdCBgZHJpdmVycy9uZXQvbWRpby9LY29uZmlnYCB0byBjb25maXJtIHdoYXQgSSByZW1lbWJlci4gSSBrbm93IHRoaXMgaXMgZ29pbmcgdG8gZGVwZW5kIG9uIGVpdGhlciBgUEhZTElCYCBvciBgTURJT19ERVZJQ0VgLiBHb3R0YSBtYWtlIHN1cmUgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc2VsZWN0ZWQgdG9vLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIE1ESU8gTGF5ZXIgQ29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51IFwmIzM0O01ESU8gY29udHJvbGxlciBkcml2ZXJzXCYjMzQ7XG4gICA3Olx0XHRkZXBlbmRzIG9uIFBIWUxJQlxuICAgODpcdFxuICAgOTpcdGNvbmZpZyBGV05PREVfTURJT1xuICAxMDpcdFx0ZGVmX3RyaXN0YXRlIChBQ1BJIHx8IE9GKSB8fCBDT01QSUxFX1RFU1RcbiAgMTE6XHRcdGhlbHBcbiAgMTI6XHRcdCAgRldOT0RFIE1ESU8gYnVzIChFdGhlcm5ldCBQSFkpIGFjY2Vzc29yc1xuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBPRl9NRElPXG4gIDE1Olx0XHRkZWZfdHJpc3RhdGUgT0ZcbiAgMTY6XHRcdHNlbGVjdCBGSVhFRF9QSFlcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgT3BlbkZpcm13YXJlIE1ESU8gYnVzIChFdGhlcm5ldCBQSFkpIGFjY2Vzc29yc1xuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBBQ1BJX01ESU9cbiAgMjE6XHRcdGRlZl90cmlzdGF0ZSBBQ1BJXG4gIDIyOlx0XHRoZWxwXG4gIDIzOlx0XHQgIEFDUEkgTURJTyBidXMgKEV0aGVybmV0IFBIWSkgYWNjZXNzb3JzXG4gIDI0Olx0XG4gIDI1Olx0Y29uZmlnIE1ESU9fQUlST0hBXG4gIDI2Olx0XHR0cmlzdGF0ZSBcJiMzNDtBaXJvaGEgQU43NTgzIE1ESU8gYnVzIGNvbnRyb2xsZXJcJiMzNDtcbiAgMjc6XHRcdGRlcGVuZHMgb24gQVJDSF9BSVJPSEEgfHwgQ09NUElMRV9URVNUXG4gIDI4Olx0XHRoZWxwXG4gIDI5Olx0XHQgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHJpdmVyIGZvciB0aGUgTURJTyBidXNzZXMgZm91bmQgaW4gdGhlXG4gIDMwOlx0XHQgIEFpcm9oYSBBTjc1ODMgU29DJiMzOTtzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTMwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNRElPIENvbnRyb2xsZXIgRHJpdmVyIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBNRElPIGNvbnRyb2xsZXIgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIFJpZ2h0LCBpdCYjMzk7cyBuZXN0ZWQgd2l0aGluIHRoZSAmIzM0O01ESU8gY29udHJvbGxlciBkcml2ZXJzJiMzNDsgbWVudSwgd2hpY2ggaXRzZWxmICpkZXBlbmRzIG9uIFBIWUxJQiouIFNvLCBpbmhlcmVudGx5LCBJIG5lZWQgUEhZTElCIGVuYWJsZWQgZm9yIHRoaXMgZHJpdmVyLCBhbmQgT0YsIHNpbmNlIE9GIGlzIGEgcHJlLXJlcXVpc2l0ZSBmb3IgUEhZTElCLiAKCkFscmlnaHQsIGxldCYjMzk7cyBjb25maXJtIHRoaXMgUEhZTElCIGRlcGVuZGVuY3kuIFl1cCwgbG9va3MgbGlrZSBpdCYjMzk7cyB0aGUgZW5jb21wYXNzaW5nIG1lbnUgdGhhdCBkaWN0YXRlcyB0aGUgcmVxdWlyZW1lbnQuIEhhbmcgb24uLi4gYW5kIHRoZSAqbWVudSogZGVwZW5kZW5jeSBhZmZlY3RzIGV2ZXJ5dGhpbmcgKndpdGhpbiogaXQuIFNvLCB0aGF0IG1lYW5zIGJvdGggYENPTkZJR19QSFlMSUJgICphbmQqIGBDT05GSUdfT0ZgIGFyZSBkZWZpbml0ZWx5IHJlcXVpcmVkIGZvciBhbnl0aGluZyB1bmRlciB0aGF0IG1lbnUsIGluY2x1ZGluZyB0aGlzIE1ESU8gY29udHJvbGxlciBkcml2ZXIuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSYjMzk7bGwgZ28gY2hlY2sgYGRyaXZlcnMvb2YvcHJvcGVydHkuY2AgdG8gc2VlIGhvdyBpdHMgYnVpbGQgaXMgY29uZGl0aW9uZWQuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGV4cGVjdGVkIGBDT05GSUdfT0ZgIGlzIGFjdHVhbGx5IGNvbXBpbGluZyB0aGUgcmVsZXZhbnQgY29kZS4gR29vZCBwcmFjdGljZSB0byBkb3VibGUgY2hlY2sgdGhhdCBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9wZXJ0eS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9vZi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL29mL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy9vZi9NYWtlZmlsZToyOm9iai15ID0gYmFzZS5vIGNwdS5vIGRldmljZS5vIG1vZHVsZS5vIHBsYXRmb3JtLm8gcHJvcGVydHkub1xuZHJpdmVycy9vZi9NYWtlZmlsZS0zLW9iai0kKENPTkZJR19PRl9LT0JKKSAmIzQzOz0ga29iai5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5ODMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0ODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIGZ1enphYmxlLiBGaXJzdCwgSSBjb25maXJtZWQgdGhhdCBgZHJpdmVycy9vZi9wcm9wZXJ0eS5jYCBnZXRzIGNvbXBpbGVkIGlmIGBDT05GSUdfT0ZgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0LiBJIGFsc28gc2VlIHRoYXQgYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAgaXMgaW4gYGRyaXZlcnMvYmFzZS9jb3JlLmNgLCB3aGljaCBpcyBhbHdheXMgY29tcGlsZWQuIFRoYXQgaGVscHMgbmFycm93IHRoaW5ncyBkb3duLgoKVGhlIGltcG9ydGFudCBjb25maWdzIHNlZW0gdG8gYmUgYE9GYCwgYFBIWUxJQmAsIGFuZCBgT0ZfTURJT2AsIGFsdGhvdWdoIGBPRmAgYW5kIGBQSFlMSUJgIGFsb25lIHNob3VsZCBiZSBzdWZmaWNpZW50LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBidWlsZGluZyB0aGUgZnV6emluZyBlbnZpcm9ubWVudC4KClRoZSBwYXRjaCBpdHNlbGYgbW9kaWZpZXMgYGRyaXZlcnMvYmFzZS9jb3JlLmNgICh3aGljaCBpcyBjb3JlIGtlcm5lbCBsb2dpYyEpIGFuZCBhZGRzIGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgLCBhbmQgbW9kaWZpZXMgYGRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jYC4gVGhlIGNoYW5nZXMgdG8gYG9mX2xpbmtfdG9fcGhhbmRsZWAgdG8gaGFuZGxlICYjMzQ7ZXRoZXJuZXQtcGh5LXBhY2thZ2UmIzM0OyBub2RlcyBhcmUgYWxzbyBpbnRlcmVzdGluZy4gVGhpcyBsb29rcyBsaWtlIGl0IHRvdWNoZXMgY29yZSBkZXZpY2UgbGluayBsb2dpYyBhbmQgT0YgcHJvcGVydHkgcGFyc2luZywgc28gdGhpcyBpcyB3b3J0aCBmdXp6aW5nLgoKTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAsIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgLCBhbmQgYGRldmljZV9saW5rc19kcml2ZXJfYm91bmRgLgoKSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kYCDigJMgaXQmIzM5O3MgY2FsbGVkIGR1cmluZyBkcml2ZXIgYmluZGluZyBhbmQgZGV2aWNlIHByb2JlLCBub3QgYSBzdXBlciBob3QgcGF0aCwgYnV0IGRlZmluaXRlbHkgaW1wb3J0YW50IGR1cmluZyBib290LiBJdCYjMzk7cyBzYWZlIHRvIGluY2x1ZGUuCgpJIGFsc28gbmVlZCB0byBjaGVjayBmb3IgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLiBgX19kZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgIGlzIHN0YXRpYywgc28gSSBjYW4ganVzdCB1c2UgYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAuIFNpbWlsYXJseSwgYG9mX2xpbmtfdG9fcGhhbmRsZWAgaXMgc3RhdGljLCBzbyBJIGNhbiYjMzk7dCB1c2UgaXQgZGlyZWN0bHkuIGBvZl9saW5rX3Byb3BlcnR5YCBhbmQgYG9mX2Z3bm9kZV9hZGRfbGlua3NgIGFyZSBhbHNvIHN0YXRpYy4gQXJlIHRoZXJlIGFueSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIGluIGBkcml2ZXJzL29mL3Byb3BlcnR5LmNgIHRoYXQgY2FsbCBgb2ZfbGlua19wcm9wZXJ0eWA/IFRoYXQgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGV4cGxvcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29mX2xpbmtfcHJvcGVydHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL29mL3Byb3BlcnR5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTE1NTU9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBwbGllcl9iaW5kaW5ncyBvZl9zdXBwbGllcl9iaW5kaW5nc1tdID0ge1xuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNTk4LS8qKlxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjE1OTk6ICogb2ZfbGlua19wcm9wZXJ0eSAtIENyZWF0ZSBkZXZpY2UgbGlua3MgdG8gc3VwcGxpZXJzIGxpc3RlZCBpbiBhIHByb3BlcnR5XG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTYwMC0gKiBAY29uX25wOiBUaGUgY29uc3VtZXIgZGV2aWNlIHRyZWUgbm9kZSB3aGljaCBjb250YWlucyB0aGUgcHJvcGVydHlcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTYxMi0gKiBBbnkgZmFpbGVkIGF0dGVtcHQgdG8gY3JlYXRlIGEgZndub2RlIGxpbmsgd2lsbCBOT1QgcmVzdWx0IGluIGFuIGltbWVkaWF0ZVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjE2MTM6ICogcmV0dXJuLiAgb2ZfbGlua19wcm9wZXJ0eSgpIG11c3QgY3JlYXRlIGxpbmtzIHRvIGFsbCB0aGUgYXZhaWxhYmxlIHN1cHBsaWVyXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTYxNC0gKiBkZXZpY2UgdHJlZSBub2RlcyBldmVuIHdoZW4gYXR0ZW1wdHMgdG8gY3JlYXRlIGEgbGluayB0byBvbmUgb3IgbW9yZVxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNjE2LSAqL1xuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjE2MTc6c3RhdGljIGludCBvZl9saW5rX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29uX25wLCBjb25zdCBjaGFyICpwcm9wX25hbWUpXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTYxOC17XG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTE2ODY9c3RhdGljIGludCBvZl9md25vZGVfYWRkX2xpbmtzKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2OTctXHRmb3JfZWFjaF9wcm9wZXJ0eV9vZl9ub2RlKGNvbl9ucCwgcClcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoxNjk4Olx0XHRvZl9saW5rX3Byb3BlcnR5KGNvbl9ucCwgcC1cdTAwM2VuYW1lKTtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNjk5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM2OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgb2ZfZndub2RlX2FkZF9saW5rc2AgYW5kIGl0cyBQbGFjZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYG9mX2Z3bm9kZV9hZGRfbGlua3NgIGZ1bmN0aW9uLiBJdCYjMzk7cyBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggbWVhbnMgaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhlIGN1cnJlbnQgZmlsZS4gQnV0IHRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHdoZXJlIGl0JiMzOTtzICp1c2VkKi4gSXQmIzM5O3MgYXNzaWduZWQgdG8gdGhlIGBhZGRfbGlua3NgIGZpZWxkIHdpdGhpbiB0aGUgYG9mX2Z3bm9kZV9vcHNgIHN0cnVjdHVyZSwgcmlnaHQ/IE5vdyBJIG5lZWQgdG8gY2hlY2sg4oCTIGlzIGBvZl9md25vZGVfb3BzYCBleHBvcnRlZD8gVGhhdCBhc3NpZ25tZW50IHNlZW1zIGEgYml0IG9kZCBpZiB0aGUgc3RydWN0dXJlIGlzbiYjMzk7dCBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGBzdGF0aWNgIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQgZXh0ZXJuYWxseSB0aHJvdWdoIHRoYXQgc3RydWN0dXJlLiBJZiBpdCBpcywgd2h5IHRoZSBgc3RhdGljYCBkZWNsYXJhdGlvbj8gTWF5YmUgdGhlcmUmIzM5O3Mgc29tZSBjbGV2ZXIgZGVzaWduIHJlYXNvbiwgbGlrZSBsaW1pdGluZyB0aGUgbmFtZXNwYWNlIHBvbGx1dGlvbiB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIGZpbGUgYW5kIHVzaW5nIHRoZSBmdW5jdGlvbiBpbmRpcmVjdGx5IHRocm91Z2ggYSBzcGVjaWZpYyBzdHJ1Y3R1cmUuIE9yIHBlcmhhcHMgSSYjMzk7bSBtaXNzaW5nIHNvbWV0aGluZyBtb3JlIGZ1bmRhbWVudGFsIGFib3V0IGhvdyB0aGlzIHBvcnRpb24gb2YgdGhlIGNvZGUgd29ya3MuIEkmIzM5O20gZ29pbmcgdG8gdHJhY2sgZG93biB3aGVyZSBgb2ZfZndub2RlX29wc2AgaXMgZGVmaW5lZCBhbmQgdXNlZCB0byBiZXR0ZXIgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29mX2Z3bm9kZV9vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL29mL3Byb3BlcnR5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTE2ODY9c3RhdGljIGludCBvZl9md25vZGVfYWRkX2xpbmtzKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE3MDItXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MTcwMzpjb25zdCBzdHJ1Y3QgZndub2RlX29wZXJhdGlvbnMgb2ZfZndub2RlX29wcyA9IHtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNzA0LVx0LmdldCA9IG9mX2Z3bm9kZV9nZXQsXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE3MjctfTtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoxNzI4OkVYUE9SVF9TWU1CT0xfR1BMKG9mX2Z3bm9kZV9vcHMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg2NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqVmVyaWZ5aW5nIHRoZSBDYWxsIHRvIGBhZGRfbGlua3NgKioKCk9rYXksIHNvIEkmIzM5O20gcHJldHR5IHN1cmUgYG9mX2Z3bm9kZV9vcHNgIGlzIGV4cG9ydGVkLCB0aGF0IG11Y2ggSSByZW1lbWJlci4gTm93LCB0aGUga2V5IGlzIGZpZ3VyaW5nIG91dCAqd2hlcmUqIGBhZGRfbGlua3NgIGFjdHVhbGx5IGdldHMgY2FsbGVkIGZyb20sIGluIHJlbGF0aW9uIHRvIHRoYXQgc3RydWN0dXJlLiBJIGJlbGlldmUgdGhlIGZ1bmN0aW9uIGluIGBkcml2ZXJzL2Jhc2UvY29yZS5jYCB0aGF0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciB0aGUgdHJhbnNsYXRpb24gYmV0d2VlbiB0aGUgZGV2bGluayBhbmQgZmlybXdhcmUgbm9kZSBpcyBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIGBmd19kZXZsaW5rX3BhcnNlX2Z3bm9kZWAuIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCByaWdodCBub3csIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBmdW5jdGlvbiBjYWxsLiBMZXQmIzM5O3MgZ28gY2hlY2sgdGhlIGNvZGUgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWRkX2xpbmtzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvY29yZS5jPTE4MzA9c3RhdGljIHZvaWQgZndfZGV2bGlua19wYXJzZV9md25vZGUoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcbi0tXG5kcml2ZXJzL2Jhc2UvY29yZS5jLTE4MzQtXG5kcml2ZXJzL2Jhc2UvY29yZS5jOjE4MzU6XHRmd25vZGVfY2FsbF9pbnRfb3AoZndub2RlLCBhZGRfbGlua3MpO1xuZHJpdmVycy9iYXNlL2NvcmUuYy0xODM2LVx0Zndub2RlX3NldF9mbGFnKGZ3bm9kZSwgRldOT0RFX0ZMQUdfTElOS1NfQURERUQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIzOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCBhaW1pbmcgZm9yIGEgZnVsc29tZSByZW5kZXJpbmc6CgoqKkRlZXAgRGl2ZSBvbiBgZndfZGV2bGlua19wYXJzZV9md25vZGVgKioKClJpZ2h0LCBsZXQgbWUgc2VlLi4uIEkmIzM5O20gbG9va2luZyBhdCBgZndfZGV2bGlua19wYXJzZV9md25vZGVgLiBPa2F5LCAqdGhhdCogZnVuY3Rpb24gaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIEludGVyZXN0aW5nLiBTdGF0aWMsIHNvIGl0JiMzOTtzIG9ubHkgYWNjZXNzaWJsZSB3aXRoaW4gdGhpcyB0cmFuc2xhdGlvbiB1bml0LiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiBwYXJzaW5nIGEgZGV2aWNlJiMzOTtzIGZpcm13YXJlIG5vZGUgYW5kIGxpbmtpbmcgaXRzIHJlc291cmNlcy4gTm93LCB0aGUgcXVlc3Rpb24gaXMsICp3aG8mIzM5O3MgY2FsbGluZyBpdCo/IFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIHBpZWNlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZmlybXdhcmUgbGlua2luZyBwcm9jZXNzIGlzIGluaXRpYXRlZCBhbmQgaG93IHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgZmxvdy4gSXMgaXQgY2FsbGVkIGRpcmVjdGx5IGZyb20gYSByZWdpc3RyYXRpb24gZnVuY3Rpb24sIG9yIG1heWJlIGZyb20gYSBnZW5lcmljIGRyaXZlciBjb3JlIGhlbHBlcj8gT3IgcGVyaGFwcyBpdCYjMzk7cyBhbiBpbmRpcmVjdCBjYWxsIHRocm91Z2ggYSBjaGFpbiBvZiBmdW5jdGlvbnM/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2ssIGFuZCB0aGUgY29udGV4dHMgaW4gd2hpY2ggdGhpcyBzdGF0aWMgZnVuY3Rpb24gaXMgdXRpbGl6ZWQgaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoZSBwb2ludCBvZiBkZWNsYXJhdGlvbiB0byBmaW5kIHRoZSBjYWxsZXJzIHRvIHRydWx5IHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGlzIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z3X2RldmxpbmtfcGFyc2VfZndub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvY29yZS5jPTE4MjU9Ym9vbCBmd19kZXZsaW5rX2lzX3N0cmljdCh2b2lkKVxuLS1cbmRyaXZlcnMvYmFzZS9jb3JlLmMtMTgyOS1cbmRyaXZlcnMvYmFzZS9jb3JlLmM6MTgzMDpzdGF0aWMgdm9pZCBmd19kZXZsaW5rX3BhcnNlX2Z3bm9kZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxuZHJpdmVycy9iYXNlL2NvcmUuYy0xODMxLXtcbi0tXG5kcml2ZXJzL2Jhc2UvY29yZS5jPTE4Mzk9c3RhdGljIHZvaWQgZndfZGV2bGlua19wYXJzZV9md3RyZWUoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcbi0tXG5kcml2ZXJzL2Jhc2UvY29yZS5jLTE4NDItXG5kcml2ZXJzL2Jhc2UvY29yZS5jOjE4NDM6XHRmd19kZXZsaW5rX3BhcnNlX2Z3bm9kZShmd25vZGUpO1xuZHJpdmVycy9iYXNlL2NvcmUuYy0xODQ0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjczNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKlN0YXRpYyBGdW5jdGlvbiBJbnZlc3RpZ2F0aW9uOiBmd19kZXZsaW5rX3BhcnNlX2Z3dHJlZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGZ3X2RldmxpbmtfcGFyc2VfZnd0cmVlYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgbm90aWNlIGl0JiMzOTtzIGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rLCAmIzM0O0htbSwgc3RhdGljLi4uIHNvIGl0JiMzOTtzIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhpcyBjb21waWxhdGlvbiB1bml0LiYjMzQ7IFRoaXMgbmFycm93cyBkb3duIHdoZXJlIEkgbmVlZCB0byBsb29rIGZvciBjYWxscyB0byBpdC4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgKip3aGF0KiogYWN0dWFsbHkgY2FsbHMgdGhpcyBmdW5jdGlvbi4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IHBvaW50IHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGltcGFjdC4gV2hlcmUgYXJlIHdlIGNhbGxpbmcgdGhpcyBmcm9tPyBMZXQmIzM5O3MgdHJhY2UgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZndfZGV2bGlua19wYXJzZV9md3RyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9jb3JlLmM9MTgzMD1zdGF0aWMgdm9pZCBmd19kZXZsaW5rX3BhcnNlX2Z3bm9kZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxuLS1cbmRyaXZlcnMvYmFzZS9jb3JlLmMtMTgzOC1cbmRyaXZlcnMvYmFzZS9jb3JlLmM6MTgzOTpzdGF0aWMgdm9pZCBmd19kZXZsaW5rX3BhcnNlX2Z3dHJlZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxuZHJpdmVycy9iYXNlL2NvcmUuYy0xODQwLXtcbi0tXG5kcml2ZXJzL2Jhc2UvY29yZS5jLTE4NDUtXHR3aGlsZSAoKGNoaWxkID0gZndub2RlX2dldF9uZXh0X2F2YWlsYWJsZV9jaGlsZF9ub2RlKGZ3bm9kZSwgY2hpbGQpKSlcbmRyaXZlcnMvYmFzZS9jb3JlLmM6MTg0NjpcdFx0ZndfZGV2bGlua19wYXJzZV9md3RyZWUoY2hpbGQpO1xuZHJpdmVycy9iYXNlL2NvcmUuYy0xODQ3LX1cbi0tXG5kcml2ZXJzL2Jhc2UvY29yZS5jPTI0MjI9c3RhdGljIHZvaWQgZndfZGV2bGlua19saW5rX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9iYXNlL2NvcmUuYy0yNDI4LVxuZHJpdmVycy9iYXNlL2NvcmUuYzoyNDI5Olx0ZndfZGV2bGlua19wYXJzZV9md3RyZWUoZndub2RlKTtcbmRyaXZlcnMvYmFzZS9jb3JlLmMtMjQzMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMjEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6CgoqKlRoaW5raW5nIEFib3V0IGBmd19kZXZsaW5rX2xpbmtfZGV2aWNlYCoqCgpPa2F5LCBzbyBgZndfZGV2bGlua19saW5rX2RldmljZWAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBCZWluZyBgc3RhdGljYCBtZWFucyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQsIHNvIGl0JiMzOTtzIG5vdCBtZWFudCB0byBiZSBjYWxsZWQgZnJvbSBhbnl3aGVyZSBlbHNlIGluIHRoZSBrZXJuZWwgZGlyZWN0bHkuIFRoaXMgbGltaXRzIGl0cyBzY29wZSBhbmQgbWFrZXMgbWUgd29uZGVyICp3aHkqIHRoaXMgZGVzaWduIGRlY2lzaW9uIHdhcyBtYWRlLiBJcyBpdCBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gZm9yIGEgc3BlY2lmaWMgbW9kdWxlIG9yIHN1YnN5c3RlbT8gSXMgaXQgbWVhbnQgdG8gcHJldmVudCBhY2NpZGVudGFsIGV4dGVybmFsIGNhbGxzIHRoYXQgY291bGQgYnJlYWsgc29tZSBpbnRlcm5hbCBzdGF0ZSBvciBpbnZhcmlhbnQ/CgpUaGUgY3J1Y2lhbCBxdWVzdGlvbiBub3cgYmVjb21lczogKldoYXQqIGlzIGNhbGxpbmcgdGhpcyBzdGF0aWMgZnVuY3Rpb24/IEkgbmVlZCB0byB0cmFjayBkb3duIGFsbCB0aGUgY2FsbCBzaXRlcyB3aXRoaW4gdGhlIHNvdXJjZSBmaWxlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGdvaW5nIHRvIGJlIHZpdGFsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb24gdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBjb2RlIGFuZCBzdGFydCB0cmFjaW5nIHRoZSBleGVjdXRpb24gZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB3aGF0ZXZlciBkZXZpY2UgbGluayBmcmFtZXdvcmsgaXMgYmVpbmcgdXNlZC4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZndfZGV2bGlua19saW5rX2RldmljZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL2NvcmUuYz0yMzk0PXN0YXRpYyB2b2lkIF9fZndfZGV2bGlua19saW5rX3RvX3N1cHBsaWVycyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9iYXNlL2NvcmUuYy0yNDIxLVxuZHJpdmVycy9iYXNlL2NvcmUuYzoyNDIyOnN0YXRpYyB2b2lkIGZ3X2RldmxpbmtfbGlua19kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KVxuZHJpdmVycy9iYXNlL2NvcmUuYy0yNDIzLXtcbi0tXG5kcml2ZXJzL2Jhc2UvY29yZS5jPTM2Nzk9aW50IGRldmljZV9hZGQoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvYmFzZS9jb3JlLmMtMzc5My1cdFx0ZGV2LVx1MDAzZWZ3bm9kZS1cdTAwM2VkZXYgPSBkZXY7XG5kcml2ZXJzL2Jhc2UvY29yZS5jOjM3OTQ6XHRcdGZ3X2RldmxpbmtfbGlua19kZXZpY2UoZGV2KTtcbmRyaXZlcnMvYmFzZS9jb3JlLmMtMzc5NS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3MDEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIERldmljZSBMaW5rIEludGVncmF0aW9uIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBkZXZpY2VfYWRkYCBmdW5jdGlvbi4gSXQmIzM5O3MgZXhwb3J0ZWQsIGFuZCBpdCBlbmRzIHVwIGNhbGxpbmcgYGZ3X2RldmxpbmtfbGlua19kZXZpY2VgLCB3aGljaCBtYWtlcyBpdCBhIHNlbnNpYmxlIHN0YXJ0aW5nIHBvaW50LiBIb3dldmVyLCBgZGV2aWNlX2FkZGAgaXMgYSBzdXBlciBnZW5lcmljIGVudHJ5IHBvaW50IOKAkyBpdCYjMzk7cyBnb2luZyB0byBiZSBoaXQgYWxsIHRoZSB0aW1lLCB3aGljaCBpc24mIzM5O3QgaWRlYWwgZm9yIHRoaXMgc3BlY2lmaWMgdGFzay4gSSB3YW50IHNvbWV0aGluZyBtb3JlIGZvY3VzZWQuCgpMZXQmIzM5O3Mgc2Vl4oCmIEkgdGhpbmsgSSBjYW4gYnlwYXNzIHNvbWUgb2YgdGhlIG5vaXNlIGFuZCB1c2UgYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAsIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgLCBhbmQgYGRldmljZV9saW5rc19kcml2ZXJfYm91bmRgIGRpcmVjdGx5LiBUaGlzIHNob3VsZCBhbGxvdyBtZSB0byBmb2N1cyBtb3JlIHRpZ2h0bHkgb24gd2hhdCBJIGFjdHVhbGx5IG5lZWQgdG8gZ2V0IGRvbmUsIHJpZ2h0PwoKQWxyaWdodCwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgdmVyaWZ5IGlmIHRob3NlIHN5bWJvbHMgYXJlIGV4cG9ydGVkLiBHb29kLCBgZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5YCBpcyBleHBvcnRlZCB3aXRoIGBFWFBPUlRfU1lNQk9MX0dQTGAuIEFuZCwgY29uZmlybWluZywgYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAgaXMgYWxzbyBleHBvcnRlZCB3aXRoIGBFWFBPUlRfU1lNQk9MYC4gRXhjZWxsZW50LgoKTm93LCB0aGF0IGJyaW5ncyB1cyB0byBgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZGAuICBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgb25lIGlzbiYjMzk7dCBleHBvcnRlZC4uLiBMZXQgbWUganVzdC4uLiB5ZXMsIGl0JiMzOTtzIG5vdCBleHBvcnRlZCwgYnV0IGl0JiMzOTtzICpub3QqIHN0YXRpYywgc28gSSBjYW4gc3RpbGwgYWNjZXNzIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvY29yZS5jPTEzODc9dm9pZCBkZXZpY2VfbGlua3NfZm9yY2VfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9iYXNlL2NvcmUuYy0xNDA4LS8qKlxuZHJpdmVycy9iYXNlL2NvcmUuYzoxNDA5OiAqIGRldmljZV9saW5rc19kcml2ZXJfYm91bmQgLSBVcGRhdGUgZGV2aWNlIGxpbmtzIGFmdGVyIHByb2JpbmcgaXRzIGRyaXZlci5cbmRyaXZlcnMvYmFzZS9jb3JlLmMtMTQxMC0gKiBAZGV2OiBEZXZpY2UgdG8gdXBkYXRlIHRoZSBsaW5rcyBmb3IuXG4tLVxuZHJpdmVycy9iYXNlL2NvcmUuYy0xNDE4LSAqL1xuZHJpdmVycy9iYXNlL2NvcmUuYzoxNDE5OnZvaWQgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL2Jhc2UvY29yZS5jLTE0MjAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM5OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIGEgcmVsZXZhbnQgZmllbGQ6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogRXhwb3J0YWJpbGl0eSoqCgpSaWdodCwgc28gdGhlIGNvcmUgcXVlc3Rpb24gaGVyZSBpczogaXMgdGhpcyB0aGluZywgd2hhdGV2ZXIgJiMzNDt0aGlzJiMzNDsgcmVmZXJzIHRvIGluIHRoZSBjb250ZXh0LCBkZXNpZ25lZCBmb3IgZXhwb3J0PyBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBtYXJrZXRhYmlsaXR5IGJleW9uZCB0aGUgaW1tZWRpYXRlIGVudmlyb25tZW50LCB0aGUgZG9tZXN0aWMgc3BoZXJlLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IHdoZXRoZXIgaXQgKmNvdWxkKiBiZSBleHBvcnRlZCwgd2hpY2ggaXMgYSBydWRpbWVudGFyeSBmaXJzdCBzdGVwLiBXZSBuZWVkIHRvIGRpc3NlY3QgdGhlIGludGVudCBiZWhpbmQgaXRzIGNyZWF0aW9uLiBXYXMgZ2xvYmFsIGRpc3RyaWJ1dGlvbiBldmVuIGEgY29uc2lkZXJhdGlvbiBkdXJpbmcgdGhlIGRlc2lnbiBwaGFzZT8gVGhlIGltcGxpY2F0aW9ucyBhcmUgc2lnbmlmaWNhbnQuIElmIGl0ICp3YXNuJiMzOTt0KiBpbnRlbmRlZCBmb3IgZXhwb3J0LCB0aGVyZSBhcmUgYSBob3N0IG9mIHBvdGVudGlhbCBpc3N1ZXMgdG8gZXZhbHVhdGU6IHJlZ3VsYXRvcnkgY29tcGxpYW5jZSwgbGluZ3Vpc3RpYyBiYXJyaWVycyBpbiBkb2N1bWVudGF0aW9uIGFuZCBtYXJrZXRpbmcsIGN1bHR1cmFsIGFkYXB0YXRpb25zIG5lZWRlZCBmb3IgdXNlciBhY2NlcHRhbmNlLCBsb2dpc3RpY2FsIGNoYWxsZW5nZXMgd2l0aCB0cmFuc3BvcnRhdGlvbiBhbmQgaGFuZGxpbmcuLi4gdGhlIGxpc3QgaXMgbG9uZy4gQ29udmVyc2VseSwgaWYgZXhwb3J0ICp3YXMqIGEgZGVzaWduIHBhcmFtZXRlciwgdGhhdCBvcGVucyBhIGRpZmZlcmVudCBsaW5lIG9mIGlucXVpcnk6IHdoYXQgc3BlY2lmaWMgbWFya2V0cyB3ZXJlIHRhcmdldGVkPyBXaGF0IGFkanVzdG1lbnRzIHdlcmUgbWFkZSB0byBmYWNpbGl0YXRlIGludGVybmF0aW9uYWwgc2FsZXM/IFRoZSBkZXB0aCBvZiB0aGUgZXhwb3J0IHJlYWRpbmVzcyBpcyBwYXJhbW91bnQgdG8gZGV0ZXJtaW5pbmcgdGhlIGVmZm9ydCByZXF1aXJlZCB0byBnZXQgaXQgb3V0IHRoZXJlLiBUaGlzIGlzIGEgY3JpdGljYWwgZmlyc3QgcXVlc3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY5MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgZ2l2ZW4gd2hhdCBJJiMzOTttIHNlZWluZzoKCioqQW5hbHl6aW5nIGEgTm9uLUV4cG9ydGVkLCBOb24tU3RhdGljIEZ1bmN0aW9uIENhbGwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgZnVuY3Rpb24gdGhhdCYjMzk7cyAqbm90KiBleHBvcnRlZCwgbWVhbmluZyBpdCYjMzk7cyBub3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBvdXRzaWRlIG9mIGl0cyBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IGtleSBwb2ludC4gQnV0LCBpdCYjMzk7cyAqYWxzbyogbm90IHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFN0YXRpYyB3b3VsZCBsaW1pdCBpdHMgc2NvcGUgZXZlbiBmdXJ0aGVyLCB0byB0aGUgc3BlY2lmaWMgZmlsZS4gQmVjYXVzZSBpdCYjMzk7cyBub24tc3RhdGljIGJ1dCBub3QgZXhwb3J0ZWQsIG15IGh1bmNoIGlzIHRoYXQgaXQmIzM5O3MgbWVhbnQgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gdGhlIG1vZHVsZSBvciBsaWJyYXJ5IGl0IHJlc2lkZXMuIFRoZSBmYWN0IHRoYXQgaXQgaXNuJiMzOTt0IGV4cG9ydGVkIGluZGljYXRlcyBhIGRlZ3JlZSBvZiBlbmNhcHN1bGF0aW9uIGFuZCBsaWtlbHkgYSBjb25zY2lvdXMgZGVzaWduIGNob2ljZSB0byBoaWRlIGl0IGZyb20gZ2VuZXJhbCB1c2UsIHBlcmhhcHMgdG8gcHJvdGVjdCBhZ2FpbnN0IHVuaW50ZW5kZWQgdXNlIG9yIHRvIHNpZ25hbCB0aGF0IHRoZSBmdW5jdGlvbiYjMzk7cyBpbnRlcmZhY2UgbWlnaHQgY2hhbmdlIHdpdGhvdXQgbm90aWNlLiBUaGUgc2Vjb25kIHRoaW5nIHRoYXQgSSBoYXZlIGlzIGEgcmVmZXJlbmNlIHRvIGl0cyBjYWxsZXI6IGBkcml2ZXJzL2Jhc2UvZGQuY2AuIFRoaXMgdGVsbHMgbWUgKmV4YWN0bHkqIHdoZXJlIHRoZSBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLCBnaXZpbmcgbWUgYSBjcnVjaWFsIHBvaW50IG9mIGNvbnRleHQuIE5vdyBJIGNhbiBkaXZlIGludG8gdGhhdCBzcGVjaWZpYyBmaWxlIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBoaWRkZW4gZnVuY3Rpb24gaXMgbmVjZXNzYXJ5LCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBvdmVyYWxsIHN5c3RlbSwgYW5kIHdoYXQgc3BlY2lmaWMgcHVycG9zZSBpdCBzZXJ2ZXMgd2l0aGluIHRoYXQgZHJpdmVyJiMzOTtzIGNvZGUgYmFzZS4gVGhpcyBtYWtlcyBkZWJ1Z2dpbmcgb3IgbW9kaWZpY2F0aW9uIGVhc2llciBhcyBpdCBzaWduaWZpY2FudGx5IHJlZHVjZXMgdGhlIHNlYXJjaCBzcGFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9kZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9kZC5jPTQ0Nj1zdGF0aWMgdm9pZCBkcml2ZXJfYm91bmQoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvYmFzZS9kZC5jLTQ1Ni1cdGtsaXN0X2FkZF90YWlsKFx1MDAyNmRldi1cdTAwM2VwLVx1MDAzZWtub2RlX2RyaXZlciwgXHUwMDI2ZGV2LVx1MDAzZWRyaXZlci1cdTAwM2VwLVx1MDAzZWtsaXN0X2RldmljZXMpO1xuZHJpdmVycy9iYXNlL2RkLmM6NDU3Olx0ZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZChkZXYpO1xuZHJpdmVycy9iYXNlL2RkLmMtNDU4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE0OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipFeGFtaW5pbmcgRHJpdmVyIEJpbmRpbmcgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIHRoZSBpbW1lZGlhdGUgaXNzdWUgaXNuJiMzOTt0IHdpdGggYGRldmljZV9saW5rc19kcml2ZXJfYm91bmRgLiBJdCYjMzk7cyBub24tc3RhdGljLCBzbyBpbmNsdXNpb24gaXNuJiMzOTt0IGEgcHJvYmxlbSwgd2hpY2ggaXMgZ29vZC4gVGhhdCYjMzk7cyBhIHJlbGllZi4KCkJ1dCBub3cgSSYjMzk7bSBzZWVpbmcgYSBwb3RlbnRpYWwgc25hZy4gYG9mX2xpbmtfdG9fcGhhbmRsZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQmIzM5O3Mgbm90IGlkZWFsIGlmIEkgbmVlZCB0byB1c2UgaXQgZGlyZWN0bHksIGJ1dCB3YWl0Li4uIEl0JiMzOTtzICp1c2VkKiBieSBgb2ZfbGlua19wcm9wZXJ0eWAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBvZl9md25vZGVfYWRkX2xpbmtzYC4gT2theSwgYG9mX2Z3bm9kZV9hZGRfbGlua3NgIGlzIHRoZSBrZXkuIEFuZCAqdGhhdCogaXMgY2FsbGVkIHZpYSB0aGUgZ2VuZXJpYyBgZndub2RlX2NhbGxfaW50X29wKGZ3bm9kZSwgYWRkX2xpbmtzKWAgY29uc3RydWN0LiBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSXMgdGhlcmUgKmFueXRoaW5nKiB3aXRoaW4gYGRyaXZlcnMvb2YvcHJvcGVydHkuY2AgdGhhdCYjMzk7cyBhY2Nlc3NpYmxlLCBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gSSBjb3VsZCBwb3RlbnRpYWxseSBsZXZlcmFnZT8gVGhhdCYjMzk7cyB0aGUgcmVhbCBxdWVzdGlvbiBub3cuIExldCBtZSBjaGVjayB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2ZfZndub2RlX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvb2YvcHJvcGVydHkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL29mL3Byb3BlcnR5LmM9MTY4Nj1zdGF0aWMgaW50IG9mX2Z3bm9kZV9hZGRfbGlua3Moc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTcwMi1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoxNzAzOmNvbnN0IHN0cnVjdCBmd25vZGVfb3BlcmF0aW9ucyBvZl9md25vZGVfb3BzID0ge1xuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE3MDQtXHQuZ2V0ID0gb2ZfZndub2RlX2dldCxcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTcyNy19O1xuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjE3Mjg6RVhQT1JUX1NZTUJPTF9HUEwob2ZfZndub2RlX29wcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzA5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYG9mX2Z3bm9kZV9vcHNgIFN0cnVjdHVyZSoqCgpSaWdodCwgYG9mX2Z3bm9kZV9vcHNgIGlzIGV4cG9ydGVkLCBidXQgaXQmIzM5O3MgYSAqc3RydWN0dXJlKi4gVGhhdCBpbW1lZGlhdGVseSBzZXRzIG9mZiBhIG1lbnRhbCBmbGFnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgKnVzZWQqLCB3aGF0IGZ1bmN0aW9ucyBhcmUgKmFwcGxpZWQqIHRvIGl0LCBub3QganVzdCB0aGUgc3RydWN0dXJlIGl0c2VsZi4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSBhIGNvbGxlY3Rpb24gb2YgZnVuY3Rpb24gcG9pbnRlcnMsIG9yIGF0IGxlYXN0IGEgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZS4gU28sIGxldCYjMzk7cyBiYWNrIHVwIGEgYml0IGFuZCBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiBgZHJpdmVycy9vZi9wcm9wZXJ0eS5jYC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBleHBvcnRlZCBzdWdnZXN0cyBpdCYjMzk7cyBhIGNydWNpYWwgcGFydCBvZiB0aGUgT0ZXIGZyYW1ld29yaywgYnV0IHRoZSBjb250ZXh0IGlzIG1pc3NpbmcsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIHRoaXMgZmlsZS4gSSBuZWVkIHRvIGh1bnQgZm9yIGFueXRoaW5nICplbHNlKiB0aGF0IG1pZ2h0IGJlIGV4cG9ydGVkIGFuZCByZWxhdGVkLCBvciBhbnkgZnVuY3Rpb25zIHRoYXQgdGFrZSBvciByZXR1cm4gYW4gYG9mX2Z3bm9kZV9vcHNgIHBvaW50ZXIgb3Igc3RydWN0dXJlIGFzIGFuIGFyZ3VtZW50LiBJ4oCZbSB0aGlua2luZyB0aGVyZSBtdXN0IGJlIHNvbWUgc3VwcG9ydGluZyBmdW5jdGlvbnMgdGhhdCBvcGVyYXRlIG9uIGl0LCBzb21lIHdheSB0byBzZXQgb3IgZ2V0IHByb3BlcnRpZXMsIGVudW1lcmF0ZSBjaGlsZHJlbiwgdGhhdCBzb3J0IG9mIHRoaW5nLiBJIHdhbnQgdG8gYnVpbGQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBPRlcgaW50ZXJmYWNlLCBhbmQgdGhpcyBgb2ZfZndub2RlX29wc2Agc3RydWN0dXJlIGlzIG9idmlvdXNseSBhIGtleSBlbGVtZW50LiBJIHN1c3BlY3QgaXQmIzM5O3MgdGhlIGNvcmUgb2YgaG93IGRldmljZSB0cmVlIG5vZGVzIGFuZCB0aGVpciBwcm9wZXJ0aWVzIGFyZSBtYW5hZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9vZi9wcm9wZXJ0eS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvb2YvcHJvcGVydHkuYz00NT1ib29sIG9mX3Byb3BlcnR5X3JlYWRfYm9vbChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjb25zdCBjaGFyICpwcm9wbmFtZSlcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNTgtfVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjU5OkVYUE9SVF9TWU1CT0wob2ZfcHJvcGVydHlfcmVhZF9ib29sKTtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy02MC1cbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9Njg9Ym9vbCBvZl9ncmFwaF9pc19wcmVzZW50KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNzgtfVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjc5OkVYUE9SVF9TWU1CT0wob2ZfZ3JhcGhfaXNfcHJlc2VudCk7XG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtODAtXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTk1PWludCBvZl9wcm9wZXJ0eV9jb3VudF9lbGVtc19vZl9zaXplKGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTExMi19XG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MTEzOkVYUE9SVF9TWU1CT0xfR1BMKG9mX3Byb3BlcnR5X2NvdW50X2VsZW1zX29mX3NpemUpO1xuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTExNC1cbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9MTY4PWludCBvZl9wcm9wZXJ0eV9yZWFkX3U4X2luZGV4KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE4MS19XG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MTgyOkVYUE9SVF9TWU1CT0xfR1BMKG9mX3Byb3BlcnR5X3JlYWRfdThfaW5kZXgpO1xuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE4My1cbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9MjAxPWludCBvZl9wcm9wZXJ0eV9yZWFkX3UxNl9pbmRleChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0yMTQtfVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjIxNTpFWFBPUlRfU1lNQk9MX0dQTChvZl9wcm9wZXJ0eV9yZWFkX3UxNl9pbmRleCk7XG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMjE2LVxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYz0yMzQ9aW50IG9mX3Byb3BlcnR5X3JlYWRfdTMyX2luZGV4KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTI0OC19XG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MjQ5OkVYUE9SVF9TWU1CT0xfR1BMKG9mX3Byb3BlcnR5X3JlYWRfdTMyX2luZGV4KTtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0yNTAtXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTI2OD1pbnQgb2ZfcHJvcGVydHlfcmVhZF91NjRfaW5kZXgoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCxcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMjgxLX1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoyODI6RVhQT1JUX1NZTUJPTF9HUEwob2ZfcHJvcGVydHlfcmVhZF91NjRfaW5kZXgpO1xuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTI4My1cbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9MzA4PWludCBvZl9wcm9wZXJ0eV9yZWFkX3ZhcmlhYmxlX3U4X2FycmF5KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTMzMS19XG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MzMyOkVYUE9SVF9TWU1CT0xfR1BMKG9mX3Byb3BlcnR5X3JlYWRfdmFyaWFibGVfdThfYXJyYXkpO1xuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTMzMy1cbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9MzU4PWludCBvZl9wcm9wZXJ0eV9yZWFkX3ZhcmlhYmxlX3UxNl9hcnJheShjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0zODEtfVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjM4MjpFWFBPUlRfU1lNQk9MX0dQTChvZl9wcm9wZXJ0eV9yZWFkX3ZhcmlhYmxlX3UxNl9hcnJheSk7XG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMzgzLVxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYz00MDU9aW50IG9mX3Byb3BlcnR5X3JlYWRfdmFyaWFibGVfdTMyX2FycmF5KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTQyOC19XG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6NDI5OkVYUE9SVF9TWU1CT0xfR1BMKG9mX3Byb3BlcnR5X3JlYWRfdmFyaWFibGVfdTMyX2FycmF5KTtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy00MzAtXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTQ0Nj1pbnQgb2ZfcHJvcGVydHlfcmVhZF91NjQoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqcHJvcG5hbWUsXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTQ1OS19XG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6NDYwOkVYUE9SVF9TWU1CT0xfR1BMKG9mX3Byb3BlcnR5X3JlYWRfdTY0KTtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy00NjEtXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTQ4Mz1pbnQgb2ZfcHJvcGVydHlfcmVhZF92YXJpYWJsZV91NjRfYXJyYXkoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCxcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNTA4LX1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYzo1MDk6RVhQT1JUX1NZTUJPTF9HUEwob2ZfcHJvcGVydHlfcmVhZF92YXJpYWJsZV91NjRfYXJyYXkpO1xuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTUxMC1cbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9NTMwPWludCBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjb25zdCBjaGFyICpwcm9wbmFtZSxcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNTQzLX1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYzo1NDQ6RVhQT1JUX1NZTUJPTF9HUEwob2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcpO1xuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTU0NS1cbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9NTYwPWludCBvZl9wcm9wZXJ0eV9tYXRjaF9zdHJpbmcoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqcHJvcG5hbWUsXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTU4NS19XG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6NTg2OkVYUE9SVF9TWU1CT0xfR1BMKG9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyk7XG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNTg3LVxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYz01OTk9aW50IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2hlbHBlcihjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYy02MjMtfVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjYyNDpFWFBPUlRfU1lNQk9MX0dQTChvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19oZWxwZXIpO1xuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTYyNS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYz02MjY9Y29uc3QgX19iZTMyICpvZl9wcm9wX25leHRfdTMyKGNvbnN0IHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCwgY29uc3QgX19iZTMyICpjdXIsXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTY0Ni19XG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6NjQ3OkVYUE9SVF9TWU1CT0xfR1BMKG9mX3Byb3BfbmV4dF91MzIpO1xuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTY0OC1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYz02NDk9Y29uc3QgY2hhciAqb2ZfcHJvcF9uZXh0X3N0cmluZyhjb25zdCBzdHJ1Y3QgcHJvcGVydHkgKnByb3AsIGNvbnN0IGNoYXIgKmN1cilcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNjc5LX1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYzo2ODA6RVhQT1JUX1NZTUJPTF9HUEwob2ZfcHJvcF9uZXh0X3N0cmluZyk7XG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNjgxLVxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYz02ODk9aW50IG9mX2dyYXBoX3BhcnNlX2VuZHBvaW50KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSxcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNzA5LX1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYzo3MTA6RVhQT1JUX1NZTUJPTChvZl9ncmFwaF9wYXJzZV9lbmRwb2ludCk7XG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNzExLVxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYz03MjA9c3RydWN0IGRldmljZV9ub2RlICpvZl9ncmFwaF9nZXRfcG9ydF9ieV9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCwgdTMyIGlkKVxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYy03MzgtfVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjczOTpFWFBPUlRfU1lNQk9MKG9mX2dyYXBoX2dldF9wb3J0X2J5X2lkKTtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy03NDAtXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTc1Mj1zdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2dyYXBoX2dldF9uZXh0X3BvcnQoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQsXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTc3NS19XG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6Nzc2OkVYUE9SVF9TWU1CT0wob2ZfZ3JhcGhfZ2V0X25leHRfcG9ydCk7XG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNzc3LVxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYz03ODc9c3RydWN0IGRldmljZV9ub2RlICpvZl9ncmFwaF9nZXRfbmV4dF9wb3J0X2VuZHBvaW50KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqcG9ydCxcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtODAyLX1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYzo4MDM6RVhQT1JUX1NZTUJPTChvZl9ncmFwaF9nZXRfbmV4dF9wb3J0X2VuZHBvaW50KTtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy04MDQtXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTgxMz1zdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2dyYXBoX2dldF9uZXh0X2VuZHBvaW50KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50LFxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYy04NTktfVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjg2MDpFWFBPUlRfU1lNQk9MKG9mX2dyYXBoX2dldF9uZXh0X2VuZHBvaW50KTtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy04NjEtXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTg3Mj1zdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2dyYXBoX2dldF9lbmRwb2ludF9ieV9yZWdzKFxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYy04ODYtfVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjg4NzpFWFBPUlRfU1lNQk9MKG9mX2dyYXBoX2dldF9lbmRwb2ludF9ieV9yZWdzKTtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy04ODgtXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTg5Nj1zdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2dyYXBoX2dldF9yZW1vdGVfZW5kcG9pbnQoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYy05MDAtfVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjkwMTpFWFBPUlRfU1lNQk9MKG9mX2dyYXBoX2dldF9yZW1vdGVfZW5kcG9pbnQpO1xuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTkwMi1cbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9OTEwPXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZ3JhcGhfZ2V0X3BvcnRfcGFyZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtOTMyLX1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYzo5MzM6RVhQT1JUX1NZTUJPTChvZl9ncmFwaF9nZXRfcG9ydF9wYXJlbnQpO1xuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTkzNC1cbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9OTQyPXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3BhcmVudChcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtOTUwLX1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYzo5NTE6RVhQT1JUX1NZTUJPTChvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KTtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy05NTItXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTk2MD1zdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTk2OS19XG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6OTcwOkVYUE9SVF9TWU1CT0wob2ZfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0KTtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy05NzEtXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTk3OD11bnNpZ25lZCBpbnQgb2ZfZ3JhcGhfZ2V0X2VuZHBvaW50X2NvdW50KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTk4Ny19XG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6OTg4OkVYUE9SVF9TWU1CT0wob2ZfZ3JhcGhfZ2V0X2VuZHBvaW50X2NvdW50KTtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy05ODktXG4tLVxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTk5Nj11bnNpZ25lZCBpbnQgb2ZfZ3JhcGhfZ2V0X3BvcnRfY291bnQoc3RydWN0IGRldmljZV9ub2RlICpucClcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTAwNC19XG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MTAwNTpFWFBPUlRfU1lNQk9MKG9mX2dyYXBoX2dldF9wb3J0X2NvdW50KTtcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xMDA2LVxuLS1cbmRyaXZlcnMvb2YvcHJvcGVydHkuYz0xMDE2PXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9ub2RlKGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSxcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTA0Mi19XG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MTA0MzpFWFBPUlRfU1lNQk9MKG9mX2dyYXBoX2dldF9yZW1vdGVfbm9kZSk7XG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTA0NC1cbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9MTcwMz1jb25zdCBzdHJ1Y3QgZndub2RlX29wZXJhdGlvbnMgb2ZfZndub2RlX29wcyA9IHtcbi0tXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTcyNy19O1xuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjE3Mjg6RVhQT1JUX1NZTUJPTF9HUEwob2ZfZndub2RlX29wcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTgxCgkJCQkJCQlvdXRwdXQ6IDE2MQoJCQkJCQkJdGhvdWdodHM6IDQ2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoZXNlIGNoYW5nZXMsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgYG9mX2xpbmtfdG9fcGhhbmRsZWAsIGJ1dCBpdCYjMzk7cyBjbGVhciB0aGUgcmVhbCBhY3Rpb24gaXMgaGFwcGVuaW5nIGVsc2V3aGVyZS4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAsIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgLCBhbmQgYGRldmljZV9saW5rc19kcml2ZXJfYm91bmRgLiBUaG9zZSBhcmUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgc2VlIGBPRmAsIGBQSFlMSUJgLCBhbmQgYE9GX01ESU9gLiBBaCwgYE9GX01ESU9gIGlzIHRyaXN0YXRlLCBtZWFuaW5nIGl0IGNhbiBiZSBhIG1vZHVsZS4gSWYgd2UgbmVlZCBpdCBidWlsdC1pbiwgd2UganVzdCB3YW50IHRvIHNwZWNpZnkgYE9GX01ESU9gIGRpcmVjdGx5LiBEb3VibGUtY2hlY2tpbmcuLi4geWVzLCBgQ09ORklHX09GX01ESU9gIGlzIGNvcnJlY3QuCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgcmVhY2hhYmlsaXR5LiBgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZGAgaXMgdHJpZ2dlcmVkIHdoZW4gYSBkcml2ZXIgYmluZHMgdG8gYSBkZXZpY2Ug4oCTIHN0cmFpZ2h0Zm9yd2FyZC4gYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAgaXMgcmVhY2hhYmxlIGR1cmluZyBkZXZpY2UgdHJlZS1iYXNlZCBNRElPIGJ1cyByZWdpc3RyYXRpb24uIEFuZCBhcyBJIGV4cGVjdGVkLCBgZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5YCBpcyBjYWxsZWQgZnJvbSBib3RoIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgIGFuZCBgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZGAsIHNvIGl0JiMzOTtzIGEgY2VudHJhbCBwb2ludCBvZiB0aGUgbW9kaWZpY2F0aW9ucy4KCkdpdmVuIHRoZXNlIGRlcGVuZGVuY2llcyBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gVGhleSByZXByZXNlbnQgYSBzaWduaWZpY2FudCBzaGlmdCBpbiBob3cgdGhlc2Ugc3Vic3lzdGVtcyBmdW5jdGlvbi4gVGhleSBhcmUgZ29pbmcgdG8gbmVlZCBtb3JlIGluLWRlcHRoIHRlc3RpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPRiYjMzQ7LAogICAgJiMzNDtQSFlMSUImIzM0OywKICAgICYjMzQ7T0ZfTURJTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seSYjMzQ7LAogICAgJiMzNDtfX29mX21kaW9idXNfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7ZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRldmljZSBsaW5rIG1hbmFnZW1lbnQgZnVuY3Rpb24gYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAgYW5kIG1vZGlmaWVzIGBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kYCBhbmQgYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAgdG8gdXNlIGl0LiBJdCBhbHNvIGNoYW5nZXMgT0YgcHJvcGVydHkgcGFyc2luZyB0byBoYW5kbGUgJiMzOTtldGhlcm5ldC1waHktcGFja2FnZSYjMzk7IG5vZGVzLiBUaGVzZSBhcmUgY29yZSBrZXJuZWwgYW5kIHN1YnN5c3RlbSBjaGFuZ2VzIHRoYXQgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09GJiMzNDssCiAgICAmIzM0O1BIWUxJQiYjMzQ7LAogICAgJiMzNDtPRl9NRElPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5JiMzNDssCiAgICAmIzM0O19fb2ZfbWRpb2J1c19yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZGV2aWNlIGxpbmsgbWFuYWdlbWVudCBmdW5jdGlvbiBgZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5YCBhbmQgbW9kaWZpZXMgYGRldmljZV9saW5rc19kcml2ZXJfYm91bmRgIGFuZCBgX19vZl9tZGlvYnVzX3JlZ2lzdGVyYCB0byB1c2UgaXQuIEl0IGFsc28gY2hhbmdlcyBPRiBwcm9wZXJ0eSBwYXJzaW5nIHRvIGhhbmRsZSAmIzM5O2V0aGVybmV0LXBoeS1wYWNrYWdlJiMzOTsgbm9kZXMuIFRoZXNlIGFyZSBjb3JlIGtlcm5lbCBhbmQgc3Vic3lzdGVtIGNoYW5nZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMDowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZGV2aWNlIGxpbmsgZnJhbWV3b3JrLCBNRElPIGJ1cyByZWdpc3RyYXRpb24sIGFuZCBPRiBwcm9wZXJ0eSBwYXJzaW5nIHRvIGhhbmRsZSBzeW5jLXN0YXRlLW9ubHkgbGlua3MgYW5kIGV0aGVybmV0LXBoeS1wYWNrYWdlIG5vZGVzLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUga2VybmVsLWludGVybmFsIHN0cnVjdHVyZXMgKGRldmljZSBsaW5rcywgZGV2aWNlIHRyZWUgbm9kZXMsIGxpc3RzKSBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IG1vZGlmeSBib3VuZHMgY2hlY2tpbmcgb3IgYnVmZmVyIGFsbG9jYXRpb25zIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIHVzZS1hZnRlci1mcmVlLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBsb2NraW5nIGlzc3Vlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxN2I5ZjE0ZWY1MGQ2M2UxNjRlNDJjZGM2ZDFkNTIzMmJkNWVlMzE5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMDA6MDU6MDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY29yZS5jIGIvZHJpdmVycy9iYXNlL2NvcmUuYwppbmRleCA0ZDAyNjY4Mjk0NGYyLi42MjdmY2ZhMjc0ZjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKQEAgLTEzMDUsNiAmIzQzOzEzMDUsNTcgQEAgc3RhdGljIHZvaWQgZGV2aWNlX2xpbmtfZHJvcF9tYW5hZ2VkKHN0cnVjdCBkZXZpY2VfbGluayAqbGluaykKIAlrcmVmX3B1dCgmYW1wO2xpbmstJmd0O2tyZWYsIF9fZGV2aWNlX2xpbmtfZGVsKTsKIH0KIAomIzQzOy8qIENhbGxlciBtdXN0IGhvbGQgdGhlIGRldmljZSBsaW5rcyB3cml0ZSBsb2NrLiAqLwomIzQzO3N0YXRpYyB2b2lkIF9fZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KHN0cnVjdCBkZXZpY2UgKmRldiwKJiM0MzsJCQkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpzeW5jX2xpc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlX2xpbmsgKmxpbmssICpsbjsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxpbmssIGxuLCAmYW1wO2Rldi0mZ3Q7bGlua3Muc3VwcGxpZXJzLCBjX25vZGUpIHsKJiM0MzsJCXN0cnVjdCBkZXZpY2UgKnN1cHBsaWVyOwomIzQzOwomIzQzOwkJaWYgKCFkZXZpY2VfbGlua190ZXN0KGxpbmssIERMX0ZMQUdfTUFOQUdFRCkgfHwKJiM0MzsJCSAgICAhZGV2aWNlX2xpbmtfdGVzdChsaW5rLCBETF9GTEFHX1NZTkNfU1RBVEVfT05MWSkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogRExfRkxBR19TWU5DX1NUQVRFX09OTFkgZXhjbHVkZXMgYWxsIG90aGVyIG1hbmFnZWQgbGluayBmbGFncywKJiM0MzsJCSAqIHNvIGl0IGlzIHNhZmUgdG8gZHJvcCB0aGUgbWFuYWdlZCBsaW5rIGNvbXBsZXRlbHkuCiYjNDM7CQkgKi8KJiM0MzsJCXN1cHBsaWVyID0gbGluay0mZ3Q7c3VwcGxpZXI7CiYjNDM7CQlkZXZpY2VfbGlua19kcm9wX21hbmFnZWQobGluayk7CiYjNDM7CiYjNDM7CQlpZiAoZGVmZXJfc3luY19zdGF0ZV9jb3VudCkKJiM0MzsJCQlfX2RldmljZV9saW5rc19zdXBwbGllcl9kZWZlcl9zeW5jKHN1cHBsaWVyKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlfX2RldmljZV9saW5rc19xdWV1ZV9zeW5jX3N0YXRlKHN1cHBsaWVyLCBzeW5jX2xpc3QpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seSAtIERyb3AgbWFuYWdlZCBzeW5jLXN0YXRlLW9ubHkgbGlua3MKJiM0MzsgKiBAZGV2OiBDb25zdW1lciBkZXZpY2Ugd2hvc2UgcHJveHkgbGlua3Mgc2hvdWxkIGJlIGRyb3BwZWQKJiM0MzsgKgomIzQzOyAqIEZyYW1ld29ya3Mgd2hpY2ggcG9wdWxhdGUgY2hpbGQgZGV2aWNlcyBiZWxvdyBhIGRyaXZlcmxlc3MgZGV2aWNlIGNhbiBjYWxsCiYjNDM7ICogdGhpcyBhZnRlciBhZGRpbmcgYWxsIG9mIHRoZSBjaGlsZHJlbi4gVGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSBhY3F1aXJlZCB0aGVpcgomIzQzOyAqIG93biBsaW5rcyBieSB0aGVuLCBzbyB0aGUgdGVtcG9yYXJ5IGxpbmtzIHdoaWNoIG9ubHkgcHJldmVudCBzdXBwbGllcnMgZnJvbQomIzQzOyAqIHJlY2VpdmluZyBzeW5jX3N0YXRlKCkgY2FsbGJhY2tzIGFyZSBubyBsb25nZXIgbmVlZGVkLgomIzQzOyAqCiYjNDM7ICogUmUtZXZhbHVhdGUgZWFjaCBhZmZlY3RlZCBzdXBwbGllciBmb3IgYSBzeW5jX3N0YXRlKCkgY2FsbGJhY2sgYWZ0ZXIgaXRzCiYjNDM7ICogbGluayBpcyBkcm9wcGVkLgomIzQzOyAqLwomIzQzO3ZvaWQgZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KHN0cnVjdCBkZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CUxJU1RfSEVBRChzeW5jX2xpc3QpOwomIzQzOwomIzQzOwlkZXZpY2VfbGlua3Nfd3JpdGVfbG9jaygpOwomIzQzOwlfX2RldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seShkZXYsICZhbXA7c3luY19saXN0KTsKJiM0MzsJZGV2aWNlX2xpbmtzX3dyaXRlX3VubG9jaygpOwomIzQzOwomIzQzOwlkZXZpY2VfbGlua3NfZmx1c2hfc3luY19saXN0KCZhbXA7c3luY19saXN0LCBOVUxMKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KTsKJiM0MzsKIHN0YXRpYyBzc2l6ZV90IHdhaXRpbmdfZm9yX3N1cHBsaWVyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCQkgY29uc3Qgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJCSBjaGFyICpidWYpCkBAIC0xNDE4LDYgJiM0MzsxNDY5LDggQEAgdm9pZCBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIAllbHNlCiAJCV9fZGV2aWNlX2xpbmtzX3F1ZXVlX3N5bmNfc3RhdGUoZGV2LCAmYW1wO3N5bmNfbGlzdCk7CiAKJiM0MzsJX19kZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkoZGV2LCAmYW1wO3N5bmNfbGlzdCk7CiYjNDM7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxpbmssIGxuLCAmYW1wO2Rldi0mZ3Q7bGlua3Muc3VwcGxpZXJzLCBjX25vZGUpIHsKIAkJc3RydWN0IGRldmljZSAqc3VwcGxpZXI7CiAKQEAgLTE0MjUsMTcgJiM0MzsxNDc4LDEwIEBAIHZvaWQgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJCQljb250aW51ZTsKIAogCQlzdXBwbGllciA9IGxpbmstJmd0O3N1cHBsaWVyOwotCQlpZiAoZGV2aWNlX2xpbmtfdGVzdChsaW5rLCBETF9GTEFHX1NZTkNfU1RBVEVfT05MWSkpIHsKLQkJCS8qCi0JCQkgKiBXaGVuIERMX0ZMQUdfU1lOQ19TVEFURV9PTkxZIGlzIHNldCwgaXQgbWVhbnMgbm8KLQkJCSAqIG90aGVyIERMX01BTkFHRURfTElOS19GTEFHUyBoYXZlIGJlZW4gc2V0LiBTbywgaXQmIzM5O3MKLQkJCSAqIHNhdmUgdG8gZHJvcCB0aGUgbWFuYWdlZCBsaW5rIGNvbXBsZXRlbHkuCi0JCQkgKi8KLQkJCWRldmljZV9saW5rX2Ryb3BfbWFuYWdlZChsaW5rKTsKLQkJfSBlbHNlIGlmIChkZXZfaXNfYmVzdF9lZmZvcnQoZGV2KSAmYW1wOyZhbXA7Ci0JCQkgICBkZXZpY2VfbGlua190ZXN0KGxpbmssIERMX0ZMQUdfSU5GRVJSRUQpICZhbXA7JmFtcDsKLQkJCSAgIGxpbmstJmd0O3N0YXR1cyAhPSBETF9TVEFURV9DT05TVU1FUl9QUk9CRSAmYW1wOyZhbXA7Ci0JCQkgICAhZGV2X2Nhbl9tYXRjaChsaW5rLSZndDtzdXBwbGllcikpIHsKJiM0MzsJCWlmIChkZXZfaXNfYmVzdF9lZmZvcnQoZGV2KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgZGV2aWNlX2xpbmtfdGVzdChsaW5rLCBETF9GTEFHX0lORkVSUkVEKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbGluay0mZ3Q7c3RhdHVzICE9IERMX1NUQVRFX0NPTlNVTUVSX1BST0JFICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhZGV2X2Nhbl9tYXRjaChsaW5rLSZndDtzdXBwbGllcikpIHsKIAkJCS8qCiAJCQkgKiBXaGVuIGRldl9pc19iZXN0X2VmZm9ydCgpIGlzIHRydWUsIHdlIGlnbm9yZSBkZXZpY2UKIAkJCSAqIGxpbmtzIHRvIHN1cHBsaWVycyB0aGF0IGRvbiYjMzk7dCBoYXZlIGEgZHJpdmVyLiAgSWYgdGhlCkBAIC0xNDQ5LDEyICYjNDM7MTQ5NSw2IEBAIHZvaWQgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJCQlXUklURV9PTkNFKGxpbmstJmd0O3N0YXR1cywgRExfU1RBVEVfQUNUSVZFKTsKIAkJfQogCi0JCS8qCi0JCSAqIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBldmVuIGZvciB0aGUgZGVsZXRlZAotCQkgKiBETF9GTEFHX1NZTkNfU1RBVEVfT05MWSBkZXZpY2UgbGluayBpbiBjYXNlIGl0IHdhcyB0aGUgbGFzdAotCQkgKiBkZXZpY2UgbGluayB0aGF0IHdhcyBwcmV2ZW50aW5nIHRoZSBzdXBwbGllciBmcm9tIGdldHRpbmcgYQotCQkgKiBzeW5jX3N0YXRlKCkgY2FsbC4KLQkJICovCiAJCWlmIChkZWZlcl9zeW5jX3N0YXRlX2NvdW50KQogCQkJX19kZXZpY2VfbGlua3Nfc3VwcGxpZXJfZGVmZXJfc3luYyhzdXBwbGllcik7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jIGIvZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMKaW5kZXggYjhkMjk4YzA0ZDNmZi4uNDlmOWI0MDYyY2Y1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMKQEAgLTIyOSw3ICYjNDM7MjI5LDcgQEAgaW50IF9fb2ZfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJZ290byB1bnJlZ2lzdGVyOwogCiAJaWYgKCFzY2FucGh5cykKLQkJcmV0dXJuIDA7CiYjNDM7CQlnb3RvIGRvbmU7CiAKIAkvKiBhdXRvIHNjYW4gZm9yIFBIWXMgd2l0aCBlbXB0eSByZWcgcHJvcGVydHkgKi8KIAlmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZShucCwgY2hpbGQpIHsKQEAgLTI2MSw2ICYjNDM7MjYxLDkgQEAgaW50IF9fb2ZfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJfQogCX0KIAomIzQzO2RvbmU6CiYjNDM7CWRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seSgmYW1wO21kaW8tJmd0O2Rldik7CiYjNDM7CiAJcmV0dXJuIDA7CiAKIHB1dF91bnJlZ2lzdGVyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9wcm9wZXJ0eS5jIGIvZHJpdmVycy9vZi9wcm9wZXJ0eS5jCmluZGV4IDcyY2YxMjkwN2RlMDMuLmQ1OWJjYjFmMjlkZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2YvcHJvcGVydHkuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL29mL3Byb3BlcnR5LmMKQEAgLTEyNzIsNiAmIzQzOzEyNzIsMjAgQEAgc3RhdGljIHZvaWQgb2ZfbGlua190b19waGFuZGxlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29uX25wLAogCQl0bXBfbnAgPSBvZl9nZXRfbmV4dF9wYXJlbnQodG1wX25wKTsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogQW4gRXRoZXJuZXQgUEhZIHBhY2thZ2Ugbm9kZSBkZXNjcmliZXMgcmVzb3VyY2VzIHNoYXJlZCBieSBpdHMgbWVtYmVyCiYjNDM7CSAqIFBIWXMsIGJ1dCBpcyBub3QgcG9wdWxhdGVkIGFzIGEgc3RydWN0IGRldmljZS4gTGluayBldmVyeSBlbmFibGVkCiYjNDM7CSAqIG1lbWJlciBQSFkgdG8gdGhvc2Ugc3VwcGxpZXJzIHNvIGZ3X2RldmxpbmsgY2FuIHVzZSB0aGUgcmVhbCBjb25zdW1lcgomIzQzOwkgKiBkZXZpY2VzIGluc3RlYWQgb2YgbGVhdmluZyBhIHByb3h5IGxpbmsgb24gdGhlIE1ESU8gYnVzIGluZGVmaW5pdGVseS4KJiM0MzsJICovCiYjNDM7CWlmIChvZl9ub2RlX25hbWVfZXEoY29uX25wLCAmIzM0O2V0aGVybmV0LXBoeS1wYWNrYWdlJiMzNDspKSB7CiYjNDM7CQlmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZV9zY29wZWQoY29uX25wLCBjaGlsZCkKJiM0MzsJCQlmd25vZGVfbGlua19hZGQob2ZfZndub2RlX2hhbmRsZShjaGlsZCksCiYjNDM7CQkJCQlvZl9md25vZGVfaGFuZGxlKHN1cF9ucCksIGZsYWdzKTsKJiM0MzsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCWZ3bm9kZV9saW5rX2FkZChvZl9md25vZGVfaGFuZGxlKGNvbl9ucCksIG9mX2Z3bm9kZV9oYW5kbGUoc3VwX25wKSwgZmxhZ3MpOwogfQogCkBAIC0xNjIwLDcgJiM0MzsxNjM0LDkgQEAgc3RhdGljIGludCBvZl9saW5rX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29uX25wLCBjb25zdCBjaGFyICpwcm9wX25hbWUpCiAKIAkJCW1hdGNoZWQgPSB0cnVlOwogCQkJaSYjNDM7JiM0Mzs7Ci0JCQlvZl9saW5rX3RvX3BoYW5kbGUoY29uX2Rldl9ucCwgcGhhbmRsZSwgcy0mZ3Q7ZndsaW5rX2ZsYWdzKTsKJiM0MzsJCQlpZiAoY29uX2Rldl9ucCkKJiM0MzsJCQkJb2ZfbGlua190b19waGFuZGxlKGNvbl9kZXZfbnAsIHBoYW5kbGUsCiYjNDM7CQkJCQkJICAgcy0mZ3Q7ZndsaW5rX2ZsYWdzKTsKIAkJCW9mX25vZGVfcHV0KHBoYW5kbGUpOwogCQl9CiAJCXMmIzQzOyYjNDM7OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKaW5kZXggYWVlNzlmZDZiMzJiNC4uOGFmYjlmMmIwZDgyNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCkBAIC0xMzgxLDYgJiM0MzsxMzgxLDcgQEAgc3RydWN0IGRldmljZV9saW5rICpkZXZpY2VfbGlua19hZGQoc3RydWN0IGRldmljZSAqY29uc3VtZXIsCiAJCQkJICAgIHN0cnVjdCBkZXZpY2UgKnN1cHBsaWVyLCB1MzIgZmxhZ3MpOwogdm9pZCBkZXZpY2VfbGlua19kZWwoc3RydWN0IGRldmljZV9saW5rICpsaW5rKTsKIHZvaWQgZGV2aWNlX2xpbmtfcmVtb3ZlKHZvaWQgKmNvbnN1bWVyLCBzdHJ1Y3QgZGV2aWNlICpzdXBwbGllcik7CiYjNDM7dm9pZCBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkoc3RydWN0IGRldmljZSAqZGV2KTsKIHZvaWQgZGV2aWNlX2xpbmtzX3N1cHBsaWVyX3N5bmNfc3RhdGVfcGF1c2Uodm9pZCk7CiB2b2lkIGRldmljZV9saW5rc19zdXBwbGllcl9zeW5jX3N0YXRlX3Jlc3VtZSh2b2lkKTsKIHZvaWQgZGV2aWNlX2xpbmtfd2FpdF9yZW1vdmFsKHZvaWQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEzNAoJCQkJCQkJb3V0cHV0OiAxNTcKCQkJCQkJCXRob3VnaHRzOiAzNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRGV2aWNlIExpbmsgRnJhbWV3b3JrIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBpbmZyYXN0cnVjdHVyZTogdGhlIGRldmljZSBsaW5rIGZyYW1ld29yayBpbiBgY29yZS5jYCwgTURJTyBidXMgcmVnaXN0cmF0aW9uLCBhbmQgT0YgcHJvcGVydHkgcGFyc2luZy4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBpbnRyb2R1Y2luZyB0aGlzIG5ldyBgZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KClgIGZ1bmN0aW9uLCBhbmQgY2FsbGluZyBpdCBkdXJpbmcgTURJTyBidXMgcmVnaXN0cmF0aW9uLiBJdCYjMzk7cyBhbHNvIG1ha2luZyBhIHNtYWxsIHR3ZWFrIHRvIGBvZl9saW5rX3RvX3BoYW5kbGUoKWAgdG8gaGFuZGxlICYjMzQ7ZXRoZXJuZXQtcGh5LXBhY2thZ2UmIzM0OyBub2Rlcy4KCk15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBCdXQgZnJvbSB3aGF0IEkgY2FuIHNlZSwgdGhpcyBpcyBwdXJlbHkgbG9naWNhbC4gSXQmIzM5O3Mgd29ya2luZyB3aXRoIGRldmljZSBsaW5rcywgbGlzdHMsIGFuZCB0aGUgZGV2aWNlIHRyZWUg4oCTIGFsbCBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlcy4gTm90aGluZyBuZXcgaXMgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCBhbmQgcGFydGlhbGx5IGluaXRpYWxpemVkLiBUaGUgY29kZSBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIGludHJvZHVjaW5nIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gYnVmZmVyIG92ZXJmbG93cyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlIHByaW1hcnkgcmlza3MgaGVyZSBhcmUgdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGxvZ2ljYWwgZXJyb3JzIGxpa2UgZGVhZGxvY2tzIG9yIGluY29ycmVjdCBzdGF0ZSB0cmFuc2l0aW9ucy4gVGhlc2UgYXJlIGV4YWN0bHkgdGhlIHR5cGVzIG9mIHByb2JsZW1zIEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgYXJlIGRlc2lnbmVkIHRvIGNhdGNoLiBTbywgYmFzZWQgb24gdGhlIHNjb3BlIGFuZCBuYXR1cmUgb2YgdGhlIG1vZGlmaWNhdGlvbnMsIEkgc2VlIG5vIHJlYXNvbiB0byBzcGluIHVwIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBmb3IgdGhpcy4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIGZpbmFsIGNoZWNrIGZvciBhbnkgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBqdXN0IHRvIGJlIGV4dHJhIHN1cmUuIGB3YWl0aW5nX2Zvcl9zdXBwbGllcl9zaG93YCBpc24mIzM5O3QgbW9kaWZpZWQsIG9ubHkgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQsIHdoaWNoIGlzIGdvb2QuIGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgIGlzIGV4cG9ydGVkLCBidXQgaXQmIzM5O3MganVzdCBtYW5pcHVsYXRpbmcgaW50ZXJuYWwgbGlzdHMsIHNvIHRoYXQmIzM5O3Mgbm90IGEgY29uY2Vybi4gYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAgaXMgaW50ZXJuYWwsIGFuZCBgb2ZfbGlua19wcm9wZXJ0eWAgaXMgaW50ZXJuYWwgYXMgd2VsbC4KCkFscmlnaHQsIG5vIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gYW5kIG5vIGFwcGFyZW50IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBXZSBzaG91bGQgYmUgZ29vZCB0byBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRldmljZSBsaW5rIGZyYW1ld29yaywgTURJTyBidXMgcmVnaXN0cmF0aW9uLCBhbmQgT0YgcHJvcGVydHkgcGFyc2luZyB0byBoYW5kbGUgc3luYy1zdGF0ZS1vbmx5IGxpbmtzIGFuZCBldGhlcm5ldC1waHktcGFja2FnZSBub2Rlcy4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGtlcm5lbC1pbnRlcm5hbCBzdHJ1Y3R1cmVzIChkZXZpY2UgbGlua3MsIGRldmljZSB0cmVlIG5vZGVzLCBsaXN0cykgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBtb2RpZnkgYm91bmRzIGNoZWNraW5nIG9yIGJ1ZmZlciBhbGxvY2F0aW9ucyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbG9ja2luZyBpc3N1ZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkZXZpY2UgbGluayBmcmFtZXdvcmssIE1ESU8gYnVzIHJlZ2lzdHJhdGlvbiwgYW5kIE9GIHByb3BlcnR5IHBhcnNpbmcgdG8gaGFuZGxlIHN5bmMtc3RhdGUtb25seSBsaW5rcyBhbmQgZXRoZXJuZXQtcGh5LXBhY2thZ2Ugbm9kZXMuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBrZXJuZWwtaW50ZXJuYWwgc3RydWN0dXJlcyAoZGV2aWNlIGxpbmtzLCBkZXZpY2UgdHJlZSBub2RlcywgbGlzdHMpIGFuZCBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgbW9kaWZ5IGJvdW5kcyBjaGVja2luZyBvciBidWZmZXIgYWxsb2NhdGlvbnMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGxvY2tpbmcgaXNzdWVzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA1OjA0LjkwODM1MjMwMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjU5ODg1NzY4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPRlwiLFxuICAgIFwiUEhZTElCXCIsXG4gICAgXCJPRl9NRElPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5XCIsXG4gICAgXCJfX29mX21kaW9idXNfcmVnaXN0ZXJcIixcbiAgICBcImRldmljZV9saW5rc19kcml2ZXJfYm91bmRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkZXZpY2UgbGluayBmcmFtZXdvcmssIE1ESU8gYnVzIHJlZ2lzdHJhdGlvbiwgYW5kIE9GIHByb3BlcnR5IHBhcnNpbmcgdG8gaGFuZGxlIHN5bmMtc3RhdGUtb25seSBsaW5rcyBhbmQgZXRoZXJuZXQtcGh5LXBhY2thZ2Ugbm9kZXMuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBrZXJuZWwtaW50ZXJuYWwgc3RydWN0dXJlcyAoZGV2aWNlIGxpbmtzLCBkZXZpY2UgdHJlZSBub2RlcywgbGlzdHMpIGFuZCBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgbW9kaWZ5IGJvdW5kcyBjaGVja2luZyBvciBidWZmZXIgYWxsb2NhdGlvbnMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgdXNlLWFmdGVyLWZyZWUsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGxvY2tpbmcgaXNzdWVzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkZXZpY2UgbGluayBtYW5hZ2VtZW50IGZ1bmN0aW9uIGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgIGFuZCBtb2RpZmllcyBgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZGAgYW5kIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgIHRvIHVzZSBpdC4gSXQgYWxzbyBjaGFuZ2VzIE9GIHByb3BlcnR5IHBhcnNpbmcgdG8gaGFuZGxlICdldGhlcm5ldC1waHktcGFja2FnZScgbm9kZXMuIFRoZXNlIGFyZSBjb3JlIGtlcm5lbCBhbmQgc3Vic3lzdGVtIGNoYW5nZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDU6MDQuOTA4MzU5MjkyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTc5NDkzNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxN2I5ZjE0ZWY1MGQ2M2UxNjRlNDJjZGM2ZDFkNTIzMmJkNWVlMzE5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDE3IDAwOjA1OjA0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jb3JlLmMgYi9kcml2ZXJzL2Jhc2UvY29yZS5jXFxuaW5kZXggNGQwMjY2ODI5NDRmMi4uNjI3ZmNmYTI3NGYwZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jhc2UvY29yZS5jXFxuKysrIGIvZHJpdmVycy9iYXNlL2NvcmUuY1xcbkBAIC0xMzA1LDYgKzEzMDUsNTcgQEAgc3RhdGljIHZvaWQgZGV2aWNlX2xpbmtfZHJvcF9tYW5hZ2VkKHN0cnVjdCBkZXZpY2VfbGluayAqbGluaylcXG4gXFx0a3JlZl9wdXQoXFx1MDAyNmxpbmstXFx1MDAzZWtyZWYsIF9fZGV2aWNlX2xpbmtfZGVsKTtcXG4gfVxcbiBcXG4rLyogQ2FsbGVyIG11c3QgaG9sZCB0aGUgZGV2aWNlIGxpbmtzIHdyaXRlIGxvY2suICovXFxuK3N0YXRpYyB2b2lkIF9fZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KHN0cnVjdCBkZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqc3luY19saXN0KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2VfbGluayAqbGluaywgKmxuO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxpbmssIGxuLCBcXHUwMDI2ZGV2LVxcdTAwM2VsaW5rcy5zdXBwbGllcnMsIGNfbm9kZSkge1xcbitcXHRcXHRzdHJ1Y3QgZGV2aWNlICpzdXBwbGllcjtcXG4rXFxuK1xcdFxcdGlmICghZGV2aWNlX2xpbmtfdGVzdChsaW5rLCBETF9GTEFHX01BTkFHRUQpIHx8XFxuK1xcdFxcdCAgICAhZGV2aWNlX2xpbmtfdGVzdChsaW5rLCBETF9GTEFHX1NZTkNfU1RBVEVfT05MWSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRExfRkxBR19TWU5DX1NUQVRFX09OTFkgZXhjbHVkZXMgYWxsIG90aGVyIG1hbmFnZWQgbGluayBmbGFncyxcXG4rXFx0XFx0ICogc28gaXQgaXMgc2FmZSB0byBkcm9wIHRoZSBtYW5hZ2VkIGxpbmsgY29tcGxldGVseS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHN1cHBsaWVyID0gbGluay1cXHUwMDNlc3VwcGxpZXI7XFxuK1xcdFxcdGRldmljZV9saW5rX2Ryb3BfbWFuYWdlZChsaW5rKTtcXG4rXFxuK1xcdFxcdGlmIChkZWZlcl9zeW5jX3N0YXRlX2NvdW50KVxcbitcXHRcXHRcXHRfX2RldmljZV9saW5rc19zdXBwbGllcl9kZWZlcl9zeW5jKHN1cHBsaWVyKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRfX2RldmljZV9saW5rc19xdWV1ZV9zeW5jX3N0YXRlKHN1cHBsaWVyLCBzeW5jX2xpc3QpO1xcbitcXHR9XFxuK31cXG4rXFxuKy8qKlxcbisgKiBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkgLSBEcm9wIG1hbmFnZWQgc3luYy1zdGF0ZS1vbmx5IGxpbmtzXFxuKyAqIEBkZXY6IENvbnN1bWVyIGRldmljZSB3aG9zZSBwcm94eSBsaW5rcyBzaG91bGQgYmUgZHJvcHBlZFxcbisgKlxcbisgKiBGcmFtZXdvcmtzIHdoaWNoIHBvcHVsYXRlIGNoaWxkIGRldmljZXMgYmVsb3cgYSBkcml2ZXJsZXNzIGRldmljZSBjYW4gY2FsbFxcbisgKiB0aGlzIGFmdGVyIGFkZGluZyBhbGwgb2YgdGhlIGNoaWxkcmVuLiBUaGUgY2hpbGRyZW4gd2lsbCBoYXZlIGFjcXVpcmVkIHRoZWlyXFxuKyAqIG93biBsaW5rcyBieSB0aGVuLCBzbyB0aGUgdGVtcG9yYXJ5IGxpbmtzIHdoaWNoIG9ubHkgcHJldmVudCBzdXBwbGllcnMgZnJvbVxcbisgKiByZWNlaXZpbmcgc3luY19zdGF0ZSgpIGNhbGxiYWNrcyBhcmUgbm8gbG9uZ2VyIG5lZWRlZC5cXG4rICpcXG4rICogUmUtZXZhbHVhdGUgZWFjaCBhZmZlY3RlZCBzdXBwbGllciBmb3IgYSBzeW5jX3N0YXRlKCkgY2FsbGJhY2sgYWZ0ZXIgaXRzXFxuKyAqIGxpbmsgaXMgZHJvcHBlZC5cXG4rICovXFxuK3ZvaWQgZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KHN0cnVjdCBkZXZpY2UgKmRldilcXG4re1xcbitcXHRMSVNUX0hFQUQoc3luY19saXN0KTtcXG4rXFxuK1xcdGRldmljZV9saW5rc193cml0ZV9sb2NrKCk7XFxuK1xcdF9fZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KGRldiwgXFx1MDAyNnN5bmNfbGlzdCk7XFxuK1xcdGRldmljZV9saW5rc193cml0ZV91bmxvY2soKTtcXG4rXFxuK1xcdGRldmljZV9saW5rc19mbHVzaF9zeW5jX2xpc3QoXFx1MDAyNnN5bmNfbGlzdCwgTlVMTCk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KTtcXG4rXFxuIHN0YXRpYyBzc2l6ZV90IHdhaXRpbmdfZm9yX3N1cHBsaWVyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuIFxcdFxcdFxcdFxcdFxcdCBjaGFyICpidWYpXFxuQEAgLTE0MTgsNiArMTQ2OSw4IEBAIHZvaWQgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdGVsc2VcXG4gXFx0XFx0X19kZXZpY2VfbGlua3NfcXVldWVfc3luY19zdGF0ZShkZXYsIFxcdTAwMjZzeW5jX2xpc3QpO1xcbiBcXG4rXFx0X19kZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkoZGV2LCBcXHUwMDI2c3luY19saXN0KTtcXG4rXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsaW5rLCBsbiwgXFx1MDAyNmRldi1cXHUwMDNlbGlua3Muc3VwcGxpZXJzLCBjX25vZGUpIHtcXG4gXFx0XFx0c3RydWN0IGRldmljZSAqc3VwcGxpZXI7XFxuIFxcbkBAIC0xNDI1LDE3ICsxNDc4LDEwIEBAIHZvaWQgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0c3VwcGxpZXIgPSBsaW5rLVxcdTAwM2VzdXBwbGllcjtcXG4tXFx0XFx0aWYgKGRldmljZV9saW5rX3Rlc3QobGluaywgRExfRkxBR19TWU5DX1NUQVRFX09OTFkpKSB7XFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIFdoZW4gRExfRkxBR19TWU5DX1NUQVRFX09OTFkgaXMgc2V0LCBpdCBtZWFucyBub1xcbi1cXHRcXHRcXHQgKiBvdGhlciBETF9NQU5BR0VEX0xJTktfRkxBR1MgaGF2ZSBiZWVuIHNldC4gU28sIGl0J3NcXG4tXFx0XFx0XFx0ICogc2F2ZSB0byBkcm9wIHRoZSBtYW5hZ2VkIGxpbmsgY29tcGxldGVseS5cXG4tXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGRldmljZV9saW5rX2Ryb3BfbWFuYWdlZChsaW5rKTtcXG4tXFx0XFx0fSBlbHNlIGlmIChkZXZfaXNfYmVzdF9lZmZvcnQoZGV2KSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICBkZXZpY2VfbGlua190ZXN0KGxpbmssIERMX0ZMQUdfSU5GRVJSRUQpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgIGxpbmstXFx1MDAzZXN0YXR1cyAhPSBETF9TVEFURV9DT05TVU1FUl9QUk9CRSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAhZGV2X2Nhbl9tYXRjaChsaW5rLVxcdTAwM2VzdXBwbGllcikpIHtcXG4rXFx0XFx0aWYgKGRldl9pc19iZXN0X2VmZm9ydChkZXYpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBkZXZpY2VfbGlua190ZXN0KGxpbmssIERMX0ZMQUdfSU5GRVJSRUQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBsaW5rLVxcdTAwM2VzdGF0dXMgIT0gRExfU1RBVEVfQ09OU1VNRVJfUFJPQkUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFkZXZfY2FuX21hdGNoKGxpbmstXFx1MDAzZXN1cHBsaWVyKSkge1xcbiBcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHQgKiBXaGVuIGRldl9pc19iZXN0X2VmZm9ydCgpIGlzIHRydWUsIHdlIGlnbm9yZSBkZXZpY2VcXG4gXFx0XFx0XFx0ICogbGlua3MgdG8gc3VwcGxpZXJzIHRoYXQgZG9uJ3QgaGF2ZSBhIGRyaXZlci4gIElmIHRoZVxcbkBAIC0xNDQ5LDEyICsxNDk1LDYgQEAgdm9pZCBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0XFx0XFx0V1JJVEVfT05DRShsaW5rLVxcdTAwM2VzdGF0dXMsIERMX1NUQVRFX0FDVElWRSk7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBldmVuIGZvciB0aGUgZGVsZXRlZFxcbi1cXHRcXHQgKiBETF9GTEFHX1NZTkNfU1RBVEVfT05MWSBkZXZpY2UgbGluayBpbiBjYXNlIGl0IHdhcyB0aGUgbGFzdFxcbi1cXHRcXHQgKiBkZXZpY2UgbGluayB0aGF0IHdhcyBwcmV2ZW50aW5nIHRoZSBzdXBwbGllciBmcm9tIGdldHRpbmcgYVxcbi1cXHRcXHQgKiBzeW5jX3N0YXRlKCkgY2FsbC5cXG4tXFx0XFx0ICovXFxuIFxcdFxcdGlmIChkZWZlcl9zeW5jX3N0YXRlX2NvdW50KVxcbiBcXHRcXHRcXHRfX2RldmljZV9saW5rc19zdXBwbGllcl9kZWZlcl9zeW5jKHN1cHBsaWVyKTtcXG4gXFx0XFx0ZWxzZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYyBiL2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jXFxuaW5kZXggYjhkMjk4YzA0ZDNmZi4uNDlmOWI0MDYyY2Y1YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uY1xcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jXFxuQEAgLTIyOSw3ICsyMjksNyBAQCBpbnQgX19vZl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbiBcXHRcXHRnb3RvIHVucmVnaXN0ZXI7XFxuIFxcbiBcXHRpZiAoIXNjYW5waHlzKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0Z290byBkb25lO1xcbiBcXG4gXFx0LyogYXV0byBzY2FuIGZvciBQSFlzIHdpdGggZW1wdHkgcmVnIHByb3BlcnR5ICovXFxuIFxcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKG5wLCBjaGlsZCkge1xcbkBAIC0yNjEsNiArMjYxLDkgQEAgaW50IF9fb2ZfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitkb25lOlxcbitcXHRkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkoXFx1MDAyNm1kaW8tXFx1MDAzZWRldik7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIHB1dF91bnJlZ2lzdGVyOlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL3Byb3BlcnR5LmMgYi9kcml2ZXJzL29mL3Byb3BlcnR5LmNcXG5pbmRleCA3MmNmMTI5MDdkZTAzLi5kNTliY2IxZjI5ZGUwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvb2YvcHJvcGVydHkuY1xcbisrKyBiL2RyaXZlcnMvb2YvcHJvcGVydHkuY1xcbkBAIC0xMjcyLDYgKzEyNzIsMjAgQEAgc3RhdGljIHZvaWQgb2ZfbGlua190b19waGFuZGxlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29uX25wLFxcbiBcXHRcXHR0bXBfbnAgPSBvZl9nZXRfbmV4dF9wYXJlbnQodG1wX25wKTtcXG4gXFx0fVxcbiBcXG4rXFx0LypcXG4rXFx0ICogQW4gRXRoZXJuZXQgUEhZIHBhY2thZ2Ugbm9kZSBkZXNjcmliZXMgcmVzb3VyY2VzIHNoYXJlZCBieSBpdHMgbWVtYmVyXFxuK1xcdCAqIFBIWXMsIGJ1dCBpcyBub3QgcG9wdWxhdGVkIGFzIGEgc3RydWN0IGRldmljZS4gTGluayBldmVyeSBlbmFibGVkXFxuK1xcdCAqIG1lbWJlciBQSFkgdG8gdGhvc2Ugc3VwcGxpZXJzIHNvIGZ3X2RldmxpbmsgY2FuIHVzZSB0aGUgcmVhbCBjb25zdW1lclxcbitcXHQgKiBkZXZpY2VzIGluc3RlYWQgb2YgbGVhdmluZyBhIHByb3h5IGxpbmsgb24gdGhlIE1ESU8gYnVzIGluZGVmaW5pdGVseS5cXG4rXFx0ICovXFxuK1xcdGlmIChvZl9ub2RlX25hbWVfZXEoY29uX25wLCBcXFwiZXRoZXJuZXQtcGh5LXBhY2thZ2VcXFwiKSkge1xcbitcXHRcXHRmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZV9zY29wZWQoY29uX25wLCBjaGlsZClcXG4rXFx0XFx0XFx0Zndub2RlX2xpbmtfYWRkKG9mX2Z3bm9kZV9oYW5kbGUoY2hpbGQpLFxcbitcXHRcXHRcXHRcXHRcXHRvZl9md25vZGVfaGFuZGxlKHN1cF9ucCksIGZsYWdzKTtcXG4rXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4gXFx0Zndub2RlX2xpbmtfYWRkKG9mX2Z3bm9kZV9oYW5kbGUoY29uX25wKSwgb2ZfZndub2RlX2hhbmRsZShzdXBfbnApLCBmbGFncyk7XFxuIH1cXG4gXFxuQEAgLTE2MjAsNyArMTYzNCw5IEBAIHN0YXRpYyBpbnQgb2ZfbGlua19wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvbl9ucCwgY29uc3QgY2hhciAqcHJvcF9uYW1lKVxcbiBcXG4gXFx0XFx0XFx0bWF0Y2hlZCA9IHRydWU7XFxuIFxcdFxcdFxcdGkrKztcXG4tXFx0XFx0XFx0b2ZfbGlua190b19waGFuZGxlKGNvbl9kZXZfbnAsIHBoYW5kbGUsIHMtXFx1MDAzZWZ3bGlua19mbGFncyk7XFxuK1xcdFxcdFxcdGlmIChjb25fZGV2X25wKVxcbitcXHRcXHRcXHRcXHRvZl9saW5rX3RvX3BoYW5kbGUoY29uX2Rldl9ucCwgcGhhbmRsZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgcy1cXHUwMDNlZndsaW5rX2ZsYWdzKTtcXG4gXFx0XFx0XFx0b2Zfbm9kZV9wdXQocGhhbmRsZSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cysrO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaFxcbmluZGV4IGFlZTc5ZmQ2YjMyYjQuLjhhZmI5ZjJiMGQ4MjUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmhcXG5AQCAtMTM4MSw2ICsxMzgxLDcgQEAgc3RydWN0IGRldmljZV9saW5rICpkZXZpY2VfbGlua19hZGQoc3RydWN0IGRldmljZSAqY29uc3VtZXIsXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZGV2aWNlICpzdXBwbGllciwgdTMyIGZsYWdzKTtcXG4gdm9pZCBkZXZpY2VfbGlua19kZWwoc3RydWN0IGRldmljZV9saW5rICpsaW5rKTtcXG4gdm9pZCBkZXZpY2VfbGlua19yZW1vdmUodm9pZCAqY29uc3VtZXIsIHN0cnVjdCBkZXZpY2UgKnN1cHBsaWVyKTtcXG4rdm9pZCBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkoc3RydWN0IGRldmljZSAqZGV2KTtcXG4gdm9pZCBkZXZpY2VfbGlua3Nfc3VwcGxpZXJfc3luY19zdGF0ZV9wYXVzZSh2b2lkKTtcXG4gdm9pZCBkZXZpY2VfbGlua3Nfc3VwcGxpZXJfc3luY19zdGF0ZV9yZXN1bWUodm9pZCk7XFxuIHZvaWQgZGV2aWNlX2xpbmtfd2FpdF9yZW1vdmFsKHZvaWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNTowNS4zMjcwNjc3MzhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4NzcwMjM2Njc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPRlwiLFxuICAgIFwiUEhZTElCXCIsXG4gICAgXCJPRl9NRElPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5XCIsXG4gICAgXCJfX29mX21kaW9idXNfcmVnaXN0ZXJcIixcbiAgICBcImRldmljZV9saW5rc19kcml2ZXJfYm91bmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRldmljZSBsaW5rIG1hbmFnZW1lbnQgZnVuY3Rpb24gYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAgYW5kIG1vZGlmaWVzIGBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kYCBhbmQgYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAgdG8gdXNlIGl0LiBJdCBhbHNvIGNoYW5nZXMgT0YgcHJvcGVydHkgcGFyc2luZyB0byBoYW5kbGUgJ2V0aGVybmV0LXBoeS1wYWNrYWdlJyBub2Rlcy4gVGhlc2UgYXJlIGNvcmUga2VybmVsIGFuZCBzdWJzeXN0ZW0gY2hhbmdlcyB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxN2I5ZjE0ZWY1MGQ2M2UxNjRlNDJjZGM2ZDFkNTIzMmJkNWVlMzE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDA6MDU6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY29yZS5jIGIvZHJpdmVycy9iYXNlL2NvcmUuY1xuaW5kZXggNGQwMjY2ODI5NDRmMi4uNjI3ZmNmYTI3NGYwZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmFzZS9jb3JlLmNcbisrKyBiL2RyaXZlcnMvYmFzZS9jb3JlLmNcbkBAIC0xMzA1LDYgKzEzMDUsNTcgQEAgc3RhdGljIHZvaWQgZGV2aWNlX2xpbmtfZHJvcF9tYW5hZ2VkKHN0cnVjdCBkZXZpY2VfbGluayAqbGluaylcbiBcdGtyZWZfcHV0KFx1MDAyNmxpbmstXHUwMDNla3JlZiwgX19kZXZpY2VfbGlua19kZWwpO1xuIH1cbiBcbisvKiBDYWxsZXIgbXVzdCBob2xkIHRoZSBkZXZpY2UgbGlua3Mgd3JpdGUgbG9jay4gKi9cbitzdGF0aWMgdm9pZCBfX2RldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRcdFx0c3RydWN0IGxpc3RfaGVhZCAqc3luY19saXN0KVxuK3tcbitcdHN0cnVjdCBkZXZpY2VfbGluayAqbGluaywgKmxuO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxpbmssIGxuLCBcdTAwMjZkZXYtXHUwMDNlbGlua3Muc3VwcGxpZXJzLCBjX25vZGUpIHtcbitcdFx0c3RydWN0IGRldmljZSAqc3VwcGxpZXI7XG4rXG4rXHRcdGlmICghZGV2aWNlX2xpbmtfdGVzdChsaW5rLCBETF9GTEFHX01BTkFHRUQpIHx8XG4rXHRcdCAgICAhZGV2aWNlX2xpbmtfdGVzdChsaW5rLCBETF9GTEFHX1NZTkNfU1RBVEVfT05MWSkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIERMX0ZMQUdfU1lOQ19TVEFURV9PTkxZIGV4Y2x1ZGVzIGFsbCBvdGhlciBtYW5hZ2VkIGxpbmsgZmxhZ3MsXG4rXHRcdCAqIHNvIGl0IGlzIHNhZmUgdG8gZHJvcCB0aGUgbWFuYWdlZCBsaW5rIGNvbXBsZXRlbHkuXG4rXHRcdCAqL1xuK1x0XHRzdXBwbGllciA9IGxpbmstXHUwMDNlc3VwcGxpZXI7XG4rXHRcdGRldmljZV9saW5rX2Ryb3BfbWFuYWdlZChsaW5rKTtcbitcbitcdFx0aWYgKGRlZmVyX3N5bmNfc3RhdGVfY291bnQpXG4rXHRcdFx0X19kZXZpY2VfbGlua3Nfc3VwcGxpZXJfZGVmZXJfc3luYyhzdXBwbGllcik7XG4rXHRcdGVsc2VcbitcdFx0XHRfX2RldmljZV9saW5rc19xdWV1ZV9zeW5jX3N0YXRlKHN1cHBsaWVyLCBzeW5jX2xpc3QpO1xuK1x0fVxuK31cbitcbisvKipcbisgKiBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkgLSBEcm9wIG1hbmFnZWQgc3luYy1zdGF0ZS1vbmx5IGxpbmtzXG4rICogQGRldjogQ29uc3VtZXIgZGV2aWNlIHdob3NlIHByb3h5IGxpbmtzIHNob3VsZCBiZSBkcm9wcGVkXG4rICpcbisgKiBGcmFtZXdvcmtzIHdoaWNoIHBvcHVsYXRlIGNoaWxkIGRldmljZXMgYmVsb3cgYSBkcml2ZXJsZXNzIGRldmljZSBjYW4gY2FsbFxuKyAqIHRoaXMgYWZ0ZXIgYWRkaW5nIGFsbCBvZiB0aGUgY2hpbGRyZW4uIFRoZSBjaGlsZHJlbiB3aWxsIGhhdmUgYWNxdWlyZWQgdGhlaXJcbisgKiBvd24gbGlua3MgYnkgdGhlbiwgc28gdGhlIHRlbXBvcmFyeSBsaW5rcyB3aGljaCBvbmx5IHByZXZlbnQgc3VwcGxpZXJzIGZyb21cbisgKiByZWNlaXZpbmcgc3luY19zdGF0ZSgpIGNhbGxiYWNrcyBhcmUgbm8gbG9uZ2VyIG5lZWRlZC5cbisgKlxuKyAqIFJlLWV2YWx1YXRlIGVhY2ggYWZmZWN0ZWQgc3VwcGxpZXIgZm9yIGEgc3luY19zdGF0ZSgpIGNhbGxiYWNrIGFmdGVyIGl0c1xuKyAqIGxpbmsgaXMgZHJvcHBlZC5cbisgKi9cbit2b2lkIGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4re1xuK1x0TElTVF9IRUFEKHN5bmNfbGlzdCk7XG4rXG4rXHRkZXZpY2VfbGlua3Nfd3JpdGVfbG9jaygpO1xuK1x0X19kZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkoZGV2LCBcdTAwMjZzeW5jX2xpc3QpO1xuK1x0ZGV2aWNlX2xpbmtzX3dyaXRlX3VubG9jaygpO1xuK1xuK1x0ZGV2aWNlX2xpbmtzX2ZsdXNoX3N5bmNfbGlzdChcdTAwMjZzeW5jX2xpc3QsIE5VTEwpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkpO1xuK1xuIHN0YXRpYyBzc2l6ZV90IHdhaXRpbmdfZm9yX3N1cHBsaWVyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4gXHRcdFx0XHRcdCBjaGFyICpidWYpXG5AQCAtMTQxOCw2ICsxNDY5LDggQEAgdm9pZCBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdGVsc2VcbiBcdFx0X19kZXZpY2VfbGlua3NfcXVldWVfc3luY19zdGF0ZShkZXYsIFx1MDAyNnN5bmNfbGlzdCk7XG4gXG4rXHRfX2RldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seShkZXYsIFx1MDAyNnN5bmNfbGlzdCk7XG4rXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobGluaywgbG4sIFx1MDAyNmRldi1cdTAwM2VsaW5rcy5zdXBwbGllcnMsIGNfbm9kZSkge1xuIFx0XHRzdHJ1Y3QgZGV2aWNlICpzdXBwbGllcjtcbiBcbkBAIC0xNDI1LDE3ICsxNDc4LDEwIEBAIHZvaWQgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHN1cHBsaWVyID0gbGluay1cdTAwM2VzdXBwbGllcjtcbi1cdFx0aWYgKGRldmljZV9saW5rX3Rlc3QobGluaywgRExfRkxBR19TWU5DX1NUQVRFX09OTFkpKSB7XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBXaGVuIERMX0ZMQUdfU1lOQ19TVEFURV9PTkxZIGlzIHNldCwgaXQgbWVhbnMgbm9cbi1cdFx0XHQgKiBvdGhlciBETF9NQU5BR0VEX0xJTktfRkxBR1MgaGF2ZSBiZWVuIHNldC4gU28sIGl0J3Ncbi1cdFx0XHQgKiBzYXZlIHRvIGRyb3AgdGhlIG1hbmFnZWQgbGluayBjb21wbGV0ZWx5LlxuLVx0XHRcdCAqL1xuLVx0XHRcdGRldmljZV9saW5rX2Ryb3BfbWFuYWdlZChsaW5rKTtcbi1cdFx0fSBlbHNlIGlmIChkZXZfaXNfYmVzdF9lZmZvcnQoZGV2KSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICBkZXZpY2VfbGlua190ZXN0KGxpbmssIERMX0ZMQUdfSU5GRVJSRUQpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgIGxpbmstXHUwMDNlc3RhdHVzICE9IERMX1NUQVRFX0NPTlNVTUVSX1BST0JFIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICFkZXZfY2FuX21hdGNoKGxpbmstXHUwMDNlc3VwcGxpZXIpKSB7XG4rXHRcdGlmIChkZXZfaXNfYmVzdF9lZmZvcnQoZGV2KSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGRldmljZV9saW5rX3Rlc3QobGluaywgRExfRkxBR19JTkZFUlJFRCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBsaW5rLVx1MDAzZXN0YXR1cyAhPSBETF9TVEFURV9DT05TVU1FUl9QUk9CRSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFkZXZfY2FuX21hdGNoKGxpbmstXHUwMDNlc3VwcGxpZXIpKSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBXaGVuIGRldl9pc19iZXN0X2VmZm9ydCgpIGlzIHRydWUsIHdlIGlnbm9yZSBkZXZpY2VcbiBcdFx0XHQgKiBsaW5rcyB0byBzdXBwbGllcnMgdGhhdCBkb24ndCBoYXZlIGEgZHJpdmVyLiAgSWYgdGhlXG5AQCAtMTQ0OSwxMiArMTQ5NSw2IEBAIHZvaWQgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRcdFx0V1JJVEVfT05DRShsaW5rLVx1MDAzZXN0YXR1cywgRExfU1RBVEVfQUNUSVZFKTtcbiBcdFx0fVxuIFxuLVx0XHQvKlxuLVx0XHQgKiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgZXZlbiBmb3IgdGhlIGRlbGV0ZWRcbi1cdFx0ICogRExfRkxBR19TWU5DX1NUQVRFX09OTFkgZGV2aWNlIGxpbmsgaW4gY2FzZSBpdCB3YXMgdGhlIGxhc3Rcbi1cdFx0ICogZGV2aWNlIGxpbmsgdGhhdCB3YXMgcHJldmVudGluZyB0aGUgc3VwcGxpZXIgZnJvbSBnZXR0aW5nIGFcbi1cdFx0ICogc3luY19zdGF0ZSgpIGNhbGwuXG4tXHRcdCAqL1xuIFx0XHRpZiAoZGVmZXJfc3luY19zdGF0ZV9jb3VudClcbiBcdFx0XHRfX2RldmljZV9saW5rc19zdXBwbGllcl9kZWZlcl9zeW5jKHN1cHBsaWVyKTtcbiBcdFx0ZWxzZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jIGIvZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmNcbmluZGV4IGI4ZDI5OGMwNGQzZmYuLjQ5ZjliNDA2MmNmNWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uY1xuKysrIGIvZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmNcbkBAIC0yMjksNyArMjI5LDcgQEAgaW50IF9fb2ZfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCxcbiBcdFx0Z290byB1bnJlZ2lzdGVyO1xuIFxuIFx0aWYgKCFzY2FucGh5cylcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdGdvdG8gZG9uZTtcbiBcbiBcdC8qIGF1dG8gc2NhbiBmb3IgUEhZcyB3aXRoIGVtcHR5IHJlZyBwcm9wZXJ0eSAqL1xuIFx0Zm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGUobnAsIGNoaWxkKSB7XG5AQCAtMjYxLDYgKzI2MSw5IEBAIGludCBfX29mX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4gXHRcdH1cbiBcdH1cbiBcbitkb25lOlxuK1x0ZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KFx1MDAyNm1kaW8tXHUwMDNlZGV2KTtcbitcbiBcdHJldHVybiAwO1xuIFxuIHB1dF91bnJlZ2lzdGVyOlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2YvcHJvcGVydHkuYyBiL2RyaXZlcnMvb2YvcHJvcGVydHkuY1xuaW5kZXggNzJjZjEyOTA3ZGUwMy4uZDU5YmNiMWYyOWRlMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvb2YvcHJvcGVydHkuY1xuKysrIGIvZHJpdmVycy9vZi9wcm9wZXJ0eS5jXG5AQCAtMTI3Miw2ICsxMjcyLDIwIEBAIHN0YXRpYyB2b2lkIG9mX2xpbmtfdG9fcGhhbmRsZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvbl9ucCxcbiBcdFx0dG1wX25wID0gb2ZfZ2V0X25leHRfcGFyZW50KHRtcF9ucCk7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogQW4gRXRoZXJuZXQgUEhZIHBhY2thZ2Ugbm9kZSBkZXNjcmliZXMgcmVzb3VyY2VzIHNoYXJlZCBieSBpdHMgbWVtYmVyXG4rXHQgKiBQSFlzLCBidXQgaXMgbm90IHBvcHVsYXRlZCBhcyBhIHN0cnVjdCBkZXZpY2UuIExpbmsgZXZlcnkgZW5hYmxlZFxuK1x0ICogbWVtYmVyIFBIWSB0byB0aG9zZSBzdXBwbGllcnMgc28gZndfZGV2bGluayBjYW4gdXNlIHRoZSByZWFsIGNvbnN1bWVyXG4rXHQgKiBkZXZpY2VzIGluc3RlYWQgb2YgbGVhdmluZyBhIHByb3h5IGxpbmsgb24gdGhlIE1ESU8gYnVzIGluZGVmaW5pdGVseS5cbitcdCAqL1xuK1x0aWYgKG9mX25vZGVfbmFtZV9lcShjb25fbnAsIFwiZXRoZXJuZXQtcGh5LXBhY2thZ2VcIikpIHtcbitcdFx0Zm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGVfc2NvcGVkKGNvbl9ucCwgY2hpbGQpXG4rXHRcdFx0Zndub2RlX2xpbmtfYWRkKG9mX2Z3bm9kZV9oYW5kbGUoY2hpbGQpLFxuK1x0XHRcdFx0XHRvZl9md25vZGVfaGFuZGxlKHN1cF9ucCksIGZsYWdzKTtcbitcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0Zndub2RlX2xpbmtfYWRkKG9mX2Z3bm9kZV9oYW5kbGUoY29uX25wKSwgb2ZfZndub2RlX2hhbmRsZShzdXBfbnApLCBmbGFncyk7XG4gfVxuIFxuQEAgLTE2MjAsNyArMTYzNCw5IEBAIHN0YXRpYyBpbnQgb2ZfbGlua19wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvbl9ucCwgY29uc3QgY2hhciAqcHJvcF9uYW1lKVxuIFxuIFx0XHRcdG1hdGNoZWQgPSB0cnVlO1xuIFx0XHRcdGkrKztcbi1cdFx0XHRvZl9saW5rX3RvX3BoYW5kbGUoY29uX2Rldl9ucCwgcGhhbmRsZSwgcy1cdTAwM2Vmd2xpbmtfZmxhZ3MpO1xuK1x0XHRcdGlmIChjb25fZGV2X25wKVxuK1x0XHRcdFx0b2ZfbGlua190b19waGFuZGxlKGNvbl9kZXZfbnAsIHBoYW5kbGUsXG4rXHRcdFx0XHRcdFx0ICAgcy1cdTAwM2Vmd2xpbmtfZmxhZ3MpO1xuIFx0XHRcdG9mX25vZGVfcHV0KHBoYW5kbGUpO1xuIFx0XHR9XG4gXHRcdHMrKztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaFxuaW5kZXggYWVlNzlmZDZiMzJiNC4uOGFmYjlmMmIwZDgyNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmhcbkBAIC0xMzgxLDYgKzEzODEsNyBAQCBzdHJ1Y3QgZGV2aWNlX2xpbmsgKmRldmljZV9saW5rX2FkZChzdHJ1Y3QgZGV2aWNlICpjb25zdW1lcixcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlICpzdXBwbGllciwgdTMyIGZsYWdzKTtcbiB2b2lkIGRldmljZV9saW5rX2RlbChzdHJ1Y3QgZGV2aWNlX2xpbmsgKmxpbmspO1xuIHZvaWQgZGV2aWNlX2xpbmtfcmVtb3ZlKHZvaWQgKmNvbnN1bWVyLCBzdHJ1Y3QgZGV2aWNlICpzdXBwbGllcik7XG4rdm9pZCBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkoc3RydWN0IGRldmljZSAqZGV2KTtcbiB2b2lkIGRldmljZV9saW5rc19zdXBwbGllcl9zeW5jX3N0YXRlX3BhdXNlKHZvaWQpO1xuIHZvaWQgZGV2aWNlX2xpbmtzX3N1cHBsaWVyX3N5bmNfc3RhdGVfcmVzdW1lKHZvaWQpO1xuIHZvaWQgZGV2aWNlX2xpbmtfd2FpdF9yZW1vdmFsKHZvaWQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDU6MDUuMzI3MDY5NjA4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUwMzc5NjY5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBGaXJzdCwgd2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaW50cm9kdWNlcyBhbnkgKmZ1bmN0aW9uYWwqIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHdhcnJhbnQgZnV6emluZy4gTG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggc29tZSBtb2RpZmljYXRpb25zIHRvIGBkcml2ZXJzL2Jhc2UvY29yZS5jYCwgYGRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jYCwgYGRyaXZlcnMvb2YvcHJvcGVydHkuY2AsIGFuZCB0aGUgYGluY2x1ZGUvbGludXgvZGV2aWNlLmhgIGhlYWRlci5cblxuU3BlY2lmaWNhbGx5LCB3ZSd2ZSBnb3QgYSBuZXcgZnVuY3Rpb24sIGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgLCBpbnRyb2R1Y2VkIGFuZCBleHBvcnRlZCBpbiBgZGV2aWNlLmhgLCBhbmQgdXNlZCBpbiBgb2ZfbWRpby5jYCB3aXRoaW4gYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAuICBUaGF0IGFsb25lIGlzIGludGVyZXN0aW5nLCBhcyBhbnkgY2hhbmdlIHRvIHRoZSBkZXZpY2UgbGluayBoYW5kbGluZyBpcyBhIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldC4gQWRkaXRpb25hbGx5LCB0aGVyZSBhcmUgc29tZSBjaGFuZ2VzIGluIGBvZl9saW5rX3RvX3BoYW5kbGVgIHJlbGF0ZWQgdG8gXCJldGhlcm5ldC1waHktcGFja2FnZVwiIG5vZGVzLiAgVGhpcyBzb3VuZHMgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBkZXZpY2UgY29yZSBhbmQgaG93IHRoZSBzeXN0ZW0gcGFyc2VzIE9GIHByb3BlcnRpZXMuXG5cblRoZSBrZXkgcXVlc3Rpb24gaXMsIGFyZSB0aGVzZSBjaGFuZ2VzIHJlYWNoYWJsZSB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVU/ICBDb25zaWRlcmluZyB0aGF0IHRoZSBPRiBwcm9wZXJ0eSBwYXJzaW5nIGFuZCBkZXZpY2UgbGlua3MgYXJlIGNvcmUga2VybmVsIGZlYXR1cmVzLCBJJ2Qgc2F5IHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIFwieWVzXCIuICBgb2ZfbWRpby5jYCBpcyBnb2luZyB0byBiZSByZWxldmFudCBmb3IgTURJTyBidXNlcyBkZWZpbmVkIGluIHRoZSBkZXZpY2UgdHJlZSwgYW5kIGRldmljZSBsaW5rIGNoYW5nZXMgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgY29uc2lkZXJlZC5cblxuU28sIGxldCdzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBuZWVkIGZvY3VzIGZvciBmdXp6aW5nLiAgQmFzZWQgb24gdGhlIHBhdGNoLCB0aGVzZSBhcmUgdGhlIHByaW1hcnkgY2FuZGlkYXRlczpcblxuKiAgIGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgIC0gdGhpcyBpcyB0aGUgbmV3IG9uZSwgYW5kIGl0cyBpbmNsdXNpb24gaW4gZGV2aWNlIGxpbmsgaGFuZGxpbmcgbWFrZXMgaXQgYSBoaWdoLXByaW9yaXR5LlxuKiAgIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgIC0gc2luY2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsaW5nIGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgLCBpdCdzIGFub3RoZXIgaW1wb3J0YW50IGZ1bmN0aW9uIHRoYXQgbmVlZHMgaW52ZXN0aWdhdGlvbi5cbiogICBgb2ZfbGlua190b19waGFuZGxlYCAtIHRoaXMgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIEl0IG1pZ2h0IGJlIHdvcnRod2hpbGUgdG8gZXhhbWluZSB0aGUgY2FsbGVycyBmb3IgdGhpcyBhcyB3ZWxsLCBwZXJoYXBzIGBvZl9saW5rX3Byb3BlcnR5YCBvciBgb2ZfZndub2RlX2FkZF9saW5rc2AsIHRob3VnaCBgb2ZfbGlua190b19waGFuZGxlYCBpcyBsaWtlbHkgdGhlIGNvcmUgZm9jdXMuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBkcml2ZXJzL29mL3Byb3BlcnR5LmNgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEzNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA1OjExLjgzMDg2OTgxMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk3OTI1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvZl9saW5rX3RvX3BoYW5kbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9vZi9wcm9wZXJ0eS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvb2YvcHJvcGVydHkuYz0xMjUyPW9mX2Z3bm9kZV9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoY29uc3Qgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSxcXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xMjU3LVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoxMjU4OnN0YXRpYyB2b2lkIG9mX2xpbmtfdG9fcGhhbmRsZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvbl9ucCxcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTI1OS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnN1cF9ucCxcXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYz0xNjE3PXN0YXRpYyBpbnQgb2ZfbGlua19wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvbl9ucCwgY29uc3QgY2hhciAqcHJvcF9uYW1lKVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2MzctXFx0XFx0XFx0aWYgKGNvbl9kZXZfbnApXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjE2Mzg6XFx0XFx0XFx0XFx0b2ZfbGlua190b19waGFuZGxlKGNvbl9kZXZfbnAsIHBoYW5kbGUsXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2MzktXFx0XFx0XFx0XFx0XFx0XFx0ICAgcy1cXHUwMDNlZndsaW5rX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDU6MTEuODc2ODUzMzE4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI5MzkxMjAwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIHlvdXIgc3VtbWFyeTpcblxuKipTdGF0aWMgUHJvcGVydHkgSW5xdWlyeSoqXG5cbkhtbSwgaXMgYG9mX2xpbmtfcHJvcGVydHlgIGFsc28gYSBzdGF0aWMgcHJvcGVydHk/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2suIEl0J3MgaW1wb3J0YW50IHRvIGJlIGFjY3VyYXRlIHdpdGggdGhlc2UgYXNzdW1wdGlvbnMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggcHJvcGVydGllcyB0aGF0IHBvdGVudGlhbGx5IGltcGFjdCBvdGhlciBhcmVhcyBvZiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzUxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDU6MTQuMTcwNzY3OTk2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDc3OTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9mX2xpbmtfcHJvcGVydHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9vZi9wcm9wZXJ0eS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvb2YvcHJvcGVydHkuYz0xNTU1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwcGxpZXJfYmluZGluZ3Mgb2Zfc3VwcGxpZXJfYmluZGluZ3NbXSA9IHtcXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNTk4LS8qKlxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoxNTk5OiAqIG9mX2xpbmtfcHJvcGVydHkgLSBDcmVhdGUgZGV2aWNlIGxpbmtzIHRvIHN1cHBsaWVycyBsaXN0ZWQgaW4gYSBwcm9wZXJ0eVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNjAwLSAqIEBjb25fbnA6IFRoZSBjb25zdW1lciBkZXZpY2UgdHJlZSBub2RlIHdoaWNoIGNvbnRhaW5zIHRoZSBwcm9wZXJ0eVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2MTItICogQW55IGZhaWxlZCBhdHRlbXB0IHRvIGNyZWF0ZSBhIGZ3bm9kZSBsaW5rIHdpbGwgTk9UIHJlc3VsdCBpbiBhbiBpbW1lZGlhdGVcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MTYxMzogKiByZXR1cm4uICBvZl9saW5rX3Byb3BlcnR5KCkgbXVzdCBjcmVhdGUgbGlua3MgdG8gYWxsIHRoZSBhdmFpbGFibGUgc3VwcGxpZXJcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTYxNC0gKiBkZXZpY2UgdHJlZSBub2RlcyBldmVuIHdoZW4gYXR0ZW1wdHMgdG8gY3JlYXRlIGEgbGluayB0byBvbmUgb3IgbW9yZVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2MTYtICovXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjE2MTc6c3RhdGljIGludCBvZl9saW5rX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29uX25wLCBjb25zdCBjaGFyICpwcm9wX25hbWUpXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2MTgte1xcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTE2ODY9c3RhdGljIGludCBvZl9md25vZGVfYWRkX2xpbmtzKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTY5Ny1cXHRmb3JfZWFjaF9wcm9wZXJ0eV9vZl9ub2RlKGNvbl9ucCwgcClcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MTY5ODpcXHRcXHRvZl9saW5rX3Byb3BlcnR5KGNvbl9ucCwgcC1cXHUwMDNlbmFtZSk7XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2OTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA1OjE0LjIxNjI1MTY4MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjEwODMzNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQ6XG5cbioqU3RhdGljIEZ1bmN0aW9uIENvbnVuZHJ1bSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBvZl9md25vZGVfYWRkX2xpbmtzYC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzOiBpcyB0aGlzIGZ1bmN0aW9uIGRlY2xhcmVkIGFzIGBzdGF0aWNgPyBUaGF0J3MgdGhlIGtleSBwb2ludC4gS25vd2luZyBpZiBpdCdzIHN0YXRpYyBjaGFuZ2VzICpldmVyeXRoaW5nKiBhYm91dCBob3cgSSB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlLCBzY29wZSwgYW5kIHBvdGVudGlhbCBpbXBhY3QuIElmIGl0ICppcyogc3RhdGljLCB0aGVuIGl0J3MgbGltaXRlZCBpbiBpdHMgdmlzaWJpbGl0eSBhbmQgdXNhZ2U7IGl0J3Mgc2NvcGVkIHRvIHRoZSBjdXJyZW50IHRyYW5zbGF0aW9uIHVuaXQsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHNvbWV0aGluZyBzcGVjaWZpYyBhYm91dCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSByZXN0IG9mIHRoZSBjb2RlLiBJZiBpdCAqaXNuJ3QqIHN0YXRpYywgdGhlbiBpdCBoYXMgZXh0ZXJuYWwgbGlua2FnZSwgbWVhbmluZyBhbnkgb3RoZXIgcGFydCBvZiB0aGUgcHJvamVjdCBjb3VsZCBjYWxsIGl0LCBkcmFtYXRpY2FsbHkgaW5jcmVhc2luZyB0aGUgY29tcGxleGl0eSBJIG5lZWQgdG8gY29uc2lkZXIgd2hlbiBJJ20gbG9va2luZyBhdCB3aGF0IGl0IGRvZXMsIGFuZCBob3cgaXQgaXMgdXNlZCwgYW5kIHdoYXQgZWZmZWN0IGl0cyBjaGFuZ2VzIHdpbGwgaGF2ZS4gVGhpcyB3aWxsIGluZmx1ZW5jZSBpZiBJIG5lZWQgdG8gd29ycnkgYWJvdXQgZ2xvYmFsIG5hbWVzcGFjZSBwb2xsdXRpb24sIHJlLWVudHJhbnQgY2FwYWJpbGl0aWVzLCBhbmQgY29uY3VycmVuY3kgY29uc2lkZXJhdGlvbnMsIGZvciBleGFtcGxlLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBrbm93IHRoaXMgYmVmb3JlIEkgY2FuIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg2MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA1OjE3LjM3NzMzNzI0OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU0MTA2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvZl9md25vZGVfYWRkX2xpbmtzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvb2YvcHJvcGVydHkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL29mL3Byb3BlcnR5LmM9MTY3MD1zdGF0aWMgYm9vbCBvZl9pc19md25vZGVfYWRkX2xpbmtzX3N1cHBvcnRlZCh2b2lkKVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2ODUtXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjE2ODY6c3RhdGljIGludCBvZl9md25vZGVfYWRkX2xpbmtzKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2ODcte1xcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTE3MDM9Y29uc3Qgc3RydWN0IGZ3bm9kZV9vcGVyYXRpb25zIG9mX2Z3bm9kZV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTcyNS1cXHQuaXJxX2dldCA9IG9mX2Z3bm9kZV9pcnFfZ2V0LFxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoxNzI2OlxcdC5hZGRfbGlua3MgPSBvZl9md25vZGVfYWRkX2xpbmtzLFxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNzI3LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA1OjE3LjQyMjg4Mjc4M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjMyOTYxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBicm9rZW4gZG93biBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQgdGhyb3VnaDpcblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIENhbGwgU3RhY2sgYW5kIEtleSBSZWdpc3RyYXRpb25zKipcblxuT2theSwgbGV0IG1lIHBpZWNlIHRoaXMgdG9nZXRoZXIuIEZyb20gd2hhdCBJJ20gc2VlaW5nLCBgb2ZfZndub2RlX2FkZF9saW5rc2AgaXMgaW52b2tlZCB0aHJvdWdoIHRoZSBgZndub2RlX29wZXJhdGlvbnNgIGludGVyZmFjZSwgd2hpY2ggaXMgdGhlIGV4cGVjdGVkIHBhdHRlcm4gZm9yIGRldmljZSB0cmVlIGludGVyYWN0aW9uLiBUaGUgY3J1Y2lhbCBmdW5jdGlvbiBiZWluZyBpbnRlZ3JhdGVkIGhlcmUgaXMgYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAuIEludGVyZXN0aW5nLCBzbyB0aGlzIG11c3QgYmUgcmVsYXRlZCB0byBsaW5rIG1hbmFnZW1lbnQgYW5kIHBvdGVudGlhbGx5IGRyb3BwaW5nIHN5bmNocm9uaXphdGlvbiBzdGF0ZXMsIHBvc3NpYmx5IGR1cmluZyBkZXZpY2UgZGlzY292ZXJ5IG9yIHJlbW92YWwuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gd2hhdCBzcGVjaWZpYyBzeW5jaHJvbml6YXRpb24gc3RhdGUgaXQncyByZWZlcnJpbmcgdG8uIEl0J3MgcHJvYmFibHkgd29ydGggaW52ZXN0aWdhdGluZyB3aGF0IGNhbGxzIGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgLCBzbyB0aGF0IEkgaGF2ZSB0aGUgZnVsbCBjb250ZXh0LlxuXG5GdXJ0aGVybW9yZSwgSSBub3RlIHRoZSBwcmVzZW5jZSBvZiBgX19vZl9tZGlvYnVzX3JlZ2lzdGVyYCB3aXRoaW4gYGRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGRldmljZSB0cmVlLWJhc2VkIE1ESU8gYnVzIHJlZ2lzdHJhdGlvbi4gVGhpcyBpcyBzdGFuZGFyZCBwcmFjdGljZSBpbiB0aGVzZSBzeXN0ZW1zLiBUaGUgZmFjdCB0aGF0IGl0cyB1bmRlcnNjb3JlLXByZWZpeGVkIGltcGxpZXMgaXRzIGFuIGludGVybmFsIEFQSSBzbyB0aGUgQVBJIHRoYXQgaW52b2tlcyBpdCBpcyBsaWtlbHkgdGhlIG1vcmUgcmVsZXZhbnQgb25lIGluIHRoaXMgY2FzZSwgcGFydGljdWxhcmx5IHNpbmNlIHRoaXMgY2FsbCBpcyBwcm9iYWJseSBpbnZvbHZlZCBpbiBpbml0aWFsaXppbmcgdGhlIGhhcmR3YXJlIHRvIGNvbm5lY3QgdG8gdGhlIG5ldHdvcmsuXG5cbk5vdywgaG93IGRvZXMgYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAgZml0IGludG8gdGhlIGdyYW5kIHNjaGVtZSBvZiBgb2ZfZndub2RlX2FkZF9saW5rc2AgYW5kIGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgPyBNeSBpbnR1aXRpb24gc2F5cyB0aGF0IHRoZSBNRElPIGJ1cyByZWdpc3RyYXRpb24gbGlrZWx5IGVzdGFibGlzaGVzIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGluZnJhc3RydWN0dXJlLCBhbmQgdGhlIGxpbmsgbWFuYWdlbWVudCBmdW5jdGlvbnMgYXJlIHRoZW4gdXNlZCB0byBtYW5hZ2UgdGhlIGRldmljZSBjb25uZWN0aW9ucyBvbiB0aGF0IGJ1cy4gSSBzaG91bGQga2VlcCBhbiBleWUgb24gaG93IHRoZXNlIGFyZSBjb25uZWN0ZWQgaW4gcHJhY3RpY2UgdG8gYmUgY2VydGFpbi4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVzZSBtb2R1bGVzLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSBkZXZpY2UgdHJlZSBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgTURJTyBhbmQgcG90ZW50aWFsbHkgUEhZIGRldmljZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNzksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNToyMS40ODYxODA5NTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTEyMzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fb2ZfbWRpb2J1c19yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tZGlvL29mX21kaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYz0xMzk9c3RhdGljIGludCBfX29mX21kaW9idXNfcGFyc2VfcGh5cyhzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCxcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTE4Ni0vKipcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzoxODc6ICogX19vZl9tZGlvYnVzX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgbWlpX2J1cyBhbmQgY3JlYXRlIFBIWXMgZnJvbSB0aGUgZGV2aWNlIHRyZWVcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0xODgtICogQG1kaW86IHBvaW50ZXIgdG8gbWlpX2J1cyBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTE5NC0gKi9cXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzoxOTU6aW50IF9fb2ZfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCxcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0xOTYtXFx0XFx0XFx0ICBzdHJ1Y3QgbW9kdWxlICpvd25lcilcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTI3NC19XFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6Mjc1OkVYUE9SVF9TWU1CT0woX19vZl9tZGlvYnVzX3JlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0yNzYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA1OjIxLjUzMjEwMjcxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDQ5OTg2NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhpczpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgRHJpdmVyIFJlZ2lzdHJhdGlvbiBhbmQgTGluayBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSdtIHNlZWluZyBzb21lIGtleSBmdW5jdGlvbnMgYmVpbmcgZXhwb3NlZCBoZXJlLiBGaXJzdCwgYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAgaXMgYmVpbmcgZXhwb3J0ZWQuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBtb2R1bGUgaXMgaGFuZGxpbmcgdGhlIHJlZ2lzdHJhdGlvbiBvZiBhbiBNRElPIGJ1cywgbGlrZWx5IGZvciBjb21tdW5pY2F0aW9uIHdpdGggUEhZcyBvciBvdGhlciBNRElPLWNvbm5lY3RlZCBkZXZpY2VzLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB3aGVuIEknbSBkZWJ1Z2dpbmcgTURJTy1yZWxhdGVkIGRyaXZlciBpbnRlcmFjdGlvbnMuIFRoZW4sIGl0IGxvb2tzIGxpa2UgYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAgaXMgYWxzbyBleHBvcnRlZC4gVGhhdCdzIGludGVyZXN0aW5nOyBpdCBzdWdnZXN0cyBhIHRhcmdldGVkIHdheSB0byBtYW5hZ2UgdGhlIHN5bmNocm9uaXphdGlvbiBzdGF0ZSBvZiBkZXZpY2UgbGlua3MsIHBvdGVudGlhbGx5IGZvciBzaXR1YXRpb25zIHdoZXJlIGEgZnVsbCByZXNldCBvciByZS1lbnVtZXJhdGlvbiBpc24ndCBuZWVkZWQuIEZpbmFsbHksIEkgc2VlIHRoYXQgYGRldmljZV9saW5rc19kcml2ZXJfYm91bmRgIGhhcyBiZWVuIG1vZGlmaWVkIGFuZCBleHBvcnRlZC4gVGhhdCdzIGEgc2lnbmlmaWNhbnQgaW5kaWNhdG9yLiBHaXZlbiB0aGUgbmFtZSwgdGhpcyBmdW5jdGlvbiBwcm9iYWJseSBkZWFscyB3aXRoIHRoZSBiaW5kaW5nIHByb2Nlc3MgYmV0d2VlbiBhIGRyaXZlciBhbmQgYSBkZXZpY2UgdGhyb3VnaCBkZXZpY2UgbGlua3MuIFRoZSBtb2RpZmljYXRpb24gY291bGQgYmUgYW55dGhpbmcsIGJ1dCBpdCBzdWdnZXN0cyBlbmhhbmNlbWVudHMgdG8gdGhlIGJpbmRpbmcgbG9naWMsIHBvdGVudGlhbGx5IGhhbmRsaW5nIGRlcGVuZGVuY3kgbWFuYWdlbWVudCwgZXJyb3IgaGFuZGxpbmcgZHVyaW5nIGJpbmRpbmcsIG9yIGV2ZW4gb3B0aW1pemF0aW9ucyBpbiBob3cgbGlua3MgYXJlIGVzdGFibGlzaGVkLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vayDigJMgaXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZGV2aWNlIGxpbmtzIG1lY2hhbmlzbSB3b3JrcyB3aXRoaW4gdGhlIG5ldyBtb2R1bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNToyNS4yNzcxMDU0NzVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDAxMTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldmljZV9saW5rc19kcml2ZXJfYm91bmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iYXNlL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jhc2UvY29yZS5jPTEzODc9dm9pZCBkZXZpY2VfbGlua3NfZm9yY2VfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2Jhc2UvY29yZS5jLTE0MDgtLyoqXFxuZHJpdmVycy9iYXNlL2NvcmUuYzoxNDA5OiAqIGRldmljZV9saW5rc19kcml2ZXJfYm91bmQgLSBVcGRhdGUgZGV2aWNlIGxpbmtzIGFmdGVyIHByb2JpbmcgaXRzIGRyaXZlci5cXG5kcml2ZXJzL2Jhc2UvY29yZS5jLTE0MTAtICogQGRldjogRGV2aWNlIHRvIHVwZGF0ZSB0aGUgbGlua3MgZm9yLlxcbi0tXFxuZHJpdmVycy9iYXNlL2NvcmUuYy0xNDE4LSAqL1xcbmRyaXZlcnMvYmFzZS9jb3JlLmM6MTQxOTp2b2lkIGRldmljZV9saW5rc19kcml2ZXJfYm91bmQoc3RydWN0IGRldmljZSAqZGV2KVxcbmRyaXZlcnMvYmFzZS9jb3JlLmMtMTQyMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA1OjI1LjMyMjExNDU2MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjI5MzM4NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXkgU3ltYm9scyBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBzeW1ib2xzOiBgZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5YCwgYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAsIGFuZCBgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZGAuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCB0aGVzZSBhcmUgY2VudHJhbCB0byBzb21ldGhpbmcsIHByb2JhYmx5IHJlbGF0ZWQgdG8gZGV2aWNlIGxpbmtpbmcsIE1ESU8gYnVzIHJlZ2lzdHJhdGlvbiwgYW5kIGRyaXZlciBiaW5kaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVzZSByZXF1aXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblNwZWNpZmljYWxseSwgSSByZW1lbWJlciB0aGF0IGBkcml2ZXJzL25ldC9tZGlvL29mX21kaW8uY2AgaGFzIGEgZGVwZW5kZW5jeSBvbiBgQ09ORklHX09GX01ESU9gLiBJIHNob3VsZCBwcm9iYWJseSBjb25maXJtIHRoYXQgaW4gYGRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ2AuIEl0J3MgbGlrZWx5IHRoYXQgdGhlc2Ugc3ltYm9scyBJJ20gbG9va2luZyBhdCBhcmUgdGllZCB0byBhIHNpbWlsYXIgY29uZmlndXJhdGlvbi4gTGV0J3Mgc2VlIGlmIHRoaXMgaXMgYWNjdXJhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MzMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNToyOC41NTE0NTYxN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc3Nzk0NTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPRl9NRElPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9OT1jb25maWcgRldOT0RFX01ESU9cXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xMy1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTQ6Y29uZmlnIE9GX01ESU9cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTUtXFx0ZGVmX3RyaXN0YXRlIE9GXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA1OjI4LjgyOTI2MDEzMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODU2Mzc3MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMsIHNwZWNpZmljYWxseSBgT0ZfTURJT2AuIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogYE9GX01ESU9gIGlzIGRlZmluZWQgYXMgYSBgZGVmX3RyaXN0YXRlYCBvZiBgT0ZgLiBUaGF0IG1lYW5zIGl0cyBzdGF0ZSAoZW5hYmxlZCwgZGlzYWJsZWQsIG9yIG1vZHVsZSkgZGVmYXVsdHMgdG8gdGhlIHN0YXRlIG9mIGBPRmAuIE1ha2VzIHNlbnNlLlxuXG5JIGtub3cgYGRyaXZlcnMvYmFzZS9jb3JlLmNgIGlzIGFsd2F5cyBjb21waWxlZCwgd2hpY2ggaXMgcHJvYmFibHkgYSBiYXNlIGNvbXBvbmVudC4gQW5kIEkgc2VlIHRoYXQgYGRyaXZlcnMvb2YvcHJvcGVydHkuY2AgZGVwZW5kcyBvbiBgQ09ORklHX09GYC4gU28gd2UncmUgcmVhbGx5IGRlYWxpbmcgd2l0aCBgT0ZgIGFuZCBgT0ZfTURJT2AgYXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbnMgaW4gdGhpcyBhcmVhLiBBY3R1YWxseSwgd2FpdCBhIG1pbnV0ZSwgc2luY2UgYE9GX01ESU9gIGlzIGRpcmVjdGx5IHRpZWQgdG8gYE9GYCwgaXQncyBlc3NlbnRpYWxseSBlbmFibGVkIGlmIGBPRmAgaXMgZW5hYmxlZCBieSBkZWZhdWx0LlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBhbmQgdGhlIE1ESU8gZHJpdmVyIGl0c2VsZi4gVGhlIGtleSBpcyBnb2luZyB0byBiZSBmaWd1cmluZyBvdXQgd2hldGhlciBgTURJT19ERVZJQ0VgIG9yIGBNRElPX0JVU2AgYXJlIHJlcXVpcmVkIGFuZCBob3cgdGhleSBpbnRlcmFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODExNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNTozMi42ODU2Mzk2NzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNjA1NTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPRl9NRElPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9OT1jb25maWcgRldOT0RFX01ESU9cXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xMy1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTQ6Y29uZmlnIE9GX01ESU9cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTUtXFx0ZGVmX3RyaXN0YXRlIE9GXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA1OjMyLjczNzI0ODQxOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODAxNTI2MDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTURJTyBDb21waWxhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgb2ZfbWRpby5vYCBpcyBiZWluZyBidWlsdC4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIGFsd2F5cywgaXMgdGhlIGBNYWtlZmlsZWAuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGNvbXBpbGF0aW9uIGluc3RydWN0aW9ucyBmb3IgdGhpcyBwYXJ0IG9mIHRoZSBuZXR3b3JraW5nIGRyaXZlciBhcmUgZGVmaW5lZC4gU3BlY2lmaWNhbGx5LCBJJ2xsIG5hdmlnYXRlIHRvIGBkcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlYCB0byBzZWUgaG93IHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIGlzIGhhbmRsaW5nIHRoYXQgcGFydGljdWxhciBvYmplY3QgZmlsZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSByZWxldmFudCBmbGFncywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IG90aGVyIGJ1aWxkLXJlbGF0ZWQgZGV0YWlscyBpbiB0aGVyZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1ODksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNTozNS41Mzg3Nzc0MTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjEwNzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9mX21kaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlPTU9b2JqLSQoQ09ORklHX0ZXTk9ERV9NRElPKVxcdCs9IGZ3bm9kZV9tZGlvLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX09GX01ESU8pXFx0XFx0Kz0gb2ZfbWRpby5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZS03LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNTozNS41ODUzOTQ1ODlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0MTkxMTAxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZW1iZWRkZWQgc3lzdGVtcyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgTURJTyBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKlxuXG5BbHJpZ2h0LCB0aGUgYnVpbGQgc3lzdGVtJ3MgYXNraW5nIGZvciBgQ09ORklHX09GX01ESU9gLCByaWdodD8gTXkgZmlyc3QgaW5zdGluY3QgaXMsIFwiWWVzLCBvZiBjb3Vyc2UsIHRoYXQncyB3aGF0IHdlIG5lZWRcIi4gVGhlbiBJIHBhdXNlLCBiZWNhdXNlIEkga25vdyB0aGVzZSB0aGluZ3MgYXJlIHJhcmVseSB0aGF0IHNpbXBsZS4gQWgsIHJpZ2h0LCBgT0ZfTURJT2AgaXRzZWxmIGlzIGRlZmluZWQgYXMgYSBgZGVmX3RyaXN0YXRlIE9GYC4gVGhhdCB1c3VhbGx5IG1lYW5zIGl0IGhhcyBkZXBlbmRlbmNpZXMuIE9rYXksIGEgcXVpY2sgY2hlY2sgb2YgdGhlIGRvY3VtZW50YXRpb24uIEJ1dCBoZXJlLCBsZXQncyBsb29rIGF0IGBkcml2ZXJzL25ldC9tZGlvL0tjb25maWdgIHRvIGNvbmZpcm0gd2hhdCBJIHJlbWVtYmVyLiBJIGtub3cgdGhpcyBpcyBnb2luZyB0byBkZXBlbmQgb24gZWl0aGVyIGBQSFlMSUJgIG9yIGBNRElPX0RFVklDRWAuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzZWxlY3RlZCB0b28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NzksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNTozOS4wMjczMDgzMDRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ESU8gTGF5ZXIgQ29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51IFxcXCJNRElPIGNvbnRyb2xsZXIgZHJpdmVyc1xcXCJcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gUEhZTElCXFxuICAgODpcXHRcXG4gICA5OlxcdGNvbmZpZyBGV05PREVfTURJT1xcbiAgMTA6XFx0XFx0ZGVmX3RyaXN0YXRlIChBQ1BJIHx8IE9GKSB8fCBDT01QSUxFX1RFU1RcXG4gIDExOlxcdFxcdGhlbHBcXG4gIDEyOlxcdFxcdCAgRldOT0RFIE1ESU8gYnVzIChFdGhlcm5ldCBQSFkpIGFjY2Vzc29yc1xcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgT0ZfTURJT1xcbiAgMTU6XFx0XFx0ZGVmX3RyaXN0YXRlIE9GXFxuICAxNjpcXHRcXHRzZWxlY3QgRklYRURfUEhZXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIE9wZW5GaXJtd2FyZSBNRElPIGJ1cyAoRXRoZXJuZXQgUEhZKSBhY2Nlc3NvcnNcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIEFDUElfTURJT1xcbiAgMjE6XFx0XFx0ZGVmX3RyaXN0YXRlIEFDUElcXG4gIDIyOlxcdFxcdGhlbHBcXG4gIDIzOlxcdFxcdCAgQUNQSSBNRElPIGJ1cyAoRXRoZXJuZXQgUEhZKSBhY2Nlc3NvcnNcXG4gIDI0OlxcdFxcbiAgMjU6XFx0Y29uZmlnIE1ESU9fQUlST0hBXFxuICAyNjpcXHRcXHR0cmlzdGF0ZSBcXFwiQWlyb2hhIEFONzU4MyBNRElPIGJ1cyBjb250cm9sbGVyXFxcIlxcbiAgMjc6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX0FJUk9IQSB8fCBDT01QSUxFX1RFU1RcXG4gIDI4OlxcdFxcdGhlbHBcXG4gIDI5OlxcdFxcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBkcml2ZXIgZm9yIHRoZSBNRElPIGJ1c3NlcyBmb3VuZCBpbiB0aGVcXG4gIDMwOlxcdFxcdCAgQWlyb2hhIEFONzU4MyBTb0Mncy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDU6MzkuMDI3Mzg3NjQ0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MzI3NzA1MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1ESU8gQ29udHJvbGxlciBEcml2ZXIgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBNRElPIGNvbnRyb2xsZXIgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIFJpZ2h0LCBpdCdzIG5lc3RlZCB3aXRoaW4gdGhlIFwiTURJTyBjb250cm9sbGVyIGRyaXZlcnNcIiBtZW51LCB3aGljaCBpdHNlbGYgKmRlcGVuZHMgb24gUEhZTElCKi4gU28sIGluaGVyZW50bHksIEkgbmVlZCBQSFlMSUIgZW5hYmxlZCBmb3IgdGhpcyBkcml2ZXIsIGFuZCBPRiwgc2luY2UgT0YgaXMgYSBwcmUtcmVxdWlzaXRlIGZvciBQSFlMSUIuIFxuXG5BbHJpZ2h0LCBsZXQncyBjb25maXJtIHRoaXMgUEhZTElCIGRlcGVuZGVuY3kuIFl1cCwgbG9va3MgbGlrZSBpdCdzIHRoZSBlbmNvbXBhc3NpbmcgbWVudSB0aGF0IGRpY3RhdGVzIHRoZSByZXF1aXJlbWVudC4gSGFuZyBvbi4uLiBhbmQgdGhlICptZW51KiBkZXBlbmRlbmN5IGFmZmVjdHMgZXZlcnl0aGluZyAqd2l0aGluKiBpdC4gU28sIHRoYXQgbWVhbnMgYm90aCBgQ09ORklHX1BIWUxJQmAgKmFuZCogYENPTkZJR19PRmAgYXJlIGRlZmluaXRlbHkgcmVxdWlyZWQgZm9yIGFueXRoaW5nIHVuZGVyIHRoYXQgbWVudSwgaW5jbHVkaW5nIHRoaXMgTURJTyBjb250cm9sbGVyIGRyaXZlci5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEknbGwgZ28gY2hlY2sgYGRyaXZlcnMvb2YvcHJvcGVydHkuY2AgdG8gc2VlIGhvdyBpdHMgYnVpbGQgaXMgY29uZGl0aW9uZWQuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIGV4cGVjdGVkIGBDT05GSUdfT0ZgIGlzIGFjdHVhbGx5IGNvbXBpbGluZyB0aGUgcmVsZXZhbnQgY29kZS4gR29vZCBwcmFjdGljZSB0byBkb3VibGUgY2hlY2sgdGhhdCBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MzAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNTo0Mi42NjAxNjEwNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwNjI3MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJvcGVydHkub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL29mL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvb2YvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuZHJpdmVycy9vZi9NYWtlZmlsZToyOm9iai15ID0gYmFzZS5vIGNwdS5vIGRldmljZS5vIG1vZHVsZS5vIHBsYXRmb3JtLm8gcHJvcGVydHkub1xcbmRyaXZlcnMvb2YvTWFrZWZpbGUtMy1vYmotJChDT05GSUdfT0ZfS09CSikgKz0ga29iai5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA1OjQyLjcwNDIyOTg2NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTM4MTEyMjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBmdXp6YWJsZS4gRmlyc3QsIEkgY29uZmlybWVkIHRoYXQgYGRyaXZlcnMvb2YvcHJvcGVydHkuY2AgZ2V0cyBjb21waWxlZCBpZiBgQ09ORklHX09GYCBpcyBlbmFibGVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0LiBJIGFsc28gc2VlIHRoYXQgYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAgaXMgaW4gYGRyaXZlcnMvYmFzZS9jb3JlLmNgLCB3aGljaCBpcyBhbHdheXMgY29tcGlsZWQuIFRoYXQgaGVscHMgbmFycm93IHRoaW5ncyBkb3duLlxuXG5UaGUgaW1wb3J0YW50IGNvbmZpZ3Mgc2VlbSB0byBiZSBgT0ZgLCBgUEhZTElCYCwgYW5kIGBPRl9NRElPYCwgYWx0aG91Z2ggYE9GYCBhbmQgYFBIWUxJQmAgYWxvbmUgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIGJ1aWxkaW5nIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LlxuXG5UaGUgcGF0Y2ggaXRzZWxmIG1vZGlmaWVzIGBkcml2ZXJzL2Jhc2UvY29yZS5jYCAod2hpY2ggaXMgY29yZSBrZXJuZWwgbG9naWMhKSBhbmQgYWRkcyBgZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5YCwgYW5kIG1vZGlmaWVzIGBkcml2ZXJzL25ldC9tZGlvL29mX21kaW8uY2AuIFRoZSBjaGFuZ2VzIHRvIGBvZl9saW5rX3RvX3BoYW5kbGVgIHRvIGhhbmRsZSBcImV0aGVybmV0LXBoeS1wYWNrYWdlXCIgbm9kZXMgYXJlIGFsc28gaW50ZXJlc3RpbmcuIFRoaXMgbG9va3MgbGlrZSBpdCB0b3VjaGVzIGNvcmUgZGV2aWNlIGxpbmsgbG9naWMgYW5kIE9GIHByb3BlcnR5IHBhcnNpbmcsIHNvIHRoaXMgaXMgd29ydGggZnV6emluZy5cblxuTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAsIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgLCBhbmQgYGRldmljZV9saW5rc19kcml2ZXJfYm91bmRgLlxuXG5JJ2xsIGRvdWJsZS1jaGVjayBgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZGAg4oCTIGl0J3MgY2FsbGVkIGR1cmluZyBkcml2ZXIgYmluZGluZyBhbmQgZGV2aWNlIHByb2JlLCBub3QgYSBzdXBlciBob3QgcGF0aCwgYnV0IGRlZmluaXRlbHkgaW1wb3J0YW50IGR1cmluZyBib290LiBJdCdzIHNhZmUgdG8gaW5jbHVkZS5cblxuSSBhbHNvIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gYF9fZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5YCBpcyBzdGF0aWMsIHNvIEkgY2FuIGp1c3QgdXNlIGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgLiBTaW1pbGFybHksIGBvZl9saW5rX3RvX3BoYW5kbGVgIGlzIHN0YXRpYywgc28gSSBjYW4ndCB1c2UgaXQgZGlyZWN0bHkuIGBvZl9saW5rX3Byb3BlcnR5YCBhbmQgYG9mX2Z3bm9kZV9hZGRfbGlua3NgIGFyZSBhbHNvIHN0YXRpYy4gQXJlIHRoZXJlIGFueSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIGluIGBkcml2ZXJzL29mL3Byb3BlcnR5LmNgIHRoYXQgY2FsbCBgb2ZfbGlua19wcm9wZXJ0eWA/IFRoYXQgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGV4cGxvcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5ODMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDU6NDguODQyMzQ1MTE4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTAxNDkzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvZl9saW5rX3Byb3BlcnR5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvb2YvcHJvcGVydHkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL29mL3Byb3BlcnR5LmM9MTU1NT1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cHBsaWVyX2JpbmRpbmdzIG9mX3N1cHBsaWVyX2JpbmRpbmdzW10gPSB7XFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTU5OC0vKipcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MTU5OTogKiBvZl9saW5rX3Byb3BlcnR5IC0gQ3JlYXRlIGRldmljZSBsaW5rcyB0byBzdXBwbGllcnMgbGlzdGVkIGluIGEgcHJvcGVydHlcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTYwMC0gKiBAY29uX25wOiBUaGUgY29uc3VtZXIgZGV2aWNlIHRyZWUgbm9kZSB3aGljaCBjb250YWlucyB0aGUgcHJvcGVydHlcXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNjEyLSAqIEFueSBmYWlsZWQgYXR0ZW1wdCB0byBjcmVhdGUgYSBmd25vZGUgbGluayB3aWxsIE5PVCByZXN1bHQgaW4gYW4gaW1tZWRpYXRlXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjE2MTM6ICogcmV0dXJuLiAgb2ZfbGlua19wcm9wZXJ0eSgpIG11c3QgY3JlYXRlIGxpbmtzIHRvIGFsbCB0aGUgYXZhaWxhYmxlIHN1cHBsaWVyXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2MTQtICogZGV2aWNlIHRyZWUgbm9kZXMgZXZlbiB3aGVuIGF0dGVtcHRzIHRvIGNyZWF0ZSBhIGxpbmsgdG8gb25lIG9yIG1vcmVcXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNjE2LSAqL1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoxNjE3OnN0YXRpYyBpbnQgb2ZfbGlua19wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvbl9ucCwgY29uc3QgY2hhciAqcHJvcF9uYW1lKVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNjE4LXtcXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYz0xNjg2PXN0YXRpYyBpbnQgb2ZfZndub2RlX2FkZF9saW5rcyhzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE2OTctXFx0Zm9yX2VhY2hfcHJvcGVydHlfb2Zfbm9kZShjb25fbnAsIHApXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjE2OTg6XFx0XFx0b2ZfbGlua19wcm9wZXJ0eShjb25fbnAsIHAtXFx1MDAzZW5hbWUpO1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNjk5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNTo0OC44OTEzNjQzODJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyMTc2NDQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBvZl9md25vZGVfYWRkX2xpbmtzYCBhbmQgaXRzIFBsYWNlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG9mX2Z3bm9kZV9hZGRfbGlua3NgIGZ1bmN0aW9uLiBJdCdzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBtZWFucyBpdHMgc2NvcGUgaXMgbGltaXRlZCB0byB0aGUgY3VycmVudCBmaWxlLiBCdXQgdGhlIGludGVyZXN0aW5nIHBhcnQgaXMgd2hlcmUgaXQncyAqdXNlZCouIEl0J3MgYXNzaWduZWQgdG8gdGhlIGBhZGRfbGlua3NgIGZpZWxkIHdpdGhpbiB0aGUgYG9mX2Z3bm9kZV9vcHNgIHN0cnVjdHVyZSwgcmlnaHQ/IE5vdyBJIG5lZWQgdG8gY2hlY2sg4oCTIGlzIGBvZl9md25vZGVfb3BzYCBleHBvcnRlZD8gVGhhdCBhc3NpZ25tZW50IHNlZW1zIGEgYml0IG9kZCBpZiB0aGUgc3RydWN0dXJlIGlzbid0IGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHRoaXMgYHN0YXRpY2AgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCBleHRlcm5hbGx5IHRocm91Z2ggdGhhdCBzdHJ1Y3R1cmUuIElmIGl0IGlzLCB3aHkgdGhlIGBzdGF0aWNgIGRlY2xhcmF0aW9uPyBNYXliZSB0aGVyZSdzIHNvbWUgY2xldmVyIGRlc2lnbiByZWFzb24sIGxpa2UgbGltaXRpbmcgdGhlIG5hbWVzcGFjZSBwb2xsdXRpb24gd2l0aGluIHRoaXMgcGFydGljdWxhciBmaWxlIGFuZCB1c2luZyB0aGUgZnVuY3Rpb24gaW5kaXJlY3RseSB0aHJvdWdoIGEgc3BlY2lmaWMgc3RydWN0dXJlLiBPciBwZXJoYXBzIEknbSBtaXNzaW5nIHNvbWV0aGluZyBtb3JlIGZ1bmRhbWVudGFsIGFib3V0IGhvdyB0aGlzIHBvcnRpb24gb2YgdGhlIGNvZGUgd29ya3MuIEknbSBnb2luZyB0byB0cmFjayBkb3duIHdoZXJlIGBvZl9md25vZGVfb3BzYCBpcyBkZWZpbmVkIGFuZCB1c2VkIHRvIGJldHRlciB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM2OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA1OjUyLjcxMzEzMjQyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjAwNDg3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvZl9md25vZGVfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvb2YvcHJvcGVydHkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL29mL3Byb3BlcnR5LmM9MTY4Nj1zdGF0aWMgaW50IG9mX2Z3bm9kZV9hZGRfbGlua3Moc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNzAyLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoxNzAzOmNvbnN0IHN0cnVjdCBmd25vZGVfb3BlcmF0aW9ucyBvZl9md25vZGVfb3BzID0ge1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNzA0LVxcdC5nZXQgPSBvZl9md25vZGVfZ2V0LFxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE3MjctfTtcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MTcyODpFWFBPUlRfU1lNQk9MX0dQTChvZl9md25vZGVfb3BzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDU6NTIuNzY1MTQzNjM0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzcxMDk1OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqVmVyaWZ5aW5nIHRoZSBDYWxsIHRvIGBhZGRfbGlua3NgKipcblxuT2theSwgc28gSSdtIHByZXR0eSBzdXJlIGBvZl9md25vZGVfb3BzYCBpcyBleHBvcnRlZCwgdGhhdCBtdWNoIEkgcmVtZW1iZXIuIE5vdywgdGhlIGtleSBpcyBmaWd1cmluZyBvdXQgKndoZXJlKiBgYWRkX2xpbmtzYCBhY3R1YWxseSBnZXRzIGNhbGxlZCBmcm9tLCBpbiByZWxhdGlvbiB0byB0aGF0IHN0cnVjdHVyZS4gSSBiZWxpZXZlIHRoZSBmdW5jdGlvbiBpbiBgZHJpdmVycy9iYXNlL2NvcmUuY2AgdGhhdCdzIHJlc3BvbnNpYmxlIGZvciB0aGUgdHJhbnNsYXRpb24gYmV0d2VlbiB0aGUgZGV2bGluayBhbmQgZmlybXdhcmUgbm9kZSBpcyBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIGBmd19kZXZsaW5rX3BhcnNlX2Z3bm9kZWAuIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCByaWdodCBub3csIGJlY2F1c2UgdGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGZ1bmN0aW9uIGNhbGwuIExldCdzIGdvIGNoZWNrIHRoZSBjb2RlIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODY0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDU6NTUuOTAyMjU2MDU0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQxODgxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZGRfbGlua3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iYXNlL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jhc2UvY29yZS5jPTE4MzA9c3RhdGljIHZvaWQgZndfZGV2bGlua19wYXJzZV9md25vZGUoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcXG4tLVxcbmRyaXZlcnMvYmFzZS9jb3JlLmMtMTgzNC1cXG5kcml2ZXJzL2Jhc2UvY29yZS5jOjE4MzU6XFx0Zndub2RlX2NhbGxfaW50X29wKGZ3bm9kZSwgYWRkX2xpbmtzKTtcXG5kcml2ZXJzL2Jhc2UvY29yZS5jLTE4MzYtXFx0Zndub2RlX3NldF9mbGFnKGZ3bm9kZSwgRldOT0RFX0ZMQUdfTElOS1NfQURERUQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNTo1NS45NTE2ODA0NjlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzOTgzODU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCBhaW1pbmcgZm9yIGEgZnVsc29tZSByZW5kZXJpbmc6XG5cbioqRGVlcCBEaXZlIG9uIGBmd19kZXZsaW5rX3BhcnNlX2Z3bm9kZWAqKlxuXG5SaWdodCwgbGV0IG1lIHNlZS4uLiBJJ20gbG9va2luZyBhdCBgZndfZGV2bGlua19wYXJzZV9md25vZGVgLiBPa2F5LCAqdGhhdCogZnVuY3Rpb24gaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIEludGVyZXN0aW5nLiBTdGF0aWMsIHNvIGl0J3Mgb25seSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGlzIHRyYW5zbGF0aW9uIHVuaXQuIEl0J3MgYSBrZXkgZnVuY3Rpb24gaW4gcGFyc2luZyBhIGRldmljZSdzIGZpcm13YXJlIG5vZGUgYW5kIGxpbmtpbmcgaXRzIHJlc291cmNlcy4gTm93LCB0aGUgcXVlc3Rpb24gaXMsICp3aG8ncyBjYWxsaW5nIGl0Kj8gVGhhdCdzIHRoZSBjcml0aWNhbCBwaWVjZSBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGZpcm13YXJlIGxpbmtpbmcgcHJvY2VzcyBpcyBpbml0aWF0ZWQgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIGZsb3cuIElzIGl0IGNhbGxlZCBkaXJlY3RseSBmcm9tIGEgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uLCBvciBtYXliZSBmcm9tIGEgZ2VuZXJpYyBkcml2ZXIgY29yZSBoZWxwZXI/IE9yIHBlcmhhcHMgaXQncyBhbiBpbmRpcmVjdCBjYWxsIHRocm91Z2ggYSBjaGFpbiBvZiBmdW5jdGlvbnM/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2ssIGFuZCB0aGUgY29udGV4dHMgaW4gd2hpY2ggdGhpcyBzdGF0aWMgZnVuY3Rpb24gaXMgdXRpbGl6ZWQgaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoZSBwb2ludCBvZiBkZWNsYXJhdGlvbiB0byBmaW5kIHRoZSBjYWxsZXJzIHRvIHRydWx5IHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGlzIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjM5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDU6NTkuMTkxNTIyMzM3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE2Mzc1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmd19kZXZsaW5rX3BhcnNlX2Z3bm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jhc2UvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmFzZS9jb3JlLmM9MTgyNT1ib29sIGZ3X2RldmxpbmtfaXNfc3RyaWN0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Jhc2UvY29yZS5jLTE4MjktXFxuZHJpdmVycy9iYXNlL2NvcmUuYzoxODMwOnN0YXRpYyB2b2lkIGZ3X2RldmxpbmtfcGFyc2VfZndub2RlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXFxuZHJpdmVycy9iYXNlL2NvcmUuYy0xODMxLXtcXG4tLVxcbmRyaXZlcnMvYmFzZS9jb3JlLmM9MTgzOT1zdGF0aWMgdm9pZCBmd19kZXZsaW5rX3BhcnNlX2Z3dHJlZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxcbi0tXFxuZHJpdmVycy9iYXNlL2NvcmUuYy0xODQyLVxcbmRyaXZlcnMvYmFzZS9jb3JlLmM6MTg0MzpcXHRmd19kZXZsaW5rX3BhcnNlX2Z3bm9kZShmd25vZGUpO1xcbmRyaXZlcnMvYmFzZS9jb3JlLmMtMTg0NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDU6NTkuMjM4NjkxMjczWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNzgzNTM3NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlN0YXRpYyBGdW5jdGlvbiBJbnZlc3RpZ2F0aW9uOiBmd19kZXZsaW5rX3BhcnNlX2Z3dHJlZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBmd19kZXZsaW5rX3BhcnNlX2Z3dHJlZWAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIG5vdGljZSBpdCdzIGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rLCBcIkhtbSwgc3RhdGljLi4uIHNvIGl0J3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGlzIGNvbXBpbGF0aW9uIHVuaXQuXCIgVGhpcyBuYXJyb3dzIGRvd24gd2hlcmUgSSBuZWVkIHRvIGxvb2sgZm9yIGNhbGxzIHRvIGl0LiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZmlndXJlIG91dCAqKndoYXQqKiBhY3R1YWxseSBjYWxscyB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgcG9pbnQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgaW1wYWN0LiBXaGVyZSBhcmUgd2UgY2FsbGluZyB0aGlzIGZyb20/IExldCdzIHRyYWNlIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzM3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDY6MDIuMzE3MDQ4MTg3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTI0MzM2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmd19kZXZsaW5rX3BhcnNlX2Z3dHJlZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jhc2UvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmFzZS9jb3JlLmM9MTgzMD1zdGF0aWMgdm9pZCBmd19kZXZsaW5rX3BhcnNlX2Z3bm9kZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxcbi0tXFxuZHJpdmVycy9iYXNlL2NvcmUuYy0xODM4LVxcbmRyaXZlcnMvYmFzZS9jb3JlLmM6MTgzOTpzdGF0aWMgdm9pZCBmd19kZXZsaW5rX3BhcnNlX2Z3dHJlZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxcbmRyaXZlcnMvYmFzZS9jb3JlLmMtMTg0MC17XFxuLS1cXG5kcml2ZXJzL2Jhc2UvY29yZS5jLTE4NDUtXFx0d2hpbGUgKChjaGlsZCA9IGZ3bm9kZV9nZXRfbmV4dF9hdmFpbGFibGVfY2hpbGRfbm9kZShmd25vZGUsIGNoaWxkKSkpXFxuZHJpdmVycy9iYXNlL2NvcmUuYzoxODQ2OlxcdFxcdGZ3X2RldmxpbmtfcGFyc2VfZnd0cmVlKGNoaWxkKTtcXG5kcml2ZXJzL2Jhc2UvY29yZS5jLTE4NDctfVxcbi0tXFxuZHJpdmVycy9iYXNlL2NvcmUuYz0yNDIyPXN0YXRpYyB2b2lkIGZ3X2RldmxpbmtfbGlua19kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9iYXNlL2NvcmUuYy0yNDI4LVxcbmRyaXZlcnMvYmFzZS9jb3JlLmM6MjQyOTpcXHRmd19kZXZsaW5rX3BhcnNlX2Z3dHJlZShmd25vZGUpO1xcbmRyaXZlcnMvYmFzZS9jb3JlLmMtMjQzMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDY6MDIuMzYyMjk1MzQyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMTU1MTY2MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqVGhpbmtpbmcgQWJvdXQgYGZ3X2RldmxpbmtfbGlua19kZXZpY2VgKipcblxuT2theSwgc28gYGZ3X2RldmxpbmtfbGlua19kZXZpY2VgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gQmVpbmcgYHN0YXRpY2AgbWVhbnMgaXQncyBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQsIHNvIGl0J3Mgbm90IG1lYW50IHRvIGJlIGNhbGxlZCBmcm9tIGFueXdoZXJlIGVsc2UgaW4gdGhlIGtlcm5lbCBkaXJlY3RseS4gVGhpcyBsaW1pdHMgaXRzIHNjb3BlIGFuZCBtYWtlcyBtZSB3b25kZXIgKndoeSogdGhpcyBkZXNpZ24gZGVjaXNpb24gd2FzIG1hZGUuIElzIGl0IGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiBmb3IgYSBzcGVjaWZpYyBtb2R1bGUgb3Igc3Vic3lzdGVtPyBJcyBpdCBtZWFudCB0byBwcmV2ZW50IGFjY2lkZW50YWwgZXh0ZXJuYWwgY2FsbHMgdGhhdCBjb3VsZCBicmVhayBzb21lIGludGVybmFsIHN0YXRlIG9yIGludmFyaWFudD9cblxuVGhlIGNydWNpYWwgcXVlc3Rpb24gbm93IGJlY29tZXM6ICpXaGF0KiBpcyBjYWxsaW5nIHRoaXMgc3RhdGljIGZ1bmN0aW9uPyBJIG5lZWQgdG8gdHJhY2sgZG93biBhbGwgdGhlIGNhbGwgc2l0ZXMgd2l0aGluIHRoZSBzb3VyY2UgZmlsZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBnb2luZyB0byBiZSB2aXRhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uIEkgbmVlZCB0byBnZXQgaW50byB0aGUgY29kZSBhbmQgc3RhcnQgdHJhY2luZyB0aGUgZXhlY3V0aW9uIGZsb3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gd2hhdGV2ZXIgZGV2aWNlIGxpbmsgZnJhbWV3b3JrIGlzIGJlaW5nIHVzZWQuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyMjEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNjowNS4zNzc4MTQ1MjRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NzU4MzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ3X2RldmxpbmtfbGlua19kZXZpY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iYXNlL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jhc2UvY29yZS5jPTIzOTQ9c3RhdGljIHZvaWQgX19md19kZXZsaW5rX2xpbmtfdG9fc3VwcGxpZXJzKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvYmFzZS9jb3JlLmMtMjQyMS1cXG5kcml2ZXJzL2Jhc2UvY29yZS5jOjI0MjI6c3RhdGljIHZvaWQgZndfZGV2bGlua19saW5rX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuZHJpdmVycy9iYXNlL2NvcmUuYy0yNDIzLXtcXG4tLVxcbmRyaXZlcnMvYmFzZS9jb3JlLmM9MzY3OT1pbnQgZGV2aWNlX2FkZChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2Jhc2UvY29yZS5jLTM3OTMtXFx0XFx0ZGV2LVxcdTAwM2Vmd25vZGUtXFx1MDAzZWRldiA9IGRldjtcXG5kcml2ZXJzL2Jhc2UvY29yZS5jOjM3OTQ6XFx0XFx0ZndfZGV2bGlua19saW5rX2RldmljZShkZXYpO1xcbmRyaXZlcnMvYmFzZS9jb3JlLmMtMzc5NS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA2OjA1LjQyNzU3OTMwOFoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODgxMzk1NDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBEZXZpY2UgTGluayBJbnRlZ3JhdGlvbiBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGRldmljZV9hZGRgIGZ1bmN0aW9uLiBJdCdzIGV4cG9ydGVkLCBhbmQgaXQgZW5kcyB1cCBjYWxsaW5nIGBmd19kZXZsaW5rX2xpbmtfZGV2aWNlYCwgd2hpY2ggbWFrZXMgaXQgYSBzZW5zaWJsZSBzdGFydGluZyBwb2ludC4gSG93ZXZlciwgYGRldmljZV9hZGRgIGlzIGEgc3VwZXIgZ2VuZXJpYyBlbnRyeSBwb2ludCDigJMgaXQncyBnb2luZyB0byBiZSBoaXQgYWxsIHRoZSB0aW1lLCB3aGljaCBpc24ndCBpZGVhbCBmb3IgdGhpcyBzcGVjaWZpYyB0YXNrLiBJIHdhbnQgc29tZXRoaW5nIG1vcmUgZm9jdXNlZC5cblxuTGV0J3Mgc2Vl4oCmIEkgdGhpbmsgSSBjYW4gYnlwYXNzIHNvbWUgb2YgdGhlIG5vaXNlIGFuZCB1c2UgYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAsIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgLCBhbmQgYGRldmljZV9saW5rc19kcml2ZXJfYm91bmRgIGRpcmVjdGx5LiBUaGlzIHNob3VsZCBhbGxvdyBtZSB0byBmb2N1cyBtb3JlIHRpZ2h0bHkgb24gd2hhdCBJIGFjdHVhbGx5IG5lZWQgdG8gZ2V0IGRvbmUsIHJpZ2h0P1xuXG5BbHJpZ2h0LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIHZlcmlmeSBpZiB0aG9zZSBzeW1ib2xzIGFyZSBleHBvcnRlZC4gR29vZCwgYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAgaXMgZXhwb3J0ZWQgd2l0aCBgRVhQT1JUX1NZTUJPTF9HUExgLiBBbmQsIGNvbmZpcm1pbmcsIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgIGlzIGFsc28gZXhwb3J0ZWQgd2l0aCBgRVhQT1JUX1NZTUJPTGAuIEV4Y2VsbGVudC5cblxuTm93LCB0aGF0IGJyaW5ncyB1cyB0byBgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZGAuICBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgb25lIGlzbid0IGV4cG9ydGVkLi4uIExldCBtZSBqdXN0Li4uIHllcywgaXQncyBub3QgZXhwb3J0ZWQsIGJ1dCBpdCdzICpub3QqIHN0YXRpYywgc28gSSBjYW4gc3RpbGwgYWNjZXNzIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzcwMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNjoxMC4zMDg5NzY4NjVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzU3ODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldmljZV9saW5rc19kcml2ZXJfYm91bmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iYXNlL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jhc2UvY29yZS5jPTEzODc9dm9pZCBkZXZpY2VfbGlua3NfZm9yY2VfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2Jhc2UvY29yZS5jLTE0MDgtLyoqXFxuZHJpdmVycy9iYXNlL2NvcmUuYzoxNDA5OiAqIGRldmljZV9saW5rc19kcml2ZXJfYm91bmQgLSBVcGRhdGUgZGV2aWNlIGxpbmtzIGFmdGVyIHByb2JpbmcgaXRzIGRyaXZlci5cXG5kcml2ZXJzL2Jhc2UvY29yZS5jLTE0MTAtICogQGRldjogRGV2aWNlIHRvIHVwZGF0ZSB0aGUgbGlua3MgZm9yLlxcbi0tXFxuZHJpdmVycy9iYXNlL2NvcmUuYy0xNDE4LSAqL1xcbmRyaXZlcnMvYmFzZS9jb3JlLmM6MTQxOTp2b2lkIGRldmljZV9saW5rc19kcml2ZXJfYm91bmQoc3RydWN0IGRldmljZSAqZGV2KVxcbmRyaXZlcnMvYmFzZS9jb3JlLmMtMTQyMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA2OjEwLjM1NjczNzU5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTk5MDE4MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiBhIHJlbGV2YW50IGZpZWxkOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogRXhwb3J0YWJpbGl0eSoqXG5cblJpZ2h0LCBzbyB0aGUgY29yZSBxdWVzdGlvbiBoZXJlIGlzOiBpcyB0aGlzIHRoaW5nLCB3aGF0ZXZlciBcInRoaXNcIiByZWZlcnMgdG8gaW4gdGhlIGNvbnRleHQsIGRlc2lnbmVkIGZvciBleHBvcnQ/IFdlJ3JlIHRhbGtpbmcgYWJvdXQgbWFya2V0YWJpbGl0eSBiZXlvbmQgdGhlIGltbWVkaWF0ZSBlbnZpcm9ubWVudCwgdGhlIGRvbWVzdGljIHNwaGVyZS4gVGhpcyBpc24ndCBqdXN0IGFib3V0IHdoZXRoZXIgaXQgKmNvdWxkKiBiZSBleHBvcnRlZCwgd2hpY2ggaXMgYSBydWRpbWVudGFyeSBmaXJzdCBzdGVwLiBXZSBuZWVkIHRvIGRpc3NlY3QgdGhlIGludGVudCBiZWhpbmQgaXRzIGNyZWF0aW9uLiBXYXMgZ2xvYmFsIGRpc3RyaWJ1dGlvbiBldmVuIGEgY29uc2lkZXJhdGlvbiBkdXJpbmcgdGhlIGRlc2lnbiBwaGFzZT8gVGhlIGltcGxpY2F0aW9ucyBhcmUgc2lnbmlmaWNhbnQuIElmIGl0ICp3YXNuJ3QqIGludGVuZGVkIGZvciBleHBvcnQsIHRoZXJlIGFyZSBhIGhvc3Qgb2YgcG90ZW50aWFsIGlzc3VlcyB0byBldmFsdWF0ZTogcmVndWxhdG9yeSBjb21wbGlhbmNlLCBsaW5ndWlzdGljIGJhcnJpZXJzIGluIGRvY3VtZW50YXRpb24gYW5kIG1hcmtldGluZywgY3VsdHVyYWwgYWRhcHRhdGlvbnMgbmVlZGVkIGZvciB1c2VyIGFjY2VwdGFuY2UsIGxvZ2lzdGljYWwgY2hhbGxlbmdlcyB3aXRoIHRyYW5zcG9ydGF0aW9uIGFuZCBoYW5kbGluZy4uLiB0aGUgbGlzdCBpcyBsb25nLiBDb252ZXJzZWx5LCBpZiBleHBvcnQgKndhcyogYSBkZXNpZ24gcGFyYW1ldGVyLCB0aGF0IG9wZW5zIGEgZGlmZmVyZW50IGxpbmUgb2YgaW5xdWlyeTogd2hhdCBzcGVjaWZpYyBtYXJrZXRzIHdlcmUgdGFyZ2V0ZWQ/IFdoYXQgYWRqdXN0bWVudHMgd2VyZSBtYWRlIHRvIGZhY2lsaXRhdGUgaW50ZXJuYXRpb25hbCBzYWxlcz8gVGhlIGRlcHRoIG9mIHRoZSBleHBvcnQgcmVhZGluZXNzIGlzIHBhcmFtb3VudCB0byBkZXRlcm1pbmluZyB0aGUgZWZmb3J0IHJlcXVpcmVkIHRvIGdldCBpdCBvdXQgdGhlcmUuIFRoaXMgaXMgYSBjcml0aWNhbCBmaXJzdCBxdWVzdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzOTksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA2OjEzLjk1NjY0MjI3OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5NDQyODUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKmRldmljZV9saW5rc19kcml2ZXJfYm91bmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iYXNlL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDY6MTQuMDA1NTk0NzI0WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTk4MTkyMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGdpdmVuIHdoYXQgSSdtIHNlZWluZzpcblxuKipBbmFseXppbmcgYSBOb24tRXhwb3J0ZWQsIE5vbi1TdGF0aWMgRnVuY3Rpb24gQ2FsbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgZnVuY3Rpb24gdGhhdCdzICpub3QqIGV4cG9ydGVkLCBtZWFuaW5nIGl0J3Mgbm90IG1lYW50IHRvIGJlIGRpcmVjdGx5IGFjY2Vzc2libGUgb3V0c2lkZSBvZiBpdHMgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBUaGF0J3MgdGhlIGZpcnN0IGtleSBwb2ludC4gQnV0LCBpdCdzICphbHNvKiBub3Qgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gU3RhdGljIHdvdWxkIGxpbWl0IGl0cyBzY29wZSBldmVuIGZ1cnRoZXIsIHRvIHRoZSBzcGVjaWZpYyBmaWxlLiBCZWNhdXNlIGl0J3Mgbm9uLXN0YXRpYyBidXQgbm90IGV4cG9ydGVkLCBteSBodW5jaCBpcyB0aGF0IGl0J3MgbWVhbnQgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gdGhlIG1vZHVsZSBvciBsaWJyYXJ5IGl0IHJlc2lkZXMuIFRoZSBmYWN0IHRoYXQgaXQgaXNuJ3QgZXhwb3J0ZWQgaW5kaWNhdGVzIGEgZGVncmVlIG9mIGVuY2Fwc3VsYXRpb24gYW5kIGxpa2VseSBhIGNvbnNjaW91cyBkZXNpZ24gY2hvaWNlIHRvIGhpZGUgaXQgZnJvbSBnZW5lcmFsIHVzZSwgcGVyaGFwcyB0byBwcm90ZWN0IGFnYWluc3QgdW5pbnRlbmRlZCB1c2Ugb3IgdG8gc2lnbmFsIHRoYXQgdGhlIGZ1bmN0aW9uJ3MgaW50ZXJmYWNlIG1pZ2h0IGNoYW5nZSB3aXRob3V0IG5vdGljZS4gVGhlIHNlY29uZCB0aGluZyB0aGF0IEkgaGF2ZSBpcyBhIHJlZmVyZW5jZSB0byBpdHMgY2FsbGVyOiBgZHJpdmVycy9iYXNlL2RkLmNgLiBUaGlzIHRlbGxzIG1lICpleGFjdGx5KiB3aGVyZSB0aGUgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCwgZ2l2aW5nIG1lIGEgY3J1Y2lhbCBwb2ludCBvZiBjb250ZXh0LiBOb3cgSSBjYW4gZGl2ZSBpbnRvIHRoYXQgc3BlY2lmaWMgZmlsZSB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgaGlkZGVuIGZ1bmN0aW9uIGlzIG5lY2Vzc2FyeSwgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgb3ZlcmFsbCBzeXN0ZW0sIGFuZCB3aGF0IHNwZWNpZmljIHB1cnBvc2UgaXQgc2VydmVzIHdpdGhpbiB0aGF0IGRyaXZlcidzIGNvZGUgYmFzZS4gVGhpcyBtYWtlcyBkZWJ1Z2dpbmcgb3IgbW9kaWZpY2F0aW9uIGVhc2llciBhcyBpdCBzaWduaWZpY2FudGx5IHJlZHVjZXMgdGhlIHNlYXJjaCBzcGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2OTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNjoxNy43MjU0MTc4NTFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTEzNzM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmFzZS9kZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmFzZS9kZC5jPTQ0Nj1zdGF0aWMgdm9pZCBkcml2ZXJfYm91bmQoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9iYXNlL2RkLmMtNDU2LVxcdGtsaXN0X2FkZF90YWlsKFxcdTAwMjZkZXYtXFx1MDAzZXAtXFx1MDAzZWtub2RlX2RyaXZlciwgXFx1MDAyNmRldi1cXHUwMDNlZHJpdmVyLVxcdTAwM2VwLVxcdTAwM2VrbGlzdF9kZXZpY2VzKTtcXG5kcml2ZXJzL2Jhc2UvZGQuYzo0NTc6XFx0ZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZChkZXYpO1xcbmRyaXZlcnMvYmFzZS9kZC5jLTQ1OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDY6MTguMDA0NTYwMDExWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMDM1NjY5NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkV4YW1pbmluZyBEcml2ZXIgQmluZGluZyBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW1tZWRpYXRlIGlzc3VlIGlzbid0IHdpdGggYGRldmljZV9saW5rc19kcml2ZXJfYm91bmRgLiBJdCdzIG5vbi1zdGF0aWMsIHNvIGluY2x1c2lvbiBpc24ndCBhIHByb2JsZW0sIHdoaWNoIGlzIGdvb2QuIFRoYXQncyBhIHJlbGllZi5cblxuQnV0IG5vdyBJJ20gc2VlaW5nIGEgcG90ZW50aWFsIHNuYWcuIGBvZl9saW5rX3RvX3BoYW5kbGVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0J3Mgbm90IGlkZWFsIGlmIEkgbmVlZCB0byB1c2UgaXQgZGlyZWN0bHksIGJ1dCB3YWl0Li4uIEl0J3MgKnVzZWQqIGJ5IGBvZl9saW5rX3Byb3BlcnR5YCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYG9mX2Z3bm9kZV9hZGRfbGlua3NgLiBPa2F5LCBgb2ZfZndub2RlX2FkZF9saW5rc2AgaXMgdGhlIGtleS4gQW5kICp0aGF0KiBpcyBjYWxsZWQgdmlhIHRoZSBnZW5lcmljIGBmd25vZGVfY2FsbF9pbnRfb3AoZndub2RlLCBhZGRfbGlua3MpYCBjb25zdHJ1Y3QuIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJcyB0aGVyZSAqYW55dGhpbmcqIHdpdGhpbiBgZHJpdmVycy9vZi9wcm9wZXJ0eS5jYCB0aGF0J3MgYWNjZXNzaWJsZSwgYSBub24tc3RhdGljIGZ1bmN0aW9uIEkgY291bGQgcG90ZW50aWFsbHkgbGV2ZXJhZ2U/IFRoYXQncyB0aGUgcmVhbCBxdWVzdGlvbiBub3cuIExldCBtZSBjaGVjayB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNDgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDY6MjIuMDA4MTI5NjU5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjA5MzUwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvZl9md25vZGVfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvb2YvcHJvcGVydHkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL29mL3Byb3BlcnR5LmM9MTY4Nj1zdGF0aWMgaW50IG9mX2Z3bm9kZV9hZGRfbGlua3Moc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNzAyLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoxNzAzOmNvbnN0IHN0cnVjdCBmd25vZGVfb3BlcmF0aW9ucyBvZl9md25vZGVfb3BzID0ge1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xNzA0LVxcdC5nZXQgPSBvZl9md25vZGVfZ2V0LFxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE3MjctfTtcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MTcyODpFWFBPUlRfU1lNQk9MX0dQTChvZl9md25vZGVfb3BzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDY6MjIuMDYwMjMxNzk0WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMTg2NzE2MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYG9mX2Z3bm9kZV9vcHNgIFN0cnVjdHVyZSoqXG5cblJpZ2h0LCBgb2ZfZndub2RlX29wc2AgaXMgZXhwb3J0ZWQsIGJ1dCBpdCdzIGEgKnN0cnVjdHVyZSouIFRoYXQgaW1tZWRpYXRlbHkgc2V0cyBvZmYgYSBtZW50YWwgZmxhZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgKnVzZWQqLCB3aGF0IGZ1bmN0aW9ucyBhcmUgKmFwcGxpZWQqIHRvIGl0LCBub3QganVzdCB0aGUgc3RydWN0dXJlIGl0c2VsZi4gSXQncyBhbG1vc3QgY2VydGFpbmx5IGEgY29sbGVjdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVycywgb3IgYXQgbGVhc3QgYSByZWxhdGVkIGRhdGEgc3RydWN0dXJlLiBTbywgbGV0J3MgYmFjayB1cCBhIGJpdCBhbmQgc2VlIHdoYXQncyBnb2luZyBvbiBpbiBgZHJpdmVycy9vZi9wcm9wZXJ0eS5jYC4gVGhlIGZhY3QgdGhhdCBpdCdzIGV4cG9ydGVkIHN1Z2dlc3RzIGl0J3MgYSBjcnVjaWFsIHBhcnQgb2YgdGhlIE9GVyBmcmFtZXdvcmssIGJ1dCB0aGUgY29udGV4dCBpcyBtaXNzaW5nLCBzbyBsZXQncyBzdGFydCB3aXRoIHRoaXMgZmlsZS4gSSBuZWVkIHRvIGh1bnQgZm9yIGFueXRoaW5nICplbHNlKiB0aGF0IG1pZ2h0IGJlIGV4cG9ydGVkIGFuZCByZWxhdGVkLCBvciBhbnkgZnVuY3Rpb25zIHRoYXQgdGFrZSBvciByZXR1cm4gYW4gYG9mX2Z3bm9kZV9vcHNgIHBvaW50ZXIgb3Igc3RydWN0dXJlIGFzIGFuIGFyZ3VtZW50LiBJ4oCZbSB0aGlua2luZyB0aGVyZSBtdXN0IGJlIHNvbWUgc3VwcG9ydGluZyBmdW5jdGlvbnMgdGhhdCBvcGVyYXRlIG9uIGl0LCBzb21lIHdheSB0byBzZXQgb3IgZ2V0IHByb3BlcnRpZXMsIGVudW1lcmF0ZSBjaGlsZHJlbiwgdGhhdCBzb3J0IG9mIHRoaW5nLiBJIHdhbnQgdG8gYnVpbGQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBPRlcgaW50ZXJmYWNlLCBhbmQgdGhpcyBgb2ZfZndub2RlX29wc2Agc3RydWN0dXJlIGlzIG9idmlvdXNseSBhIGtleSBlbGVtZW50LiBJIHN1c3BlY3QgaXQncyB0aGUgY29yZSBvZiBob3cgZGV2aWNlIHRyZWUgbm9kZXMgYW5kIHRoZWlyIHByb3BlcnRpZXMgYXJlIG1hbmFnZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzA5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDY6MjYuMTc4OTA2NjU4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzY4NjM4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvb2YvcHJvcGVydHkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL29mL3Byb3BlcnR5LmM9NDU9Ym9vbCBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqcHJvcG5hbWUpXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNTgtfVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzo1OTpFWFBPUlRfU1lNQk9MKG9mX3Byb3BlcnR5X3JlYWRfYm9vbCk7XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTYwLVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTY4PWJvb2wgb2ZfZ3JhcGhfaXNfcHJlc2VudChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNzgtfVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzo3OTpFWFBPUlRfU1lNQk9MKG9mX2dyYXBoX2lzX3ByZXNlbnQpO1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy04MC1cXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYz05NT1pbnQgb2ZfcHJvcGVydHlfY291bnRfZWxlbXNfb2Zfc2l6ZShjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTExMi19XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjExMzpFWFBPUlRfU1lNQk9MX0dQTChvZl9wcm9wZXJ0eV9jb3VudF9lbGVtc19vZl9zaXplKTtcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTE0LVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTE2OD1pbnQgb2ZfcHJvcGVydHlfcmVhZF91OF9pbmRleChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE4MS19XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjE4MjpFWFBPUlRfU1lNQk9MX0dQTChvZl9wcm9wZXJ0eV9yZWFkX3U4X2luZGV4KTtcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTgzLVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTIwMT1pbnQgb2ZfcHJvcGVydHlfcmVhZF91MTZfaW5kZXgoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCxcXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0yMTQtfVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoyMTU6RVhQT1JUX1NZTUJPTF9HUEwob2ZfcHJvcGVydHlfcmVhZF91MTZfaW5kZXgpO1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0yMTYtXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9MjM0PWludCBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTI0OC19XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjI0OTpFWFBPUlRfU1lNQk9MX0dQTChvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleCk7XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTI1MC1cXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYz0yNjg9aW50IG9mX3Byb3BlcnR5X3JlYWRfdTY0X2luZGV4KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMjgxLX1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MjgyOkVYUE9SVF9TWU1CT0xfR1BMKG9mX3Byb3BlcnR5X3JlYWRfdTY0X2luZGV4KTtcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMjgzLVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTMwOD1pbnQgb2ZfcHJvcGVydHlfcmVhZF92YXJpYWJsZV91OF9hcnJheShjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTMzMS19XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjMzMjpFWFBPUlRfU1lNQk9MX0dQTChvZl9wcm9wZXJ0eV9yZWFkX3ZhcmlhYmxlX3U4X2FycmF5KTtcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMzMzLVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTM1OD1pbnQgb2ZfcHJvcGVydHlfcmVhZF92YXJpYWJsZV91MTZfYXJyYXkoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCxcXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0zODEtfVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzozODI6RVhQT1JUX1NZTUJPTF9HUEwob2ZfcHJvcGVydHlfcmVhZF92YXJpYWJsZV91MTZfYXJyYXkpO1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0zODMtXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9NDA1PWludCBvZl9wcm9wZXJ0eV9yZWFkX3ZhcmlhYmxlX3UzMl9hcnJheShjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTQyOC19XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjQyOTpFWFBPUlRfU1lNQk9MX0dQTChvZl9wcm9wZXJ0eV9yZWFkX3ZhcmlhYmxlX3UzMl9hcnJheSk7XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTQzMC1cXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYz00NDY9aW50IG9mX3Byb3BlcnR5X3JlYWRfdTY0KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGNvbnN0IGNoYXIgKnByb3BuYW1lLFxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTQ1OS19XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjQ2MDpFWFBPUlRfU1lNQk9MX0dQTChvZl9wcm9wZXJ0eV9yZWFkX3U2NCk7XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTQ2MS1cXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYz00ODM9aW50IG9mX3Byb3BlcnR5X3JlYWRfdmFyaWFibGVfdTY0X2FycmF5KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNTA4LX1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6NTA5OkVYUE9SVF9TWU1CT0xfR1BMKG9mX3Byb3BlcnR5X3JlYWRfdmFyaWFibGVfdTY0X2FycmF5KTtcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNTEwLVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTUzMD1pbnQgb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgY2hhciAqcHJvcG5hbWUsXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNTQzLX1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6NTQ0OkVYUE9SVF9TWU1CT0xfR1BMKG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKTtcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNTQ1LVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTU2MD1pbnQgb2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGNvbnN0IGNoYXIgKnByb3BuYW1lLFxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTU4NS19XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjU4NjpFWFBPUlRfU1lNQk9MX0dQTChvZl9wcm9wZXJ0eV9tYXRjaF9zdHJpbmcpO1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy01ODctXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9NTk5PWludCBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19oZWxwZXIoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucCxcXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy02MjMtfVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzo2MjQ6RVhQT1JUX1NZTUJPTF9HUEwob2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdfaGVscGVyKTtcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNjI1LVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYz02MjY9Y29uc3QgX19iZTMyICpvZl9wcm9wX25leHRfdTMyKGNvbnN0IHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCwgY29uc3QgX19iZTMyICpjdXIsXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNjQ2LX1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6NjQ3OkVYUE9SVF9TWU1CT0xfR1BMKG9mX3Byb3BfbmV4dF91MzIpO1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy02NDgtXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTY0OT1jb25zdCBjaGFyICpvZl9wcm9wX25leHRfc3RyaW5nKGNvbnN0IHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCwgY29uc3QgY2hhciAqY3VyKVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTY3OS19XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjY4MDpFWFBPUlRfU1lNQk9MX0dQTChvZl9wcm9wX25leHRfc3RyaW5nKTtcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNjgxLVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTY4OT1pbnQgb2ZfZ3JhcGhfcGFyc2VfZW5kcG9pbnQoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTcwOS19XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjcxMDpFWFBPUlRfU1lNQk9MKG9mX2dyYXBoX3BhcnNlX2VuZHBvaW50KTtcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNzExLVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTcyMD1zdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2dyYXBoX2dldF9wb3J0X2J5X2lkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50LCB1MzIgaWQpXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNzM4LX1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6NzM5OkVYUE9SVF9TWU1CT0wob2ZfZ3JhcGhfZ2V0X3BvcnRfYnlfaWQpO1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy03NDAtXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9NzUyPXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZ3JhcGhfZ2V0X25leHRfcG9ydChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCxcXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy03NzUtfVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzo3NzY6RVhQT1JUX1NZTUJPTChvZl9ncmFwaF9nZXRfbmV4dF9wb3J0KTtcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtNzc3LVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTc4Nz1zdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2dyYXBoX2dldF9uZXh0X3BvcnRfZW5kcG9pbnQoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpwb3J0LFxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTgwMi19XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjgwMzpFWFBPUlRfU1lNQk9MKG9mX2dyYXBoX2dldF9uZXh0X3BvcnRfZW5kcG9pbnQpO1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy04MDQtXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9ODEzPXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZ3JhcGhfZ2V0X25leHRfZW5kcG9pbnQoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQsXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtODU5LX1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6ODYwOkVYUE9SVF9TWU1CT0wob2ZfZ3JhcGhfZ2V0X25leHRfZW5kcG9pbnQpO1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy04NjEtXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9ODcyPXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZ3JhcGhfZ2V0X2VuZHBvaW50X2J5X3JlZ3MoXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtODg2LX1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6ODg3OkVYUE9SVF9TWU1CT0wob2ZfZ3JhcGhfZ2V0X2VuZHBvaW50X2J5X3JlZ3MpO1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy04ODgtXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9ODk2PXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9lbmRwb2ludChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtOTAwLX1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6OTAxOkVYUE9SVF9TWU1CT0wob2ZfZ3JhcGhfZ2V0X3JlbW90ZV9lbmRwb2ludCk7XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTkwMi1cXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYz05MTA9c3RydWN0IGRldmljZV9ub2RlICpvZl9ncmFwaF9nZXRfcG9ydF9wYXJlbnQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTkzMi19XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjkzMzpFWFBPUlRfU1lNQk9MKG9mX2dyYXBoX2dldF9wb3J0X3BhcmVudCk7XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTkzNC1cXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYz05NDI9c3RydWN0IGRldmljZV9ub2RlICpvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KFxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTk1MC19XFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jOjk1MTpFWFBPUlRfU1lNQk9MKG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJlbnQpO1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy05NTItXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9OTYwPXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy05NjktfVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzo5NzA6RVhQT1JUX1NZTUJPTChvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnQpO1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy05NzEtXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9OTc4PXVuc2lnbmVkIGludCBvZl9ncmFwaF9nZXRfZW5kcG9pbnRfY291bnQoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy05ODctfVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzo5ODg6RVhQT1JUX1NZTUJPTChvZl9ncmFwaF9nZXRfZW5kcG9pbnRfY291bnQpO1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy05ODktXFxuLS1cXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM9OTk2PXVuc2lnbmVkIGludCBvZl9ncmFwaF9nZXRfcG9ydF9jb3VudChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTEwMDQtfVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoxMDA1OkVYUE9SVF9TWU1CT0wob2ZfZ3JhcGhfZ2V0X3BvcnRfY291bnQpO1xcbmRyaXZlcnMvb2YvcHJvcGVydHkuYy0xMDA2LVxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jPTEwMTY9c3RydWN0IGRldmljZV9ub2RlICpvZl9ncmFwaF9nZXRfcmVtb3RlX25vZGUoY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTEwNDItfVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYzoxMDQzOkVYUE9SVF9TWU1CT0wob2ZfZ3JhcGhfZ2V0X3JlbW90ZV9ub2RlKTtcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmMtMTA0NC1cXG4tLVxcbmRyaXZlcnMvb2YvcHJvcGVydHkuYz0xNzAzPWNvbnN0IHN0cnVjdCBmd25vZGVfb3BlcmF0aW9ucyBvZl9md25vZGVfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9vZi9wcm9wZXJ0eS5jLTE3MjctfTtcXG5kcml2ZXJzL29mL3Byb3BlcnR5LmM6MTcyODpFWFBPUlRfU1lNQk9MX0dQTChvZl9md25vZGVfb3BzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDY6MjYuMjI2NTk3NzgzWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MjAzNTc1NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBgb2ZfbGlua190b19waGFuZGxlYCwgYnV0IGl0J3MgY2xlYXIgdGhlIHJlYWwgYWN0aW9uIGlzIGhhcHBlbmluZyBlbHNld2hlcmUuIE15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgLCBgX19vZl9tZGlvYnVzX3JlZ2lzdGVyYCwgYW5kIGBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kYC4gVGhvc2UgYXJlIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBzZWUgYE9GYCwgYFBIWUxJQmAsIGFuZCBgT0ZfTURJT2AuIEFoLCBgT0ZfTURJT2AgaXMgdHJpc3RhdGUsIG1lYW5pbmcgaXQgY2FuIGJlIGEgbW9kdWxlLiBJZiB3ZSBuZWVkIGl0IGJ1aWx0LWluLCB3ZSBqdXN0IHdhbnQgdG8gc3BlY2lmeSBgT0ZfTURJT2AgZGlyZWN0bHkuIERvdWJsZS1jaGVja2luZy4uLiB5ZXMsIGBDT05GSUdfT0ZfTURJT2AgaXMgY29ycmVjdC5cblxuTm93LCBsZXQncyB2ZXJpZnkgcmVhY2hhYmlsaXR5LiBgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZGAgaXMgdHJpZ2dlcmVkIHdoZW4gYSBkcml2ZXIgYmluZHMgdG8gYSBkZXZpY2Ug4oCTIHN0cmFpZ2h0Zm9yd2FyZC4gYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAgaXMgcmVhY2hhYmxlIGR1cmluZyBkZXZpY2UgdHJlZS1iYXNlZCBNRElPIGJ1cyByZWdpc3RyYXRpb24uIEFuZCBhcyBJIGV4cGVjdGVkLCBgZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5YCBpcyBjYWxsZWQgZnJvbSBib3RoIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgIGFuZCBgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZGAsIHNvIGl0J3MgYSBjZW50cmFsIHBvaW50IG9mIHRoZSBtb2RpZmljYXRpb25zLlxuXG5HaXZlbiB0aGVzZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMsIEknbSBjb25maWRlbnQgdGhhdCB0aGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gVGhleSByZXByZXNlbnQgYSBzaWduaWZpY2FudCBzaGlmdCBpbiBob3cgdGhlc2Ugc3Vic3lzdGVtcyBmdW5jdGlvbi4gVGhleSBhcmUgZ29pbmcgdG8gbmVlZCBtb3JlIGluLWRlcHRoIHRlc3RpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTgxLCJPdXRwdXRUb2tlbnMiOjE2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNjozMi45NDY5NTgyOTVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjQ3MzQxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT0ZcIixcbiAgICBcIlBIWUxJQlwiLFxuICAgIFwiT0ZfTURJT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seVwiLFxuICAgIFwiX19vZl9tZGlvYnVzX3JlZ2lzdGVyXCIsXG4gICAgXCJkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkZXZpY2UgbGluayBtYW5hZ2VtZW50IGZ1bmN0aW9uIGBkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHlgIGFuZCBtb2RpZmllcyBgZGV2aWNlX2xpbmtzX2RyaXZlcl9ib3VuZGAgYW5kIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgIHRvIHVzZSBpdC4gSXQgYWxzbyBjaGFuZ2VzIE9GIHByb3BlcnR5IHBhcnNpbmcgdG8gaGFuZGxlICdldGhlcm5ldC1waHktcGFja2FnZScgbm9kZXMuIFRoZXNlIGFyZSBjb3JlIGtlcm5lbCBhbmQgc3Vic3lzdGVtIGNoYW5nZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPRlwiLFxuICAgIFwiUEhZTElCXCIsXG4gICAgXCJPRl9NRElPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5XCIsXG4gICAgXCJfX29mX21kaW9idXNfcmVnaXN0ZXJcIixcbiAgICBcImRldmljZV9saW5rc19kcml2ZXJfYm91bmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRldmljZSBsaW5rIG1hbmFnZW1lbnQgZnVuY3Rpb24gYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAgYW5kIG1vZGlmaWVzIGBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kYCBhbmQgYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAgdG8gdXNlIGl0LiBJdCBhbHNvIGNoYW5nZXMgT0YgcHJvcGVydHkgcGFyc2luZyB0byBoYW5kbGUgJ2V0aGVybmV0LXBoeS1wYWNrYWdlJyBub2Rlcy4gVGhlc2UgYXJlIGNvcmUga2VybmVsIGFuZCBzdWJzeXN0ZW0gY2hhbmdlcyB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNjozMy4wMjk0MzgwNDZaIiwiU2VxIjo0NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDc3NzQyNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDA6MDY6MzMuMDMwMDIzNTQ2WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ4NDc3MTUyMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZGV2aWNlIGxpbmsgZnJhbWV3b3JrLCBNRElPIGJ1cyByZWdpc3RyYXRpb24sIGFuZCBPRiBwcm9wZXJ0eSBwYXJzaW5nIHRvIGhhbmRsZSBzeW5jLXN0YXRlLW9ubHkgbGlua3MgYW5kIGV0aGVybmV0LXBoeS1wYWNrYWdlIG5vZGVzLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUga2VybmVsLWludGVybmFsIHN0cnVjdHVyZXMgKGRldmljZSBsaW5rcywgZGV2aWNlIHRyZWUgbm9kZXMsIGxpc3RzKSBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IG1vZGlmeSBib3VuZHMgY2hlY2tpbmcgb3IgYnVmZmVyIGFsbG9jYXRpb25zIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIHVzZS1hZnRlci1mcmVlLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBsb2NraW5nIGlzc3Vlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE3YjlmMTRlZjUwZDYzZTE2NGU0MmNkYzZkMWQ1MjMyYmQ1ZWUzMTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwMDowNTowNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jb3JlLmMgYi9kcml2ZXJzL2Jhc2UvY29yZS5jXG5pbmRleCA0ZDAyNjY4Mjk0NGYyLi42MjdmY2ZhMjc0ZjBlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9iYXNlL2NvcmUuY1xuKysrIGIvZHJpdmVycy9iYXNlL2NvcmUuY1xuQEAgLTEzMDUsNiArMTMwNSw1NyBAQCBzdGF0aWMgdm9pZCBkZXZpY2VfbGlua19kcm9wX21hbmFnZWQoc3RydWN0IGRldmljZV9saW5rICpsaW5rKVxuIFx0a3JlZl9wdXQoXHUwMDI2bGluay1cdTAwM2VrcmVmLCBfX2RldmljZV9saW5rX2RlbCk7XG4gfVxuIFxuKy8qIENhbGxlciBtdXN0IGhvbGQgdGhlIGRldmljZSBsaW5rcyB3cml0ZSBsb2NrLiAqL1xuK3N0YXRpYyB2b2lkIF9fZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KHN0cnVjdCBkZXZpY2UgKmRldixcbitcdFx0XHRcdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpzeW5jX2xpc3QpXG4re1xuK1x0c3RydWN0IGRldmljZV9saW5rICpsaW5rLCAqbG47XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobGluaywgbG4sIFx1MDAyNmRldi1cdTAwM2VsaW5rcy5zdXBwbGllcnMsIGNfbm9kZSkge1xuK1x0XHRzdHJ1Y3QgZGV2aWNlICpzdXBwbGllcjtcbitcbitcdFx0aWYgKCFkZXZpY2VfbGlua190ZXN0KGxpbmssIERMX0ZMQUdfTUFOQUdFRCkgfHxcbitcdFx0ICAgICFkZXZpY2VfbGlua190ZXN0KGxpbmssIERMX0ZMQUdfU1lOQ19TVEFURV9PTkxZKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LypcbitcdFx0ICogRExfRkxBR19TWU5DX1NUQVRFX09OTFkgZXhjbHVkZXMgYWxsIG90aGVyIG1hbmFnZWQgbGluayBmbGFncyxcbitcdFx0ICogc28gaXQgaXMgc2FmZSB0byBkcm9wIHRoZSBtYW5hZ2VkIGxpbmsgY29tcGxldGVseS5cbitcdFx0ICovXG4rXHRcdHN1cHBsaWVyID0gbGluay1cdTAwM2VzdXBwbGllcjtcbitcdFx0ZGV2aWNlX2xpbmtfZHJvcF9tYW5hZ2VkKGxpbmspO1xuK1xuK1x0XHRpZiAoZGVmZXJfc3luY19zdGF0ZV9jb3VudClcbitcdFx0XHRfX2RldmljZV9saW5rc19zdXBwbGllcl9kZWZlcl9zeW5jKHN1cHBsaWVyKTtcbitcdFx0ZWxzZVxuK1x0XHRcdF9fZGV2aWNlX2xpbmtzX3F1ZXVlX3N5bmNfc3RhdGUoc3VwcGxpZXIsIHN5bmNfbGlzdCk7XG4rXHR9XG4rfVxuK1xuKy8qKlxuKyAqIGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seSAtIERyb3AgbWFuYWdlZCBzeW5jLXN0YXRlLW9ubHkgbGlua3NcbisgKiBAZGV2OiBDb25zdW1lciBkZXZpY2Ugd2hvc2UgcHJveHkgbGlua3Mgc2hvdWxkIGJlIGRyb3BwZWRcbisgKlxuKyAqIEZyYW1ld29ya3Mgd2hpY2ggcG9wdWxhdGUgY2hpbGQgZGV2aWNlcyBiZWxvdyBhIGRyaXZlcmxlc3MgZGV2aWNlIGNhbiBjYWxsXG4rICogdGhpcyBhZnRlciBhZGRpbmcgYWxsIG9mIHRoZSBjaGlsZHJlbi4gVGhlIGNoaWxkcmVuIHdpbGwgaGF2ZSBhY3F1aXJlZCB0aGVpclxuKyAqIG93biBsaW5rcyBieSB0aGVuLCBzbyB0aGUgdGVtcG9yYXJ5IGxpbmtzIHdoaWNoIG9ubHkgcHJldmVudCBzdXBwbGllcnMgZnJvbVxuKyAqIHJlY2VpdmluZyBzeW5jX3N0YXRlKCkgY2FsbGJhY2tzIGFyZSBubyBsb25nZXIgbmVlZGVkLlxuKyAqXG4rICogUmUtZXZhbHVhdGUgZWFjaCBhZmZlY3RlZCBzdXBwbGllciBmb3IgYSBzeW5jX3N0YXRlKCkgY2FsbGJhY2sgYWZ0ZXIgaXRzXG4rICogbGluayBpcyBkcm9wcGVkLlxuKyAqL1xuK3ZvaWQgZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KHN0cnVjdCBkZXZpY2UgKmRldilcbit7XG4rXHRMSVNUX0hFQUQoc3luY19saXN0KTtcbitcbitcdGRldmljZV9saW5rc193cml0ZV9sb2NrKCk7XG4rXHRfX2RldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seShkZXYsIFx1MDAyNnN5bmNfbGlzdCk7XG4rXHRkZXZpY2VfbGlua3Nfd3JpdGVfdW5sb2NrKCk7XG4rXG4rXHRkZXZpY2VfbGlua3NfZmx1c2hfc3luY19saXN0KFx1MDAyNnN5bmNfbGlzdCwgTlVMTCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seSk7XG4rXG4gc3RhdGljIHNzaXplX3Qgd2FpdGluZ19mb3Jfc3VwcGxpZXJfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiBcdFx0XHRcdFx0IGNoYXIgKmJ1ZilcbkBAIC0xNDE4LDYgKzE0NjksOCBAQCB2b2lkIGRldmljZV9saW5rc19kcml2ZXJfYm91bmQoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0ZWxzZVxuIFx0XHRfX2RldmljZV9saW5rc19xdWV1ZV9zeW5jX3N0YXRlKGRldiwgXHUwMDI2c3luY19saXN0KTtcbiBcbitcdF9fZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KGRldiwgXHUwMDI2c3luY19saXN0KTtcbitcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsaW5rLCBsbiwgXHUwMDI2ZGV2LVx1MDAzZWxpbmtzLnN1cHBsaWVycywgY19ub2RlKSB7XG4gXHRcdHN0cnVjdCBkZXZpY2UgKnN1cHBsaWVyO1xuIFxuQEAgLTE0MjUsMTcgKzE0NzgsMTAgQEAgdm9pZCBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0c3VwcGxpZXIgPSBsaW5rLVx1MDAzZXN1cHBsaWVyO1xuLVx0XHRpZiAoZGV2aWNlX2xpbmtfdGVzdChsaW5rLCBETF9GTEFHX1NZTkNfU1RBVEVfT05MWSkpIHtcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFdoZW4gRExfRkxBR19TWU5DX1NUQVRFX09OTFkgaXMgc2V0LCBpdCBtZWFucyBub1xuLVx0XHRcdCAqIG90aGVyIERMX01BTkFHRURfTElOS19GTEFHUyBoYXZlIGJlZW4gc2V0LiBTbywgaXQnc1xuLVx0XHRcdCAqIHNhdmUgdG8gZHJvcCB0aGUgbWFuYWdlZCBsaW5rIGNvbXBsZXRlbHkuXG4tXHRcdFx0ICovXG4tXHRcdFx0ZGV2aWNlX2xpbmtfZHJvcF9tYW5hZ2VkKGxpbmspO1xuLVx0XHR9IGVsc2UgaWYgKGRldl9pc19iZXN0X2VmZm9ydChkZXYpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgIGRldmljZV9saW5rX3Rlc3QobGluaywgRExfRkxBR19JTkZFUlJFRCkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgbGluay1cdTAwM2VzdGF0dXMgIT0gRExfU1RBVEVfQ09OU1VNRVJfUFJPQkUgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIWRldl9jYW5fbWF0Y2gobGluay1cdTAwM2VzdXBwbGllcikpIHtcbitcdFx0aWYgKGRldl9pc19iZXN0X2VmZm9ydChkZXYpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgZGV2aWNlX2xpbmtfdGVzdChsaW5rLCBETF9GTEFHX0lORkVSUkVEKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGxpbmstXHUwMDNlc3RhdHVzICE9IERMX1NUQVRFX0NPTlNVTUVSX1BST0JFIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIWRldl9jYW5fbWF0Y2gobGluay1cdTAwM2VzdXBwbGllcikpIHtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIFdoZW4gZGV2X2lzX2Jlc3RfZWZmb3J0KCkgaXMgdHJ1ZSwgd2UgaWdub3JlIGRldmljZVxuIFx0XHRcdCAqIGxpbmtzIHRvIHN1cHBsaWVycyB0aGF0IGRvbid0IGhhdmUgYSBkcml2ZXIuICBJZiB0aGVcbkBAIC0xNDQ5LDEyICsxNDk1LDYgQEAgdm9pZCBkZXZpY2VfbGlua3NfZHJpdmVyX2JvdW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdFx0XHRXUklURV9PTkNFKGxpbmstXHUwMDNlc3RhdHVzLCBETF9TVEFURV9BQ1RJVkUpO1xuIFx0XHR9XG4gXG4tXHRcdC8qXG4tXHRcdCAqIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBldmVuIGZvciB0aGUgZGVsZXRlZFxuLVx0XHQgKiBETF9GTEFHX1NZTkNfU1RBVEVfT05MWSBkZXZpY2UgbGluayBpbiBjYXNlIGl0IHdhcyB0aGUgbGFzdFxuLVx0XHQgKiBkZXZpY2UgbGluayB0aGF0IHdhcyBwcmV2ZW50aW5nIHRoZSBzdXBwbGllciBmcm9tIGdldHRpbmcgYVxuLVx0XHQgKiBzeW5jX3N0YXRlKCkgY2FsbC5cbi1cdFx0ICovXG4gXHRcdGlmIChkZWZlcl9zeW5jX3N0YXRlX2NvdW50KVxuIFx0XHRcdF9fZGV2aWNlX2xpbmtzX3N1cHBsaWVyX2RlZmVyX3N5bmMoc3VwcGxpZXIpO1xuIFx0XHRlbHNlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMgYi9kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uY1xuaW5kZXggYjhkMjk4YzA0ZDNmZi4uNDlmOWI0MDYyY2Y1YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jXG4rKysgYi9kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uY1xuQEAgLTIyOSw3ICsyMjksNyBAQCBpbnQgX19vZl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuIFx0XHRnb3RvIHVucmVnaXN0ZXI7XG4gXG4gXHRpZiAoIXNjYW5waHlzKVxuLVx0XHRyZXR1cm4gMDtcbitcdFx0Z290byBkb25lO1xuIFxuIFx0LyogYXV0byBzY2FuIGZvciBQSFlzIHdpdGggZW1wdHkgcmVnIHByb3BlcnR5ICovXG4gXHRmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZShucCwgY2hpbGQpIHtcbkBAIC0yNjEsNiArMjYxLDkgQEAgaW50IF9fb2ZfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCxcbiBcdFx0fVxuIFx0fVxuIFxuK2RvbmU6XG4rXHRkZXZpY2VfbGlua3NfZHJvcF9zeW5jX3N0YXRlX29ubHkoXHUwMDI2bWRpby1cdTAwM2VkZXYpO1xuK1xuIFx0cmV0dXJuIDA7XG4gXG4gcHV0X3VucmVnaXN0ZXI6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9wcm9wZXJ0eS5jIGIvZHJpdmVycy9vZi9wcm9wZXJ0eS5jXG5pbmRleCA3MmNmMTI5MDdkZTAzLi5kNTliY2IxZjI5ZGUwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9vZi9wcm9wZXJ0eS5jXG4rKysgYi9kcml2ZXJzL29mL3Byb3BlcnR5LmNcbkBAIC0xMjcyLDYgKzEyNzIsMjAgQEAgc3RhdGljIHZvaWQgb2ZfbGlua190b19waGFuZGxlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29uX25wLFxuIFx0XHR0bXBfbnAgPSBvZl9nZXRfbmV4dF9wYXJlbnQodG1wX25wKTtcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBBbiBFdGhlcm5ldCBQSFkgcGFja2FnZSBub2RlIGRlc2NyaWJlcyByZXNvdXJjZXMgc2hhcmVkIGJ5IGl0cyBtZW1iZXJcbitcdCAqIFBIWXMsIGJ1dCBpcyBub3QgcG9wdWxhdGVkIGFzIGEgc3RydWN0IGRldmljZS4gTGluayBldmVyeSBlbmFibGVkXG4rXHQgKiBtZW1iZXIgUEhZIHRvIHRob3NlIHN1cHBsaWVycyBzbyBmd19kZXZsaW5rIGNhbiB1c2UgdGhlIHJlYWwgY29uc3VtZXJcbitcdCAqIGRldmljZXMgaW5zdGVhZCBvZiBsZWF2aW5nIGEgcHJveHkgbGluayBvbiB0aGUgTURJTyBidXMgaW5kZWZpbml0ZWx5LlxuK1x0ICovXG4rXHRpZiAob2Zfbm9kZV9uYW1lX2VxKGNvbl9ucCwgXCJldGhlcm5ldC1waHktcGFja2FnZVwiKSkge1xuK1x0XHRmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZV9zY29wZWQoY29uX25wLCBjaGlsZClcbitcdFx0XHRmd25vZGVfbGlua19hZGQob2ZfZndub2RlX2hhbmRsZShjaGlsZCksXG4rXHRcdFx0XHRcdG9mX2Z3bm9kZV9oYW5kbGUoc3VwX25wKSwgZmxhZ3MpO1xuK1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRmd25vZGVfbGlua19hZGQob2ZfZndub2RlX2hhbmRsZShjb25fbnApLCBvZl9md25vZGVfaGFuZGxlKHN1cF9ucCksIGZsYWdzKTtcbiB9XG4gXG5AQCAtMTYyMCw3ICsxNjM0LDkgQEAgc3RhdGljIGludCBvZl9saW5rX3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29uX25wLCBjb25zdCBjaGFyICpwcm9wX25hbWUpXG4gXG4gXHRcdFx0bWF0Y2hlZCA9IHRydWU7XG4gXHRcdFx0aSsrO1xuLVx0XHRcdG9mX2xpbmtfdG9fcGhhbmRsZShjb25fZGV2X25wLCBwaGFuZGxlLCBzLVx1MDAzZWZ3bGlua19mbGFncyk7XG4rXHRcdFx0aWYgKGNvbl9kZXZfbnApXG4rXHRcdFx0XHRvZl9saW5rX3RvX3BoYW5kbGUoY29uX2Rldl9ucCwgcGhhbmRsZSxcbitcdFx0XHRcdFx0XHQgICBzLVx1MDAzZWZ3bGlua19mbGFncyk7XG4gXHRcdFx0b2Zfbm9kZV9wdXQocGhhbmRsZSk7XG4gXHRcdH1cbiBcdFx0cysrO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oXG5pbmRleCBhZWU3OWZkNmIzMmI0Li44YWZiOWYyYjBkODI1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaFxuQEAgLTEzODEsNiArMTM4MSw3IEBAIHN0cnVjdCBkZXZpY2VfbGluayAqZGV2aWNlX2xpbmtfYWRkKHN0cnVjdCBkZXZpY2UgKmNvbnN1bWVyLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBkZXZpY2UgKnN1cHBsaWVyLCB1MzIgZmxhZ3MpO1xuIHZvaWQgZGV2aWNlX2xpbmtfZGVsKHN0cnVjdCBkZXZpY2VfbGluayAqbGluayk7XG4gdm9pZCBkZXZpY2VfbGlua19yZW1vdmUodm9pZCAqY29uc3VtZXIsIHN0cnVjdCBkZXZpY2UgKnN1cHBsaWVyKTtcbit2b2lkIGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuIHZvaWQgZGV2aWNlX2xpbmtzX3N1cHBsaWVyX3N5bmNfc3RhdGVfcGF1c2Uodm9pZCk7XG4gdm9pZCBkZXZpY2VfbGlua3Nfc3VwcGxpZXJfc3luY19zdGF0ZV9yZXN1bWUodm9pZCk7XG4gdm9pZCBkZXZpY2VfbGlua193YWl0X3JlbW92YWwodm9pZCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMDowNjozMy4wMzAwMjQzOTZaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg0NzcxMjMxMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRGV2aWNlIExpbmsgRnJhbWV3b3JrIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGNvcmUgaW5mcmFzdHJ1Y3R1cmU6IHRoZSBkZXZpY2UgbGluayBmcmFtZXdvcmsgaW4gYGNvcmUuY2AsIE1ESU8gYnVzIHJlZ2lzdHJhdGlvbiwgYW5kIE9GIHByb3BlcnR5IHBhcnNpbmcuIFNwZWNpZmljYWxseSwgaXQncyBpbnRyb2R1Y2luZyB0aGlzIG5ldyBgZGV2aWNlX2xpbmtzX2Ryb3Bfc3luY19zdGF0ZV9vbmx5KClgIGZ1bmN0aW9uLCBhbmQgY2FsbGluZyBpdCBkdXJpbmcgTURJTyBidXMgcmVnaXN0cmF0aW9uLiBJdCdzIGFsc28gbWFraW5nIGEgc21hbGwgdHdlYWsgdG8gYG9mX2xpbmtfdG9fcGhhbmRsZSgpYCB0byBoYW5kbGUgXCJldGhlcm5ldC1waHktcGFja2FnZVwiIG5vZGVzLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gQnV0IGZyb20gd2hhdCBJIGNhbiBzZWUsIHRoaXMgaXMgcHVyZWx5IGxvZ2ljYWwuIEl0J3Mgd29ya2luZyB3aXRoIGRldmljZSBsaW5rcywgbGlzdHMsIGFuZCB0aGUgZGV2aWNlIHRyZWUg4oCTIGFsbCBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlcy4gTm90aGluZyBuZXcgaXMgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCBhbmQgcGFydGlhbGx5IGluaXRpYWxpemVkLiBUaGUgY29kZSBkb2Vzbid0IHNlZW0gdG8gYmUgaW50cm9kdWNpbmcgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBidWZmZXIgb3ZlcmZsb3dzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGUgcHJpbWFyeSByaXNrcyBoZXJlIGFyZSB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbG9naWNhbCBlcnJvcnMgbGlrZSBkZWFkbG9ja3Mgb3IgaW5jb3JyZWN0IHN0YXRlIHRyYW5zaXRpb25zLiBUaGVzZSBhcmUgZXhhY3RseSB0aGUgdHlwZXMgb2YgcHJvYmxlbXMgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBhcmUgZGVzaWduZWQgdG8gY2F0Y2guIFNvLCBiYXNlZCBvbiB0aGUgc2NvcGUgYW5kIG5hdHVyZSBvZiB0aGUgbW9kaWZpY2F0aW9ucywgSSBzZWUgbm8gcmVhc29uIHRvIHNwaW4gdXAgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGZvciB0aGlzLlxuXG5MZXQncyBkbyBhIHF1aWNrIGZpbmFsIGNoZWNrIGZvciBhbnkgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBqdXN0IHRvIGJlIGV4dHJhIHN1cmUuIGB3YWl0aW5nX2Zvcl9zdXBwbGllcl9zaG93YCBpc24ndCBtb2RpZmllZCwgb25seSB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgd2hpY2ggaXMgZ29vZC4gYGRldmljZV9saW5rc19kcm9wX3N5bmNfc3RhdGVfb25seWAgaXMgZXhwb3J0ZWQsIGJ1dCBpdCdzIGp1c3QgbWFuaXB1bGF0aW5nIGludGVybmFsIGxpc3RzLCBzbyB0aGF0J3Mgbm90IGEgY29uY2Vybi4gYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAgaXMgaW50ZXJuYWwsIGFuZCBgb2ZfbGlua19wcm9wZXJ0eWAgaXMgaW50ZXJuYWwgYXMgd2VsbC5cblxuQWxyaWdodCwgbm8gdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBhbmQgbm8gYXBwYXJlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFdlIHNob3VsZCBiZSBnb29kIHRvIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTM0LCJPdXRwdXRUb2tlbnMiOjE1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAwOjA3OjIxLjUwNzE1MTQxNloiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRldmljZSBsaW5rIGZyYW1ld29yaywgTURJTyBidXMgcmVnaXN0cmF0aW9uLCBhbmQgT0YgcHJvcGVydHkgcGFyc2luZyB0byBoYW5kbGUgc3luYy1zdGF0ZS1vbmx5IGxpbmtzIGFuZCBldGhlcm5ldC1waHktcGFja2FnZSBub2Rlcy4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGtlcm5lbC1pbnRlcm5hbCBzdHJ1Y3R1cmVzIChkZXZpY2UgbGlua3MsIGRldmljZSB0cmVlIG5vZGVzLCBsaXN0cykgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBtb2RpZnkgYm91bmRzIGNoZWNraW5nIG9yIGJ1ZmZlciBhbGxvY2F0aW9ucyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSB1c2UtYWZ0ZXItZnJlZSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbG9ja2luZyBpc3N1ZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZGV2aWNlIGxpbmsgZnJhbWV3b3JrLCBNRElPIGJ1cyByZWdpc3RyYXRpb24sIGFuZCBPRiBwcm9wZXJ0eSBwYXJzaW5nIHRvIGhhbmRsZSBzeW5jLXN0YXRlLW9ubHkgbGlua3MgYW5kIGV0aGVybmV0LXBoeS1wYWNrYWdlIG5vZGVzLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUga2VybmVsLWludGVybmFsIHN0cnVjdHVyZXMgKGRldmljZSBsaW5rcywgZGV2aWNlIHRyZWUgbm9kZXMsIGxpc3RzKSBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IG1vZGlmeSBib3VuZHMgY2hlY2tpbmcgb3IgYnVmZmVyIGFsbG9jYXRpb25zIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIHVzZS1hZnRlci1mcmVlLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBsb2NraW5nIGlzc3Vlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowlv4fr[1] Phase: Succeeded StartedAt: 2026-08-17 00:07:33 +0000 UTC FinishedAt: 2026-08-17 00:07:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlv4fr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-17 00:07:33 +0000 UTC FinishedAt: 2026-08-17 00:07:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlv4fr[2] Phase: Succeeded StartedAt: 2026-08-17 00:07:33 +0000 UTC FinishedAt: 2026-08-17 03:48:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-17 00:07:33 +0000 UTC FinishedAt: 2026-08-17 03:48:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-17 00:07:33 +0000 UTC FinishedAt: 2026-08-17 00:08:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-17 00:07:33 +0000 UTC FinishedAt: 2026-08-17 00:07:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlv4fr/series-workflowlv4fr-convert-artifact-1117881240/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-17 00:08:03 +0000 UTC FinishedAt: 2026-08-17 00:24:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-17 00:08:03 +0000 UTC FinishedAt: 2026-08-17 00:24:25 +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:*1379545b-6d51-4866-82e9-d7e8cf4563d4,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-workflowlv4fr/series-workflowlv4fr-convert-artifact-1117881240/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": "45d18c78-07b1-46a7-8521-af20e4517ce1", "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-workflowlv4fr/series-workflowlv4fr-build-action-2698035406/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-17 00:08:03 +0000 UTC FinishedAt: 2026-08-17 00:24:15 +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:*1379545b-6d51-4866-82e9-d7e8cf4563d4,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-workflowlv4fr/series-workflowlv4fr-convert-artifact-1117881240/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": "45d18c78-07b1-46a7-8521-af20e4517ce1", "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-workflowlv4fr/series-workflowlv4fr-build-action-2698035406/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-17 00:24:25 +0000 UTC FinishedAt: 2026-08-17 00:24:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-17 00:24:25 +0000 UTC FinishedAt: 2026-08-17 00:24:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-17 00:24:25 +0000 UTC FinishedAt: 2026-08-17 00:24:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-17 00:24:25 +0000 UTC FinishedAt: 2026-08-17 00:24:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlv4fr/series-workflowlv4fr-convert-artifact-2188213759/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-17 00:24:35 +0000 UTC FinishedAt: 2026-08-17 00:26:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-17 00:24:35 +0000 UTC FinishedAt: 2026-08-17 00:26:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*45d18c78-07b1-46a7-8521-af20e4517ce1,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-workflowlv4fr/series-workflowlv4fr-build-action-2698035406/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-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-17 00:26:56 +0000 UTC FinishedAt: 2026-08-17 00:26:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-17 00:26:56 +0000 UTC FinishedAt: 2026-08-17 00:26:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-17 00:26:56 +0000 UTC FinishedAt: 2026-08-17 00:43:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-17 00:26:56 +0000 UTC FinishedAt: 2026-08-17 00:43:28 +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:*1379545b-6d51-4866-82e9-d7e8cf4563d4,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-workflowlv4fr/series-workflowlv4fr-convert-artifact-2188213759/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": "18861275-9fc2-46a4-8f39-8b923c9c95cb", "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-workflowlv4fr/series-workflowlv4fr-build-action-3732947987/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-17 00:26:56 +0000 UTC FinishedAt: 2026-08-17 00:43:18 +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:*1379545b-6d51-4866-82e9-d7e8cf4563d4,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-workflowlv4fr/series-workflowlv4fr-convert-artifact-2188213759/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": "18861275-9fc2-46a4-8f39-8b923c9c95cb", "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-workflowlv4fr/series-workflowlv4fr-build-action-3732947987/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-17 00:43:28 +0000 UTC FinishedAt: 2026-08-17 00:43:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-17 00:43:28 +0000 UTC FinishedAt: 2026-08-17 00:43:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-17 00:43:28 +0000 UTC FinishedAt: 2026-08-17 00:45:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-17 00:43:28 +0000 UTC FinishedAt: 2026-08-17 00:45:14 +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:*18861275-9fc2-46a4-8f39-8b923c9c95cb,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-workflowlv4fr/series-workflowlv4fr-build-action-3732947987/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-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-17 00:45:24 +0000 UTC FinishedAt: 2026-08-17 03:48:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-17 00:45:24 +0000 UTC FinishedAt: 2026-08-17 03:48:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*45d18c78-07b1-46a7-8521-af20e4517ce1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*18861275-9fc2-46a4-8f39-8b923c9c95cb,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-workflowlv4fr/series-workflowlv4fr-build-action-2698035406/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-workflowlv4fr/series-workflowlv4fr-build-action-3732947987/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-17 00:45:24 +0000 UTC FinishedAt: 2026-08-17 00:45:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-17 00:45:24 +0000 UTC FinishedAt: 2026-08-17 00:45:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlv4fr/series-workflowlv4fr-convert-artifact-2724936344/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-17 00:45:24 +0000 UTC FinishedAt: 2026-08-17 00:45:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-17 00:45:24 +0000 UTC FinishedAt: 2026-08-17 00:45:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-17 00:45:24 +0000 UTC FinishedAt: 2026-08-17 00:45:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-17 00:45:34 +0000 UTC FinishedAt: 2026-08-17 03:48:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlv4fr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["device_links_drop_sync_state_only","__of_mdiobus_register","device_links_driver_bound"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6a5d573d24cd375e09d24f136523cb3cc85c9d3","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","PHYLIB","OF_MDIO"],"series_id":"5ad1bd2c-e92f-4e61-b8b8-ed3d8f59c8df","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-17 00:45:34 +0000 UTC FinishedAt: 2026-08-17 03:48:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*45d18c78-07b1-46a7-8521-af20e4517ce1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*18861275-9fc2-46a4-8f39-8b923c9c95cb,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-workflowlv4fr/series-workflowlv4fr-build-action-2698035406/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-workflowlv4fr/series-workflowlv4fr-build-action-3732947987/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-workflowlv4fr/series-workflowlv4fr-convert-artifact-2724936344/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,}