Name: series-workflow687kr Phase: Running StartedAt: 2026-08-04 00:04:07 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow687kr[0] Phase: Succeeded StartedAt: 2026-08-04 00:04:07 +0000 UTC FinishedAt: 2026-08-04 00:09:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow687kr[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 00:04:07 +0000 UTC FinishedAt: 2026-08-04 00:09:40 +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": "d661abdc30c254649c32ef6e0aa1e621e04ff0a7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OF", "OF_DYNAMIC", "OF_OVERLAY", "PHYLIB" ], "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": "d661abdc30c254649c32ef6e0aa1e621e04ff0a7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OF", "OF_DYNAMIC", "OF_OVERLAY", "PHYLIB" ], "series_id": "1bd95b7e-e378-45d8-9a53-3d7a0e3c591f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__mdiobus_register", "mdiobus_unregister", "mdiobus_device_change_begin", "mdiobus_device_change_end", "mdiobus_registration_done", "mdiobus_begin_remove", "mdiobus_finish_remove", "mdio_device_register", "mdio_device_remove", "phy_device_register", "phy_device_remove", "phy_attach_direct", "phy_detach", "__of_mdiobus_register", "mdiobus_scan_c22" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09GJiMzNDssCiAgICAmIzM0O09GX0RZTkFNSUMmIzM0OywKICAgICYjMzQ7T0ZfT1ZFUkxBWSYjMzQ7LAogICAgJiMzNDtQSFlMSUImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX21kaW9idXNfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7bWRpb2J1c191bnJlZ2lzdGVyJiMzNDssCiAgICAmIzM0O21kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbiYjMzQ7LAogICAgJiMzNDttZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kJiMzNDssCiAgICAmIzM0O21kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUmIzM0OywKICAgICYjMzQ7bWRpb2J1c19iZWdpbl9yZW1vdmUmIzM0OywKICAgICYjMzQ7bWRpb2J1c19maW5pc2hfcmVtb3ZlJiMzNDssCiAgICAmIzM0O21kaW9fZGV2aWNlX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O21kaW9fZGV2aWNlX3JlbW92ZSYjMzQ7LAogICAgJiMzNDtwaHlfZGV2aWNlX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3BoeV9kZXZpY2VfcmVtb3ZlJiMzNDssCiAgICAmIzM0O3BoeV9hdHRhY2hfZGlyZWN0JiMzNDssCiAgICAmIzM0O3BoeV9kZXRhY2gmIzM0OywKICAgICYjMzQ7X19vZl9tZGlvYnVzX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O21kaW9idXNfc2Nhbl9jMjImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1ESU8gYnVzIGFuZCBQSFkgZGV2aWNlIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiBsb2dpYyB0byBzdXBwb3J0IGR5bmFtaWMgZGV2aWNlIHRyZWUgY2hhbmdlcyAoT0YgZHluYW1pYyBhbmQgb3ZlcmxheSkuIEl0IGludHJvZHVjZXMgYSBsb2NraW5nIG1lY2hhbmlzbSAoYG1kaW9fbWFwX2xvY2tgKSB0byBzZXJpYWxpemUgZGV2aWNlIGNoYW5nZXMgYW5kIHByZXZlbnQgcmFjZXMgZHVyaW5nIFBIWSBhdHRhY2htZW50IGFuZCBkZXRhY2htZW50LiBJdCBhbHNvIHJlZmFjdG9ycyB0aGUgc2Nhbm5pbmcgYW5kIHJlZ2lzdHJhdGlvbiBvZiBQSFlzIGFuZCBNRElPIGRldmljZXMuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBjb2RlIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UgZGVhZGxvY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDAzOTgxZWY1NDQzNTc0NjQ1Njk0MGE1NGZhMWI5MmY5NTkyODA0YmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDAwOjA2OjA0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jIGIvZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmNcbmluZGV4IGI4ZDI5OGMwNGQzZmYuLmM4OWY4OGFhY2Q4ZGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmNcbkBAIC0xMyw2ICYjNDM7MTMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Z3bm9kZV9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9pcnEuaFx1MDAzZVxuQEAgLTIwLDYgJiM0MzsyMSw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbmV0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeV9maXhlZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiBcbiAjZGVmaW5lIERFRkFVTFRfR1BJT19SRVNFVF9ERUxBWVx0MTBcdC8qIGluIG1pY3Jvc2Vjb25kcyAqL1xuIFxuQEAgLTI3LDYgJiM0MzszMCw1MiBAQCBNT0RVTEVfQVVUSE9SKFwmIzM0O0dyYW50IExpa2VseSBcdTAwM2NncmFudC5saWtlbHlAc2VjcmV0bGFiLmNhXHUwMDNlXCYjMzQ7KTtcbiBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtPcGVuRmlybXdhcmUgTURJTyBidXMgKEV0aGVybmV0IFBIWSkgYWNjZXNzb3JzXCYjMzQ7KTtcbiBcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX09GX0RZTkFNSUMpXG4mIzQzOy8qXG4mIzQzOyAqIE9GIGNoYW5nZXMgY2FuIG5lc3Qgd2hlbiBwcm9iaW5nIG9uZSBNRElPIGRldmljZSBlbmFibGVzIGFub3RoZXIgbm9kZSBvblxuJiM0MzsgKiB0aGUgc2FtZSBidXMuIFNlcmlhbGl6ZSBpbmRlcGVuZGVudCBjaGFuZ2VzIHdoaWxlIGFsbG93aW5nIHRoYXQgbmVzdGluZy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBERUZJTkVfTVVURVgob2ZfbWRpb19yZWNvbmZpZ19tdXRleCk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9mX21kaW9fcmVjb25maWdfb3duZXI7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgb2ZfbWRpb19yZWNvbmZpZ19kZXB0aDtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG9mX21kaW9fcmVjb25maWdfbG9jayh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFtdXRleF90cnlsb2NrKFx1MDAyNm9mX21kaW9fcmVjb25maWdfbXV0ZXgpKSB7XG4mIzQzO1x0XHRpZiAob2ZfbWRpb19yZWNvbmZpZ19vd25lciA9PSBjdXJyZW50KSB7XG4mIzQzO1x0XHRcdG9mX21kaW9fcmVjb25maWdfZGVwdGgmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRtdXRleF9sb2NrKFx1MDAyNm9mX21kaW9fcmVjb25maWdfbXV0ZXgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0V0FSTl9PTl9PTkNFKG9mX21kaW9fcmVjb25maWdfb3duZXIpO1xuJiM0MztcdFdBUk5fT05fT05DRShvZl9tZGlvX3JlY29uZmlnX2RlcHRoKTtcbiYjNDM7XHRvZl9tZGlvX3JlY29uZmlnX293bmVyID0gY3VycmVudDtcbiYjNDM7XHRvZl9tZGlvX3JlY29uZmlnX2RlcHRoID0gMTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgb2ZfbWRpb19yZWNvbmZpZ191bmxvY2sodm9pZClcbiYjNDM7e1xuJiM0MztcdFdBUk5fT05fT05DRShvZl9tZGlvX3JlY29uZmlnX293bmVyICE9IGN1cnJlbnQpO1xuJiM0MztcdFdBUk5fT05fT05DRSghb2ZfbWRpb19yZWNvbmZpZ19kZXB0aCk7XG4mIzQzO1xuJiM0MztcdGlmICgtLW9mX21kaW9fcmVjb25maWdfZGVwdGgpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdG9mX21kaW9fcmVjb25maWdfb3duZXIgPSBOVUxMO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZvZl9tZGlvX3JlY29uZmlnX211dGV4KTtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgb2ZfbWRpb19yZWNvbmZpZ19sb2NrKHZvaWQpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG9mX21kaW9fcmVjb25maWdfdW5sb2NrKHZvaWQpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gLyogRXh0cmFjdCB0aGUgY2xhdXNlIDIyIHBoeSBJRCBmcm9tIHRoZSBjb21wYXRpYmxlIHN0cmluZyBvZiB0aGUgZm9ybVxuICAqIGV0aGVybmV0LXBoeS1pZEFBQUEuQkJCQiAqL1xuIHN0YXRpYyBpbnQgb2ZfZ2V0X3BoeV9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSwgdTMyICpwaHlfaWQpXG5AQCAtNDQsNyAmIzQzOzkzLDcgQEAgaW50IG9mX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcbiBFWFBPUlRfU1lNQk9MKG9mX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3Rlcik7XG4gXG4gc3RhdGljIGludCBvZl9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcbi1cdFx0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLCB1MzIgYWRkcilcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLCB1MzIgYWRkcilcbiB7XG4gXHRyZXR1cm4gZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KG1kaW8sIG9mX2Z3bm9kZV9oYW5kbGUoY2hpbGQpLCBhZGRyKTtcbiB9XG5AQCAtNzcsNiAmIzQzOzEyNiwyNSBAQCBzdGF0aWMgaW50IG9mX21kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICptZGlvLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG9mX21kaW9idXNfcmVnaXN0ZXJfY2hpbGQoc3RydWN0IG1paV9idXMgKm1kaW8sXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLCB1MzIgYWRkcilcbiYjNDM7e1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0aWYgKG9mX25vZGVfdGVzdF9hbmRfc2V0X2ZsYWcoY2hpbGQsIE9GX1BPUFVMQVRFRCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKG9mX21kaW9idXNfY2hpbGRfaXNfcGh5KGNoaWxkKSlcbiYjNDM7XHRcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9waHkobWRpbywgY2hpbGQsIGFkZHIpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2UobWRpbywgY2hpbGQsIGFkZHIpO1xuJiM0MztcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRvZl9ub2RlX2NsZWFyX2ZsYWcoY2hpbGQsIE9GX1BPUFVMQVRFRCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByYztcbiYjNDM7fVxuJiM0MztcbiAvKiBUaGUgZm9sbG93aW5nIGlzIGEgbGlzdCBvZiBQSFkgY29tcGF0aWJsZSBzdHJpbmdzIHdoaWNoIGFwcGVhciBpblxuICAqIHNvbWUgRFRCcy4gVGhlIGNvbXBhdGlibGUgc3RyaW5nIGlzIG5ldmVyIG1hdGNoZWQgYWdhaW5zdCBhIFBIWVxuICAqIGRyaXZlciwgc28gaXMgcG9pbnRsZXNzLiBXZSBvbmx5IGV4cGVjdCBkZXZpY2VzIHdoaWNoIGFyZSBub3QgUEhZc1xuQEAgLTEzNiw2ICYjNDM7MjA0LDMyIEBAIGJvb2wgb2ZfbWRpb2J1c19jaGlsZF9pc19waHkoc3RydWN0IGRldmljZV9ub2RlICpjaGlsZClcbiB9XG4gRVhQT1JUX1NZTUJPTChvZl9tZGlvYnVzX2NoaWxkX2lzX3BoeSk7XG4gXG4mIzQzO3N0YXRpYyBpbnQgb2ZfbWRpb2J1c19zY2FuX3BoeShzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgYWRkciwgcmM7XG4mIzQzO1xuJiM0MztcdGlmICghb2ZfbWRpb2J1c19jaGlsZF9pc19waHkoY2hpbGQpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdGZvciAoYWRkciA9IDA7IGFkZHIgXHUwMDNjIFBIWV9NQVhfQUREUjsgYWRkciYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChtZGlvYnVzX2lzX3JlZ2lzdGVyZWRfZGV2aWNlKG1kaW8sIGFkZHIpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRkZXZfaW5mbyhcdTAwMjZtZGlvLVx1MDAzZWRldiwgXCYjMzQ7c2NhbiBwaHkgJXBPRm4gYXQgYWRkcmVzcyAlaVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0IGNoaWxkLCBhZGRyKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiAtRU5PREVWIG1lYW5zIHRoYXQgc2Nhbm5pbmcgc2hvdWxkIGNvbnRpbnVlLiAqL1xuJiM0MztcdFx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyX2NoaWxkKG1kaW8sIGNoaWxkLCBhZGRyKTtcbiYjNDM7XHRcdGlmICghcmMpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0aWYgKHJjICE9IC1FTk9ERVYpXG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRU5PREVWO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgX19vZl9tZGlvYnVzX3BhcnNlX3BoeXMoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4gXHRcdFx0XHQgICBib29sICpzY2FucGh5cylcbiB7XG5AQCAtMTY0LDEwICYjNDM7MjU4LDcgQEAgc3RhdGljIGludCBfX29mX21kaW9idXNfcGFyc2VfcGh5cyhzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRpZiAob2ZfbWRpb2J1c19jaGlsZF9pc19waHkoY2hpbGQpKVxuLVx0XHRcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9waHkobWRpbywgY2hpbGQsIGFkZHIpO1xuLVx0XHRlbHNlXG4tXHRcdFx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyX2RldmljZShtZGlvLCBjaGlsZCwgYWRkcik7XG4mIzQzO1x0XHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXJfY2hpbGQobWRpbywgY2hpbGQsIGFkZHIpO1xuIFxuIFx0XHRpZiAocmMgPT0gLUVOT0RFVilcbiBcdFx0XHRkZXZfZXJyKFx1MDAyNm1kaW8tXHUwMDNlZGV2LFxuQEAgLTE5Nyw3ICYjNDM7Mjg4LDcgQEAgaW50IF9fb2ZfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCxcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkO1xuIFx0Ym9vbCBzY2FucGh5cyA9IGZhbHNlO1xuLVx0aW50IGFkZHIsIHJjO1xuJiM0MztcdGludCByYztcbiBcbiBcdGlmICghbnApXG4gXHRcdHJldHVybiBfX21kaW9idXNfcmVnaXN0ZXIobWRpbywgb3duZXIpO1xuQEAgLTIyMywxMyAmIzQzOzMxNCwyMSBAQCBpbnQgX19vZl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gcmM7XG4gXG4mIzQzO1x0b2ZfbWRpb19yZWNvbmZpZ19sb2NrKCk7XG4mIzQzO1x0cmMgPSBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4obWRpbywgZmFsc2UpO1xuJiM0MztcdGlmIChyYykge1xuJiM0MztcdFx0b2ZfbWRpb19yZWNvbmZpZ191bmxvY2soKTtcbiYjNDM7XHRcdG1kaW9idXNfdW5yZWdpc3RlcihtZGlvKTtcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogTG9vcCBvdmVyIHRoZSBjaGlsZCBub2RlcyBhbmQgcmVnaXN0ZXIgYSBwaHlfZGV2aWNlIGZvciBlYWNoIHBoeSAqL1xuIFx0cmMgPSBfX29mX21kaW9idXNfcGFyc2VfcGh5cyhtZGlvLCBucCwgXHUwMDI2c2NhbnBoeXMpO1xuIFx0aWYgKHJjKVxuLVx0XHRnb3RvIHVucmVnaXN0ZXI7XG4mIzQzO1x0XHRnb3RvIG91dF9jaGFuZ2U7XG4gXG4gXHRpZiAoIXNjYW5waHlzKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdGdvdG8gb3V0X2NoYW5nZTtcbiBcbiBcdC8qIGF1dG8gc2NhbiBmb3IgUEhZcyB3aXRoIGVtcHR5IHJlZyBwcm9wZXJ0eSAqL1xuIFx0Zm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGUobnAsIGNoaWxkKSB7XG5AQCAtMjM4LDM5ICYjNDM7MzM3LDM4MiBAQCBpbnQgX19vZl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuIFx0XHQgICAgb2Zfbm9kZV9uYW1lX2VxKGNoaWxkLCBcJiMzNDtldGhlcm5ldC1waHktcGFja2FnZVwmIzM0OykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGZvciAoYWRkciA9IDA7IGFkZHIgXHUwMDNjIFBIWV9NQVhfQUREUjsgYWRkciYjNDM7JiM0MzspIHtcbi1cdFx0XHQvKiBza2lwIGFscmVhZHkgcmVnaXN0ZXJlZCBQSFlzICovXG4tXHRcdFx0aWYgKG1kaW9idXNfaXNfcmVnaXN0ZXJlZF9kZXZpY2UobWRpbywgYWRkcikpXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0XHQvKiBiZSBub2lzeSB0byBlbmNvdXJhZ2UgcGVvcGxlIHRvIHNldCByZWcgcHJvcGVydHkgKi9cbi1cdFx0XHRkZXZfaW5mbyhcdTAwMjZtZGlvLVx1MDAzZWRldiwgXCYjMzQ7c2NhbiBwaHkgJXBPRm4gYXQgYWRkcmVzcyAlaVxcblwmIzM0Oyxcbi1cdFx0XHRcdCBjaGlsZCwgYWRkcik7XG4tXG4tXHRcdFx0aWYgKG9mX21kaW9idXNfY2hpbGRfaXNfcGh5KGNoaWxkKSkge1xuLVx0XHRcdFx0LyogLUVOT0RFViBpcyB0aGUgcmV0dXJuIGNvZGUgdGhhdCBQSFlMSUIgaGFzXG4tXHRcdFx0XHQgKiBzdGFuZGFyZGl6ZWQgb24gdG8gaW5kaWNhdGUgdGhhdCBidXNcbi1cdFx0XHRcdCAqIHNjYW5uaW5nIHNob3VsZCBjb250aW51ZS5cbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyX3BoeShtZGlvLCBjaGlsZCwgYWRkcik7XG4tXHRcdFx0XHRpZiAoIXJjKVxuLVx0XHRcdFx0XHRicmVhaztcbi1cdFx0XHRcdGlmIChyYyAhPSAtRU5PREVWKVxuLVx0XHRcdFx0XHRnb3RvIHB1dF91bnJlZ2lzdGVyO1xuLVx0XHRcdH1cbi1cdFx0fVxuJiM0MztcdFx0cmMgPSBvZl9tZGlvYnVzX3NjYW5fcGh5KG1kaW8sIGNoaWxkKTtcbiYjNDM7XHRcdGlmIChyYyBcdTAwMjZcdTAwMjYgcmMgIT0gLUVOT0RFVilcbiYjNDM7XHRcdFx0Z290byBwdXRfY2hpbGQ7XG4mIzQzO1x0XHRyYyA9IDA7XG4gXHR9XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7b3V0X2NoYW5nZTpcbiYjNDM7XHRtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kKG1kaW8sIGZhbHNlKTtcbiYjNDM7XHRvZl9tZGlvX3JlY29uZmlnX3VubG9jaygpO1xuJiM0MztcdGlmICghcmMpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcbi1wdXRfdW5yZWdpc3Rlcjpcbi1cdG9mX25vZGVfcHV0KGNoaWxkKTtcbi11bnJlZ2lzdGVyOlxuIFx0bWRpb2J1c191bnJlZ2lzdGVyKG1kaW8pO1xuIFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7cHV0X2NoaWxkOlxuJiM0MztcdG9mX25vZGVfcHV0KGNoaWxkKTtcbiYjNDM7XHRnb3RvIG91dF9jaGFuZ2U7XG4gfVxuIEVYUE9SVF9TWU1CT0woX19vZl9tZGlvYnVzX3JlZ2lzdGVyKTtcbiBcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX09GX0RZTkFNSUMpXG4mIzQzO3N0YXRpYyBib29sIG9mX21kaW9idXNfbm9kZV9pc19hdmFpbGFibGUoc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICFvZl9ub2RlX2NoZWNrX2ZsYWcobm9kZSwgT0ZfREVUQUNIRUQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICBvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5vZGUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG9mX21kaW9idXNfYWRkX25vZGUoc3RydWN0IG1paV9idXMgKm1kaW8sXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkO1xuJiM0MztcdGludCBhZGRyLCByYywgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFvZl9tZGlvYnVzX25vZGVfaXNfYXZhaWxhYmxlKG5vZGUpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChvZl9ub2RlX25hbWVfZXEobm9kZSwgXCYjMzQ7ZXRoZXJuZXQtcGh5LXBhY2thZ2VcJiMzNDspKSB7XG4mIzQzO1x0XHRpZiAoIW9mX3Byb3BlcnR5X3ByZXNlbnQobm9kZSwgXCYjMzQ7cmVnXCYjMzQ7KSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdFx0Zm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGUobm9kZSwgY2hpbGQpIHtcbiYjNDM7XHRcdFx0cmMgPSBvZl9tZGlvYnVzX2FkZF9ub2RlKG1kaW8sIGNoaWxkKTtcbiYjNDM7XHRcdFx0aWYgKHJjIFx1MDAyNlx1MDAyNiByYyAhPSAtRU5PREVWIFx1MDAyNlx1MDAyNiAhcmV0KVxuJiM0MztcdFx0XHRcdHJldCA9IHJjO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRhZGRyID0gb2ZfbWRpb19wYXJzZV9hZGRyKFx1MDAyNm1kaW8tXHUwMDNlZGV2LCBub2RlKTtcbiYjNDM7XHRpZiAoYWRkciBcdTAwM2MgMClcbiYjNDM7XHRcdHJjID0gb2ZfbWRpb2J1c19zY2FuX3BoeShtZGlvLCBub2RlKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXJfY2hpbGQobWRpbywgbm9kZSwgYWRkcik7XG4mIzQzO1xuJiM0MztcdGlmIChyYyA9PSAtRU5PREVWIFx1MDAyNlx1MDAyNiBhZGRyIFx1MDAzZT0gMClcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2bWRpby1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFwmIzM0O01ESU8gZGV2aWNlIGF0IGFkZHJlc3MgJWQgaXMgbWlzc2luZy5cXG5cJiMzNDssIGFkZHIpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG9mX21kaW9idXNfbm9kZV9pc19idXN5KHN0cnVjdCBtaWlfYnVzICptZGlvLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XG4mIzQzO1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbiYjNDM7XHRib29sIGJ1c3kgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKG9mX25vZGVfbmFtZV9lcShub2RlLCBcJiMzNDtldGhlcm5ldC1waHktcGFja2FnZVwmIzM0OykpIHtcbiYjNDM7XHRcdGZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKG5vZGUsIGNoaWxkKSB7XG4mIzQzO1x0XHRcdGlmIChvZl9tZGlvYnVzX25vZGVfaXNfYnVzeShtZGlvLCBjaGlsZCkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFvZl9ub2RlX2NoZWNrX2ZsYWcobm9kZSwgT0ZfUE9QVUxBVEVEKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0bWRpb2RldiA9IG9mX21kaW9fZmluZF9kZXZpY2Uobm9kZSk7XG4mIzQzO1x0aWYgKCFtZGlvZGV2KVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0aWYgKG1kaW9kZXYtXHUwMDNlYnVzICE9IG1kaW8pIHtcbiYjNDM7XHRcdHB1dF9kZXZpY2UoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZtZGlvLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuJiM0MztcdGJ1c3kgPSBtZGlvLVx1MDAzZW1kaW9fbWFwW21kaW9kZXYtXHUwMDNlYWRkcl0gIT0gbWRpb2RldiB8fFxuJiM0MztcdCAgICAgICAobWRpby1cdTAwM2VtZGlvX21hcF9wZW5kaW5nIFx1MDAyNiBCSVQobWRpb2Rldi1cdTAwM2VhZGRyKSk7XG4mIzQzO1x0aWYgKG1kaW9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IE1ESU9fREVWSUNFX0ZMQUdfUEhZKSB7XG4mIzQzO1x0XHRwaHlkZXYgPSB0b19waHlfZGV2aWNlKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRcdGlmIChwaHlkZXYtXHUwMDNlYXR0YWNoZWQpIHtcbiYjNDM7XHRcdFx0YnVzeSA9IHRydWU7XG4mIzQzO1x0XHRcdGRldl93YXJuKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdCBcJiMzNDtjYW5ub3QgcmVtb3ZlIGFuIGF0dGFjaGVkIFBIWTsgcmVtb3ZlIGl0cyBjb25zdW1lciBmaXJzdFxcblwmIzM0Oyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZtZGlvLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuJiM0MztcdHB1dF9kZXZpY2UoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYnVzeTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqXG4mIzQzO29mX21kaW9idXNfZ2V0X3JlbW92YWxfc2NvcGUoc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQ7XG4mIzQzO1xuJiM0MztcdGlmIChvZl9ub2RlX25hbWVfZXEobm9kZSwgXCYjMzQ7ZXRoZXJuZXQtcGh5LXBhY2thZ2VcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIG9mX25vZGVfZ2V0KG5vZGUpO1xuJiM0MztcbiYjNDM7XHRwYXJlbnQgPSBvZl9nZXRfcGFyZW50KG5vZGUpO1xuJiM0MztcdGlmIChvZl9ub2RlX25hbWVfZXEocGFyZW50LCBcJiMzNDtldGhlcm5ldC1waHktcGFja2FnZVwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gcGFyZW50O1xuJiM0MztcbiYjNDM7XHRvZl9ub2RlX3B1dChwYXJlbnQpO1xuJiM0MztcdHJldHVybiBvZl9ub2RlX2dldChub2RlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvZl9tZGlvYnVzX3JlbW92ZV9ub2RlKHN0cnVjdCBtaWlfYnVzICptZGlvLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2O1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKG9mX25vZGVfbmFtZV9lcShub2RlLCBcJiMzNDtldGhlcm5ldC1waHktcGFja2FnZVwmIzM0OykpIHtcbiYjNDM7XHRcdGZvcl9lYWNoX2NoaWxkX29mX25vZGUobm9kZSwgY2hpbGQpIHtcbiYjNDM7XHRcdFx0cmV0ID0gb2ZfbWRpb2J1c19yZW1vdmVfbm9kZShtZGlvLCBjaGlsZCk7XG4mIzQzO1x0XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0XHRvZl9ub2RlX3B1dChjaGlsZCk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIW9mX25vZGVfY2hlY2tfZmxhZyhub2RlLCBPRl9QT1BVTEFURUQpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBPRiBub2RlIGxvb2t1cCBhbHNvIGNvdmVycyBQSFlzIGZvdW5kIGJ5IGFkZHJlc3Mgc2Nhbm5pbmcuICovXG4mIzQzO1x0bWRpb2RldiA9IG9mX21kaW9fZmluZF9kZXZpY2Uobm9kZSk7XG4mIzQzO1x0aWYgKCFtZGlvZGV2KVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHRpZiAobWRpb2Rldi1cdTAwM2VidXMgIT0gbWRpbykge1xuJiM0MztcdFx0cHV0X2RldmljZShcdTAwMjZtZGlvZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IG1kaW9kZXYtXHUwMDNlZGV2aWNlX3JlbW92ZV9keW5hbWljKG1kaW9kZXYpO1xuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0bWRpb2Rldi1cdTAwM2VkZXZpY2VfZnJlZShtZGlvZGV2KTtcbiYjNDM7XHRwdXRfZGV2aWNlKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldCA9PSAtRU5PREVWID8gMCA6IHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBtaWlfYnVzICpvZl9tZGlvYnVzX2ZpbmRfcGFyZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50LCAqYnVzX25vZGU7XG4mIzQzO1x0c3RydWN0IG1paV9idXMgKm1kaW87XG4mIzQzO1xuJiM0MztcdHBhcmVudCA9IG9mX2dldF9wYXJlbnQobm9kZSk7XG4mIzQzO1x0aWYgKCFwYXJlbnQpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aWYgKG9mX25vZGVfbmFtZV9lcShwYXJlbnQsIFwmIzM0O2V0aGVybmV0LXBoeS1wYWNrYWdlXCYjMzQ7KSkge1xuJiM0MztcdFx0aWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKHBhcmVudCkgfHxcbiYjNDM7XHRcdCAgICAhb2ZfcHJvcGVydHlfcHJlc2VudChwYXJlbnQsIFwmIzM0O3JlZ1wmIzM0OykpIHtcbiYjNDM7XHRcdFx0b2Zfbm9kZV9wdXQocGFyZW50KTtcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0YnVzX25vZGUgPSBvZl9nZXRfcGFyZW50KHBhcmVudCk7XG4mIzQzO1x0XHRvZl9ub2RlX3B1dChwYXJlbnQpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRidXNfbm9kZSA9IHBhcmVudDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1kaW8gPSBvZl9tZGlvX2ZpbmRfYnVzKGJ1c19ub2RlKTtcbiYjNDM7XHRvZl9ub2RlX3B1dChidXNfbm9kZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtZGlvO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfT0ZfT1ZFUkxBWSlcbiYjNDM7LyogT3ZlcmxheSBlbnRyeSBub3RpZmllciBlcnJvcnMgY2Fubm90IHN0b3AgcmVtb3ZhbCBhZnRlciB0aGUgdHJlZSBjaGFuZ2VkLiAqL1xuJiM0MztzdGF0aWMgYm9vbCBvZl9tZGlvYnVzX2xpdmVfbm9kZV9pc19idXN5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqc2NvcGU7XG4mIzQzO1x0c3RydWN0IG1paV9idXMgKm1kaW87XG4mIzQzO1x0Ym9vbCBidXN5ID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0c2NvcGUgPSBvZl9tZGlvYnVzX2dldF9yZW1vdmFsX3Njb3BlKG5vZGUpO1xuJiM0MztcdG1kaW8gPSBvZl9tZGlvYnVzX2ZpbmRfcGFyZW50KHNjb3BlKTtcbiYjNDM7XHRpZiAoIW1kaW8pXG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfc2NvcGU7XG4mIzQzO1xuJiM0MztcdGlmICghbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKG1kaW8sIHRydWUpKSB7XG4mIzQzO1x0XHRidXN5ID0gb2ZfbWRpb2J1c19ub2RlX2lzX2J1c3kobWRpbywgc2NvcGUpO1xuJiM0MztcdFx0bWRpb2J1c19kZXZpY2VfY2hhbmdlX2VuZChtZGlvLCB0cnVlKTtcbiYjNDM7XHR9XG4mIzQzO1x0cHV0X2RldmljZShcdTAwMjZtZGlvLVx1MDAzZWRldik7XG4mIzQzO1xuJiM0MztvdXRfcHV0X3Njb3BlOlxuJiM0MztcdG9mX25vZGVfcHV0KHNjb3BlKTtcbiYjNDM7XHRyZXR1cm4gYnVzeTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqXG4mIzQzO29mX21kaW9idXNfb3ZlcmxheV90YXJnZXRfY2hpbGQoc3RydWN0IGRldmljZV9ub2RlICp0YXJnZXQsXG4mIzQzO1x0XHRcdFx0c3RydWN0IGRldmljZV9ub2RlICpvdmVybGF5X2NoaWxkKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgY2hhciAqbmFtZSA9IGtiYXNlbmFtZShvdmVybGF5X2NoaWxkLVx1MDAzZWZ1bGxfbmFtZSk7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZDtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfY2hpbGRfb2Zfbm9kZSh0YXJnZXQsIGNoaWxkKSB7XG4mIzQzO1x0XHRpZiAoIW9mX25vZGVfY21wKGtiYXNlbmFtZShjaGlsZC1cdTAwM2VmdWxsX25hbWUpLCBuYW1lKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGNoaWxkO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG9mX21kaW9idXNfb3ZlcmxheV9ub2RlX2lzX2J1c3koc3RydWN0IGRldmljZV9ub2RlICpvdmVybGF5LFxuJiM0MztcdFx0XHRcdFx0ICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqdGFyZ2V0LFxuJiM0MztcdFx0XHRcdFx0ICAgIGJvb2wgYWRkZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm92ZXJsYXlfY2hpbGQsICp0YXJnZXRfY2hpbGQ7XG4mIzQzO1x0Ym9vbCBidXN5LCBjaGlsZF9hZGRlZDtcbiYjNDM7XG4mIzQzO1x0aWYgKChhZGRlZCB8fCBvZl9wcm9wZXJ0eV9wcmVzZW50KG92ZXJsYXksIFwmIzM0O3N0YXR1c1wmIzM0OykpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBvZl9tZGlvYnVzX2xpdmVfbm9kZV9pc19idXN5KHRhcmdldCkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShvdmVybGF5LCBvdmVybGF5X2NoaWxkKSB7XG4mIzQzO1x0XHR0YXJnZXRfY2hpbGQgPSBvZl9tZGlvYnVzX292ZXJsYXlfdGFyZ2V0X2NoaWxkKHRhcmdldCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgICAgb3ZlcmxheV9jaGlsZCk7XG4mIzQzO1x0XHRpZiAoIXRhcmdldF9jaGlsZClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0Y2hpbGRfYWRkZWQgPSBvZl9ub2RlX2NoZWNrX2ZsYWcodGFyZ2V0X2NoaWxkLCBPRl9PVkVSTEFZKTtcbiYjNDM7XHRcdGJ1c3kgPSBvZl9tZGlvYnVzX292ZXJsYXlfbm9kZV9pc19idXN5KG92ZXJsYXlfY2hpbGQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICB0YXJnZXRfY2hpbGQsIGNoaWxkX2FkZGVkKTtcbiYjNDM7XHRcdG9mX25vZGVfcHV0KHRhcmdldF9jaGlsZCk7XG4mIzQzO1x0XHRpZiAoYnVzeSkge1xuJiM0MztcdFx0XHRvZl9ub2RlX3B1dChvdmVybGF5X2NoaWxkKTtcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb2ZfbWRpb2J1c19vdmVybGF5X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuJiM0MztcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmFyZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvZl9vdmVybGF5X25vdGlmeV9kYXRhICpuZCA9IGFyZztcbiYjNDM7XHRib29sIGJ1c3k7XG4mIzQzO1xuJiM0MztcdGlmIChhY3Rpb24gIT0gT0ZfT1ZFUkxBWV9QUkVfUkVNT1ZFKVxuJiM0MztcdFx0cmV0dXJuIE5PVElGWV9PSztcbiYjNDM7XG4mIzQzO1x0b2ZfbWRpb19yZWNvbmZpZ19sb2NrKCk7XG4mIzQzO1x0YnVzeSA9IG9mX21kaW9idXNfb3ZlcmxheV9ub2RlX2lzX2J1c3kobmQtXHUwMDNlb3ZlcmxheSwgbmQtXHUwMDNldGFyZ2V0LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGZhbHNlKTtcbiYjNDM7XHRvZl9tZGlvX3JlY29uZmlnX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYnVzeSA/IG5vdGlmaWVyX2Zyb21fZXJybm8oLUVCVVNZKSA6IE5PVElGWV9PSztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBvZl9tZGlvX292ZXJsYXlfbm90aWZpZXIgPSB7XG4mIzQzO1x0Lm5vdGlmaWVyX2NhbGwgPSBvZl9tZGlvYnVzX292ZXJsYXlfbm90aWZ5LFxuJiM0Mzt9O1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb2ZfbWRpb2J1c19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sXG4mIzQzO1x0XHRcdCAgICAgdm9pZCAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG9mX3JlY29uZmlnX2RhdGEgKnJkID0gYXJnO1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqc2NvcGU7XG4mIzQzO1x0c3RydWN0IG1paV9idXMgKm1kaW87XG4mIzQzO1x0ZW51bSBvZl9yZWNvbmZpZ19jaGFuZ2UgY2hhbmdlO1xuJiM0MztcdGJvb2wgcmVtb3Zpbmc7XG4mIzQzO1x0aW50IHJjLCByZXQgPSBOT1RJRllfT0s7XG4mIzQzO1xuJiM0MztcdG9mX21kaW9fcmVjb25maWdfbG9jaygpO1xuJiM0MztcdGNoYW5nZSA9IG9mX3JlY29uZmlnX2dldF9zdGF0ZV9jaGFuZ2UoYWN0aW9uLCByZCk7XG4mIzQzO1x0c3dpdGNoIChjaGFuZ2UpIHtcbiYjNDM7XHRjYXNlIE9GX1JFQ09ORklHX0NIQU5HRV9BREQ6XG4mIzQzO1x0XHQvKiBBIG5ld2VyIGNoYW5nZSBtYXkgaGF2ZSBtYWRlIHRoaXMgbm90aWZpY2F0aW9uIHN0YWxlLiAqL1xuJiM0MztcdFx0aWYgKCFvZl9tZGlvYnVzX25vZGVfaXNfYXZhaWxhYmxlKHJkLVx1MDAzZWRuKSlcbiYjNDM7XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdFx0cmVtb3ZpbmcgPSBmYWxzZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgT0ZfUkVDT05GSUdfQ0hBTkdFX1JFTU9WRTpcbiYjNDM7XHRcdC8qIEEgbmV3ZXIgY2hhbmdlIG1heSBoYXZlIG1hZGUgdGhpcyBub3RpZmljYXRpb24gc3RhbGUuICovXG4mIzQzO1x0XHRpZiAob2ZfbWRpb2J1c19ub2RlX2lzX2F2YWlsYWJsZShyZC1cdTAwM2VkbikpXG4mIzQzO1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHRcdHJlbW92aW5nID0gdHJ1ZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtZGlvID0gb2ZfbWRpb2J1c19maW5kX3BhcmVudChyZC1cdTAwM2Vkbik7XG4mIzQzO1x0aWYgKCFtZGlvKVxuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRyYyA9IG1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbihtZGlvLCByZW1vdmluZyk7XG4mIzQzO1x0aWYgKHJjKSB7XG4mIzQzO1x0XHRpZiAoIXJlbW92aW5nKVxuJiM0MztcdFx0XHRyZXQgPSBub3RpZmllcl9mcm9tX2Vycm5vKC1FUFJPQkVfREVGRVIpO1xuJiM0MztcdFx0Z290byBvdXRfcHV0X21kaW87XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXJlbW92aW5nKSB7XG4mIzQzO1x0XHRyYyA9IG9mX21kaW9idXNfYWRkX25vZGUobWRpbywgcmQtXHUwMDNlZG4pO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBUaGUgbm9kZSBtYXkgYWxyZWFkeSBiZSBkZXRhY2hlZCBmcm9tIGl0cyBwYXJlbnQgaGllcmFyY2h5LiAqL1xuJiM0MztcdFx0c2NvcGUgPSBvZl9tZGlvYnVzX2dldF9yZW1vdmFsX3Njb3BlKHJkLVx1MDAzZWRuKTtcbiYjNDM7XHRcdGlmIChvZl9tZGlvYnVzX25vZGVfaXNfYnVzeShtZGlvLCBzY29wZSkpXG4mIzQzO1x0XHRcdHJjID0gLUVCVVNZO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRyYyA9IG9mX21kaW9idXNfcmVtb3ZlX25vZGUobWRpbywgcmQtXHUwMDNlZG4pO1xuJiM0MztcdFx0b2Zfbm9kZV9wdXQoc2NvcGUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWRpb2J1c19kZXZpY2VfY2hhbmdlX2VuZChtZGlvLCByZW1vdmluZyk7XG4mIzQzO1x0aWYgKHJjIFx1MDAyNlx1MDAyNiAocmVtb3ZpbmcgfHwgcmMgIT0gLUVOT0RFVikpXG4mIzQzO1x0XHRyZXQgPSBub3RpZmllcl9mcm9tX2Vycm5vKHJjKTtcbiYjNDM7XG4mIzQzO291dF9wdXRfbWRpbzpcbiYjNDM7XHRwdXRfZGV2aWNlKFx1MDAyNm1kaW8tXHUwMDNlZGV2KTtcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHRvZl9tZGlvX3JlY29uZmlnX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG9mX21kaW9fbm90aWZpZXIgPSB7XG4mIzQzO1x0Lm5vdGlmaWVyX2NhbGwgPSBvZl9tZGlvYnVzX25vdGlmeSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IG9mX21kaW9faW5pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gb2ZfcmVjb25maWdfbm90aWZpZXJfcmVnaXN0ZXIoXHUwMDI2b2ZfbWRpb19ub3RpZmllcik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfT0ZfT1ZFUkxBWSlcbiYjNDM7XHRyZXQgPSBvZl9vdmVybGF5X25vdGlmaWVyX3JlZ2lzdGVyKFx1MDAyNm9mX21kaW9fb3ZlcmxheV9ub3RpZmllcik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdG9mX3JlY29uZmlnX25vdGlmaWVyX3VucmVnaXN0ZXIoXHUwMDI2b2ZfbWRpb19ub3RpZmllcik7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO21vZHVsZV9pbml0KG9mX21kaW9faW5pdCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBfX2V4aXQgb2ZfbWRpb19leGl0KHZvaWQpXG4mIzQzO3tcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX09GX09WRVJMQVkpXG4mIzQzO1x0b2Zfb3ZlcmxheV9ub3RpZmllcl91bnJlZ2lzdGVyKFx1MDAyNm9mX21kaW9fb3ZlcmxheV9ub3RpZmllcik7XG4mIzQzOyNlbmRpZlxuJiM0MztcdG9mX3JlY29uZmlnX25vdGlmaWVyX3VucmVnaXN0ZXIoXHUwMDI2b2ZfbWRpb19ub3RpZmllcik7XG4mIzQzO31cbiYjNDM7bW9kdWxlX2V4aXQob2ZfbWRpb19leGl0KTtcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19PRl9EWU5BTUlDICovXG4mIzQzO1xuIC8qKlxuICAqIG9mX21kaW9fZmluZF9kZXZpY2UgLSBHaXZlbiBhIGRldmljZSB0cmVlIG5vZGUsIGZpbmQgdGhlIG1kaW9fZGV2aWNlXG4gICogQG5wOiBwb2ludGVyIHRvIHRoZSBtZGlvX2RldmljZSYjMzk7cyBkZXZpY2UgdHJlZSBub2RlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmMgYi9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuY1xuaW5kZXggMDBkMGU0MTU5ZTliYi4uZjQ1YzkzNmZlNWFhOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuY1xuQEAgLTM0LDcgJiM0MzszNCw4IEBAIHN0YXRpYyBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9idXNfZmluZF9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXG4gXHRpZiAoV0FSTl9PTkNFKCFhZGRyX3ZhbGlkLCBcJiMzNDthZGRyICVkIG91dCBvZiByYW5nZVxcblwmIzM0OywgYWRkcikpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0cmV0dXJuIGJ1cy1cdTAwM2VtZGlvX21hcFthZGRyXTtcbiYjNDM7XHQvKiBQYWlyIHdpdGggbWFwIHB1YmxpY2F0aW9uIGluIG1kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKCkuICovXG4mIzQzO1x0cmV0dXJuIHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwW2FkZHJdKTtcbiB9XG4gXG4gc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfZ2V0X3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcbkBAIC01NCw3ICYjNDM7NTUsMTYgQEAgRVhQT1JUX1NZTUJPTChtZGlvYnVzX2dldF9waHkpO1xuIFxuIGJvb2wgbWRpb2J1c19pc19yZWdpc3RlcmVkX2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcbiB7XG4tXHRyZXR1cm4gbWRpb2J1c19maW5kX2RldmljZShidXMsIGFkZHIpICE9IE5VTEw7XG4mIzQzO1x0Ym9vbCBhZGRyX3ZhbGlkID0gYWRkciBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGFkZHIgXHUwMDNjIEFSUkFZX1NJWkUoYnVzLVx1MDAzZW1kaW9fbWFwKTtcbiYjNDM7XHRib29sIHJlZ2lzdGVyZWQ7XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OQ0UoIWFkZHJfdmFsaWQsIFwmIzM0O2FkZHIgJWQgb3V0IG9mIHJhbmdlXFxuXCYjMzQ7LCBhZGRyKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmVnaXN0ZXJlZCA9IFJFQURfT05DRShidXMtXHUwMDNlbWRpb19tYXBbYWRkcl0pIHx8XG4mIzQzO1x0XHQgICAgIChSRUFEX09OQ0UoYnVzLVx1MDAzZW1kaW9fbWFwX3BlbmRpbmcpIFx1MDAyNiBCSVQoYWRkcikpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVnaXN0ZXJlZDtcbiB9XG4gRVhQT1JUX1NZTUJPTChtZGlvYnVzX2lzX3JlZ2lzdGVyZWRfZGV2aWNlKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYyBiL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jXG5pbmRleCBjZTNhNjA3YTQwY2IwLi5kZjgwMTI1ZWVlYzQ1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jXG5AQCAtMzMwLDYgJiM0MzszMzAsOSBAQCBzdHJ1Y3QgbWlpX2J1cyAqbWRpb2J1c19hbGxvY19zaXplKHNpemVfdCBzaXplKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdGJ1cy1cdTAwM2VzdGF0ZSA9IE1ESU9CVVNfQUxMT0NBVEVEO1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuJiM0MztcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX3dhaXQpO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9yZXRpcmVkKTtcbiBcdGlmIChzaXplKVxuIFx0XHRidXMtXHUwMDNlcHJpdiA9ICh2b2lkICopYnVzICYjNDM7IGFsaWduZWRfc2l6ZTtcbiBcbkBAIC0zNTUsMTAgJiM0MzszNTgsOSBAQCBzdGF0aWMgaW50IG9mX21kaW9idXNfZmluZF9waHkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4ge1xuIFx0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZDtcbiYjNDM7XHRpbnQgYWRkciwgcmV0O1xuIFxuIFx0Zm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGUobnAsIGNoaWxkKSB7XG4tXHRcdGludCBhZGRyO1xuLVxuIFx0XHRpZiAob2Zfbm9kZV9uYW1lX2VxKGNoaWxkLCBcJiMzNDtldGhlcm5ldC1waHktcGFja2FnZVwmIzM0OykpIHtcbiBcdFx0XHQvKiBWYWxpZGF0ZSBQSFkgcGFja2FnZSByZWcgcHJlc2VuY2UgKi9cbiBcdFx0XHRpZiAoIW9mX3Byb3BlcnR5X3ByZXNlbnQoY2hpbGQsIFwmIzM0O3JlZ1wmIzM0OykpIHtcbkBAIC0zNjYsMTIgJiM0MzszNjgsMTMgQEAgc3RhdGljIGludCBvZl9tZGlvYnVzX2ZpbmRfcGh5KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuIFxuLVx0XHRcdGlmICghb2ZfbWRpb2J1c19maW5kX3BoeShkZXYsIG1kaW9kZXYsIGNoaWxkKSkge1xuJiM0MztcdFx0XHRyZXQgPSBvZl9tZGlvYnVzX2ZpbmRfcGh5KGRldiwgbWRpb2RldiwgY2hpbGQpO1xuJiM0MztcdFx0XHRpZiAocmV0ICE9IC1FTk9ERVYpIHtcbiBcdFx0XHRcdC8qIFRoZSByZWZjb3VudCBmb3IgdGhlIFBIWSBwYWNrYWdlIHdpbGwgYmVcbiBcdFx0XHRcdCAqIGluY3JlbWVudGVkIGxhdGVyIHdoZW4gUEhZIGpvaW4gdGhlIFBhY2thZ2UuXG4gXHRcdFx0XHQgKi9cbiBcdFx0XHRcdG9mX25vZGVfcHV0KGNoaWxkKTtcbi1cdFx0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdFx0fVxuIFxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTM4Miw2ICYjNDM7Mzg1LDExIEBAIHN0YXRpYyBpbnQgb2ZfbWRpb2J1c19maW5kX3BoeShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGFkZHIgPT0gbWRpb2Rldi1cdTAwM2VhZGRyKSB7XG4mIzQzO1x0XHRcdGlmIChvZl9ub2RlX3Rlc3RfYW5kX3NldF9mbGFnKGNoaWxkLCBPRl9QT1BVTEFURUQpKSB7XG4mIzQzO1x0XHRcdFx0b2Zfbm9kZV9wdXQoY2hpbGQpO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4gXHRcdFx0ZGV2aWNlX3NldF9ub2RlKGRldiwgb2ZfZndub2RlX2hhbmRsZShjaGlsZCkpO1xuIFx0XHRcdC8qIFRoZSByZWZjb3VudCBvbiBcJiMzNDtjaGlsZFwmIzM0OyBpcyBwYXNzZWQgdG8gdGhlIG1kaW9cbiBcdFx0XHQgKiBkZXZpY2UuIERvIF9ub3RfIHVzZSBvZl9ub2RlX3B1dChjaGlsZCkgaGVyZS5cbkBAIC0zOTMsMjIgJiM0Mzs0MDEsMjYgQEAgc3RhdGljIGludCBvZl9tZGlvYnVzX2ZpbmRfcGh5KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxuIFx0cmV0dXJuIC1FTk9ERVY7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG9mX21kaW9idXNfbGlua19tZGlvZGV2KHN0cnVjdCBtaWlfYnVzICpidXMsXG4tXHRcdFx0XHQgICAgc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuJiM0MztzdGF0aWMgaW50IG9mX21kaW9idXNfbGlua19tZGlvZGV2KHN0cnVjdCBtaWlfYnVzICpidXMsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2O1xuIFxuIFx0aWYgKGRldi1cdTAwM2VvZl9ub2RlIHx8ICFidXMtXHUwMDNlZGV2Lm9mX25vZGUpXG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuLVx0b2ZfbWRpb2J1c19maW5kX3BoeShkZXYsIG1kaW9kZXYsIGJ1cy1cdTAwM2VkZXYub2Zfbm9kZSk7XG4mIzQzO1x0cmV0dXJuIG9mX21kaW9idXNfZmluZF9waHkoZGV2LCBtZGlvZGV2LCBidXMtXHUwMDNlZGV2Lm9mX25vZGUpO1xuIH1cbiAjZW5kaWZcbiBcbi1zdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBjNDUpXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGh5X2RldmljZSAqX19tZGlvYnVzX3NjYW4oc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsXG4mIzQzO1x0XHRcdFx0XHQgYm9vbCBjNDUpXG4ge1xuIFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IEVSUl9QVFIoLUVOT0RFVik7XG4gXHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlO1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfT0ZfTURJTylcbiYjNDM7XHRib29sIG9mX25vZGVfcG9wdWxhdGVkID0gZmFsc2U7XG4mIzQzOyNlbmRpZlxuIFx0Y2hhciBub2RlX25hbWVbMTZdO1xuIFx0aW50IGVycjtcbiBcbkBAIC00MjAsNyAmIzQzOzQzMiwxMiBAQCBzdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBjNDUpXG4gXHQvKiBGb3IgRFQsIHNlZSBpZiB0aGUgYXV0by1wcm9iZWQgcGh5IGhhcyBhIGNvcnJlc3BvbmRpbmcgY2hpbGRcbiBcdCAqIGluIHRoZSBidXMgbm9kZSwgYW5kIHNldCB0aGUgb2Zfbm9kZSBwb2ludGVyIGluIHRoaXMgY2FzZS5cbiBcdCAqL1xuLVx0b2ZfbWRpb2J1c19saW5rX21kaW9kZXYoYnVzLCBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbyk7XG4mIzQzO1x0ZXJyID0gb2ZfbWRpb2J1c19saW5rX21kaW9kZXYoYnVzLCBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbyk7XG4mIzQzO1x0aWYgKGVyciA9PSAtRUJVU1kpIHtcbiYjNDM7XHRcdHBoeV9kZXZpY2VfZnJlZShwaHlkZXYpO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XG4mIzQzO1x0fVxuJiM0MztcdG9mX25vZGVfcG9wdWxhdGVkID0gISFwaHlkZXYtXHUwMDNlbWRpby5kZXYub2Zfbm9kZTtcbiAjZW5kaWZcbiBcbiBcdC8qIFNlYXJjaCBmb3IgYSBzd25vZGUgZm9yIHRoZSBwaHkgaW4gdGhlIHN3bm9kZSBoaWVyYXJjaHkgb2YgdGhlIGJ1cy5cbkBAIC00MzcsNiAmIzQzOzQ1NCwxMSBAQCBzdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBjNDUpXG4gXG4gXHRlcnIgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeWRldik7XG4gXHRpZiAoZXJyKSB7XG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19PRl9NRElPKVxuJiM0MztcdFx0aWYgKG9mX25vZGVfcG9wdWxhdGVkKVxuJiM0MztcdFx0XHRvZl9ub2RlX2NsZWFyX2ZsYWcocGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGUsXG4mIzQzO1x0XHRcdFx0XHQgICBPRl9QT1BVTEFURUQpO1xuJiM0MzsjZW5kaWZcbiBcdFx0cGh5X2RldmljZV9mcmVlKHBoeWRldik7XG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuIFx0fVxuQEAgLTQ1OCw3ICYjNDM7NDgwLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RldmljZSAqbWRpb2J1c19zY2FuKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGM0NSlcbiAgKi9cbiBzdHJ1Y3QgcGh5X2RldmljZSAqbWRpb2J1c19zY2FuX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcbiB7XG4tXHRyZXR1cm4gbWRpb2J1c19zY2FuKGJ1cywgYWRkciwgZmFsc2UpO1xuJiM0MztcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKGJ1cywgZmFsc2UpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuJiM0MztcbiYjNDM7XHRwaHlkZXYgPSBfX21kaW9idXNfc2NhbihidXMsIGFkZHIsIGZhbHNlKTtcbiYjNDM7XHRtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kKGJ1cywgZmFsc2UpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGh5ZGV2O1xuIH1cbiBFWFBPUlRfU1lNQk9MKG1kaW9idXNfc2Nhbl9jMjIpO1xuIFxuQEAgLTQ3Niw3ICYjNDM7NTA4LDcgQEAgRVhQT1JUX1NZTUJPTChtZGlvYnVzX3NjYW5fYzIyKTtcbiAgKi9cbiBzdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2Nhbl9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXG4ge1xuLVx0cmV0dXJuIG1kaW9idXNfc2NhbihidXMsIGFkZHIsIHRydWUpO1xuJiM0MztcdHJldHVybiBfX21kaW9idXNfc2NhbihidXMsIGFkZHIsIHRydWUpO1xuIH1cbiBcbiBzdGF0aWMgaW50IG1kaW9idXNfc2Nhbl9idXNfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMpXG5AQCAtNDg3LDcgJiM0Mzs1MTksNyBAQCBzdGF0aWMgaW50IG1kaW9idXNfc2Nhbl9idXNfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMpXG4gXHRcdGlmICgoYnVzLVx1MDAzZXBoeV9tYXNrIFx1MDAyNiBCSVQoaSkpID09IDApIHtcbiBcdFx0XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuIFxuLVx0XHRcdHBoeWRldiA9IG1kaW9idXNfc2Nhbl9jMjIoYnVzLCBpKTtcbiYjNDM7XHRcdFx0cGh5ZGV2ID0gX19tZGlvYnVzX3NjYW4oYnVzLCBpLCBmYWxzZSk7XG4gXHRcdFx0aWYgKElTX0VSUihwaHlkZXYpIFx1MDAyNlx1MDAyNiAoUFRSX0VSUihwaHlkZXYpICE9IC1FTk9ERVYpKVxuIFx0XHRcdFx0cmV0dXJuIFBUUl9FUlIocGh5ZGV2KTtcbiBcdFx0fVxuQEAgLTUwNCw3ICYjNDM7NTM2LDcgQEAgc3RhdGljIGludCBtZGlvYnVzX3NjYW5fYnVzX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxuIFx0XHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG4gXG4gXHRcdFx0LyogRG9uJiMzOTt0IHNjYW4gQzQ1IGlmIHdlIGFscmVhZHkgaGF2ZSBhIEMyMiBkZXZpY2UgKi9cbi1cdFx0XHRpZiAoYnVzLVx1MDAzZW1kaW9fbWFwW2ldKVxuJiM0MztcdFx0XHRpZiAobWRpb2J1c19pc19yZWdpc3RlcmVkX2RldmljZShidXMsIGkpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0cGh5ZGV2ID0gbWRpb2J1c19zY2FuX2M0NShidXMsIGkpO1xuQEAgLTUzNiw2ICYjNDM7NTY4LDQ0IEBAIHN0YXRpYyBib29sIG1kaW9idXNfcHJldmVudF9jNDVfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgbWRpb2J1c19zdG9wX2RldmljZV9jaGFuZ2VzKHN0cnVjdCBtaWlfYnVzICpidXMpXG4mIzQzO3tcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7XHRidXMtXHUwMDNlc3RhdGUgPSBNRElPQlVTX1VOUkVHSVNURVJJTkc7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0d2FpdF9ldmVudChidXMtXHUwMDNlbWRpb19tYXBfd2FpdCwgIVJFQURfT05DRShidXMtXHUwMDNlbWRpb19tYXBfb3BzKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1kaW9idXNfcmVtb3ZlX2RldmljZXMoc3RydWN0IG1paV9idXMgKmJ1cylcbiYjNDM7e1xuJiM0MztcdExJU1RfSEVBRChyZW1vdmVkKTtcbiYjNDM7XHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsICpuZXh0O1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBQSFlfTUFYX0FERFI7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRtZGlvZGV2ID0gYnVzLVx1MDAzZW1kaW9fbWFwW2ldO1xuJiM0MztcdFx0aWYgKCFtZGlvZGV2KVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRtZGlvZGV2LVx1MDAzZWRldmljZV9yZW1vdmUobWRpb2Rldik7XG4mIzQzO1x0XHRtZGlvZGV2LVx1MDAzZWRldmljZV9mcmVlKG1kaW9kZXYpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4mIzQzO1x0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfcmV0aXJlZCwgXHUwMDI2cmVtb3ZlZCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1kaW9kZXYsIG5leHQsIFx1MDAyNnJlbW92ZWQsIHJldGlyZWRfbm9kZSkge1xuJiM0MztcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZtZGlvZGV2LVx1MDAzZXJldGlyZWRfbm9kZSk7XG4mIzQzO1x0XHRtZGlvX2RldmljZV9wdXQobWRpb2Rldik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7XHRidXMtXHUwMDNlc3RhdGUgPSBNRElPQlVTX1VOUkVHSVNURVJFRDtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIF9fbWRpb2J1c19yZWdpc3RlciAtIGJyaW5nIHVwIGFsbCB0aGUgUEhZcyBvbiBhIGdpdmVuIGJ1cyBhbmQgYXR0YWNoIHRoZW0gdG8gYnVzXG4gICogQGJ1czogdGFyZ2V0IG1paV9idXNcbkBAIC01NTIsMTAgJiM0Mzs2MjIsOSBAQCBzdGF0aWMgYm9vbCBtZGlvYnVzX3ByZXZlbnRfYzQ1X3NjYW4oc3RydWN0IG1paV9idXMgKmJ1cylcbiAgKi9cbiBpbnQgX19tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICpidXMsIHN0cnVjdCBtb2R1bGUgKm93bmVyKVxuIHtcbi1cdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldjtcbiBcdHN0cnVjdCBncGlvX2Rlc2MgKmdwaW9kO1xuIFx0Ym9vbCBwcmV2ZW50X2M0NV9zY2FuO1xuLVx0aW50IGksIGVycjtcbiYjNDM7XHRpbnQgZXJyO1xuIFxuIFx0aWYgKCFidXMgfHwgIWJ1cy1cdTAwM2VuYW1lKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC01OTYsNyAmIzQzOzY2NSw5IEBAIGludCBfX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cywgc3RydWN0IG1vZHVsZSAqb3duZXIpXG4gXHQgKlxuIFx0ICogU3RhdGUgd2lsbCBiZSB1cGRhdGVkIGxhdGVyIGluIHRoaXMgZnVuY3Rpb24gaW4gY2FzZSBvZiBzdWNjZXNzXG4gXHQgKi9cbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiBcdGJ1cy1cdTAwM2VzdGF0ZSA9IE1ESU9CVVNfVU5SRUdJU1RFUkVEO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4gXG4gXHRlcnIgPSBkZXZpY2VfcmVnaXN0ZXIoXHUwMDI2YnVzLVx1MDAzZWRldik7XG4gXHRpZiAoZXJyKSB7XG5AQCAtNjEzLDggJiM0Mzs2ODQsNyBAQCBpbnQgX19tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICpidXMsIHN0cnVjdCBtb2R1bGUgKm93bmVyKVxuIFx0XHRlcnIgPSBkZXZfZXJyX3Byb2JlKFx1MDAyNmJ1cy1cdTAwM2VkZXYsIFBUUl9FUlIoZ3Bpb2QpLFxuIFx0XHRcdFx0ICAgIFwmIzM0O21paV9idXMgJXMgY291bGRuJiMzOTt0IGdldCByZXNldCBHUElPXFxuXCYjMzQ7LFxuIFx0XHRcdFx0ICAgIGJ1cy1cdTAwM2VpZCk7XG4tXHRcdGRldmljZV9kZWwoXHUwMDI2YnVzLVx1MDAzZWRldik7XG4tXHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHRnb3RvIGVycm9yX3Jlc2V0X2dwaW9kO1xuIFx0fSBlbHNlXHRpZiAoZ3Bpb2QpIHtcbiBcdFx0YnVzLVx1MDAzZXJlc2V0X2dwaW9kID0gZ3Bpb2Q7XG4gXHRcdGZzbGVlcChidXMtXHUwMDNlcmVzZXRfZGVsYXlfdXMpO1xuQEAgLTYyOSw2ICYjNDM7Njk5LDEwIEBAIGludCBfX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cywgc3RydWN0IG1vZHVsZSAqb3duZXIpXG4gXHRcdFx0Z290byBlcnJvcl9yZXNldF9ncGlvZDtcbiBcdH1cbiBcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7XHRidXMtXHUwMDNlc3RhdGUgPSBNRElPQlVTX1JFR0lTVEVSSU5HO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4mIzQzO1xuIFx0aWYgKGJ1cy1cdTAwM2VyZWFkKSB7XG4gXHRcdGVyciA9IG1kaW9idXNfc2Nhbl9idXNfYzIyKGJ1cyk7XG4gXHRcdGlmIChlcnIpXG5AQCAtNjQzLDIwICYjNDM7NzE3LDE3IEBAIGludCBfX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cywgc3RydWN0IG1vZHVsZSAqb3duZXIpXG4gXHRcdFx0Z290byBlcnJvcjtcbiBcdH1cbiBcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiBcdGJ1cy1cdTAwM2VzdGF0ZSA9IE1ESU9CVVNfUkVHSVNURVJFRDtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuIFx0ZGV2X2RiZyhcdTAwMjZidXMtXHUwMDNlZGV2LCBcJiMzNDtwcm9iZWRcXG5cJiMzNDspO1xuIFx0cmV0dXJuIDA7XG4gXG4gZXJyb3I6XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBQSFlfTUFYX0FERFI7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdG1kaW9kZXYgPSBidXMtXHUwMDNlbWRpb19tYXBbaV07XG4tXHRcdGlmICghbWRpb2Rldilcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0bWRpb2Rldi1cdTAwM2VkZXZpY2VfcmVtb3ZlKG1kaW9kZXYpO1xuLVx0XHRtZGlvZGV2LVx1MDAzZWRldmljZV9mcmVlKG1kaW9kZXYpO1xuLVx0fVxuIGVycm9yX3Jlc2V0X2dwaW9kOlxuJiM0MztcdG1kaW9idXNfc3RvcF9kZXZpY2VfY2hhbmdlcyhidXMpO1xuJiM0MztcdG1kaW9idXNfcmVtb3ZlX2RldmljZXMoYnVzKTtcbiYjNDM7XG4gXHQvKiBQdXQgUEhZcyBpbiBSRVNFVCB0byBzYXZlIHBvd2VyICovXG4gXHRpZiAoYnVzLVx1MDAzZXJlc2V0X2dwaW9kKVxuIFx0XHRncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoYnVzLVx1MDAzZXJlc2V0X2dwaW9kLCAxKTtcbkBAIC02NjgsMjEgJiM0Mzs3MzksMTEgQEAgRVhQT1JUX1NZTUJPTChfX21kaW9idXNfcmVnaXN0ZXIpO1xuIFxuIHZvaWQgbWRpb2J1c191bnJlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICpidXMpXG4ge1xuLVx0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2O1xuLVx0aW50IGk7XG4tXG4gXHRpZiAoV0FSTl9PTl9PTkNFKGJ1cy1cdTAwM2VzdGF0ZSAhPSBNRElPQlVTX1JFR0lTVEVSRUQpKVxuIFx0XHRyZXR1cm47XG4tXHRidXMtXHUwMDNlc3RhdGUgPSBNRElPQlVTX1VOUkVHSVNURVJFRDtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIFBIWV9NQVhfQUREUjsgaSYjNDM7JiM0MzspIHtcbi1cdFx0bWRpb2RldiA9IGJ1cy1cdTAwM2VtZGlvX21hcFtpXTtcbi1cdFx0aWYgKCFtZGlvZGV2KVxuLVx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRtZGlvZGV2LVx1MDAzZWRldmljZV9yZW1vdmUobWRpb2Rldik7XG4tXHRcdG1kaW9kZXYtXHUwMDNlZGV2aWNlX2ZyZWUobWRpb2Rldik7XG4tXHR9XG4mIzQzO1x0bWRpb2J1c19zdG9wX2RldmljZV9jaGFuZ2VzKGJ1cyk7XG4mIzQzO1x0bWRpb2J1c19yZW1vdmVfZGV2aWNlcyhidXMpO1xuIFxuIFx0LyogUHV0IFBIWXMgaW4gUkVTRVQgdG8gc2F2ZSBwb3dlciAqL1xuIFx0aWYgKGJ1cy1cdTAwM2VyZXNldF9ncGlvZClcbkBAIC03MDIsOCAmIzQzOzc2MywxMSBAQCBFWFBPUlRfU1lNQk9MKG1kaW9idXNfdW5yZWdpc3Rlcik7XG4gICovXG4gdm9pZCBtZGlvYnVzX2ZyZWUoc3RydWN0IG1paV9idXMgKmJ1cylcbiB7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4mIzQzO1xuIFx0LyogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBlcnJvciBoYW5kbGluZyBpbiBkcml2ZXJzLiAqL1xuIFx0aWYgKGJ1cy1cdTAwM2VzdGF0ZSA9PSBNRElPQlVTX0FMTE9DQVRFRCkge1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiBcdFx0a2ZyZWUoYnVzKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuQEAgLTcxMSw2ICYjNDM7Nzc1LDcgQEAgdm9pZCBtZGlvYnVzX2ZyZWUoc3RydWN0IG1paV9idXMgKmJ1cylcbiBcdFdBUk4oYnVzLVx1MDAzZXN0YXRlICE9IE1ESU9CVVNfVU5SRUdJU1RFUkVELFxuIFx0ICAgICBcJiMzNDslczogbm90IGluIFVOUkVHSVNURVJFRCBzdGF0ZVxcblwmIzM0OywgYnVzLVx1MDAzZWlkKTtcbiBcdGJ1cy1cdTAwM2VzdGF0ZSA9IE1ESU9CVVNfUkVMRUFTRUQ7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiBcbiBcdHB1dF9kZXZpY2UoXHUwMDI2YnVzLVx1MDAzZWRldik7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmNcbmluZGV4IDA2MTUxZjIwNzEzNDYuLjNiMTllODMxNWY2MTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmNcbkBAIC0xNSw2ICYjNDM7MTUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21paS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmVzZXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuQEAgLTMzLDEyICYjNDM7MzQsMTYgQEBcbiBzdGF0aWMgaW50IG1kaW9fZGV2aWNlX3JlZ2lzdGVyX3Jlc2V0KHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbiB7XG4gXHRzdHJ1Y3QgcmVzZXRfY29udHJvbCAqcmVzZXQ7XG4mIzQzO1x0aW50IGVycjtcbiBcbiBcdC8qIERlYXNzZXJ0IHRoZSBvcHRpb25hbCByZXNldCBzaWduYWwgKi9cbiBcdG1kaW9kZXYtXHUwMDNlcmVzZXRfZ3BpbyA9IGdwaW9kX2dldF9vcHRpb25hbChcdTAwMjZtZGlvZGV2LVx1MDAzZWRldixcbiBcdFx0XHRcdFx0XHQgXCYjMzQ7cmVzZXRcJiMzNDssIEdQSU9EX09VVF9MT1cpO1xuLVx0aWYgKElTX0VSUihtZGlvZGV2LVx1MDAzZXJlc2V0X2dwaW8pKVxuLVx0XHRyZXR1cm4gUFRSX0VSUihtZGlvZGV2LVx1MDAzZXJlc2V0X2dwaW8pO1xuJiM0MztcdGlmIChJU19FUlIobWRpb2Rldi1cdTAwM2VyZXNldF9ncGlvKSkge1xuJiM0MztcdFx0ZXJyID0gUFRSX0VSUihtZGlvZGV2LVx1MDAzZXJlc2V0X2dwaW8pO1xuJiM0MztcdFx0bWRpb2Rldi1cdTAwM2VyZXNldF9ncGlvID0gTlVMTDtcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKG1kaW9kZXYtXHUwMDNlcmVzZXRfZ3BpbylcbiBcdFx0Z3Bpb2Rfc2V0X2NvbnN1bWVyX25hbWUobWRpb2Rldi1cdTAwM2VyZXNldF9ncGlvLCBcJiMzNDtQSFkgcmVzZXRcJiMzNDspO1xuQEAgLTExNiw2ICYjNDM7MTIxLDEzIEBAIHN0YXRpYyB2b2lkIG1kaW9fZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0a2ZyZWUodG9fbWRpb19kZXZpY2UoZGV2KSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IF9fbWRpb19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbWRpb19kZXZpY2VfcmVtb3ZlX2R5bmFtaWMoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fbWRpb19kZXZpY2VfcmVtb3ZlKG1kaW9kZXYsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb19kZXZpY2VfY3JlYXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyKVxuIHtcbiBcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldjtcbkBAIC0xMzAsOSAmIzQzOzE0MiwxMSBAQCBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9fZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcbiBcdG1kaW9kZXYtXHUwMDNlZGV2LmJ1cyA9IFx1MDAyNm1kaW9fYnVzX3R5cGU7XG4gXHRtZGlvZGV2LVx1MDAzZWRldmljZV9mcmVlID0gbWRpb19kZXZpY2VfZnJlZTtcbiBcdG1kaW9kZXYtXHUwMDNlZGV2aWNlX3JlbW92ZSA9IG1kaW9fZGV2aWNlX3JlbW92ZTtcbiYjNDM7XHRtZGlvZGV2LVx1MDAzZWRldmljZV9yZW1vdmVfZHluYW1pYyA9IG1kaW9fZGV2aWNlX3JlbW92ZV9keW5hbWljO1xuIFx0bWRpb2Rldi1cdTAwM2VidXMgPSBidXM7XG4gXHRtZGlvZGV2LVx1MDAzZWFkZHIgPSBhZGRyO1xuIFx0bWRpb2Rldi1cdTAwM2VyZXNldF9zdGF0ZSA9IC0xO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNm1kaW9kZXYtXHUwMDNlcmV0aXJlZF9ub2RlKTtcbiBcbiBcdGRldl9zZXRfbmFtZShcdTAwMjZtZGlvZGV2LVx1MDAzZWRldiwgUEhZX0lEX0ZNVCwgYnVzLVx1MDAzZWlkLCBhZGRyKTtcbiBcbkBAIC0xNTksMTkgJiM0MzsxNzMsMjcgQEAgaW50IG1kaW9fZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdGVyciA9IGRldmljZV9hZGQoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuLVx0aWYgKGVycikge1xuJiM0MztcdGlmIChlcnIpXG4gXHRcdHByX2VycihcJiMzNDtNRElPICVkIGZhaWxlZCB0byBhZGRcXG5cJiMzNDssIG1kaW9kZXYtXHUwMDNlYWRkcik7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4gXG4tIG91dDpcbi1cdG1kaW9idXNfdW5yZWdpc3Rlcl9kZXZpY2UobWRpb2Rldik7XG4tXHRyZXR1cm4gZXJyO1xuJiM0MztcdHJldHVybiBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lKG1kaW9kZXYsIGVycik7XG4gfVxuIEVYUE9SVF9TWU1CT0wobWRpb19kZXZpY2VfcmVnaXN0ZXIpO1xuIFxuJiM0MztzdGF0aWMgaW50IF9fbWRpb19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbWRpb2J1c19iZWdpbl9yZW1vdmUobWRpb2RldiwgZHluYW1pYyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGRldmljZV9kZWwoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuJiM0MztcdG1kaW9idXNfZmluaXNoX3JlbW92ZShtZGlvZGV2LCBkeW5hbWljKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogbWRpb19kZXZpY2VfcmVtb3ZlIC0gUmVtb3ZlIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIG1kaW8gZGV2aWNlIGZyb20gdGhlXG4gICpcdFx0XHRNRElPIGJ1c1xuQEAgLTE4Myw0MiAmIzQzOzIwNSwyMTEgQEAgRVhQT1JUX1NZTUJPTChtZGlvX2RldmljZV9yZWdpc3Rlcik7XG4gICovXG4gdm9pZCBtZGlvX2RldmljZV9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuIHtcbi1cdGRldmljZV9kZWwoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuLVx0bWRpb2J1c191bnJlZ2lzdGVyX2RldmljZShtZGlvZGV2KTtcbiYjNDM7XHRfX21kaW9fZGV2aWNlX3JlbW92ZShtZGlvZGV2LCBmYWxzZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0wobWRpb19kZXZpY2VfcmVtb3ZlKTtcbiBcbiBpbnQgbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpb2Rldi1cdTAwM2VidXM7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKG1kaW9kZXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbWFwW21kaW9kZXYtXHUwMDNlYWRkcl0pXG4tXHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4mIzQzO1x0aWYgKGJ1cy1cdTAwM2VzdGF0ZSAhPSBNRElPQlVTX1JFR0lTVEVSSU5HIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBidXMtXHUwMDNlc3RhdGUgIT0gTURJT0JVU19SRUdJU1RFUkVEKSB7XG4mIzQzO1x0XHRlcnIgPSAtRU5PREVWO1xuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoYnVzLVx1MDAzZW1kaW9fbWFwX3JlbW92YWxzKSB7XG4mIzQzO1x0XHRlcnIgPSAtRUJVU1k7XG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoYnVzLVx1MDAzZW1kaW9fbWFwW21kaW9kZXYtXHUwMDNlYWRkcl0gfHxcbiYjNDM7XHQgICAgYnVzLVx1MDAzZW1kaW9fbWFwX3BlbmRpbmcgXHUwMDI2IEJJVChtZGlvZGV2LVx1MDAzZWFkZHIpKSB7XG4mIzQzO1x0XHRlcnIgPSAtRUJVU1k7XG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRidXMtXHUwMDNlbWRpb19tYXBfcGVuZGluZyB8PSBCSVQobWRpb2Rldi1cdTAwM2VhZGRyKTtcbiYjNDM7XHRidXMtXHUwMDNlbWRpb19tYXBfb3BzJiM0MzsmIzQzOztcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuIFxuIFx0aWYgKG1kaW9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IE1ESU9fREVWSUNFX0ZMQUdfUEhZKSB7XG4gXHRcdGVyciA9IG1kaW9fZGV2aWNlX3JlZ2lzdGVyX3Jlc2V0KG1kaW9kZXYpO1xuLVx0XHRpZiAoZXJyKVxuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lKG1kaW9kZXYsIGVycik7XG4gXHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0LyogQXNzZXJ0IHRoZSByZXNldCBzaWduYWwgKi9cbiBcdFx0bWRpb19kZXZpY2VfcmVzZXQobWRpb2RldiwgMSk7XG4gXHR9XG4gXG4tXHRtZGlvZGV2LVx1MDAzZWJ1cy1cdTAwM2VtZGlvX21hcFttZGlvZGV2LVx1MDAzZWFkZHJdID0gbWRpb2RldjtcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7XHQvKiBUZWFyZG93biB3YWl0cyBmb3IgdGhpcyByZWdpc3RyYXRpb24gYmVmb3JlIGNvbnN1bWluZyB0aGUgbWFwLiAqL1xuJiM0MztcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcFttZGlvZGV2LVx1MDAzZWFkZHJdLCBtZGlvZGV2KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuIFxuIFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4taW50IG1kaW9idXNfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuJiM0MzsvKipcbiYjNDM7ICogbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luIC0gc3RhcnQgY2hhbmdpbmcgZGV2aWNlcyBvbiBhIHJlZ2lzdGVyZWQgYnVzXG4mIzQzOyAqIEBidXM6IE1ESU8gYnVzIHRoYXQgd2lsbCBiZSBzY2FubmVkIG9yIGNoYW5nZWRcbiYjNDM7ICogQHJlbW92aW5nOiB3aGV0aGVyIFBIWSBhdHRhY2htZW50IG11c3QgYmUgYmxvY2tlZCBkdXJpbmcgdGhlIGNoYW5nZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHplcm8gb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgd2hlbiB0aGUgYnVzIGlzIHVuYXZhaWxhYmxlXG4mIzQzOyAqL1xuJiM0MztpbnQgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKHN0cnVjdCBtaWlfYnVzICpidXMsIGJvb2wgcmVtb3ZpbmcpXG4ge1xuLVx0aWYgKG1kaW9kZXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbWFwW21kaW9kZXYtXHUwMDNlYWRkcl0gIT0gbWRpb2Rldilcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuJiM0MztcdGlmIChidXMtXHUwMDNlc3RhdGUgIT0gTURJT0JVU19SRUdJU1RFUkVEKSB7XG4mIzQzO1x0XHRlcnIgPSAtRU5PREVWO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRidXMtXHUwMDNlbWRpb19tYXBfb3BzJiM0MzsmIzQzOztcbiYjNDM7XHRcdGlmIChyZW1vdmluZylcbiYjNDM7XHRcdFx0YnVzLVx1MDAzZW1kaW9fbWFwX3JlbW92YWxzJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4pO1xuIFxuLVx0bWRpb19kZXZpY2VfdW5yZWdpc3Rlcl9yZXNldChtZGlvZGV2KTtcbiYjNDM7c3RhdGljIHZvaWQgbWRpb2J1c19vcGVyYXRpb25fZG9uZV9sb2NrZWQoc3RydWN0IG1paV9idXMgKmJ1cylcbiYjNDM7e1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuIFxuLVx0bWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19tYXBbbWRpb2Rldi1cdTAwM2VhZGRyXSA9IE5VTEw7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghYnVzLVx1MDAzZW1kaW9fbWFwX29wcykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0YnVzLVx1MDAzZW1kaW9fbWFwX29wcy0tO1xuJiM0MztcdGlmICghYnVzLVx1MDAzZW1kaW9fbWFwX29wcylcbiYjNDM7XHRcdHdha2VfdXBfYWxsKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF93YWl0KTtcbiYjNDM7fVxuIFxuLVx0cmV0dXJuIDA7XG4mIzQzOy8qKlxuJiM0MzsgKiBtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kIC0gZmluaXNoIGNoYW5naW5nIGRldmljZXMgb24gYW4gTURJTyBidXNcbiYjNDM7ICogQGJ1czogTURJTyBidXMgcHJldmlvdXNseSBwYXNzZWQgdG8gbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKClcbiYjNDM7ICogQHJlbW92aW5nOiB2YWx1ZSBwYXNzZWQgdG8gbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKClcbiYjNDM7ICovXG4mIzQzO3ZvaWQgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2VuZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBib29sIHJlbW92aW5nKVxuJiM0Mzt7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4mIzQzO1x0aWYgKHJlbW92aW5nKSB7XG4mIzQzO1x0XHRpZiAoIVdBUk5fT05fT05DRSghYnVzLVx1MDAzZW1kaW9fbWFwX3JlbW92YWxzKSlcbiYjNDM7XHRcdFx0YnVzLVx1MDAzZW1kaW9fbWFwX3JlbW92YWxzLS07XG4mIzQzO1x0fVxuJiM0MztcdG1kaW9idXNfb3BlcmF0aW9uX2RvbmVfbG9ja2VkKGJ1cyk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1kaW9idXNfb3BlcmF0aW9uX2RvbmUoc3RydWN0IG1paV9idXMgKmJ1cylcbiYjNDM7e1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuJiM0MztcdG1kaW9idXNfb3BlcmF0aW9uX2RvbmVfbG9ja2VkKGJ1cyk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWRpb2J1c191bnB1Ymxpc2hfZGV2aWNlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBtZGlvZGV2LVx1MDAzZWJ1cztcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChidXMtXHUwMDNlbWRpb19tYXBbbWRpb2Rldi1cdTAwM2VhZGRyXSA9PSBtZGlvZGV2KVxuJiM0MztcdFx0V1JJVEVfT05DRShidXMtXHUwMDNlbWRpb19tYXBbbWRpb2Rldi1cdTAwM2VhZGRyXSwgTlVMTCk7XG4mIzQzO1x0aWYgKG1kaW9kZXYtXHUwMDNlZGV2Lm9mX25vZGUpXG4mIzQzO1x0XHRvZl9ub2RlX2NsZWFyX2ZsYWcobWRpb2Rldi1cdTAwM2VkZXYub2Zfbm9kZSwgT0ZfUE9QVUxBVEVEKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBpbnQgZXJyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1paV9idXMgKmJ1cyA9IG1kaW9kZXYtXHUwMDNlYnVzO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCEoYnVzLVx1MDAzZW1kaW9fbWFwX3BlbmRpbmcgXHUwMDI2IEJJVChtZGlvZGV2LVx1MDAzZWFkZHIpKSkpXG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRtZGlvYnVzX3VucHVibGlzaF9kZXZpY2UobWRpb2Rldik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0V0FSTl9PTl9PTkNFKGJ1cy1cdTAwM2VtZGlvX21hcFttZGlvZGV2LVx1MDAzZWFkZHJdICE9IG1kaW9kZXYpO1xuJiM0MztcbiYjNDM7XHRidXMtXHUwMDNlbWRpb19tYXBfcGVuZGluZyBcdTAwMjY9IH5CSVQobWRpb2Rldi1cdTAwM2VhZGRyKTtcbiYjNDM7XG4mIzQzO291dF91bmxvY2s6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRpZiAobWRpb2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgTURJT19ERVZJQ0VfRkxBR19QSFkpIHtcbiYjNDM7XHRcdFx0bWRpb19kZXZpY2VfcmVzZXQobWRpb2RldiwgMSk7XG4mIzQzO1x0XHRcdG1kaW9fZGV2aWNlX3VucmVnaXN0ZXJfcmVzZXQobWRpb2Rldik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdG1kaW9idXNfb3BlcmF0aW9uX2RvbmUoYnVzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG1kaW9idXNfYmVnaW5fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1paV9idXMgKmJ1cyA9IG1kaW9kZXYtXHUwMDNlYnVzO1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7XHRpZiAoZHluYW1pYyBcdTAwMjZcdTAwMjYgKGJ1cy1cdTAwM2VzdGF0ZSA9PSBNRElPQlVTX1VOUkVHSVNURVJFRCB8fFxuJiM0MztcdFx0XHRidXMtXHUwMDNlc3RhdGUgPT0gTURJT0JVU19SRUxFQVNFRCkpIHtcbiYjNDM7XHRcdGVyciA9IC1FTk9ERVY7XG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChidXMtXHUwMDNlbWRpb19tYXBfcGVuZGluZyBcdTAwMjYgQklUKG1kaW9kZXYtXHUwMDNlYWRkcikpIHtcbiYjNDM7XHRcdGVyciA9IC1FQlVTWTtcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChidXMtXHUwMDNlbWRpb19tYXBbbWRpb2Rldi1cdTAwM2VhZGRyXSAhPSBtZGlvZGV2KSB7XG4mIzQzO1x0XHRlcnIgPSAtRU5PREVWO1xuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGR5bmFtaWMgXHUwMDI2XHUwMDI2IG1kaW9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IE1ESU9fREVWSUNFX0ZMQUdfUEhZIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICB0b19waHlfZGV2aWNlKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2KS1cdTAwM2VhdHRhY2hlZCkge1xuJiM0MztcdFx0ZXJyID0gLUVCVVNZO1xuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWRpb2J1c191bnB1Ymxpc2hfZGV2aWNlKG1kaW9kZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoZHluYW1pYykge1xuJiM0MztcdFx0bWRpb19kZXZpY2VfZ2V0KG1kaW9kZXYpO1xuJiM0MztcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZtZGlvZGV2LVx1MDAzZXJldGlyZWRfbm9kZSwgXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX3JldGlyZWQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO291dF91bmxvY2s6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIG1kaW9idXNfZmluaXNoX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgZHluYW1pYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGU7XG4mIzQzO1xuJiM0MztcdGlmIChtZGlvZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBNRElPX0RFVklDRV9GTEFHX1BIWSlcbiYjNDM7XHRcdG1kaW9fZGV2aWNlX3VucmVnaXN0ZXJfcmVzZXQobWRpb2Rldik7XG4mIzQzO1xuJiM0MztcdC8qIERvIG5vdCBrZWVwIGFuIG92ZXJsYXkgbm9kZSBhbGl2ZSB3aXRoIHRoZSByZXRpcmVkIGRldmljZS4gKi9cbiYjNDM7XHRpZiAoZHluYW1pYykge1xuJiM0MztcdFx0Zndub2RlID0gZGV2X2Z3bm9kZShcdTAwMjZtZGlvZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0XHRkZXZpY2Vfc2V0X25vZGUoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYsIE5VTEwpO1xuJiM0MztcdFx0Zndub2RlX2hhbmRsZV9wdXQoZndub2RlKTtcbiYjNDM7XHR9XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5pbmRleCA5NGIyZTg1ZTAwYTM3Li4zYjE4Mjk1N2MzZGU2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuQEAgLTIyNyw2ICYjNDM7MjI3LDggQEAgc3RhdGljIHZvaWQgcGh5X2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdGtmcmVlKHRvX3BoeV9kZXZpY2UoZGV2KSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IF9fcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBkeW5hbWljKTtcbiYjNDM7XG4gc3RhdGljIHZvaWQgcGh5X21kaW9fZGV2aWNlX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4ge1xuIFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbkBAIC0yMzUsNiAmIzQzOzIzNywxNCBAQCBzdGF0aWMgdm9pZCBwaHlfbWRpb19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbiBcdHBoeV9kZXZpY2VfcmVtb3ZlKHBoeWRldik7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHBoeV9tZGlvX2RldmljZV9yZW1vdmVfZHluYW1pYyhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuJiM0MztcbiYjNDM7XHRwaHlkZXYgPSBjb250YWluZXJfb2YobWRpb2Rldiwgc3RydWN0IHBoeV9kZXZpY2UsIG1kaW8pO1xuJiM0MztcdHJldHVybiBfX3BoeV9kZXZpY2VfcmVtb3ZlKHBoeWRldiwgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGdlbnBoeV9kcml2ZXI7XG4gXG4gc3RhdGljIExJU1RfSEVBRChwaHlfZml4dXBfbGlzdCk7XG5AQCAtNzY4LDcgJiM0Mzs3NzgsOSBAQCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5X2RldmljZV9jcmVhdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIHUzMiBwaHlfaWQsXG4gXHRtZGlvZGV2LVx1MDAzZWZsYWdzID0gTURJT19ERVZJQ0VfRkxBR19QSFk7XG4gXHRtZGlvZGV2LVx1MDAzZWRldmljZV9mcmVlID0gcGh5X21kaW9fZGV2aWNlX2ZyZWU7XG4gXHRtZGlvZGV2LVx1MDAzZWRldmljZV9yZW1vdmUgPSBwaHlfbWRpb19kZXZpY2VfcmVtb3ZlO1xuJiM0MztcdG1kaW9kZXYtXHUwMDNlZGV2aWNlX3JlbW92ZV9keW5hbWljID0gcGh5X21kaW9fZGV2aWNlX3JlbW92ZV9keW5hbWljO1xuIFx0bWRpb2Rldi1cdTAwM2VyZXNldF9zdGF0ZSA9IC0xO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNm1kaW9kZXYtXHUwMDNlcmV0aXJlZF9ub2RlKTtcbiBcbiBcdGRldi1cdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XG4gXHRkZXYtXHUwMDNlZHVwbGV4ID0gRFVQTEVYX1VOS05PV047XG5AQCAtMTEyMSwyNSAmIzQzOzExMzMsNDAgQEAgaW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdGVyciA9IHBoeV9zY2FuX2ZpeHVwcyhwaHlkZXYpO1xuIFx0aWYgKGVycikge1xuIFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7ZmFpbGVkIHRvIGluaXRpYWxpemVcXG5cJiMzNDspO1xuLVx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdHJldHVybiBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLCBlcnIpO1xuIFx0fVxuIFxuIFx0ZXJyID0gZGV2aWNlX2FkZChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYpO1xuLVx0aWYgKGVycikge1xuJiM0MztcdGlmIChlcnIpXG4gXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtmYWlsZWQgdG8gYWRkXFxuXCYjMzQ7KTtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gbWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbywgZXJyKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX3BoeV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZHluYW1pYylcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IG1kaW9idXNfYmVnaW5fcmVtb3ZlKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLCBkeW5hbWljKTtcbiYjNDM7XHRpZiAoZHluYW1pYyBcdTAwMjZcdTAwMjYgZXJyID09IC1FQlVTWSlcbiYjNDM7XHRcdGRldl93YXJuKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldixcbiYjNDM7XHRcdFx0IFwmIzM0O2Nhbm5vdCByZW1vdmUgYSBQSFkgd2hpbGUgaXQgaXMgYXR0YWNoZWQgb3IgYmVpbmcgcmVnaXN0ZXJlZFxcblwmIzM0Oyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdHVucmVnaXN0ZXJfbWlpX3RpbWVzdGFtcGVyKHBoeWRldi1cdTAwM2VtaWlfdHMpO1xuJiM0MztcdHBzZV9jb250cm9sX3B1dChwaHlkZXYtXHUwMDNlcHNlYyk7XG4mIzQzO1xuJiM0MztcdGRldmljZV9kZWwoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbiBcbi0gb3V0OlxuIFx0LyogQXNzZXJ0IHRoZSByZXNldCBzaWduYWwgKi9cbiBcdHBoeV9kZXZpY2VfcmVzZXQocGh5ZGV2LCAxKTtcbiBcbi1cdG1kaW9idXNfdW5yZWdpc3Rlcl9kZXZpY2UoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8pO1xuLVx0cmV0dXJuIGVycjtcbiYjNDM7XHRtZGlvYnVzX2ZpbmlzaF9yZW1vdmUoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8sIGR5bmFtaWMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4tRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTtcbiBcbiAvKipcbiAgKiBwaHlfZGV2aWNlX3JlbW92ZSAtIFJlbW92ZSBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBwaHkgZGV2aWNlIGZyb20gdGhlIE1ESU8gYnVzXG5AQCAtMTE1MSwxNSAmIzQzOzExNzgsNyBAQCBFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpO1xuICAqL1xuIHZvaWQgcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4tXHR1bnJlZ2lzdGVyX21paV90aW1lc3RhbXBlcihwaHlkZXYtXHUwMDNlbWlpX3RzKTtcbi1cdHBzZV9jb250cm9sX3B1dChwaHlkZXYtXHUwMDNlcHNlYyk7XG4tXG4tXHRkZXZpY2VfZGVsKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldik7XG4tXG4tXHQvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xuLVx0cGh5X2RldmljZV9yZXNldChwaHlkZXYsIDEpO1xuLVxuLVx0bWRpb2J1c191bnJlZ2lzdGVyX2RldmljZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbyk7XG4mIzQzO1x0X19waHlfZGV2aWNlX3JlbW92ZShwaHlkZXYsIGZhbHNlKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlbW92ZSk7XG4gXG5AQCAtMTczNCw2ICYjNDM7MTc1MywzNiBAQCBzdGF0aWMgYm9vbCBwaHlfZHJ2X3N1cHBvcnRzX2lycShjb25zdCBzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2KVxuIFx0cmV0dXJuIHBoeWRydi1cdTAwM2Vjb25maWdfaW50ciBcdTAwMjZcdTAwMjYgcGh5ZHJ2LVx1MDAzZWhhbmRsZV9pbnRlcnJ1cHQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHBoeV9jbGFpbShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW87XG4mIzQzO1x0c3RydWN0IG1paV9idXMgKmJ1cyA9IG1kaW9kZXYtXHUwMDNlYnVzO1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7XHRpZiAoYnVzLVx1MDAzZXN0YXRlICE9IE1ESU9CVVNfUkVHSVNURVJFRCB8fFxuJiM0MztcdCAgICBidXMtXHUwMDNlbWRpb19tYXBfcmVtb3ZhbHMgfHxcbiYjNDM7XHQgICAgYnVzLVx1MDAzZW1kaW9fbWFwW21kaW9kZXYtXHUwMDNlYWRkcl0gIT0gbWRpb2RldiB8fFxuJiM0MztcdCAgICAoYnVzLVx1MDAzZW1kaW9fbWFwX3BlbmRpbmcgXHUwMDI2IEJJVChtZGlvZGV2LVx1MDAzZWFkZHIpKSlcbiYjNDM7XHRcdGVyciA9IC1FTk9ERVY7XG4mIzQzO1x0ZWxzZSBpZiAocGh5ZGV2LVx1MDAzZWF0dGFjaGVkKVxuJiM0MztcdFx0ZXJyID0gLUVCVVNZO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VhdHRhY2hlZCA9IHRydWU7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcGh5X3JlbGVhc2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuJiM0MztcdHBoeWRldi1cdTAwM2VhdHRhY2hlZCA9IGZhbHNlO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogcGh5X2F0dGFjaF9kaXJlY3QgLSBhdHRhY2ggYSBuZXR3b3JrIGRldmljZSB0byBhIGdpdmVuIFBIWSBkZXZpY2UgcG9pbnRlclxuICAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGF0dGFjaFxuQEAgLTE3NTUsNiAmIzQzOzE4MDQsNyBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiBcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuIFx0c3RydWN0IG1vZHVsZSAqbmRldl9vd25lciA9IE5VTEw7XG4mIzQzO1x0Ym9vbCBjbGFpbWVkID0gZmFsc2U7XG4gXHRpbnQgZXJyO1xuIFxuIFx0LyogRm9yIEV0aGVybmV0IGRldmljZSBkcml2ZXJzIHRoYXQgcmVnaXN0ZXIgdGhlaXIgb3duIE1ESU8gYnVzLCB3ZVxuQEAgLTE3NzAsNiAmIzQzOzE4MjAsMTMgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXHR9XG4gXG4gXHRnZXRfZGV2aWNlKGQpO1xuJiM0MztcdGVyciA9IHBoeV9jbGFpbShwaHlkZXYpO1xuJiM0MztcdGlmIChlcnIgPT0gLUVCVVNZKVxuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O1BIWSBhbHJlYWR5IGF0dGFjaGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIWVycilcbiYjNDM7XHRcdGNsYWltZWQgPSB0cnVlO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycm9yX3B1dF9kZXZpY2U7XG4gXG4gXHQvKiBBc3N1bWUgdGhhdCBpZiB0aGVyZSBpcyBubyBkcml2ZXIsIHRoYXQgaXQgZG9lc24mIzM5O3RcbiBcdCAqIGV4aXN0LCBhbmQgd2Ugc2hvdWxkIHVzZSB0aGUgZ2VucGh5IGRyaXZlci5cbkBAIC0xNzk4LDEyICYjNDM7MTg1NSw2IEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0XHRcdGdvdG8gZXJyb3JfbW9kdWxlX3B1dDtcbiBcdH1cbiBcbi1cdGlmIChwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2KSB7XG4tXHRcdGRldl9lcnIoXHUwMDI2ZGV2LVx1MDAzZWRldiwgXCYjMzQ7UEhZIGFscmVhZHkgYXR0YWNoZWRcXG5cJiMzNDspO1xuLVx0XHRlcnIgPSAtRUJVU1k7XG4tXHRcdGdvdG8gZXJyb3I7XG4tXHR9XG4tXG4gXHRwaHlkZXYtXHUwMDNlcGh5X2xpbmtfY2hhbmdlID0gcGh5X2xpbmtfY2hhbmdlO1xuIFx0aWYgKGRldikge1xuIFx0XHRwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2ID0gZGV2O1xuQEAgLTE4OTksNiAmIzQzOzE5NTAsOCBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiBcdHBoeWRldi1cdTAwM2Vpc19nZW5waHlfZHJpdmVuID0gMDtcbiBcdGQtXHUwMDNlZHJpdmVyID0gTlVMTDtcbiBlcnJvcl9wdXRfZGV2aWNlOlxuJiM0MztcdGlmIChjbGFpbWVkKVxuJiM0MztcdFx0cGh5X3JlbGVhc2UocGh5ZGV2KTtcbiBcdHB1dF9kZXZpY2UoZCk7XG4gXHRpZiAobmRldl9vd25lciAhPSBidXMtXHUwMDNlb3duZXIpXG4gXHRcdG1vZHVsZV9wdXQoYnVzLVx1MDAzZW93bmVyKTtcbkBAIC0xOTc3LDYgJiM0MzsyMDMwLDcgQEAgdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHQgKiBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBieSByZWFkaW5nIHRoZSB1bmRlcmx5aW5nIGJ1cyBmaXJzdC5cbiBcdCAqL1xuIFx0YnVzID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzO1xuJiM0MztcdHBoeV9yZWxlYXNlKHBoeWRldik7XG4gXG4gXHRwdXRfZGV2aWNlKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldik7XG4gXHRpZiAoZGV2KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaWItaW50ZXJuYWwuaCBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaWItaW50ZXJuYWwuaFxuaW5kZXggNjY0ZWQ3ZmFhNTE4NC4uN2U5MTYxZmNkZDkwMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaWItaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpYi1pbnRlcm5hbC5oXG5AQCAtMjUsNyAmIzQzOzI1LDkgQEAgaW50IHBoeV9zcGVlZF9kb3duX2NvcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gdm9pZCBwaHlfY2hlY2tfZG93bnNoaWZ0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIFxuIGludCBtZGlvYnVzX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpO1xuLWludCBtZGlvYnVzX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldik7XG4mIzQzO2ludCBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgaW50IGVycik7XG4mIzQzO2ludCBtZGlvYnVzX2JlZ2luX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgZHluYW1pYyk7XG4mIzQzO3ZvaWQgbWRpb2J1c19maW5pc2hfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKTtcbiBcbiBpbnQgZ2VucGh5X2M0NV9yZWFkX2VlZV9hZHYoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdW5zaWduZWQgbG9uZyAqYWR2KTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvbGludXgvbWRpby5oXG5pbmRleCBhN2Q5ZTNhZTM2MmE1Li5lMTk5NjNhZjhlMTM5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZGlvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWRpby5oXG5AQCAtOCw2ICYjNDM7OCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuIFxuIHN0cnVjdCBncGlvX2Rlc2M7XG4gc3RydWN0IG1paV9idXM7XG5AQCAtMzIsNiAmIzQzOzMzLDkgQEAgc3RydWN0IG1kaW9fZGV2aWNlIHtcbiBcdGludCAoKmJ1c19tYXRjaCkoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KTtcbiBcdHZvaWQgKCpkZXZpY2VfZnJlZSkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KTtcbiBcdHZvaWQgKCpkZXZpY2VfcmVtb3ZlKShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpO1xuJiM0MztcdGludCAoKmRldmljZV9yZW1vdmVfZHluYW1pYykoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KTtcbiYjNDM7XHQvKiBFbnRyeSBpbiBtaWlfYnVzOjptZGlvX21hcF9yZXRpcmVkLiAqL1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgcmV0aXJlZF9ub2RlO1xuIFxuIFx0LyogQnVzIGFkZHJlc3Mgb2YgdGhlIE1ESU8gZGV2aWNlICgwLTMxKSAqL1xuIFx0aW50IGFkZHI7XG5AQCAtNjk0LDYgJiM0Mzs2OTgsOCBAQCBzdGF0aWMgaW5saW5lIGludCBtZGlvZGV2X2M0NV93cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiBkZXZhZCxcbiBcbiBib29sIG1kaW9idXNfaXNfcmVnaXN0ZXJlZF9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpO1xuIHN0cnVjdCBwaHlfZGV2aWNlICptZGlvYnVzX2dldF9waHkoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpO1xuJiM0MztpbnQgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKHN0cnVjdCBtaWlfYnVzICpidXMsIGJvb2wgcmVtb3ZpbmcpO1xuJiM0Mzt2b2lkIG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmQoc3RydWN0IG1paV9idXMgKmJ1cywgYm9vbCByZW1vdmluZyk7XG4gXG4gLyoqXG4gICogbWRpb19tb2R1bGVfZHJpdmVyKCkgLSBIZWxwZXIgbWFjcm8gZm9yIHJlZ2lzdGVyaW5nIG1kaW8gZHJpdmVyc1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCA1ZjhkNjU4NjhlMGZmLi4wNTAwZjgwZTBmYWNmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaFxuQEAgLTIyLDYgJiM0MzsyMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWlpX3RpbWVzdGFtcGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UtaWQvbWRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdTY0X3N0YXRzX3N5bmMuaFx1MDAzZVxuQEAgLTM5MSw3ICYjNDM7MzkyLDkgQEAgc3RydWN0IG1paV9idXMge1xuIFx0LyoqIEBzdGF0ZTogU3RhdGUgb2YgYnVzIHN0cnVjdHVyZSAqL1xuIFx0ZW51bSB7XG4gXHRcdE1ESU9CVVNfQUxMT0NBVEVEID0gMSxcbiYjNDM7XHRcdE1ESU9CVVNfUkVHSVNURVJJTkcsXG4gXHRcdE1ESU9CVVNfUkVHSVNURVJFRCxcbiYjNDM7XHRcdE1ESU9CVVNfVU5SRUdJU1RFUklORyxcbiBcdFx0TURJT0JVU19VTlJFR0lTVEVSRUQsXG4gXHRcdE1ESU9CVVNfUkVMRUFTRUQsXG4gXHR9IHN0YXRlO1xuQEAgLTQwMSw2ICYjNDM7NDA0LDE4IEBAIHN0cnVjdCBtaWlfYnVzIHtcbiBcbiBcdC8qKiBAbWRpb19tYXA6IGxpc3Qgb2YgYWxsIE1ESU8gZGV2aWNlcyBvbiBidXMgKi9cbiBcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb19tYXBbUEhZX01BWF9BRERSXTtcbiYjNDM7XHQvKiogQG1kaW9fbWFwX3BlbmRpbmc6IGFkZHJlc3NlcyB3aXRoIHJlZ2lzdHJhdGlvbiBpbiBwcm9ncmVzcyAqL1xuJiM0MztcdHUzMiBtZGlvX21hcF9wZW5kaW5nO1xuJiM0MztcdC8qKiBAbWRpb19tYXBfbG9jazogcHJvdGVjdHMgdGhlIE1ESU8gZGV2aWNlIG1hcCBhbmQgYnVzIHN0YXRlICovXG4mIzQzO1x0c3RydWN0IG11dGV4IG1kaW9fbWFwX2xvY2s7XG4mIzQzO1x0LyoqIEBtZGlvX21hcF93YWl0OiB3YWl0IGZvciBhY3RpdmUgbWFwIG9wZXJhdGlvbnMgZHVyaW5nIHRlYXJkb3duICovXG4mIzQzO1x0d2FpdF9xdWV1ZV9oZWFkX3QgbWRpb19tYXBfd2FpdDtcbiYjNDM7XHQvKiogQG1kaW9fbWFwX29wczogYWN0aXZlIHJlZ2lzdHJhdGlvbnMgYW5kIGZpcm13YXJlIGNoYW5nZXMgKi9cbiYjNDM7XHR1bnNpZ25lZCBpbnQgbWRpb19tYXBfb3BzO1xuJiM0MztcdC8qKiBAbWRpb19tYXBfcmVtb3ZhbHM6IGZpcm13YXJlIHJlbW92YWxzIGJsb2NraW5nIFBIWSBhdHRhY2htZW50ICovXG4mIzQzO1x0dW5zaWduZWQgaW50IG1kaW9fbWFwX3JlbW92YWxzO1xuJiM0MztcdC8qKiBAbWRpb19tYXBfcmV0aXJlZDogcmVtb3ZlZCBkZXZpY2VzIHBpbm5lZCB1bnRpbCBidXMgdGVhcmRvd24gKi9cbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIG1kaW9fbWFwX3JldGlyZWQ7XG4gXG4gXHQvKiogQHBoeV9tYXNrOiBQSFkgYWRkcmVzc2VzIHRvIGJlIGlnbm9yZWQgd2hlbiBwcm9iaW5nICovXG4gXHR1MzIgcGh5X21hc2s7XG5AQCAtNjUyLDYgJiM0Mzs2NjcsOCBAQCBzdHJ1Y3QgcGh5X29hdGMxNF9zcWlfY2FwYWJpbGl0eSB7XG4gICogQG5fcG9ydHM6IE51bWJlciBvZiBwb3J0cyBjdXJyZW50bHkgYXR0YWNoZWQgdG8gdGhlIFBIWVxuICAqIEBtYXhfbl9wb3J0czogTWF4IG51bWJlciBvZiBwb3J0cyB0aGlzIFBIWSBjYW4gZXhwb3NlXG4gICogQGxvY2s6ICBNdXRleCBmb3Igc2VyaWFsaXphdGlvbiBhY2Nlc3MgdG8gUEhZXG4mIzQzOyAqIEBhdHRhY2hlZDogV2hldGhlciBhIG5ldHdvcmsgZGV2aWNlIG9yIHN0YW5kYWxvbmUgdXNlciBhdHRhY2hlZCB0aGUgUEhZO1xuJiM0MzsgKlx0cHJvdGVjdGVkIGJ5IHRoZSBNRElPIGJ1cyBtYXAgbG9ja1xuICAqIEBzdGF0ZV9xdWV1ZTogV29yayBxdWV1ZSBmb3Igc3RhdGUgbWFjaGluZVxuICAqIEBsaW5rX2Rvd25fZXZlbnRzOiBOdW1iZXIgb2YgdGltZXMgbGluayB3YXMgbG9zdFxuICAqIEBzaGFyZWQ6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhIHNoYXJlZCBieSBwaHlzIGluIG9uZSBwYWNrYWdlXG5AQCAtNzgxLDYgJiM0Mzs3OTgsNyBAQCBzdHJ1Y3QgcGh5X2RldmljZSB7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHN0YXRlX3F1ZXVlO1xuIFxuIFx0c3RydWN0IG11dGV4IGxvY2s7XG4mIzQzO1x0Ym9vbCBhdHRhY2hlZDtcbiBcbiBcdC8qIFRoaXMgbWF5IGJlIG1vZGlmaWVkIHVuZGVyIHRoZSBydG5sIGxvY2sgKi9cbiBcdGJvb2wgc2ZwX2J1c19hdHRhY2hlZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T0YmIzM0OywKICAgICYjMzQ7T0ZfRFlOQU1JQyYjMzQ7LAogICAgJiMzNDtPRl9PVkVSTEFZJiMzNDssCiAgICAmIzM0O1BIWUxJQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbWRpb2J1c19yZWdpc3RlciYjMzQ7LAogICAgJiMzNDttZGlvYnVzX3VucmVnaXN0ZXImIzM0OywKICAgICYjMzQ7bWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luJiMzNDssCiAgICAmIzM0O21kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmQmIzM0OywKICAgICYjMzQ7bWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZSYjMzQ7LAogICAgJiMzNDttZGlvYnVzX2JlZ2luX3JlbW92ZSYjMzQ7LAogICAgJiMzNDttZGlvYnVzX2ZpbmlzaF9yZW1vdmUmIzM0OywKICAgICYjMzQ7bWRpb19kZXZpY2VfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7bWRpb19kZXZpY2VfcmVtb3ZlJiMzNDssCiAgICAmIzM0O3BoeV9kZXZpY2VfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7cGh5X2RldmljZV9yZW1vdmUmIzM0OywKICAgICYjMzQ7cGh5X2F0dGFjaF9kaXJlY3QmIzM0OywKICAgICYjMzQ7cGh5X2RldGFjaCYjMzQ7LAogICAgJiMzNDtfX29mX21kaW9idXNfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7bWRpb2J1c19zY2FuX2MyMiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTURJTyBidXMgYW5kIFBIWSBkZXZpY2UgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIGxvZ2ljIHRvIHN1cHBvcnQgZHluYW1pYyBkZXZpY2UgdHJlZSBjaGFuZ2VzIChPRiBkeW5hbWljIGFuZCBvdmVybGF5KS4gSXQgaW50cm9kdWNlcyBhIGxvY2tpbmcgbWVjaGFuaXNtIChgbWRpb19tYXBfbG9ja2ApIHRvIHNlcmlhbGl6ZSBkZXZpY2UgY2hhbmdlcyBhbmQgcHJldmVudCByYWNlcyBkdXJpbmcgUEhZIGF0dGFjaG1lbnQgYW5kIGRldGFjaG1lbnQuIEl0IGFsc28gcmVmYWN0b3JzIHRoZSBzY2FubmluZyBhbmQgcmVnaXN0cmF0aW9uIG9mIFBIWXMgYW5kIE1ESU8gZGV2aWNlcy4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGxvZ2ljIGRvZXMgbm90IGludHJvZHVjZSBkZWFkbG9ja3Mgb3IgcmFjZSBjb25kaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDM5ODFlZjU0NDM1NzQ2NDU2OTQwYTU0ZmExYjkyZjk1OTI4MDRiZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDQgMDA6MDY6MDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYyBiL2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jCmluZGV4IGI4ZDI5OGMwNGQzZmYuLmM4OWY4OGFhY2Q4ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jCkBAIC0xMyw2ICYjNDM7MTMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2Z3bm9kZV9tZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L211dGV4LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9vZl9pcnEuaCZndDsKQEAgLTIwLDYgJiM0MzsyMSw4IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvb2ZfbmV0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGh5X2ZpeGVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwogCiAjZGVmaW5lIERFRkFVTFRfR1BJT19SRVNFVF9ERUxBWQkxMAkvKiBpbiBtaWNyb3NlY29uZHMgKi8KIApAQCAtMjcsNiAmIzQzOzMwLDUyIEBAIE1PRFVMRV9BVVRIT1IoJiMzNDtHcmFudCBMaWtlbHkgJmx0O2dyYW50Lmxpa2VseUBzZWNyZXRsYWIuY2EmZ3Q7JiMzNDspOwogTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CiBNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtPcGVuRmlybXdhcmUgTURJTyBidXMgKEV0aGVybmV0IFBIWSkgYWNjZXNzb3JzJiMzNDspOwogCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX09GX0RZTkFNSUMpCiYjNDM7LyoKJiM0MzsgKiBPRiBjaGFuZ2VzIGNhbiBuZXN0IHdoZW4gcHJvYmluZyBvbmUgTURJTyBkZXZpY2UgZW5hYmxlcyBhbm90aGVyIG5vZGUgb24KJiM0MzsgKiB0aGUgc2FtZSBidXMuIFNlcmlhbGl6ZSBpbmRlcGVuZGVudCBjaGFuZ2VzIHdoaWxlIGFsbG93aW5nIHRoYXQgbmVzdGluZy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKG9mX21kaW9fcmVjb25maWdfbXV0ZXgpOwomIzQzO3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9mX21kaW9fcmVjb25maWdfb3duZXI7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBvZl9tZGlvX3JlY29uZmlnX2RlcHRoOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG9mX21kaW9fcmVjb25maWdfbG9jayh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKCFtdXRleF90cnlsb2NrKCZhbXA7b2ZfbWRpb19yZWNvbmZpZ19tdXRleCkpIHsKJiM0MzsJCWlmIChvZl9tZGlvX3JlY29uZmlnX293bmVyID09IGN1cnJlbnQpIHsKJiM0MzsJCQlvZl9tZGlvX3JlY29uZmlnX2RlcHRoJiM0MzsmIzQzOzsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7b2ZfbWRpb19yZWNvbmZpZ19tdXRleCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJV0FSTl9PTl9PTkNFKG9mX21kaW9fcmVjb25maWdfb3duZXIpOwomIzQzOwlXQVJOX09OX09OQ0Uob2ZfbWRpb19yZWNvbmZpZ19kZXB0aCk7CiYjNDM7CW9mX21kaW9fcmVjb25maWdfb3duZXIgPSBjdXJyZW50OwomIzQzOwlvZl9tZGlvX3JlY29uZmlnX2RlcHRoID0gMTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb2ZfbWRpb19yZWNvbmZpZ191bmxvY2sodm9pZCkKJiM0Mzt7CiYjNDM7CVdBUk5fT05fT05DRShvZl9tZGlvX3JlY29uZmlnX293bmVyICE9IGN1cnJlbnQpOwomIzQzOwlXQVJOX09OX09OQ0UoIW9mX21kaW9fcmVjb25maWdfZGVwdGgpOwomIzQzOwomIzQzOwlpZiAoLS1vZl9tZGlvX3JlY29uZmlnX2RlcHRoKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlvZl9tZGlvX3JlY29uZmlnX293bmVyID0gTlVMTDsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7b2ZfbWRpb19yZWNvbmZpZ19tdXRleCk7CiYjNDM7fQomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG9mX21kaW9fcmVjb25maWdfbG9jayh2b2lkKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG9mX21kaW9fcmVjb25maWdfdW5sb2NrKHZvaWQpCiYjNDM7ewomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKIC8qIEV4dHJhY3QgdGhlIGNsYXVzZSAyMiBwaHkgSUQgZnJvbSB0aGUgY29tcGF0aWJsZSBzdHJpbmcgb2YgdGhlIGZvcm0KICAqIGV0aGVybmV0LXBoeS1pZEFBQUEuQkJCQiAqLwogc3RhdGljIGludCBvZl9nZXRfcGh5X2lkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlLCB1MzIgKnBoeV9pZCkKQEAgLTQ0LDcgJiM0Mzs5Myw3IEBAIGludCBvZl9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksCiBFWFBPUlRfU1lNQk9MKG9mX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3Rlcik7CiAKIHN0YXRpYyBpbnQgb2ZfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKm1kaW8sCi0JCQkJICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQsIHUzMiBhZGRyKQomIzQzOwkJCQkgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLCB1MzIgYWRkcikKIHsKIAlyZXR1cm4gZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KG1kaW8sIG9mX2Z3bm9kZV9oYW5kbGUoY2hpbGQpLCBhZGRyKTsKIH0KQEAgLTc3LDYgJiM0MzsxMjYsMjUgQEAgc3RhdGljIGludCBvZl9tZGlvYnVzX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqbWRpbywKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgb2ZfbWRpb2J1c19yZWdpc3Rlcl9jaGlsZChzdHJ1Y3QgbWlpX2J1cyAqbWRpbywKJiM0MzsJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLCB1MzIgYWRkcikKJiM0Mzt7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJaWYgKG9mX25vZGVfdGVzdF9hbmRfc2V0X2ZsYWcoY2hpbGQsIE9GX1BPUFVMQVRFRCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKG9mX21kaW9idXNfY2hpbGRfaXNfcGh5KGNoaWxkKSkKJiM0MzsJCXJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9waHkobWRpbywgY2hpbGQsIGFkZHIpOwomIzQzOwllbHNlCiYjNDM7CQlyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKG1kaW8sIGNoaWxkLCBhZGRyKTsKJiM0MzsKJiM0MzsJaWYgKHJjKQomIzQzOwkJb2Zfbm9kZV9jbGVhcl9mbGFnKGNoaWxkLCBPRl9QT1BVTEFURUQpOwomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7fQomIzQzOwogLyogVGhlIGZvbGxvd2luZyBpcyBhIGxpc3Qgb2YgUEhZIGNvbXBhdGlibGUgc3RyaW5ncyB3aGljaCBhcHBlYXIgaW4KICAqIHNvbWUgRFRCcy4gVGhlIGNvbXBhdGlibGUgc3RyaW5nIGlzIG5ldmVyIG1hdGNoZWQgYWdhaW5zdCBhIFBIWQogICogZHJpdmVyLCBzbyBpcyBwb2ludGxlc3MuIFdlIG9ubHkgZXhwZWN0IGRldmljZXMgd2hpY2ggYXJlIG5vdCBQSFlzCkBAIC0xMzYsNiAmIzQzOzIwNCwzMiBAQCBib29sIG9mX21kaW9idXNfY2hpbGRfaXNfcGh5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQpCiB9CiBFWFBPUlRfU1lNQk9MKG9mX21kaW9idXNfY2hpbGRfaXNfcGh5KTsKIAomIzQzO3N0YXRpYyBpbnQgb2ZfbWRpb2J1c19zY2FuX3BoeShzdHJ1Y3QgbWlpX2J1cyAqbWRpbywKJiM0MzsJCQkgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCkKJiM0Mzt7CiYjNDM7CWludCBhZGRyLCByYzsKJiM0MzsKJiM0MzsJaWYgKCFvZl9tZGlvYnVzX2NoaWxkX2lzX3BoeShjaGlsZCkpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJZm9yIChhZGRyID0gMDsgYWRkciAmbHQ7IFBIWV9NQVhfQUREUjsgYWRkciYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChtZGlvYnVzX2lzX3JlZ2lzdGVyZWRfZGV2aWNlKG1kaW8sIGFkZHIpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZGV2X2luZm8oJmFtcDttZGlvLSZndDtkZXYsICYjMzQ7c2NhbiBwaHkgJXBPRm4gYXQgYWRkcmVzcyAlaVxuJiMzNDssCiYjNDM7CQkJIGNoaWxkLCBhZGRyKTsKJiM0MzsKJiM0MzsJCS8qIC1FTk9ERVYgbWVhbnMgdGhhdCBzY2FubmluZyBzaG91bGQgY29udGludWUuICovCiYjNDM7CQlyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXJfY2hpbGQobWRpbywgY2hpbGQsIGFkZHIpOwomIzQzOwkJaWYgKCFyYykKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCWlmIChyYyAhPSAtRU5PREVWKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gLUVOT0RFVjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IF9fb2ZfbWRpb2J1c19wYXJzZV9waHlzKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQkJCSAgIGJvb2wgKnNjYW5waHlzKQogewpAQCAtMTY0LDEwICYjNDM7MjU4LDcgQEAgc3RhdGljIGludCBfX29mX21kaW9idXNfcGFyc2VfcGh5cyhzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKG9mX21kaW9idXNfY2hpbGRfaXNfcGh5KGNoaWxkKSkKLQkJCXJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9waHkobWRpbywgY2hpbGQsIGFkZHIpOwotCQllbHNlCi0JCQlyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKG1kaW8sIGNoaWxkLCBhZGRyKTsKJiM0MzsJCXJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9jaGlsZChtZGlvLCBjaGlsZCwgYWRkcik7CiAKIAkJaWYgKHJjID09IC1FTk9ERVYpCiAJCQlkZXZfZXJyKCZhbXA7bWRpby0mZ3Q7ZGV2LApAQCAtMTk3LDcgJiM0MzsyODgsNyBAQCBpbnQgX19vZl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7CiAJYm9vbCBzY2FucGh5cyA9IGZhbHNlOwotCWludCBhZGRyLCByYzsKJiM0MzsJaW50IHJjOwogCiAJaWYgKCFucCkKIAkJcmV0dXJuIF9fbWRpb2J1c19yZWdpc3RlcihtZGlvLCBvd25lcik7CkBAIC0yMjMsMTMgJiM0MzszMTQsMjEgQEAgaW50IF9fb2ZfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCwKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAomIzQzOwlvZl9tZGlvX3JlY29uZmlnX2xvY2soKTsKJiM0MzsJcmMgPSBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4obWRpbywgZmFsc2UpOwomIzQzOwlpZiAocmMpIHsKJiM0MzsJCW9mX21kaW9fcmVjb25maWdfdW5sb2NrKCk7CiYjNDM7CQltZGlvYnVzX3VucmVnaXN0ZXIobWRpbyk7CiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CX0KJiM0MzsKIAkvKiBMb29wIG92ZXIgdGhlIGNoaWxkIG5vZGVzIGFuZCByZWdpc3RlciBhIHBoeV9kZXZpY2UgZm9yIGVhY2ggcGh5ICovCiAJcmMgPSBfX29mX21kaW9idXNfcGFyc2VfcGh5cyhtZGlvLCBucCwgJmFtcDtzY2FucGh5cyk7CiAJaWYgKHJjKQotCQlnb3RvIHVucmVnaXN0ZXI7CiYjNDM7CQlnb3RvIG91dF9jaGFuZ2U7CiAKIAlpZiAoIXNjYW5waHlzKQotCQlyZXR1cm4gMDsKJiM0MzsJCWdvdG8gb3V0X2NoYW5nZTsKIAogCS8qIGF1dG8gc2NhbiBmb3IgUEhZcyB3aXRoIGVtcHR5IHJlZyBwcm9wZXJ0eSAqLwogCWZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKG5wLCBjaGlsZCkgewpAQCAtMjM4LDM5ICYjNDM7MzM3LDM4MiBAQCBpbnQgX19vZl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQkgICAgb2Zfbm9kZV9uYW1lX2VxKGNoaWxkLCAmIzM0O2V0aGVybmV0LXBoeS1wYWNrYWdlJiMzNDspKQogCQkJY29udGludWU7CiAKLQkJZm9yIChhZGRyID0gMDsgYWRkciAmbHQ7IFBIWV9NQVhfQUREUjsgYWRkciYjNDM7JiM0MzspIHsKLQkJCS8qIHNraXAgYWxyZWFkeSByZWdpc3RlcmVkIFBIWXMgKi8KLQkJCWlmIChtZGlvYnVzX2lzX3JlZ2lzdGVyZWRfZGV2aWNlKG1kaW8sIGFkZHIpKQotCQkJCWNvbnRpbnVlOwotCi0JCQkvKiBiZSBub2lzeSB0byBlbmNvdXJhZ2UgcGVvcGxlIHRvIHNldCByZWcgcHJvcGVydHkgKi8KLQkJCWRldl9pbmZvKCZhbXA7bWRpby0mZ3Q7ZGV2LCAmIzM0O3NjYW4gcGh5ICVwT0ZuIGF0IGFkZHJlc3MgJWlcbiYjMzQ7LAotCQkJCSBjaGlsZCwgYWRkcik7Ci0KLQkJCWlmIChvZl9tZGlvYnVzX2NoaWxkX2lzX3BoeShjaGlsZCkpIHsKLQkJCQkvKiAtRU5PREVWIGlzIHRoZSByZXR1cm4gY29kZSB0aGF0IFBIWUxJQiBoYXMKLQkJCQkgKiBzdGFuZGFyZGl6ZWQgb24gdG8gaW5kaWNhdGUgdGhhdCBidXMKLQkJCQkgKiBzY2FubmluZyBzaG91bGQgY29udGludWUuCi0JCQkJICovCi0JCQkJcmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyX3BoeShtZGlvLCBjaGlsZCwgYWRkcik7Ci0JCQkJaWYgKCFyYykKLQkJCQkJYnJlYWs7Ci0JCQkJaWYgKHJjICE9IC1FTk9ERVYpCi0JCQkJCWdvdG8gcHV0X3VucmVnaXN0ZXI7Ci0JCQl9Ci0JCX0KJiM0MzsJCXJjID0gb2ZfbWRpb2J1c19zY2FuX3BoeShtZGlvLCBjaGlsZCk7CiYjNDM7CQlpZiAocmMgJmFtcDsmYW1wOyByYyAhPSAtRU5PREVWKQomIzQzOwkJCWdvdG8gcHV0X2NoaWxkOwomIzQzOwkJcmMgPSAwOwogCX0KIAotCXJldHVybiAwOwomIzQzO291dF9jaGFuZ2U6CiYjNDM7CW1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmQobWRpbywgZmFsc2UpOwomIzQzOwlvZl9tZGlvX3JlY29uZmlnX3VubG9jaygpOwomIzQzOwlpZiAoIXJjKQomIzQzOwkJcmV0dXJuIDA7CiAKLXB1dF91bnJlZ2lzdGVyOgotCW9mX25vZGVfcHV0KGNoaWxkKTsKLXVucmVnaXN0ZXI6CiAJbWRpb2J1c191bnJlZ2lzdGVyKG1kaW8pOwogCXJldHVybiByYzsKJiM0MzsKJiM0MztwdXRfY2hpbGQ6CiYjNDM7CW9mX25vZGVfcHV0KGNoaWxkKTsKJiM0MzsJZ290byBvdXRfY2hhbmdlOwogfQogRVhQT1JUX1NZTUJPTChfX29mX21kaW9idXNfcmVnaXN0ZXIpOwogCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX09GX0RZTkFNSUMpCiYjNDM7c3RhdGljIGJvb2wgb2ZfbWRpb2J1c19ub2RlX2lzX2F2YWlsYWJsZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gIW9mX25vZGVfY2hlY2tfZmxhZyhub2RlLCBPRl9ERVRBQ0hFRCkgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShub2RlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvZl9tZGlvYnVzX2FkZF9ub2RlKHN0cnVjdCBtaWlfYnVzICptZGlvLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkOwomIzQzOwlpbnQgYWRkciwgcmMsIHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmICghb2ZfbWRpb2J1c19ub2RlX2lzX2F2YWlsYWJsZShub2RlKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAob2Zfbm9kZV9uYW1lX2VxKG5vZGUsICYjMzQ7ZXRoZXJuZXQtcGh5LXBhY2thZ2UmIzM0OykpIHsKJiM0MzsJCWlmICghb2ZfcHJvcGVydHlfcHJlc2VudChub2RlLCAmIzM0O3JlZyYjMzQ7KSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJCWZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKG5vZGUsIGNoaWxkKSB7CiYjNDM7CQkJcmMgPSBvZl9tZGlvYnVzX2FkZF9ub2RlKG1kaW8sIGNoaWxkKTsKJiM0MzsJCQlpZiAocmMgJmFtcDsmYW1wOyByYyAhPSAtRU5PREVWICZhbXA7JmFtcDsgIXJldCkKJiM0MzsJCQkJcmV0ID0gcmM7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWFkZHIgPSBvZl9tZGlvX3BhcnNlX2FkZHIoJmFtcDttZGlvLSZndDtkZXYsIG5vZGUpOwomIzQzOwlpZiAoYWRkciAmbHQ7IDApCiYjNDM7CQlyYyA9IG9mX21kaW9idXNfc2Nhbl9waHkobWRpbywgbm9kZSk7CiYjNDM7CWVsc2UKJiM0MzsJCXJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9jaGlsZChtZGlvLCBub2RlLCBhZGRyKTsKJiM0MzsKJiM0MzsJaWYgKHJjID09IC1FTk9ERVYgJmFtcDsmYW1wOyBhZGRyICZndDs9IDApCiYjNDM7CQlkZXZfZXJyKCZhbXA7bWRpby0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7TURJTyBkZXZpY2UgYXQgYWRkcmVzcyAlZCBpcyBtaXNzaW5nLlxuJiMzNDssIGFkZHIpOwomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG9mX21kaW9idXNfbm9kZV9pc19idXN5KHN0cnVjdCBtaWlfYnVzICptZGlvLAomIzQzOwkJCQkgICAgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQomIzQzO3sKJiM0MzsJc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2OwomIzQzOwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwomIzQzOwlib29sIGJ1c3kgPSBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKG9mX25vZGVfbmFtZV9lcShub2RlLCAmIzM0O2V0aGVybmV0LXBoeS1wYWNrYWdlJiMzNDspKSB7CiYjNDM7CQlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChub2RlLCBjaGlsZCkgewomIzQzOwkJCWlmIChvZl9tZGlvYnVzX25vZGVfaXNfYnVzeShtZGlvLCBjaGlsZCkpCiYjNDM7CQkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghb2Zfbm9kZV9jaGVja19mbGFnKG5vZGUsIE9GX1BPUFVMQVRFRCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW1kaW9kZXYgPSBvZl9tZGlvX2ZpbmRfZGV2aWNlKG5vZGUpOwomIzQzOwlpZiAoIW1kaW9kZXYpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaWYgKG1kaW9kZXYtJmd0O2J1cyAhPSBtZGlvKSB7CiYjNDM7CQlwdXRfZGV2aWNlKCZhbXA7bWRpb2Rldi0mZ3Q7ZGV2KTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWRpby0mZ3Q7bWRpb19tYXBfbG9jayk7CiYjNDM7CWJ1c3kgPSBtZGlvLSZndDttZGlvX21hcFttZGlvZGV2LSZndDthZGRyXSAhPSBtZGlvZGV2IHx8CiYjNDM7CSAgICAgICAobWRpby0mZ3Q7bWRpb19tYXBfcGVuZGluZyAmYW1wOyBCSVQobWRpb2Rldi0mZ3Q7YWRkcikpOwomIzQzOwlpZiAobWRpb2Rldi0mZ3Q7ZmxhZ3MgJmFtcDsgTURJT19ERVZJQ0VfRkxBR19QSFkpIHsKJiM0MzsJCXBoeWRldiA9IHRvX3BoeV9kZXZpY2UoJmFtcDttZGlvZGV2LSZndDtkZXYpOwomIzQzOwkJaWYgKHBoeWRldi0mZ3Q7YXR0YWNoZWQpIHsKJiM0MzsJCQlidXN5ID0gdHJ1ZTsKJiM0MzsJCQlkZXZfd2FybigmYW1wO21kaW9kZXYtJmd0O2RldiwKJiM0MzsJCQkJICYjMzQ7Y2Fubm90IHJlbW92ZSBhbiBhdHRhY2hlZCBQSFk7IHJlbW92ZSBpdHMgY29uc3VtZXIgZmlyc3RcbiYjMzQ7KTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDttZGlvLSZndDttZGlvX21hcF9sb2NrKTsKJiM0MzsJcHV0X2RldmljZSgmYW1wO21kaW9kZXYtJmd0O2Rldik7CiYjNDM7CiYjNDM7CXJldHVybiBidXN5OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICoKJiM0MztvZl9tZGlvYnVzX2dldF9yZW1vdmFsX3Njb3BlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50OwomIzQzOwomIzQzOwlpZiAob2Zfbm9kZV9uYW1lX2VxKG5vZGUsICYjMzQ7ZXRoZXJuZXQtcGh5LXBhY2thZ2UmIzM0OykpCiYjNDM7CQlyZXR1cm4gb2Zfbm9kZV9nZXQobm9kZSk7CiYjNDM7CiYjNDM7CXBhcmVudCA9IG9mX2dldF9wYXJlbnQobm9kZSk7CiYjNDM7CWlmIChvZl9ub2RlX25hbWVfZXEocGFyZW50LCAmIzM0O2V0aGVybmV0LXBoeS1wYWNrYWdlJiMzNDspKQomIzQzOwkJcmV0dXJuIHBhcmVudDsKJiM0MzsKJiM0MzsJb2Zfbm9kZV9wdXQocGFyZW50KTsKJiM0MzsJcmV0dXJuIG9mX25vZGVfZ2V0KG5vZGUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG9mX21kaW9idXNfcmVtb3ZlX25vZGUoc3RydWN0IG1paV9idXMgKm1kaW8sCiYjNDM7CQkJCSAgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQomIzQzO3sKJiM0MzsJc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2OwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAob2Zfbm9kZV9uYW1lX2VxKG5vZGUsICYjMzQ7ZXRoZXJuZXQtcGh5LXBhY2thZ2UmIzM0OykpIHsKJiM0MzsJCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobm9kZSwgY2hpbGQpIHsKJiM0MzsJCQlyZXQgPSBvZl9tZGlvYnVzX3JlbW92ZV9ub2RlKG1kaW8sIGNoaWxkKTsKJiM0MzsJCQlpZiAocmV0KSB7CiYjNDM7CQkJCW9mX25vZGVfcHV0KGNoaWxkKTsKJiM0MzsJCQkJcmV0dXJuIHJldDsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIW9mX25vZGVfY2hlY2tfZmxhZyhub2RlLCBPRl9QT1BVTEFURUQpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIFRoZSBPRiBub2RlIGxvb2t1cCBhbHNvIGNvdmVycyBQSFlzIGZvdW5kIGJ5IGFkZHJlc3Mgc2Nhbm5pbmcuICovCiYjNDM7CW1kaW9kZXYgPSBvZl9tZGlvX2ZpbmRfZGV2aWNlKG5vZGUpOwomIzQzOwlpZiAoIW1kaW9kZXYpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwlpZiAobWRpb2Rldi0mZ3Q7YnVzICE9IG1kaW8pIHsKJiM0MzsJCXB1dF9kZXZpY2UoJmFtcDttZGlvZGV2LSZndDtkZXYpOwomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gbWRpb2Rldi0mZ3Q7ZGV2aWNlX3JlbW92ZV9keW5hbWljKG1kaW9kZXYpOwomIzQzOwlpZiAoIXJldCkKJiM0MzsJCW1kaW9kZXYtJmd0O2RldmljZV9mcmVlKG1kaW9kZXYpOwomIzQzOwlwdXRfZGV2aWNlKCZhbXA7bWRpb2Rldi0mZ3Q7ZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldCA9PSAtRU5PREVWID8gMCA6IHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBtaWlfYnVzICpvZl9tZGlvYnVzX2ZpbmRfcGFyZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50LCAqYnVzX25vZGU7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICptZGlvOwomIzQzOwomIzQzOwlwYXJlbnQgPSBvZl9nZXRfcGFyZW50KG5vZGUpOwomIzQzOwlpZiAoIXBhcmVudCkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlpZiAob2Zfbm9kZV9uYW1lX2VxKHBhcmVudCwgJiMzNDtldGhlcm5ldC1waHktcGFja2FnZSYjMzQ7KSkgewomIzQzOwkJaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKHBhcmVudCkgfHwKJiM0MzsJCSAgICAhb2ZfcHJvcGVydHlfcHJlc2VudChwYXJlbnQsICYjMzQ7cmVnJiMzNDspKSB7CiYjNDM7CQkJb2Zfbm9kZV9wdXQocGFyZW50KTsKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWJ1c19ub2RlID0gb2ZfZ2V0X3BhcmVudChwYXJlbnQpOwomIzQzOwkJb2Zfbm9kZV9wdXQocGFyZW50KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWJ1c19ub2RlID0gcGFyZW50OwomIzQzOwl9CiYjNDM7CiYjNDM7CW1kaW8gPSBvZl9tZGlvX2ZpbmRfYnVzKGJ1c19ub2RlKTsKJiM0MzsJb2Zfbm9kZV9wdXQoYnVzX25vZGUpOwomIzQzOwomIzQzOwlyZXR1cm4gbWRpbzsKJiM0Mzt9CiYjNDM7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX09GX09WRVJMQVkpCiYjNDM7LyogT3ZlcmxheSBlbnRyeSBub3RpZmllciBlcnJvcnMgY2Fubm90IHN0b3AgcmVtb3ZhbCBhZnRlciB0aGUgdHJlZSBjaGFuZ2VkLiAqLwomIzQzO3N0YXRpYyBib29sIG9mX21kaW9idXNfbGl2ZV9ub2RlX2lzX2J1c3koc3RydWN0IGRldmljZV9ub2RlICpub2RlKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpzY29wZTsKJiM0MzsJc3RydWN0IG1paV9idXMgKm1kaW87CiYjNDM7CWJvb2wgYnVzeSA9IHRydWU7CiYjNDM7CiYjNDM7CXNjb3BlID0gb2ZfbWRpb2J1c19nZXRfcmVtb3ZhbF9zY29wZShub2RlKTsKJiM0MzsJbWRpbyA9IG9mX21kaW9idXNfZmluZF9wYXJlbnQoc2NvcGUpOwomIzQzOwlpZiAoIW1kaW8pCiYjNDM7CQlnb3RvIG91dF9wdXRfc2NvcGU7CiYjNDM7CiYjNDM7CWlmICghbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKG1kaW8sIHRydWUpKSB7CiYjNDM7CQlidXN5ID0gb2ZfbWRpb2J1c19ub2RlX2lzX2J1c3kobWRpbywgc2NvcGUpOwomIzQzOwkJbWRpb2J1c19kZXZpY2VfY2hhbmdlX2VuZChtZGlvLCB0cnVlKTsKJiM0MzsJfQomIzQzOwlwdXRfZGV2aWNlKCZhbXA7bWRpby0mZ3Q7ZGV2KTsKJiM0MzsKJiM0MztvdXRfcHV0X3Njb3BlOgomIzQzOwlvZl9ub2RlX3B1dChzY29wZSk7CiYjNDM7CXJldHVybiBidXN5OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICoKJiM0MztvZl9tZGlvYnVzX292ZXJsYXlfdGFyZ2V0X2NoaWxkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqdGFyZ2V0LAomIzQzOwkJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm92ZXJsYXlfY2hpbGQpCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICpuYW1lID0ga2Jhc2VuYW1lKG92ZXJsYXlfY2hpbGQtJmd0O2Z1bGxfbmFtZSk7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX2NoaWxkX29mX25vZGUodGFyZ2V0LCBjaGlsZCkgewomIzQzOwkJaWYgKCFvZl9ub2RlX2NtcChrYmFzZW5hbWUoY2hpbGQtJmd0O2Z1bGxfbmFtZSksIG5hbWUpKQomIzQzOwkJCXJldHVybiBjaGlsZDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgb2ZfbWRpb2J1c19vdmVybGF5X25vZGVfaXNfYnVzeShzdHJ1Y3QgZGV2aWNlX25vZGUgKm92ZXJsYXksCiYjNDM7CQkJCQkgICAgc3RydWN0IGRldmljZV9ub2RlICp0YXJnZXQsCiYjNDM7CQkJCQkgICAgYm9vbCBhZGRlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqb3ZlcmxheV9jaGlsZCwgKnRhcmdldF9jaGlsZDsKJiM0MzsJYm9vbCBidXN5LCBjaGlsZF9hZGRlZDsKJiM0MzsKJiM0MzsJaWYgKChhZGRlZCB8fCBvZl9wcm9wZXJ0eV9wcmVzZW50KG92ZXJsYXksICYjMzQ7c3RhdHVzJiMzNDspKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBvZl9tZGlvYnVzX2xpdmVfbm9kZV9pc19idXN5KHRhcmdldCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShvdmVybGF5LCBvdmVybGF5X2NoaWxkKSB7CiYjNDM7CQl0YXJnZXRfY2hpbGQgPSBvZl9tZGlvYnVzX292ZXJsYXlfdGFyZ2V0X2NoaWxkKHRhcmdldCwKJiM0MzsJCQkJCQkJICAgICAgIG92ZXJsYXlfY2hpbGQpOwomIzQzOwkJaWYgKCF0YXJnZXRfY2hpbGQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQljaGlsZF9hZGRlZCA9IG9mX25vZGVfY2hlY2tfZmxhZyh0YXJnZXRfY2hpbGQsIE9GX09WRVJMQVkpOwomIzQzOwkJYnVzeSA9IG9mX21kaW9idXNfb3ZlcmxheV9ub2RlX2lzX2J1c3kob3ZlcmxheV9jaGlsZCwKJiM0MzsJCQkJCQkgICAgICAgdGFyZ2V0X2NoaWxkLCBjaGlsZF9hZGRlZCk7CiYjNDM7CQlvZl9ub2RlX3B1dCh0YXJnZXRfY2hpbGQpOwomIzQzOwkJaWYgKGJ1c3kpIHsKJiM0MzsJCQlvZl9ub2RlX3B1dChvdmVybGF5X2NoaWxkKTsKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb2ZfbWRpb2J1c19vdmVybGF5X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAomIzQzOwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICphcmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb2Zfb3ZlcmxheV9ub3RpZnlfZGF0YSAqbmQgPSBhcmc7CiYjNDM7CWJvb2wgYnVzeTsKJiM0MzsKJiM0MzsJaWYgKGFjdGlvbiAhPSBPRl9PVkVSTEFZX1BSRV9SRU1PVkUpCiYjNDM7CQlyZXR1cm4gTk9USUZZX09LOwomIzQzOwomIzQzOwlvZl9tZGlvX3JlY29uZmlnX2xvY2soKTsKJiM0MzsJYnVzeSA9IG9mX21kaW9idXNfb3ZlcmxheV9ub2RlX2lzX2J1c3kobmQtJmd0O292ZXJsYXksIG5kLSZndDt0YXJnZXQsCiYjNDM7CQkJCQkgICAgICAgZmFsc2UpOwomIzQzOwlvZl9tZGlvX3JlY29uZmlnX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gYnVzeSA/IG5vdGlmaWVyX2Zyb21fZXJybm8oLUVCVVNZKSA6IE5PVElGWV9PSzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBvZl9tZGlvX292ZXJsYXlfbm90aWZpZXIgPSB7CiYjNDM7CS5ub3RpZmllcl9jYWxsID0gb2ZfbWRpb2J1c19vdmVybGF5X25vdGlmeSwKJiM0Mzt9OwomIzQzOyNlbmRpZgomIzQzOwomIzQzO3N0YXRpYyBpbnQgb2ZfbWRpb2J1c19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sCiYjNDM7CQkJICAgICB2b2lkICphcmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb2ZfcmVjb25maWdfZGF0YSAqcmQgPSBhcmc7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqc2NvcGU7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICptZGlvOwomIzQzOwllbnVtIG9mX3JlY29uZmlnX2NoYW5nZSBjaGFuZ2U7CiYjNDM7CWJvb2wgcmVtb3Zpbmc7CiYjNDM7CWludCByYywgcmV0ID0gTk9USUZZX09LOwomIzQzOwomIzQzOwlvZl9tZGlvX3JlY29uZmlnX2xvY2soKTsKJiM0MzsJY2hhbmdlID0gb2ZfcmVjb25maWdfZ2V0X3N0YXRlX2NoYW5nZShhY3Rpb24sIHJkKTsKJiM0MzsJc3dpdGNoIChjaGFuZ2UpIHsKJiM0MzsJY2FzZSBPRl9SRUNPTkZJR19DSEFOR0VfQUREOgomIzQzOwkJLyogQSBuZXdlciBjaGFuZ2UgbWF5IGhhdmUgbWFkZSB0aGlzIG5vdGlmaWNhdGlvbiBzdGFsZS4gKi8KJiM0MzsJCWlmICghb2ZfbWRpb2J1c19ub2RlX2lzX2F2YWlsYWJsZShyZC0mZ3Q7ZG4pKQomIzQzOwkJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCXJlbW92aW5nID0gZmFsc2U7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBPRl9SRUNPTkZJR19DSEFOR0VfUkVNT1ZFOgomIzQzOwkJLyogQSBuZXdlciBjaGFuZ2UgbWF5IGhhdmUgbWFkZSB0aGlzIG5vdGlmaWNhdGlvbiBzdGFsZS4gKi8KJiM0MzsJCWlmIChvZl9tZGlvYnVzX25vZGVfaXNfYXZhaWxhYmxlKHJkLSZndDtkbikpCiYjNDM7CQkJZ290byBvdXRfdW5sb2NrOwomIzQzOwkJcmVtb3ZpbmcgPSB0cnVlOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWRpbyA9IG9mX21kaW9idXNfZmluZF9wYXJlbnQocmQtJmd0O2RuKTsKJiM0MzsJaWYgKCFtZGlvKQomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzOwomIzQzOwlyYyA9IG1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbihtZGlvLCByZW1vdmluZyk7CiYjNDM7CWlmIChyYykgewomIzQzOwkJaWYgKCFyZW1vdmluZykKJiM0MzsJCQlyZXQgPSBub3RpZmllcl9mcm9tX2Vycm5vKC1FUFJPQkVfREVGRVIpOwomIzQzOwkJZ290byBvdXRfcHV0X21kaW87CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFyZW1vdmluZykgewomIzQzOwkJcmMgPSBvZl9tZGlvYnVzX2FkZF9ub2RlKG1kaW8sIHJkLSZndDtkbik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBUaGUgbm9kZSBtYXkgYWxyZWFkeSBiZSBkZXRhY2hlZCBmcm9tIGl0cyBwYXJlbnQgaGllcmFyY2h5LiAqLwomIzQzOwkJc2NvcGUgPSBvZl9tZGlvYnVzX2dldF9yZW1vdmFsX3Njb3BlKHJkLSZndDtkbik7CiYjNDM7CQlpZiAob2ZfbWRpb2J1c19ub2RlX2lzX2J1c3kobWRpbywgc2NvcGUpKQomIzQzOwkJCXJjID0gLUVCVVNZOwomIzQzOwkJZWxzZQomIzQzOwkJCXJjID0gb2ZfbWRpb2J1c19yZW1vdmVfbm9kZShtZGlvLCByZC0mZ3Q7ZG4pOwomIzQzOwkJb2Zfbm9kZV9wdXQoc2NvcGUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmQobWRpbywgcmVtb3ZpbmcpOwomIzQzOwlpZiAocmMgJmFtcDsmYW1wOyAocmVtb3ZpbmcgfHwgcmMgIT0gLUVOT0RFVikpCiYjNDM7CQlyZXQgPSBub3RpZmllcl9mcm9tX2Vycm5vKHJjKTsKJiM0MzsKJiM0MztvdXRfcHV0X21kaW86CiYjNDM7CXB1dF9kZXZpY2UoJmFtcDttZGlvLSZndDtkZXYpOwomIzQzO291dF91bmxvY2s6CiYjNDM7CW9mX21kaW9fcmVjb25maWdfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgb2ZfbWRpb19ub3RpZmllciA9IHsKJiM0MzsJLm5vdGlmaWVyX2NhbGwgPSBvZl9tZGlvYnVzX25vdGlmeSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IG9mX21kaW9faW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gb2ZfcmVjb25maWdfbm90aWZpZXJfcmVnaXN0ZXIoJmFtcDtvZl9tZGlvX25vdGlmaWVyKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX09GX09WRVJMQVkpCiYjNDM7CXJldCA9IG9mX292ZXJsYXlfbm90aWZpZXJfcmVnaXN0ZXIoJmFtcDtvZl9tZGlvX292ZXJsYXlfbm90aWZpZXIpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJb2ZfcmVjb25maWdfbm90aWZpZXJfdW5yZWdpc3RlcigmYW1wO29mX21kaW9fbm90aWZpZXIpOwomIzQzOyNlbmRpZgomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0Mzttb2R1bGVfaW5pdChvZl9tZGlvX2luaXQpOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9fZXhpdCBvZl9tZGlvX2V4aXQodm9pZCkKJiM0Mzt7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX09GX09WRVJMQVkpCiYjNDM7CW9mX292ZXJsYXlfbm90aWZpZXJfdW5yZWdpc3RlcigmYW1wO29mX21kaW9fb3ZlcmxheV9ub3RpZmllcik7CiYjNDM7I2VuZGlmCiYjNDM7CW9mX3JlY29uZmlnX25vdGlmaWVyX3VucmVnaXN0ZXIoJmFtcDtvZl9tZGlvX25vdGlmaWVyKTsKJiM0Mzt9CiYjNDM7bW9kdWxlX2V4aXQob2ZfbWRpb19leGl0KTsKJiM0MzsjZW5kaWYgLyogQ09ORklHX09GX0RZTkFNSUMgKi8KJiM0MzsKIC8qKgogICogb2ZfbWRpb19maW5kX2RldmljZSAtIEdpdmVuIGEgZGV2aWNlIHRyZWUgbm9kZSwgZmluZCB0aGUgbWRpb19kZXZpY2UKICAqIEBucDogcG9pbnRlciB0byB0aGUgbWRpb19kZXZpY2UmIzM5O3MgZGV2aWNlIHRyZWUgbm9kZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmMgYi9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYwppbmRleCAwMGQwZTQxNTllOWJiLi5mNDVjOTM2ZmU1YWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYwpAQCAtMzQsNyAmIzQzOzM0LDggQEAgc3RhdGljIHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2J1c19maW5kX2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcikKIAlpZiAoV0FSTl9PTkNFKCFhZGRyX3ZhbGlkLCAmIzM0O2FkZHIgJWQgb3V0IG9mIHJhbmdlXG4mIzM0OywgYWRkcikpCiAJCXJldHVybiBOVUxMOwogCi0JcmV0dXJuIGJ1cy0mZ3Q7bWRpb19tYXBbYWRkcl07CiYjNDM7CS8qIFBhaXIgd2l0aCBtYXAgcHVibGljYXRpb24gaW4gbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2UoKS4gKi8KJiM0MzsJcmV0dXJuIHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtidXMtJmd0O21kaW9fbWFwW2FkZHJdKTsKIH0KIAogc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfZ2V0X3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcikKQEAgLTU0LDcgJiM0Mzs1NSwxNiBAQCBFWFBPUlRfU1lNQk9MKG1kaW9idXNfZ2V0X3BoeSk7CiAKIGJvb2wgbWRpb2J1c19pc19yZWdpc3RlcmVkX2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcikKIHsKLQlyZXR1cm4gbWRpb2J1c19maW5kX2RldmljZShidXMsIGFkZHIpICE9IE5VTEw7CiYjNDM7CWJvb2wgYWRkcl92YWxpZCA9IGFkZHIgJmd0Oz0gMCAmYW1wOyZhbXA7IGFkZHIgJmx0OyBBUlJBWV9TSVpFKGJ1cy0mZ3Q7bWRpb19tYXApOwomIzQzOwlib29sIHJlZ2lzdGVyZWQ7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OQ0UoIWFkZHJfdmFsaWQsICYjMzQ7YWRkciAlZCBvdXQgb2YgcmFuZ2VcbiYjMzQ7LCBhZGRyKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmVnaXN0ZXJlZCA9IFJFQURfT05DRShidXMtJmd0O21kaW9fbWFwW2FkZHJdKSB8fAomIzQzOwkJICAgICAoUkVBRF9PTkNFKGJ1cy0mZ3Q7bWRpb19tYXBfcGVuZGluZykgJmFtcDsgQklUKGFkZHIpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlZ2lzdGVyZWQ7CiB9CiBFWFBPUlRfU1lNQk9MKG1kaW9idXNfaXNfcmVnaXN0ZXJlZF9kZXZpY2UpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYyBiL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jCmluZGV4IGNlM2E2MDdhNDBjYjAuLmRmODAxMjVlZWVjNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jCkBAIC0zMzAsNiAmIzQzOzMzMCw5IEBAIHN0cnVjdCBtaWlfYnVzICptZGlvYnVzX2FsbG9jX3NpemUoc2l6ZV90IHNpemUpCiAJCXJldHVybiBOVUxMOwogCiAJYnVzLSZndDtzdGF0ZSA9IE1ESU9CVVNfQUxMT0NBVEVEOwomIzQzOwltdXRleF9pbml0KCZhbXA7YnVzLSZndDttZGlvX21hcF9sb2NrKTsKJiM0MzsJaW5pdF93YWl0cXVldWVfaGVhZCgmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfd2FpdCk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7YnVzLSZndDttZGlvX21hcF9yZXRpcmVkKTsKIAlpZiAoc2l6ZSkKIAkJYnVzLSZndDtwcml2ID0gKHZvaWQgKilidXMgJiM0MzsgYWxpZ25lZF9zaXplOwogCkBAIC0zNTUsMTAgJiM0MzszNTgsOSBAQCBzdGF0aWMgaW50IG9mX21kaW9idXNfZmluZF9waHkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsCiAJCQkgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkOwomIzQzOwlpbnQgYWRkciwgcmV0OwogCiAJZm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGUobnAsIGNoaWxkKSB7Ci0JCWludCBhZGRyOwotCiAJCWlmIChvZl9ub2RlX25hbWVfZXEoY2hpbGQsICYjMzQ7ZXRoZXJuZXQtcGh5LXBhY2thZ2UmIzM0OykpIHsKIAkJCS8qIFZhbGlkYXRlIFBIWSBwYWNrYWdlIHJlZyBwcmVzZW5jZSAqLwogCQkJaWYgKCFvZl9wcm9wZXJ0eV9wcmVzZW50KGNoaWxkLCAmIzM0O3JlZyYjMzQ7KSkgewpAQCAtMzY2LDEyICYjNDM7MzY4LDEzIEBAIHN0YXRpYyBpbnQgb2ZfbWRpb2J1c19maW5kX3BoeShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAotCQkJaWYgKCFvZl9tZGlvYnVzX2ZpbmRfcGh5KGRldiwgbWRpb2RldiwgY2hpbGQpKSB7CiYjNDM7CQkJcmV0ID0gb2ZfbWRpb2J1c19maW5kX3BoeShkZXYsIG1kaW9kZXYsIGNoaWxkKTsKJiM0MzsJCQlpZiAocmV0ICE9IC1FTk9ERVYpIHsKIAkJCQkvKiBUaGUgcmVmY291bnQgZm9yIHRoZSBQSFkgcGFja2FnZSB3aWxsIGJlCiAJCQkJICogaW5jcmVtZW50ZWQgbGF0ZXIgd2hlbiBQSFkgam9pbiB0aGUgUGFja2FnZS4KIAkJCQkgKi8KIAkJCQlvZl9ub2RlX3B1dChjaGlsZCk7Ci0JCQkJcmV0dXJuIDA7CiYjNDM7CQkJCXJldHVybiByZXQ7CiAJCQl9CiAKIAkJCWNvbnRpbnVlOwpAQCAtMzgyLDYgJiM0MzszODUsMTEgQEAgc3RhdGljIGludCBvZl9tZGlvYnVzX2ZpbmRfcGh5KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LAogCQkJY29udGludWU7CiAKIAkJaWYgKGFkZHIgPT0gbWRpb2Rldi0mZ3Q7YWRkcikgewomIzQzOwkJCWlmIChvZl9ub2RlX3Rlc3RfYW5kX3NldF9mbGFnKGNoaWxkLCBPRl9QT1BVTEFURUQpKSB7CiYjNDM7CQkJCW9mX25vZGVfcHV0KGNoaWxkKTsKJiM0MzsJCQkJcmV0dXJuIC1FQlVTWTsKJiM0MzsJCQl9CiYjNDM7CiAJCQlkZXZpY2Vfc2V0X25vZGUoZGV2LCBvZl9md25vZGVfaGFuZGxlKGNoaWxkKSk7CiAJCQkvKiBUaGUgcmVmY291bnQgb24gJiMzNDtjaGlsZCYjMzQ7IGlzIHBhc3NlZCB0byB0aGUgbWRpbwogCQkJICogZGV2aWNlLiBEbyBfbm90XyB1c2Ugb2Zfbm9kZV9wdXQoY2hpbGQpIGhlcmUuCkBAIC0zOTMsMjIgJiM0Mzs0MDEsMjYgQEAgc3RhdGljIGludCBvZl9tZGlvYnVzX2ZpbmRfcGh5KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LAogCXJldHVybiAtRU5PREVWOwogfQogCi1zdGF0aWMgdm9pZCBvZl9tZGlvYnVzX2xpbmtfbWRpb2RldihzdHJ1Y3QgbWlpX2J1cyAqYnVzLAotCQkJCSAgICBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiYjNDM7c3RhdGljIGludCBvZl9tZGlvYnVzX2xpbmtfbWRpb2RldihzdHJ1Y3QgbWlpX2J1cyAqYnVzLAomIzQzOwkJCQkgICBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDttZGlvZGV2LSZndDtkZXY7CiAKIAlpZiAoZGV2LSZndDtvZl9ub2RlIHx8ICFidXMtJmd0O2Rldi5vZl9ub2RlKQotCQlyZXR1cm47CiYjNDM7CQlyZXR1cm4gMDsKIAotCW9mX21kaW9idXNfZmluZF9waHkoZGV2LCBtZGlvZGV2LCBidXMtJmd0O2Rldi5vZl9ub2RlKTsKJiM0MzsJcmV0dXJuIG9mX21kaW9idXNfZmluZF9waHkoZGV2LCBtZGlvZGV2LCBidXMtJmd0O2Rldi5vZl9ub2RlKTsKIH0KICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBjNDUpCiYjNDM7c3RhdGljIHN0cnVjdCBwaHlfZGV2aWNlICpfX21kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwKJiM0MzsJCQkJCSBib29sIGM0NSkKIHsKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gRVJSX1BUUigtRU5PREVWKTsKIAlzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlOwomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19PRl9NRElPKQomIzQzOwlib29sIG9mX25vZGVfcG9wdWxhdGVkID0gZmFsc2U7CiYjNDM7I2VuZGlmCiAJY2hhciBub2RlX25hbWVbMTZdOwogCWludCBlcnI7CiAKQEAgLTQyMCw3ICYjNDM7NDMyLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RldmljZSAqbWRpb2J1c19zY2FuKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGM0NSkKIAkvKiBGb3IgRFQsIHNlZSBpZiB0aGUgYXV0by1wcm9iZWQgcGh5IGhhcyBhIGNvcnJlc3BvbmRpbmcgY2hpbGQKIAkgKiBpbiB0aGUgYnVzIG5vZGUsIGFuZCBzZXQgdGhlIG9mX25vZGUgcG9pbnRlciBpbiB0aGlzIGNhc2UuCiAJICovCi0Jb2ZfbWRpb2J1c19saW5rX21kaW9kZXYoYnVzLCAmYW1wO3BoeWRldi0mZ3Q7bWRpbyk7CiYjNDM7CWVyciA9IG9mX21kaW9idXNfbGlua19tZGlvZGV2KGJ1cywgJmFtcDtwaHlkZXYtJmd0O21kaW8pOwomIzQzOwlpZiAoZXJyID09IC1FQlVTWSkgewomIzQzOwkJcGh5X2RldmljZV9mcmVlKHBoeWRldik7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKJiM0MzsJfQomIzQzOwlvZl9ub2RlX3BvcHVsYXRlZCA9ICEhcGh5ZGV2LSZndDttZGlvLmRldi5vZl9ub2RlOwogI2VuZGlmCiAKIAkvKiBTZWFyY2ggZm9yIGEgc3dub2RlIGZvciB0aGUgcGh5IGluIHRoZSBzd25vZGUgaGllcmFyY2h5IG9mIHRoZSBidXMuCkBAIC00MzcsNiAmIzQzOzQ1NCwxMSBAQCBzdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBjNDUpCiAKIAllcnIgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeWRldik7CiAJaWYgKGVycikgewomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19PRl9NRElPKQomIzQzOwkJaWYgKG9mX25vZGVfcG9wdWxhdGVkKQomIzQzOwkJCW9mX25vZGVfY2xlYXJfZmxhZyhwaHlkZXYtJmd0O21kaW8uZGV2Lm9mX25vZGUsCiYjNDM7CQkJCQkgICBPRl9QT1BVTEFURUQpOwomIzQzOyNlbmRpZgogCQlwaHlfZGV2aWNlX2ZyZWUocGh5ZGV2KTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CiAJfQpAQCAtNDU4LDcgJiM0Mzs0ODAsMTcgQEAgc3RhdGljIHN0cnVjdCBwaHlfZGV2aWNlICptZGlvYnVzX3NjYW4oc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgYzQ1KQogICovCiBzdHJ1Y3QgcGh5X2RldmljZSAqbWRpb2J1c19zY2FuX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcikKIHsKLQlyZXR1cm4gbWRpb2J1c19zY2FuKGJ1cywgYWRkciwgZmFsc2UpOwomIzQzOwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwllcnIgPSBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4oYnVzLCBmYWxzZSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihlcnIpOwomIzQzOwomIzQzOwlwaHlkZXYgPSBfX21kaW9idXNfc2NhbihidXMsIGFkZHIsIGZhbHNlKTsKJiM0MzsJbWRpb2J1c19kZXZpY2VfY2hhbmdlX2VuZChidXMsIGZhbHNlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHBoeWRldjsKIH0KIEVYUE9SVF9TWU1CT0wobWRpb2J1c19zY2FuX2MyMik7CiAKQEAgLTQ3Niw3ICYjNDM7NTA4LDcgQEAgRVhQT1JUX1NZTUJPTChtZGlvYnVzX3NjYW5fYzIyKTsKICAqLwogc3RhdGljIHN0cnVjdCBwaHlfZGV2aWNlICptZGlvYnVzX3NjYW5fYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyKQogewotCXJldHVybiBtZGlvYnVzX3NjYW4oYnVzLCBhZGRyLCB0cnVlKTsKJiM0MzsJcmV0dXJuIF9fbWRpb2J1c19zY2FuKGJ1cywgYWRkciwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyBpbnQgbWRpb2J1c19zY2FuX2J1c19jMjIoc3RydWN0IG1paV9idXMgKmJ1cykKQEAgLTQ4Nyw3ICYjNDM7NTE5LDcgQEAgc3RhdGljIGludCBtZGlvYnVzX3NjYW5fYnVzX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzKQogCQlpZiAoKGJ1cy0mZ3Q7cGh5X21hc2sgJmFtcDsgQklUKGkpKSA9PSAwKSB7CiAJCQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwogCi0JCQlwaHlkZXYgPSBtZGlvYnVzX3NjYW5fYzIyKGJ1cywgaSk7CiYjNDM7CQkJcGh5ZGV2ID0gX19tZGlvYnVzX3NjYW4oYnVzLCBpLCBmYWxzZSk7CiAJCQlpZiAoSVNfRVJSKHBoeWRldikgJmFtcDsmYW1wOyAoUFRSX0VSUihwaHlkZXYpICE9IC1FTk9ERVYpKQogCQkJCXJldHVybiBQVFJfRVJSKHBoeWRldik7CiAJCX0KQEAgLTUwNCw3ICYjNDM7NTM2LDcgQEAgc3RhdGljIGludCBtZGlvYnVzX3NjYW5fYnVzX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzKQogCQkJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKIAogCQkJLyogRG9uJiMzOTt0IHNjYW4gQzQ1IGlmIHdlIGFscmVhZHkgaGF2ZSBhIEMyMiBkZXZpY2UgKi8KLQkJCWlmIChidXMtJmd0O21kaW9fbWFwW2ldKQomIzQzOwkJCWlmIChtZGlvYnVzX2lzX3JlZ2lzdGVyZWRfZGV2aWNlKGJ1cywgaSkpCiAJCQkJY29udGludWU7CiAKIAkJCXBoeWRldiA9IG1kaW9idXNfc2Nhbl9jNDUoYnVzLCBpKTsKQEAgLTUzNiw2ICYjNDM7NTY4LDQ0IEBAIHN0YXRpYyBib29sIG1kaW9idXNfcHJldmVudF9jNDVfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzKQogCXJldHVybiBmYWxzZTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG1kaW9idXNfc3RvcF9kZXZpY2VfY2hhbmdlcyhzdHJ1Y3QgbWlpX2J1cyAqYnVzKQomIzQzO3sKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfbG9jayk7CiYjNDM7CWJ1cy0mZ3Q7c3RhdGUgPSBNRElPQlVTX1VOUkVHSVNURVJJTkc7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfbG9jayk7CiYjNDM7CiYjNDM7CXdhaXRfZXZlbnQoYnVzLSZndDttZGlvX21hcF93YWl0LCAhUkVBRF9PTkNFKGJ1cy0mZ3Q7bWRpb19tYXBfb3BzKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1kaW9idXNfcmVtb3ZlX2RldmljZXMoc3RydWN0IG1paV9idXMgKmJ1cykKJiM0Mzt7CiYjNDM7CUxJU1RfSEVBRChyZW1vdmVkKTsKJiM0MzsJc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCAqbmV4dDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBQSFlfTUFYX0FERFI7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQltZGlvZGV2ID0gYnVzLSZndDttZGlvX21hcFtpXTsKJiM0MzsJCWlmICghbWRpb2RldikKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCW1kaW9kZXYtJmd0O2RldmljZV9yZW1vdmUobWRpb2Rldik7CiYjNDM7CQltZGlvZGV2LSZndDtkZXZpY2VfZnJlZShtZGlvZGV2KTsKJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7YnVzLSZndDttZGlvX21hcF9sb2NrKTsKJiM0MzsJbGlzdF9zcGxpY2VfaW5pdCgmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfcmV0aXJlZCwgJmFtcDtyZW1vdmVkKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7YnVzLSZndDttZGlvX21hcF9sb2NrKTsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1kaW9kZXYsIG5leHQsICZhbXA7cmVtb3ZlZCwgcmV0aXJlZF9ub2RlKSB7CiYjNDM7CQlsaXN0X2RlbF9pbml0KCZhbXA7bWRpb2Rldi0mZ3Q7cmV0aXJlZF9ub2RlKTsKJiM0MzsJCW1kaW9fZGV2aWNlX3B1dChtZGlvZGV2KTsKJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7YnVzLSZndDttZGlvX21hcF9sb2NrKTsKJiM0MzsJYnVzLSZndDtzdGF0ZSA9IE1ESU9CVVNfVU5SRUdJU1RFUkVEOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtidXMtJmd0O21kaW9fbWFwX2xvY2spOwomIzQzO30KJiM0MzsKIC8qKgogICogX19tZGlvYnVzX3JlZ2lzdGVyIC0gYnJpbmcgdXAgYWxsIHRoZSBQSFlzIG9uIGEgZ2l2ZW4gYnVzIGFuZCBhdHRhY2ggdGhlbSB0byBidXMKICAqIEBidXM6IHRhcmdldCBtaWlfYnVzCkBAIC01NTIsMTAgJiM0Mzs2MjIsOSBAQCBzdGF0aWMgYm9vbCBtZGlvYnVzX3ByZXZlbnRfYzQ1X3NjYW4oc3RydWN0IG1paV9idXMgKmJ1cykKICAqLwogaW50IF9fbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBzdHJ1Y3QgbW9kdWxlICpvd25lcikKIHsKLQlzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7CiAJc3RydWN0IGdwaW9fZGVzYyAqZ3Bpb2Q7CiAJYm9vbCBwcmV2ZW50X2M0NV9zY2FuOwotCWludCBpLCBlcnI7CiYjNDM7CWludCBlcnI7CiAKIAlpZiAoIWJ1cyB8fCAhYnVzLSZndDtuYW1lKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTU5Niw3ICYjNDM7NjY1LDkgQEAgaW50IF9fbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBzdHJ1Y3QgbW9kdWxlICpvd25lcikKIAkgKgogCSAqIFN0YXRlIHdpbGwgYmUgdXBkYXRlZCBsYXRlciBpbiB0aGlzIGZ1bmN0aW9uIGluIGNhc2Ugb2Ygc3VjY2VzcwogCSAqLwomIzQzOwltdXRleF9sb2NrKCZhbXA7YnVzLSZndDttZGlvX21hcF9sb2NrKTsKIAlidXMtJmd0O3N0YXRlID0gTURJT0JVU19VTlJFR0lTVEVSRUQ7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfbG9jayk7CiAKIAllcnIgPSBkZXZpY2VfcmVnaXN0ZXIoJmFtcDtidXMtJmd0O2Rldik7CiAJaWYgKGVycikgewpAQCAtNjEzLDggJiM0Mzs2ODQsNyBAQCBpbnQgX19tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICpidXMsIHN0cnVjdCBtb2R1bGUgKm93bmVyKQogCQllcnIgPSBkZXZfZXJyX3Byb2JlKCZhbXA7YnVzLSZndDtkZXYsIFBUUl9FUlIoZ3Bpb2QpLAogCQkJCSAgICAmIzM0O21paV9idXMgJXMgY291bGRuJiMzOTt0IGdldCByZXNldCBHUElPXG4mIzM0OywKIAkJCQkgICAgYnVzLSZndDtpZCk7Ci0JCWRldmljZV9kZWwoJmFtcDtidXMtJmd0O2Rldik7Ci0JCXJldHVybiBlcnI7CiYjNDM7CQlnb3RvIGVycm9yX3Jlc2V0X2dwaW9kOwogCX0gZWxzZQlpZiAoZ3Bpb2QpIHsKIAkJYnVzLSZndDtyZXNldF9ncGlvZCA9IGdwaW9kOwogCQlmc2xlZXAoYnVzLSZndDtyZXNldF9kZWxheV91cyk7CkBAIC02MjksNiAmIzQzOzY5OSwxMCBAQCBpbnQgX19tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICpidXMsIHN0cnVjdCBtb2R1bGUgKm93bmVyKQogCQkJZ290byBlcnJvcl9yZXNldF9ncGlvZDsKIAl9CiAKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfbG9jayk7CiYjNDM7CWJ1cy0mZ3Q7c3RhdGUgPSBNRElPQlVTX1JFR0lTVEVSSU5HOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtidXMtJmd0O21kaW9fbWFwX2xvY2spOwomIzQzOwogCWlmIChidXMtJmd0O3JlYWQpIHsKIAkJZXJyID0gbWRpb2J1c19zY2FuX2J1c19jMjIoYnVzKTsKIAkJaWYgKGVycikKQEAgLTY0MywyMCAmIzQzOzcxNywxNyBAQCBpbnQgX19tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICpidXMsIHN0cnVjdCBtb2R1bGUgKm93bmVyKQogCQkJZ290byBlcnJvcjsKIAl9CiAKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfbG9jayk7CiAJYnVzLSZndDtzdGF0ZSA9IE1ESU9CVVNfUkVHSVNURVJFRDsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7YnVzLSZndDttZGlvX21hcF9sb2NrKTsKIAlkZXZfZGJnKCZhbXA7YnVzLSZndDtkZXYsICYjMzQ7cHJvYmVkXG4mIzM0Oyk7CiAJcmV0dXJuIDA7CiAKIGVycm9yOgotCWZvciAoaSA9IDA7IGkgJmx0OyBQSFlfTUFYX0FERFI7IGkmIzQzOyYjNDM7KSB7Ci0JCW1kaW9kZXYgPSBidXMtJmd0O21kaW9fbWFwW2ldOwotCQlpZiAoIW1kaW9kZXYpCi0JCQljb250aW51ZTsKLQotCQltZGlvZGV2LSZndDtkZXZpY2VfcmVtb3ZlKG1kaW9kZXYpOwotCQltZGlvZGV2LSZndDtkZXZpY2VfZnJlZShtZGlvZGV2KTsKLQl9CiBlcnJvcl9yZXNldF9ncGlvZDoKJiM0MzsJbWRpb2J1c19zdG9wX2RldmljZV9jaGFuZ2VzKGJ1cyk7CiYjNDM7CW1kaW9idXNfcmVtb3ZlX2RldmljZXMoYnVzKTsKJiM0MzsKIAkvKiBQdXQgUEhZcyBpbiBSRVNFVCB0byBzYXZlIHBvd2VyICovCiAJaWYgKGJ1cy0mZ3Q7cmVzZXRfZ3Bpb2QpCiAJCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChidXMtJmd0O3Jlc2V0X2dwaW9kLCAxKTsKQEAgLTY2OCwyMSAmIzQzOzczOSwxMSBAQCBFWFBPUlRfU1lNQk9MKF9fbWRpb2J1c19yZWdpc3Rlcik7CiAKIHZvaWQgbWRpb2J1c191bnJlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICpidXMpCiB7Ci0Jc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2OwotCWludCBpOwotCiAJaWYgKFdBUk5fT05fT05DRShidXMtJmd0O3N0YXRlICE9IE1ESU9CVVNfUkVHSVNURVJFRCkpCiAJCXJldHVybjsKLQlidXMtJmd0O3N0YXRlID0gTURJT0JVU19VTlJFR0lTVEVSRUQ7Ci0KLQlmb3IgKGkgPSAwOyBpICZsdDsgUEhZX01BWF9BRERSOyBpJiM0MzsmIzQzOykgewotCQltZGlvZGV2ID0gYnVzLSZndDttZGlvX21hcFtpXTsKLQkJaWYgKCFtZGlvZGV2KQotCQkJY29udGludWU7CiAKLQkJbWRpb2Rldi0mZ3Q7ZGV2aWNlX3JlbW92ZShtZGlvZGV2KTsKLQkJbWRpb2Rldi0mZ3Q7ZGV2aWNlX2ZyZWUobWRpb2Rldik7Ci0JfQomIzQzOwltZGlvYnVzX3N0b3BfZGV2aWNlX2NoYW5nZXMoYnVzKTsKJiM0MzsJbWRpb2J1c19yZW1vdmVfZGV2aWNlcyhidXMpOwogCiAJLyogUHV0IFBIWXMgaW4gUkVTRVQgdG8gc2F2ZSBwb3dlciAqLwogCWlmIChidXMtJmd0O3Jlc2V0X2dwaW9kKQpAQCAtNzAyLDggJiM0Mzs3NjMsMTEgQEAgRVhQT1JUX1NZTUJPTChtZGlvYnVzX3VucmVnaXN0ZXIpOwogICovCiB2b2lkIG1kaW9idXNfZnJlZShzdHJ1Y3QgbWlpX2J1cyAqYnVzKQogewomIzQzOwltdXRleF9sb2NrKCZhbXA7YnVzLSZndDttZGlvX21hcF9sb2NrKTsKJiM0MzsKIAkvKiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIGVycm9yIGhhbmRsaW5nIGluIGRyaXZlcnMuICovCiAJaWYgKGJ1cy0mZ3Q7c3RhdGUgPT0gTURJT0JVU19BTExPQ0FURUQpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfbG9jayk7CiAJCWtmcmVlKGJ1cyk7CiAJCXJldHVybjsKIAl9CkBAIC03MTEsNiAmIzQzOzc3NSw3IEBAIHZvaWQgbWRpb2J1c19mcmVlKHN0cnVjdCBtaWlfYnVzICpidXMpCiAJV0FSTihidXMtJmd0O3N0YXRlICE9IE1ESU9CVVNfVU5SRUdJU1RFUkVELAogCSAgICAgJiMzNDslczogbm90IGluIFVOUkVHSVNURVJFRCBzdGF0ZVxuJiMzNDssIGJ1cy0mZ3Q7aWQpOwogCWJ1cy0mZ3Q7c3RhdGUgPSBNRElPQlVTX1JFTEVBU0VEOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtidXMtJmd0O21kaW9fbWFwX2xvY2spOwogCiAJcHV0X2RldmljZSgmYW1wO2J1cy0mZ3Q7ZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMKaW5kZXggMDYxNTFmMjA3MTM0Ni4uM2IxOWU4MzE1ZjYxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMKQEAgLTE1LDYgJiM0MzsxNSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbWRpby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21paS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9vZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Jlc2V0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwpAQCAtMzMsMTIgJiM0MzszNCwxNiBAQAogc3RhdGljIGludCBtZGlvX2RldmljZV9yZWdpc3Rlcl9yZXNldChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiB7CiAJc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJlc2V0OwomIzQzOwlpbnQgZXJyOwogCiAJLyogRGVhc3NlcnQgdGhlIG9wdGlvbmFsIHJlc2V0IHNpZ25hbCAqLwogCW1kaW9kZXYtJmd0O3Jlc2V0X2dwaW8gPSBncGlvZF9nZXRfb3B0aW9uYWwoJmFtcDttZGlvZGV2LSZndDtkZXYsCiAJCQkJCQkgJiMzNDtyZXNldCYjMzQ7LCBHUElPRF9PVVRfTE9XKTsKLQlpZiAoSVNfRVJSKG1kaW9kZXYtJmd0O3Jlc2V0X2dwaW8pKQotCQlyZXR1cm4gUFRSX0VSUihtZGlvZGV2LSZndDtyZXNldF9ncGlvKTsKJiM0MzsJaWYgKElTX0VSUihtZGlvZGV2LSZndDtyZXNldF9ncGlvKSkgewomIzQzOwkJZXJyID0gUFRSX0VSUihtZGlvZGV2LSZndDtyZXNldF9ncGlvKTsKJiM0MzsJCW1kaW9kZXYtJmd0O3Jlc2V0X2dwaW8gPSBOVUxMOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQogCiAJaWYgKG1kaW9kZXYtJmd0O3Jlc2V0X2dwaW8pCiAJCWdwaW9kX3NldF9jb25zdW1lcl9uYW1lKG1kaW9kZXYtJmd0O3Jlc2V0X2dwaW8sICYjMzQ7UEhZIHJlc2V0JiMzNDspOwpAQCAtMTE2LDYgJiM0MzsxMjEsMTMgQEAgc3RhdGljIHZvaWQgbWRpb19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJa2ZyZWUodG9fbWRpb19kZXZpY2UoZGV2KSk7CiB9CiAKJiM0MztzdGF0aWMgaW50IF9fbWRpb19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IG1kaW9fZGV2aWNlX3JlbW92ZV9keW5hbWljKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldikKJiM0Mzt7CiYjNDM7CXJldHVybiBfX21kaW9fZGV2aWNlX3JlbW92ZShtZGlvZGV2LCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9fZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcikKIHsKIAlzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7CkBAIC0xMzAsOSAmIzQzOzE0MiwxMSBAQCBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9fZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcikKIAltZGlvZGV2LSZndDtkZXYuYnVzID0gJmFtcDttZGlvX2J1c190eXBlOwogCW1kaW9kZXYtJmd0O2RldmljZV9mcmVlID0gbWRpb19kZXZpY2VfZnJlZTsKIAltZGlvZGV2LSZndDtkZXZpY2VfcmVtb3ZlID0gbWRpb19kZXZpY2VfcmVtb3ZlOwomIzQzOwltZGlvZGV2LSZndDtkZXZpY2VfcmVtb3ZlX2R5bmFtaWMgPSBtZGlvX2RldmljZV9yZW1vdmVfZHluYW1pYzsKIAltZGlvZGV2LSZndDtidXMgPSBidXM7CiAJbWRpb2Rldi0mZ3Q7YWRkciA9IGFkZHI7CiAJbWRpb2Rldi0mZ3Q7cmVzZXRfc3RhdGUgPSAtMTsKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDttZGlvZGV2LSZndDtyZXRpcmVkX25vZGUpOwogCiAJZGV2X3NldF9uYW1lKCZhbXA7bWRpb2Rldi0mZ3Q7ZGV2LCBQSFlfSURfRk1ULCBidXMtJmd0O2lkLCBhZGRyKTsKIApAQCAtMTU5LDE5ICYjNDM7MTczLDI3IEBAIGludCBtZGlvX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiAJCXJldHVybiBlcnI7CiAKIAllcnIgPSBkZXZpY2VfYWRkKCZhbXA7bWRpb2Rldi0mZ3Q7ZGV2KTsKLQlpZiAoZXJyKSB7CiYjNDM7CWlmIChlcnIpCiAJCXByX2VycigmIzM0O01ESU8gJWQgZmFpbGVkIHRvIGFkZFxuJiMzNDssIG1kaW9kZXYtJmd0O2FkZHIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyZXR1cm4gMDsKIAotIG91dDoKLQltZGlvYnVzX3VucmVnaXN0ZXJfZGV2aWNlKG1kaW9kZXYpOwotCXJldHVybiBlcnI7CiYjNDM7CXJldHVybiBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lKG1kaW9kZXYsIGVycik7CiB9CiBFWFBPUlRfU1lNQk9MKG1kaW9fZGV2aWNlX3JlZ2lzdGVyKTsKIAomIzQzO3N0YXRpYyBpbnQgX19tZGlvX2RldmljZV9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIGR5bmFtaWMpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwllcnIgPSBtZGlvYnVzX2JlZ2luX3JlbW92ZShtZGlvZGV2LCBkeW5hbWljKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWRldmljZV9kZWwoJmFtcDttZGlvZGV2LSZndDtkZXYpOwomIzQzOwltZGlvYnVzX2ZpbmlzaF9yZW1vdmUobWRpb2RldiwgZHluYW1pYyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qKgogICogbWRpb19kZXZpY2VfcmVtb3ZlIC0gUmVtb3ZlIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIG1kaW8gZGV2aWNlIGZyb20gdGhlCiAgKgkJCU1ESU8gYnVzCkBAIC0xODMsNDIgJiM0MzsyMDUsMjExIEBAIEVYUE9SVF9TWU1CT0wobWRpb19kZXZpY2VfcmVnaXN0ZXIpOwogICovCiB2b2lkIG1kaW9fZGV2aWNlX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiB7Ci0JZGV2aWNlX2RlbCgmYW1wO21kaW9kZXYtJmd0O2Rldik7Ci0JbWRpb2J1c191bnJlZ2lzdGVyX2RldmljZShtZGlvZGV2KTsKJiM0MzsJX19tZGlvX2RldmljZV9yZW1vdmUobWRpb2RldiwgZmFsc2UpOwogfQogRVhQT1JUX1NZTUJPTChtZGlvX2RldmljZV9yZW1vdmUpOwogCiBpbnQgbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KQogewomIzQzOwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpb2Rldi0mZ3Q7YnVzOwogCWludCBlcnI7CiAKLQlpZiAobWRpb2Rldi0mZ3Q7YnVzLSZndDttZGlvX21hcFttZGlvZGV2LSZndDthZGRyXSkKLQkJcmV0dXJuIC1FQlVTWTsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfbG9jayk7CiYjNDM7CWlmIChidXMtJmd0O3N0YXRlICE9IE1ESU9CVVNfUkVHSVNURVJJTkcgJmFtcDsmYW1wOwomIzQzOwkgICAgYnVzLSZndDtzdGF0ZSAhPSBNRElPQlVTX1JFR0lTVEVSRUQpIHsKJiM0MzsJCWVyciA9IC1FTk9ERVY7CiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CX0KJiM0MzsJaWYgKGJ1cy0mZ3Q7bWRpb19tYXBfcmVtb3ZhbHMpIHsKJiM0MzsJCWVyciA9IC1FQlVTWTsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoYnVzLSZndDttZGlvX21hcFttZGlvZGV2LSZndDthZGRyXSB8fAomIzQzOwkgICAgYnVzLSZndDttZGlvX21hcF9wZW5kaW5nICZhbXA7IEJJVChtZGlvZGV2LSZndDthZGRyKSkgewomIzQzOwkJZXJyID0gLUVCVVNZOwomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJ1cy0mZ3Q7bWRpb19tYXBfcGVuZGluZyB8PSBCSVQobWRpb2Rldi0mZ3Q7YWRkcik7CiYjNDM7CWJ1cy0mZ3Q7bWRpb19tYXBfb3BzJiM0MzsmIzQzOzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7YnVzLSZndDttZGlvX21hcF9sb2NrKTsKIAogCWlmIChtZGlvZGV2LSZndDtmbGFncyAmYW1wOyBNRElPX0RFVklDRV9GTEFHX1BIWSkgewogCQllcnIgPSBtZGlvX2RldmljZV9yZWdpc3Rlcl9yZXNldChtZGlvZGV2KTsKLQkJaWYgKGVycikKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQltZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lKG1kaW9kZXYsIGVycik7CiAJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQogCiAJCS8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovCiAJCW1kaW9fZGV2aWNlX3Jlc2V0KG1kaW9kZXYsIDEpOwogCX0KIAotCW1kaW9kZXYtJmd0O2J1cy0mZ3Q7bWRpb19tYXBbbWRpb2Rldi0mZ3Q7YWRkcl0gPSBtZGlvZGV2OwomIzQzOwltdXRleF9sb2NrKCZhbXA7YnVzLSZndDttZGlvX21hcF9sb2NrKTsKJiM0MzsJLyogVGVhcmRvd24gd2FpdHMgZm9yIHRoaXMgcmVnaXN0cmF0aW9uIGJlZm9yZSBjb25zdW1pbmcgdGhlIG1hcC4gKi8KJiM0MzsJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDtidXMtJmd0O21kaW9fbWFwW21kaW9kZXYtJmd0O2FkZHJdLCBtZGlvZGV2KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7YnVzLSZndDttZGlvX21hcF9sb2NrKTsKIAogCXJldHVybiAwOwomIzQzOwomIzQzO291dF91bmxvY2s6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfbG9jayk7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKLWludCBtZGlvYnVzX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldikKJiM0MzsvKioKJiM0MzsgKiBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4gLSBzdGFydCBjaGFuZ2luZyBkZXZpY2VzIG9uIGEgcmVnaXN0ZXJlZCBidXMKJiM0MzsgKiBAYnVzOiBNRElPIGJ1cyB0aGF0IHdpbGwgYmUgc2Nhbm5lZCBvciBjaGFuZ2VkCiYjNDM7ICogQHJlbW92aW5nOiB3aGV0aGVyIFBIWSBhdHRhY2htZW50IG11c3QgYmUgYmxvY2tlZCBkdXJpbmcgdGhlIGNoYW5nZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIHdoZW4gdGhlIGJ1cyBpcyB1bmF2YWlsYWJsZQomIzQzOyAqLwomIzQzO2ludCBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4oc3RydWN0IG1paV9idXMgKmJ1cywgYm9vbCByZW1vdmluZykKIHsKLQlpZiAobWRpb2Rldi0mZ3Q7YnVzLSZndDttZGlvX21hcFttZGlvZGV2LSZndDthZGRyXSAhPSBtZGlvZGV2KQotCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtidXMtJmd0O21kaW9fbWFwX2xvY2spOwomIzQzOwlpZiAoYnVzLSZndDtzdGF0ZSAhPSBNRElPQlVTX1JFR0lTVEVSRUQpIHsKJiM0MzsJCWVyciA9IC1FTk9ERVY7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlidXMtJmd0O21kaW9fbWFwX29wcyYjNDM7JiM0Mzs7CiYjNDM7CQlpZiAocmVtb3ZpbmcpCiYjNDM7CQkJYnVzLSZndDttZGlvX21hcF9yZW1vdmFscyYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7YnVzLSZndDttZGlvX21hcF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKTsKIAotCW1kaW9fZGV2aWNlX3VucmVnaXN0ZXJfcmVzZXQobWRpb2Rldik7CiYjNDM7c3RhdGljIHZvaWQgbWRpb2J1c19vcGVyYXRpb25fZG9uZV9sb2NrZWQoc3RydWN0IG1paV9idXMgKmJ1cykKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtidXMtJmd0O21kaW9fbWFwX2xvY2spOwogCi0JbWRpb2Rldi0mZ3Q7YnVzLSZndDttZGlvX21hcFttZGlvZGV2LSZndDthZGRyXSA9IE5VTEw7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIWJ1cy0mZ3Q7bWRpb19tYXBfb3BzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsJYnVzLSZndDttZGlvX21hcF9vcHMtLTsKJiM0MzsJaWYgKCFidXMtJmd0O21kaW9fbWFwX29wcykKJiM0MzsJCXdha2VfdXBfYWxsKCZhbXA7YnVzLSZndDttZGlvX21hcF93YWl0KTsKJiM0Mzt9CiAKLQlyZXR1cm4gMDsKJiM0MzsvKioKJiM0MzsgKiBtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kIC0gZmluaXNoIGNoYW5naW5nIGRldmljZXMgb24gYW4gTURJTyBidXMKJiM0MzsgKiBAYnVzOiBNRElPIGJ1cyBwcmV2aW91c2x5IHBhc3NlZCB0byBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4oKQomIzQzOyAqIEByZW1vdmluZzogdmFsdWUgcGFzc2VkIHRvIG1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbigpCiYjNDM7ICovCiYjNDM7dm9pZCBtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kKHN0cnVjdCBtaWlfYnVzICpidXMsIGJvb2wgcmVtb3ZpbmcpCiYjNDM7ewomIzQzOwltdXRleF9sb2NrKCZhbXA7YnVzLSZndDttZGlvX21hcF9sb2NrKTsKJiM0MzsJaWYgKHJlbW92aW5nKSB7CiYjNDM7CQlpZiAoIVdBUk5fT05fT05DRSghYnVzLSZndDttZGlvX21hcF9yZW1vdmFscykpCiYjNDM7CQkJYnVzLSZndDttZGlvX21hcF9yZW1vdmFscy0tOwomIzQzOwl9CiYjNDM7CW1kaW9idXNfb3BlcmF0aW9uX2RvbmVfbG9ja2VkKGJ1cyk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfbG9jayk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmQpOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1kaW9idXNfb3BlcmF0aW9uX2RvbmUoc3RydWN0IG1paV9idXMgKmJ1cykKJiM0Mzt7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtidXMtJmd0O21kaW9fbWFwX2xvY2spOwomIzQzOwltZGlvYnVzX29wZXJhdGlvbl9kb25lX2xvY2tlZChidXMpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtidXMtJmd0O21kaW9fbWFwX2xvY2spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtZGlvYnVzX3VucHVibGlzaF9kZXZpY2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG1paV9idXMgKmJ1cyA9IG1kaW9kZXYtJmd0O2J1czsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChidXMtJmd0O21kaW9fbWFwW21kaW9kZXYtJmd0O2FkZHJdID09IG1kaW9kZXYpCiYjNDM7CQlXUklURV9PTkNFKGJ1cy0mZ3Q7bWRpb19tYXBbbWRpb2Rldi0mZ3Q7YWRkcl0sIE5VTEwpOwomIzQzOwlpZiAobWRpb2Rldi0mZ3Q7ZGV2Lm9mX25vZGUpCiYjNDM7CQlvZl9ub2RlX2NsZWFyX2ZsYWcobWRpb2Rldi0mZ3Q7ZGV2Lm9mX25vZGUsIE9GX1BPUFVMQVRFRCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgaW50IGVycikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICpidXMgPSBtZGlvZGV2LSZndDtidXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtidXMtJmd0O21kaW9fbWFwX2xvY2spOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCEoYnVzLSZndDttZGlvX21hcF9wZW5kaW5nICZhbXA7IEJJVChtZGlvZGV2LSZndDthZGRyKSkpKQomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJbWRpb2J1c191bnB1Ymxpc2hfZGV2aWNlKG1kaW9kZXYpOwomIzQzOwllbHNlCiYjNDM7CQlXQVJOX09OX09OQ0UoYnVzLSZndDttZGlvX21hcFttZGlvZGV2LSZndDthZGRyXSAhPSBtZGlvZGV2KTsKJiM0MzsKJiM0MzsJYnVzLSZndDttZGlvX21hcF9wZW5kaW5nICZhbXA7PSB+QklUKG1kaW9kZXYtJmd0O2FkZHIpOwomIzQzOwomIzQzO291dF91bmxvY2s6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfbG9jayk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWlmIChtZGlvZGV2LSZndDtmbGFncyAmYW1wOyBNRElPX0RFVklDRV9GTEFHX1BIWSkgewomIzQzOwkJCW1kaW9fZGV2aWNlX3Jlc2V0KG1kaW9kZXYsIDEpOwomIzQzOwkJCW1kaW9fZGV2aWNlX3VucmVnaXN0ZXJfcmVzZXQobWRpb2Rldik7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJbWRpb2J1c19vcGVyYXRpb25fZG9uZShidXMpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWRpb2J1c19iZWdpbl9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIGR5bmFtaWMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpb2Rldi0mZ3Q7YnVzOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfbG9jayk7CiYjNDM7CWlmIChkeW5hbWljICZhbXA7JmFtcDsgKGJ1cy0mZ3Q7c3RhdGUgPT0gTURJT0JVU19VTlJFR0lTVEVSRUQgfHwKJiM0MzsJCQlidXMtJmd0O3N0YXRlID09IE1ESU9CVVNfUkVMRUFTRUQpKSB7CiYjNDM7CQllcnIgPSAtRU5PREVWOwomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzOwl9CiYjNDM7CWlmIChidXMtJmd0O21kaW9fbWFwX3BlbmRpbmcgJmFtcDsgQklUKG1kaW9kZXYtJmd0O2FkZHIpKSB7CiYjNDM7CQllcnIgPSAtRUJVU1k7CiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGJ1cy0mZ3Q7bWRpb19tYXBbbWRpb2Rldi0mZ3Q7YWRkcl0gIT0gbWRpb2RldikgewomIzQzOwkJZXJyID0gLUVOT0RFVjsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZHluYW1pYyAmYW1wOyZhbXA7IG1kaW9kZXYtJmd0O2ZsYWdzICZhbXA7IE1ESU9fREVWSUNFX0ZMQUdfUEhZICZhbXA7JmFtcDsKJiM0MzsJICAgIHRvX3BoeV9kZXZpY2UoJmFtcDttZGlvZGV2LSZndDtkZXYpLSZndDthdHRhY2hlZCkgewomIzQzOwkJZXJyID0gLUVCVVNZOwomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1kaW9idXNfdW5wdWJsaXNoX2RldmljZShtZGlvZGV2KTsKJiM0MzsKJiM0MzsJaWYgKGR5bmFtaWMpIHsKJiM0MzsJCW1kaW9fZGV2aWNlX2dldChtZGlvZGV2KTsKJiM0MzsJCWxpc3RfYWRkX3RhaWwoJmFtcDttZGlvZGV2LSZndDtyZXRpcmVkX25vZGUsICZhbXA7YnVzLSZndDttZGlvX21hcF9yZXRpcmVkKTsKJiM0MzsJfQomIzQzOwomIzQzO291dF91bmxvY2s6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfbG9jayk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbWRpb2J1c19maW5pc2hfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKQomIzQzO3sKJiM0MzsJc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZTsKJiM0MzsKJiM0MzsJaWYgKG1kaW9kZXYtJmd0O2ZsYWdzICZhbXA7IE1ESU9fREVWSUNFX0ZMQUdfUEhZKQomIzQzOwkJbWRpb19kZXZpY2VfdW5yZWdpc3Rlcl9yZXNldChtZGlvZGV2KTsKJiM0MzsKJiM0MzsJLyogRG8gbm90IGtlZXAgYW4gb3ZlcmxheSBub2RlIGFsaXZlIHdpdGggdGhlIHJldGlyZWQgZGV2aWNlLiAqLwomIzQzOwlpZiAoZHluYW1pYykgewomIzQzOwkJZndub2RlID0gZGV2X2Z3bm9kZSgmYW1wO21kaW9kZXYtJmd0O2Rldik7CiYjNDM7CQlkZXZpY2Vfc2V0X25vZGUoJmFtcDttZGlvZGV2LSZndDtkZXYsIE5VTEwpOwomIzQzOwkJZndub2RlX2hhbmRsZV9wdXQoZndub2RlKTsKJiM0MzsJfQogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCmluZGV4IDk0YjJlODVlMDBhMzcuLjNiMTgyOTU3YzNkZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwpAQCAtMjI3LDYgJiM0MzsyMjcsOCBAQCBzdGF0aWMgdm9pZCBwaHlfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogCWtmcmVlKHRvX3BoeV9kZXZpY2UoZGV2KSk7CiB9CiAKJiM0MztzdGF0aWMgaW50IF9fcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBkeW5hbWljKTsKJiM0MzsKIHN0YXRpYyB2b2lkIHBoeV9tZGlvX2RldmljZV9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KQogewogCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CkBAIC0yMzUsNiAmIzQzOzIzNywxNCBAQCBzdGF0aWMgdm9pZCBwaHlfbWRpb19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldikKIAlwaHlfZGV2aWNlX3JlbW92ZShwaHlkZXYpOwogfQogCiYjNDM7c3RhdGljIGludCBwaHlfbWRpb19kZXZpY2VfcmVtb3ZlX2R5bmFtaWMoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKJiM0MzsKJiM0MzsJcGh5ZGV2ID0gY29udGFpbmVyX29mKG1kaW9kZXYsIHN0cnVjdCBwaHlfZGV2aWNlLCBtZGlvKTsKJiM0MzsJcmV0dXJuIF9fcGh5X2RldmljZV9yZW1vdmUocGh5ZGV2LCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZ2VucGh5X2RyaXZlcjsKIAogc3RhdGljIExJU1RfSEVBRChwaHlfZml4dXBfbGlzdCk7CkBAIC03NjgsNyAmIzQzOzc3OCw5IEBAIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlfZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgdTMyIHBoeV9pZCwKIAltZGlvZGV2LSZndDtmbGFncyA9IE1ESU9fREVWSUNFX0ZMQUdfUEhZOwogCW1kaW9kZXYtJmd0O2RldmljZV9mcmVlID0gcGh5X21kaW9fZGV2aWNlX2ZyZWU7CiAJbWRpb2Rldi0mZ3Q7ZGV2aWNlX3JlbW92ZSA9IHBoeV9tZGlvX2RldmljZV9yZW1vdmU7CiYjNDM7CW1kaW9kZXYtJmd0O2RldmljZV9yZW1vdmVfZHluYW1pYyA9IHBoeV9tZGlvX2RldmljZV9yZW1vdmVfZHluYW1pYzsKIAltZGlvZGV2LSZndDtyZXNldF9zdGF0ZSA9IC0xOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO21kaW9kZXYtJmd0O3JldGlyZWRfbm9kZSk7CiAKIAlkZXYtJmd0O3NwZWVkID0gU1BFRURfVU5LTk9XTjsKIAlkZXYtJmd0O2R1cGxleCA9IERVUExFWF9VTktOT1dOOwpAQCAtMTEyMSwyNSAmIzQzOzExMzMsNDAgQEAgaW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAllcnIgPSBwaHlfc2Nhbl9maXh1cHMocGh5ZGV2KTsKIAlpZiAoZXJyKSB7CiAJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O2ZhaWxlZCB0byBpbml0aWFsaXplXG4mIzM0Oyk7Ci0JCWdvdG8gb3V0OwomIzQzOwkJcmV0dXJuIG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUoJmFtcDtwaHlkZXYtJmd0O21kaW8sIGVycik7CiAJfQogCiAJZXJyID0gZGV2aWNlX2FkZCgmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXYpOwotCWlmIChlcnIpIHsKJiM0MzsJaWYgKGVycikKIAkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7ZmFpbGVkIHRvIGFkZFxuJiMzNDspOwotCQlnb3RvIG91dDsKLQl9CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUoJmFtcDtwaHlkZXYtJmd0O21kaW8sIGVycik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX3BoeV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZHluYW1pYykKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IG1kaW9idXNfYmVnaW5fcmVtb3ZlKCZhbXA7cGh5ZGV2LSZndDttZGlvLCBkeW5hbWljKTsKJiM0MzsJaWYgKGR5bmFtaWMgJmFtcDsmYW1wOyBlcnIgPT0gLUVCVVNZKQomIzQzOwkJZGV2X3dhcm4oJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2LAomIzQzOwkJCSAmIzM0O2Nhbm5vdCByZW1vdmUgYSBQSFkgd2hpbGUgaXQgaXMgYXR0YWNoZWQgb3IgYmVpbmcgcmVnaXN0ZXJlZFxuJiMzNDspOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJdW5yZWdpc3Rlcl9taWlfdGltZXN0YW1wZXIocGh5ZGV2LSZndDttaWlfdHMpOwomIzQzOwlwc2VfY29udHJvbF9wdXQocGh5ZGV2LSZndDtwc2VjKTsKJiM0MzsKJiM0MzsJZGV2aWNlX2RlbCgmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXYpOwogCi0gb3V0OgogCS8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovCiAJcGh5X2RldmljZV9yZXNldChwaHlkZXYsIDEpOwogCi0JbWRpb2J1c191bnJlZ2lzdGVyX2RldmljZSgmYW1wO3BoeWRldi0mZ3Q7bWRpbyk7Ci0JcmV0dXJuIGVycjsKJiM0MzsJbWRpb2J1c19maW5pc2hfcmVtb3ZlKCZhbXA7cGh5ZGV2LSZndDttZGlvLCBkeW5hbWljKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpOwogCiAvKioKICAqIHBoeV9kZXZpY2VfcmVtb3ZlIC0gUmVtb3ZlIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIHBoeSBkZXZpY2UgZnJvbSB0aGUgTURJTyBidXMKQEAgLTExNTEsMTUgJiM0MzsxMTc4LDcgQEAgRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTsKICAqLwogdm9pZCBwaHlfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogewotCXVucmVnaXN0ZXJfbWlpX3RpbWVzdGFtcGVyKHBoeWRldi0mZ3Q7bWlpX3RzKTsKLQlwc2VfY29udHJvbF9wdXQocGh5ZGV2LSZndDtwc2VjKTsKLQotCWRldmljZV9kZWwoJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2KTsKLQotCS8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovCi0JcGh5X2RldmljZV9yZXNldChwaHlkZXYsIDEpOwotCi0JbWRpb2J1c191bnJlZ2lzdGVyX2RldmljZSgmYW1wO3BoeWRldi0mZ3Q7bWRpbyk7CiYjNDM7CV9fcGh5X2RldmljZV9yZW1vdmUocGh5ZGV2LCBmYWxzZSk7CiB9CiBFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVtb3ZlKTsKIApAQCAtMTczNCw2ICYjNDM7MTc1MywzNiBAQCBzdGF0aWMgYm9vbCBwaHlfZHJ2X3N1cHBvcnRzX2lycShjb25zdCBzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2KQogCXJldHVybiBwaHlkcnYtJmd0O2NvbmZpZ19pbnRyICZhbXA7JmFtcDsgcGh5ZHJ2LSZndDtoYW5kbGVfaW50ZXJydXB0OwogfQogCiYjNDM7c3RhdGljIGludCBwaHlfY2xhaW0oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiA9ICZhbXA7cGh5ZGV2LSZndDttZGlvOwomIzQzOwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpb2Rldi0mZ3Q7YnVzOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfbG9jayk7CiYjNDM7CWlmIChidXMtJmd0O3N0YXRlICE9IE1ESU9CVVNfUkVHSVNURVJFRCB8fAomIzQzOwkgICAgYnVzLSZndDttZGlvX21hcF9yZW1vdmFscyB8fAomIzQzOwkgICAgYnVzLSZndDttZGlvX21hcFttZGlvZGV2LSZndDthZGRyXSAhPSBtZGlvZGV2IHx8CiYjNDM7CSAgICAoYnVzLSZndDttZGlvX21hcF9wZW5kaW5nICZhbXA7IEJJVChtZGlvZGV2LSZndDthZGRyKSkpCiYjNDM7CQllcnIgPSAtRU5PREVWOwomIzQzOwllbHNlIGlmIChwaHlkZXYtJmd0O2F0dGFjaGVkKQomIzQzOwkJZXJyID0gLUVCVVNZOwomIzQzOwllbHNlCiYjNDM7CQlwaHlkZXYtJmd0O2F0dGFjaGVkID0gdHJ1ZTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7YnVzLSZndDttZGlvX21hcF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcGh5X3JlbGVhc2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtJmd0O21kaW8uYnVzOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7YnVzLSZndDttZGlvX21hcF9sb2NrKTsKJiM0MzsJcGh5ZGV2LSZndDthdHRhY2hlZCA9IGZhbHNlOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtidXMtJmd0O21kaW9fbWFwX2xvY2spOwomIzQzO30KJiM0MzsKIC8qKgogICogcGh5X2F0dGFjaF9kaXJlY3QgLSBhdHRhY2ggYSBuZXR3b3JrIGRldmljZSB0byBhIGdpdmVuIFBIWSBkZXZpY2UgcG9pbnRlcgogICogQGRldjogbmV0d29yayBkZXZpY2UgdG8gYXR0YWNoCkBAIC0xNzU1LDYgJiM0MzsxODA0LDcgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiAJc3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi0mZ3Q7bWRpby5idXM7CiAJc3RydWN0IGRldmljZSAqZCA9ICZhbXA7cGh5ZGV2LSZndDttZGlvLmRldjsKIAlzdHJ1Y3QgbW9kdWxlICpuZGV2X293bmVyID0gTlVMTDsKJiM0MzsJYm9vbCBjbGFpbWVkID0gZmFsc2U7CiAJaW50IGVycjsKIAogCS8qIEZvciBFdGhlcm5ldCBkZXZpY2UgZHJpdmVycyB0aGF0IHJlZ2lzdGVyIHRoZWlyIG93biBNRElPIGJ1cywgd2UKQEAgLTE3NzAsNiAmIzQzOzE4MjAsMTMgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiAJfQogCiAJZ2V0X2RldmljZShkKTsKJiM0MzsJZXJyID0gcGh5X2NsYWltKHBoeWRldik7CiYjNDM7CWlmIChlcnIgPT0gLUVCVVNZKQomIzQzOwkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7UEhZIGFscmVhZHkgYXR0YWNoZWRcbiYjMzQ7KTsKJiM0MzsJaWYgKCFlcnIpCiYjNDM7CQljbGFpbWVkID0gdHJ1ZTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyb3JfcHV0X2RldmljZTsKIAogCS8qIEFzc3VtZSB0aGF0IGlmIHRoZXJlIGlzIG5vIGRyaXZlciwgdGhhdCBpdCBkb2VzbiYjMzk7dAogCSAqIGV4aXN0LCBhbmQgd2Ugc2hvdWxkIHVzZSB0aGUgZ2VucGh5IGRyaXZlci4KQEAgLTE3OTgsMTIgJiM0MzsxODU1LDYgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiAJCQlnb3RvIGVycm9yX21vZHVsZV9wdXQ7CiAJfQogCi0JaWYgKHBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2KSB7Ci0JCWRldl9lcnIoJmFtcDtkZXYtJmd0O2RldiwgJiMzNDtQSFkgYWxyZWFkeSBhdHRhY2hlZFxuJiMzNDspOwotCQllcnIgPSAtRUJVU1k7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCiAJcGh5ZGV2LSZndDtwaHlfbGlua19jaGFuZ2UgPSBwaHlfbGlua19jaGFuZ2U7CiAJaWYgKGRldikgewogCQlwaHlkZXYtJmd0O2F0dGFjaGVkX2RldiA9IGRldjsKQEAgLTE4OTksNiAmIzQzOzE5NTAsOCBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKIAlwaHlkZXYtJmd0O2lzX2dlbnBoeV9kcml2ZW4gPSAwOwogCWQtJmd0O2RyaXZlciA9IE5VTEw7CiBlcnJvcl9wdXRfZGV2aWNlOgomIzQzOwlpZiAoY2xhaW1lZCkKJiM0MzsJCXBoeV9yZWxlYXNlKHBoeWRldik7CiAJcHV0X2RldmljZShkKTsKIAlpZiAobmRldl9vd25lciAhPSBidXMtJmd0O293bmVyKQogCQltb2R1bGVfcHV0KGJ1cy0mZ3Q7b3duZXIpOwpAQCAtMTk3Nyw2ICYjNDM7MjAzMCw3IEBAIHZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogCSAqIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGJ5IHJlYWRpbmcgdGhlIHVuZGVybHlpbmcgYnVzIGZpcnN0LgogCSAqLwogCWJ1cyA9IHBoeWRldi0mZ3Q7bWRpby5idXM7CiYjNDM7CXBoeV9yZWxlYXNlKHBoeWRldik7CiAKIAlwdXRfZGV2aWNlKCZhbXA7cGh5ZGV2LSZndDttZGlvLmRldik7CiAJaWYgKGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaWItaW50ZXJuYWwuaCBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaWItaW50ZXJuYWwuaAppbmRleCA2NjRlZDdmYWE1MTg0Li43ZTkxNjFmY2RkOTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5bGliLWludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpYi1pbnRlcm5hbC5oCkBAIC0yNSw3ICYjNDM7MjUsOSBAQCBpbnQgcGh5X3NwZWVkX2Rvd25fY29yZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIHZvaWQgcGh5X2NoZWNrX2Rvd25zaGlmdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIAogaW50IG1kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldik7Ci1pbnQgbWRpb2J1c191bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpOwomIzQzO2ludCBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgaW50IGVycik7CiYjNDM7aW50IG1kaW9idXNfYmVnaW5fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKTsKJiM0Mzt2b2lkIG1kaW9idXNfZmluaXNoX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgZHluYW1pYyk7CiAKIGludCBnZW5waHlfYzQ1X3JlYWRfZWVlX2FkdihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1bnNpZ25lZCBsb25nICphZHYpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvbGludXgvbWRpby5oCmluZGV4IGE3ZDllM2FlMzYyYTUuLmUxOTk2M2FmOGUxMzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWRpby5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWRpby5oCkBAIC04LDYgJiM0Mzs4LDcgQEAKIAogI2luY2x1ZGUgJmx0O3VhcGkvbGludXgvbWRpby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xpc3QuaCZndDsKIAogc3RydWN0IGdwaW9fZGVzYzsKIHN0cnVjdCBtaWlfYnVzOwpAQCAtMzIsNiAmIzQzOzMzLDkgQEAgc3RydWN0IG1kaW9fZGV2aWNlIHsKIAlpbnQgKCpidXNfbWF0Y2gpKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydik7CiAJdm9pZCAoKmRldmljZV9mcmVlKShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpOwogCXZvaWQgKCpkZXZpY2VfcmVtb3ZlKShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpOwomIzQzOwlpbnQgKCpkZXZpY2VfcmVtb3ZlX2R5bmFtaWMpKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldik7CiYjNDM7CS8qIEVudHJ5IGluIG1paV9idXM6Om1kaW9fbWFwX3JldGlyZWQuICovCiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgcmV0aXJlZF9ub2RlOwogCiAJLyogQnVzIGFkZHJlc3Mgb2YgdGhlIE1ESU8gZGV2aWNlICgwLTMxKSAqLwogCWludCBhZGRyOwpAQCAtNjk0LDYgJiM0Mzs2OTgsOCBAQCBzdGF0aWMgaW5saW5lIGludCBtZGlvZGV2X2M0NV93cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiBkZXZhZCwKIAogYm9vbCBtZGlvYnVzX2lzX3JlZ2lzdGVyZWRfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyKTsKIHN0cnVjdCBwaHlfZGV2aWNlICptZGlvYnVzX2dldF9waHkoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpOwomIzQzO2ludCBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4oc3RydWN0IG1paV9idXMgKmJ1cywgYm9vbCByZW1vdmluZyk7CiYjNDM7dm9pZCBtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kKHN0cnVjdCBtaWlfYnVzICpidXMsIGJvb2wgcmVtb3ZpbmcpOwogCiAvKioKICAqIG1kaW9fbW9kdWxlX2RyaXZlcigpIC0gSGVscGVyIG1hY3JvIGZvciByZWdpc3RlcmluZyBtZGlvIGRyaXZlcnMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oCmluZGV4IDVmOGQ2NTg2OGUwZmYuLjA1MDBmODBlMGZhY2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaApAQCAtMjIsNiAmIzQzOzIyLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9taWlfdGltZXN0YW1wZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90aW1lci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93YWl0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGV2aWNlLWlkL21kaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91NjRfc3RhdHNfc3luYy5oJmd0OwpAQCAtMzkxLDcgJiM0MzszOTIsOSBAQCBzdHJ1Y3QgbWlpX2J1cyB7CiAJLyoqIEBzdGF0ZTogU3RhdGUgb2YgYnVzIHN0cnVjdHVyZSAqLwogCWVudW0gewogCQlNRElPQlVTX0FMTE9DQVRFRCA9IDEsCiYjNDM7CQlNRElPQlVTX1JFR0lTVEVSSU5HLAogCQlNRElPQlVTX1JFR0lTVEVSRUQsCiYjNDM7CQlNRElPQlVTX1VOUkVHSVNURVJJTkcsCiAJCU1ESU9CVVNfVU5SRUdJU1RFUkVELAogCQlNRElPQlVTX1JFTEVBU0VELAogCX0gc3RhdGU7CkBAIC00MDEsNiAmIzQzOzQwNCwxOCBAQCBzdHJ1Y3QgbWlpX2J1cyB7CiAKIAkvKiogQG1kaW9fbWFwOiBsaXN0IG9mIGFsbCBNRElPIGRldmljZXMgb24gYnVzICovCiAJc3RydWN0IG1kaW9fZGV2aWNlICptZGlvX21hcFtQSFlfTUFYX0FERFJdOwomIzQzOwkvKiogQG1kaW9fbWFwX3BlbmRpbmc6IGFkZHJlc3NlcyB3aXRoIHJlZ2lzdHJhdGlvbiBpbiBwcm9ncmVzcyAqLwomIzQzOwl1MzIgbWRpb19tYXBfcGVuZGluZzsKJiM0MzsJLyoqIEBtZGlvX21hcF9sb2NrOiBwcm90ZWN0cyB0aGUgTURJTyBkZXZpY2UgbWFwIGFuZCBidXMgc3RhdGUgKi8KJiM0MzsJc3RydWN0IG11dGV4IG1kaW9fbWFwX2xvY2s7CiYjNDM7CS8qKiBAbWRpb19tYXBfd2FpdDogd2FpdCBmb3IgYWN0aXZlIG1hcCBvcGVyYXRpb25zIGR1cmluZyB0ZWFyZG93biAqLwomIzQzOwl3YWl0X3F1ZXVlX2hlYWRfdCBtZGlvX21hcF93YWl0OwomIzQzOwkvKiogQG1kaW9fbWFwX29wczogYWN0aXZlIHJlZ2lzdHJhdGlvbnMgYW5kIGZpcm13YXJlIGNoYW5nZXMgKi8KJiM0MzsJdW5zaWduZWQgaW50IG1kaW9fbWFwX29wczsKJiM0MzsJLyoqIEBtZGlvX21hcF9yZW1vdmFsczogZmlybXdhcmUgcmVtb3ZhbHMgYmxvY2tpbmcgUEhZIGF0dGFjaG1lbnQgKi8KJiM0MzsJdW5zaWduZWQgaW50IG1kaW9fbWFwX3JlbW92YWxzOwomIzQzOwkvKiogQG1kaW9fbWFwX3JldGlyZWQ6IHJlbW92ZWQgZGV2aWNlcyBwaW5uZWQgdW50aWwgYnVzIHRlYXJkb3duICovCiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgbWRpb19tYXBfcmV0aXJlZDsKIAogCS8qKiBAcGh5X21hc2s6IFBIWSBhZGRyZXNzZXMgdG8gYmUgaWdub3JlZCB3aGVuIHByb2JpbmcgKi8KIAl1MzIgcGh5X21hc2s7CkBAIC02NTIsNiAmIzQzOzY2Nyw4IEBAIHN0cnVjdCBwaHlfb2F0YzE0X3NxaV9jYXBhYmlsaXR5IHsKICAqIEBuX3BvcnRzOiBOdW1iZXIgb2YgcG9ydHMgY3VycmVudGx5IGF0dGFjaGVkIHRvIHRoZSBQSFkKICAqIEBtYXhfbl9wb3J0czogTWF4IG51bWJlciBvZiBwb3J0cyB0aGlzIFBIWSBjYW4gZXhwb3NlCiAgKiBAbG9jazogIE11dGV4IGZvciBzZXJpYWxpemF0aW9uIGFjY2VzcyB0byBQSFkKJiM0MzsgKiBAYXR0YWNoZWQ6IFdoZXRoZXIgYSBuZXR3b3JrIGRldmljZSBvciBzdGFuZGFsb25lIHVzZXIgYXR0YWNoZWQgdGhlIFBIWTsKJiM0MzsgKglwcm90ZWN0ZWQgYnkgdGhlIE1ESU8gYnVzIG1hcCBsb2NrCiAgKiBAc3RhdGVfcXVldWU6IFdvcmsgcXVldWUgZm9yIHN0YXRlIG1hY2hpbmUKICAqIEBsaW5rX2Rvd25fZXZlbnRzOiBOdW1iZXIgb2YgdGltZXMgbGluayB3YXMgbG9zdAogICogQHNoYXJlZDogUG9pbnRlciB0byBwcml2YXRlIGRhdGEgc2hhcmVkIGJ5IHBoeXMgaW4gb25lIHBhY2thZ2UKQEAgLTc4MSw2ICYjNDM7Nzk4LDcgQEAgc3RydWN0IHBoeV9kZXZpY2UgewogCXN0cnVjdCBkZWxheWVkX3dvcmsgc3RhdGVfcXVldWU7CiAKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKJiM0MzsJYm9vbCBhdHRhY2hlZDsKIAogCS8qIFRoaXMgbWF5IGJlIG1vZGlmaWVkIHVuZGVyIHRoZSBydG5sIGxvY2sgKi8KIAlib29sIHNmcF9idXNfYXR0YWNoZWQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTk0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogODYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTURJTy9QSFkgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHNlcmllcyB0aGF0IHNpZ25pZmljYW50bHkgdG91Y2hlcyB0aGUgTURJTyBhbmQgUEhZIHN1YnN5c3RlbXMuIEl0IHNlZW1zIHRoaXMgaXMgZm9jdXNlZCBvbiBlbmhhbmNpbmcgZHluYW1pYyBPRiByZWNvbmZpZ3VyYXRpb24gY2FwYWJpbGl0aWVzIGZvciBNRElPIGJ1c2VzLCBsaWtlbHkgdG8gc3VwcG9ydCBkZXZpY2UgdHJlZSBvdmVybGF5cyBhbmQgY2hhbmdlcyBkdXJpbmcgcnVudGltZS4gVGhlIGZpbGVzIGJlaW5nIG1vZGlmaWVkLCBzcGVjaWZpY2FsbHkgYGRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jYCwgYGRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jYCwgYW5kIHNldmVyYWwgb3RoZXJzIGluIHRoZSBgZHJpdmVycy9uZXQvcGh5YCBkaXJlY3RvcnksIGltbWVkaWF0ZWx5IGZsYWcgdGhpcyBhcyBjb3JlIGluZnJhc3RydWN0dXJlLiBJIGNhbiBzZWUgdGhlIGNoYW5nZXMgZGVhbCB3aXRoIGhvdyBNRElPIGRldmljZXMgYXJlIHJlZ2lzdGVyZWQgYW5kIHVucmVnaXN0ZXJlZCwgYWxvbmcgd2l0aCBtb2RpZmljYXRpb25zIHRvIHRoZSBNRElPIGJ1cyBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcy4gVGhleSYjMzk7cmUgYWRkaW5nIG5ldyBtZWNoYW5pc21zIGxpa2UgYG9mX21kaW9fcmVjb25maWdfbXV0ZXhgLCBgb2ZfbWRpb2J1c19ub3RpZnlgLCBhbmQgYG9mX21kaW9idXNfb3ZlcmxheV9ub3RpZnlgIGFuZCBhZGRpbmcgYG1kaW9fbWFwX2xvY2tgIHRvIGBzdHJ1Y3QgbWlpX2J1c2AuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uZmlybSByZWFjaGFiaWxpdHkgYW5kIGZ1bmN0aW9uYWxpdHkuIFNpbmNlIHRoaXMgYWZmZWN0cyBjb3JlIE1ESU8gYW5kIFBIWSBjb2RlLCB3aGljaCBpcyB1c2VkIGJ5IG51bWVyb3VzIG5ldHdvcmtpbmcgZHJpdmVycywgaXQmIzM5O3MgYSBjcml0aWNhbCBhcmVhLiBUaGUgcHJlc2VuY2Ugb2YgZHluYW1pYyBPRiByZWNvbmZpZ3VyYXRpb24gc3VwcG9ydCBpcyBpbXBvcnRhbnQgYmVjYXVzZSB0aG9zZSBjb25maWdzIGFyZSBzZXQgdG8gZW5hYmxlIGR5bmFtaWMgY29uZmlndXJhdGlvbiBjaGFuZ2VzLiBUaGlzIGlzIGluZGljYXRlZCBieSB0aGUgaW52b2x2ZW1lbnQgb2YgYENPTkZJR19PRl9EWU5BTUlDYCwgYENPTkZJR19PRl9PVkVSTEFZYCwgYW5kIGBDT05GSUdfT0ZfTURJT2Agd2hpY2ggaXMga2V5LgoKRGl2aW5nIGRlZXBlciBpbnRvIHRoZSBzcGVjaWZpYyBmaWxlcywgSSBzZWUgdGhhdCBgZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmNgIGhhcyBjcml0aWNhbCBmdW5jdGlvbnMgc3VjaCBhcyBgb2ZfbWRpb2J1c19yZWdpc3Rlcl9jaGlsZGAsIGBvZl9tZGlvYnVzX3NjYW5fcGh5YCwgYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAsIGBvZl9tZGlvYnVzX25vdGlmeWAsIGFuZCBgb2ZfbWRpb2J1c19vdmVybGF5X25vdGlmeWAuIEkgY2FuIGFsc28gc2VlIHRoYXQgb3RoZXIgY29yZSBNRElPL1BIWSBzdWJzeXN0ZW0gY29tcG9uZW50cyBsaWtlIGBtZGlvYnVzX2lzX3JlZ2lzdGVyZWRfZGV2aWNlYCwgYG1kaW9idXNfYWxsb2Nfc2l6ZWAsIGBvZl9tZGlvYnVzX2ZpbmRfcGh5YCwgYF9fbWRpb2J1c19zY2FuYCwgYG1kaW9idXNfc2Nhbl9jMjJgLCBgbWRpb2J1c19zY2FuX2M0NWAsIGBfX21kaW9idXNfcmVnaXN0ZXJgLCBgbWRpb2J1c191bnJlZ2lzdGVyYCwgYG1kaW9idXNfZnJlZWAgYXJlIGludm9sdmVkLiBUaGUgY2hhbmdlcyB0byAgYG1kaW9fZGV2aWNlX3JlZ2lzdGVyYCwgYG1kaW9fZGV2aWNlX3JlbW92ZWAsIGBtZGlvYnVzX3JlZ2lzdGVyX2RldmljZWAsIGBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW5gLCBgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2VuZGAsIGBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lYCwgYG1kaW9idXNfYmVnaW5fcmVtb3ZlYCwgYG1kaW9idXNfZmluaXNoX3JlbW92ZWAsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCwgYHBoeV9kZXZpY2VfcmVtb3ZlYCwgYHBoeV9jbGFpbWAsIGBwaHlfcmVsZWFzZWAsIGBwaHlfYXR0YWNoX2RpcmVjdGAsIGFuZCBgcGh5X2RldGFjaGAgc2VlbSB0byBiZSB0aGUgbW9zdCBpbXBhY3RlZC4KCkdpdmVuIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9uIGNvcmUgZnVuY3Rpb25zLCBmdXp6aW5nIHRoaXMgcGF0Y2ggaXMgYWJzb2x1dGVseSB3b3J0aHdoaWxlLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHNwZWNpZmljIHN5bWJvbHMgYW5kIGZ1bmN0aW9ucyB0aGF0IHJlcHJlc2VudCBrZXkgcG9pbnRzIG9mIGludGVyYWN0aW9uIHdpdGggZHluYW1pYyBPRiBjaGFuZ2VzIGFuZCBkZXZpY2UgcmVnaXN0cmF0aW9uL3JlbW92YWwuIEkgd2lsbCBzcGVjaWZpY2FsbHkgZm9jdXMgb246IGBvZl9tZGlvYnVzX25vdGlmeWAsIGBvZl9tZGlvYnVzX292ZXJsYXlfbm90aWZ5YCwgYG1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbmAsIGBtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kYCwgYG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmVgLCBgbWRpb2J1c19iZWdpbl9yZW1vdmVgLCBgbWRpb2J1c19maW5pc2hfcmVtb3ZlYCwgYHBoeV9jbGFpbWAsIGBwaHlfcmVsZWFzZWAsIGBwaHlfYXR0YWNoX2RpcmVjdGAsIGBwaHlfZGV0YWNoYCwgYG1kaW9idXNfcmVnaXN0ZXJfZGV2aWNlYCwgYG1kaW9fZGV2aWNlX3JlZ2lzdGVyYCwgYW5kIGBtZGlvX2RldmljZV9yZW1vdmVgLgoKRmluYWxseSwgSSBuZWVkIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQgZm9yIHRlc3RpbmcuIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19PRl9EWU5BTUlDYCwgYENPTkZJR19PRl9PVkVSTEFZYCwgYENPTkZJR19PRl9NRElPYCwgYENPTkZJR19QSFlMSUJgLCBhbmQgYENPTkZJR19NRElPX0RFVklDRWAgYXJlIGFsbCBwcm9wZXJseSBzZXQsIGFzIHRob3NlIGFyZSB0aGUgcHJlcmVxdWlzaXRlcyBmb3IgdGhpcyBjb2RlIHRvIGJlIGFjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT0ZfRFlOQU1JQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL29mL0tjb25maWc9Nzg9Y29uZmlnIE9GX0tPQkpcbi0tXG5kcml2ZXJzL29mL0tjb25maWctODItIyBuZWVkIGl0LlxuZHJpdmVycy9vZi9LY29uZmlnOjgzOmNvbmZpZyBPRl9EWU5BTUlDXG5kcml2ZXJzL29mL0tjb25maWctODQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGR5bmFtaWMgZGV2aWNlIHRyZWVzXCYjMzQ7IGlmIE9GX1VOSVRURVNUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE4MTIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqUXVpY2sgQ2hlY2s6IGBPRl9PVkVSTEFZYCoqCgpSaWdodCwgbGV0JiMzOTtzIGp1c3QgZG8gYSBxdWljayBtZW50YWwgY2hlY2suIEZpcnN0IHRoaW5nIEkmIzM5O20gdGhpbmtpbmcgaXMsICYjMzQ7V2hhdCYjMzk7cyB0aGUgc3RhdHVzIG9mIGBPRl9PVkVSTEFZYD8gV2hhdCYjMzk7cyB0aGUgY29udGV4dCBJJiMzOTttIGN1cnJlbnRseSB3b3JraW5nIHdpdGhpbiB0aGF0IHJlcXVpcmVzIG1lIHRvIHRoaW5rIG9mIHRoYXQ/JiMzNDsgSXMgaXQgaW4gYSBjdXJyZW50IGFjdGl2ZSBwcm9qZWN0PyBBbSBJIHVwZGF0aW5nIGFuIGV4aXN0aW5nIHN5c3RlbSwgb3Igc3RhcnRpbmcgc29tZXRoaW5nIG5ldz8gSSYjMzk7bSBub3QgZ29pbmcgdG8gZGl2ZSB0b28gZGVlcCBpbnRvIGFuYWx5c2lzIHlldCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBob3cgdGhpcyBzZXR0aW5nIGlzIGN1cnJlbnRseSBiZWluZyB1c2VkLCBpZiBhdCBhbGwuIEFyZSB0aGVyZSBzcGVjaWZpYyBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBvdmVybGF5IG9uIGEgc3RhbmRhcmQgc2NyZWVuLCBvciBzb21ldGhpbmcgZmFyIG1vcmUgY29tcGxleCBpbnZvbHZpbmcgbXVsdGlwbGUsIGR5bmFtaWNhbGx5IGxvYWRlZCBpbWFnZXMsIGFuZCBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgY29uY2VybnM/CgpPa2F5LCBzbyBJIHdpbGwgbm93IGNvbnNpZGVyIGFsbCB0aGUgcG9zc2liaWxpdGllcyB0aGF0IHNwcmluZyB0byBtaW5kLiBUaW1lIHRvIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPRl9PVkVSTEFZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvb2YvS2NvbmZpZz0xMDI9Y29uZmlnIE9GX1JFU09MVkVcbi0tXG5kcml2ZXJzL29mL0tjb25maWctMTA0LVxuZHJpdmVycy9vZi9LY29uZmlnOjEwNTpjb25maWcgT0ZfT1ZFUkxBWVxuZHJpdmVycy9vZi9LY29uZmlnLTEwNi1cdGJvb2wgXCYjMzQ7RGV2aWNlIFRyZWUgb3ZlcmxheXNcJiMzNDtcbi0tXG5kcml2ZXJzL29mL0tjb25maWctMTE1LVxuZHJpdmVycy9vZi9LY29uZmlnOjExNjpjb25maWcgT0ZfT1ZFUkxBWV9LVU5JVF9URVNUXG5kcml2ZXJzL29mL0tjb25maWctMTE3LVx0dHJpc3RhdGUgXCYjMzQ7RGV2aWNlIFRyZWUgb3ZlcmxheSBLVW5pdCB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyMDYKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyB0aGUgYE9GX01ESU9gIFZhcmlhYmxlKioKCkFscmlnaHQsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB3ZSYjMzk7cmUgb24gdGhlIHJpZ2h0IHRyYWNrIGhlcmUuICpPRl9NRElPKi4uLiB0aGF0IHZhcmlhYmxlIGhhcyBiZWVuIG5hZ2dpbmcgYXQgdGhlIGJhY2sgb2YgbXkgbWluZC4gSXQgY291bGQgYmUgcGl2b3RhbCwgZGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUgYW5kIGRyaXZlciBpbnRlcmFjdGlvbi4gSSBuZWVkIHRvIG1ha2UgYSBxdWljayBzYW5pdHkgY2hlY2suIEkmIzM5O20gdGhpbmtpbmcsIGlzIHRoaXMgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBNRElPIGludGVyZmFjZSBpcyBzdG9yZWQ/IEFyZSB3ZSByZWFkaW5nIGl0LCB3cml0aW5nIGl0LCBvciBib3RoPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgd2hlcmUgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgYXJlIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGlzIHBhcnRpY3VsYXIgdmFyaWFibGUuIFdoYXQgaW1wbGljYXRpb25zIHdvdWxkIGluY29ycmVjdCB2YWx1ZSBoYXZlPyBNZW1vcnkgY29ycnVwdGlvbiBpcyBhbHdheXMgYSBjb25jZXJuLiBJIGNvdWxkIHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRvIHVzZSB0aGUgdmFsdWUuIEkmIzM5O3ZlIGJlZW4gYnVybmVkIGJlZm9yZSBhc3N1bWluZyBzb21ldGhpbmcgb2J2aW91cywgc28gbGV0JiMzOTtzIGp1c3QgZG91YmxlIGNoZWNrIHRoZSBkZWZpbml0aW9uIGFuZCB1c2FnZSBvZiAqT0ZfTURJTyogdG8gcnVsZSBvdXQgdGhlIG9idmlvdXMgY3VscHJpdHMgZmlyc3QuIFRoZW4sIEkgY2FuIGRlbHZlIGRlZXBlciBpbnRvIG1vcmUgY29tcGxleCBkZXBlbmRlbmNpZXMgaWYgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPRl9NRElPJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz05PWNvbmZpZyBGV05PREVfTURJT1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xMy1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxNDpjb25maWcgT0ZfTURJT1xuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE1LVx0ZGVmX3RyaXN0YXRlIE9GXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1NDMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIFBIWSBhbmQgTURJTyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYE9GX01ESU9gIGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCB3aGVuIGBPRmAgaXMsIHdoaWNoIG1ha2VzIHNlbnNlLiBBbmQsIHRoaW5raW5nIGFib3V0IGl0LCBlbmFibGluZyBgT0ZfRFlOQU1JQ2AgYW5kIGBPRl9PVkVSTEFZYCBpcyBnZW5lcmFsbHkgYSBnb29kIGlkZWEgZm9yIGZsZXhpYmlsaXR5LiBgUEhZTElCYCBhbmQgYE1ESU9fREVWSUNFYCBhcmUgcHJldHR5IG11Y2ggc3RhbmRhcmQsIHNvIHdlJiMzOTtyZSBnb29kIHRoZXJlLgoKTm93LCBsZXQmIzM5O3MgcmVmaW5lIHRoZSBGb2N1c1N5bWJvbHMgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSByZWFsbHkgaG9uaW5nIGluIG9uIHRoZSBrZXkgaW50ZXJhY3Rpb25zLiBXZSBuZWVkIHRvIGNvbnNpZGVyOgoKKiAgIGBvZl9tZGlvYnVzX25vdGlmeWAKKiAgIGBvZl9tZGlvYnVzX292ZXJsYXlfbm90aWZ5YAoqICAgYG1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbmAKKiAgIGBtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kYAoqICAgYG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmVgCiogICBgbWRpb2J1c19iZWdpbl9yZW1vdmVgCiogICBgbWRpb2J1c19maW5pc2hfcmVtb3ZlYAoqICAgYHBoeV9jbGFpbWAKKiAgIGBwaHlfcmVsZWFzZWAKCldhaXQgYSBtaW51dGUsIGBwaHlfY2xhaW1gIGFuZCBgcGh5X3JlbGVhc2VgIGFyZSBzdGF0aWNhbGx5IGRlZmluZWQuIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgUEhZIGxheWVyLCBzcGVjaWZpY2FsbHkgYXQgYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgIHRvIHNlZSBob3cgdGhvc2UgYXJlIHdvcmtpbmcuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfY2xhaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTc1MT1zdGF0aWMgYm9vbCBwaHlfZHJ2X3N1cHBvcnRzX2lycShjb25zdCBzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTc1NS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTc1NjpzdGF0aWMgaW50IHBoeV9jbGFpbShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzU3LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTE4MDE9aW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODIyLVx0Z2V0X2RldmljZShkKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTgyMzpcdGVyciA9IHBoeV9jbGFpbShwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODI0LVx0aWYgKGVyciA9PSAtRUJVU1kpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzA3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXNzZXNzbWVudCBvZiB0aGUgc2l0dWF0aW9uOgoKKipSZWZpbmluZyBNeSBTeW1ib2wgRm9jdXMqKgoKSSYjMzk7bSByZXZpc2l0aW5nIGhvdyBJJiMzOTttIGhhbmRsaW5nIHN5bWJvbHMgYW5kIHRoZWlyIGluY2x1c2lvbi4gSXQmIzM5O3MgYmVjb21lIGNsZWFyIHRoYXQgYHBoeV9jbGFpbWAgYW5kIGBwaHlfcmVsZWFzZWAgYXJlIHN0YXRpYyBpbiB0aGUgY3VycmVudCBjb250ZXh0LiBUaGF0IG1lYW5zIHRoZXkgZG9uJiMzOTt0IHJlYWxseSBvZmZlciBtZSB0aGUga2luZCBvZiBkeW5hbWljIGluc2lnaHQgSSYjMzk7bSBhZnRlciwgYXQgbGVhc3Qgbm90IHdpdGhpbiB0aGUgYEZvY3VzU3ltYm9sc2AgY29udGV4dC4gU28sIEkmIzM5O2xsIGV4Y2x1ZGUgdGhlbS4gSW5zdGVhZCwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBwb2ludHMgd2hlcmUgdGhlcmUmIzM5O3MgYSBtb3JlIGRpcmVjdCBhc3NvY2lhdGlvbiB3aXRoIHRoZSBkZXZpY2UgbGlmZWN5Y2xlLiBTcGVjaWZpY2FsbHksIGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYCBzZWVtIG11Y2ggbW9yZSByZWxldmFudCBoZXJlLiBUaGV5JiMzOTtyZSB0aGUgY29yZSBvZiBob3cgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgYW5kIGJyb2tlbiwgd2hpY2ggaXMgd2hhdCBJIG5lZWQgdG8gd2F0Y2guCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaW4gb24gYG1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbmAgYW5kIGBtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kYC4gSSB3YW50IHRvIGNvbmZpcm0gdGhleSYjMzk7cmUgbm90IGltcGxpY2l0bHkgcmVsYXRlZCB0byB0aGUgYXR0YWNobWVudC9kZXRhY2htZW50IHByb2Nlc3MsIGFuZCB0aGF0IHRoZXJlIGFyZSBubyBoaWRkZW4gaW50ZXJhY3Rpb25zIHRoYXQgbWlnaHQgYmUgcGVydGluZW50IHRvIG15IGFwcHJvYWNoIGhlcmUuIEEgcXVpY2sgc2NhbiBzaG91bGQgYmUgZW5vdWdoIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jPTIxMj1pbnQgbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTI2MS0vKipcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jOjI2MjogKiBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4gLSBzdGFydCBjaGFuZ2luZyBkZXZpY2VzIG9uIGEgcmVnaXN0ZXJlZCBidXNcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTI2My0gKiBAYnVzOiBNRElPIGJ1cyB0aGF0IHdpbGwgYmUgc2Nhbm5lZCBvciBjaGFuZ2VkXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMjY3LSAqL1xuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MjY4OmludCBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4oc3RydWN0IG1paV9idXMgKmJ1cywgYm9vbCByZW1vdmluZylcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTI2OS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMjgzLX1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jOjI4NDpFWFBPUlRfU1lNQk9MX0dQTChtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4pO1xuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMjg1LVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM9Mjg2PXN0YXRpYyB2b2lkIG1kaW9idXNfb3BlcmF0aW9uX2RvbmVfbG9ja2VkKHN0cnVjdCBtaWlfYnVzICpidXMpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMjk4LSAqIG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmQgLSBmaW5pc2ggY2hhbmdpbmcgZGV2aWNlcyBvbiBhbiBNRElPIGJ1c1xuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6Mjk5OiAqIEBidXM6IE1ESU8gYnVzIHByZXZpb3VzbHkgcGFzc2VkIHRvIG1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbigpXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzozMDA6ICogQHJlbW92aW5nOiB2YWx1ZSBwYXNzZWQgdG8gbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKClcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTMwMS0gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxMjMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgb24gTURJTyBCdXMgU3ltYm9sIEV4cG9ydCoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBleHBvcnRlZCBzeW1ib2xzIGhlcmUsIHdoaWNoIGltbWVkaWF0ZWx5IGZvY3VzZXMgbXkgYXR0ZW50aW9uIG9uIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQgZXh0ZXJuYWxseSBhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgTURJTyBidXMgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgaG93IGl0IGltcGFjdHMgYW55IG1vZHVsZXMgdGhhdCByZWx5IG9uIGl0LgoKTGV0JiMzOTtzIHF1aWNrbHkgZHJpbGwgZG93biBhbmQgbWFrZSBzdXJlIHdlIGhhdmUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHdlbGwgdW5kZXJzdG9vZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGFjcm9zcyB0aGUgdGhyZWUgbWFpbiBmdW5jdGlvbnMgd2hpY2ggY29udHJvbCB0aGUgbGlmZWN5Y2xlOiBJJiMzOTtsbCBjaGVjayBgbWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZWAsIGBtZGlvYnVzX2JlZ2luX3JlbW92ZWAsIGFuZCBgbWRpb2J1c19maW5pc2hfcmVtb3ZlYC4gSSB3YW50IHRvIGNvbmZpcm0gaG93IHRoZXNlIGNvbnRyb2wgdGhlIHJlZ2lzdHJhdGlvbiwgYW5kIHJlbW92YWwsIG9mIHRoaXMgY3JpdGljYWwgY29tcG9uZW50LiBVbmRlcnN0YW5kaW5nIHRoZWlyIGludGVyYWN0aW9uIGlzIGtleS4gVW5kZXJzdGFuZGluZyB0aGUgb3JkZXJpbmcgb2Ygb3BlcmF0aW9ucyBpcyBjcml0aWNhbCB0byBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyBhbmQgZW5zdXJpbmcgcHJvcGVyIHJlc291cmNlIG1hbmFnZW1lbnQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGUgbG9ja2luZyBpcyBpbXBsZW1lbnRlZCwgYW5kIGFsc28gaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIGhvdHBsdWcgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jPTE2NT1pbnQgbWRpb19kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTE3OC1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jOjE3OTpcdHJldHVybiBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lKG1kaW9kZXYsIGVycik7XG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xODAtfVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jPTIxMj1pbnQgbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTI0MC1cdFx0aWYgKGVycikge1xuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MjQxOlx0XHRcdG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUobWRpb2RldiwgZXJyKTtcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTI0Mi1cdFx0XHRyZXR1cm4gZXJyO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jPTMyMT1zdGF0aWMgdm9pZCBtZGlvYnVzX3VucHVibGlzaF9kZXZpY2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTMzMi1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jOjMzMzppbnQgbWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGludCBlcnIpXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0zMzQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc4MgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgSW5uZXIgV29ya2luZ3Mgb2YgcGh5bGliKioKClJpZ2h0LCBzbyB0aGVzZSBjb25jZXB0cywgdGhlc2XigKYgKnRoaW5ncyosIHRoZXkmIzM5O3JlIGRlZmluaXRlbHkgbm90IHN0YXRpYyBjb25zdGFudHMsIGRlZmluZWQgc29tZXdoZXJlIGFuZCByZWFkaWx5IGFjY2Vzc2libGUgbGlrZSBleHBvcnRlZCBzeW1ib2xzLiBUaGF0IG11Y2ggaXMgY2xlYXIuIEJ1dCB0aGV5JiMzOTtyZSBhbHNvICpub3QqIHNvbWV0aGluZyB0aGF0JiMzOTtzIHZpc2libGUgYXQgdGhlIEFQSSBsZXZlbCwgcmVhZGlseSBhY2Nlc3NpYmxlIHRvIGV4dGVybmFsIGRyaXZlcnMgb3IgbW9kdWxlcy4gVGhleSBhcmUgZnVuZGFtZW50YWxseSAqaW50ZXJuYWwqIHRvIHRoZSBgcGh5bGliYCBmcmFtZXdvcmsgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHBoeWxpYmAmIzM5O3MgY29yZSBsb2dpYyBoYW5kbGVzIGFuZCBtYW5hZ2VzIHRoaXMgaW5mb3JtYXRpb24uCgpNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGVsdmUgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gVGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGZpbmQgdGhlIGRlY2xhcmF0aW9ucyBvZiB0aGVzZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgb3IgbWFjcm9zIHdvdWxkIGJlIHRoZSBoZWFkZXIgZmlsZSBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgYHBoeWxpYmAgdXNlLiBHaXZlbiB0aGF0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYGRyaXZlcnMvbmV0L3BoeS9waHlsaWItaW50ZXJuYWwuaGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHNlY3JldHMgc2hvdWxkIGJlLiBJJiMzOTtsbCBzdGFydCB0aGVyZSBhbmQgc2VlIHdoYXQgbnVhbmNlcyBvZiB0aGVzZSBpbnRlcm5hbCBjb25jZXB0cyBjYW4gYmUgcmV2ZWFsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5bGliLWludGVybmFsLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeWxpYi1pbnRlcm5hbC5oPTI3PWludCBtZGlvYnVzX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi1pbnRlcm5hbC5oOjI4OmludCBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgaW50IGVycik7XG5kcml2ZXJzL25ldC9waHkvcGh5bGliLWludGVybmFsLmgtMjktaW50IG1kaW9idXNfYmVnaW5fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUyMDkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnRlcm5hbCBQaHlsaWIgQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGVzZSBjb25jZXB0cyBhbmQgdGhleSYjMzk7cmUgZGVmaW5pdGVseSBpbnRlcm5hbCB0byB0aGUgcGh5bGliIGZyYW1ld29yaywgd2hpY2ggaXMgYSBrZXkgY29uc2lkZXJhdGlvbi4gSSYjMzk7dmUgcmVhbGl6ZWQgdGhlc2UgYXJlbiYjMzk7dCBuZWNlc3NhcmlseSBzdGF0aWMsIHdoaWNoIGdpdmVzIG1lIGFuIGlkZWEuIFRoaW5raW5nIHRocm91Z2ggdGhpcywgaXQgc2VlbXMgcmVhc29uYWJsZSB0byBpbmNsdWRlIHRoZW0gd2l0aGluIHRoZSBGb2N1c1N5bWJvbHMgc3RydWN0dXJlLiBUaGF0IGFsaWducyB3ZWxsIHdpdGggaG93IHRoaW5ncyBhcmUgb3JnYW5pemVkIGFuZCBtYWtlcyBpbnR1aXRpdmUgc2Vuc2UgZm9yIHRoZSBkeW5hbWljIG5hdHVyZSBvZiB0aGVzZSBlbGVtZW50cy4gVG8gbWFrZSBzdXJlIEkmIzM5O20gb24gdGhlIHJpZ2h0IHRyYWNrLCBpdCB3b3VsZCBiZSBhIGdvb2QgaWRlYSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBgb2ZfbWRpb2J1c19ub3RpZnlgIGFuZCBgb2ZfbWRpb2J1c19vdmVybGF5X25vdGlmeWAgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBwYXJ0aWN1bGFyIG51YW5jZSBpbiB0aGVpciBiZWhhdmlvdXIsIG9yIHVzYWdlIHRoYXQgaW5mbHVlbmNlcyBob3cgSSBzaG91bGQgYXBwcm9hY2ggdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2ZfbWRpb2J1c19ub3RpZnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYz02MTU9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBvZl9tZGlvX292ZXJsYXlfbm90aWZpZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNjE5LVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6NjIwOnN0YXRpYyBpbnQgb2ZfbWRpb2J1c19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy02MjEtXHRcdFx0ICAgICB2b2lkICphcmcpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM9Njg0PXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgb2ZfbWRpb19ub3RpZmllciA9IHtcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjY4NTpcdC5ub3RpZmllcl9jYWxsID0gb2ZfbWRpb2J1c19ub3RpZnksXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy02ODYtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU2ODkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTURJT2J1cyBGdW5jdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBzaWZ0aW5nIHRocm91Z2ggdGhlc2UgTURJT2J1cyBmdW5jdGlvbnMsIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyByZWxldmFudC4gSW5pdGlhbGx5LCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1N0YXRpYyBmdW5jdGlvbnM/IEZvcmdldCAmIzM5O2VtLiYjMzQ7IE15IGdvYWwgaXMgdG8gb25seSBsb29rIGF0IHdoYXQmIzM5O3MgZXhwb3NlZCwgdGhlIHB1YmxpYyBpbnRlcmZhY2UsIGlmIHlvdSB3aWxsLiBJIHdhbnQgdG8gYnVpbGQgYSBoaWdoLWxldmVsIHZpZXcgb2YgaG93IHRoZSBidXMgaXMgbWFuYWdlZCwgbm90IGdldCBib2dnZWQgZG93biBpbiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgoKVGhlbiwgdGhlIHN0YXRpYyBuYXR1cmUgb2YgYG9mX21kaW9idXNfYWRkX25vZGVgIGFuZCBgb2ZfbWRpb2J1c19yZW1vdmVfbm9kZWAgdGhyb3dzIG1lIGEgY3VydmViYWxsLCBhbG9uZyB3aXRoIGBvZl9tZGlvYnVzX3JlZ2lzdGVyX2NoaWxkYCBhbmQgYG9mX21kaW9idXNfc2Nhbl9waHlgLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCwgYSBzdGF0aWMgZnVuY3Rpb24gbWlnaHQgYmUgdml0YWwsIGFuZCBpZiBJIG5lZ2xlY3QgdG8gaW5jbHVkZSB0aGUgZnVuY3Rpb24gaW4gbXkgbGlzdCwgaXQgY291bGQgYmUgYSBmYXRhbCBlcnJvci4KCkhvd2V2ZXIsIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgIHN0YW5kcyBvdXQgaW1tZWRpYXRlbHkuIEl0JiMzOTtzIGV4cG9ydGVkLCB3aGljaCBtZWFucyBpdCYjMzk7cyBkZXNpZ25lZCB0byBiZSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIFRoYXQmIzM5O3MgYSBjbGVhciBzaWduYWwgSSBzaG91bGQgbm90ZSB0aGF0LgoKQWxyaWdodCwgYmVmb3JlIGdvaW5nIGFueSBkZWVwZXIsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGZ1bGwgcGljdHVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IGBfX21kaW9idXNfcmVnaXN0ZXJgIGhhcyB0byBzYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWRpb2J1c19yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jPTU4MD1zdGF0aWMgdm9pZCBtZGlvYnVzX3JlbW92ZV9kZXZpY2VzKHN0cnVjdCBtaWlfYnVzICpidXMpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNjA5LS8qKlxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NjEwOiAqIF9fbWRpb2J1c19yZWdpc3RlciAtIGJyaW5nIHVwIGFsbCB0aGUgUEhZcyBvbiBhIGdpdmVuIGJ1cyBhbmQgYXR0YWNoIHRoZW0gdG8gYnVzXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy02MTEtICogQGJ1czogdGFyZ2V0IG1paV9idXNcbi0tXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy02MTUtICogICBvbiBhIGdpdmVuIGJ1cywgYW5kIGF0dGFjaCB0aGVtIHRvIHRoZSBidXMuIERyaXZlcnMgc2hvdWxkIHVzZVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NjE2OiAqICAgbWRpb2J1c19yZWdpc3RlcigpIHJhdGhlciB0aGFuIF9fbWRpb2J1c19yZWdpc3RlcigpIHVubGVzcyB0aGV5XG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy02MTctICogICBuZWVkIHRvIHBhc3MgYSBzcGVjaWZpYyBvd25lciBtb2R1bGUuIE1ESU8gZGV2aWNlcyB3aGljaCBhcmUgbm90XG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNjIyLSAqL1xuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NjIzOmludCBfX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cywgc3RydWN0IG1vZHVsZSAqb3duZXIpXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy02MjQte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTczNy19XG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo3Mzg6RVhQT1JUX1NZTUJPTChfX21kaW9idXNfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNzM5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjUzMwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKk1ESU9idXMgUmVnaXN0cmF0aW9uICZhbXA7IERlcmVnaXN0cmF0aW9uIC0gQSBRdWljayBDaGVjayoqCgpPa2F5LCBzbyBgX19tZGlvYnVzX3JlZ2lzdGVyYCBpcyBleHBsaWNpdGx5IGV4cG9ydGVkLiBUaGF0JiMzOTtzIGdvb2Q7IGl0IG1lYW5zIHdlIGNhbiBpbnRlcmFjdCB3aXRoIGl0IGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgd2hpY2ggaXMgb2Z0ZW4gY3J1Y2lhbCBmb3IgZHJpdmVyIGludGVncmF0aW9uIGFuZCBkeW5hbWljIGRldmljZSBkaXNjb3ZlcnkuIE5vdywgbXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBtYWtlIHN1cmUgd2UmIzM5O3ZlIGNvdmVyZWQgdGhlIGZ1bGwgbGlmZWN5Y2xlLiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGNvcnJlc3BvbmRpbmcgdW5yZWdpc3RyYXRpb24gZnVuY3Rpb24uIExldCYjMzk7cyBkaWcgaW50byBgbWRpb2J1c191bnJlZ2lzdGVyYCBhbmQgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGVyZS4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZSBvZiBob3cgdGhlc2UgYnVzZXMgYXJlIG1hbmFnZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW9idXNfdW5yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jPTczOD1FWFBPUlRfU1lNQk9MKF9fbWRpb2J1c19yZWdpc3Rlcik7XG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy03MzktXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo3NDA6dm9pZCBtZGlvYnVzX3VucmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cylcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTc0MS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNzUzLX1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjc1NDpFWFBPUlRfU1lNQk9MKG1kaW9idXNfdW5yZWdpc3Rlcik7XG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy03NTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTI4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZToKCioqSW52ZXN0aWdhdGluZyB0aGUgTURJTyBCdXMgVW5yZWdpc3RyYXRpb24gUHJvY2VzcyoqCgpPa2F5LCBzbyBgbWRpb2J1c191bnJlZ2lzdGVyYCBpcyBleHBvcnRlZCwgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGV4cGVydGlzZSBsaWVzIGluIGVtYmVkZGVkIHN5c3RlbXMgYW5kIGRldmljZSBkcml2ZXJzLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHVucmVnaXN0cmF0aW9uLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSByZWdpc3RyYXRpb24gY291bnRlcnBhcnRzLiBUbyBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLCBJJiMzOTtsbCBuZWVkIHRvIGFuYWx5emUgYm90aCBgbWRpb19kZXZpY2VfcmVnaXN0ZXJgIGFuZCBgbWRpb19kZXZpY2VfcmVtb3ZlYC4gS25vd2luZyBob3cgZGV2aWNlcyBhcmUgYWRkZWQgYW5kIHJlbW92ZWQgZnJvbSB0aGUgTURJTyBidXMgaXMga2V5IHRvIGdyYXNwaW5nIHRoZSBmdWxsIGxpZmVjeWNsZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIHVucmVnaXN0cmF0aW9uIGZ1bmN0aW9uLiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBBcmUgdGhlcmUgcmFjZSBjb25kaXRpb25zIHRvIHdvcnJ5IGFib3V0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIHRvIGFzc2VzcyB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSB1bnJlZ2lzdGVyIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW9fZGV2aWNlX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMjctLyoqXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoyODogKiBtZGlvX2RldmljZV9yZWdpc3Rlcl9yZXNldCAtIFJlYWQgYW5kIGluaXRpYWxpemUgdGhlIHJlc2V0IHByb3BlcnRpZXMgb2ZcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTI5LSAqXHRcdFx0XHRhbiBtZGlvIGRldmljZVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTMzLSAqL1xuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MzQ6c3RhdGljIGludCBtZGlvX2RldmljZV9yZWdpc3Rlcl9yZXNldChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0zNS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM9MTU3PUVYUE9SVF9TWU1CT0wobWRpb19kZXZpY2VfY3JlYXRlKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xNTktLyoqXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxNjA6ICogbWRpb19kZXZpY2VfcmVnaXN0ZXIgLSBSZWdpc3RlciB0aGUgbWRpbyBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xNjEtICogQG1kaW9kZXY6IG1kaW9fZGV2aWNlIHN0cnVjdHVyZSB0byBiZSBhZGRlZCB0byB0aGUgTURJTyBidXNcbi0tXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xNjQtICovXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxNjU6aW50IG1kaW9fZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTE2Ni17XG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTgwLX1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jOjE4MTpFWFBPUlRfU1lNQk9MKG1kaW9fZGV2aWNlX3JlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTE4Mi1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jPTE4Mz1zdGF0aWMgaW50IF9fbWRpb19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTIwMi0gKiBUaGlzIGRvZXNuJiMzOTt0IGZyZWUgdGhlIG1kaW9fZGV2aWNlIGl0c2VsZiwgaXQgbWVyZWx5IHJldmVyc2VzIHRoZSBlZmZlY3RzXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoyMDM6ICogb2YgbWRpb19kZXZpY2VfcmVnaXN0ZXIoKS4gVXNlIG1kaW9fZGV2aWNlX2ZyZWUoKSB0byBmcmVlIHRoZSBkZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTIwNC0gKiBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM9MjEyPWludCBtZGlvYnVzX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMjM4LVx0aWYgKG1kaW9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IE1ESU9fREVWSUNFX0ZMQUdfUEhZKSB7XG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoyMzk6XHRcdGVyciA9IG1kaW9fZGV2aWNlX3JlZ2lzdGVyX3Jlc2V0KG1kaW9kZXYpO1xuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMjQwLVx0XHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODYzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTURJTyBSZWdpc3RyYXRpb24gYW5kIERlcmVnaXN0cmF0aW9uIC0gQSBRdWljayBDaGVjayoqCgpPa2F5LCBzbyBgbWRpb19kZXZpY2VfcmVnaXN0ZXJgIGlzIGV4cG9ydGVkLCBhcyBleHBlY3RlZC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuIE5vdywgYmVmb3JlIEkgbW92ZSBvbiB0byBhbnkgZGVlcGVyIGFuYWx5c2lzIG9mIHRoZSBNRElPIGludGVyZmFjZSwgbGV0IG1lIGp1c3QgcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29tcGxlbWVudGFyeSBmdW5jdGlvbiwgYG1kaW9fZGV2aWNlX3JlbW92ZWAuIEVuc3VyaW5nIHRoZXNlIHJlZ2lzdHJhdGlvbi9kZXJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMgYmVoYXZlIGFzIGV4cGVjdGVkIGlzIGZ1bmRhbWVudGFsLCBhbmQgaXQgd2lsbCBpbmZvcm0gbXkgYXBwcm9hY2ggdG8gdGhlIHJlc3Qgb2YgdGhpcyBwYXJ0aWN1bGFyIHRhc2suIE5vIHN1cnByaXNlcyB0aGVyZSwgYnV0IGl0JiMzOTtzIGEgY3JpdGljYWwgcG9pbnQgdG8gcXVpY2tseSB2ZXJpZnkgYmVmb3JlIGRpdmluZyBpbnRvIGFueXRoaW5nIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW9fZGV2aWNlX3JlbW92ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jPTExOD1zdGF0aWMgdm9pZCBtZGlvX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xMjMtXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxMjQ6c3RhdGljIGludCBfX21kaW9fZGV2aWNlX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgZHluYW1pYyk7XG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xMjUtXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxMjY6c3RhdGljIGludCBtZGlvX2RldmljZV9yZW1vdmVfZHluYW1pYyhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xMjcte1xuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MTI4Olx0cmV0dXJuIF9fbWRpb19kZXZpY2VfcmVtb3ZlKG1kaW9kZXYsIHRydWUpO1xuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTI5LX1cbi0tXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYz0xMzE9c3RydWN0IG1kaW9fZGV2aWNlICptZGlvX2RldmljZV9jcmVhdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTQzLVx0bWRpb2Rldi1cdTAwM2VkZXZpY2VfZnJlZSA9IG1kaW9fZGV2aWNlX2ZyZWU7XG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxNDQ6XHRtZGlvZGV2LVx1MDAzZWRldmljZV9yZW1vdmUgPSBtZGlvX2RldmljZV9yZW1vdmU7XG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxNDU6XHRtZGlvZGV2LVx1MDAzZWRldmljZV9yZW1vdmVfZHluYW1pYyA9IG1kaW9fZGV2aWNlX3JlbW92ZV9keW5hbWljO1xuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTQ2LVx0bWRpb2Rldi1cdTAwM2VidXMgPSBidXM7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM9MTgxPUVYUE9SVF9TWU1CT0wobWRpb19kZXZpY2VfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTgyLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MTgzOnN0YXRpYyBpbnQgX19tZGlvX2RldmljZV9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIGR5bmFtaWMpXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xODQte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTE5Ny0vKipcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jOjE5ODogKiBtZGlvX2RldmljZV9yZW1vdmUgLSBSZW1vdmUgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgbWRpbyBkZXZpY2UgZnJvbSB0aGVcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTE5OS0gKlx0XHRcdE1ESU8gYnVzXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMjA1LSAqL1xuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MjA2OnZvaWQgbWRpb19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTIwNy17XG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoyMDg6XHRfX21kaW9fZGV2aWNlX3JlbW92ZShtZGlvZGV2LCBmYWxzZSk7XG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0yMDktfVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MjEwOkVYUE9SVF9TWU1CT0wobWRpb19kZXZpY2VfcmVtb3ZlKTtcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTIxMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4MzQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipNRElPIERldmljZSBSZW1vdmFsIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBgbWRpb19kZXZpY2VfcmVtb3ZlYCBpcyBzcGVjaWZpY2FsbHkgZXhwb3J0ZWQsIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGlzLCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgbWFjaGluZXJ5LiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIG9mIHRoZSBQSFkgbGF5ZXIsIG5hdHVyYWxseS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb21wbGVtZW50YXJ5IGZ1bmN0aW9ucyBmb3IgZGV2aWNlIHJlZ2lzdHJhdGlvbiBhbmQgcmVtb3ZhbCB3aXRoaW4gdGhlIFBIWSBjb250ZXh0LiBTcGVjaWZpY2FsbHksIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCBhbmQgYHBoeV9kZXZpY2VfcmVtb3ZlYCBjb21lIHRvIG1pbmQuIEkmIzM5O2xsIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhvc2UgaW50ZXJhY3QgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlIG9mIHdoYXQgdGhpcyBleHBvcnRlZCBgbWRpb19kZXZpY2VfcmVtb3ZlYCBpcyByZWFsbHkgZG9pbmcgaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3MuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBhIGNsZWFudXAgcHJvY2VzcywgYW5kIHRob3NlIHR3byBmdW5jdGlvbiBhcmUgdGhlIHBsYWNlcyB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X2RldmljZV9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTE1PUVYUE9SVF9TWU1CT0woZ2V0X3BoeV9kZXZpY2UpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTExNy0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTExODogKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMTktICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMjAtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMjE6aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEyMi17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTQ0LX1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE0NTpFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTQ2LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTQ3PXN0YXRpYyBpbnQgX19waHlfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGR5bmFtaWMpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTc1LSAqIFRoaXMgZG9lc24mIzM5O3QgZnJlZSB0aGUgcGh5X2RldmljZSBpdHNlbGYsIGl0IG1lcmVseSByZXZlcnNlcyB0aGUgZWZmZWN0c1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTc2OiAqIG9mIHBoeV9kZXZpY2VfcmVnaXN0ZXIoKS4gVXNlIHBoeV9kZXZpY2VfZnJlZSgpIHRvIGZyZWUgdGhlIGRldmljZVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTc3LSAqIGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0NzUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gUEhZIERldmljZSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCBpcyBjbGVhcmx5IHRoZSBleHBvcnRlZCBmdW5jdGlvbiB3ZSYjMzk7cmUgdXNpbmcgdG8gYWRkIGEgbmV3IHBoeXNpY2FsIGxheWVyIGRldmljZSB0byB0aGUgc3lzdGVtLiBUaGF0JiMzOTtzIG91ciBlbnRyeSBwb2ludCwgdGhlIGNyaXRpY2FsIHBpZWNlLiBOb3csIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBhbmQgZW5zdXJlIHByb3BlciBjbGVhbnVwLCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZXNlIGRldmljZXMgYXJlIHJlbW92ZWQuIFRoZSBjb21wbGVtZW50YXJ5IGZ1bmN0aW9uLCB0aGUgb25lIHRoYXQgc2hvdWxkIHVuZG8gd2hhdCBgcGh5X2RldmljZV9yZWdpc3RlcmAgZG9lcywgaXMgb2J2aW91c2x5IGBwaHlfZGV2aWNlX3JlbW92ZWAuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGZvciB0aGF0IG9uZS4gTmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1bnJlZ2lzdHJhdGlvbiBwcm9jZXNzIHRvIGVuc3VyZSBwcm9wZXIgcmVzb3VyY2UgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X2RldmljZV9yZW1vdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjI0PXN0YXRpYyB2b2lkIHBoeV9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMjktXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjIzMDpzdGF0aWMgaW50IF9fcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBkeW5hbWljKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjMxLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yMzI9c3RhdGljIHZvaWQgcGh5X21kaW9fZGV2aWNlX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMzYtXHRwaHlkZXYgPSBjb250YWluZXJfb2YobWRpb2Rldiwgc3RydWN0IHBoeV9kZXZpY2UsIG1kaW8pO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyMzc6XHRwaHlfZGV2aWNlX3JlbW92ZShwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMzgtfVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjQwPXN0YXRpYyBpbnQgcGh5X21kaW9fZGV2aWNlX3JlbW92ZV9keW5hbWljKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI0NC1cdHBoeWRldiA9IGNvbnRhaW5lcl9vZihtZGlvZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSwgbWRpbyk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI0NTpcdHJldHVybiBfX3BoeV9kZXZpY2VfcmVtb3ZlKHBoeWRldiwgdHJ1ZSk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI0Ni19XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTQ1PUVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNDYtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExNDc6c3RhdGljIGludCBfX3BoeV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZHluYW1pYylcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE0OC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTcxLS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTcyOiAqIHBoeV9kZXZpY2VfcmVtb3ZlIC0gUmVtb3ZlIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIHBoeSBkZXZpY2UgZnJvbSB0aGUgTURJTyBidXNcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE3My0gKiBAcGh5ZGV2OiBwaHlfZGV2aWNlIHN0cnVjdHVyZSB0byByZW1vdmVcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNzgtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExNzk6dm9pZCBwaHlfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTgwLXtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE4MTpcdF9fcGh5X2RldmljZV9yZW1vdmUocGh5ZGV2LCBmYWxzZSk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExODItfVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTgzOkVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZW1vdmUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTg0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDM5NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgUEhZIERldmljZSBSZW1vdmFsIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBgcGh5X2RldmljZV9yZW1vdmVgIGlzIGV4cG9zZWQsIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuIFRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBmdW5jdGlvbiBpbXBhY3RzIHRoZSBzeXN0ZW0sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgUEhZIGRldmljZSBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAuIFRoZXNlIGZ1bmN0aW9ucyBsaWtlbHkgcGxheSBhIGNydWNpYWwgcm9sZSBpbiB0aGUgbGlmZWN5Y2xlIGFuZCBkZXBlbmRlbmN5IG1hbmFnZW1lbnQgYXJvdW5kIHJlbW92YWwgYW5kIHdpbGwgaGVscCBpbmZvcm0gdGhlIGltcGFjdCBvZiBhIGNhbGwgdG8gYHBoeV9kZXZpY2VfcmVtb3ZlYC4gQnkgZXhhbWluaW5nIHRoZWlyIGludGVyYWN0aW9ucywgSSBjYW4gc3RhcnQgZm9ybWluZyBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgcmVtb3ZhbCBwcm9jZWR1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9hdHRhY2hfZGlyZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEyNDQ9aW50IHBoeV9jb25uZWN0X2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTI1Mi1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTI1MzpcdHJjID0gcGh5X2F0dGFjaF9kaXJlY3QoZGV2LCBwaHlkZXYsIHBoeWRldi1cdTAwM2VkZXZfZmxhZ3MsIGludGVyZmFjZSk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyNTQtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNzc3PXN0YXRpYyB2b2lkIHBoeV9yZWxlYXNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzg2LS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzg3OiAqIHBoeV9hdHRhY2hfZGlyZWN0IC0gYXR0YWNoIGEgbmV0d29yayBkZXZpY2UgdG8gYSBnaXZlbiBQSFkgZGV2aWNlIHBvaW50ZXJcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTc4OC0gKiBAZGV2OiBuZXR3b3JrIGRldmljZSB0byBhdHRhY2hcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4MDAtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE4MDE6aW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4MDItXHRcdCAgICAgIHUzMiBmbGFncywgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE5NTktfVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxOTYwOkVYUE9SVF9TWU1CT0wocGh5X2F0dGFjaF9kaXJlY3QpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xOTYxLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTk2Ni0gKiBUaGlzIGRldGFjaGVzIHRoZSBwaHkgZGV2aWNlIGZyb20gaXRzIG5ldHdvcmsgZGV2aWNlIGFuZCB0aGUgcGh5XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE5Njc6ICogZHJpdmVyLCBhbmQgZHJvcHMgdGhlIHJlZmVyZW5jZSBjb3VudCB0YWtlbiBpbiBwaHlfYXR0YWNoX2RpcmVjdCgpLlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xOTY4LSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTEwNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpcmVjdCBEZXZpY2UgQXR0YWNobWVudCAmYW1wOyBEZXRhY2htZW50KioKCk9rYXksIHNvIGBwaHlfYXR0YWNoX2RpcmVjdGAgaXMgZXhwb3J0ZWQsIHRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBJdCBtZWFucyBpdCYjMzk7cyBhdmFpbGFibGUgZm9yIG90aGVyIG1vZHVsZXMgb3IgdGhlIGtlcm5lbCB0byB1c2UsIGxpa2VseSBmb3IgZGlyZWN0bHkgY29ubmVjdGluZyBhIHBoeXNpY2FsIGRldmljZSB0byBhIHNwZWNpZmljIGRyaXZlciBvciBzdWJzeXN0ZW0uIE15IG5leHQgdGhvdWdodCBpcywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBhbHNvIHVuZGVyc3RhbmQgdGhlIGNvdW50ZXJwYXJ0LCB0aGUgZnVuY3Rpb24gdXNlZCB0byByZXZlcnNlIHRoaXMgcHJvY2VzczogYHBoeV9kZXRhY2hgLiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBhdHRhY2htZW50IGNhbiBiZSBwcm9wZXJseSB1bmRvbmUgd2hlbiBuZWNlc3NhcnksIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBzeXN0ZW0gc3RhYmlsaXR5IGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXRhY2ggZnVuY3Rpb24mIzM5O3MgYmVoYXZpb3IgdG8gdW5kZXJzdGFuZCB0aGUgZW50aXJlIGF0dGFjaC9kZXRhY2ggbGlmZWN5Y2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfZGV0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTMxMT1zdGF0aWMgYm9vbCBtZGlvX2J1c19waHlfbWF5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMyNy1cdCAqIHN1c3BlbmRlZCBhcyBwYXJ0IG9mIGEgcHJpb3IgY2FsbCB0byBwaHlfZGlzY29ubmVjdCgpIC1cdTAwM2VcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzI4Olx0ICogcGh5X2RldGFjaCgpIC1cdTAwM2UgcGh5X3N1c3BlbmQoKSBiZWNhdXNlIHRoZSBwYXJlbnQgbmV0ZGV2IG1pZ2h0IGJlIHRoZVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMjktXHQgKiBNRElPIGJ1cyBkcml2ZXIgYW5kIGNsb2NrIGdhdGVkIGF0IHRoaXMgcG9pbnQuXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMzEyPXZvaWQgcGh5X2Rpc2Nvbm5lY3Qoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzMjEtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEzMjI6XHRwaHlfZGV0YWNoKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzMjMtfVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTgwMT1pbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4NzUtXHQgKiByZWFkeS4gT25jZSB3ZSBkbyB0aGF0IHdlIHN0aWxsIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE4NzY6XHQgKiBsaW5rcyB3ZXJlIHN1Y2Nlc3NmdWxseSBzZXQgdXAgb3Igbm90IGZvciBwaHlfZGV0YWNoKCkgdG9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTg3Ny1cdCAqIHJlbW92ZSB0aGVtIGFjY29yZGluZ2x5LlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTk0My1lcnJvcjpcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTk0NDpcdC8qIHBoeV9kZXRhY2goKSBkb2VzIGFsbCBvZiB0aGUgY2xlYW51cCBiZWxvdyAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxOTQ1Olx0cGh5X2RldGFjaChwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xOTQ2LVx0cmV0dXJuIGVycjtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTE5NjA9RVhQT1JUX1NZTUJPTChwaHlfYXR0YWNoX2RpcmVjdCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xOTYyLS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxOTYzOiAqIHBoeV9kZXRhY2ggLSBkZXRhY2ggYSBQSFkgZGV2aWNlIGZyb20gaXRzIG5ldHdvcmsgZGV2aWNlXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE5NjQtICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xOTY4LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxOTY5OnZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xOTcwLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIwNDAtfVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyMDQxOkVYUE9SVF9TWU1CT0wocGh5X2RldGFjaCk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIwNDItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDM0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzIFN5bWJvbCBSZWZpbmVtZW50KioKCk9rYXksIHNvIEkgc2VlIGBwaHlfZGV0YWNoYCBpcyBleHBvcnRlZCwgdGhhdCYjMzk7cyBnb29kLiBUaW1lIHRvIHNvbGlkaWZ5IHRoZSBsaXN0IG9mIEZvY3VzU3ltYm9scy4gQmFzZWQgb24gdGhhdCBmYWN0LCBhbmQgd2hhdCBJIGtub3cgYWJvdXQgdGhlIHBoeWxpYiwgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBpbW1lZGlhdGVseSBjb21lIHRvIG1pbmQ6CgoqICAgYF9fbWRpb2J1c19yZWdpc3RlcmAKKiAgIGBtZGlvYnVzX3VucmVnaXN0ZXJgCiogICBgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luYAoqICAgYG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmRgCiogICBgbWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZWAKKiAgIGBtZGlvYnVzX2JlZ2luX3JlbW92ZWAKKiAgIGBtZGlvYnVzX2ZpbmlzaF9yZW1vdmVgCiogICBgbWRpb19kZXZpY2VfcmVnaXN0ZXJgCiogICBgbWRpb19kZXZpY2VfcmVtb3ZlYAoqICAgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgCiogICBgcGh5X2RldmljZV9yZW1vdmVgCiogICBgcGh5X2F0dGFjaF9kaXJlY3RgCiogICBgcGh5X2RldGFjaGAKCkhhbmcgb24gYSBzZWNvbmQuLi4gY2hlY2tpbmcgdGhvc2UgaW50ZXJuYWwgcGh5bGliIGZ1bmN0aW9ucywgbmFtZWx5IGBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lYCwgYG1kaW9idXNfYmVnaW5fcmVtb3ZlYCwgYW5kIGBtZGlvYnVzX2ZpbmlzaF9yZW1vdmVgLCBJIHNlZSB0aGV5ICphcmVuJiMzOTt0KiBzdGF0aWMuIFRoYXQgbWVhbnMgdGhleSYjMzk7cmUgbm90IGZ1bGx5IGludGVybmFsIGFuZCBjYW4gc3RpbGwgYmUgaW5jbHVkZWQuIE9rYXksIG1ha2VzIHNlbnNlLgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBgb2ZfbWRpb2AgY29kZSwgc3BlY2lmaWNhbGx5IGBvZl9tZGlvYnVzX3JlZ2lzdGVyX2NoaWxkYCBhbmQgYG9mX21kaW9idXNfc2Nhbl9waHlgLiBUaGVzZSBhcmUgbWFya2VkIHN0YXRpYywgYnV0IHRoZXkmIzM5O3JlIGNhbGxlZCBmcm9tIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgLiBJbmNsdWRpbmcgYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAgc2hvdWxkIGNvdmVyIHRoYXQganVzdCBmaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX29mX21kaW9idXNfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYz0yMzM9c3RhdGljIGludCBfX29mX21kaW9idXNfcGFyc2VfcGh5cyhzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCxcbi0tXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0yNzctLyoqXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzoyNzg6ICogX19vZl9tZGlvYnVzX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgbWlpX2J1cyBhbmQgY3JlYXRlIFBIWXMgZnJvbSB0aGUgZGV2aWNlIHRyZWVcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTI3OS0gKiBAbWRpbzogcG9pbnRlciB0byBtaWlfYnVzIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTI4NS0gKi9cbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjI4NjppbnQgX19vZl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMjg3LVx0XHRcdCAgc3RydWN0IG1vZHVsZSAqb3duZXIpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMzU4LX1cbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjM1OTpFWFBPUlRfU1lNQk9MKF9fb2ZfbWRpb2J1c19yZWdpc3Rlcik7XG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0zNjAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMDMxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1ESU8gQnVzIFJlZ2lzdHJhdGlvbiBhbmQgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBfX29mX21kaW9idXNfcmVnaXN0ZXJgIGlzIGluZGVlZCBleHBvcnRlZC4gVGhhdCYjMzk7cyBnb29kOyBpdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgSSBuZWVkLiBOb3csIGxldCYjMzk7cyBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW52b2x2ZWQgaW4gdGhpcyBhcmVhLCBqdXN0IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJJiMzOTttIHNlZWluZyBgT0ZfRFlOQU1JQ2AsIGBPRl9PVkVSTEFZYCwgYE9GX01ESU9gLCBgUEhZTElCYCwgYW5kIGBNRElPX0RFVklDRWAgYXMgcmVsZXZhbnQgY29uZmlncy4KClJpZ2h0LCB0aW1lIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYE9GX01ESU9gIHJlbGllcyBvbiBgT0ZgLiBBbmQgeWVzLCB0aGF0JiMzOTtzIHdoYXQgSSB0aG91Z2h0OyBpdCYjMzk7cyBkZXBlbmRlbnQuIE5leHQsIEkgc2hvdWxkIGNoZWNrIGBPRl9EWU5BTUlDYCwganVzdCB0byBiZSBjZXJ0YWluLiBZZXMsIGBPRl9EWU5BTUlDYCBhbHNvIGRlcGVuZHMgb24gYE9GYC4gRmluYWxseSBgT0ZfT1ZFUkxBWWAsIHdoaWNoIGFsc28gcmVxdWlyZXMgYE9GYC4gRXhjZWxsZW50LCB0aG9zZSBhcmUgYWxsIGFzIGV4cGVjdGVkLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9mIGBPRl9NRElPYCwgSSYjMzk7bGwgZ28gaGF2ZSBhIGxvb2sgaW4gYGRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ2AuIEJldHRlciBzYWZlIHRoYW4gc29ycnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPRl9NRElPJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz05PWNvbmZpZyBGV05PREVfTURJT1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xMy1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxNDpjb25maWcgT0ZfTURJT1xuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE1LVx0ZGVmX3RyaXN0YXRlIE9GXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNTM0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVGhpbmtpbmcgb24gRGV2aWNlIFRyZWUgYW5kIFBIWUxJQiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBPRl9NRElPYCBpcyBhIHRyaXN0YXRlIG9wdGlvbiBhbmQgaXMgaW50cmluc2ljYWxseSBsaW5rZWQgdG8gdGhlIGJyb2FkZXIgRGV2aWNlIFRyZWUgKGBPRmApIGNvbmZpZ3VyYXRpb24uIFNpbmNlIGl0JiMzOTtzIGF1dG9tYXRpY2FsbHkgcHVsbGVkIGluIHdoZW4gYE9GYCBpcyBlbmFibGVkLCBJIGRvbiYjMzk7dCBuZWVkIHRvIGV4cGxpY2l0bHkgZGVmaW5lIGl0LiBNeSBmb2N1cywgdGhlbiwgc2hvdWxkIGJlIG9uIHRoZSBjb3JlIERldmljZSBUcmVlIGNvbmZpZ3VyYXRpb25zOiBgT0ZgLCBgT0ZfRFlOQU1JQ2AsIGBPRl9PVkVSTEFZYCwgYFBIWUxJQmAsIGFuZCBgTURJT19ERVZJQ0VgLgoKQWN0dWFsbHksIHdhaXQgYSBtaW51dGUuLi4gVGhpbmtpbmcgYWJvdXQgaXQsIGBPRl9EWU5BTUlDYCBhbmQgYE9GX09WRVJMQVlgIGFyZSBlc3NlbnRpYWxseSBzdXBlcnNldHMgdGhhdCBhbHJlYWR5ICppbXBseSogdGhhdCBgT0ZgIGlzIGVuYWJsZWQuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuIEl0IGxvb2tzIGxpa2UgSSBqdXN0IG5lZWQgdG8gYmUgbWluZGZ1bCBvZiBgUEhZTElCYCBhbmQgZW5zdXJlIHRoYXQmIzM5O3MgY29ycmVjdGx5IGNvbmZpZ3VyZWQgYmFzZWQgb24gdGhlIHRhcmdldCBzeXN0ZW0uIExldCBtZSBkb3VibGUtY2hlY2sgaG93IHRoYXQmIzM5O3MgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBIWUxJQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTY9Y29uZmlnIFBIWUxJTktcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNC1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjE1Om1lbnVjb25maWcgUEhZTElCXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNi1cdHRyaXN0YXRlIFwmIzM0O1BIWSBEZXZpY2Ugc3VwcG9ydCBhbmQgaW5mcmFzdHJ1Y3R1cmVcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZz00Nj1jb25maWcgT1BFTl9BTExJQU5DRV9IRUxQRVJTXG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDgtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo0OTpjb25maWcgUEhZTElCX0xFRFNcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTUwLVx0ZGVmX2Jvb2wgT0ZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQwMDEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFBIWUxJQiBhbmQgTURJT19ERVZJQ0UqKgoKT2theSwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYFBIWUxJQmAgaGVyZSwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBhIG1lbnVjb25maWcgb3B0aW9uLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGRpZ2dpbmcgaW50byB0aGUgaW50cmljYWNpZXMgb2YgaGFyZHdhcmUgYWJzdHJhY3Rpb24gYW5kIGRyaXZlciBzZWxlY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBzcGVjaWZpY2FsbHkgY29udHJvbHMuCgpMZXQmIzM5O3MgZGl2ZSBkZWVwZXIgYW5kIHZlcmlmeSB3aGF0IHByZWNpc2VseSB0aGUgYE1ESU9fREVWSUNFYCBpcyBkb2luZyB3aXRoaW4gdGhpcyBmcmFtZXdvcmsuIFRoaXMgY291bGQgaW52b2x2ZSBkaXJlY3QgYWNjZXNzLCBpbmRpcmVjdCBjb25maWd1cmF0aW9uLCBvciBzb21lIHNvcnQgb2YgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEkmIzM5O20gZ29pbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZSBgTURJT19ERVZJQ0VgIGlzIGEgbmVjZXNzYXJ5IG9yIG9wdGlvbmFsIHNlbGVjdGlvbiB1bmRlciB0aGUgUEhZTElCIHVtYnJlbGxhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRElPX0RFVklDRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyMTQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipQaW5wb2ludGluZyB0aGUgRGVmaW5pdGlvbiBvZiBNRElPX0RFVklDRSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgTURJT19ERVZJQ0VgIGlzIGNvbWluZyBmcm9tLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29kZSYjMzk7cyBiZWhhdmlvciBoZXJlLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpdHMgZGVmaW5pdGlvbiwgYmVjYXVzZSB3aXRob3V0IHRoYXQsIEkmIzM5O20gZXNzZW50aWFsbHkgZmx5aW5nIGJsaW5kLiBLbm93aW5nIHRoZSBjb250ZXh0IG9mIHRoaXMgbWFjcm8gaXMgKmNyaXRpY2FsKi4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZzogd2hlcmUgaXMgaXQgZGVmaW5lZD8gSXMgaXQgaW4gYSBoZWFkZXIgZmlsZT8gQSBjb25maWd1cmF0aW9uIGZpbGU/IEEgcGxhdGZvcm0tc3BlY2lmaWMgaW5jbHVkZT8gVGltZSB0byBnbyBodW50aW5nLiBMZXQmIzM5O3Mgc3RhcnQgdGhlIHNlYXJjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTURJT19ERVZJQ0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDM5MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBNRElPIERyaXZlciBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYE1ESU9fREVWSUNFYOKApiBhbmQgaW1tZWRpYXRlbHkgbXkgbWluZCBqdW1wcyB0byB0aGUgY29uZmlndXJhdGlvbiBzcGFjZS4gU3BlY2lmaWNhbGx5LCB0aGF0IGhhcyB0byBiZSBkZWZpbmVkIGluIGBkcml2ZXJzL25ldC9tZGlvL0tjb25maWdgLCBkb2VzbiYjMzk7dCBpdD8gSXQmIzM5O3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSwgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQuIFRoYXQmIzM5O3Mgd2hlcmUgeW91JiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBkZXBlbmRlbmNpZXMsIGFueSBkZWZhdWx0IHNldHRpbmdzLCBoZWxwIHRleHQsIGFuZCBhbGwgdGhlIHVzdWFsIEtjb25maWcgZ29vZG5lc3MgYXNzb2NpYXRlZCB3aXRoIGEgaGFyZHdhcmUgZmVhdHVyZSBsaWtlIHRoaXMuIEkgYmV0IGl0IGlzIGRlZmluZWQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1ESU9fREVWSUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ2MDgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgUEhZIENvbmZpZ3VyYXRpb24gU3BhY2UqKgoKT2theSwgc28gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCBgTURJT19ERVZJQ0VgIHdhcyBkZWZpbmVkIHdpdGhpbiB0aGUgbmV0d29yayBQSFkgS2NvbmZpZyBmaWxlLiBUaGF0JiMzOTtzIGEgY29tbW9uIGFyZWEgZm9yIHN1Y2ggc2V0dGluZ3MsIGJ1dCBzb21ldGhpbmcgZmVlbHMgb2ZmLiBMZXQmIzM5O3Mgbm90IG1ha2UgYXNzdW1wdGlvbnMuIFRpbWUgdG8gdmVyaWZ5LiBUaGUgbG9naWNhbCBuZXh0IHBsYWNlIHRvIGNoZWNrIHdvdWxkIGJlIHRoZSBgZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZWAuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoYXQgSSYjMzk7dmUganVtcGVkIHRvIGEgY29uY2x1c2lvbiB3aXRob3V0IHZlcmlmeWluZyBhIGtleSBwYXJ0IG9mIHRoZSBjb25maWd1cmF0aW9uIHRyZWUuIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoaXMgaXMgYWN0dWFsbHkgZGVmaW5lZCBiZWZvcmUgcHJvY2VlZGluZy4gVGhpcyBpcyBiYXNpYywgYnV0IGltcG9ydGFudCwgZ29vZCBwcmFjdGljZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpb19kZXZpY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTQ9bGlicGh5LXlcdFx0XHQ6PSBwaHkubyBwaHktYzQ1Lm8gcGh5LWNvcmUubyBwaHlfZGV2aWNlLm8gXFxcbi0tXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtNi1cdFx0XHRcdCAgIHBoeV9jYXBzLm8gbWRpb19idXNfcHJvdmlkZXIubyBwaHlfcG9ydC5vIFxcXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6NzpcdFx0XHRcdCAgIG1kaW9fZGV2aWNlLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS04LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDkyOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVuZGVyc3RhbmRpbmcgdGhlIFBIWS9NRElPIENvcmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBtZGlvX2RldmljZS5vYCBoZXJlLiBSaWdodCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHBhcnQgb2YgYGxpYnBoeS15YCwgd2hpY2gsIG9mIGNvdXJzZSwgaXMgYnVpbHQgd2hlbiBgQ09ORklHX1BIWUxJQmAgaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBzZW5zZSwgY29ubmVjdHMgdGhlIGRvdHMuIEkgcmVtZW1iZXIgdGhpcyBub3cuIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogdGhlIFBIWS9NRElPIGNvcmUgZnVuY3Rpb25hbGl0eSBoaW5nZXMgb24ganVzdCBgQ09ORklHX1BIWUxJQmAuIFRoYXQmIzM5O3MgdGhlIGtleS4gTm93LCBqdXN0IHRvIGNvbmZpcm0sIEkmIzM5O2xsIGdvIGNoZWNrIGhvdyBgT0ZfTURJT2AgaXMgc2V0IHVwIGluIGBkcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlYC4gTmVlZCB0byBiZSBzdXJlIGFsbCB0aGUgcGllY2VzIGFyZSBhY2NvdW50ZWQgZm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvZl9tZGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlPTU9b2JqLSQoQ09ORklHX0ZXTk9ERV9NRElPKVx0JiM0Mzs9IGZ3bm9kZV9tZGlvLm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6NjpvYmotJChDT05GSUdfT0ZfTURJTylcdFx0JiM0Mzs9IG9mX21kaW8ub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZS03LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTI2MgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDI0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBNRElPIENvbmZpZ3VyYXRpb24gYW5kIEtleSBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgTURJTyBjb25maWd1cmF0aW9uLCBhbmQgYENPTkZJR19PRl9NRElPYCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZS4gSXQmIzM5O3MgYSBgZGVmX3RyaXN0YXRlIE9GYCwgd2hpY2ggbWVhbnMgaWYgdGhlIGRldmljZSB0cmVlIHN1cHBvcnQgKGBPRmApIGlzIGVuYWJsZWQsIHRoZW4gYENPTkZJR19PRl9NRElPYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuIFRoYXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSSYjMzk7bGwgZGVmaW5pdGVseSB3YW50IHRvIGluY2x1ZGUgYE9GYCwgYE9GX0RZTkFNSUNgLCBhbmQgYE9GX09WRVJMQVlgLCBzaW5jZSB0aGV54oCZcmUgY29yZSB0byB0aGlzIGZ1bmN0aW9uYWxpdHkuIE9oLCBhbmQgSSBjYW4mIzM5O3QgZm9yZ2V0IGBQSFlMSUJgIGVpdGhlci4gSXQmIzM5O3MgaW50cmluc2ljYWxseSBsaW5rZWQgdG8gUEhZIG1hbmFnZW1lbnQsIHdoaWNoIE1ESU8gY29udHJvbHMuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgb25lcyB0aGF0IHJlcHJlc2VudCB0aGUgY29yZSBvcGVyYXRpb25zOgoqICAgYF9fbWRpb2J1c19yZWdpc3RlcmAgYW5kIGBtZGlvYnVzX3VucmVnaXN0ZXJgOiBUaGVzZSBhcmUgdGhlIG9idmlvdXMgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMgZm9yIHRoZSBNRElPIGJ1cyBpdHNlbGYuCiogICBgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luYCwgYG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmRgOiBTb3VuZHMgbGlrZSB0aGVzZSBoYW5kbGUgY2hhbmdlcyB0byBkZXZpY2VzIG9uIHRoZSBidXMuCiogICBgbWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZWA6IE5lY2Vzc2FyeSBmb3IgY29tcGxldGluZyB0aGUgcmVnaXN0cmF0aW9uLgoqICAgYG1kaW9idXNfYmVnaW5fcmVtb3ZlYCwgYG1kaW9idXNfZmluaXNoX3JlbW92ZWA6IFRoZXNlIGxvb2sgbGlrZSB0aGUgcmVtb3ZhbCBjb3VudGVycGFydHMuCiogICBgbWRpb19kZXZpY2VfcmVnaXN0ZXJgIGFuZCBgbWRpb19kZXZpY2VfcmVtb3ZlYDogVGhlc2Ugd291bGQgcmVnaXN0ZXIgYW5kIHJlbW92ZSBpbmRpdmlkdWFsIE1ESU8gZGV2aWNlcywgcHJlc3VtYWJseSBQSFlzLgoqICAgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgLCBgcGh5X2RldmljZV9yZW1vdmVgOiBJbXBvcnRhbnQgZm9yIGF0dGFjaGluZyBhbmQgZGV0YWNoaW5nIFBIWXMgdG8gdGhlIGJ1cy4KKiAgIGBwaHlfYXR0YWNoX2RpcmVjdGAsIGBwaHlfZGV0YWNoYDogVGhlc2UgZGlyZWN0bHkgYXR0YWNoIG9yIGRldGFjaCBhIFBIWS4KKiAgIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgOiBJbmRpY2F0ZXMgYSBkZXZpY2UgdHJlZSByZWdpc3RyYXRpb24uCgpJIHRoaW5rIEkgaGF2ZSBhIHNvbGlkIG92ZXJ2aWV3IG9mIHRoZSByZWdpc3RyYXRpb24gYW5kIHJlbW92YWwgcHJvY2Vzc2VzLiBJdCYjMzk7cyBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZSBkZXZpY2UgdHJlZSBpbnRlZ3JhdGlvbiBhcyB3ZWxsLCBiYXNlZCBvbiB0aGUgZnVuY3Rpb24gbmFtZXMuCgpIbW0sIGFtIEkgbWlzc2luZyBhbnkgb2J2aW91cyBvbmVzPyBBaCB5ZXMsIGBtZGlvYnVzX3NjYW5fYzIyYCBhbmQgYG1kaW9idXNfc2Nhbl9jNDVgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgZGlzY292ZXJpbmcgZGV2aWNlcyBvbiB0aGUgYnVzLiBUaGV5JiMzOTtyZSBjcml0aWNhbCBmb3IgYWN0dWFsbHkgcG9wdWxhdGluZyB0aGUgTURJTyBidXMgd2l0aCBhdHRhY2hlZCBkZXZpY2VzLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhvc2UgaW4gbWluZCBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvYnVzX3NjYW5fYzIyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM9NDE2PXN0YXRpYyBzdHJ1Y3QgcGh5X2RldmljZSAqX19tZGlvYnVzX3NjYW4oc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDY5LS8qKlxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NDcwOiAqIG1kaW9idXNfc2Nhbl9jMjIgLSBzY2FuIG9uZSBhZGRyZXNzIG9uIGEgYnVzIGZvciBDMjIgTURJTyBkZXZpY2VzLlxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDcxLSAqIEBidXM6IG1paV9idXMgdG8gc2NhblxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ4MC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjQ4MTpzdHJ1Y3QgcGh5X2RldmljZSAqbWRpb2J1c19zY2FuX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ4Mi17XG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDk0LX1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjQ5NTpFWFBPUlRfU1lNQk9MKG1kaW9idXNfc2Nhbl9jMjIpO1xuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDk2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjM3MQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIE1ESU8gQnVzIFNjYW5uaW5nOiBBIFF1aWNrIE1lbnRhbCBDaGVjayoqCgpSaWdodCwgbGV0IG1lIHNlZS4uLiBJJiMzOTttIGN1cnJlbnRseSBsb29raW5nIGF0IHRoZSBNRElPIGJ1cyBjb2RlLiBJIGtub3cgYG1kaW9idXNfc2Nhbl9jMjJgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQsIHRoYXQmIzM5O3MgY2xlYXIuIE5vdyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaWYgd2UmIzM5O3JlIGFsc28gbWFraW5nIGBtZGlvYnVzX3NjYW5fYzQ1YCBhdmFpbGFibGUgb3V0c2lkZSBvZiB0aGUgZHJpdmVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteXNlbGYgb24gdGhlIHZpc2liaWxpdHkgYW5kIHBvc3NpYmxlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIEM0NSBzdXBwb3J0IGluIHRoaXMgcGFydGljdWxhciBjb250ZXh0LiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gY29uZmlybSB3aGV0aGVyIHVzZXJzcGFjZSBvciBvdGhlciBrZXJuZWwgbW9kdWxlcyBjYW4gZGlyZWN0bHkgY2FsbCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpb2J1c19zY2FuX2M0NSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jPTQ5NT1FWFBPUlRfU1lNQk9MKG1kaW9idXNfc2Nhbl9jMjIpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ5Ny0vKipcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjQ5ODogKiBtZGlvYnVzX3NjYW5fYzQ1IC0gc2NhbiBvbmUgYWRkcmVzcyBvbiBhIGJ1cyBmb3IgQzQ1IE1ESU8gZGV2aWNlcy5cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ5OS0gKiBAYnVzOiBtaWlfYnVzIHRvIHNjYW5cbi0tXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy01MDgtICovXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo1MDk6c3RhdGljIHN0cnVjdCBwaHlfZGV2aWNlICptZGlvYnVzX3NjYW5fYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyKVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNTEwLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYz01MzA9c3RhdGljIGludCBtZGlvYnVzX3NjYW5fYnVzX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTU0MS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjU0MjpcdFx0XHRwaHlkZXYgPSBtZGlvYnVzX3NjYW5fYzQ1KGJ1cywgaSk7XG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy01NDMtXHRcdFx0aWYgKElTX0VSUihwaHlkZXYpIFx1MDAyNlx1MDAyNiAoUFRSX0VSUihwaHlkZXYpICE9IC1FTk9ERVYpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjk3NQoJCQkJCQkJb3V0cHV0OiAyOTcKCQkJCQkJCXRob3VnaHRzOiAzMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQbGFuIGZvciBEeW5hbWljIE1ESU8gRGV2aWNlIEhhbmRsaW5nKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCYjMzk7cyBydW5uaW5nIHRocm91Z2ggbXkgaGVhZC4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgY29kZSYjMzk7cyBzdGF0aWMuIExldCYjMzk7cyBzZWUuLi4gdGhlIGF1dGhvciYjMzk7cyBpbmNsdWRpbmcgYG1kaW9idXNfc2Nhbl9jMjJgIOKAkyBnb29kLCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgcmVsZXZhbnQuCgpMZXQgbWUgYnJlYWsgZG93biB0aGUgcmVhc29uaW5nIGZvciB0aGlzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgY3JpdGljYWwgTURJTyBidXMgYW5kIFBIWSBkZXZpY2UgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiBsb2dpYy4gSXQmIzM5O3MgZGVzaWduZWQgdG8gaGFuZGxlIGR5bmFtaWMgRGV2aWNlIFRyZWUgY2hhbmdlcywgc3BlY2lmaWNhbGx5IGJvdGggT0YgZHluYW1pYyAqYW5kKiBvdmVybGF5IGNvbmZpZ3VyYXRpb25zLiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFRoZSBhdXRob3ImIzM5O3MgaW50cm9kdWNlZCBhIGxvY2tpbmcgbWVjaGFuaXNtLCBgbWRpb19tYXBfbG9ja2AsIHRvIHNlcmlhbGl6ZSB0aGVzZSBkZXZpY2UgY2hhbmdlcy4gVGhpcyBpcyAqY3JpdGljYWwqIGluIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGR1cmluZyBQSFkgYXR0YWNobWVudCBhbmQgZGV0YWNobWVudC4gT24gdG9wIG9mIHRoYXQsIHRoZXJlJiMzOTtzIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIFBIWSBhbmQgTURJTyBkZXZpY2Ugc2Nhbm5pbmcgYW5kIHJlZ2lzdHJhdGlvbiBwcm9jZXNzZXMuCgpUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gY29kZSBhbmQgaXQmIzM5O3MgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLCBzbyBpdCBuZWVkcyB0byBiZSBjYXJlZnVsbHkgaW52ZXN0aWdhdGVkLiBNeSBjb25jZXJuIGlzIHRoZSBuZXcgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGxvZ2ljLiBUaGlzIGlzIHdoZXJlIGRlYWRsb2NrcyBhbmQgcmFjZSBjb25kaXRpb25zIGFyZSBsaWtlbHkgdG8gc2hvdyB1cC4gVGhhdCYjMzk7cyAqZXhhY3RseSogd2hhdCBmdXp6aW5nIGlzIGdvb2QgZm9yLgoKTm93LCBmb3IgdGhlIGNvbmZpZ3VyYXRpb25zOiBgT0ZgLCBgT0ZfRFlOQU1JQ2AsIGBPRl9PVkVSTEFZYCwgYW5kIGBQSFlMSUJgLiBUaG9zZSBhcmUgYWxsIGVzc2VudGlhbCBmb3IgdHJpZ2dlcmluZyB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy4KCkkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzIHRvIHRhcmdldCB0aGUgZnV6emluZzogYF9fbWRpb2J1c19yZWdpc3RlcmAsIGBtZGlvYnVzX3VucmVnaXN0ZXJgLCBgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luYCwgYG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmRgLCBgbWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZWAsIGBtZGlvYnVzX2JlZ2luX3JlbW92ZWAsIGBtZGlvYnVzX2ZpbmlzaF9yZW1vdmVgLCBgbWRpb19kZXZpY2VfcmVnaXN0ZXJgLCBgbWRpb19kZXZpY2VfcmVtb3ZlYCwgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgLCBgcGh5X2RldmljZV9yZW1vdmVgLCBgcGh5X2F0dGFjaF9kaXJlY3RgLCBgcGh5X2RldGFjaGAsIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgLCBhbmQgYG1kaW9idXNfc2Nhbl9jMjJgLgoKWWVhaCwgdGhpcyBsb29rcyBzb2xpZC4gSXQmIzM5O3MgZ290IHRoZSByaWdodCBjb25maWd1cmF0aW9ucywgdGhlIHJpZ2h0IGZvY3VzLCBhbmQgYSBjbGVhciByZWFzb24gdG8gcG9rZSBhdCBpdC4gVGltZSB0byBidWlsZCBhIGZ1enogaGFybmVzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09GJiMzNDssCiAgICAmIzM0O09GX0RZTkFNSUMmIzM0OywKICAgICYjMzQ7T0ZfT1ZFUkxBWSYjMzQ7LAogICAgJiMzNDtQSFlMSUImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX21kaW9idXNfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7bWRpb2J1c191bnJlZ2lzdGVyJiMzNDssCiAgICAmIzM0O21kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbiYjMzQ7LAogICAgJiMzNDttZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kJiMzNDssCiAgICAmIzM0O21kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUmIzM0OywKICAgICYjMzQ7bWRpb2J1c19iZWdpbl9yZW1vdmUmIzM0OywKICAgICYjMzQ7bWRpb2J1c19maW5pc2hfcmVtb3ZlJiMzNDssCiAgICAmIzM0O21kaW9fZGV2aWNlX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O21kaW9fZGV2aWNlX3JlbW92ZSYjMzQ7LAogICAgJiMzNDtwaHlfZGV2aWNlX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3BoeV9kZXZpY2VfcmVtb3ZlJiMzNDssCiAgICAmIzM0O3BoeV9hdHRhY2hfZGlyZWN0JiMzNDssCiAgICAmIzM0O3BoeV9kZXRhY2gmIzM0OywKICAgICYjMzQ7X19vZl9tZGlvYnVzX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O21kaW9idXNfc2Nhbl9jMjImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1ESU8gYnVzIGFuZCBQSFkgZGV2aWNlIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiBsb2dpYyB0byBzdXBwb3J0IGR5bmFtaWMgZGV2aWNlIHRyZWUgY2hhbmdlcyAoT0YgZHluYW1pYyBhbmQgb3ZlcmxheSkuIEl0IGludHJvZHVjZXMgYSBsb2NraW5nIG1lY2hhbmlzbSAoYG1kaW9fbWFwX2xvY2tgKSB0byBzZXJpYWxpemUgZGV2aWNlIGNoYW5nZXMgYW5kIHByZXZlbnQgcmFjZXMgZHVyaW5nIFBIWSBhdHRhY2htZW50IGFuZCBkZXRhY2htZW50LiBJdCBhbHNvIHJlZmFjdG9ycyB0aGUgc2Nhbm5pbmcgYW5kIHJlZ2lzdHJhdGlvbiBvZiBQSFlzIGFuZCBNRElPIGRldmljZXMuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBjb2RlIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UgZGVhZGxvY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T0YmIzM0OywKICAgICYjMzQ7T0ZfRFlOQU1JQyYjMzQ7LAogICAgJiMzNDtPRl9PVkVSTEFZJiMzNDssCiAgICAmIzM0O1BIWUxJQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbWRpb2J1c19yZWdpc3RlciYjMzQ7LAogICAgJiMzNDttZGlvYnVzX3VucmVnaXN0ZXImIzM0OywKICAgICYjMzQ7bWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luJiMzNDssCiAgICAmIzM0O21kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmQmIzM0OywKICAgICYjMzQ7bWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZSYjMzQ7LAogICAgJiMzNDttZGlvYnVzX2JlZ2luX3JlbW92ZSYjMzQ7LAogICAgJiMzNDttZGlvYnVzX2ZpbmlzaF9yZW1vdmUmIzM0OywKICAgICYjMzQ7bWRpb19kZXZpY2VfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7bWRpb19kZXZpY2VfcmVtb3ZlJiMzNDssCiAgICAmIzM0O3BoeV9kZXZpY2VfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7cGh5X2RldmljZV9yZW1vdmUmIzM0OywKICAgICYjMzQ7cGh5X2F0dGFjaF9kaXJlY3QmIzM0OywKICAgICYjMzQ7cGh5X2RldGFjaCYjMzQ7LAogICAgJiMzNDtfX29mX21kaW9idXNfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7bWRpb2J1c19zY2FuX2MyMiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTURJTyBidXMgYW5kIFBIWSBkZXZpY2UgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIGxvZ2ljIHRvIHN1cHBvcnQgZHluYW1pYyBkZXZpY2UgdHJlZSBjaGFuZ2VzIChPRiBkeW5hbWljIGFuZCBvdmVybGF5KS4gSXQgaW50cm9kdWNlcyBhIGxvY2tpbmcgbWVjaGFuaXNtIChgbWRpb19tYXBfbG9ja2ApIHRvIHNlcmlhbGl6ZSBkZXZpY2UgY2hhbmdlcyBhbmQgcHJldmVudCByYWNlcyBkdXJpbmcgUEhZIGF0dGFjaG1lbnQgYW5kIGRldGFjaG1lbnQuIEl0IGFsc28gcmVmYWN0b3JzIHRoZSBzY2FubmluZyBhbmQgcmVnaXN0cmF0aW9uIG9mIFBIWXMgYW5kIE1ESU8gZGV2aWNlcy4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGxvZ2ljIGRvZXMgbm90IGludHJvZHVjZSBkZWFkbG9ja3Mgb3IgcmFjZSBjb25kaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDY6MDUuNTk2MjAyMTk5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzODMwMjk0OTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9GXCIsXG4gICAgXCJPRl9EWU5BTUlDXCIsXG4gICAgXCJPRl9PVkVSTEFZXCIsXG4gICAgXCJQSFlMSUJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX21kaW9idXNfcmVnaXN0ZXJcIixcbiAgICBcIm1kaW9idXNfdW5yZWdpc3RlclwiLFxuICAgIFwibWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luXCIsXG4gICAgXCJtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kXCIsXG4gICAgXCJtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lXCIsXG4gICAgXCJtZGlvYnVzX2JlZ2luX3JlbW92ZVwiLFxuICAgIFwibWRpb2J1c19maW5pc2hfcmVtb3ZlXCIsXG4gICAgXCJtZGlvX2RldmljZV9yZWdpc3RlclwiLFxuICAgIFwibWRpb19kZXZpY2VfcmVtb3ZlXCIsXG4gICAgXCJwaHlfZGV2aWNlX3JlZ2lzdGVyXCIsXG4gICAgXCJwaHlfZGV2aWNlX3JlbW92ZVwiLFxuICAgIFwicGh5X2F0dGFjaF9kaXJlY3RcIixcbiAgICBcInBoeV9kZXRhY2hcIixcbiAgICBcIl9fb2ZfbWRpb2J1c19yZWdpc3RlclwiLFxuICAgIFwibWRpb2J1c19zY2FuX2MyMlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNRElPIGJ1cyBhbmQgUEhZIGRldmljZSByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24gbG9naWMgdG8gc3VwcG9ydCBkeW5hbWljIGRldmljZSB0cmVlIGNoYW5nZXMgKE9GIGR5bmFtaWMgYW5kIG92ZXJsYXkpLiBJdCBpbnRyb2R1Y2VzIGEgbG9ja2luZyBtZWNoYW5pc20gKGBtZGlvX21hcF9sb2NrYCkgdG8gc2VyaWFsaXplIGRldmljZSBjaGFuZ2VzIGFuZCBwcmV2ZW50IHJhY2VzIGR1cmluZyBQSFkgYXR0YWNobWVudCBhbmQgZGV0YWNobWVudC4gSXQgYWxzbyByZWZhY3RvcnMgdGhlIHNjYW5uaW5nIGFuZCByZWdpc3RyYXRpb24gb2YgUEhZcyBhbmQgTURJTyBkZXZpY2VzLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gY29kZSB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC4gSXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gbG9naWMgZG9lcyBub3QgaW50cm9kdWNlIGRlYWRsb2NrcyBvciByYWNlIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA2OjA1LjU5NjIwNzc0OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2MjQ2MTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDM5ODFlZjU0NDM1NzQ2NDU2OTQwYTU0ZmExYjkyZjk1OTI4MDRiZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyA0IDAwOjA2OjA0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jIGIvZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmNcXG5pbmRleCBiOGQyOThjMDRkM2ZmLi5jODlmODhhYWNkOGRmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jXFxuKysrIGIvZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmNcXG5AQCAtMTMsNiArMTMsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZndub2RlX21kaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdXRleC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfaXJxLmhcXHUwMDNlXFxuQEAgLTIwLDYgKzIxLDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX25ldC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHlfZml4ZWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgREVGQVVMVF9HUElPX1JFU0VUX0RFTEFZXFx0MTBcXHQvKiBpbiBtaWNyb3NlY29uZHMgKi9cXG4gXFxuQEAgLTI3LDYgKzMwLDUyIEBAIE1PRFVMRV9BVVRIT1IoXFxcIkdyYW50IExpa2VseSBcXHUwMDNjZ3JhbnQubGlrZWx5QHNlY3JldGxhYi5jYVxcdTAwM2VcXFwiKTtcXG4gTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbiBNT0RVTEVfREVTQ1JJUFRJT04oXFxcIk9wZW5GaXJtd2FyZSBNRElPIGJ1cyAoRXRoZXJuZXQgUEhZKSBhY2Nlc3NvcnNcXFwiKTtcXG4gXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19PRl9EWU5BTUlDKVxcbisvKlxcbisgKiBPRiBjaGFuZ2VzIGNhbiBuZXN0IHdoZW4gcHJvYmluZyBvbmUgTURJTyBkZXZpY2UgZW5hYmxlcyBhbm90aGVyIG5vZGUgb25cXG4rICogdGhlIHNhbWUgYnVzLiBTZXJpYWxpemUgaW5kZXBlbmRlbnQgY2hhbmdlcyB3aGlsZSBhbGxvd2luZyB0aGF0IG5lc3RpbmcuXFxuKyAqL1xcbitzdGF0aWMgREVGSU5FX01VVEVYKG9mX21kaW9fcmVjb25maWdfbXV0ZXgpO1xcbitzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpvZl9tZGlvX3JlY29uZmlnX293bmVyO1xcbitzdGF0aWMgdW5zaWduZWQgaW50IG9mX21kaW9fcmVjb25maWdfZGVwdGg7XFxuK1xcbitzdGF0aWMgdm9pZCBvZl9tZGlvX3JlY29uZmlnX2xvY2sodm9pZClcXG4re1xcbitcXHRpZiAoIW11dGV4X3RyeWxvY2soXFx1MDAyNm9mX21kaW9fcmVjb25maWdfbXV0ZXgpKSB7XFxuK1xcdFxcdGlmIChvZl9tZGlvX3JlY29uZmlnX293bmVyID09IGN1cnJlbnQpIHtcXG4rXFx0XFx0XFx0b2ZfbWRpb19yZWNvbmZpZ19kZXB0aCsrO1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2b2ZfbWRpb19yZWNvbmZpZ19tdXRleCk7XFxuK1xcdH1cXG4rXFxuK1xcdFdBUk5fT05fT05DRShvZl9tZGlvX3JlY29uZmlnX293bmVyKTtcXG4rXFx0V0FSTl9PTl9PTkNFKG9mX21kaW9fcmVjb25maWdfZGVwdGgpO1xcbitcXHRvZl9tZGlvX3JlY29uZmlnX293bmVyID0gY3VycmVudDtcXG4rXFx0b2ZfbWRpb19yZWNvbmZpZ19kZXB0aCA9IDE7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG9mX21kaW9fcmVjb25maWdfdW5sb2NrKHZvaWQpXFxuK3tcXG4rXFx0V0FSTl9PTl9PTkNFKG9mX21kaW9fcmVjb25maWdfb3duZXIgIT0gY3VycmVudCk7XFxuK1xcdFdBUk5fT05fT05DRSghb2ZfbWRpb19yZWNvbmZpZ19kZXB0aCk7XFxuK1xcbitcXHRpZiAoLS1vZl9tZGlvX3JlY29uZmlnX2RlcHRoKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRvZl9tZGlvX3JlY29uZmlnX293bmVyID0gTlVMTDtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZvZl9tZGlvX3JlY29uZmlnX211dGV4KTtcXG4rfVxcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgb2ZfbWRpb19yZWNvbmZpZ19sb2NrKHZvaWQpXFxuK3tcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIG9mX21kaW9fcmVjb25maWdfdW5sb2NrKHZvaWQpXFxuK3tcXG4rfVxcbisjZW5kaWZcXG4rXFxuIC8qIEV4dHJhY3QgdGhlIGNsYXVzZSAyMiBwaHkgSUQgZnJvbSB0aGUgY29tcGF0aWJsZSBzdHJpbmcgb2YgdGhlIGZvcm1cXG4gICogZXRoZXJuZXQtcGh5LWlkQUFBQS5CQkJCICovXFxuIHN0YXRpYyBpbnQgb2ZfZ2V0X3BoeV9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSwgdTMyICpwaHlfaWQpXFxuQEAgLTQ0LDcgKzkzLDcgQEAgaW50IG9mX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG4gRVhQT1JUX1NZTUJPTChvZl9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIpO1xcbiBcXG4gc3RhdGljIGludCBvZl9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcXG4tXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQsIHUzMiBhZGRyKVxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLCB1MzIgYWRkcilcXG4ge1xcbiBcXHRyZXR1cm4gZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KG1kaW8sIG9mX2Z3bm9kZV9oYW5kbGUoY2hpbGQpLCBhZGRyKTtcXG4gfVxcbkBAIC03Nyw2ICsxMjYsMjUgQEAgc3RhdGljIGludCBvZl9tZGlvYnVzX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgb2ZfbWRpb2J1c19yZWdpc3Rlcl9jaGlsZChzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLCB1MzIgYWRkcilcXG4re1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRpZiAob2Zfbm9kZV90ZXN0X2FuZF9zZXRfZmxhZyhjaGlsZCwgT0ZfUE9QVUxBVEVEKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAob2ZfbWRpb2J1c19jaGlsZF9pc19waHkoY2hpbGQpKVxcbitcXHRcXHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXJfcGh5KG1kaW8sIGNoaWxkLCBhZGRyKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKG1kaW8sIGNoaWxkLCBhZGRyKTtcXG4rXFxuK1xcdGlmIChyYylcXG4rXFx0XFx0b2Zfbm9kZV9jbGVhcl9mbGFnKGNoaWxkLCBPRl9QT1BVTEFURUQpO1xcbitcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbiAvKiBUaGUgZm9sbG93aW5nIGlzIGEgbGlzdCBvZiBQSFkgY29tcGF0aWJsZSBzdHJpbmdzIHdoaWNoIGFwcGVhciBpblxcbiAgKiBzb21lIERUQnMuIFRoZSBjb21wYXRpYmxlIHN0cmluZyBpcyBuZXZlciBtYXRjaGVkIGFnYWluc3QgYSBQSFlcXG4gICogZHJpdmVyLCBzbyBpcyBwb2ludGxlc3MuIFdlIG9ubHkgZXhwZWN0IGRldmljZXMgd2hpY2ggYXJlIG5vdCBQSFlzXFxuQEAgLTEzNiw2ICsyMDQsMzIgQEAgYm9vbCBvZl9tZGlvYnVzX2NoaWxkX2lzX3BoeShzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0wob2ZfbWRpb2J1c19jaGlsZF9pc19waHkpO1xcbiBcXG4rc3RhdGljIGludCBvZl9tZGlvYnVzX3NjYW5fcGh5KHN0cnVjdCBtaWlfYnVzICptZGlvLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpjaGlsZClcXG4re1xcbitcXHRpbnQgYWRkciwgcmM7XFxuK1xcbitcXHRpZiAoIW9mX21kaW9idXNfY2hpbGRfaXNfcGh5KGNoaWxkKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRmb3IgKGFkZHIgPSAwOyBhZGRyIFxcdTAwM2MgUEhZX01BWF9BRERSOyBhZGRyKyspIHtcXG4rXFx0XFx0aWYgKG1kaW9idXNfaXNfcmVnaXN0ZXJlZF9kZXZpY2UobWRpbywgYWRkcikpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0ZGV2X2luZm8oXFx1MDAyNm1kaW8tXFx1MDAzZWRldiwgXFxcInNjYW4gcGh5ICVwT0ZuIGF0IGFkZHJlc3MgJWlcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCBjaGlsZCwgYWRkcik7XFxuK1xcbitcXHRcXHQvKiAtRU5PREVWIG1lYW5zIHRoYXQgc2Nhbm5pbmcgc2hvdWxkIGNvbnRpbnVlLiAqL1xcbitcXHRcXHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXJfY2hpbGQobWRpbywgY2hpbGQsIGFkZHIpO1xcbitcXHRcXHRpZiAoIXJjKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0aWYgKHJjICE9IC1FTk9ERVYpXFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIC1FTk9ERVY7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgX19vZl9tZGlvYnVzX3BhcnNlX3BoeXMoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuIFxcdFxcdFxcdFxcdCAgIGJvb2wgKnNjYW5waHlzKVxcbiB7XFxuQEAgLTE2NCwxMCArMjU4LDcgQEAgc3RhdGljIGludCBfX29mX21kaW9idXNfcGFyc2VfcGh5cyhzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCxcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGlmIChvZl9tZGlvYnVzX2NoaWxkX2lzX3BoeShjaGlsZCkpXFxuLVxcdFxcdFxcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9waHkobWRpbywgY2hpbGQsIGFkZHIpO1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2UobWRpbywgY2hpbGQsIGFkZHIpO1xcbitcXHRcXHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXJfY2hpbGQobWRpbywgY2hpbGQsIGFkZHIpO1xcbiBcXG4gXFx0XFx0aWYgKHJjID09IC1FTk9ERVYpXFxuIFxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNm1kaW8tXFx1MDAzZWRldixcXG5AQCAtMTk3LDcgKzI4OCw3IEBAIGludCBfX29mX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuIHtcXG4gXFx0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZDtcXG4gXFx0Ym9vbCBzY2FucGh5cyA9IGZhbHNlO1xcbi1cXHRpbnQgYWRkciwgcmM7XFxuK1xcdGludCByYztcXG4gXFxuIFxcdGlmICghbnApXFxuIFxcdFxcdHJldHVybiBfX21kaW9idXNfcmVnaXN0ZXIobWRpbywgb3duZXIpO1xcbkBAIC0yMjMsMTMgKzMxNCwyMSBAQCBpbnQgX19vZl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbiBcXHRpZiAocmMpXFxuIFxcdFxcdHJldHVybiByYztcXG4gXFxuK1xcdG9mX21kaW9fcmVjb25maWdfbG9jaygpO1xcbitcXHRyYyA9IG1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbihtZGlvLCBmYWxzZSk7XFxuK1xcdGlmIChyYykge1xcbitcXHRcXHRvZl9tZGlvX3JlY29uZmlnX3VubG9jaygpO1xcbitcXHRcXHRtZGlvYnVzX3VucmVnaXN0ZXIobWRpbyk7XFxuK1xcdFxcdHJldHVybiByYztcXG4rXFx0fVxcbitcXG4gXFx0LyogTG9vcCBvdmVyIHRoZSBjaGlsZCBub2RlcyBhbmQgcmVnaXN0ZXIgYSBwaHlfZGV2aWNlIGZvciBlYWNoIHBoeSAqL1xcbiBcXHRyYyA9IF9fb2ZfbWRpb2J1c19wYXJzZV9waHlzKG1kaW8sIG5wLCBcXHUwMDI2c2NhbnBoeXMpO1xcbiBcXHRpZiAocmMpXFxuLVxcdFxcdGdvdG8gdW5yZWdpc3RlcjtcXG4rXFx0XFx0Z290byBvdXRfY2hhbmdlO1xcbiBcXG4gXFx0aWYgKCFzY2FucGh5cylcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdGdvdG8gb3V0X2NoYW5nZTtcXG4gXFxuIFxcdC8qIGF1dG8gc2NhbiBmb3IgUEhZcyB3aXRoIGVtcHR5IHJlZyBwcm9wZXJ0eSAqL1xcbiBcXHRmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZShucCwgY2hpbGQpIHtcXG5AQCAtMjM4LDM5ICszMzcsMzgyIEBAIGludCBfX29mX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuIFxcdFxcdCAgICBvZl9ub2RlX25hbWVfZXEoY2hpbGQsIFxcXCJldGhlcm5ldC1waHktcGFja2FnZVxcXCIpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdGZvciAoYWRkciA9IDA7IGFkZHIgXFx1MDAzYyBQSFlfTUFYX0FERFI7IGFkZHIrKykge1xcbi1cXHRcXHRcXHQvKiBza2lwIGFscmVhZHkgcmVnaXN0ZXJlZCBQSFlzICovXFxuLVxcdFxcdFxcdGlmIChtZGlvYnVzX2lzX3JlZ2lzdGVyZWRfZGV2aWNlKG1kaW8sIGFkZHIpKVxcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdFxcdC8qIGJlIG5vaXN5IHRvIGVuY291cmFnZSBwZW9wbGUgdG8gc2V0IHJlZyBwcm9wZXJ0eSAqL1xcbi1cXHRcXHRcXHRkZXZfaW5mbyhcXHUwMDI2bWRpby1cXHUwMDNlZGV2LCBcXFwic2NhbiBwaHkgJXBPRm4gYXQgYWRkcmVzcyAlaVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0IGNoaWxkLCBhZGRyKTtcXG4tXFxuLVxcdFxcdFxcdGlmIChvZl9tZGlvYnVzX2NoaWxkX2lzX3BoeShjaGlsZCkpIHtcXG4tXFx0XFx0XFx0XFx0LyogLUVOT0RFViBpcyB0aGUgcmV0dXJuIGNvZGUgdGhhdCBQSFlMSUIgaGFzXFxuLVxcdFxcdFxcdFxcdCAqIHN0YW5kYXJkaXplZCBvbiB0byBpbmRpY2F0ZSB0aGF0IGJ1c1xcbi1cXHRcXHRcXHRcXHQgKiBzY2FubmluZyBzaG91bGQgY29udGludWUuXFxuLVxcdFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRcXHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXJfcGh5KG1kaW8sIGNoaWxkLCBhZGRyKTtcXG4tXFx0XFx0XFx0XFx0aWYgKCFyYylcXG4tXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdFxcdGlmIChyYyAhPSAtRU5PREVWKVxcbi1cXHRcXHRcXHRcXHRcXHRnb3RvIHB1dF91bnJlZ2lzdGVyO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdH1cXG4rXFx0XFx0cmMgPSBvZl9tZGlvYnVzX3NjYW5fcGh5KG1kaW8sIGNoaWxkKTtcXG4rXFx0XFx0aWYgKHJjIFxcdTAwMjZcXHUwMDI2IHJjICE9IC1FTk9ERVYpXFxuK1xcdFxcdFxcdGdvdG8gcHV0X2NoaWxkO1xcbitcXHRcXHRyYyA9IDA7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiAwO1xcbitvdXRfY2hhbmdlOlxcbitcXHRtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kKG1kaW8sIGZhbHNlKTtcXG4rXFx0b2ZfbWRpb19yZWNvbmZpZ191bmxvY2soKTtcXG4rXFx0aWYgKCFyYylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1wdXRfdW5yZWdpc3RlcjpcXG4tXFx0b2Zfbm9kZV9wdXQoY2hpbGQpO1xcbi11bnJlZ2lzdGVyOlxcbiBcXHRtZGlvYnVzX3VucmVnaXN0ZXIobWRpbyk7XFxuIFxcdHJldHVybiByYztcXG4rXFxuK3B1dF9jaGlsZDpcXG4rXFx0b2Zfbm9kZV9wdXQoY2hpbGQpO1xcbitcXHRnb3RvIG91dF9jaGFuZ2U7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChfX29mX21kaW9idXNfcmVnaXN0ZXIpO1xcbiBcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX09GX0RZTkFNSUMpXFxuK3N0YXRpYyBib29sIG9mX21kaW9idXNfbm9kZV9pc19hdmFpbGFibGUoc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxcbit7XFxuK1xcdHJldHVybiAhb2Zfbm9kZV9jaGVja19mbGFnKG5vZGUsIE9GX0RFVEFDSEVEKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShub2RlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvZl9tZGlvYnVzX2FkZF9ub2RlKHN0cnVjdCBtaWlfYnVzICptZGlvLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7XFxuK1xcdGludCBhZGRyLCByYywgcmV0ID0gMDtcXG4rXFxuK1xcdGlmICghb2ZfbWRpb2J1c19ub2RlX2lzX2F2YWlsYWJsZShub2RlKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAob2Zfbm9kZV9uYW1lX2VxKG5vZGUsIFxcXCJldGhlcm5ldC1waHktcGFja2FnZVxcXCIpKSB7XFxuK1xcdFxcdGlmICghb2ZfcHJvcGVydHlfcHJlc2VudChub2RlLCBcXFwicmVnXFxcIikpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0XFx0Zm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGUobm9kZSwgY2hpbGQpIHtcXG4rXFx0XFx0XFx0cmMgPSBvZl9tZGlvYnVzX2FkZF9ub2RlKG1kaW8sIGNoaWxkKTtcXG4rXFx0XFx0XFx0aWYgKHJjIFxcdTAwMjZcXHUwMDI2IHJjICE9IC1FTk9ERVYgXFx1MDAyNlxcdTAwMjYgIXJldClcXG4rXFx0XFx0XFx0XFx0cmV0ID0gcmM7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGFkZHIgPSBvZl9tZGlvX3BhcnNlX2FkZHIoXFx1MDAyNm1kaW8tXFx1MDAzZWRldiwgbm9kZSk7XFxuK1xcdGlmIChhZGRyIFxcdTAwM2MgMClcXG4rXFx0XFx0cmMgPSBvZl9tZGlvYnVzX3NjYW5fcGh5KG1kaW8sIG5vZGUpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9jaGlsZChtZGlvLCBub2RlLCBhZGRyKTtcXG4rXFxuK1xcdGlmIChyYyA9PSAtRU5PREVWIFxcdTAwMjZcXHUwMDI2IGFkZHIgXFx1MDAzZT0gMClcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2bWRpby1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiTURJTyBkZXZpY2UgYXQgYWRkcmVzcyAlZCBpcyBtaXNzaW5nLlxcXFxuXFxcIiwgYWRkcik7XFxuK1xcbitcXHRyZXR1cm4gcmM7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG9mX21kaW9idXNfbm9kZV9pc19idXN5KHN0cnVjdCBtaWlfYnVzICptZGlvLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxcbit7XFxuK1xcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldjtcXG4rXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcXG4rXFx0Ym9vbCBidXN5ID0gZmFsc2U7XFxuK1xcbitcXHRpZiAob2Zfbm9kZV9uYW1lX2VxKG5vZGUsIFxcXCJldGhlcm5ldC1waHktcGFja2FnZVxcXCIpKSB7XFxuK1xcdFxcdGZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKG5vZGUsIGNoaWxkKSB7XFxuK1xcdFxcdFxcdGlmIChvZl9tZGlvYnVzX25vZGVfaXNfYnVzeShtZGlvLCBjaGlsZCkpXFxuK1xcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghb2Zfbm9kZV9jaGVja19mbGFnKG5vZGUsIE9GX1BPUFVMQVRFRCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdG1kaW9kZXYgPSBvZl9tZGlvX2ZpbmRfZGV2aWNlKG5vZGUpO1xcbitcXHRpZiAoIW1kaW9kZXYpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAobWRpb2Rldi1cXHUwMDNlYnVzICE9IG1kaW8pIHtcXG4rXFx0XFx0cHV0X2RldmljZShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZtZGlvLVxcdTAwM2VtZGlvX21hcF9sb2NrKTtcXG4rXFx0YnVzeSA9IG1kaW8tXFx1MDAzZW1kaW9fbWFwW21kaW9kZXYtXFx1MDAzZWFkZHJdICE9IG1kaW9kZXYgfHxcXG4rXFx0ICAgICAgIChtZGlvLVxcdTAwM2VtZGlvX21hcF9wZW5kaW5nIFxcdTAwMjYgQklUKG1kaW9kZXYtXFx1MDAzZWFkZHIpKTtcXG4rXFx0aWYgKG1kaW9kZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTURJT19ERVZJQ0VfRkxBR19QSFkpIHtcXG4rXFx0XFx0cGh5ZGV2ID0gdG9fcGh5X2RldmljZShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0aWYgKHBoeWRldi1cXHUwMDNlYXR0YWNoZWQpIHtcXG4rXFx0XFx0XFx0YnVzeSA9IHRydWU7XFxuK1xcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdCBcXFwiY2Fubm90IHJlbW92ZSBhbiBhdHRhY2hlZCBQSFk7IHJlbW92ZSBpdHMgY29uc3VtZXIgZmlyc3RcXFxcblxcXCIpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGlvLVxcdTAwM2VtZGlvX21hcF9sb2NrKTtcXG4rXFx0cHV0X2RldmljZShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG4rXFxuK1xcdHJldHVybiBidXN5O1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpcXG4rb2ZfbWRpb2J1c19nZXRfcmVtb3ZhbF9zY29wZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQ7XFxuK1xcbitcXHRpZiAob2Zfbm9kZV9uYW1lX2VxKG5vZGUsIFxcXCJldGhlcm5ldC1waHktcGFja2FnZVxcXCIpKVxcbitcXHRcXHRyZXR1cm4gb2Zfbm9kZV9nZXQobm9kZSk7XFxuK1xcbitcXHRwYXJlbnQgPSBvZl9nZXRfcGFyZW50KG5vZGUpO1xcbitcXHRpZiAob2Zfbm9kZV9uYW1lX2VxKHBhcmVudCwgXFxcImV0aGVybmV0LXBoeS1wYWNrYWdlXFxcIikpXFxuK1xcdFxcdHJldHVybiBwYXJlbnQ7XFxuK1xcbitcXHRvZl9ub2RlX3B1dChwYXJlbnQpO1xcbitcXHRyZXR1cm4gb2Zfbm9kZV9nZXQobm9kZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb2ZfbWRpb2J1c19yZW1vdmVfbm9kZShzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXFxuK3tcXG4rXFx0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2O1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKG9mX25vZGVfbmFtZV9lcShub2RlLCBcXFwiZXRoZXJuZXQtcGh5LXBhY2thZ2VcXFwiKSkge1xcbitcXHRcXHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKG5vZGUsIGNoaWxkKSB7XFxuK1xcdFxcdFxcdHJldCA9IG9mX21kaW9idXNfcmVtb3ZlX25vZGUobWRpbywgY2hpbGQpO1xcbitcXHRcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdFxcdG9mX25vZGVfcHV0KGNoaWxkKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIW9mX25vZGVfY2hlY2tfZmxhZyhub2RlLCBPRl9QT1BVTEFURUQpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIFRoZSBPRiBub2RlIGxvb2t1cCBhbHNvIGNvdmVycyBQSFlzIGZvdW5kIGJ5IGFkZHJlc3Mgc2Nhbm5pbmcuICovXFxuK1xcdG1kaW9kZXYgPSBvZl9tZGlvX2ZpbmRfZGV2aWNlKG5vZGUpO1xcbitcXHRpZiAoIW1kaW9kZXYpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdGlmIChtZGlvZGV2LVxcdTAwM2VidXMgIT0gbWRpbykge1xcbitcXHRcXHRwdXRfZGV2aWNlKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYpO1xcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gbWRpb2Rldi1cXHUwMDNlZGV2aWNlX3JlbW92ZV9keW5hbWljKG1kaW9kZXYpO1xcbitcXHRpZiAoIXJldClcXG4rXFx0XFx0bWRpb2Rldi1cXHUwMDNlZGV2aWNlX2ZyZWUobWRpb2Rldik7XFxuK1xcdHB1dF9kZXZpY2UoXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldik7XFxuK1xcbitcXHRyZXR1cm4gcmV0ID09IC1FTk9ERVYgPyAwIDogcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IG1paV9idXMgKm9mX21kaW9idXNfZmluZF9wYXJlbnQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50LCAqYnVzX25vZGU7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICptZGlvO1xcbitcXG4rXFx0cGFyZW50ID0gb2ZfZ2V0X3BhcmVudChub2RlKTtcXG4rXFx0aWYgKCFwYXJlbnQpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0aWYgKG9mX25vZGVfbmFtZV9lcShwYXJlbnQsIFxcXCJldGhlcm5ldC1waHktcGFja2FnZVxcXCIpKSB7XFxuK1xcdFxcdGlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShwYXJlbnQpIHx8XFxuK1xcdFxcdCAgICAhb2ZfcHJvcGVydHlfcHJlc2VudChwYXJlbnQsIFxcXCJyZWdcXFwiKSkge1xcbitcXHRcXHRcXHRvZl9ub2RlX3B1dChwYXJlbnQpO1xcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0YnVzX25vZGUgPSBvZl9nZXRfcGFyZW50KHBhcmVudCk7XFxuK1xcdFxcdG9mX25vZGVfcHV0KHBhcmVudCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGJ1c19ub2RlID0gcGFyZW50O1xcbitcXHR9XFxuK1xcbitcXHRtZGlvID0gb2ZfbWRpb19maW5kX2J1cyhidXNfbm9kZSk7XFxuK1xcdG9mX25vZGVfcHV0KGJ1c19ub2RlKTtcXG4rXFxuK1xcdHJldHVybiBtZGlvO1xcbit9XFxuK1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfT0ZfT1ZFUkxBWSlcXG4rLyogT3ZlcmxheSBlbnRyeSBub3RpZmllciBlcnJvcnMgY2Fubm90IHN0b3AgcmVtb3ZhbCBhZnRlciB0aGUgdHJlZSBjaGFuZ2VkLiAqL1xcbitzdGF0aWMgYm9vbCBvZl9tZGlvYnVzX2xpdmVfbm9kZV9pc19idXN5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnNjb3BlO1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqbWRpbztcXG4rXFx0Ym9vbCBidXN5ID0gdHJ1ZTtcXG4rXFxuK1xcdHNjb3BlID0gb2ZfbWRpb2J1c19nZXRfcmVtb3ZhbF9zY29wZShub2RlKTtcXG4rXFx0bWRpbyA9IG9mX21kaW9idXNfZmluZF9wYXJlbnQoc2NvcGUpO1xcbitcXHRpZiAoIW1kaW8pXFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9zY29wZTtcXG4rXFxuK1xcdGlmICghbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKG1kaW8sIHRydWUpKSB7XFxuK1xcdFxcdGJ1c3kgPSBvZl9tZGlvYnVzX25vZGVfaXNfYnVzeShtZGlvLCBzY29wZSk7XFxuK1xcdFxcdG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmQobWRpbywgdHJ1ZSk7XFxuK1xcdH1cXG4rXFx0cHV0X2RldmljZShcXHUwMDI2bWRpby1cXHUwMDNlZGV2KTtcXG4rXFxuK291dF9wdXRfc2NvcGU6XFxuK1xcdG9mX25vZGVfcHV0KHNjb3BlKTtcXG4rXFx0cmV0dXJuIGJ1c3k7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKlxcbitvZl9tZGlvYnVzX292ZXJsYXlfdGFyZ2V0X2NoaWxkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqdGFyZ2V0LFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm92ZXJsYXlfY2hpbGQpXFxuK3tcXG4rXFx0Y29uc3QgY2hhciAqbmFtZSA9IGtiYXNlbmFtZShvdmVybGF5X2NoaWxkLVxcdTAwM2VmdWxsX25hbWUpO1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkO1xcbitcXG4rXFx0Zm9yX2VhY2hfY2hpbGRfb2Zfbm9kZSh0YXJnZXQsIGNoaWxkKSB7XFxuK1xcdFxcdGlmICghb2Zfbm9kZV9jbXAoa2Jhc2VuYW1lKGNoaWxkLVxcdTAwM2VmdWxsX25hbWUpLCBuYW1lKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGNoaWxkO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgb2ZfbWRpb2J1c19vdmVybGF5X25vZGVfaXNfYnVzeShzdHJ1Y3QgZGV2aWNlX25vZGUgKm92ZXJsYXksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnRhcmdldCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGJvb2wgYWRkZWQpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpvdmVybGF5X2NoaWxkLCAqdGFyZ2V0X2NoaWxkO1xcbitcXHRib29sIGJ1c3ksIGNoaWxkX2FkZGVkO1xcbitcXG4rXFx0aWYgKChhZGRlZCB8fCBvZl9wcm9wZXJ0eV9wcmVzZW50KG92ZXJsYXksIFxcXCJzdGF0dXNcXFwiKSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIG9mX21kaW9idXNfbGl2ZV9ub2RlX2lzX2J1c3kodGFyZ2V0KSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKG92ZXJsYXksIG92ZXJsYXlfY2hpbGQpIHtcXG4rXFx0XFx0dGFyZ2V0X2NoaWxkID0gb2ZfbWRpb2J1c19vdmVybGF5X3RhcmdldF9jaGlsZCh0YXJnZXQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBvdmVybGF5X2NoaWxkKTtcXG4rXFx0XFx0aWYgKCF0YXJnZXRfY2hpbGQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0Y2hpbGRfYWRkZWQgPSBvZl9ub2RlX2NoZWNrX2ZsYWcodGFyZ2V0X2NoaWxkLCBPRl9PVkVSTEFZKTtcXG4rXFx0XFx0YnVzeSA9IG9mX21kaW9idXNfb3ZlcmxheV9ub2RlX2lzX2J1c3kob3ZlcmxheV9jaGlsZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHRhcmdldF9jaGlsZCwgY2hpbGRfYWRkZWQpO1xcbitcXHRcXHRvZl9ub2RlX3B1dCh0YXJnZXRfY2hpbGQpO1xcbitcXHRcXHRpZiAoYnVzeSkge1xcbitcXHRcXHRcXHRvZl9ub2RlX3B1dChvdmVybGF5X2NoaWxkKTtcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG9mX21kaW9idXNfb3ZlcmxheV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4rXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqYXJnKVxcbit7XFxuK1xcdHN0cnVjdCBvZl9vdmVybGF5X25vdGlmeV9kYXRhICpuZCA9IGFyZztcXG4rXFx0Ym9vbCBidXN5O1xcbitcXG4rXFx0aWYgKGFjdGlvbiAhPSBPRl9PVkVSTEFZX1BSRV9SRU1PVkUpXFxuK1xcdFxcdHJldHVybiBOT1RJRllfT0s7XFxuK1xcbitcXHRvZl9tZGlvX3JlY29uZmlnX2xvY2soKTtcXG4rXFx0YnVzeSA9IG9mX21kaW9idXNfb3ZlcmxheV9ub2RlX2lzX2J1c3kobmQtXFx1MDAzZW92ZXJsYXksIG5kLVxcdTAwM2V0YXJnZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBmYWxzZSk7XFxuK1xcdG9mX21kaW9fcmVjb25maWdfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gYnVzeSA/IG5vdGlmaWVyX2Zyb21fZXJybm8oLUVCVVNZKSA6IE5PVElGWV9PSztcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBvZl9tZGlvX292ZXJsYXlfbm90aWZpZXIgPSB7XFxuK1xcdC5ub3RpZmllcl9jYWxsID0gb2ZfbWRpb2J1c19vdmVybGF5X25vdGlmeSxcXG4rfTtcXG4rI2VuZGlmXFxuK1xcbitzdGF0aWMgaW50IG9mX21kaW9idXNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLFxcbitcXHRcXHRcXHQgICAgIHZvaWQgKmFyZylcXG4re1xcbitcXHRzdHJ1Y3Qgb2ZfcmVjb25maWdfZGF0YSAqcmQgPSBhcmc7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqc2NvcGU7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICptZGlvO1xcbitcXHRlbnVtIG9mX3JlY29uZmlnX2NoYW5nZSBjaGFuZ2U7XFxuK1xcdGJvb2wgcmVtb3Zpbmc7XFxuK1xcdGludCByYywgcmV0ID0gTk9USUZZX09LO1xcbitcXG4rXFx0b2ZfbWRpb19yZWNvbmZpZ19sb2NrKCk7XFxuK1xcdGNoYW5nZSA9IG9mX3JlY29uZmlnX2dldF9zdGF0ZV9jaGFuZ2UoYWN0aW9uLCByZCk7XFxuK1xcdHN3aXRjaCAoY2hhbmdlKSB7XFxuK1xcdGNhc2UgT0ZfUkVDT05GSUdfQ0hBTkdFX0FERDpcXG4rXFx0XFx0LyogQSBuZXdlciBjaGFuZ2UgbWF5IGhhdmUgbWFkZSB0aGlzIG5vdGlmaWNhdGlvbiBzdGFsZS4gKi9cXG4rXFx0XFx0aWYgKCFvZl9tZGlvYnVzX25vZGVfaXNfYXZhaWxhYmxlKHJkLVxcdTAwM2VkbikpXFxuK1xcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFx0XFx0cmVtb3ZpbmcgPSBmYWxzZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgT0ZfUkVDT05GSUdfQ0hBTkdFX1JFTU9WRTpcXG4rXFx0XFx0LyogQSBuZXdlciBjaGFuZ2UgbWF5IGhhdmUgbWFkZSB0aGlzIG5vdGlmaWNhdGlvbiBzdGFsZS4gKi9cXG4rXFx0XFx0aWYgKG9mX21kaW9idXNfbm9kZV9pc19hdmFpbGFibGUocmQtXFx1MDAzZWRuKSlcXG4rXFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHRcXHRyZW1vdmluZyA9IHRydWU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdG1kaW8gPSBvZl9tZGlvYnVzX2ZpbmRfcGFyZW50KHJkLVxcdTAwM2Vkbik7XFxuK1xcdGlmICghbWRpbylcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXG4rXFx0cmMgPSBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4obWRpbywgcmVtb3ZpbmcpO1xcbitcXHRpZiAocmMpIHtcXG4rXFx0XFx0aWYgKCFyZW1vdmluZylcXG4rXFx0XFx0XFx0cmV0ID0gbm90aWZpZXJfZnJvbV9lcnJubygtRVBST0JFX0RFRkVSKTtcXG4rXFx0XFx0Z290byBvdXRfcHV0X21kaW87XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghcmVtb3ZpbmcpIHtcXG4rXFx0XFx0cmMgPSBvZl9tZGlvYnVzX2FkZF9ub2RlKG1kaW8sIHJkLVxcdTAwM2Vkbik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIFRoZSBub2RlIG1heSBhbHJlYWR5IGJlIGRldGFjaGVkIGZyb20gaXRzIHBhcmVudCBoaWVyYXJjaHkuICovXFxuK1xcdFxcdHNjb3BlID0gb2ZfbWRpb2J1c19nZXRfcmVtb3ZhbF9zY29wZShyZC1cXHUwMDNlZG4pO1xcbitcXHRcXHRpZiAob2ZfbWRpb2J1c19ub2RlX2lzX2J1c3kobWRpbywgc2NvcGUpKVxcbitcXHRcXHRcXHRyYyA9IC1FQlVTWTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRyYyA9IG9mX21kaW9idXNfcmVtb3ZlX25vZGUobWRpbywgcmQtXFx1MDAzZWRuKTtcXG4rXFx0XFx0b2Zfbm9kZV9wdXQoc2NvcGUpO1xcbitcXHR9XFxuK1xcbitcXHRtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kKG1kaW8sIHJlbW92aW5nKTtcXG4rXFx0aWYgKHJjIFxcdTAwMjZcXHUwMDI2IChyZW1vdmluZyB8fCByYyAhPSAtRU5PREVWKSlcXG4rXFx0XFx0cmV0ID0gbm90aWZpZXJfZnJvbV9lcnJubyhyYyk7XFxuK1xcbitvdXRfcHV0X21kaW86XFxuK1xcdHB1dF9kZXZpY2UoXFx1MDAyNm1kaW8tXFx1MDAzZWRldik7XFxuK291dF91bmxvY2s6XFxuK1xcdG9mX21kaW9fcmVjb25maWdfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG9mX21kaW9fbm90aWZpZXIgPSB7XFxuK1xcdC5ub3RpZmllcl9jYWxsID0gb2ZfbWRpb2J1c19ub3RpZnksXFxuK307XFxuK1xcbitzdGF0aWMgaW50IF9faW5pdCBvZl9tZGlvX2luaXQodm9pZClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gb2ZfcmVjb25maWdfbm90aWZpZXJfcmVnaXN0ZXIoXFx1MDAyNm9mX21kaW9fbm90aWZpZXIpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX09GX09WRVJMQVkpXFxuK1xcdHJldCA9IG9mX292ZXJsYXlfbm90aWZpZXJfcmVnaXN0ZXIoXFx1MDAyNm9mX21kaW9fb3ZlcmxheV9ub3RpZmllcik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdG9mX3JlY29uZmlnX25vdGlmaWVyX3VucmVnaXN0ZXIoXFx1MDAyNm9mX21kaW9fbm90aWZpZXIpO1xcbisjZW5kaWZcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rbW9kdWxlX2luaXQob2ZfbWRpb19pbml0KTtcXG4rXFxuK3N0YXRpYyB2b2lkIF9fZXhpdCBvZl9tZGlvX2V4aXQodm9pZClcXG4re1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfT0ZfT1ZFUkxBWSlcXG4rXFx0b2Zfb3ZlcmxheV9ub3RpZmllcl91bnJlZ2lzdGVyKFxcdTAwMjZvZl9tZGlvX292ZXJsYXlfbm90aWZpZXIpO1xcbisjZW5kaWZcXG4rXFx0b2ZfcmVjb25maWdfbm90aWZpZXJfdW5yZWdpc3RlcihcXHUwMDI2b2ZfbWRpb19ub3RpZmllcik7XFxuK31cXG4rbW9kdWxlX2V4aXQob2ZfbWRpb19leGl0KTtcXG4rI2VuZGlmIC8qIENPTkZJR19PRl9EWU5BTUlDICovXFxuK1xcbiAvKipcXG4gICogb2ZfbWRpb19maW5kX2RldmljZSAtIEdpdmVuIGEgZGV2aWNlIHRyZWUgbm9kZSwgZmluZCB0aGUgbWRpb19kZXZpY2VcXG4gICogQG5wOiBwb2ludGVyIHRvIHRoZSBtZGlvX2RldmljZSdzIGRldmljZSB0cmVlIG5vZGVcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmMgYi9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuY1xcbmluZGV4IDAwZDBlNDE1OWU5YmIuLmY0NWM5MzZmZTVhYTkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuY1xcbkBAIC0zNCw3ICszNCw4IEBAIHN0YXRpYyBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9idXNfZmluZF9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXFxuIFxcdGlmIChXQVJOX09OQ0UoIWFkZHJfdmFsaWQsIFxcXCJhZGRyICVkIG91dCBvZiByYW5nZVxcXFxuXFxcIiwgYWRkcikpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4tXFx0cmV0dXJuIGJ1cy1cXHUwMDNlbWRpb19tYXBbYWRkcl07XFxuK1xcdC8qIFBhaXIgd2l0aCBtYXAgcHVibGljYXRpb24gaW4gbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2UoKS4gKi9cXG4rXFx0cmV0dXJuIHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBbYWRkcl0pO1xcbiB9XFxuIFxcbiBzdHJ1Y3QgcGh5X2RldmljZSAqbWRpb2J1c19nZXRfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyKVxcbkBAIC01NCw3ICs1NSwxNiBAQCBFWFBPUlRfU1lNQk9MKG1kaW9idXNfZ2V0X3BoeSk7XFxuIFxcbiBib29sIG1kaW9idXNfaXNfcmVnaXN0ZXJlZF9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXFxuIHtcXG4tXFx0cmV0dXJuIG1kaW9idXNfZmluZF9kZXZpY2UoYnVzLCBhZGRyKSAhPSBOVUxMO1xcbitcXHRib29sIGFkZHJfdmFsaWQgPSBhZGRyIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgYWRkciBcXHUwMDNjIEFSUkFZX1NJWkUoYnVzLVxcdTAwM2VtZGlvX21hcCk7XFxuK1xcdGJvb2wgcmVnaXN0ZXJlZDtcXG4rXFxuK1xcdGlmIChXQVJOX09OQ0UoIWFkZHJfdmFsaWQsIFxcXCJhZGRyICVkIG91dCBvZiByYW5nZVxcXFxuXFxcIiwgYWRkcikpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJlZ2lzdGVyZWQgPSBSRUFEX09OQ0UoYnVzLVxcdTAwM2VtZGlvX21hcFthZGRyXSkgfHxcXG4rXFx0XFx0ICAgICAoUkVBRF9PTkNFKGJ1cy1cXHUwMDNlbWRpb19tYXBfcGVuZGluZykgXFx1MDAyNiBCSVQoYWRkcikpO1xcbitcXG4rXFx0cmV0dXJuIHJlZ2lzdGVyZWQ7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChtZGlvYnVzX2lzX3JlZ2lzdGVyZWRfZGV2aWNlKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jIGIvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmNcXG5pbmRleCBjZTNhNjA3YTQwY2IwLi5kZjgwMTI1ZWVlYzQ1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmNcXG5AQCAtMzMwLDYgKzMzMCw5IEBAIHN0cnVjdCBtaWlfYnVzICptZGlvYnVzX2FsbG9jX3NpemUoc2l6ZV90IHNpemUpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4gXFx0YnVzLVxcdTAwM2VzdGF0ZSA9IE1ESU9CVVNfQUxMT0NBVEVEO1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbWFwX2xvY2spO1xcbitcXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbWFwX3dhaXQpO1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX21hcF9yZXRpcmVkKTtcXG4gXFx0aWYgKHNpemUpXFxuIFxcdFxcdGJ1cy1cXHUwMDNlcHJpdiA9ICh2b2lkICopYnVzICsgYWxpZ25lZF9zaXplO1xcbiBcXG5AQCAtMzU1LDEwICszNTgsOSBAQCBzdGF0aWMgaW50IG9mX21kaW9idXNfZmluZF9waHkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXFxuIFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbiB7XFxuIFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7XFxuK1xcdGludCBhZGRyLCByZXQ7XFxuIFxcbiBcXHRmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZShucCwgY2hpbGQpIHtcXG4tXFx0XFx0aW50IGFkZHI7XFxuLVxcbiBcXHRcXHRpZiAob2Zfbm9kZV9uYW1lX2VxKGNoaWxkLCBcXFwiZXRoZXJuZXQtcGh5LXBhY2thZ2VcXFwiKSkge1xcbiBcXHRcXHRcXHQvKiBWYWxpZGF0ZSBQSFkgcGFja2FnZSByZWcgcHJlc2VuY2UgKi9cXG4gXFx0XFx0XFx0aWYgKCFvZl9wcm9wZXJ0eV9wcmVzZW50KGNoaWxkLCBcXFwicmVnXFxcIikpIHtcXG5AQCAtMzY2LDEyICszNjgsMTMgQEAgc3RhdGljIGludCBvZl9tZGlvYnVzX2ZpbmRfcGh5KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0XFx0fVxcbiBcXG4tXFx0XFx0XFx0aWYgKCFvZl9tZGlvYnVzX2ZpbmRfcGh5KGRldiwgbWRpb2RldiwgY2hpbGQpKSB7XFxuK1xcdFxcdFxcdHJldCA9IG9mX21kaW9idXNfZmluZF9waHkoZGV2LCBtZGlvZGV2LCBjaGlsZCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgIT0gLUVOT0RFVikge1xcbiBcXHRcXHRcXHRcXHQvKiBUaGUgcmVmY291bnQgZm9yIHRoZSBQSFkgcGFja2FnZSB3aWxsIGJlXFxuIFxcdFxcdFxcdFxcdCAqIGluY3JlbWVudGVkIGxhdGVyIHdoZW4gUEhZIGpvaW4gdGhlIFBhY2thZ2UuXFxuIFxcdFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRcXHRvZl9ub2RlX3B1dChjaGlsZCk7XFxuLVxcdFxcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtMzgyLDYgKzM4NSwxMSBAQCBzdGF0aWMgaW50IG9mX21kaW9idXNfZmluZF9waHkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0aWYgKGFkZHIgPT0gbWRpb2Rldi1cXHUwMDNlYWRkcikge1xcbitcXHRcXHRcXHRpZiAob2Zfbm9kZV90ZXN0X2FuZF9zZXRfZmxhZyhjaGlsZCwgT0ZfUE9QVUxBVEVEKSkge1xcbitcXHRcXHRcXHRcXHRvZl9ub2RlX3B1dChjaGlsZCk7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdFxcdFxcdH1cXG4rXFxuIFxcdFxcdFxcdGRldmljZV9zZXRfbm9kZShkZXYsIG9mX2Z3bm9kZV9oYW5kbGUoY2hpbGQpKTtcXG4gXFx0XFx0XFx0LyogVGhlIHJlZmNvdW50IG9uIFxcXCJjaGlsZFxcXCIgaXMgcGFzc2VkIHRvIHRoZSBtZGlvXFxuIFxcdFxcdFxcdCAqIGRldmljZS4gRG8gX25vdF8gdXNlIG9mX25vZGVfcHV0KGNoaWxkKSBoZXJlLlxcbkBAIC0zOTMsMjIgKzQwMSwyNiBAQCBzdGF0aWMgaW50IG9mX21kaW9idXNfZmluZF9waHkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXFxuIFxcdHJldHVybiAtRU5PREVWO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBvZl9tZGlvYnVzX2xpbmtfbWRpb2RldihzdHJ1Y3QgbWlpX2J1cyAqYnVzLFxcbi1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbitzdGF0aWMgaW50IG9mX21kaW9idXNfbGlua19tZGlvZGV2KHN0cnVjdCBtaWlfYnVzICpidXMsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4ge1xcbiBcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2O1xcbiBcXG4gXFx0aWYgKGRldi1cXHUwMDNlb2Zfbm9kZSB8fCAhYnVzLVxcdTAwM2VkZXYub2Zfbm9kZSlcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdG9mX21kaW9idXNfZmluZF9waHkoZGV2LCBtZGlvZGV2LCBidXMtXFx1MDAzZWRldi5vZl9ub2RlKTtcXG4rXFx0cmV0dXJuIG9mX21kaW9idXNfZmluZF9waHkoZGV2LCBtZGlvZGV2LCBidXMtXFx1MDAzZWRldi5vZl9ub2RlKTtcXG4gfVxcbiAjZW5kaWZcXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgcGh5X2RldmljZSAqbWRpb2J1c19zY2FuKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGM0NSlcXG4rc3RhdGljIHN0cnVjdCBwaHlfZGV2aWNlICpfX21kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0IGJvb2wgYzQ1KVxcbiB7XFxuIFxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBFUlJfUFRSKC1FTk9ERVYpO1xcbiBcXHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlO1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfT0ZfTURJTylcXG4rXFx0Ym9vbCBvZl9ub2RlX3BvcHVsYXRlZCA9IGZhbHNlO1xcbisjZW5kaWZcXG4gXFx0Y2hhciBub2RlX25hbWVbMTZdO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG5AQCAtNDIwLDcgKzQzMiwxMiBAQCBzdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBjNDUpXFxuIFxcdC8qIEZvciBEVCwgc2VlIGlmIHRoZSBhdXRvLXByb2JlZCBwaHkgaGFzIGEgY29ycmVzcG9uZGluZyBjaGlsZFxcbiBcXHQgKiBpbiB0aGUgYnVzIG5vZGUsIGFuZCBzZXQgdGhlIG9mX25vZGUgcG9pbnRlciBpbiB0aGlzIGNhc2UuXFxuIFxcdCAqL1xcbi1cXHRvZl9tZGlvYnVzX2xpbmtfbWRpb2RldihidXMsIFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8pO1xcbitcXHRlcnIgPSBvZl9tZGlvYnVzX2xpbmtfbWRpb2RldihidXMsIFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8pO1xcbitcXHRpZiAoZXJyID09IC1FQlVTWSkge1xcbitcXHRcXHRwaHlfZGV2aWNlX2ZyZWUocGh5ZGV2KTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XFxuK1xcdH1cXG4rXFx0b2Zfbm9kZV9wb3B1bGF0ZWQgPSAhIXBoeWRldi1cXHUwMDNlbWRpby5kZXYub2Zfbm9kZTtcXG4gI2VuZGlmXFxuIFxcbiBcXHQvKiBTZWFyY2ggZm9yIGEgc3dub2RlIGZvciB0aGUgcGh5IGluIHRoZSBzd25vZGUgaGllcmFyY2h5IG9mIHRoZSBidXMuXFxuQEAgLTQzNyw2ICs0NTQsMTEgQEAgc3RhdGljIHN0cnVjdCBwaHlfZGV2aWNlICptZGlvYnVzX3NjYW4oc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgYzQ1KVxcbiBcXG4gXFx0ZXJyID0gcGh5X2RldmljZV9yZWdpc3RlcihwaHlkZXYpO1xcbiBcXHRpZiAoZXJyKSB7XFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19PRl9NRElPKVxcbitcXHRcXHRpZiAob2Zfbm9kZV9wb3B1bGF0ZWQpXFxuK1xcdFxcdFxcdG9mX25vZGVfY2xlYXJfZmxhZyhwaHlkZXYtXFx1MDAzZW1kaW8uZGV2Lm9mX25vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIE9GX1BPUFVMQVRFRCk7XFxuKyNlbmRpZlxcbiBcXHRcXHRwaHlfZGV2aWNlX2ZyZWUocGh5ZGV2KTtcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XFxuIFxcdH1cXG5AQCAtNDU4LDcgKzQ4MCwxNyBAQCBzdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBjNDUpXFxuICAqL1xcbiBzdHJ1Y3QgcGh5X2RldmljZSAqbWRpb2J1c19zY2FuX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcXG4ge1xcbi1cXHRyZXR1cm4gbWRpb2J1c19zY2FuKGJ1cywgYWRkciwgZmFsc2UpO1xcbitcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZXJyID0gbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKGJ1cywgZmFsc2UpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbitcXG4rXFx0cGh5ZGV2ID0gX19tZGlvYnVzX3NjYW4oYnVzLCBhZGRyLCBmYWxzZSk7XFxuK1xcdG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmQoYnVzLCBmYWxzZSk7XFxuK1xcbitcXHRyZXR1cm4gcGh5ZGV2O1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wobWRpb2J1c19zY2FuX2MyMik7XFxuIFxcbkBAIC00NzYsNyArNTA4LDcgQEAgRVhQT1JUX1NZTUJPTChtZGlvYnVzX3NjYW5fYzIyKTtcXG4gICovXFxuIHN0YXRpYyBzdHJ1Y3QgcGh5X2RldmljZSAqbWRpb2J1c19zY2FuX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcXG4ge1xcbi1cXHRyZXR1cm4gbWRpb2J1c19zY2FuKGJ1cywgYWRkciwgdHJ1ZSk7XFxuK1xcdHJldHVybiBfX21kaW9idXNfc2NhbihidXMsIGFkZHIsIHRydWUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IG1kaW9idXNfc2Nhbl9idXNfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMpXFxuQEAgLTQ4Nyw3ICs1MTksNyBAQCBzdGF0aWMgaW50IG1kaW9idXNfc2Nhbl9idXNfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMpXFxuIFxcdFxcdGlmICgoYnVzLVxcdTAwM2VwaHlfbWFzayBcXHUwMDI2IEJJVChpKSkgPT0gMCkge1xcbiBcXHRcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xcbiBcXG4tXFx0XFx0XFx0cGh5ZGV2ID0gbWRpb2J1c19zY2FuX2MyMihidXMsIGkpO1xcbitcXHRcXHRcXHRwaHlkZXYgPSBfX21kaW9idXNfc2NhbihidXMsIGksIGZhbHNlKTtcXG4gXFx0XFx0XFx0aWYgKElTX0VSUihwaHlkZXYpIFxcdTAwMjZcXHUwMDI2IChQVFJfRVJSKHBoeWRldikgIT0gLUVOT0RFVikpXFxuIFxcdFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHBoeWRldik7XFxuIFxcdFxcdH1cXG5AQCAtNTA0LDcgKzUzNiw3IEBAIHN0YXRpYyBpbnQgbWRpb2J1c19zY2FuX2J1c19jNDUoc3RydWN0IG1paV9idXMgKmJ1cylcXG4gXFx0XFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcXG4gXFxuIFxcdFxcdFxcdC8qIERvbid0IHNjYW4gQzQ1IGlmIHdlIGFscmVhZHkgaGF2ZSBhIEMyMiBkZXZpY2UgKi9cXG4tXFx0XFx0XFx0aWYgKGJ1cy1cXHUwMDNlbWRpb19tYXBbaV0pXFxuK1xcdFxcdFxcdGlmIChtZGlvYnVzX2lzX3JlZ2lzdGVyZWRfZGV2aWNlKGJ1cywgaSkpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0XFx0cGh5ZGV2ID0gbWRpb2J1c19zY2FuX2M0NShidXMsIGkpO1xcbkBAIC01MzYsNiArNTY4LDQ0IEBAIHN0YXRpYyBib29sIG1kaW9idXNfcHJldmVudF9jNDVfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG1kaW9idXNfc3RvcF9kZXZpY2VfY2hhbmdlcyhzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxcbit7XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuK1xcdGJ1cy1cXHUwMDNlc3RhdGUgPSBNRElPQlVTX1VOUkVHSVNURVJJTkc7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX21hcF9sb2NrKTtcXG4rXFxuK1xcdHdhaXRfZXZlbnQoYnVzLVxcdTAwM2VtZGlvX21hcF93YWl0LCAhUkVBRF9PTkNFKGJ1cy1cXHUwMDNlbWRpb19tYXBfb3BzKSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1kaW9idXNfcmVtb3ZlX2RldmljZXMoc3RydWN0IG1paV9idXMgKmJ1cylcXG4re1xcbitcXHRMSVNUX0hFQUQocmVtb3ZlZCk7XFxuK1xcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgKm5leHQ7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFBIWV9NQVhfQUREUjsgaSsrKSB7XFxuK1xcdFxcdG1kaW9kZXYgPSBidXMtXFx1MDAzZW1kaW9fbWFwW2ldO1xcbitcXHRcXHRpZiAoIW1kaW9kZXYpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0bWRpb2Rldi1cXHUwMDNlZGV2aWNlX3JlbW92ZShtZGlvZGV2KTtcXG4rXFx0XFx0bWRpb2Rldi1cXHUwMDNlZGV2aWNlX2ZyZWUobWRpb2Rldik7XFxuK1xcdH1cXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuK1xcdGxpc3Rfc3BsaWNlX2luaXQoXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfcmV0aXJlZCwgXFx1MDAyNnJlbW92ZWQpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobWRpb2RldiwgbmV4dCwgXFx1MDAyNnJlbW92ZWQsIHJldGlyZWRfbm9kZSkge1xcbitcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VyZXRpcmVkX25vZGUpO1xcbitcXHRcXHRtZGlvX2RldmljZV9wdXQobWRpb2Rldik7XFxuK1xcdH1cXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuK1xcdGJ1cy1cXHUwMDNlc3RhdGUgPSBNRElPQlVTX1VOUkVHSVNURVJFRDtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbWFwX2xvY2spO1xcbit9XFxuK1xcbiAvKipcXG4gICogX19tZGlvYnVzX3JlZ2lzdGVyIC0gYnJpbmcgdXAgYWxsIHRoZSBQSFlzIG9uIGEgZ2l2ZW4gYnVzIGFuZCBhdHRhY2ggdGhlbSB0byBidXNcXG4gICogQGJ1czogdGFyZ2V0IG1paV9idXNcXG5AQCAtNTUyLDEwICs2MjIsOSBAQCBzdGF0aWMgYm9vbCBtZGlvYnVzX3ByZXZlbnRfYzQ1X3NjYW4oc3RydWN0IG1paV9idXMgKmJ1cylcXG4gICovXFxuIGludCBfX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cywgc3RydWN0IG1vZHVsZSAqb3duZXIpXFxuIHtcXG4tXFx0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2O1xcbiBcXHRzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvZDtcXG4gXFx0Ym9vbCBwcmV2ZW50X2M0NV9zY2FuO1xcbi1cXHRpbnQgaSwgZXJyO1xcbitcXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWYgKCFidXMgfHwgIWJ1cy1cXHUwMDNlbmFtZSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTU5Niw3ICs2NjUsOSBAQCBpbnQgX19tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICpidXMsIHN0cnVjdCBtb2R1bGUgKm93bmVyKVxcbiBcXHQgKlxcbiBcXHQgKiBTdGF0ZSB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgaW4gdGhpcyBmdW5jdGlvbiBpbiBjYXNlIG9mIHN1Y2Nlc3NcXG4gXFx0ICovXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuIFxcdGJ1cy1cXHUwMDNlc3RhdGUgPSBNRElPQlVTX1VOUkVHSVNURVJFRDtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbWFwX2xvY2spO1xcbiBcXG4gXFx0ZXJyID0gZGV2aWNlX3JlZ2lzdGVyKFxcdTAwMjZidXMtXFx1MDAzZWRldik7XFxuIFxcdGlmIChlcnIpIHtcXG5AQCAtNjEzLDggKzY4NCw3IEBAIGludCBfX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cywgc3RydWN0IG1vZHVsZSAqb3duZXIpXFxuIFxcdFxcdGVyciA9IGRldl9lcnJfcHJvYmUoXFx1MDAyNmJ1cy1cXHUwMDNlZGV2LCBQVFJfRVJSKGdwaW9kKSxcXG4gXFx0XFx0XFx0XFx0ICAgIFxcXCJtaWlfYnVzICVzIGNvdWxkbid0IGdldCByZXNldCBHUElPXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgICAgYnVzLVxcdTAwM2VpZCk7XFxuLVxcdFxcdGRldmljZV9kZWwoXFx1MDAyNmJ1cy1cXHUwMDNlZGV2KTtcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0Z290byBlcnJvcl9yZXNldF9ncGlvZDtcXG4gXFx0fSBlbHNlXFx0aWYgKGdwaW9kKSB7XFxuIFxcdFxcdGJ1cy1cXHUwMDNlcmVzZXRfZ3Bpb2QgPSBncGlvZDtcXG4gXFx0XFx0ZnNsZWVwKGJ1cy1cXHUwMDNlcmVzZXRfZGVsYXlfdXMpO1xcbkBAIC02MjksNiArNjk5LDEwIEBAIGludCBfX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cywgc3RydWN0IG1vZHVsZSAqb3duZXIpXFxuIFxcdFxcdFxcdGdvdG8gZXJyb3JfcmVzZXRfZ3Bpb2Q7XFxuIFxcdH1cXG4gXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuK1xcdGJ1cy1cXHUwMDNlc3RhdGUgPSBNRElPQlVTX1JFR0lTVEVSSU5HO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuK1xcbiBcXHRpZiAoYnVzLVxcdTAwM2VyZWFkKSB7XFxuIFxcdFxcdGVyciA9IG1kaW9idXNfc2Nhbl9idXNfYzIyKGJ1cyk7XFxuIFxcdFxcdGlmIChlcnIpXFxuQEAgLTY0MywyMCArNzE3LDE3IEBAIGludCBfX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cywgc3RydWN0IG1vZHVsZSAqb3duZXIpXFxuIFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIFxcdH1cXG4gXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuIFxcdGJ1cy1cXHUwMDNlc3RhdGUgPSBNRElPQlVTX1JFR0lTVEVSRUQ7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX21hcF9sb2NrKTtcXG4gXFx0ZGV2X2RiZyhcXHUwMDI2YnVzLVxcdTAwM2VkZXYsIFxcXCJwcm9iZWRcXFxcblxcXCIpO1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIGVycm9yOlxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUEhZX01BWF9BRERSOyBpKyspIHtcXG4tXFx0XFx0bWRpb2RldiA9IGJ1cy1cXHUwMDNlbWRpb19tYXBbaV07XFxuLVxcdFxcdGlmICghbWRpb2RldilcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcbi1cXHRcXHRtZGlvZGV2LVxcdTAwM2VkZXZpY2VfcmVtb3ZlKG1kaW9kZXYpO1xcbi1cXHRcXHRtZGlvZGV2LVxcdTAwM2VkZXZpY2VfZnJlZShtZGlvZGV2KTtcXG4tXFx0fVxcbiBlcnJvcl9yZXNldF9ncGlvZDpcXG4rXFx0bWRpb2J1c19zdG9wX2RldmljZV9jaGFuZ2VzKGJ1cyk7XFxuK1xcdG1kaW9idXNfcmVtb3ZlX2RldmljZXMoYnVzKTtcXG4rXFxuIFxcdC8qIFB1dCBQSFlzIGluIFJFU0VUIHRvIHNhdmUgcG93ZXIgKi9cXG4gXFx0aWYgKGJ1cy1cXHUwMDNlcmVzZXRfZ3Bpb2QpXFxuIFxcdFxcdGdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChidXMtXFx1MDAzZXJlc2V0X2dwaW9kLCAxKTtcXG5AQCAtNjY4LDIxICs3MzksMTEgQEAgRVhQT1JUX1NZTUJPTChfX21kaW9idXNfcmVnaXN0ZXIpO1xcbiBcXG4gdm9pZCBtZGlvYnVzX3VucmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cylcXG4ge1xcbi1cXHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XFxuLVxcdGludCBpO1xcbi1cXG4gXFx0aWYgKFdBUk5fT05fT05DRShidXMtXFx1MDAzZXN0YXRlICE9IE1ESU9CVVNfUkVHSVNURVJFRCkpXFxuIFxcdFxcdHJldHVybjtcXG4tXFx0YnVzLVxcdTAwM2VzdGF0ZSA9IE1ESU9CVVNfVU5SRUdJU1RFUkVEO1xcbi1cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFBIWV9NQVhfQUREUjsgaSsrKSB7XFxuLVxcdFxcdG1kaW9kZXYgPSBidXMtXFx1MDAzZW1kaW9fbWFwW2ldO1xcbi1cXHRcXHRpZiAoIW1kaW9kZXYpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0bWRpb2Rldi1cXHUwMDNlZGV2aWNlX3JlbW92ZShtZGlvZGV2KTtcXG4tXFx0XFx0bWRpb2Rldi1cXHUwMDNlZGV2aWNlX2ZyZWUobWRpb2Rldik7XFxuLVxcdH1cXG4rXFx0bWRpb2J1c19zdG9wX2RldmljZV9jaGFuZ2VzKGJ1cyk7XFxuK1xcdG1kaW9idXNfcmVtb3ZlX2RldmljZXMoYnVzKTtcXG4gXFxuIFxcdC8qIFB1dCBQSFlzIGluIFJFU0VUIHRvIHNhdmUgcG93ZXIgKi9cXG4gXFx0aWYgKGJ1cy1cXHUwMDNlcmVzZXRfZ3Bpb2QpXFxuQEAgLTcwMiw4ICs3NjMsMTEgQEAgRVhQT1JUX1NZTUJPTChtZGlvYnVzX3VucmVnaXN0ZXIpO1xcbiAgKi9cXG4gdm9pZCBtZGlvYnVzX2ZyZWUoc3RydWN0IG1paV9idXMgKmJ1cylcXG4ge1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbWFwX2xvY2spO1xcbitcXG4gXFx0LyogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBlcnJvciBoYW5kbGluZyBpbiBkcml2ZXJzLiAqL1xcbiBcXHRpZiAoYnVzLVxcdTAwM2VzdGF0ZSA9PSBNRElPQlVTX0FMTE9DQVRFRCkge1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuIFxcdFxcdGtmcmVlKGJ1cyk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbkBAIC03MTEsNiArNzc1LDcgQEAgdm9pZCBtZGlvYnVzX2ZyZWUoc3RydWN0IG1paV9idXMgKmJ1cylcXG4gXFx0V0FSTihidXMtXFx1MDAzZXN0YXRlICE9IE1ESU9CVVNfVU5SRUdJU1RFUkVELFxcbiBcXHQgICAgIFxcXCIlczogbm90IGluIFVOUkVHSVNURVJFRCBzdGF0ZVxcXFxuXFxcIiwgYnVzLVxcdTAwM2VpZCk7XFxuIFxcdGJ1cy1cXHUwMDNlc3RhdGUgPSBNRElPQlVTX1JFTEVBU0VEO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuIFxcbiBcXHRwdXRfZGV2aWNlKFxcdTAwMjZidXMtXFx1MDAzZWRldik7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuY1xcbmluZGV4IDA2MTUxZjIwNzEzNDYuLjNiMTllODMxNWY2MTUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuY1xcbkBAIC0xNSw2ICsxNSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9taWkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVzZXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG5AQCAtMzMsMTIgKzM0LDE2IEBAXFxuIHN0YXRpYyBpbnQgbWRpb19kZXZpY2VfcmVnaXN0ZXJfcmVzZXQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCByZXNldF9jb250cm9sICpyZXNldDtcXG4rXFx0aW50IGVycjtcXG4gXFxuIFxcdC8qIERlYXNzZXJ0IHRoZSBvcHRpb25hbCByZXNldCBzaWduYWwgKi9cXG4gXFx0bWRpb2Rldi1cXHUwMDNlcmVzZXRfZ3BpbyA9IGdwaW9kX2dldF9vcHRpb25hbChcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgXFxcInJlc2V0XFxcIiwgR1BJT0RfT1VUX0xPVyk7XFxuLVxcdGlmIChJU19FUlIobWRpb2Rldi1cXHUwMDNlcmVzZXRfZ3BpbykpXFxuLVxcdFxcdHJldHVybiBQVFJfRVJSKG1kaW9kZXYtXFx1MDAzZXJlc2V0X2dwaW8pO1xcbitcXHRpZiAoSVNfRVJSKG1kaW9kZXYtXFx1MDAzZXJlc2V0X2dwaW8pKSB7XFxuK1xcdFxcdGVyciA9IFBUUl9FUlIobWRpb2Rldi1cXHUwMDNlcmVzZXRfZ3Bpbyk7XFxuK1xcdFxcdG1kaW9kZXYtXFx1MDAzZXJlc2V0X2dwaW8gPSBOVUxMO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAobWRpb2Rldi1cXHUwMDNlcmVzZXRfZ3BpbylcXG4gXFx0XFx0Z3Bpb2Rfc2V0X2NvbnN1bWVyX25hbWUobWRpb2Rldi1cXHUwMDNlcmVzZXRfZ3BpbywgXFxcIlBIWSByZXNldFxcXCIpO1xcbkBAIC0xMTYsNiArMTIxLDEzIEBAIHN0YXRpYyB2b2lkIG1kaW9fZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbiBcXHRrZnJlZSh0b19tZGlvX2RldmljZShkZXYpKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBfX21kaW9fZGV2aWNlX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgZHluYW1pYyk7XFxuK1xcbitzdGF0aWMgaW50IG1kaW9fZGV2aWNlX3JlbW92ZV9keW5hbWljKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4re1xcbitcXHRyZXR1cm4gX19tZGlvX2RldmljZV9yZW1vdmUobWRpb2RldiwgdHJ1ZSk7XFxuK31cXG4rXFxuIHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb19kZXZpY2VfY3JlYXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyKVxcbiB7XFxuIFxcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldjtcXG5AQCAtMTMwLDkgKzE0MiwxMSBAQCBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9fZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcXG4gXFx0bWRpb2Rldi1cXHUwMDNlZGV2LmJ1cyA9IFxcdTAwMjZtZGlvX2J1c190eXBlO1xcbiBcXHRtZGlvZGV2LVxcdTAwM2VkZXZpY2VfZnJlZSA9IG1kaW9fZGV2aWNlX2ZyZWU7XFxuIFxcdG1kaW9kZXYtXFx1MDAzZWRldmljZV9yZW1vdmUgPSBtZGlvX2RldmljZV9yZW1vdmU7XFxuK1xcdG1kaW9kZXYtXFx1MDAzZWRldmljZV9yZW1vdmVfZHluYW1pYyA9IG1kaW9fZGV2aWNlX3JlbW92ZV9keW5hbWljO1xcbiBcXHRtZGlvZGV2LVxcdTAwM2VidXMgPSBidXM7XFxuIFxcdG1kaW9kZXYtXFx1MDAzZWFkZHIgPSBhZGRyO1xcbiBcXHRtZGlvZGV2LVxcdTAwM2VyZXNldF9zdGF0ZSA9IC0xO1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bWRpb2Rldi1cXHUwMDNlcmV0aXJlZF9ub2RlKTtcXG4gXFxuIFxcdGRldl9zZXRfbmFtZShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2LCBQSFlfSURfRk1ULCBidXMtXFx1MDAzZWlkLCBhZGRyKTtcXG4gXFxuQEAgLTE1OSwxOSArMTczLDI3IEBAIGludCBtZGlvX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbiBcXHRlcnIgPSBkZXZpY2VfYWRkKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYpO1xcbi1cXHRpZiAoZXJyKSB7XFxuK1xcdGlmIChlcnIpXFxuIFxcdFxcdHByX2VycihcXFwiTURJTyAlZCBmYWlsZWQgdG8gYWRkXFxcXG5cXFwiLCBtZGlvZGV2LVxcdTAwM2VhZGRyKTtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiAwO1xcbiBcXG4tIG91dDpcXG4tXFx0bWRpb2J1c191bnJlZ2lzdGVyX2RldmljZShtZGlvZGV2KTtcXG4tXFx0cmV0dXJuIGVycjtcXG4rXFx0cmV0dXJuIG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUobWRpb2RldiwgZXJyKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKG1kaW9fZGV2aWNlX3JlZ2lzdGVyKTtcXG4gXFxuK3N0YXRpYyBpbnQgX19tZGlvX2RldmljZV9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIGR5bmFtaWMpXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGVyciA9IG1kaW9idXNfYmVnaW5fcmVtb3ZlKG1kaW9kZXYsIGR5bmFtaWMpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0ZGV2aWNlX2RlbChcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG4rXFx0bWRpb2J1c19maW5pc2hfcmVtb3ZlKG1kaW9kZXYsIGR5bmFtaWMpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBtZGlvX2RldmljZV9yZW1vdmUgLSBSZW1vdmUgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgbWRpbyBkZXZpY2UgZnJvbSB0aGVcXG4gICpcXHRcXHRcXHRNRElPIGJ1c1xcbkBAIC0xODMsNDIgKzIwNSwyMTEgQEAgRVhQT1JUX1NZTUJPTChtZGlvX2RldmljZV9yZWdpc3Rlcik7XFxuICAqL1xcbiB2b2lkIG1kaW9fZGV2aWNlX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuIHtcXG4tXFx0ZGV2aWNlX2RlbChcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG4tXFx0bWRpb2J1c191bnJlZ2lzdGVyX2RldmljZShtZGlvZGV2KTtcXG4rXFx0X19tZGlvX2RldmljZV9yZW1vdmUobWRpb2RldiwgZmFsc2UpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wobWRpb19kZXZpY2VfcmVtb3ZlKTtcXG4gXFxuIGludCBtZGlvYnVzX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuIHtcXG4rXFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IG1kaW9kZXYtXFx1MDAzZWJ1cztcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGlmIChtZGlvZGV2LVxcdTAwM2VidXMtXFx1MDAzZW1kaW9fbWFwW21kaW9kZXYtXFx1MDAzZWFkZHJdKVxcbi1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbWFwX2xvY2spO1xcbitcXHRpZiAoYnVzLVxcdTAwM2VzdGF0ZSAhPSBNRElPQlVTX1JFR0lTVEVSSU5HIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBidXMtXFx1MDAzZXN0YXRlICE9IE1ESU9CVVNfUkVHSVNURVJFRCkge1xcbitcXHRcXHRlcnIgPSAtRU5PREVWO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdH1cXG4rXFx0aWYgKGJ1cy1cXHUwMDNlbWRpb19tYXBfcmVtb3ZhbHMpIHtcXG4rXFx0XFx0ZXJyID0gLUVCVVNZO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChidXMtXFx1MDAzZW1kaW9fbWFwW21kaW9kZXYtXFx1MDAzZWFkZHJdIHx8XFxuK1xcdCAgICBidXMtXFx1MDAzZW1kaW9fbWFwX3BlbmRpbmcgXFx1MDAyNiBCSVQobWRpb2Rldi1cXHUwMDNlYWRkcikpIHtcXG4rXFx0XFx0ZXJyID0gLUVCVVNZO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdGJ1cy1cXHUwMDNlbWRpb19tYXBfcGVuZGluZyB8PSBCSVQobWRpb2Rldi1cXHUwMDNlYWRkcik7XFxuK1xcdGJ1cy1cXHUwMDNlbWRpb19tYXBfb3BzKys7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX21hcF9sb2NrKTtcXG4gXFxuIFxcdGlmIChtZGlvZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IE1ESU9fREVWSUNFX0ZMQUdfUEhZKSB7XFxuIFxcdFxcdGVyciA9IG1kaW9fZGV2aWNlX3JlZ2lzdGVyX3Jlc2V0KG1kaW9kZXYpO1xcbi1cXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUobWRpb2RldiwgZXJyKTtcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0LyogQXNzZXJ0IHRoZSByZXNldCBzaWduYWwgKi9cXG4gXFx0XFx0bWRpb19kZXZpY2VfcmVzZXQobWRpb2RldiwgMSk7XFxuIFxcdH1cXG4gXFxuLVxcdG1kaW9kZXYtXFx1MDAzZWJ1cy1cXHUwMDNlbWRpb19tYXBbbWRpb2Rldi1cXHUwMDNlYWRkcl0gPSBtZGlvZGV2O1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbWFwX2xvY2spO1xcbitcXHQvKiBUZWFyZG93biB3YWl0cyBmb3IgdGhpcyByZWdpc3RyYXRpb24gYmVmb3JlIGNvbnN1bWluZyB0aGUgbWFwLiAqL1xcbitcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX21hcFttZGlvZGV2LVxcdTAwM2VhZGRyXSwgbWRpb2Rldik7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX21hcF9sb2NrKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rb3V0X3VubG9jazpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbWFwX2xvY2spO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1pbnQgbWRpb2J1c191bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuKy8qKlxcbisgKiBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4gLSBzdGFydCBjaGFuZ2luZyBkZXZpY2VzIG9uIGEgcmVnaXN0ZXJlZCBidXNcXG4rICogQGJ1czogTURJTyBidXMgdGhhdCB3aWxsIGJlIHNjYW5uZWQgb3IgY2hhbmdlZFxcbisgKiBAcmVtb3Zpbmc6IHdoZXRoZXIgUEhZIGF0dGFjaG1lbnQgbXVzdCBiZSBibG9ja2VkIGR1cmluZyB0aGUgY2hhbmdlXFxuKyAqXFxuKyAqIFJldHVybjogemVybyBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSB3aGVuIHRoZSBidXMgaXMgdW5hdmFpbGFibGVcXG4rICovXFxuK2ludCBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4oc3RydWN0IG1paV9idXMgKmJ1cywgYm9vbCByZW1vdmluZylcXG4ge1xcbi1cXHRpZiAobWRpb2Rldi1cXHUwMDNlYnVzLVxcdTAwM2VtZGlvX21hcFttZGlvZGV2LVxcdTAwM2VhZGRyXSAhPSBtZGlvZGV2KVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbWFwX2xvY2spO1xcbitcXHRpZiAoYnVzLVxcdTAwM2VzdGF0ZSAhPSBNRElPQlVTX1JFR0lTVEVSRUQpIHtcXG4rXFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0YnVzLVxcdTAwM2VtZGlvX21hcF9vcHMrKztcXG4rXFx0XFx0aWYgKHJlbW92aW5nKVxcbitcXHRcXHRcXHRidXMtXFx1MDAzZW1kaW9fbWFwX3JlbW92YWxzKys7XFxuK1xcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbWFwX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4pO1xcbiBcXG4tXFx0bWRpb19kZXZpY2VfdW5yZWdpc3Rlcl9yZXNldChtZGlvZGV2KTtcXG4rc3RhdGljIHZvaWQgbWRpb2J1c19vcGVyYXRpb25fZG9uZV9sb2NrZWQoc3RydWN0IG1paV9idXMgKmJ1cylcXG4re1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbWFwX2xvY2spO1xcbiBcXG4tXFx0bWRpb2Rldi1cXHUwMDNlYnVzLVxcdTAwM2VtZGlvX21hcFttZGlvZGV2LVxcdTAwM2VhZGRyXSA9IE5VTEw7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UoIWJ1cy1cXHUwMDNlbWRpb19tYXBfb3BzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRidXMtXFx1MDAzZW1kaW9fbWFwX29wcy0tO1xcbitcXHRpZiAoIWJ1cy1cXHUwMDNlbWRpb19tYXBfb3BzKVxcbitcXHRcXHR3YWtlX3VwX2FsbChcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX21hcF93YWl0KTtcXG4rfVxcbiBcXG4tXFx0cmV0dXJuIDA7XFxuKy8qKlxcbisgKiBtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kIC0gZmluaXNoIGNoYW5naW5nIGRldmljZXMgb24gYW4gTURJTyBidXNcXG4rICogQGJ1czogTURJTyBidXMgcHJldmlvdXNseSBwYXNzZWQgdG8gbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKClcXG4rICogQHJlbW92aW5nOiB2YWx1ZSBwYXNzZWQgdG8gbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKClcXG4rICovXFxuK3ZvaWQgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2VuZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBib29sIHJlbW92aW5nKVxcbit7XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuK1xcdGlmIChyZW1vdmluZykge1xcbitcXHRcXHRpZiAoIVdBUk5fT05fT05DRSghYnVzLVxcdTAwM2VtZGlvX21hcF9yZW1vdmFscykpXFxuK1xcdFxcdFxcdGJ1cy1cXHUwMDNlbWRpb19tYXBfcmVtb3ZhbHMtLTtcXG4rXFx0fVxcbitcXHRtZGlvYnVzX29wZXJhdGlvbl9kb25lX2xvY2tlZChidXMpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWRpb2J1c19kZXZpY2VfY2hhbmdlX2VuZCk7XFxuK1xcbitzdGF0aWMgdm9pZCBtZGlvYnVzX29wZXJhdGlvbl9kb25lKHN0cnVjdCBtaWlfYnVzICpidXMpXFxuK3tcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX21hcF9sb2NrKTtcXG4rXFx0bWRpb2J1c19vcGVyYXRpb25fZG9uZV9sb2NrZWQoYnVzKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbWFwX2xvY2spO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtZGlvYnVzX3VucHVibGlzaF9kZXZpY2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBtZGlvZGV2LVxcdTAwM2VidXM7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbWFwX2xvY2spO1xcbitcXG4rXFx0aWYgKGJ1cy1cXHUwMDNlbWRpb19tYXBbbWRpb2Rldi1cXHUwMDNlYWRkcl0gPT0gbWRpb2RldilcXG4rXFx0XFx0V1JJVEVfT05DRShidXMtXFx1MDAzZW1kaW9fbWFwW21kaW9kZXYtXFx1MDAzZWFkZHJdLCBOVUxMKTtcXG4rXFx0aWYgKG1kaW9kZXYtXFx1MDAzZWRldi5vZl9ub2RlKVxcbitcXHRcXHRvZl9ub2RlX2NsZWFyX2ZsYWcobWRpb2Rldi1cXHUwMDNlZGV2Lm9mX25vZGUsIE9GX1BPUFVMQVRFRCk7XFxuK31cXG4rXFxuK2ludCBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgaW50IGVycilcXG4re1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpb2Rldi1cXHUwMDNlYnVzO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX21hcF9sb2NrKTtcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghKGJ1cy1cXHUwMDNlbWRpb19tYXBfcGVuZGluZyBcXHUwMDI2IEJJVChtZGlvZGV2LVxcdTAwM2VhZGRyKSkpKVxcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRtZGlvYnVzX3VucHVibGlzaF9kZXZpY2UobWRpb2Rldik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0V0FSTl9PTl9PTkNFKGJ1cy1cXHUwMDNlbWRpb19tYXBbbWRpb2Rldi1cXHUwMDNlYWRkcl0gIT0gbWRpb2Rldik7XFxuK1xcbitcXHRidXMtXFx1MDAzZW1kaW9fbWFwX3BlbmRpbmcgXFx1MDAyNj0gfkJJVChtZGlvZGV2LVxcdTAwM2VhZGRyKTtcXG4rXFxuK291dF91bmxvY2s6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX21hcF9sb2NrKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRpZiAobWRpb2Rldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNRElPX0RFVklDRV9GTEFHX1BIWSkge1xcbitcXHRcXHRcXHRtZGlvX2RldmljZV9yZXNldChtZGlvZGV2LCAxKTtcXG4rXFx0XFx0XFx0bWRpb19kZXZpY2VfdW5yZWdpc3Rlcl9yZXNldChtZGlvZGV2KTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdG1kaW9idXNfb3BlcmF0aW9uX2RvbmUoYnVzKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK2ludCBtZGlvYnVzX2JlZ2luX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgZHluYW1pYylcXG4re1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpb2Rldi1cXHUwMDNlYnVzO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuK1xcdGlmIChkeW5hbWljIFxcdTAwMjZcXHUwMDI2IChidXMtXFx1MDAzZXN0YXRlID09IE1ESU9CVVNfVU5SRUdJU1RFUkVEIHx8XFxuK1xcdFxcdFxcdGJ1cy1cXHUwMDNlc3RhdGUgPT0gTURJT0JVU19SRUxFQVNFRCkpIHtcXG4rXFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHR9XFxuK1xcdGlmIChidXMtXFx1MDAzZW1kaW9fbWFwX3BlbmRpbmcgXFx1MDAyNiBCSVQobWRpb2Rldi1cXHUwMDNlYWRkcikpIHtcXG4rXFx0XFx0ZXJyID0gLUVCVVNZO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChidXMtXFx1MDAzZW1kaW9fbWFwW21kaW9kZXYtXFx1MDAzZWFkZHJdICE9IG1kaW9kZXYpIHtcXG4rXFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZHluYW1pYyBcXHUwMDI2XFx1MDAyNiBtZGlvZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IE1ESU9fREVWSUNFX0ZMQUdfUEhZIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICB0b19waHlfZGV2aWNlKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYpLVxcdTAwM2VhdHRhY2hlZCkge1xcbitcXHRcXHRlcnIgPSAtRUJVU1k7XFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFx0fVxcbitcXG4rXFx0bWRpb2J1c191bnB1Ymxpc2hfZGV2aWNlKG1kaW9kZXYpO1xcbitcXG4rXFx0aWYgKGR5bmFtaWMpIHtcXG4rXFx0XFx0bWRpb19kZXZpY2VfZ2V0KG1kaW9kZXYpO1xcbitcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VyZXRpcmVkX25vZGUsIFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbWFwX3JldGlyZWQpO1xcbitcXHR9XFxuK1xcbitvdXRfdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3ZvaWQgbWRpb2J1c19maW5pc2hfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKVxcbit7XFxuK1xcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGU7XFxuK1xcbitcXHRpZiAobWRpb2Rldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNRElPX0RFVklDRV9GTEFHX1BIWSlcXG4rXFx0XFx0bWRpb19kZXZpY2VfdW5yZWdpc3Rlcl9yZXNldChtZGlvZGV2KTtcXG4rXFxuK1xcdC8qIERvIG5vdCBrZWVwIGFuIG92ZXJsYXkgbm9kZSBhbGl2ZSB3aXRoIHRoZSByZXRpcmVkIGRldmljZS4gKi9cXG4rXFx0aWYgKGR5bmFtaWMpIHtcXG4rXFx0XFx0Zndub2RlID0gZGV2X2Z3bm9kZShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0ZGV2aWNlX3NldF9ub2RlKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYsIE5VTEwpO1xcbitcXHRcXHRmd25vZGVfaGFuZGxlX3B1dChmd25vZGUpO1xcbitcXHR9XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbmluZGV4IDk0YjJlODVlMDBhMzcuLjNiMTgyOTU3YzNkZTYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcXG5AQCAtMjI3LDYgKzIyNyw4IEBAIHN0YXRpYyB2b2lkIHBoeV9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdGtmcmVlKHRvX3BoeV9kZXZpY2UoZGV2KSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgX19waHlfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGR5bmFtaWMpO1xcbitcXG4gc3RhdGljIHZvaWQgcGh5X21kaW9fZGV2aWNlX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuIHtcXG4gXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcXG5AQCAtMjM1LDYgKzIzNywxNCBAQCBzdGF0aWMgdm9pZCBwaHlfbWRpb19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4gXFx0cGh5X2RldmljZV9yZW1vdmUocGh5ZGV2KTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBwaHlfbWRpb19kZXZpY2VfcmVtb3ZlX2R5bmFtaWMoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XFxuK1xcbitcXHRwaHlkZXYgPSBjb250YWluZXJfb2YobWRpb2Rldiwgc3RydWN0IHBoeV9kZXZpY2UsIG1kaW8pO1xcbitcXHRyZXR1cm4gX19waHlfZGV2aWNlX3JlbW92ZShwaHlkZXYsIHRydWUpO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZ2VucGh5X2RyaXZlcjtcXG4gXFxuIHN0YXRpYyBMSVNUX0hFQUQocGh5X2ZpeHVwX2xpc3QpO1xcbkBAIC03NjgsNyArNzc4LDkgQEAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCB1MzIgcGh5X2lkLFxcbiBcXHRtZGlvZGV2LVxcdTAwM2VmbGFncyA9IE1ESU9fREVWSUNFX0ZMQUdfUEhZO1xcbiBcXHRtZGlvZGV2LVxcdTAwM2VkZXZpY2VfZnJlZSA9IHBoeV9tZGlvX2RldmljZV9mcmVlO1xcbiBcXHRtZGlvZGV2LVxcdTAwM2VkZXZpY2VfcmVtb3ZlID0gcGh5X21kaW9fZGV2aWNlX3JlbW92ZTtcXG4rXFx0bWRpb2Rldi1cXHUwMDNlZGV2aWNlX3JlbW92ZV9keW5hbWljID0gcGh5X21kaW9fZGV2aWNlX3JlbW92ZV9keW5hbWljO1xcbiBcXHRtZGlvZGV2LVxcdTAwM2VyZXNldF9zdGF0ZSA9IC0xO1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bWRpb2Rldi1cXHUwMDNlcmV0aXJlZF9ub2RlKTtcXG4gXFxuIFxcdGRldi1cXHUwMDNlc3BlZWQgPSBTUEVFRF9VTktOT1dOO1xcbiBcXHRkZXYtXFx1MDAzZWR1cGxleCA9IERVUExFWF9VTktOT1dOO1xcbkBAIC0xMTIxLDI1ICsxMTMzLDQwIEBAIGludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdGVyciA9IHBoeV9zY2FuX2ZpeHVwcyhwaHlkZXYpO1xcbiBcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiZmFpbGVkIHRvIGluaXRpYWxpemVcXFxcblxcXCIpO1xcbi1cXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0cmV0dXJuIG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpbywgZXJyKTtcXG4gXFx0fVxcbiBcXG4gXFx0ZXJyID0gZGV2aWNlX2FkZChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldik7XFxuLVxcdGlmIChlcnIpIHtcXG4rXFx0aWYgKGVycilcXG4gXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJmYWlsZWQgdG8gYWRkXFxcXG5cXFwiKTtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gbWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZShcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLCBlcnIpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7XFxuK1xcbitzdGF0aWMgaW50IF9fcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBkeW5hbWljKVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRlcnIgPSBtZGlvYnVzX2JlZ2luX3JlbW92ZShcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLCBkeW5hbWljKTtcXG4rXFx0aWYgKGR5bmFtaWMgXFx1MDAyNlxcdTAwMjYgZXJyID09IC1FQlVTWSlcXG4rXFx0XFx0ZGV2X3dhcm4oXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYsXFxuK1xcdFxcdFxcdCBcXFwiY2Fubm90IHJlbW92ZSBhIFBIWSB3aGlsZSBpdCBpcyBhdHRhY2hlZCBvciBiZWluZyByZWdpc3RlcmVkXFxcXG5cXFwiKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdHVucmVnaXN0ZXJfbWlpX3RpbWVzdGFtcGVyKHBoeWRldi1cXHUwMDNlbWlpX3RzKTtcXG4rXFx0cHNlX2NvbnRyb2xfcHV0KHBoeWRldi1cXHUwMDNlcHNlYyk7XFxuK1xcbitcXHRkZXZpY2VfZGVsKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2KTtcXG4gXFxuLSBvdXQ6XFxuIFxcdC8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovXFxuIFxcdHBoeV9kZXZpY2VfcmVzZXQocGh5ZGV2LCAxKTtcXG4gXFxuLVxcdG1kaW9idXNfdW5yZWdpc3Rlcl9kZXZpY2UoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpbyk7XFxuLVxcdHJldHVybiBlcnI7XFxuK1xcdG1kaW9idXNfZmluaXNoX3JlbW92ZShcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLCBkeW5hbWljKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbiB9XFxuLUVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7XFxuIFxcbiAvKipcXG4gICogcGh5X2RldmljZV9yZW1vdmUgLSBSZW1vdmUgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgcGh5IGRldmljZSBmcm9tIHRoZSBNRElPIGJ1c1xcbkBAIC0xMTUxLDE1ICsxMTc4LDcgQEAgRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTtcXG4gICovXFxuIHZvaWQgcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4ge1xcbi1cXHR1bnJlZ2lzdGVyX21paV90aW1lc3RhbXBlcihwaHlkZXYtXFx1MDAzZW1paV90cyk7XFxuLVxcdHBzZV9jb250cm9sX3B1dChwaHlkZXYtXFx1MDAzZXBzZWMpO1xcbi1cXG4tXFx0ZGV2aWNlX2RlbChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldik7XFxuLVxcbi1cXHQvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xcbi1cXHRwaHlfZGV2aWNlX3Jlc2V0KHBoeWRldiwgMSk7XFxuLVxcbi1cXHRtZGlvYnVzX3VucmVnaXN0ZXJfZGV2aWNlKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8pO1xcbitcXHRfX3BoeV9kZXZpY2VfcmVtb3ZlKHBoeWRldiwgZmFsc2UpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZW1vdmUpO1xcbiBcXG5AQCAtMTczNCw2ICsxNzUzLDM2IEBAIHN0YXRpYyBib29sIHBoeV9kcnZfc3VwcG9ydHNfaXJxKGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXFxuIFxcdHJldHVybiBwaHlkcnYtXFx1MDAzZWNvbmZpZ19pbnRyIFxcdTAwMjZcXHUwMDI2IHBoeWRydi1cXHUwMDNlaGFuZGxlX2ludGVycnVwdDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBwaHlfY2xhaW0oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvO1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpb2Rldi1cXHUwMDNlYnVzO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuK1xcdGlmIChidXMtXFx1MDAzZXN0YXRlICE9IE1ESU9CVVNfUkVHSVNURVJFRCB8fFxcbitcXHQgICAgYnVzLVxcdTAwM2VtZGlvX21hcF9yZW1vdmFscyB8fFxcbitcXHQgICAgYnVzLVxcdTAwM2VtZGlvX21hcFttZGlvZGV2LVxcdTAwM2VhZGRyXSAhPSBtZGlvZGV2IHx8XFxuK1xcdCAgICAoYnVzLVxcdTAwM2VtZGlvX21hcF9wZW5kaW5nIFxcdTAwMjYgQklUKG1kaW9kZXYtXFx1MDAzZWFkZHIpKSlcXG4rXFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4rXFx0ZWxzZSBpZiAocGh5ZGV2LVxcdTAwM2VhdHRhY2hlZClcXG4rXFx0XFx0ZXJyID0gLUVCVVNZO1xcbitcXHRlbHNlXFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlYXR0YWNoZWQgPSB0cnVlO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBwaHlfcmVsZWFzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYnVzO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX21hcF9sb2NrKTtcXG4rXFx0cGh5ZGV2LVxcdTAwM2VhdHRhY2hlZCA9IGZhbHNlO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBwaHlfYXR0YWNoX2RpcmVjdCAtIGF0dGFjaCBhIG5ldHdvcmsgZGV2aWNlIHRvIGEgZ2l2ZW4gUEhZIGRldmljZSBwb2ludGVyXFxuICAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGF0dGFjaFxcbkBAIC0xNzU1LDYgKzE4MDQsNyBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4gXFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi1cXHUwMDNlbWRpby5idXM7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmQgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG4gXFx0c3RydWN0IG1vZHVsZSAqbmRldl9vd25lciA9IE5VTEw7XFxuK1xcdGJvb2wgY2xhaW1lZCA9IGZhbHNlO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0LyogRm9yIEV0aGVybmV0IGRldmljZSBkcml2ZXJzIHRoYXQgcmVnaXN0ZXIgdGhlaXIgb3duIE1ESU8gYnVzLCB3ZVxcbkBAIC0xNzcwLDYgKzE4MjAsMTMgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuIFxcdH1cXG4gXFxuIFxcdGdldF9kZXZpY2UoZCk7XFxuK1xcdGVyciA9IHBoeV9jbGFpbShwaHlkZXYpO1xcbitcXHRpZiAoZXJyID09IC1FQlVTWSlcXG4rXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJQSFkgYWxyZWFkeSBhdHRhY2hlZFxcXFxuXFxcIik7XFxuK1xcdGlmICghZXJyKVxcbitcXHRcXHRjbGFpbWVkID0gdHJ1ZTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJvcl9wdXRfZGV2aWNlO1xcbiBcXG4gXFx0LyogQXNzdW1lIHRoYXQgaWYgdGhlcmUgaXMgbm8gZHJpdmVyLCB0aGF0IGl0IGRvZXNuJ3RcXG4gXFx0ICogZXhpc3QsIGFuZCB3ZSBzaG91bGQgdXNlIHRoZSBnZW5waHkgZHJpdmVyLlxcbkBAIC0xNzk4LDEyICsxODU1LDYgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuIFxcdFxcdFxcdGdvdG8gZXJyb3JfbW9kdWxlX3B1dDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2KSB7XFxuLVxcdFxcdGRldl9lcnIoXFx1MDAyNmRldi1cXHUwMDNlZGV2LCBcXFwiUEhZIGFscmVhZHkgYXR0YWNoZWRcXFxcblxcXCIpO1xcbi1cXHRcXHRlcnIgPSAtRUJVU1k7XFxuLVxcdFxcdGdvdG8gZXJyb3I7XFxuLVxcdH1cXG4tXFxuIFxcdHBoeWRldi1cXHUwMDNlcGh5X2xpbmtfY2hhbmdlID0gcGh5X2xpbmtfY2hhbmdlO1xcbiBcXHRpZiAoZGV2KSB7XFxuIFxcdFxcdHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2ID0gZGV2O1xcbkBAIC0xODk5LDYgKzE5NTAsOCBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4gXFx0cGh5ZGV2LVxcdTAwM2Vpc19nZW5waHlfZHJpdmVuID0gMDtcXG4gXFx0ZC1cXHUwMDNlZHJpdmVyID0gTlVMTDtcXG4gZXJyb3JfcHV0X2RldmljZTpcXG4rXFx0aWYgKGNsYWltZWQpXFxuK1xcdFxcdHBoeV9yZWxlYXNlKHBoeWRldik7XFxuIFxcdHB1dF9kZXZpY2UoZCk7XFxuIFxcdGlmIChuZGV2X293bmVyICE9IGJ1cy1cXHUwMDNlb3duZXIpXFxuIFxcdFxcdG1vZHVsZV9wdXQoYnVzLVxcdTAwM2Vvd25lcik7XFxuQEAgLTE5NzcsNiArMjAzMCw3IEBAIHZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiBcXHQgKiBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBieSByZWFkaW5nIHRoZSB1bmRlcmx5aW5nIGJ1cyBmaXJzdC5cXG4gXFx0ICovXFxuIFxcdGJ1cyA9IHBoeWRldi1cXHUwMDNlbWRpby5idXM7XFxuK1xcdHBoeV9yZWxlYXNlKHBoeWRldik7XFxuIFxcbiBcXHRwdXRfZGV2aWNlKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2KTtcXG4gXFx0aWYgKGRldilcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpYi1pbnRlcm5hbC5oIGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpYi1pbnRlcm5hbC5oXFxuaW5kZXggNjY0ZWQ3ZmFhNTE4NC4uN2U5MTYxZmNkZDkwMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5bGliLWludGVybmFsLmhcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5bGliLWludGVybmFsLmhcXG5AQCAtMjUsNyArMjUsOSBAQCBpbnQgcGh5X3NwZWVkX2Rvd25fY29yZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG4gdm9pZCBwaHlfY2hlY2tfZG93bnNoaWZ0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBcXG4gaW50IG1kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldik7XFxuLWludCBtZGlvYnVzX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldik7XFxuK2ludCBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgaW50IGVycik7XFxuK2ludCBtZGlvYnVzX2JlZ2luX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgZHluYW1pYyk7XFxuK3ZvaWQgbWRpb2J1c19maW5pc2hfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKTtcXG4gXFxuIGludCBnZW5waHlfYzQ1X3JlYWRfZWVlX2FkdihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1bnNpZ25lZCBsb25nICphZHYpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZGlvLmggYi9pbmNsdWRlL2xpbnV4L21kaW8uaFxcbmluZGV4IGE3ZDllM2FlMzYyYTUuLmUxOTk2M2FmOGUxMzkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZGlvLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21kaW8uaFxcbkBAIC04LDYgKzgsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvbWRpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4gXFxuIHN0cnVjdCBncGlvX2Rlc2M7XFxuIHN0cnVjdCBtaWlfYnVzO1xcbkBAIC0zMiw2ICszMyw5IEBAIHN0cnVjdCBtZGlvX2RldmljZSB7XFxuIFxcdGludCAoKmJ1c19tYXRjaCkoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KTtcXG4gXFx0dm9pZCAoKmRldmljZV9mcmVlKShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpO1xcbiBcXHR2b2lkICgqZGV2aWNlX3JlbW92ZSkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KTtcXG4rXFx0aW50ICgqZGV2aWNlX3JlbW92ZV9keW5hbWljKShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpO1xcbitcXHQvKiBFbnRyeSBpbiBtaWlfYnVzOjptZGlvX21hcF9yZXRpcmVkLiAqL1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIHJldGlyZWRfbm9kZTtcXG4gXFxuIFxcdC8qIEJ1cyBhZGRyZXNzIG9mIHRoZSBNRElPIGRldmljZSAoMC0zMSkgKi9cXG4gXFx0aW50IGFkZHI7XFxuQEAgLTY5NCw2ICs2OTgsOCBAQCBzdGF0aWMgaW5saW5lIGludCBtZGlvZGV2X2M0NV93cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiBkZXZhZCxcXG4gXFxuIGJvb2wgbWRpb2J1c19pc19yZWdpc3RlcmVkX2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcik7XFxuIHN0cnVjdCBwaHlfZGV2aWNlICptZGlvYnVzX2dldF9waHkoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpO1xcbitpbnQgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKHN0cnVjdCBtaWlfYnVzICpidXMsIGJvb2wgcmVtb3ZpbmcpO1xcbit2b2lkIG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmQoc3RydWN0IG1paV9idXMgKmJ1cywgYm9vbCByZW1vdmluZyk7XFxuIFxcbiAvKipcXG4gICogbWRpb19tb2R1bGVfZHJpdmVyKCkgLSBIZWxwZXIgbWFjcm8gZm9yIHJlZ2lzdGVyaW5nIG1kaW8gZHJpdmVyc1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxcbmluZGV4IDVmOGQ2NTg2OGUwZmYuLjA1MDBmODBlMGZhY2YgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5AQCAtMjIsNiArMjIsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWlpX3RpbWVzdGFtcGVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93YWl0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS1pZC9tZGlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91NjRfc3RhdHNfc3luYy5oXFx1MDAzZVxcbkBAIC0zOTEsNyArMzkyLDkgQEAgc3RydWN0IG1paV9idXMge1xcbiBcXHQvKiogQHN0YXRlOiBTdGF0ZSBvZiBidXMgc3RydWN0dXJlICovXFxuIFxcdGVudW0ge1xcbiBcXHRcXHRNRElPQlVTX0FMTE9DQVRFRCA9IDEsXFxuK1xcdFxcdE1ESU9CVVNfUkVHSVNURVJJTkcsXFxuIFxcdFxcdE1ESU9CVVNfUkVHSVNURVJFRCxcXG4rXFx0XFx0TURJT0JVU19VTlJFR0lTVEVSSU5HLFxcbiBcXHRcXHRNRElPQlVTX1VOUkVHSVNURVJFRCxcXG4gXFx0XFx0TURJT0JVU19SRUxFQVNFRCxcXG4gXFx0fSBzdGF0ZTtcXG5AQCAtNDAxLDYgKzQwNCwxOCBAQCBzdHJ1Y3QgbWlpX2J1cyB7XFxuIFxcbiBcXHQvKiogQG1kaW9fbWFwOiBsaXN0IG9mIGFsbCBNRElPIGRldmljZXMgb24gYnVzICovXFxuIFxcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb19tYXBbUEhZX01BWF9BRERSXTtcXG4rXFx0LyoqIEBtZGlvX21hcF9wZW5kaW5nOiBhZGRyZXNzZXMgd2l0aCByZWdpc3RyYXRpb24gaW4gcHJvZ3Jlc3MgKi9cXG4rXFx0dTMyIG1kaW9fbWFwX3BlbmRpbmc7XFxuK1xcdC8qKiBAbWRpb19tYXBfbG9jazogcHJvdGVjdHMgdGhlIE1ESU8gZGV2aWNlIG1hcCBhbmQgYnVzIHN0YXRlICovXFxuK1xcdHN0cnVjdCBtdXRleCBtZGlvX21hcF9sb2NrO1xcbitcXHQvKiogQG1kaW9fbWFwX3dhaXQ6IHdhaXQgZm9yIGFjdGl2ZSBtYXAgb3BlcmF0aW9ucyBkdXJpbmcgdGVhcmRvd24gKi9cXG4rXFx0d2FpdF9xdWV1ZV9oZWFkX3QgbWRpb19tYXBfd2FpdDtcXG4rXFx0LyoqIEBtZGlvX21hcF9vcHM6IGFjdGl2ZSByZWdpc3RyYXRpb25zIGFuZCBmaXJtd2FyZSBjaGFuZ2VzICovXFxuK1xcdHVuc2lnbmVkIGludCBtZGlvX21hcF9vcHM7XFxuK1xcdC8qKiBAbWRpb19tYXBfcmVtb3ZhbHM6IGZpcm13YXJlIHJlbW92YWxzIGJsb2NraW5nIFBIWSBhdHRhY2htZW50ICovXFxuK1xcdHVuc2lnbmVkIGludCBtZGlvX21hcF9yZW1vdmFscztcXG4rXFx0LyoqIEBtZGlvX21hcF9yZXRpcmVkOiByZW1vdmVkIGRldmljZXMgcGlubmVkIHVudGlsIGJ1cyB0ZWFyZG93biAqL1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIG1kaW9fbWFwX3JldGlyZWQ7XFxuIFxcbiBcXHQvKiogQHBoeV9tYXNrOiBQSFkgYWRkcmVzc2VzIHRvIGJlIGlnbm9yZWQgd2hlbiBwcm9iaW5nICovXFxuIFxcdHUzMiBwaHlfbWFzaztcXG5AQCAtNjUyLDYgKzY2Nyw4IEBAIHN0cnVjdCBwaHlfb2F0YzE0X3NxaV9jYXBhYmlsaXR5IHtcXG4gICogQG5fcG9ydHM6IE51bWJlciBvZiBwb3J0cyBjdXJyZW50bHkgYXR0YWNoZWQgdG8gdGhlIFBIWVxcbiAgKiBAbWF4X25fcG9ydHM6IE1heCBudW1iZXIgb2YgcG9ydHMgdGhpcyBQSFkgY2FuIGV4cG9zZVxcbiAgKiBAbG9jazogIE11dGV4IGZvciBzZXJpYWxpemF0aW9uIGFjY2VzcyB0byBQSFlcXG4rICogQGF0dGFjaGVkOiBXaGV0aGVyIGEgbmV0d29yayBkZXZpY2Ugb3Igc3RhbmRhbG9uZSB1c2VyIGF0dGFjaGVkIHRoZSBQSFk7XFxuKyAqXFx0cHJvdGVjdGVkIGJ5IHRoZSBNRElPIGJ1cyBtYXAgbG9ja1xcbiAgKiBAc3RhdGVfcXVldWU6IFdvcmsgcXVldWUgZm9yIHN0YXRlIG1hY2hpbmVcXG4gICogQGxpbmtfZG93bl9ldmVudHM6IE51bWJlciBvZiB0aW1lcyBsaW5rIHdhcyBsb3N0XFxuICAqIEBzaGFyZWQ6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhIHNoYXJlZCBieSBwaHlzIGluIG9uZSBwYWNrYWdlXFxuQEAgLTc4MSw2ICs3OTgsNyBAQCBzdHJ1Y3QgcGh5X2RldmljZSB7XFxuIFxcdHN0cnVjdCBkZWxheWVkX3dvcmsgc3RhdGVfcXVldWU7XFxuIFxcbiBcXHRzdHJ1Y3QgbXV0ZXggbG9jaztcXG4rXFx0Ym9vbCBhdHRhY2hlZDtcXG4gXFxuIFxcdC8qIFRoaXMgbWF5IGJlIG1vZGlmaWVkIHVuZGVyIHRoZSBydG5sIGxvY2sgKi9cXG4gXFx0Ym9vbCBzZnBfYnVzX2F0dGFjaGVkO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNjowNi4wNDMzNDU2OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIwMzM4MzE0MDQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPRlwiLFxuICAgIFwiT0ZfRFlOQU1JQ1wiLFxuICAgIFwiT0ZfT1ZFUkxBWVwiLFxuICAgIFwiUEhZTElCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19tZGlvYnVzX3JlZ2lzdGVyXCIsXG4gICAgXCJtZGlvYnVzX3VucmVnaXN0ZXJcIixcbiAgICBcIm1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpblwiLFxuICAgIFwibWRpb2J1c19kZXZpY2VfY2hhbmdlX2VuZFwiLFxuICAgIFwibWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZVwiLFxuICAgIFwibWRpb2J1c19iZWdpbl9yZW1vdmVcIixcbiAgICBcIm1kaW9idXNfZmluaXNoX3JlbW92ZVwiLFxuICAgIFwibWRpb19kZXZpY2VfcmVnaXN0ZXJcIixcbiAgICBcIm1kaW9fZGV2aWNlX3JlbW92ZVwiLFxuICAgIFwicGh5X2RldmljZV9yZWdpc3RlclwiLFxuICAgIFwicGh5X2RldmljZV9yZW1vdmVcIixcbiAgICBcInBoeV9hdHRhY2hfZGlyZWN0XCIsXG4gICAgXCJwaHlfZGV0YWNoXCIsXG4gICAgXCJfX29mX21kaW9idXNfcmVnaXN0ZXJcIixcbiAgICBcIm1kaW9idXNfc2Nhbl9jMjJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTURJTyBidXMgYW5kIFBIWSBkZXZpY2UgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIGxvZ2ljIHRvIHN1cHBvcnQgZHluYW1pYyBkZXZpY2UgdHJlZSBjaGFuZ2VzIChPRiBkeW5hbWljIGFuZCBvdmVybGF5KS4gSXQgaW50cm9kdWNlcyBhIGxvY2tpbmcgbWVjaGFuaXNtIChgbWRpb19tYXBfbG9ja2ApIHRvIHNlcmlhbGl6ZSBkZXZpY2UgY2hhbmdlcyBhbmQgcHJldmVudCByYWNlcyBkdXJpbmcgUEhZIGF0dGFjaG1lbnQgYW5kIGRldGFjaG1lbnQuIEl0IGFsc28gcmVmYWN0b3JzIHRoZSBzY2FubmluZyBhbmQgcmVnaXN0cmF0aW9uIG9mIFBIWXMgYW5kIE1ESU8gZGV2aWNlcy4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGxvZ2ljIGRvZXMgbm90IGludHJvZHVjZSBkZWFkbG9ja3Mgb3IgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwMzk4MWVmNTQ0MzU3NDY0NTY5NDBhNTRmYTFiOTJmOTU5MjgwNGJlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAwMDowNjowNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jIGIvZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmNcbmluZGV4IGI4ZDI5OGMwNGQzZmYuLmM4OWY4OGFhY2Q4ZGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uY1xuKysrIGIvZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmNcbkBAIC0xMyw2ICsxMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZndub2RlX21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfaXJxLmhcdTAwM2VcbkBAIC0yMCw2ICsyMSw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbmV0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeV9maXhlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4gXG4gI2RlZmluZSBERUZBVUxUX0dQSU9fUkVTRVRfREVMQVlcdDEwXHQvKiBpbiBtaWNyb3NlY29uZHMgKi9cbiBcbkBAIC0yNyw2ICszMCw1MiBAQCBNT0RVTEVfQVVUSE9SKFwiR3JhbnQgTGlrZWx5IFx1MDAzY2dyYW50Lmxpa2VseUBzZWNyZXRsYWIuY2FcdTAwM2VcIik7XG4gTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwiT3BlbkZpcm13YXJlIE1ESU8gYnVzIChFdGhlcm5ldCBQSFkpIGFjY2Vzc29yc1wiKTtcbiBcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfT0ZfRFlOQU1JQylcbisvKlxuKyAqIE9GIGNoYW5nZXMgY2FuIG5lc3Qgd2hlbiBwcm9iaW5nIG9uZSBNRElPIGRldmljZSBlbmFibGVzIGFub3RoZXIgbm9kZSBvblxuKyAqIHRoZSBzYW1lIGJ1cy4gU2VyaWFsaXplIGluZGVwZW5kZW50IGNoYW5nZXMgd2hpbGUgYWxsb3dpbmcgdGhhdCBuZXN0aW5nLlxuKyAqL1xuK3N0YXRpYyBERUZJTkVfTVVURVgob2ZfbWRpb19yZWNvbmZpZ19tdXRleCk7XG4rc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqb2ZfbWRpb19yZWNvbmZpZ19vd25lcjtcbitzdGF0aWMgdW5zaWduZWQgaW50IG9mX21kaW9fcmVjb25maWdfZGVwdGg7XG4rXG4rc3RhdGljIHZvaWQgb2ZfbWRpb19yZWNvbmZpZ19sb2NrKHZvaWQpXG4re1xuK1x0aWYgKCFtdXRleF90cnlsb2NrKFx1MDAyNm9mX21kaW9fcmVjb25maWdfbXV0ZXgpKSB7XG4rXHRcdGlmIChvZl9tZGlvX3JlY29uZmlnX293bmVyID09IGN1cnJlbnQpIHtcbitcdFx0XHRvZl9tZGlvX3JlY29uZmlnX2RlcHRoKys7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2b2ZfbWRpb19yZWNvbmZpZ19tdXRleCk7XG4rXHR9XG4rXG4rXHRXQVJOX09OX09OQ0Uob2ZfbWRpb19yZWNvbmZpZ19vd25lcik7XG4rXHRXQVJOX09OX09OQ0Uob2ZfbWRpb19yZWNvbmZpZ19kZXB0aCk7XG4rXHRvZl9tZGlvX3JlY29uZmlnX293bmVyID0gY3VycmVudDtcbitcdG9mX21kaW9fcmVjb25maWdfZGVwdGggPSAxO1xuK31cbitcbitzdGF0aWMgdm9pZCBvZl9tZGlvX3JlY29uZmlnX3VubG9jayh2b2lkKVxuK3tcbitcdFdBUk5fT05fT05DRShvZl9tZGlvX3JlY29uZmlnX293bmVyICE9IGN1cnJlbnQpO1xuK1x0V0FSTl9PTl9PTkNFKCFvZl9tZGlvX3JlY29uZmlnX2RlcHRoKTtcbitcbitcdGlmICgtLW9mX21kaW9fcmVjb25maWdfZGVwdGgpXG4rXHRcdHJldHVybjtcbitcbitcdG9mX21kaW9fcmVjb25maWdfb3duZXIgPSBOVUxMO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm9mX21kaW9fcmVjb25maWdfbXV0ZXgpO1xuK31cbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBvZl9tZGlvX3JlY29uZmlnX2xvY2sodm9pZClcbit7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBvZl9tZGlvX3JlY29uZmlnX3VubG9jayh2b2lkKVxuK3tcbit9XG4rI2VuZGlmXG4rXG4gLyogRXh0cmFjdCB0aGUgY2xhdXNlIDIyIHBoeSBJRCBmcm9tIHRoZSBjb21wYXRpYmxlIHN0cmluZyBvZiB0aGUgZm9ybVxuICAqIGV0aGVybmV0LXBoeS1pZEFBQUEuQkJCQiAqL1xuIHN0YXRpYyBpbnQgb2ZfZ2V0X3BoeV9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSwgdTMyICpwaHlfaWQpXG5AQCAtNDQsNyArOTMsNyBAQCBpbnQgb2ZfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxuIEVYUE9SVF9TWU1CT0wob2ZfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKTtcbiBcbiBzdGF0aWMgaW50IG9mX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICptZGlvLFxuLVx0XHRcdFx0ICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQsIHUzMiBhZGRyKVxuK1x0XHRcdFx0ICAgc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCwgdTMyIGFkZHIpXG4ge1xuIFx0cmV0dXJuIGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShtZGlvLCBvZl9md25vZGVfaGFuZGxlKGNoaWxkKSwgYWRkcik7XG4gfVxuQEAgLTc3LDYgKzEyNiwyNSBAQCBzdGF0aWMgaW50IG9mX21kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICptZGlvLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgb2ZfbWRpb2J1c19yZWdpc3Rlcl9jaGlsZChzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcbitcdFx0XHRcdCAgICAgc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCwgdTMyIGFkZHIpXG4re1xuK1x0aW50IHJjO1xuK1xuK1x0aWYgKG9mX25vZGVfdGVzdF9hbmRfc2V0X2ZsYWcoY2hpbGQsIE9GX1BPUFVMQVRFRCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKG9mX21kaW9idXNfY2hpbGRfaXNfcGh5KGNoaWxkKSlcbitcdFx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyX3BoeShtZGlvLCBjaGlsZCwgYWRkcik7XG4rXHRlbHNlXG4rXHRcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2UobWRpbywgY2hpbGQsIGFkZHIpO1xuK1xuK1x0aWYgKHJjKVxuK1x0XHRvZl9ub2RlX2NsZWFyX2ZsYWcoY2hpbGQsIE9GX1BPUFVMQVRFRCk7XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuIC8qIFRoZSBmb2xsb3dpbmcgaXMgYSBsaXN0IG9mIFBIWSBjb21wYXRpYmxlIHN0cmluZ3Mgd2hpY2ggYXBwZWFyIGluXG4gICogc29tZSBEVEJzLiBUaGUgY29tcGF0aWJsZSBzdHJpbmcgaXMgbmV2ZXIgbWF0Y2hlZCBhZ2FpbnN0IGEgUEhZXG4gICogZHJpdmVyLCBzbyBpcyBwb2ludGxlc3MuIFdlIG9ubHkgZXhwZWN0IGRldmljZXMgd2hpY2ggYXJlIG5vdCBQSFlzXG5AQCAtMTM2LDYgKzIwNCwzMiBAQCBib29sIG9mX21kaW9idXNfY2hpbGRfaXNfcGh5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQpXG4gfVxuIEVYUE9SVF9TWU1CT0wob2ZfbWRpb2J1c19jaGlsZF9pc19waHkpO1xuIFxuK3N0YXRpYyBpbnQgb2ZfbWRpb2J1c19zY2FuX3BoeShzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcbitcdFx0XHQgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpjaGlsZClcbit7XG4rXHRpbnQgYWRkciwgcmM7XG4rXG4rXHRpZiAoIW9mX21kaW9idXNfY2hpbGRfaXNfcGh5KGNoaWxkKSlcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHRmb3IgKGFkZHIgPSAwOyBhZGRyIFx1MDAzYyBQSFlfTUFYX0FERFI7IGFkZHIrKykge1xuK1x0XHRpZiAobWRpb2J1c19pc19yZWdpc3RlcmVkX2RldmljZShtZGlvLCBhZGRyKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0ZGV2X2luZm8oXHUwMDI2bWRpby1cdTAwM2VkZXYsIFwic2NhbiBwaHkgJXBPRm4gYXQgYWRkcmVzcyAlaVxcblwiLFxuK1x0XHRcdCBjaGlsZCwgYWRkcik7XG4rXG4rXHRcdC8qIC1FTk9ERVYgbWVhbnMgdGhhdCBzY2FubmluZyBzaG91bGQgY29udGludWUuICovXG4rXHRcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9jaGlsZChtZGlvLCBjaGlsZCwgYWRkcik7XG4rXHRcdGlmICghcmMpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdGlmIChyYyAhPSAtRU5PREVWKVxuK1x0XHRcdHJldHVybiByYztcbitcdH1cbitcbitcdHJldHVybiAtRU5PREVWO1xuK31cbitcbiBzdGF0aWMgaW50IF9fb2ZfbWRpb2J1c19wYXJzZV9waHlzKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuIFx0XHRcdFx0ICAgYm9vbCAqc2NhbnBoeXMpXG4ge1xuQEAgLTE2NCwxMCArMjU4LDcgQEAgc3RhdGljIGludCBfX29mX21kaW9idXNfcGFyc2VfcGh5cyhzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRpZiAob2ZfbWRpb2J1c19jaGlsZF9pc19waHkoY2hpbGQpKVxuLVx0XHRcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9waHkobWRpbywgY2hpbGQsIGFkZHIpO1xuLVx0XHRlbHNlXG4tXHRcdFx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyX2RldmljZShtZGlvLCBjaGlsZCwgYWRkcik7XG4rXHRcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9jaGlsZChtZGlvLCBjaGlsZCwgYWRkcik7XG4gXG4gXHRcdGlmIChyYyA9PSAtRU5PREVWKVxuIFx0XHRcdGRldl9lcnIoXHUwMDI2bWRpby1cdTAwM2VkZXYsXG5AQCAtMTk3LDcgKzI4OCw3IEBAIGludCBfX29mX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4ge1xuIFx0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZDtcbiBcdGJvb2wgc2NhbnBoeXMgPSBmYWxzZTtcbi1cdGludCBhZGRyLCByYztcbitcdGludCByYztcbiBcbiBcdGlmICghbnApXG4gXHRcdHJldHVybiBfX21kaW9idXNfcmVnaXN0ZXIobWRpbywgb3duZXIpO1xuQEAgLTIyMywxMyArMzE0LDIxIEBAIGludCBfX29mX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbiBcbitcdG9mX21kaW9fcmVjb25maWdfbG9jaygpO1xuK1x0cmMgPSBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4obWRpbywgZmFsc2UpO1xuK1x0aWYgKHJjKSB7XG4rXHRcdG9mX21kaW9fcmVjb25maWdfdW5sb2NrKCk7XG4rXHRcdG1kaW9idXNfdW5yZWdpc3RlcihtZGlvKTtcbitcdFx0cmV0dXJuIHJjO1xuK1x0fVxuK1xuIFx0LyogTG9vcCBvdmVyIHRoZSBjaGlsZCBub2RlcyBhbmQgcmVnaXN0ZXIgYSBwaHlfZGV2aWNlIGZvciBlYWNoIHBoeSAqL1xuIFx0cmMgPSBfX29mX21kaW9idXNfcGFyc2VfcGh5cyhtZGlvLCBucCwgXHUwMDI2c2NhbnBoeXMpO1xuIFx0aWYgKHJjKVxuLVx0XHRnb3RvIHVucmVnaXN0ZXI7XG4rXHRcdGdvdG8gb3V0X2NoYW5nZTtcbiBcbiBcdGlmICghc2NhbnBoeXMpXG4tXHRcdHJldHVybiAwO1xuK1x0XHRnb3RvIG91dF9jaGFuZ2U7XG4gXG4gXHQvKiBhdXRvIHNjYW4gZm9yIFBIWXMgd2l0aCBlbXB0eSByZWcgcHJvcGVydHkgKi9cbiBcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKG5wLCBjaGlsZCkge1xuQEAgLTIzOCwzOSArMzM3LDM4MiBAQCBpbnQgX19vZl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuIFx0XHQgICAgb2Zfbm9kZV9uYW1lX2VxKGNoaWxkLCBcImV0aGVybmV0LXBoeS1wYWNrYWdlXCIpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRmb3IgKGFkZHIgPSAwOyBhZGRyIFx1MDAzYyBQSFlfTUFYX0FERFI7IGFkZHIrKykge1xuLVx0XHRcdC8qIHNraXAgYWxyZWFkeSByZWdpc3RlcmVkIFBIWXMgKi9cbi1cdFx0XHRpZiAobWRpb2J1c19pc19yZWdpc3RlcmVkX2RldmljZShtZGlvLCBhZGRyKSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRcdC8qIGJlIG5vaXN5IHRvIGVuY291cmFnZSBwZW9wbGUgdG8gc2V0IHJlZyBwcm9wZXJ0eSAqL1xuLVx0XHRcdGRldl9pbmZvKFx1MDAyNm1kaW8tXHUwMDNlZGV2LCBcInNjYW4gcGh5ICVwT0ZuIGF0IGFkZHJlc3MgJWlcXG5cIixcbi1cdFx0XHRcdCBjaGlsZCwgYWRkcik7XG4tXG4tXHRcdFx0aWYgKG9mX21kaW9idXNfY2hpbGRfaXNfcGh5KGNoaWxkKSkge1xuLVx0XHRcdFx0LyogLUVOT0RFViBpcyB0aGUgcmV0dXJuIGNvZGUgdGhhdCBQSFlMSUIgaGFzXG4tXHRcdFx0XHQgKiBzdGFuZGFyZGl6ZWQgb24gdG8gaW5kaWNhdGUgdGhhdCBidXNcbi1cdFx0XHRcdCAqIHNjYW5uaW5nIHNob3VsZCBjb250aW51ZS5cbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyX3BoeShtZGlvLCBjaGlsZCwgYWRkcik7XG4tXHRcdFx0XHRpZiAoIXJjKVxuLVx0XHRcdFx0XHRicmVhaztcbi1cdFx0XHRcdGlmIChyYyAhPSAtRU5PREVWKVxuLVx0XHRcdFx0XHRnb3RvIHB1dF91bnJlZ2lzdGVyO1xuLVx0XHRcdH1cbi1cdFx0fVxuK1x0XHRyYyA9IG9mX21kaW9idXNfc2Nhbl9waHkobWRpbywgY2hpbGQpO1xuK1x0XHRpZiAocmMgXHUwMDI2XHUwMDI2IHJjICE9IC1FTk9ERVYpXG4rXHRcdFx0Z290byBwdXRfY2hpbGQ7XG4rXHRcdHJjID0gMDtcbiBcdH1cbiBcbi1cdHJldHVybiAwO1xuK291dF9jaGFuZ2U6XG4rXHRtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kKG1kaW8sIGZhbHNlKTtcbitcdG9mX21kaW9fcmVjb25maWdfdW5sb2NrKCk7XG4rXHRpZiAoIXJjKVxuK1x0XHRyZXR1cm4gMDtcbiBcbi1wdXRfdW5yZWdpc3Rlcjpcbi1cdG9mX25vZGVfcHV0KGNoaWxkKTtcbi11bnJlZ2lzdGVyOlxuIFx0bWRpb2J1c191bnJlZ2lzdGVyKG1kaW8pO1xuIFx0cmV0dXJuIHJjO1xuK1xuK3B1dF9jaGlsZDpcbitcdG9mX25vZGVfcHV0KGNoaWxkKTtcbitcdGdvdG8gb3V0X2NoYW5nZTtcbiB9XG4gRVhQT1JUX1NZTUJPTChfX29mX21kaW9idXNfcmVnaXN0ZXIpO1xuIFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19PRl9EWU5BTUlDKVxuK3N0YXRpYyBib29sIG9mX21kaW9idXNfbm9kZV9pc19hdmFpbGFibGUoc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxuK3tcbitcdHJldHVybiAhb2Zfbm9kZV9jaGVja19mbGFnKG5vZGUsIE9GX0RFVEFDSEVEKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5vZGUpO1xuK31cbitcbitzdGF0aWMgaW50IG9mX21kaW9idXNfYWRkX25vZGUoc3RydWN0IG1paV9idXMgKm1kaW8sXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkO1xuK1x0aW50IGFkZHIsIHJjLCByZXQgPSAwO1xuK1xuK1x0aWYgKCFvZl9tZGlvYnVzX25vZGVfaXNfYXZhaWxhYmxlKG5vZGUpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChvZl9ub2RlX25hbWVfZXEobm9kZSwgXCJldGhlcm5ldC1waHktcGFja2FnZVwiKSkge1xuK1x0XHRpZiAoIW9mX3Byb3BlcnR5X3ByZXNlbnQobm9kZSwgXCJyZWdcIikpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXG4rXHRcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKG5vZGUsIGNoaWxkKSB7XG4rXHRcdFx0cmMgPSBvZl9tZGlvYnVzX2FkZF9ub2RlKG1kaW8sIGNoaWxkKTtcbitcdFx0XHRpZiAocmMgXHUwMDI2XHUwMDI2IHJjICE9IC1FTk9ERVYgXHUwMDI2XHUwMDI2ICFyZXQpXG4rXHRcdFx0XHRyZXQgPSByYztcbitcdFx0fVxuK1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0YWRkciA9IG9mX21kaW9fcGFyc2VfYWRkcihcdTAwMjZtZGlvLVx1MDAzZWRldiwgbm9kZSk7XG4rXHRpZiAoYWRkciBcdTAwM2MgMClcbitcdFx0cmMgPSBvZl9tZGlvYnVzX3NjYW5fcGh5KG1kaW8sIG5vZGUpO1xuK1x0ZWxzZVxuK1x0XHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXJfY2hpbGQobWRpbywgbm9kZSwgYWRkcik7XG4rXG4rXHRpZiAocmMgPT0gLUVOT0RFViBcdTAwMjZcdTAwMjYgYWRkciBcdTAwM2U9IDApXG4rXHRcdGRldl9lcnIoXHUwMDI2bWRpby1cdTAwM2VkZXYsXG4rXHRcdFx0XCJNRElPIGRldmljZSBhdCBhZGRyZXNzICVkIGlzIG1pc3NpbmcuXFxuXCIsIGFkZHIpO1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbitzdGF0aWMgYm9vbCBvZl9tZGlvYnVzX25vZGVfaXNfYnVzeShzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcbitcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4re1xuK1x0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2O1xuK1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbitcdGJvb2wgYnVzeSA9IGZhbHNlO1xuK1xuK1x0aWYgKG9mX25vZGVfbmFtZV9lcShub2RlLCBcImV0aGVybmV0LXBoeS1wYWNrYWdlXCIpKSB7XG4rXHRcdGZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKG5vZGUsIGNoaWxkKSB7XG4rXHRcdFx0aWYgKG9mX21kaW9idXNfbm9kZV9pc19idXN5KG1kaW8sIGNoaWxkKSlcbitcdFx0XHRcdHJldHVybiB0cnVlO1xuK1x0XHR9XG4rXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdGlmICghb2Zfbm9kZV9jaGVja19mbGFnKG5vZGUsIE9GX1BPUFVMQVRFRCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG1kaW9kZXYgPSBvZl9tZGlvX2ZpbmRfZGV2aWNlKG5vZGUpO1xuK1x0aWYgKCFtZGlvZGV2KVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGlmIChtZGlvZGV2LVx1MDAzZWJ1cyAhPSBtZGlvKSB7XG4rXHRcdHB1dF9kZXZpY2UoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNm1kaW8tXHUwMDNlbWRpb19tYXBfbG9jayk7XG4rXHRidXN5ID0gbWRpby1cdTAwM2VtZGlvX21hcFttZGlvZGV2LVx1MDAzZWFkZHJdICE9IG1kaW9kZXYgfHxcbitcdCAgICAgICAobWRpby1cdTAwM2VtZGlvX21hcF9wZW5kaW5nIFx1MDAyNiBCSVQobWRpb2Rldi1cdTAwM2VhZGRyKSk7XG4rXHRpZiAobWRpb2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgTURJT19ERVZJQ0VfRkxBR19QSFkpIHtcbitcdFx0cGh5ZGV2ID0gdG9fcGh5X2RldmljZShcdTAwMjZtZGlvZGV2LVx1MDAzZWRldik7XG4rXHRcdGlmIChwaHlkZXYtXHUwMDNlYXR0YWNoZWQpIHtcbitcdFx0XHRidXN5ID0gdHJ1ZTtcbitcdFx0XHRkZXZfd2FybihcdTAwMjZtZGlvZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdCBcImNhbm5vdCByZW1vdmUgYW4gYXR0YWNoZWQgUEhZOyByZW1vdmUgaXRzIGNvbnN1bWVyIGZpcnN0XFxuXCIpO1xuK1x0XHR9XG4rXHR9XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bWRpby1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbitcdHB1dF9kZXZpY2UoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuK1xuK1x0cmV0dXJuIGJ1c3k7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKlxuK29mX21kaW9idXNfZ2V0X3JlbW92YWxfc2NvcGUoc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxuK3tcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50O1xuK1xuK1x0aWYgKG9mX25vZGVfbmFtZV9lcShub2RlLCBcImV0aGVybmV0LXBoeS1wYWNrYWdlXCIpKVxuK1x0XHRyZXR1cm4gb2Zfbm9kZV9nZXQobm9kZSk7XG4rXG4rXHRwYXJlbnQgPSBvZl9nZXRfcGFyZW50KG5vZGUpO1xuK1x0aWYgKG9mX25vZGVfbmFtZV9lcShwYXJlbnQsIFwiZXRoZXJuZXQtcGh5LXBhY2thZ2VcIikpXG4rXHRcdHJldHVybiBwYXJlbnQ7XG4rXG4rXHRvZl9ub2RlX3B1dChwYXJlbnQpO1xuK1x0cmV0dXJuIG9mX25vZGVfZ2V0KG5vZGUpO1xuK31cbitcbitzdGF0aWMgaW50IG9mX21kaW9idXNfcmVtb3ZlX25vZGUoc3RydWN0IG1paV9idXMgKm1kaW8sXG4rXHRcdFx0XHQgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcbit7XG4rXHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkO1xuK1x0aW50IHJldDtcbitcbitcdGlmIChvZl9ub2RlX25hbWVfZXEobm9kZSwgXCJldGhlcm5ldC1waHktcGFja2FnZVwiKSkge1xuK1x0XHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKG5vZGUsIGNoaWxkKSB7XG4rXHRcdFx0cmV0ID0gb2ZfbWRpb2J1c19yZW1vdmVfbm9kZShtZGlvLCBjaGlsZCk7XG4rXHRcdFx0aWYgKHJldCkge1xuK1x0XHRcdFx0b2Zfbm9kZV9wdXQoY2hpbGQpO1xuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0XHR9XG4rXHRcdH1cbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRpZiAoIW9mX25vZGVfY2hlY2tfZmxhZyhub2RlLCBPRl9QT1BVTEFURUQpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIFRoZSBPRiBub2RlIGxvb2t1cCBhbHNvIGNvdmVycyBQSFlzIGZvdW5kIGJ5IGFkZHJlc3Mgc2Nhbm5pbmcuICovXG4rXHRtZGlvZGV2ID0gb2ZfbWRpb19maW5kX2RldmljZShub2RlKTtcbitcdGlmICghbWRpb2RldilcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcdGlmIChtZGlvZGV2LVx1MDAzZWJ1cyAhPSBtZGlvKSB7XG4rXHRcdHB1dF9kZXZpY2UoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbitcbitcdHJldCA9IG1kaW9kZXYtXHUwMDNlZGV2aWNlX3JlbW92ZV9keW5hbWljKG1kaW9kZXYpO1xuK1x0aWYgKCFyZXQpXG4rXHRcdG1kaW9kZXYtXHUwMDNlZGV2aWNlX2ZyZWUobWRpb2Rldik7XG4rXHRwdXRfZGV2aWNlKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2KTtcbitcbitcdHJldHVybiByZXQgPT0gLUVOT0RFViA/IDAgOiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgbWlpX2J1cyAqb2ZfbWRpb2J1c19maW5kX3BhcmVudChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4re1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQsICpidXNfbm9kZTtcbitcdHN0cnVjdCBtaWlfYnVzICptZGlvO1xuK1xuK1x0cGFyZW50ID0gb2ZfZ2V0X3BhcmVudChub2RlKTtcbitcdGlmICghcGFyZW50KVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGlmIChvZl9ub2RlX25hbWVfZXEocGFyZW50LCBcImV0aGVybmV0LXBoeS1wYWNrYWdlXCIpKSB7XG4rXHRcdGlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShwYXJlbnQpIHx8XG4rXHRcdCAgICAhb2ZfcHJvcGVydHlfcHJlc2VudChwYXJlbnQsIFwicmVnXCIpKSB7XG4rXHRcdFx0b2Zfbm9kZV9wdXQocGFyZW50KTtcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcdFx0fVxuK1xuK1x0XHRidXNfbm9kZSA9IG9mX2dldF9wYXJlbnQocGFyZW50KTtcbitcdFx0b2Zfbm9kZV9wdXQocGFyZW50KTtcbitcdH0gZWxzZSB7XG4rXHRcdGJ1c19ub2RlID0gcGFyZW50O1xuK1x0fVxuK1xuK1x0bWRpbyA9IG9mX21kaW9fZmluZF9idXMoYnVzX25vZGUpO1xuK1x0b2Zfbm9kZV9wdXQoYnVzX25vZGUpO1xuK1xuK1x0cmV0dXJuIG1kaW87XG4rfVxuK1xuKyNpZiBJU19FTkFCTEVEKENPTkZJR19PRl9PVkVSTEFZKVxuKy8qIE92ZXJsYXkgZW50cnkgbm90aWZpZXIgZXJyb3JzIGNhbm5vdCBzdG9wIHJlbW92YWwgYWZ0ZXIgdGhlIHRyZWUgY2hhbmdlZC4gKi9cbitzdGF0aWMgYm9vbCBvZl9tZGlvYnVzX2xpdmVfbm9kZV9pc19idXN5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnNjb3BlO1xuK1x0c3RydWN0IG1paV9idXMgKm1kaW87XG4rXHRib29sIGJ1c3kgPSB0cnVlO1xuK1xuK1x0c2NvcGUgPSBvZl9tZGlvYnVzX2dldF9yZW1vdmFsX3Njb3BlKG5vZGUpO1xuK1x0bWRpbyA9IG9mX21kaW9idXNfZmluZF9wYXJlbnQoc2NvcGUpO1xuK1x0aWYgKCFtZGlvKVxuK1x0XHRnb3RvIG91dF9wdXRfc2NvcGU7XG4rXG4rXHRpZiAoIW1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbihtZGlvLCB0cnVlKSkge1xuK1x0XHRidXN5ID0gb2ZfbWRpb2J1c19ub2RlX2lzX2J1c3kobWRpbywgc2NvcGUpO1xuK1x0XHRtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kKG1kaW8sIHRydWUpO1xuK1x0fVxuK1x0cHV0X2RldmljZShcdTAwMjZtZGlvLVx1MDAzZWRldik7XG4rXG4rb3V0X3B1dF9zY29wZTpcbitcdG9mX25vZGVfcHV0KHNjb3BlKTtcbitcdHJldHVybiBidXN5O1xuK31cbitcbitzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpcbitvZl9tZGlvYnVzX292ZXJsYXlfdGFyZ2V0X2NoaWxkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqdGFyZ2V0LFxuK1x0XHRcdFx0c3RydWN0IGRldmljZV9ub2RlICpvdmVybGF5X2NoaWxkKVxuK3tcbitcdGNvbnN0IGNoYXIgKm5hbWUgPSBrYmFzZW5hbWUob3ZlcmxheV9jaGlsZC1cdTAwM2VmdWxsX25hbWUpO1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZDtcbitcbitcdGZvcl9lYWNoX2NoaWxkX29mX25vZGUodGFyZ2V0LCBjaGlsZCkge1xuK1x0XHRpZiAoIW9mX25vZGVfY21wKGtiYXNlbmFtZShjaGlsZC1cdTAwM2VmdWxsX25hbWUpLCBuYW1lKSlcbitcdFx0XHRyZXR1cm4gY2hpbGQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIGJvb2wgb2ZfbWRpb2J1c19vdmVybGF5X25vZGVfaXNfYnVzeShzdHJ1Y3QgZGV2aWNlX25vZGUgKm92ZXJsYXksXG4rXHRcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnRhcmdldCxcbitcdFx0XHRcdFx0ICAgIGJvb2wgYWRkZWQpXG4re1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpvdmVybGF5X2NoaWxkLCAqdGFyZ2V0X2NoaWxkO1xuK1x0Ym9vbCBidXN5LCBjaGlsZF9hZGRlZDtcbitcbitcdGlmICgoYWRkZWQgfHwgb2ZfcHJvcGVydHlfcHJlc2VudChvdmVybGF5LCBcInN0YXR1c1wiKSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgb2ZfbWRpb2J1c19saXZlX25vZGVfaXNfYnVzeSh0YXJnZXQpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdGZvcl9lYWNoX2NoaWxkX29mX25vZGUob3ZlcmxheSwgb3ZlcmxheV9jaGlsZCkge1xuK1x0XHR0YXJnZXRfY2hpbGQgPSBvZl9tZGlvYnVzX292ZXJsYXlfdGFyZ2V0X2NoaWxkKHRhcmdldCxcbitcdFx0XHRcdFx0XHRcdCAgICAgICBvdmVybGF5X2NoaWxkKTtcbitcdFx0aWYgKCF0YXJnZXRfY2hpbGQpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGNoaWxkX2FkZGVkID0gb2Zfbm9kZV9jaGVja19mbGFnKHRhcmdldF9jaGlsZCwgT0ZfT1ZFUkxBWSk7XG4rXHRcdGJ1c3kgPSBvZl9tZGlvYnVzX292ZXJsYXlfbm9kZV9pc19idXN5KG92ZXJsYXlfY2hpbGQsXG4rXHRcdFx0XHRcdFx0ICAgICAgIHRhcmdldF9jaGlsZCwgY2hpbGRfYWRkZWQpO1xuK1x0XHRvZl9ub2RlX3B1dCh0YXJnZXRfY2hpbGQpO1xuK1x0XHRpZiAoYnVzeSkge1xuK1x0XHRcdG9mX25vZGVfcHV0KG92ZXJsYXlfY2hpbGQpO1xuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb2ZfbWRpb2J1c19vdmVybGF5X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuK1x0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqYXJnKVxuK3tcbitcdHN0cnVjdCBvZl9vdmVybGF5X25vdGlmeV9kYXRhICpuZCA9IGFyZztcbitcdGJvb2wgYnVzeTtcbitcbitcdGlmIChhY3Rpb24gIT0gT0ZfT1ZFUkxBWV9QUkVfUkVNT1ZFKVxuK1x0XHRyZXR1cm4gTk9USUZZX09LO1xuK1xuK1x0b2ZfbWRpb19yZWNvbmZpZ19sb2NrKCk7XG4rXHRidXN5ID0gb2ZfbWRpb2J1c19vdmVybGF5X25vZGVfaXNfYnVzeShuZC1cdTAwM2VvdmVybGF5LCBuZC1cdTAwM2V0YXJnZXQsXG4rXHRcdFx0XHRcdCAgICAgICBmYWxzZSk7XG4rXHRvZl9tZGlvX3JlY29uZmlnX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIGJ1c3kgPyBub3RpZmllcl9mcm9tX2Vycm5vKC1FQlVTWSkgOiBOT1RJRllfT0s7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgb2ZfbWRpb19vdmVybGF5X25vdGlmaWVyID0ge1xuK1x0Lm5vdGlmaWVyX2NhbGwgPSBvZl9tZGlvYnVzX292ZXJsYXlfbm90aWZ5LFxuK307XG4rI2VuZGlmXG4rXG4rc3RhdGljIGludCBvZl9tZGlvYnVzX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbixcbitcdFx0XHQgICAgIHZvaWQgKmFyZylcbit7XG4rXHRzdHJ1Y3Qgb2ZfcmVjb25maWdfZGF0YSAqcmQgPSBhcmc7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnNjb3BlO1xuK1x0c3RydWN0IG1paV9idXMgKm1kaW87XG4rXHRlbnVtIG9mX3JlY29uZmlnX2NoYW5nZSBjaGFuZ2U7XG4rXHRib29sIHJlbW92aW5nO1xuK1x0aW50IHJjLCByZXQgPSBOT1RJRllfT0s7XG4rXG4rXHRvZl9tZGlvX3JlY29uZmlnX2xvY2soKTtcbitcdGNoYW5nZSA9IG9mX3JlY29uZmlnX2dldF9zdGF0ZV9jaGFuZ2UoYWN0aW9uLCByZCk7XG4rXHRzd2l0Y2ggKGNoYW5nZSkge1xuK1x0Y2FzZSBPRl9SRUNPTkZJR19DSEFOR0VfQUREOlxuK1x0XHQvKiBBIG5ld2VyIGNoYW5nZSBtYXkgaGF2ZSBtYWRlIHRoaXMgbm90aWZpY2F0aW9uIHN0YWxlLiAqL1xuK1x0XHRpZiAoIW9mX21kaW9idXNfbm9kZV9pc19hdmFpbGFibGUocmQtXHUwMDNlZG4pKVxuK1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbitcdFx0cmVtb3ZpbmcgPSBmYWxzZTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE9GX1JFQ09ORklHX0NIQU5HRV9SRU1PVkU6XG4rXHRcdC8qIEEgbmV3ZXIgY2hhbmdlIG1heSBoYXZlIG1hZGUgdGhpcyBub3RpZmljYXRpb24gc3RhbGUuICovXG4rXHRcdGlmIChvZl9tZGlvYnVzX25vZGVfaXNfYXZhaWxhYmxlKHJkLVx1MDAzZWRuKSlcbitcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4rXHRcdHJlbW92aW5nID0gdHJ1ZTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXHR9XG4rXG4rXHRtZGlvID0gb2ZfbWRpb2J1c19maW5kX3BhcmVudChyZC1cdTAwM2Vkbik7XG4rXHRpZiAoIW1kaW8pXG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcbitcdHJjID0gbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKG1kaW8sIHJlbW92aW5nKTtcbitcdGlmIChyYykge1xuK1x0XHRpZiAoIXJlbW92aW5nKVxuK1x0XHRcdHJldCA9IG5vdGlmaWVyX2Zyb21fZXJybm8oLUVQUk9CRV9ERUZFUik7XG4rXHRcdGdvdG8gb3V0X3B1dF9tZGlvO1xuK1x0fVxuK1xuK1x0aWYgKCFyZW1vdmluZykge1xuK1x0XHRyYyA9IG9mX21kaW9idXNfYWRkX25vZGUobWRpbywgcmQtXHUwMDNlZG4pO1xuK1x0fSBlbHNlIHtcbitcdFx0LyogVGhlIG5vZGUgbWF5IGFscmVhZHkgYmUgZGV0YWNoZWQgZnJvbSBpdHMgcGFyZW50IGhpZXJhcmNoeS4gKi9cbitcdFx0c2NvcGUgPSBvZl9tZGlvYnVzX2dldF9yZW1vdmFsX3Njb3BlKHJkLVx1MDAzZWRuKTtcbitcdFx0aWYgKG9mX21kaW9idXNfbm9kZV9pc19idXN5KG1kaW8sIHNjb3BlKSlcbitcdFx0XHRyYyA9IC1FQlVTWTtcbitcdFx0ZWxzZVxuK1x0XHRcdHJjID0gb2ZfbWRpb2J1c19yZW1vdmVfbm9kZShtZGlvLCByZC1cdTAwM2Vkbik7XG4rXHRcdG9mX25vZGVfcHV0KHNjb3BlKTtcbitcdH1cbitcbitcdG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmQobWRpbywgcmVtb3ZpbmcpO1xuK1x0aWYgKHJjIFx1MDAyNlx1MDAyNiAocmVtb3ZpbmcgfHwgcmMgIT0gLUVOT0RFVikpXG4rXHRcdHJldCA9IG5vdGlmaWVyX2Zyb21fZXJybm8ocmMpO1xuK1xuK291dF9wdXRfbWRpbzpcbitcdHB1dF9kZXZpY2UoXHUwMDI2bWRpby1cdTAwM2VkZXYpO1xuK291dF91bmxvY2s6XG4rXHRvZl9tZGlvX3JlY29uZmlnX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBvZl9tZGlvX25vdGlmaWVyID0ge1xuK1x0Lm5vdGlmaWVyX2NhbGwgPSBvZl9tZGlvYnVzX25vdGlmeSxcbit9O1xuK1xuK3N0YXRpYyBpbnQgX19pbml0IG9mX21kaW9faW5pdCh2b2lkKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBvZl9yZWNvbmZpZ19ub3RpZmllcl9yZWdpc3RlcihcdTAwMjZvZl9tZGlvX25vdGlmaWVyKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX09GX09WRVJMQVkpXG4rXHRyZXQgPSBvZl9vdmVybGF5X25vdGlmaWVyX3JlZ2lzdGVyKFx1MDAyNm9mX21kaW9fb3ZlcmxheV9ub3RpZmllcik7XG4rXHRpZiAocmV0KVxuK1x0XHRvZl9yZWNvbmZpZ19ub3RpZmllcl91bnJlZ2lzdGVyKFx1MDAyNm9mX21kaW9fbm90aWZpZXIpO1xuKyNlbmRpZlxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rbW9kdWxlX2luaXQob2ZfbWRpb19pbml0KTtcbitcbitzdGF0aWMgdm9pZCBfX2V4aXQgb2ZfbWRpb19leGl0KHZvaWQpXG4re1xuKyNpZiBJU19FTkFCTEVEKENPTkZJR19PRl9PVkVSTEFZKVxuK1x0b2Zfb3ZlcmxheV9ub3RpZmllcl91bnJlZ2lzdGVyKFx1MDAyNm9mX21kaW9fb3ZlcmxheV9ub3RpZmllcik7XG4rI2VuZGlmXG4rXHRvZl9yZWNvbmZpZ19ub3RpZmllcl91bnJlZ2lzdGVyKFx1MDAyNm9mX21kaW9fbm90aWZpZXIpO1xuK31cbittb2R1bGVfZXhpdChvZl9tZGlvX2V4aXQpO1xuKyNlbmRpZiAvKiBDT05GSUdfT0ZfRFlOQU1JQyAqL1xuK1xuIC8qKlxuICAqIG9mX21kaW9fZmluZF9kZXZpY2UgLSBHaXZlbiBhIGRldmljZSB0cmVlIG5vZGUsIGZpbmQgdGhlIG1kaW9fZGV2aWNlXG4gICogQG5wOiBwb2ludGVyIHRvIHRoZSBtZGlvX2RldmljZSdzIGRldmljZSB0cmVlIG5vZGVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYyBiL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jXG5pbmRleCAwMGQwZTQxNTllOWJiLi5mNDVjOTM2ZmU1YWE5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jXG5AQCAtMzQsNyArMzQsOCBAQCBzdGF0aWMgc3RydWN0IG1kaW9fZGV2aWNlICptZGlvYnVzX2ZpbmRfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyKVxuIFx0aWYgKFdBUk5fT05DRSghYWRkcl92YWxpZCwgXCJhZGRyICVkIG91dCBvZiByYW5nZVxcblwiLCBhZGRyKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRyZXR1cm4gYnVzLVx1MDAzZW1kaW9fbWFwW2FkZHJdO1xuK1x0LyogUGFpciB3aXRoIG1hcCBwdWJsaWNhdGlvbiBpbiBtZGlvYnVzX3JlZ2lzdGVyX2RldmljZSgpLiAqL1xuK1x0cmV0dXJuIHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwW2FkZHJdKTtcbiB9XG4gXG4gc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfZ2V0X3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcbkBAIC01NCw3ICs1NSwxNiBAQCBFWFBPUlRfU1lNQk9MKG1kaW9idXNfZ2V0X3BoeSk7XG4gXG4gYm9vbCBtZGlvYnVzX2lzX3JlZ2lzdGVyZWRfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyKVxuIHtcbi1cdHJldHVybiBtZGlvYnVzX2ZpbmRfZGV2aWNlKGJ1cywgYWRkcikgIT0gTlVMTDtcbitcdGJvb2wgYWRkcl92YWxpZCA9IGFkZHIgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBhZGRyIFx1MDAzYyBBUlJBWV9TSVpFKGJ1cy1cdTAwM2VtZGlvX21hcCk7XG4rXHRib29sIHJlZ2lzdGVyZWQ7XG4rXG4rXHRpZiAoV0FSTl9PTkNFKCFhZGRyX3ZhbGlkLCBcImFkZHIgJWQgb3V0IG9mIHJhbmdlXFxuXCIsIGFkZHIpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZWdpc3RlcmVkID0gUkVBRF9PTkNFKGJ1cy1cdTAwM2VtZGlvX21hcFthZGRyXSkgfHxcbitcdFx0ICAgICAoUkVBRF9PTkNFKGJ1cy1cdTAwM2VtZGlvX21hcF9wZW5kaW5nKSBcdTAwMjYgQklUKGFkZHIpKTtcbitcbitcdHJldHVybiByZWdpc3RlcmVkO1xuIH1cbiBFWFBPUlRfU1lNQk9MKG1kaW9idXNfaXNfcmVnaXN0ZXJlZF9kZXZpY2UpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jIGIvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmNcbmluZGV4IGNlM2E2MDdhNDBjYjAuLmRmODAxMjVlZWVjNDUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmNcbkBAIC0zMzAsNiArMzMwLDkgQEAgc3RydWN0IG1paV9idXMgKm1kaW9idXNfYWxsb2Nfc2l6ZShzaXplX3Qgc2l6ZSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRidXMtXHUwMDNlc3RhdGUgPSBNRElPQlVTX0FMTE9DQVRFRDtcbitcdG11dGV4X2luaXQoXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuK1x0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfd2FpdCk7XG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfcmV0aXJlZCk7XG4gXHRpZiAoc2l6ZSlcbiBcdFx0YnVzLVx1MDAzZXByaXYgPSAodm9pZCAqKWJ1cyArIGFsaWduZWRfc2l6ZTtcbiBcbkBAIC0zNTUsMTAgKzM1OCw5IEBAIHN0YXRpYyBpbnQgb2ZfbWRpb2J1c19maW5kX3BoeShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiBcdFx0XHQgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpucClcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkO1xuK1x0aW50IGFkZHIsIHJldDtcbiBcbiBcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKG5wLCBjaGlsZCkge1xuLVx0XHRpbnQgYWRkcjtcbi1cbiBcdFx0aWYgKG9mX25vZGVfbmFtZV9lcShjaGlsZCwgXCJldGhlcm5ldC1waHktcGFja2FnZVwiKSkge1xuIFx0XHRcdC8qIFZhbGlkYXRlIFBIWSBwYWNrYWdlIHJlZyBwcmVzZW5jZSAqL1xuIFx0XHRcdGlmICghb2ZfcHJvcGVydHlfcHJlc2VudChjaGlsZCwgXCJyZWdcIikpIHtcbkBAIC0zNjYsMTIgKzM2OCwxMyBAQCBzdGF0aWMgaW50IG9mX21kaW9idXNfZmluZF9waHkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHR9XG4gXG4tXHRcdFx0aWYgKCFvZl9tZGlvYnVzX2ZpbmRfcGh5KGRldiwgbWRpb2RldiwgY2hpbGQpKSB7XG4rXHRcdFx0cmV0ID0gb2ZfbWRpb2J1c19maW5kX3BoeShkZXYsIG1kaW9kZXYsIGNoaWxkKTtcbitcdFx0XHRpZiAocmV0ICE9IC1FTk9ERVYpIHtcbiBcdFx0XHRcdC8qIFRoZSByZWZjb3VudCBmb3IgdGhlIFBIWSBwYWNrYWdlIHdpbGwgYmVcbiBcdFx0XHRcdCAqIGluY3JlbWVudGVkIGxhdGVyIHdoZW4gUEhZIGpvaW4gdGhlIFBhY2thZ2UuXG4gXHRcdFx0XHQgKi9cbiBcdFx0XHRcdG9mX25vZGVfcHV0KGNoaWxkKTtcbi1cdFx0XHRcdHJldHVybiAwO1xuK1x0XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0XHR9XG4gXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMzgyLDYgKzM4NSwxMSBAQCBzdGF0aWMgaW50IG9mX21kaW9idXNfZmluZF9waHkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChhZGRyID09IG1kaW9kZXYtXHUwMDNlYWRkcikge1xuK1x0XHRcdGlmIChvZl9ub2RlX3Rlc3RfYW5kX3NldF9mbGFnKGNoaWxkLCBPRl9QT1BVTEFURUQpKSB7XG4rXHRcdFx0XHRvZl9ub2RlX3B1dChjaGlsZCk7XG4rXHRcdFx0XHRyZXR1cm4gLUVCVVNZO1xuK1x0XHRcdH1cbitcbiBcdFx0XHRkZXZpY2Vfc2V0X25vZGUoZGV2LCBvZl9md25vZGVfaGFuZGxlKGNoaWxkKSk7XG4gXHRcdFx0LyogVGhlIHJlZmNvdW50IG9uIFwiY2hpbGRcIiBpcyBwYXNzZWQgdG8gdGhlIG1kaW9cbiBcdFx0XHQgKiBkZXZpY2UuIERvIF9ub3RfIHVzZSBvZl9ub2RlX3B1dChjaGlsZCkgaGVyZS5cbkBAIC0zOTMsMjIgKzQwMSwyNiBAQCBzdGF0aWMgaW50IG9mX21kaW9idXNfZmluZF9waHkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4gXHRyZXR1cm4gLUVOT0RFVjtcbiB9XG4gXG4tc3RhdGljIHZvaWQgb2ZfbWRpb2J1c19saW5rX21kaW9kZXYoc3RydWN0IG1paV9idXMgKmJ1cyxcbi1cdFx0XHRcdCAgICBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4rc3RhdGljIGludCBvZl9tZGlvYnVzX2xpbmtfbWRpb2RldihzdHJ1Y3QgbWlpX2J1cyAqYnVzLFxuK1x0XHRcdFx0ICAgc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2O1xuIFxuIFx0aWYgKGRldi1cdTAwM2VvZl9ub2RlIHx8ICFidXMtXHUwMDNlZGV2Lm9mX25vZGUpXG4tXHRcdHJldHVybjtcbitcdFx0cmV0dXJuIDA7XG4gXG4tXHRvZl9tZGlvYnVzX2ZpbmRfcGh5KGRldiwgbWRpb2RldiwgYnVzLVx1MDAzZWRldi5vZl9ub2RlKTtcbitcdHJldHVybiBvZl9tZGlvYnVzX2ZpbmRfcGh5KGRldiwgbWRpb2RldiwgYnVzLVx1MDAzZWRldi5vZl9ub2RlKTtcbiB9XG4gI2VuZGlmXG4gXG4tc3RhdGljIHN0cnVjdCBwaHlfZGV2aWNlICptZGlvYnVzX3NjYW4oc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgYzQ1KVxuK3N0YXRpYyBzdHJ1Y3QgcGh5X2RldmljZSAqX19tZGlvYnVzX3NjYW4oc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsXG4rXHRcdFx0XHRcdCBib29sIGM0NSlcbiB7XG4gXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gRVJSX1BUUigtRU5PREVWKTtcbiBcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGU7XG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX09GX01ESU8pXG4rXHRib29sIG9mX25vZGVfcG9wdWxhdGVkID0gZmFsc2U7XG4rI2VuZGlmXG4gXHRjaGFyIG5vZGVfbmFtZVsxNl07XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTQyMCw3ICs0MzIsMTIgQEAgc3RhdGljIHN0cnVjdCBwaHlfZGV2aWNlICptZGlvYnVzX3NjYW4oc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgYzQ1KVxuIFx0LyogRm9yIERULCBzZWUgaWYgdGhlIGF1dG8tcHJvYmVkIHBoeSBoYXMgYSBjb3JyZXNwb25kaW5nIGNoaWxkXG4gXHQgKiBpbiB0aGUgYnVzIG5vZGUsIGFuZCBzZXQgdGhlIG9mX25vZGUgcG9pbnRlciBpbiB0aGlzIGNhc2UuXG4gXHQgKi9cbi1cdG9mX21kaW9idXNfbGlua19tZGlvZGV2KGJ1cywgXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8pO1xuK1x0ZXJyID0gb2ZfbWRpb2J1c19saW5rX21kaW9kZXYoYnVzLCBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbyk7XG4rXHRpZiAoZXJyID09IC1FQlVTWSkge1xuK1x0XHRwaHlfZGV2aWNlX2ZyZWUocGh5ZGV2KTtcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XG4rXHR9XG4rXHRvZl9ub2RlX3BvcHVsYXRlZCA9ICEhcGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XG4gI2VuZGlmXG4gXG4gXHQvKiBTZWFyY2ggZm9yIGEgc3dub2RlIGZvciB0aGUgcGh5IGluIHRoZSBzd25vZGUgaGllcmFyY2h5IG9mIHRoZSBidXMuXG5AQCAtNDM3LDYgKzQ1NCwxMSBAQCBzdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBjNDUpXG4gXG4gXHRlcnIgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeWRldik7XG4gXHRpZiAoZXJyKSB7XG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX09GX01ESU8pXG4rXHRcdGlmIChvZl9ub2RlX3BvcHVsYXRlZClcbitcdFx0XHRvZl9ub2RlX2NsZWFyX2ZsYWcocGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGUsXG4rXHRcdFx0XHRcdCAgIE9GX1BPUFVMQVRFRCk7XG4rI2VuZGlmXG4gXHRcdHBoeV9kZXZpY2VfZnJlZShwaHlkZXYpO1xuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcbiBcdH1cbkBAIC00NTgsNyArNDgwLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RldmljZSAqbWRpb2J1c19zY2FuKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGM0NSlcbiAgKi9cbiBzdHJ1Y3QgcGh5X2RldmljZSAqbWRpb2J1c19zY2FuX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcbiB7XG4tXHRyZXR1cm4gbWRpb2J1c19zY2FuKGJ1cywgYWRkciwgZmFsc2UpO1xuK1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4oYnVzLCBmYWxzZSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuK1xuK1x0cGh5ZGV2ID0gX19tZGlvYnVzX3NjYW4oYnVzLCBhZGRyLCBmYWxzZSk7XG4rXHRtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kKGJ1cywgZmFsc2UpO1xuK1xuK1x0cmV0dXJuIHBoeWRldjtcbiB9XG4gRVhQT1JUX1NZTUJPTChtZGlvYnVzX3NjYW5fYzIyKTtcbiBcbkBAIC00NzYsNyArNTA4LDcgQEAgRVhQT1JUX1NZTUJPTChtZGlvYnVzX3NjYW5fYzIyKTtcbiAgKi9cbiBzdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2Nhbl9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXG4ge1xuLVx0cmV0dXJuIG1kaW9idXNfc2NhbihidXMsIGFkZHIsIHRydWUpO1xuK1x0cmV0dXJuIF9fbWRpb2J1c19zY2FuKGJ1cywgYWRkciwgdHJ1ZSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbWRpb2J1c19zY2FuX2J1c19jMjIoc3RydWN0IG1paV9idXMgKmJ1cylcbkBAIC00ODcsNyArNTE5LDcgQEAgc3RhdGljIGludCBtZGlvYnVzX3NjYW5fYnVzX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxuIFx0XHRpZiAoKGJ1cy1cdTAwM2VwaHlfbWFzayBcdTAwMjYgQklUKGkpKSA9PSAwKSB7XG4gXHRcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbiBcbi1cdFx0XHRwaHlkZXYgPSBtZGlvYnVzX3NjYW5fYzIyKGJ1cywgaSk7XG4rXHRcdFx0cGh5ZGV2ID0gX19tZGlvYnVzX3NjYW4oYnVzLCBpLCBmYWxzZSk7XG4gXHRcdFx0aWYgKElTX0VSUihwaHlkZXYpIFx1MDAyNlx1MDAyNiAoUFRSX0VSUihwaHlkZXYpICE9IC1FTk9ERVYpKVxuIFx0XHRcdFx0cmV0dXJuIFBUUl9FUlIocGh5ZGV2KTtcbiBcdFx0fVxuQEAgLTUwNCw3ICs1MzYsNyBAQCBzdGF0aWMgaW50IG1kaW9idXNfc2Nhbl9idXNfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMpXG4gXHRcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbiBcbiBcdFx0XHQvKiBEb24ndCBzY2FuIEM0NSBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBDMjIgZGV2aWNlICovXG4tXHRcdFx0aWYgKGJ1cy1cdTAwM2VtZGlvX21hcFtpXSlcbitcdFx0XHRpZiAobWRpb2J1c19pc19yZWdpc3RlcmVkX2RldmljZShidXMsIGkpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0cGh5ZGV2ID0gbWRpb2J1c19zY2FuX2M0NShidXMsIGkpO1xuQEAgLTUzNiw2ICs1NjgsNDQgQEAgc3RhdGljIGJvb2wgbWRpb2J1c19wcmV2ZW50X2M0NV9zY2FuKHN0cnVjdCBtaWlfYnVzICpidXMpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG1kaW9idXNfc3RvcF9kZXZpY2VfY2hhbmdlcyhzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxuK3tcbitcdG11dGV4X2xvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuK1x0YnVzLVx1MDAzZXN0YXRlID0gTURJT0JVU19VTlJFR0lTVEVSSU5HO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbitcbitcdHdhaXRfZXZlbnQoYnVzLVx1MDAzZW1kaW9fbWFwX3dhaXQsICFSRUFEX09OQ0UoYnVzLVx1MDAzZW1kaW9fbWFwX29wcykpO1xuK31cbitcbitzdGF0aWMgdm9pZCBtZGlvYnVzX3JlbW92ZV9kZXZpY2VzKHN0cnVjdCBtaWlfYnVzICpidXMpXG4re1xuK1x0TElTVF9IRUFEKHJlbW92ZWQpO1xuK1x0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCAqbmV4dDtcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUEhZX01BWF9BRERSOyBpKyspIHtcbitcdFx0bWRpb2RldiA9IGJ1cy1cdTAwM2VtZGlvX21hcFtpXTtcbitcdFx0aWYgKCFtZGlvZGV2KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRtZGlvZGV2LVx1MDAzZWRldmljZV9yZW1vdmUobWRpb2Rldik7XG4rXHRcdG1kaW9kZXYtXHUwMDNlZGV2aWNlX2ZyZWUobWRpb2Rldik7XG4rXHR9XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbitcdGxpc3Rfc3BsaWNlX2luaXQoXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX3JldGlyZWQsIFx1MDAyNnJlbW92ZWQpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtZGlvZGV2LCBuZXh0LCBcdTAwMjZyZW1vdmVkLCByZXRpcmVkX25vZGUpIHtcbitcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZtZGlvZGV2LVx1MDAzZXJldGlyZWRfbm9kZSk7XG4rXHRcdG1kaW9fZGV2aWNlX3B1dChtZGlvZGV2KTtcbitcdH1cbitcbitcdG11dGV4X2xvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuK1x0YnVzLVx1MDAzZXN0YXRlID0gTURJT0JVU19VTlJFR0lTVEVSRUQ7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuK31cbitcbiAvKipcbiAgKiBfX21kaW9idXNfcmVnaXN0ZXIgLSBicmluZyB1cCBhbGwgdGhlIFBIWXMgb24gYSBnaXZlbiBidXMgYW5kIGF0dGFjaCB0aGVtIHRvIGJ1c1xuICAqIEBidXM6IHRhcmdldCBtaWlfYnVzXG5AQCAtNTUyLDEwICs2MjIsOSBAQCBzdGF0aWMgYm9vbCBtZGlvYnVzX3ByZXZlbnRfYzQ1X3NjYW4oc3RydWN0IG1paV9idXMgKmJ1cylcbiAgKi9cbiBpbnQgX19tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICpidXMsIHN0cnVjdCBtb2R1bGUgKm93bmVyKVxuIHtcbi1cdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldjtcbiBcdHN0cnVjdCBncGlvX2Rlc2MgKmdwaW9kO1xuIFx0Ym9vbCBwcmV2ZW50X2M0NV9zY2FuO1xuLVx0aW50IGksIGVycjtcbitcdGludCBlcnI7XG4gXG4gXHRpZiAoIWJ1cyB8fCAhYnVzLVx1MDAzZW5hbWUpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTU5Niw3ICs2NjUsOSBAQCBpbnQgX19tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICpidXMsIHN0cnVjdCBtb2R1bGUgKm93bmVyKVxuIFx0ICpcbiBcdCAqIFN0YXRlIHdpbGwgYmUgdXBkYXRlZCBsYXRlciBpbiB0aGlzIGZ1bmN0aW9uIGluIGNhc2Ugb2Ygc3VjY2Vzc1xuIFx0ICovXG4rXHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiBcdGJ1cy1cdTAwM2VzdGF0ZSA9IE1ESU9CVVNfVU5SRUdJU1RFUkVEO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiBcbiBcdGVyciA9IGRldmljZV9yZWdpc3RlcihcdTAwMjZidXMtXHUwMDNlZGV2KTtcbiBcdGlmIChlcnIpIHtcbkBAIC02MTMsOCArNjg0LDcgQEAgaW50IF9fbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBzdHJ1Y3QgbW9kdWxlICpvd25lcilcbiBcdFx0ZXJyID0gZGV2X2Vycl9wcm9iZShcdTAwMjZidXMtXHUwMDNlZGV2LCBQVFJfRVJSKGdwaW9kKSxcbiBcdFx0XHRcdCAgICBcIm1paV9idXMgJXMgY291bGRuJ3QgZ2V0IHJlc2V0IEdQSU9cXG5cIixcbiBcdFx0XHRcdCAgICBidXMtXHUwMDNlaWQpO1xuLVx0XHRkZXZpY2VfZGVsKFx1MDAyNmJ1cy1cdTAwM2VkZXYpO1xuLVx0XHRyZXR1cm4gZXJyO1xuK1x0XHRnb3RvIGVycm9yX3Jlc2V0X2dwaW9kO1xuIFx0fSBlbHNlXHRpZiAoZ3Bpb2QpIHtcbiBcdFx0YnVzLVx1MDAzZXJlc2V0X2dwaW9kID0gZ3Bpb2Q7XG4gXHRcdGZzbGVlcChidXMtXHUwMDNlcmVzZXRfZGVsYXlfdXMpO1xuQEAgLTYyOSw2ICs2OTksMTAgQEAgaW50IF9fbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBzdHJ1Y3QgbW9kdWxlICpvd25lcilcbiBcdFx0XHRnb3RvIGVycm9yX3Jlc2V0X2dwaW9kO1xuIFx0fVxuIFxuK1x0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4rXHRidXMtXHUwMDNlc3RhdGUgPSBNRElPQlVTX1JFR0lTVEVSSU5HO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbitcbiBcdGlmIChidXMtXHUwMDNlcmVhZCkge1xuIFx0XHRlcnIgPSBtZGlvYnVzX3NjYW5fYnVzX2MyMihidXMpO1xuIFx0XHRpZiAoZXJyKVxuQEAgLTY0MywyMCArNzE3LDE3IEBAIGludCBfX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cywgc3RydWN0IG1vZHVsZSAqb3duZXIpXG4gXHRcdFx0Z290byBlcnJvcjtcbiBcdH1cbiBcbitcdG11dGV4X2xvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuIFx0YnVzLVx1MDAzZXN0YXRlID0gTURJT0JVU19SRUdJU1RFUkVEO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiBcdGRldl9kYmcoXHUwMDI2YnVzLVx1MDAzZWRldiwgXCJwcm9iZWRcXG5cIik7XG4gXHRyZXR1cm4gMDtcbiBcbiBlcnJvcjpcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIFBIWV9NQVhfQUREUjsgaSsrKSB7XG4tXHRcdG1kaW9kZXYgPSBidXMtXHUwMDNlbWRpb19tYXBbaV07XG4tXHRcdGlmICghbWRpb2Rldilcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0bWRpb2Rldi1cdTAwM2VkZXZpY2VfcmVtb3ZlKG1kaW9kZXYpO1xuLVx0XHRtZGlvZGV2LVx1MDAzZWRldmljZV9mcmVlKG1kaW9kZXYpO1xuLVx0fVxuIGVycm9yX3Jlc2V0X2dwaW9kOlxuK1x0bWRpb2J1c19zdG9wX2RldmljZV9jaGFuZ2VzKGJ1cyk7XG4rXHRtZGlvYnVzX3JlbW92ZV9kZXZpY2VzKGJ1cyk7XG4rXG4gXHQvKiBQdXQgUEhZcyBpbiBSRVNFVCB0byBzYXZlIHBvd2VyICovXG4gXHRpZiAoYnVzLVx1MDAzZXJlc2V0X2dwaW9kKVxuIFx0XHRncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoYnVzLVx1MDAzZXJlc2V0X2dwaW9kLCAxKTtcbkBAIC02NjgsMjEgKzczOSwxMSBAQCBFWFBPUlRfU1lNQk9MKF9fbWRpb2J1c19yZWdpc3Rlcik7XG4gXG4gdm9pZCBtZGlvYnVzX3VucmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cylcbiB7XG4tXHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XG4tXHRpbnQgaTtcbi1cbiBcdGlmIChXQVJOX09OX09OQ0UoYnVzLVx1MDAzZXN0YXRlICE9IE1ESU9CVVNfUkVHSVNURVJFRCkpXG4gXHRcdHJldHVybjtcbi1cdGJ1cy1cdTAwM2VzdGF0ZSA9IE1ESU9CVVNfVU5SRUdJU1RFUkVEO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUEhZX01BWF9BRERSOyBpKyspIHtcbi1cdFx0bWRpb2RldiA9IGJ1cy1cdTAwM2VtZGlvX21hcFtpXTtcbi1cdFx0aWYgKCFtZGlvZGV2KVxuLVx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRtZGlvZGV2LVx1MDAzZWRldmljZV9yZW1vdmUobWRpb2Rldik7XG4tXHRcdG1kaW9kZXYtXHUwMDNlZGV2aWNlX2ZyZWUobWRpb2Rldik7XG4tXHR9XG4rXHRtZGlvYnVzX3N0b3BfZGV2aWNlX2NoYW5nZXMoYnVzKTtcbitcdG1kaW9idXNfcmVtb3ZlX2RldmljZXMoYnVzKTtcbiBcbiBcdC8qIFB1dCBQSFlzIGluIFJFU0VUIHRvIHNhdmUgcG93ZXIgKi9cbiBcdGlmIChidXMtXHUwMDNlcmVzZXRfZ3Bpb2QpXG5AQCAtNzAyLDggKzc2MywxMSBAQCBFWFBPUlRfU1lNQk9MKG1kaW9idXNfdW5yZWdpc3Rlcik7XG4gICovXG4gdm9pZCBtZGlvYnVzX2ZyZWUoc3RydWN0IG1paV9idXMgKmJ1cylcbiB7XG4rXHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbitcbiBcdC8qIEZvciBjb21wYXRpYmlsaXR5IHdpdGggZXJyb3IgaGFuZGxpbmcgaW4gZHJpdmVycy4gKi9cbiBcdGlmIChidXMtXHUwMDNlc3RhdGUgPT0gTURJT0JVU19BTExPQ0FURUQpIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiBcdFx0a2ZyZWUoYnVzKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuQEAgLTcxMSw2ICs3NzUsNyBAQCB2b2lkIG1kaW9idXNfZnJlZShzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxuIFx0V0FSTihidXMtXHUwMDNlc3RhdGUgIT0gTURJT0JVU19VTlJFR0lTVEVSRUQsXG4gXHQgICAgIFwiJXM6IG5vdCBpbiBVTlJFR0lTVEVSRUQgc3RhdGVcXG5cIiwgYnVzLVx1MDAzZWlkKTtcbiBcdGJ1cy1cdTAwM2VzdGF0ZSA9IE1ESU9CVVNfUkVMRUFTRUQ7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuIFxuIFx0cHV0X2RldmljZShcdTAwMjZidXMtXHUwMDNlZGV2KTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuY1xuaW5kZXggMDYxNTFmMjA3MTM0Ni4uM2IxOWU4MzE1ZjYxNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuY1xuQEAgLTE1LDYgKzE1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9taWkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmVzZXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuQEAgLTMzLDEyICszNCwxNiBAQFxuIHN0YXRpYyBpbnQgbWRpb19kZXZpY2VfcmVnaXN0ZXJfcmVzZXQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuIHtcbiBcdHN0cnVjdCByZXNldF9jb250cm9sICpyZXNldDtcbitcdGludCBlcnI7XG4gXG4gXHQvKiBEZWFzc2VydCB0aGUgb3B0aW9uYWwgcmVzZXQgc2lnbmFsICovXG4gXHRtZGlvZGV2LVx1MDAzZXJlc2V0X2dwaW8gPSBncGlvZF9nZXRfb3B0aW9uYWwoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcdFx0IFwicmVzZXRcIiwgR1BJT0RfT1VUX0xPVyk7XG4tXHRpZiAoSVNfRVJSKG1kaW9kZXYtXHUwMDNlcmVzZXRfZ3BpbykpXG4tXHRcdHJldHVybiBQVFJfRVJSKG1kaW9kZXYtXHUwMDNlcmVzZXRfZ3Bpbyk7XG4rXHRpZiAoSVNfRVJSKG1kaW9kZXYtXHUwMDNlcmVzZXRfZ3BpbykpIHtcbitcdFx0ZXJyID0gUFRSX0VSUihtZGlvZGV2LVx1MDAzZXJlc2V0X2dwaW8pO1xuK1x0XHRtZGlvZGV2LVx1MDAzZXJlc2V0X2dwaW8gPSBOVUxMO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuIFxuIFx0aWYgKG1kaW9kZXYtXHUwMDNlcmVzZXRfZ3BpbylcbiBcdFx0Z3Bpb2Rfc2V0X2NvbnN1bWVyX25hbWUobWRpb2Rldi1cdTAwM2VyZXNldF9ncGlvLCBcIlBIWSByZXNldFwiKTtcbkBAIC0xMTYsNiArMTIxLDEzIEBAIHN0YXRpYyB2b2lkIG1kaW9fZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0a2ZyZWUodG9fbWRpb19kZXZpY2UoZGV2KSk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgX19tZGlvX2RldmljZV9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIGR5bmFtaWMpO1xuK1xuK3N0YXRpYyBpbnQgbWRpb19kZXZpY2VfcmVtb3ZlX2R5bmFtaWMoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuK3tcbitcdHJldHVybiBfX21kaW9fZGV2aWNlX3JlbW92ZShtZGlvZGV2LCB0cnVlKTtcbit9XG4rXG4gc3RydWN0IG1kaW9fZGV2aWNlICptZGlvX2RldmljZV9jcmVhdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXG4ge1xuIFx0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2O1xuQEAgLTEzMCw5ICsxNDIsMTEgQEAgc3RydWN0IG1kaW9fZGV2aWNlICptZGlvX2RldmljZV9jcmVhdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXG4gXHRtZGlvZGV2LVx1MDAzZWRldi5idXMgPSBcdTAwMjZtZGlvX2J1c190eXBlO1xuIFx0bWRpb2Rldi1cdTAwM2VkZXZpY2VfZnJlZSA9IG1kaW9fZGV2aWNlX2ZyZWU7XG4gXHRtZGlvZGV2LVx1MDAzZWRldmljZV9yZW1vdmUgPSBtZGlvX2RldmljZV9yZW1vdmU7XG4rXHRtZGlvZGV2LVx1MDAzZWRldmljZV9yZW1vdmVfZHluYW1pYyA9IG1kaW9fZGV2aWNlX3JlbW92ZV9keW5hbWljO1xuIFx0bWRpb2Rldi1cdTAwM2VidXMgPSBidXM7XG4gXHRtZGlvZGV2LVx1MDAzZWFkZHIgPSBhZGRyO1xuIFx0bWRpb2Rldi1cdTAwM2VyZXNldF9zdGF0ZSA9IC0xO1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bWRpb2Rldi1cdTAwM2VyZXRpcmVkX25vZGUpO1xuIFxuIFx0ZGV2X3NldF9uYW1lKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2LCBQSFlfSURfRk1ULCBidXMtXHUwMDNlaWQsIGFkZHIpO1xuIFxuQEAgLTE1OSwxOSArMTczLDI3IEBAIGludCBtZGlvX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHRlcnIgPSBkZXZpY2VfYWRkKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2KTtcbi1cdGlmIChlcnIpIHtcbitcdGlmIChlcnIpXG4gXHRcdHByX2VycihcIk1ESU8gJWQgZmFpbGVkIHRvIGFkZFxcblwiLCBtZGlvZGV2LVx1MDAzZWFkZHIpO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuIFxuLSBvdXQ6XG4tXHRtZGlvYnVzX3VucmVnaXN0ZXJfZGV2aWNlKG1kaW9kZXYpO1xuLVx0cmV0dXJuIGVycjtcbitcdHJldHVybiBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lKG1kaW9kZXYsIGVycik7XG4gfVxuIEVYUE9SVF9TWU1CT0wobWRpb19kZXZpY2VfcmVnaXN0ZXIpO1xuIFxuK3N0YXRpYyBpbnQgX19tZGlvX2RldmljZV9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIGR5bmFtaWMpXG4re1xuK1x0aW50IGVycjtcbitcbitcdGVyciA9IG1kaW9idXNfYmVnaW5fcmVtb3ZlKG1kaW9kZXYsIGR5bmFtaWMpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGRldmljZV9kZWwoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuK1x0bWRpb2J1c19maW5pc2hfcmVtb3ZlKG1kaW9kZXYsIGR5bmFtaWMpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qKlxuICAqIG1kaW9fZGV2aWNlX3JlbW92ZSAtIFJlbW92ZSBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBtZGlvIGRldmljZSBmcm9tIHRoZVxuICAqXHRcdFx0TURJTyBidXNcbkBAIC0xODMsNDIgKzIwNSwyMTEgQEAgRVhQT1JUX1NZTUJPTChtZGlvX2RldmljZV9yZWdpc3Rlcik7XG4gICovXG4gdm9pZCBtZGlvX2RldmljZV9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuIHtcbi1cdGRldmljZV9kZWwoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuLVx0bWRpb2J1c191bnJlZ2lzdGVyX2RldmljZShtZGlvZGV2KTtcbitcdF9fbWRpb19kZXZpY2VfcmVtb3ZlKG1kaW9kZXYsIGZhbHNlKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChtZGlvX2RldmljZV9yZW1vdmUpO1xuIFxuIGludCBtZGlvYnVzX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4ge1xuK1x0c3RydWN0IG1paV9idXMgKmJ1cyA9IG1kaW9kZXYtXHUwMDNlYnVzO1xuIFx0aW50IGVycjtcbiBcbi1cdGlmIChtZGlvZGV2LVx1MDAzZWJ1cy1cdTAwM2VtZGlvX21hcFttZGlvZGV2LVx1MDAzZWFkZHJdKVxuLVx0XHRyZXR1cm4gLUVCVVNZO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4rXHRpZiAoYnVzLVx1MDAzZXN0YXRlICE9IE1ESU9CVVNfUkVHSVNURVJJTkcgXHUwMDI2XHUwMDI2XG4rXHQgICAgYnVzLVx1MDAzZXN0YXRlICE9IE1ESU9CVVNfUkVHSVNURVJFRCkge1xuK1x0XHRlcnIgPSAtRU5PREVWO1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXHR9XG4rXHRpZiAoYnVzLVx1MDAzZW1kaW9fbWFwX3JlbW92YWxzKSB7XG4rXHRcdGVyciA9IC1FQlVTWTtcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0fVxuK1xuK1x0aWYgKGJ1cy1cdTAwM2VtZGlvX21hcFttZGlvZGV2LVx1MDAzZWFkZHJdIHx8XG4rXHQgICAgYnVzLVx1MDAzZW1kaW9fbWFwX3BlbmRpbmcgXHUwMDI2IEJJVChtZGlvZGV2LVx1MDAzZWFkZHIpKSB7XG4rXHRcdGVyciA9IC1FQlVTWTtcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0fVxuK1xuK1x0YnVzLVx1MDAzZW1kaW9fbWFwX3BlbmRpbmcgfD0gQklUKG1kaW9kZXYtXHUwMDNlYWRkcik7XG4rXHRidXMtXHUwMDNlbWRpb19tYXBfb3BzKys7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuIFxuIFx0aWYgKG1kaW9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IE1ESU9fREVWSUNFX0ZMQUdfUEhZKSB7XG4gXHRcdGVyciA9IG1kaW9fZGV2aWNlX3JlZ2lzdGVyX3Jlc2V0KG1kaW9kZXYpO1xuLVx0XHRpZiAoZXJyKVxuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0bWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZShtZGlvZGV2LCBlcnIpO1xuIFx0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbiBcbiBcdFx0LyogQXNzZXJ0IHRoZSByZXNldCBzaWduYWwgKi9cbiBcdFx0bWRpb19kZXZpY2VfcmVzZXQobWRpb2RldiwgMSk7XG4gXHR9XG4gXG4tXHRtZGlvZGV2LVx1MDAzZWJ1cy1cdTAwM2VtZGlvX21hcFttZGlvZGV2LVx1MDAzZWFkZHJdID0gbWRpb2RldjtcbitcdG11dGV4X2xvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuK1x0LyogVGVhcmRvd24gd2FpdHMgZm9yIHRoaXMgcmVnaXN0cmF0aW9uIGJlZm9yZSBjb25zdW1pbmcgdGhlIG1hcC4gKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcFttZGlvZGV2LVx1MDAzZWFkZHJdLCBtZGlvZGV2KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4gXG4gXHRyZXR1cm4gMDtcbitcbitvdXRfdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuLWludCBtZGlvYnVzX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbisvKipcbisgKiBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4gLSBzdGFydCBjaGFuZ2luZyBkZXZpY2VzIG9uIGEgcmVnaXN0ZXJlZCBidXNcbisgKiBAYnVzOiBNRElPIGJ1cyB0aGF0IHdpbGwgYmUgc2Nhbm5lZCBvciBjaGFuZ2VkXG4rICogQHJlbW92aW5nOiB3aGV0aGVyIFBIWSBhdHRhY2htZW50IG11c3QgYmUgYmxvY2tlZCBkdXJpbmcgdGhlIGNoYW5nZVxuKyAqXG4rICogUmV0dXJuOiB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIHdoZW4gdGhlIGJ1cyBpcyB1bmF2YWlsYWJsZVxuKyAqL1xuK2ludCBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4oc3RydWN0IG1paV9idXMgKmJ1cywgYm9vbCByZW1vdmluZylcbiB7XG4tXHRpZiAobWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19tYXBbbWRpb2Rldi1cdTAwM2VhZGRyXSAhPSBtZGlvZGV2KVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4rXHRpZiAoYnVzLVx1MDAzZXN0YXRlICE9IE1ESU9CVVNfUkVHSVNURVJFRCkge1xuK1x0XHRlcnIgPSAtRU5PREVWO1xuK1x0fSBlbHNlIHtcbitcdFx0YnVzLVx1MDAzZW1kaW9fbWFwX29wcysrO1xuK1x0XHRpZiAocmVtb3ZpbmcpXG4rXHRcdFx0YnVzLVx1MDAzZW1kaW9fbWFwX3JlbW92YWxzKys7XG4rXHR9XG4rXHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKTtcbiBcbi1cdG1kaW9fZGV2aWNlX3VucmVnaXN0ZXJfcmVzZXQobWRpb2Rldik7XG4rc3RhdGljIHZvaWQgbWRpb2J1c19vcGVyYXRpb25fZG9uZV9sb2NrZWQoc3RydWN0IG1paV9idXMgKmJ1cylcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiBcbi1cdG1kaW9kZXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbWFwW21kaW9kZXYtXHUwMDNlYWRkcl0gPSBOVUxMO1xuK1x0aWYgKFdBUk5fT05fT05DRSghYnVzLVx1MDAzZW1kaW9fbWFwX29wcykpXG4rXHRcdHJldHVybjtcbitcdGJ1cy1cdTAwM2VtZGlvX21hcF9vcHMtLTtcbitcdGlmICghYnVzLVx1MDAzZW1kaW9fbWFwX29wcylcbitcdFx0d2FrZV91cF9hbGwoXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX3dhaXQpO1xuK31cbiBcbi1cdHJldHVybiAwO1xuKy8qKlxuKyAqIG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmQgLSBmaW5pc2ggY2hhbmdpbmcgZGV2aWNlcyBvbiBhbiBNRElPIGJ1c1xuKyAqIEBidXM6IE1ESU8gYnVzIHByZXZpb3VzbHkgcGFzc2VkIHRvIG1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbigpXG4rICogQHJlbW92aW5nOiB2YWx1ZSBwYXNzZWQgdG8gbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKClcbisgKi9cbit2b2lkIG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmQoc3RydWN0IG1paV9idXMgKmJ1cywgYm9vbCByZW1vdmluZylcbit7XG4rXHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbitcdGlmIChyZW1vdmluZykge1xuK1x0XHRpZiAoIVdBUk5fT05fT05DRSghYnVzLVx1MDAzZW1kaW9fbWFwX3JlbW92YWxzKSlcbitcdFx0XHRidXMtXHUwMDNlbWRpb19tYXBfcmVtb3ZhbHMtLTtcbitcdH1cbitcdG1kaW9idXNfb3BlcmF0aW9uX2RvbmVfbG9ja2VkKGJ1cyk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kKTtcbitcbitzdGF0aWMgdm9pZCBtZGlvYnVzX29wZXJhdGlvbl9kb25lKHN0cnVjdCBtaWlfYnVzICpidXMpXG4re1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4rXHRtZGlvYnVzX29wZXJhdGlvbl9kb25lX2xvY2tlZChidXMpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWRpb2J1c191bnB1Ymxpc2hfZGV2aWNlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldilcbit7XG4rXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpb2Rldi1cdTAwM2VidXM7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbitcbitcdGlmIChidXMtXHUwMDNlbWRpb19tYXBbbWRpb2Rldi1cdTAwM2VhZGRyXSA9PSBtZGlvZGV2KVxuK1x0XHRXUklURV9PTkNFKGJ1cy1cdTAwM2VtZGlvX21hcFttZGlvZGV2LVx1MDAzZWFkZHJdLCBOVUxMKTtcbitcdGlmIChtZGlvZGV2LVx1MDAzZWRldi5vZl9ub2RlKVxuK1x0XHRvZl9ub2RlX2NsZWFyX2ZsYWcobWRpb2Rldi1cdTAwM2VkZXYub2Zfbm9kZSwgT0ZfUE9QVUxBVEVEKTtcbit9XG4rXG4raW50IG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBpbnQgZXJyKVxuK3tcbitcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBtZGlvZGV2LVx1MDAzZWJ1cztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuK1x0aWYgKFdBUk5fT05fT05DRSghKGJ1cy1cdTAwM2VtZGlvX21hcF9wZW5kaW5nIFx1MDAyNiBCSVQobWRpb2Rldi1cdTAwM2VhZGRyKSkpKVxuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXG4rXHRpZiAoZXJyKVxuK1x0XHRtZGlvYnVzX3VucHVibGlzaF9kZXZpY2UobWRpb2Rldik7XG4rXHRlbHNlXG4rXHRcdFdBUk5fT05fT05DRShidXMtXHUwMDNlbWRpb19tYXBbbWRpb2Rldi1cdTAwM2VhZGRyXSAhPSBtZGlvZGV2KTtcbitcbitcdGJ1cy1cdTAwM2VtZGlvX21hcF9wZW5kaW5nIFx1MDAyNj0gfkJJVChtZGlvZGV2LVx1MDAzZWFkZHIpO1xuK1xuK291dF91bmxvY2s6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuK1x0aWYgKGVycikge1xuK1x0XHRpZiAobWRpb2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgTURJT19ERVZJQ0VfRkxBR19QSFkpIHtcbitcdFx0XHRtZGlvX2RldmljZV9yZXNldChtZGlvZGV2LCAxKTtcbitcdFx0XHRtZGlvX2RldmljZV91bnJlZ2lzdGVyX3Jlc2V0KG1kaW9kZXYpO1xuK1x0XHR9XG4rXHR9XG4rXHRtZGlvYnVzX29wZXJhdGlvbl9kb25lKGJ1cyk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgbWRpb2J1c19iZWdpbl9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIGR5bmFtaWMpXG4re1xuK1x0c3RydWN0IG1paV9idXMgKmJ1cyA9IG1kaW9kZXYtXHUwMDNlYnVzO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbitcdGlmIChkeW5hbWljIFx1MDAyNlx1MDAyNiAoYnVzLVx1MDAzZXN0YXRlID09IE1ESU9CVVNfVU5SRUdJU1RFUkVEIHx8XG4rXHRcdFx0YnVzLVx1MDAzZXN0YXRlID09IE1ESU9CVVNfUkVMRUFTRUQpKSB7XG4rXHRcdGVyciA9IC1FTk9ERVY7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcdGlmIChidXMtXHUwMDNlbWRpb19tYXBfcGVuZGluZyBcdTAwMjYgQklUKG1kaW9kZXYtXHUwMDNlYWRkcikpIHtcbitcdFx0ZXJyID0gLUVCVVNZO1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXHR9XG4rXG4rXHRpZiAoYnVzLVx1MDAzZW1kaW9fbWFwW21kaW9kZXYtXHUwMDNlYWRkcl0gIT0gbWRpb2Rldikge1xuK1x0XHRlcnIgPSAtRU5PREVWO1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXHR9XG4rXG4rXHRpZiAoZHluYW1pYyBcdTAwMjZcdTAwMjYgbWRpb2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgTURJT19ERVZJQ0VfRkxBR19QSFkgXHUwMDI2XHUwMDI2XG4rXHQgICAgdG9fcGh5X2RldmljZShcdTAwMjZtZGlvZGV2LVx1MDAzZWRldiktXHUwMDNlYXR0YWNoZWQpIHtcbitcdFx0ZXJyID0gLUVCVVNZO1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXHR9XG4rXG4rXHRtZGlvYnVzX3VucHVibGlzaF9kZXZpY2UobWRpb2Rldik7XG4rXG4rXHRpZiAoZHluYW1pYykge1xuK1x0XHRtZGlvX2RldmljZV9nZXQobWRpb2Rldik7XG4rXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2bWRpb2Rldi1cdTAwM2VyZXRpcmVkX25vZGUsIFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9yZXRpcmVkKTtcbitcdH1cbitcbitvdXRfdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3ZvaWQgbWRpb2J1c19maW5pc2hfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKVxuK3tcbitcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGU7XG4rXG4rXHRpZiAobWRpb2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgTURJT19ERVZJQ0VfRkxBR19QSFkpXG4rXHRcdG1kaW9fZGV2aWNlX3VucmVnaXN0ZXJfcmVzZXQobWRpb2Rldik7XG4rXG4rXHQvKiBEbyBub3Qga2VlcCBhbiBvdmVybGF5IG5vZGUgYWxpdmUgd2l0aCB0aGUgcmV0aXJlZCBkZXZpY2UuICovXG4rXHRpZiAoZHluYW1pYykge1xuK1x0XHRmd25vZGUgPSBkZXZfZndub2RlKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2KTtcbitcdFx0ZGV2aWNlX3NldF9ub2RlKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2LCBOVUxMKTtcbitcdFx0Zndub2RlX2hhbmRsZV9wdXQoZndub2RlKTtcbitcdH1cbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcbmluZGV4IDk0YjJlODVlMDBhMzcuLjNiMTgyOTU3YzNkZTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5AQCAtMjI3LDYgKzIyNyw4IEBAIHN0YXRpYyB2b2lkIHBoeV9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRrZnJlZSh0b19waHlfZGV2aWNlKGRldikpO1xuIH1cbiBcbitzdGF0aWMgaW50IF9fcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBkeW5hbWljKTtcbitcbiBzdGF0aWMgdm9pZCBwaHlfbWRpb19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbiB7XG4gXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuQEAgLTIzNSw2ICsyMzcsMTQgQEAgc3RhdGljIHZvaWQgcGh5X21kaW9fZGV2aWNlX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4gXHRwaHlfZGV2aWNlX3JlbW92ZShwaHlkZXYpO1xuIH1cbiBcbitzdGF0aWMgaW50IHBoeV9tZGlvX2RldmljZV9yZW1vdmVfZHluYW1pYyhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4re1xuK1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbitcbitcdHBoeWRldiA9IGNvbnRhaW5lcl9vZihtZGlvZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSwgbWRpbyk7XG4rXHRyZXR1cm4gX19waHlfZGV2aWNlX3JlbW92ZShwaHlkZXYsIHRydWUpO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZ2VucGh5X2RyaXZlcjtcbiBcbiBzdGF0aWMgTElTVF9IRUFEKHBoeV9maXh1cF9saXN0KTtcbkBAIC03NjgsNyArNzc4LDkgQEAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCB1MzIgcGh5X2lkLFxuIFx0bWRpb2Rldi1cdTAwM2VmbGFncyA9IE1ESU9fREVWSUNFX0ZMQUdfUEhZO1xuIFx0bWRpb2Rldi1cdTAwM2VkZXZpY2VfZnJlZSA9IHBoeV9tZGlvX2RldmljZV9mcmVlO1xuIFx0bWRpb2Rldi1cdTAwM2VkZXZpY2VfcmVtb3ZlID0gcGh5X21kaW9fZGV2aWNlX3JlbW92ZTtcbitcdG1kaW9kZXYtXHUwMDNlZGV2aWNlX3JlbW92ZV9keW5hbWljID0gcGh5X21kaW9fZGV2aWNlX3JlbW92ZV9keW5hbWljO1xuIFx0bWRpb2Rldi1cdTAwM2VyZXNldF9zdGF0ZSA9IC0xO1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bWRpb2Rldi1cdTAwM2VyZXRpcmVkX25vZGUpO1xuIFxuIFx0ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcbiBcdGRldi1cdTAwM2VkdXBsZXggPSBEVVBMRVhfVU5LTk9XTjtcbkBAIC0xMTIxLDI1ICsxMTMzLDQwIEBAIGludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRlcnIgPSBwaHlfc2Nhbl9maXh1cHMocGh5ZGV2KTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiZmFpbGVkIHRvIGluaXRpYWxpemVcXG5cIik7XG4tXHRcdGdvdG8gb3V0O1xuK1x0XHRyZXR1cm4gbWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbywgZXJyKTtcbiBcdH1cbiBcbiBcdGVyciA9IGRldmljZV9hZGQoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbi1cdGlmIChlcnIpIHtcbitcdGlmIChlcnIpXG4gXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcImZhaWxlZCB0byBhZGRcXG5cIik7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuIFxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gbWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbywgZXJyKTtcbit9XG4rRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTtcbitcbitzdGF0aWMgaW50IF9fcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBkeW5hbWljKVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBtZGlvYnVzX2JlZ2luX3JlbW92ZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbywgZHluYW1pYyk7XG4rXHRpZiAoZHluYW1pYyBcdTAwMjZcdTAwMjYgZXJyID09IC1FQlVTWSlcbitcdFx0ZGV2X3dhcm4oXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LFxuK1x0XHRcdCBcImNhbm5vdCByZW1vdmUgYSBQSFkgd2hpbGUgaXQgaXMgYXR0YWNoZWQgb3IgYmVpbmcgcmVnaXN0ZXJlZFxcblwiKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHR1bnJlZ2lzdGVyX21paV90aW1lc3RhbXBlcihwaHlkZXYtXHUwMDNlbWlpX3RzKTtcbitcdHBzZV9jb250cm9sX3B1dChwaHlkZXYtXHUwMDNlcHNlYyk7XG4rXG4rXHRkZXZpY2VfZGVsKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldik7XG4gXG4tIG91dDpcbiBcdC8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovXG4gXHRwaHlfZGV2aWNlX3Jlc2V0KHBoeWRldiwgMSk7XG4gXG4tXHRtZGlvYnVzX3VucmVnaXN0ZXJfZGV2aWNlKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvKTtcbi1cdHJldHVybiBlcnI7XG4rXHRtZGlvYnVzX2ZpbmlzaF9yZW1vdmUoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8sIGR5bmFtaWMpO1xuK1xuK1x0cmV0dXJuIDA7XG4gfVxuLUVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7XG4gXG4gLyoqXG4gICogcGh5X2RldmljZV9yZW1vdmUgLSBSZW1vdmUgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgcGh5IGRldmljZSBmcm9tIHRoZSBNRElPIGJ1c1xuQEAgLTExNTEsMTUgKzExNzgsNyBAQCBFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpO1xuICAqL1xuIHZvaWQgcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4tXHR1bnJlZ2lzdGVyX21paV90aW1lc3RhbXBlcihwaHlkZXYtXHUwMDNlbWlpX3RzKTtcbi1cdHBzZV9jb250cm9sX3B1dChwaHlkZXYtXHUwMDNlcHNlYyk7XG4tXG4tXHRkZXZpY2VfZGVsKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldik7XG4tXG4tXHQvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xuLVx0cGh5X2RldmljZV9yZXNldChwaHlkZXYsIDEpO1xuLVxuLVx0bWRpb2J1c191bnJlZ2lzdGVyX2RldmljZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbyk7XG4rXHRfX3BoeV9kZXZpY2VfcmVtb3ZlKHBoeWRldiwgZmFsc2UpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVtb3ZlKTtcbiBcbkBAIC0xNzM0LDYgKzE3NTMsMzYgQEAgc3RhdGljIGJvb2wgcGh5X2Rydl9zdXBwb3J0c19pcnEoY29uc3Qgc3RydWN0IHBoeV9kcml2ZXIgKnBoeWRydilcbiBcdHJldHVybiBwaHlkcnYtXHUwMDNlY29uZmlnX2ludHIgXHUwMDI2XHUwMDI2IHBoeWRydi1cdTAwM2VoYW5kbGVfaW50ZXJydXB0O1xuIH1cbiBcbitzdGF0aWMgaW50IHBoeV9jbGFpbShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvO1xuK1x0c3RydWN0IG1paV9idXMgKmJ1cyA9IG1kaW9kZXYtXHUwMDNlYnVzO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbitcdGlmIChidXMtXHUwMDNlc3RhdGUgIT0gTURJT0JVU19SRUdJU1RFUkVEIHx8XG4rXHQgICAgYnVzLVx1MDAzZW1kaW9fbWFwX3JlbW92YWxzIHx8XG4rXHQgICAgYnVzLVx1MDAzZW1kaW9fbWFwW21kaW9kZXYtXHUwMDNlYWRkcl0gIT0gbWRpb2RldiB8fFxuK1x0ICAgIChidXMtXHUwMDNlbWRpb19tYXBfcGVuZGluZyBcdTAwMjYgQklUKG1kaW9kZXYtXHUwMDNlYWRkcikpKVxuK1x0XHRlcnIgPSAtRU5PREVWO1xuK1x0ZWxzZSBpZiAocGh5ZGV2LVx1MDAzZWF0dGFjaGVkKVxuK1x0XHRlcnIgPSAtRUJVU1k7XG4rXHRlbHNlXG4rXHRcdHBoeWRldi1cdTAwM2VhdHRhY2hlZCA9IHRydWU7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIHZvaWQgcGh5X3JlbGVhc2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4rXHRwaHlkZXYtXHUwMDNlYXR0YWNoZWQgPSBmYWxzZTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4rfVxuK1xuIC8qKlxuICAqIHBoeV9hdHRhY2hfZGlyZWN0IC0gYXR0YWNoIGEgbmV0d29yayBkZXZpY2UgdG8gYSBnaXZlbiBQSFkgZGV2aWNlIHBvaW50ZXJcbiAgKiBAZGV2OiBuZXR3b3JrIGRldmljZSB0byBhdHRhY2hcbkBAIC0xNzU1LDYgKzE4MDQsNyBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiBcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuIFx0c3RydWN0IG1vZHVsZSAqbmRldl9vd25lciA9IE5VTEw7XG4rXHRib29sIGNsYWltZWQgPSBmYWxzZTtcbiBcdGludCBlcnI7XG4gXG4gXHQvKiBGb3IgRXRoZXJuZXQgZGV2aWNlIGRyaXZlcnMgdGhhdCByZWdpc3RlciB0aGVpciBvd24gTURJTyBidXMsIHdlXG5AQCAtMTc3MCw2ICsxODIwLDEzIEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0fVxuIFxuIFx0Z2V0X2RldmljZShkKTtcbitcdGVyciA9IHBoeV9jbGFpbShwaHlkZXYpO1xuK1x0aWYgKGVyciA9PSAtRUJVU1kpXG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIlBIWSBhbHJlYWR5IGF0dGFjaGVkXFxuXCIpO1xuK1x0aWYgKCFlcnIpXG4rXHRcdGNsYWltZWQgPSB0cnVlO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJvcl9wdXRfZGV2aWNlO1xuIFxuIFx0LyogQXNzdW1lIHRoYXQgaWYgdGhlcmUgaXMgbm8gZHJpdmVyLCB0aGF0IGl0IGRvZXNuJ3RcbiBcdCAqIGV4aXN0LCBhbmQgd2Ugc2hvdWxkIHVzZSB0aGUgZ2VucGh5IGRyaXZlci5cbkBAIC0xNzk4LDEyICsxODU1LDYgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXHRcdFx0Z290byBlcnJvcl9tb2R1bGVfcHV0O1xuIFx0fVxuIFxuLVx0aWYgKHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYpIHtcbi1cdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlZGV2LCBcIlBIWSBhbHJlYWR5IGF0dGFjaGVkXFxuXCIpO1xuLVx0XHRlcnIgPSAtRUJVU1k7XG4tXHRcdGdvdG8gZXJyb3I7XG4tXHR9XG4tXG4gXHRwaHlkZXYtXHUwMDNlcGh5X2xpbmtfY2hhbmdlID0gcGh5X2xpbmtfY2hhbmdlO1xuIFx0aWYgKGRldikge1xuIFx0XHRwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2ID0gZGV2O1xuQEAgLTE4OTksNiArMTk1MCw4IEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0cGh5ZGV2LVx1MDAzZWlzX2dlbnBoeV9kcml2ZW4gPSAwO1xuIFx0ZC1cdTAwM2Vkcml2ZXIgPSBOVUxMO1xuIGVycm9yX3B1dF9kZXZpY2U6XG4rXHRpZiAoY2xhaW1lZClcbitcdFx0cGh5X3JlbGVhc2UocGh5ZGV2KTtcbiBcdHB1dF9kZXZpY2UoZCk7XG4gXHRpZiAobmRldl9vd25lciAhPSBidXMtXHUwMDNlb3duZXIpXG4gXHRcdG1vZHVsZV9wdXQoYnVzLVx1MDAzZW93bmVyKTtcbkBAIC0xOTc3LDYgKzIwMzAsNyBAQCB2b2lkIHBoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdCAqIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGJ5IHJlYWRpbmcgdGhlIHVuZGVybHlpbmcgYnVzIGZpcnN0LlxuIFx0ICovXG4gXHRidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4rXHRwaHlfcmVsZWFzZShwaHlkZXYpO1xuIFxuIFx0cHV0X2RldmljZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYpO1xuIFx0aWYgKGRldilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5bGliLWludGVybmFsLmggYi9kcml2ZXJzL25ldC9waHkvcGh5bGliLWludGVybmFsLmhcbmluZGV4IDY2NGVkN2ZhYTUxODQuLjdlOTE2MWZjZGQ5MDEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5bGliLWludGVybmFsLmhcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaWItaW50ZXJuYWwuaFxuQEAgLTI1LDcgKzI1LDkgQEAgaW50IHBoeV9zcGVlZF9kb3duX2NvcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gdm9pZCBwaHlfY2hlY2tfZG93bnNoaWZ0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIFxuIGludCBtZGlvYnVzX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpO1xuLWludCBtZGlvYnVzX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldik7XG4raW50IG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBpbnQgZXJyKTtcbitpbnQgbWRpb2J1c19iZWdpbl9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIGR5bmFtaWMpO1xuK3ZvaWQgbWRpb2J1c19maW5pc2hfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKTtcbiBcbiBpbnQgZ2VucGh5X2M0NV9yZWFkX2VlZV9hZHYoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdW5zaWduZWQgbG9uZyAqYWR2KTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvbGludXgvbWRpby5oXG5pbmRleCBhN2Q5ZTNhZTM2MmE1Li5lMTk5NjNhZjhlMTM5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZGlvLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWRpby5oXG5AQCAtOCw2ICs4LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiBcbiBzdHJ1Y3QgZ3Bpb19kZXNjO1xuIHN0cnVjdCBtaWlfYnVzO1xuQEAgLTMyLDYgKzMzLDkgQEAgc3RydWN0IG1kaW9fZGV2aWNlIHtcbiBcdGludCAoKmJ1c19tYXRjaCkoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KTtcbiBcdHZvaWQgKCpkZXZpY2VfZnJlZSkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KTtcbiBcdHZvaWQgKCpkZXZpY2VfcmVtb3ZlKShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpO1xuK1x0aW50ICgqZGV2aWNlX3JlbW92ZV9keW5hbWljKShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpO1xuK1x0LyogRW50cnkgaW4gbWlpX2J1czo6bWRpb19tYXBfcmV0aXJlZC4gKi9cbitcdHN0cnVjdCBsaXN0X2hlYWQgcmV0aXJlZF9ub2RlO1xuIFxuIFx0LyogQnVzIGFkZHJlc3Mgb2YgdGhlIE1ESU8gZGV2aWNlICgwLTMxKSAqL1xuIFx0aW50IGFkZHI7XG5AQCAtNjk0LDYgKzY5OCw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1kaW9kZXZfYzQ1X3dyaXRlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyIGRldmFkLFxuIFxuIGJvb2wgbWRpb2J1c19pc19yZWdpc3RlcmVkX2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcik7XG4gc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfZ2V0X3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcik7XG4raW50IG1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBib29sIHJlbW92aW5nKTtcbit2b2lkIG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmQoc3RydWN0IG1paV9idXMgKmJ1cywgYm9vbCByZW1vdmluZyk7XG4gXG4gLyoqXG4gICogbWRpb19tb2R1bGVfZHJpdmVyKCkgLSBIZWxwZXIgbWFjcm8gZm9yIHJlZ2lzdGVyaW5nIG1kaW8gZHJpdmVyc1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCA1ZjhkNjU4NjhlMGZmLi4wNTAwZjgwZTBmYWNmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9waHkuaFxuQEAgLTIyLDYgKzIyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9taWlfdGltZXN0YW1wZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dhaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLWlkL21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3U2NF9zdGF0c19zeW5jLmhcdTAwM2VcbkBAIC0zOTEsNyArMzkyLDkgQEAgc3RydWN0IG1paV9idXMge1xuIFx0LyoqIEBzdGF0ZTogU3RhdGUgb2YgYnVzIHN0cnVjdHVyZSAqL1xuIFx0ZW51bSB7XG4gXHRcdE1ESU9CVVNfQUxMT0NBVEVEID0gMSxcbitcdFx0TURJT0JVU19SRUdJU1RFUklORyxcbiBcdFx0TURJT0JVU19SRUdJU1RFUkVELFxuK1x0XHRNRElPQlVTX1VOUkVHSVNURVJJTkcsXG4gXHRcdE1ESU9CVVNfVU5SRUdJU1RFUkVELFxuIFx0XHRNRElPQlVTX1JFTEVBU0VELFxuIFx0fSBzdGF0ZTtcbkBAIC00MDEsNiArNDA0LDE4IEBAIHN0cnVjdCBtaWlfYnVzIHtcbiBcbiBcdC8qKiBAbWRpb19tYXA6IGxpc3Qgb2YgYWxsIE1ESU8gZGV2aWNlcyBvbiBidXMgKi9cbiBcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb19tYXBbUEhZX01BWF9BRERSXTtcbitcdC8qKiBAbWRpb19tYXBfcGVuZGluZzogYWRkcmVzc2VzIHdpdGggcmVnaXN0cmF0aW9uIGluIHByb2dyZXNzICovXG4rXHR1MzIgbWRpb19tYXBfcGVuZGluZztcbitcdC8qKiBAbWRpb19tYXBfbG9jazogcHJvdGVjdHMgdGhlIE1ESU8gZGV2aWNlIG1hcCBhbmQgYnVzIHN0YXRlICovXG4rXHRzdHJ1Y3QgbXV0ZXggbWRpb19tYXBfbG9jaztcbitcdC8qKiBAbWRpb19tYXBfd2FpdDogd2FpdCBmb3IgYWN0aXZlIG1hcCBvcGVyYXRpb25zIGR1cmluZyB0ZWFyZG93biAqL1xuK1x0d2FpdF9xdWV1ZV9oZWFkX3QgbWRpb19tYXBfd2FpdDtcbitcdC8qKiBAbWRpb19tYXBfb3BzOiBhY3RpdmUgcmVnaXN0cmF0aW9ucyBhbmQgZmlybXdhcmUgY2hhbmdlcyAqL1xuK1x0dW5zaWduZWQgaW50IG1kaW9fbWFwX29wcztcbitcdC8qKiBAbWRpb19tYXBfcmVtb3ZhbHM6IGZpcm13YXJlIHJlbW92YWxzIGJsb2NraW5nIFBIWSBhdHRhY2htZW50ICovXG4rXHR1bnNpZ25lZCBpbnQgbWRpb19tYXBfcmVtb3ZhbHM7XG4rXHQvKiogQG1kaW9fbWFwX3JldGlyZWQ6IHJlbW92ZWQgZGV2aWNlcyBwaW5uZWQgdW50aWwgYnVzIHRlYXJkb3duICovXG4rXHRzdHJ1Y3QgbGlzdF9oZWFkIG1kaW9fbWFwX3JldGlyZWQ7XG4gXG4gXHQvKiogQHBoeV9tYXNrOiBQSFkgYWRkcmVzc2VzIHRvIGJlIGlnbm9yZWQgd2hlbiBwcm9iaW5nICovXG4gXHR1MzIgcGh5X21hc2s7XG5AQCAtNjUyLDYgKzY2Nyw4IEBAIHN0cnVjdCBwaHlfb2F0YzE0X3NxaV9jYXBhYmlsaXR5IHtcbiAgKiBAbl9wb3J0czogTnVtYmVyIG9mIHBvcnRzIGN1cnJlbnRseSBhdHRhY2hlZCB0byB0aGUgUEhZXG4gICogQG1heF9uX3BvcnRzOiBNYXggbnVtYmVyIG9mIHBvcnRzIHRoaXMgUEhZIGNhbiBleHBvc2VcbiAgKiBAbG9jazogIE11dGV4IGZvciBzZXJpYWxpemF0aW9uIGFjY2VzcyB0byBQSFlcbisgKiBAYXR0YWNoZWQ6IFdoZXRoZXIgYSBuZXR3b3JrIGRldmljZSBvciBzdGFuZGFsb25lIHVzZXIgYXR0YWNoZWQgdGhlIFBIWTtcbisgKlx0cHJvdGVjdGVkIGJ5IHRoZSBNRElPIGJ1cyBtYXAgbG9ja1xuICAqIEBzdGF0ZV9xdWV1ZTogV29yayBxdWV1ZSBmb3Igc3RhdGUgbWFjaGluZVxuICAqIEBsaW5rX2Rvd25fZXZlbnRzOiBOdW1iZXIgb2YgdGltZXMgbGluayB3YXMgbG9zdFxuICAqIEBzaGFyZWQ6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhIHNoYXJlZCBieSBwaHlzIGluIG9uZSBwYWNrYWdlXG5AQCAtNzgxLDYgKzc5OCw3IEBAIHN0cnVjdCBwaHlfZGV2aWNlIHtcbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgc3RhdGVfcXVldWU7XG4gXG4gXHRzdHJ1Y3QgbXV0ZXggbG9jaztcbitcdGJvb2wgYXR0YWNoZWQ7XG4gXG4gXHQvKiBUaGlzIG1heSBiZSBtb2RpZmllZCB1bmRlciB0aGUgcnRubCBsb2NrICovXG4gXHRib29sIHNmcF9idXNfYXR0YWNoZWQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNjowNi4wNDMzNDY5NzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTA4NzE2NDU2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1ESU8vUEhZIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggc2VyaWVzIHRoYXQgc2lnbmlmaWNhbnRseSB0b3VjaGVzIHRoZSBNRElPIGFuZCBQSFkgc3Vic3lzdGVtcy4gSXQgc2VlbXMgdGhpcyBpcyBmb2N1c2VkIG9uIGVuaGFuY2luZyBkeW5hbWljIE9GIHJlY29uZmlndXJhdGlvbiBjYXBhYmlsaXRpZXMgZm9yIE1ESU8gYnVzZXMsIGxpa2VseSB0byBzdXBwb3J0IGRldmljZSB0cmVlIG92ZXJsYXlzIGFuZCBjaGFuZ2VzIGR1cmluZyBydW50aW1lLiBUaGUgZmlsZXMgYmVpbmcgbW9kaWZpZWQsIHNwZWNpZmljYWxseSBgZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmNgLCBgZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmNgLCBhbmQgc2V2ZXJhbCBvdGhlcnMgaW4gdGhlIGBkcml2ZXJzL25ldC9waHlgIGRpcmVjdG9yeSwgaW1tZWRpYXRlbHkgZmxhZyB0aGlzIGFzIGNvcmUgaW5mcmFzdHJ1Y3R1cmUuIEkgY2FuIHNlZSB0aGUgY2hhbmdlcyBkZWFsIHdpdGggaG93IE1ESU8gZGV2aWNlcyBhcmUgcmVnaXN0ZXJlZCBhbmQgdW5yZWdpc3RlcmVkLCBhbG9uZyB3aXRoIG1vZGlmaWNhdGlvbnMgdG8gdGhlIE1ESU8gYnVzIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zLiBUaGV5J3JlIGFkZGluZyBuZXcgbWVjaGFuaXNtcyBsaWtlIGBvZl9tZGlvX3JlY29uZmlnX211dGV4YCwgYG9mX21kaW9idXNfbm90aWZ5YCwgYW5kIGBvZl9tZGlvYnVzX292ZXJsYXlfbm90aWZ5YCBhbmQgYWRkaW5nIGBtZGlvX21hcF9sb2NrYCB0byBgc3RydWN0IG1paV9idXNgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uZmlybSByZWFjaGFiaWxpdHkgYW5kIGZ1bmN0aW9uYWxpdHkuIFNpbmNlIHRoaXMgYWZmZWN0cyBjb3JlIE1ESU8gYW5kIFBIWSBjb2RlLCB3aGljaCBpcyB1c2VkIGJ5IG51bWVyb3VzIG5ldHdvcmtpbmcgZHJpdmVycywgaXQncyBhIGNyaXRpY2FsIGFyZWEuIFRoZSBwcmVzZW5jZSBvZiBkeW5hbWljIE9GIHJlY29uZmlndXJhdGlvbiBzdXBwb3J0IGlzIGltcG9ydGFudCBiZWNhdXNlIHRob3NlIGNvbmZpZ3MgYXJlIHNldCB0byBlbmFibGUgZHluYW1pYyBjb25maWd1cmF0aW9uIGNoYW5nZXMuIFRoaXMgaXMgaW5kaWNhdGVkIGJ5IHRoZSBpbnZvbHZlbWVudCBvZiBgQ09ORklHX09GX0RZTkFNSUNgLCBgQ09ORklHX09GX09WRVJMQVlgLCBhbmQgYENPTkZJR19PRl9NRElPYCB3aGljaCBpcyBrZXkuXG5cbkRpdmluZyBkZWVwZXIgaW50byB0aGUgc3BlY2lmaWMgZmlsZXMsIEkgc2VlIHRoYXQgYGRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jYCBoYXMgY3JpdGljYWwgZnVuY3Rpb25zIHN1Y2ggYXMgYG9mX21kaW9idXNfcmVnaXN0ZXJfY2hpbGRgLCBgb2ZfbWRpb2J1c19zY2FuX3BoeWAsIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgLCBgb2ZfbWRpb2J1c19ub3RpZnlgLCBhbmQgYG9mX21kaW9idXNfb3ZlcmxheV9ub3RpZnlgLiBJIGNhbiBhbHNvIHNlZSB0aGF0IG90aGVyIGNvcmUgTURJTy9QSFkgc3Vic3lzdGVtIGNvbXBvbmVudHMgbGlrZSBgbWRpb2J1c19pc19yZWdpc3RlcmVkX2RldmljZWAsIGBtZGlvYnVzX2FsbG9jX3NpemVgLCBgb2ZfbWRpb2J1c19maW5kX3BoeWAsIGBfX21kaW9idXNfc2NhbmAsIGBtZGlvYnVzX3NjYW5fYzIyYCwgYG1kaW9idXNfc2Nhbl9jNDVgLCBgX19tZGlvYnVzX3JlZ2lzdGVyYCwgYG1kaW9idXNfdW5yZWdpc3RlcmAsIGBtZGlvYnVzX2ZyZWVgIGFyZSBpbnZvbHZlZC4gVGhlIGNoYW5nZXMgdG8gIGBtZGlvX2RldmljZV9yZWdpc3RlcmAsIGBtZGlvX2RldmljZV9yZW1vdmVgLCBgbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2VgLCBgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luYCwgYG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmRgLCBgbWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZWAsIGBtZGlvYnVzX2JlZ2luX3JlbW92ZWAsIGBtZGlvYnVzX2ZpbmlzaF9yZW1vdmVgLCBgcGh5X2RldmljZV9yZWdpc3RlcmAsIGBwaHlfZGV2aWNlX3JlbW92ZWAsIGBwaHlfY2xhaW1gLCBgcGh5X3JlbGVhc2VgLCBgcGh5X2F0dGFjaF9kaXJlY3RgLCBhbmQgYHBoeV9kZXRhY2hgIHNlZW0gdG8gYmUgdGhlIG1vc3QgaW1wYWN0ZWQuXG5cbkdpdmVuIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9uIGNvcmUgZnVuY3Rpb25zLCBmdXp6aW5nIHRoaXMgcGF0Y2ggaXMgYWJzb2x1dGVseSB3b3J0aHdoaWxlLiBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gc3BlY2lmaWMgc3ltYm9scyBhbmQgZnVuY3Rpb25zIHRoYXQgcmVwcmVzZW50IGtleSBwb2ludHMgb2YgaW50ZXJhY3Rpb24gd2l0aCBkeW5hbWljIE9GIGNoYW5nZXMgYW5kIGRldmljZSByZWdpc3RyYXRpb24vcmVtb3ZhbC4gSSB3aWxsIHNwZWNpZmljYWxseSBmb2N1cyBvbjogYG9mX21kaW9idXNfbm90aWZ5YCwgYG9mX21kaW9idXNfb3ZlcmxheV9ub3RpZnlgLCBgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luYCwgYG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmRgLCBgbWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZWAsIGBtZGlvYnVzX2JlZ2luX3JlbW92ZWAsIGBtZGlvYnVzX2ZpbmlzaF9yZW1vdmVgLCBgcGh5X2NsYWltYCwgYHBoeV9yZWxlYXNlYCwgYHBoeV9hdHRhY2hfZGlyZWN0YCwgYHBoeV9kZXRhY2hgLCBgbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2VgLCBgbWRpb19kZXZpY2VfcmVnaXN0ZXJgLCBhbmQgYG1kaW9fZGV2aWNlX3JlbW92ZWAuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBlbnN1cmUgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBlbmFibGVkIGZvciB0ZXN0aW5nLiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19PRl9EWU5BTUlDYCwgYENPTkZJR19PRl9PVkVSTEFZYCwgYENPTkZJR19PRl9NRElPYCwgYENPTkZJR19QSFlMSUJgLCBhbmQgYENPTkZJR19NRElPX0RFVklDRWAgYXJlIGFsbCBwcm9wZXJseSBzZXQsIGFzIHRob3NlIGFyZSB0aGUgcHJlcmVxdWlzaXRlcyBmb3IgdGhpcyBjb2RlIHRvIGJlIGFjdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5OTQsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNjoyNS4xMzA1MTUzNTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0MTMyNzQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT0ZfRFlOQU1JQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9vZi9LY29uZmlnPTc4PWNvbmZpZyBPRl9LT0JKXFxuLS1cXG5kcml2ZXJzL29mL0tjb25maWctODItIyBuZWVkIGl0LlxcbmRyaXZlcnMvb2YvS2NvbmZpZzo4Mzpjb25maWcgT0ZfRFlOQU1JQ1xcbmRyaXZlcnMvb2YvS2NvbmZpZy04NC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBkeW5hbWljIGRldmljZSB0cmVlc1xcXCIgaWYgT0ZfVU5JVFRFU1RcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDY6MjYuOTcxODQ5MTkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA0MTU4Njk1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlF1aWNrIENoZWNrOiBgT0ZfT1ZFUkxBWWAqKlxuXG5SaWdodCwgbGV0J3MganVzdCBkbyBhIHF1aWNrIG1lbnRhbCBjaGVjay4gRmlyc3QgdGhpbmcgSSdtIHRoaW5raW5nIGlzLCBcIldoYXQncyB0aGUgc3RhdHVzIG9mIGBPRl9PVkVSTEFZYD8gV2hhdCdzIHRoZSBjb250ZXh0IEknbSBjdXJyZW50bHkgd29ya2luZyB3aXRoaW4gdGhhdCByZXF1aXJlcyBtZSB0byB0aGluayBvZiB0aGF0P1wiIElzIGl0IGluIGEgY3VycmVudCBhY3RpdmUgcHJvamVjdD8gQW0gSSB1cGRhdGluZyBhbiBleGlzdGluZyBzeXN0ZW0sIG9yIHN0YXJ0aW5nIHNvbWV0aGluZyBuZXc/IEknbSBub3QgZ29pbmcgdG8gZGl2ZSB0b28gZGVlcCBpbnRvIGFuYWx5c2lzIHlldCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBob3cgdGhpcyBzZXR0aW5nIGlzIGN1cnJlbnRseSBiZWluZyB1c2VkLCBpZiBhdCBhbGwuIEFyZSB0aGVyZSBzcGVjaWZpYyBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBvdmVybGF5IG9uIGEgc3RhbmRhcmQgc2NyZWVuLCBvciBzb21ldGhpbmcgZmFyIG1vcmUgY29tcGxleCBpbnZvbHZpbmcgbXVsdGlwbGUsIGR5bmFtaWNhbGx5IGxvYWRlZCBpbWFnZXMsIGFuZCBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgY29uY2VybnM/XG5cbk9rYXksIHNvIEkgd2lsbCBub3cgY29uc2lkZXIgYWxsIHRoZSBwb3NzaWJpbGl0aWVzIHRoYXQgc3ByaW5nIHRvIG1pbmQuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxODEyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDY6MzIuMDEzNDQ0MzdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0OTUwNDUzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT0ZfT1ZFUkxBWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9vZi9LY29uZmlnPTEwMj1jb25maWcgT0ZfUkVTT0xWRVxcbi0tXFxuZHJpdmVycy9vZi9LY29uZmlnLTEwNC1cXG5kcml2ZXJzL29mL0tjb25maWc6MTA1OmNvbmZpZyBPRl9PVkVSTEFZXFxuZHJpdmVycy9vZi9LY29uZmlnLTEwNi1cXHRib29sIFxcXCJEZXZpY2UgVHJlZSBvdmVybGF5c1xcXCJcXG4tLVxcbmRyaXZlcnMvb2YvS2NvbmZpZy0xMTUtXFxuZHJpdmVycy9vZi9LY29uZmlnOjExNjpjb25maWcgT0ZfT1ZFUkxBWV9LVU5JVF9URVNUXFxuZHJpdmVycy9vZi9LY29uZmlnLTExNy1cXHR0cmlzdGF0ZSBcXFwiRGV2aWNlIFRyZWUgb3ZlcmxheSBLVW5pdCB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNjozNC4wNjI5NTQ5NzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzkzMTg4NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyB0aGUgYE9GX01ESU9gIFZhcmlhYmxlKipcblxuQWxyaWdodCwgbGV0J3MganVzdCBtYWtlIHN1cmUgd2UncmUgb24gdGhlIHJpZ2h0IHRyYWNrIGhlcmUuICpPRl9NRElPKi4uLiB0aGF0IHZhcmlhYmxlIGhhcyBiZWVuIG5hZ2dpbmcgYXQgdGhlIGJhY2sgb2YgbXkgbWluZC4gSXQgY291bGQgYmUgcGl2b3RhbCwgZGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUgYW5kIGRyaXZlciBpbnRlcmFjdGlvbi4gSSBuZWVkIHRvIG1ha2UgYSBxdWljayBzYW5pdHkgY2hlY2suIEknbSB0aGlua2luZywgaXMgdGhpcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIE1ESU8gaW50ZXJmYWNlIGlzIHN0b3JlZD8gQXJlIHdlIHJlYWRpbmcgaXQsIHdyaXRpbmcgaXQsIG9yIGJvdGg/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB3aGVyZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyBhcmUgdGhhdCBpbnRlcmFjdCB3aXRoIHRoaXMgcGFydGljdWxhciB2YXJpYWJsZS4gV2hhdCBpbXBsaWNhdGlvbnMgd291bGQgaW5jb3JyZWN0IHZhbHVlIGhhdmU/IE1lbW9yeSBjb3JydXB0aW9uIGlzIGFsd2F5cyBhIGNvbmNlcm4uIEkgY291bGQgcmV2aWV3IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgdG8gdXNlIHRoZSB2YWx1ZS4gSSd2ZSBiZWVuIGJ1cm5lZCBiZWZvcmUgYXNzdW1pbmcgc29tZXRoaW5nIG9idmlvdXMsIHNvIGxldCdzIGp1c3QgZG91YmxlIGNoZWNrIHRoZSBkZWZpbml0aW9uIGFuZCB1c2FnZSBvZiAqT0ZfTURJTyogdG8gcnVsZSBvdXQgdGhlIG9idmlvdXMgY3VscHJpdHMgZmlyc3QuIFRoZW4sIEkgY2FuIGRlbHZlIGRlZXBlciBpbnRvIG1vcmUgY29tcGxleCBkZXBlbmRlbmNpZXMgaWYgbmVlZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjIwNiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA2OjM5LjQ1NjE0Njg0MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU0NjExODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPRl9NRElPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9OT1jb25maWcgRldOT0RFX01ESU9cXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xMy1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTQ6Y29uZmlnIE9GX01ESU9cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTUtXFx0ZGVmX3RyaXN0YXRlIE9GXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA2OjQxLjExMDc2NjY2N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MzU2MjMxMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIFBIWSBhbmQgTURJTyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgT0ZfTURJT2AgaXMgYXV0b21hdGljYWxseSBlbmFibGVkIHdoZW4gYE9GYCBpcywgd2hpY2ggbWFrZXMgc2Vuc2UuIEFuZCwgdGhpbmtpbmcgYWJvdXQgaXQsIGVuYWJsaW5nIGBPRl9EWU5BTUlDYCBhbmQgYE9GX09WRVJMQVlgIGlzIGdlbmVyYWxseSBhIGdvb2QgaWRlYSBmb3IgZmxleGliaWxpdHkuIGBQSFlMSUJgIGFuZCBgTURJT19ERVZJQ0VgIGFyZSBwcmV0dHkgbXVjaCBzdGFuZGFyZCwgc28gd2UncmUgZ29vZCB0aGVyZS5cblxuTm93LCBsZXQncyByZWZpbmUgdGhlIEZvY3VzU3ltYm9scyB0byBtYWtlIHN1cmUgd2UncmUgcmVhbGx5IGhvbmluZyBpbiBvbiB0aGUga2V5IGludGVyYWN0aW9ucy4gV2UgbmVlZCB0byBjb25zaWRlcjpcblxuKiAgIGBvZl9tZGlvYnVzX25vdGlmeWBcbiogICBgb2ZfbWRpb2J1c19vdmVybGF5X25vdGlmeWBcbiogICBgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luYFxuKiAgIGBtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kYFxuKiAgIGBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lYFxuKiAgIGBtZGlvYnVzX2JlZ2luX3JlbW92ZWBcbiogICBgbWRpb2J1c19maW5pc2hfcmVtb3ZlYFxuKiAgIGBwaHlfY2xhaW1gXG4qICAgYHBoeV9yZWxlYXNlYFxuXG5XYWl0IGEgbWludXRlLCBgcGh5X2NsYWltYCBhbmQgYHBoeV9yZWxlYXNlYCBhcmUgc3RhdGljYWxseSBkZWZpbmVkLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgUEhZIGxheWVyLCBzcGVjaWZpY2FsbHkgYXQgYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgIHRvIHNlZSBob3cgdGhvc2UgYXJlIHdvcmtpbmcuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjU0MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNjo0NS45NDYzOTIyMjdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODg4ODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9jbGFpbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTc1MT1zdGF0aWMgYm9vbCBwaHlfZHJ2X3N1cHBvcnRzX2lycShjb25zdCBzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzU1LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTc1NjpzdGF0aWMgaW50IHBoeV9jbGFpbShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTc1Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTE4MDE9aW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4MjItXFx0Z2V0X2RldmljZShkKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE4MjM6XFx0ZXJyID0gcGh5X2NsYWltKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODI0LVxcdGlmIChlcnIgPT0gLUVCVVNZKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNjo0NS45OTUyODcxMTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY2MzY3NDc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGFzc2Vzc21lbnQgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipSZWZpbmluZyBNeSBTeW1ib2wgRm9jdXMqKlxuXG5JJ20gcmV2aXNpdGluZyBob3cgSSdtIGhhbmRsaW5nIHN5bWJvbHMgYW5kIHRoZWlyIGluY2x1c2lvbi4gSXQncyBiZWNvbWUgY2xlYXIgdGhhdCBgcGh5X2NsYWltYCBhbmQgYHBoeV9yZWxlYXNlYCBhcmUgc3RhdGljIGluIHRoZSBjdXJyZW50IGNvbnRleHQuIFRoYXQgbWVhbnMgdGhleSBkb24ndCByZWFsbHkgb2ZmZXIgbWUgdGhlIGtpbmQgb2YgZHluYW1pYyBpbnNpZ2h0IEknbSBhZnRlciwgYXQgbGVhc3Qgbm90IHdpdGhpbiB0aGUgYEZvY3VzU3ltYm9sc2AgY29udGV4dC4gU28sIEknbGwgZXhjbHVkZSB0aGVtLiBJbnN0ZWFkLCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIHBvaW50cyB3aGVyZSB0aGVyZSdzIGEgbW9yZSBkaXJlY3QgYXNzb2NpYXRpb24gd2l0aCB0aGUgZGV2aWNlIGxpZmVjeWNsZS4gU3BlY2lmaWNhbGx5LCBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAgc2VlbSBtdWNoIG1vcmUgcmVsZXZhbnQgaGVyZS4gVGhleSdyZSB0aGUgY29yZSBvZiBob3cgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgYW5kIGJyb2tlbiwgd2hpY2ggaXMgd2hhdCBJIG5lZWQgdG8gd2F0Y2guXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGluIG9uIGBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW5gIGFuZCBgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2VuZGAuIEkgd2FudCB0byBjb25maXJtIHRoZXkncmUgbm90IGltcGxpY2l0bHkgcmVsYXRlZCB0byB0aGUgYXR0YWNobWVudC9kZXRhY2htZW50IHByb2Nlc3MsIGFuZCB0aGF0IHRoZXJlIGFyZSBubyBoaWRkZW4gaW50ZXJhY3Rpb25zIHRoYXQgbWlnaHQgYmUgcGVydGluZW50IHRvIG15IGFwcHJvYWNoIGhlcmUuIEEgcXVpY2sgc2NhbiBzaG91bGQgYmUgZW5vdWdoIHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzA3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDY6NTAuNjU4OTY0OTEzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzczMjE4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM9MjEyPWludCBtZGlvYnVzX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0yNjEtLyoqXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MjYyOiAqIG1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbiAtIHN0YXJ0IGNoYW5naW5nIGRldmljZXMgb24gYSByZWdpc3RlcmVkIGJ1c1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTI2My0gKiBAYnVzOiBNRElPIGJ1cyB0aGF0IHdpbGwgYmUgc2Nhbm5lZCBvciBjaGFuZ2VkXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0yNjctICovXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MjY4OmludCBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4oc3RydWN0IG1paV9idXMgKmJ1cywgYm9vbCByZW1vdmluZylcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0yNjkte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMjgzLX1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoyODQ6RVhQT1JUX1NZTUJPTF9HUEwobWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKTtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0yODUtXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM9Mjg2PXN0YXRpYyB2b2lkIG1kaW9idXNfb3BlcmF0aW9uX2RvbmVfbG9ja2VkKHN0cnVjdCBtaWlfYnVzICpidXMpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0yOTgtICogbWRpb2J1c19kZXZpY2VfY2hhbmdlX2VuZCAtIGZpbmlzaCBjaGFuZ2luZyBkZXZpY2VzIG9uIGFuIE1ESU8gYnVzXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6Mjk5OiAqIEBidXM6IE1ESU8gYnVzIHByZXZpb3VzbHkgcGFzc2VkIHRvIG1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbigpXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MzAwOiAqIEByZW1vdmluZzogdmFsdWUgcGFzc2VkIHRvIG1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbigpXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMzAxLSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNjo1MC43MDY3MDI0OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDI2ODU4NzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBvbiBNRElPIEJ1cyBTeW1ib2wgRXhwb3J0KipcblxuUmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBleHBvcnRlZCBzeW1ib2xzIGhlcmUsIHdoaWNoIGltbWVkaWF0ZWx5IGZvY3VzZXMgbXkgYXR0ZW50aW9uIG9uIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQgZXh0ZXJuYWxseSBhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgTURJTyBidXMgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgaG93IGl0IGltcGFjdHMgYW55IG1vZHVsZXMgdGhhdCByZWx5IG9uIGl0LlxuXG5MZXQncyBxdWlja2x5IGRyaWxsIGRvd24gYW5kIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyB3ZWxsIHVuZGVyc3Rvb2QuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGFjcm9zcyB0aGUgdGhyZWUgbWFpbiBmdW5jdGlvbnMgd2hpY2ggY29udHJvbCB0aGUgbGlmZWN5Y2xlOiBJJ2xsIGNoZWNrIGBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lYCwgYG1kaW9idXNfYmVnaW5fcmVtb3ZlYCwgYW5kIGBtZGlvYnVzX2ZpbmlzaF9yZW1vdmVgLiBJIHdhbnQgdG8gY29uZmlybSBob3cgdGhlc2UgY29udHJvbCB0aGUgcmVnaXN0cmF0aW9uLCBhbmQgcmVtb3ZhbCwgb2YgdGhpcyBjcml0aWNhbCBjb21wb25lbnQuIFVuZGVyc3RhbmRpbmcgdGhlaXIgaW50ZXJhY3Rpb24gaXMga2V5LiBVbmRlcnN0YW5kaW5nIHRoZSBvcmRlcmluZyBvZiBvcGVyYXRpb25zIGlzIGNyaXRpY2FsIHRvIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGFuZCBlbnN1cmluZyBwcm9wZXIgcmVzb3VyY2UgbWFuYWdlbWVudC4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhlIGxvY2tpbmcgaXMgaW1wbGVtZW50ZWQsIGFuZCBhbHNvIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBob3RwbHVnIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTIzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDY6NTcuNzMzNTY0MTczWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc1NzQzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYz0xNjU9aW50IG1kaW9fZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTE3OC1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxNzk6XFx0cmV0dXJuIG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUobWRpb2RldiwgZXJyKTtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xODAtfVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM9MjEyPWludCBtZGlvYnVzX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0yNDAtXFx0XFx0aWYgKGVycikge1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jOjI0MTpcXHRcXHRcXHRtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lKG1kaW9kZXYsIGVycik7XFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMjQyLVxcdFxcdFxcdHJldHVybiBlcnI7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYz0zMjE9c3RhdGljIHZvaWQgbWRpb2J1c191bnB1Ymxpc2hfZGV2aWNlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTMzMi1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzozMzM6aW50IG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBpbnQgZXJyKVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTMzNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA2OjU3Ljg5MTE0NTMxNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDUyNjY2NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIElubmVyIFdvcmtpbmdzIG9mIHBoeWxpYioqXG5cblJpZ2h0LCBzbyB0aGVzZSBjb25jZXB0cywgdGhlc2XigKYgKnRoaW5ncyosIHRoZXkncmUgZGVmaW5pdGVseSBub3Qgc3RhdGljIGNvbnN0YW50cywgZGVmaW5lZCBzb21ld2hlcmUgYW5kIHJlYWRpbHkgYWNjZXNzaWJsZSBsaWtlIGV4cG9ydGVkIHN5bWJvbHMuIFRoYXQgbXVjaCBpcyBjbGVhci4gQnV0IHRoZXkncmUgYWxzbyAqbm90KiBzb21ldGhpbmcgdGhhdCdzIHZpc2libGUgYXQgdGhlIEFQSSBsZXZlbCwgcmVhZGlseSBhY2Nlc3NpYmxlIHRvIGV4dGVybmFsIGRyaXZlcnMgb3IgbW9kdWxlcy4gVGhleSBhcmUgZnVuZGFtZW50YWxseSAqaW50ZXJuYWwqIHRvIHRoZSBgcGh5bGliYCBmcmFtZXdvcmsgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHBoeWxpYmAncyBjb3JlIGxvZ2ljIGhhbmRsZXMgYW5kIG1hbmFnZXMgdGhpcyBpbmZvcm1hdGlvbi5cblxuTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRlbHZlIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIFRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBmaW5kIHRoZSBkZWNsYXJhdGlvbnMgb2YgdGhlc2UgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIG9yIG1hY3JvcyB3b3VsZCBiZSB0aGUgaGVhZGVyIGZpbGUgaW50ZW5kZWQgZm9yIGludGVybmFsIGBwaHlsaWJgIHVzZS4gR2l2ZW4gdGhhdCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYGRyaXZlcnMvbmV0L3BoeS9waHlsaWItaW50ZXJuYWwuaGAuIFRoYXQncyB3aGVyZSB0aGUgc2VjcmV0cyBzaG91bGQgYmUuIEknbGwgc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0IG51YW5jZXMgb2YgdGhlc2UgaW50ZXJuYWwgY29uY2VwdHMgY2FuIGJlIHJldmVhbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDc4MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA3OjAxLjM0MzgxOTEyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg5Nzc2OTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeWxpYi1pbnRlcm5hbC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlsaWItaW50ZXJuYWwuaD0yNz1pbnQgbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGliLWludGVybmFsLmg6Mjg6aW50IG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBpbnQgZXJyKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGliLWludGVybmFsLmgtMjktaW50IG1kaW9idXNfYmVnaW5fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDc6MDIuNTMzNjAzODk2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDU5ODE0NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludGVybmFsIFBoeWxpYiBDb25zaWRlcmF0aW9ucyoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGVzZSBjb25jZXB0cyBhbmQgdGhleSdyZSBkZWZpbml0ZWx5IGludGVybmFsIHRvIHRoZSBwaHlsaWIgZnJhbWV3b3JrLCB3aGljaCBpcyBhIGtleSBjb25zaWRlcmF0aW9uLiBJJ3ZlIHJlYWxpemVkIHRoZXNlIGFyZW4ndCBuZWNlc3NhcmlseSBzdGF0aWMsIHdoaWNoIGdpdmVzIG1lIGFuIGlkZWEuIFRoaW5raW5nIHRocm91Z2ggdGhpcywgaXQgc2VlbXMgcmVhc29uYWJsZSB0byBpbmNsdWRlIHRoZW0gd2l0aGluIHRoZSBGb2N1c1N5bWJvbHMgc3RydWN0dXJlLiBUaGF0IGFsaWducyB3ZWxsIHdpdGggaG93IHRoaW5ncyBhcmUgb3JnYW5pemVkIGFuZCBtYWtlcyBpbnR1aXRpdmUgc2Vuc2UgZm9yIHRoZSBkeW5hbWljIG5hdHVyZSBvZiB0aGVzZSBlbGVtZW50cy4gVG8gbWFrZSBzdXJlIEknbSBvbiB0aGUgcmlnaHQgdHJhY2ssIGl0IHdvdWxkIGJlIGEgZ29vZCBpZGVhIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGBvZl9tZGlvYnVzX25vdGlmeWAgYW5kIGBvZl9tZGlvYnVzX292ZXJsYXlfbm90aWZ5YCB0byBzZWUgaWYgdGhlcmUncyBhbnkgcGFydGljdWxhciBudWFuY2UgaW4gdGhlaXIgYmVoYXZpb3VyLCBvciB1c2FnZSB0aGF0IGluZmx1ZW5jZXMgaG93IEkgc2hvdWxkIGFwcHJvYWNoIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MjA5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDc6MDYuMzc5NTg5Nzk5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE2NjQ4MzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9mX21kaW9idXNfbm90aWZ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jPTYxNT1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG9mX21kaW9fb3ZlcmxheV9ub3RpZmllciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTYxOS1cXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzo2MjA6c3RhdGljIGludCBvZl9tZGlvYnVzX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbixcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy02MjEtXFx0XFx0XFx0ICAgICB2b2lkICphcmcpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYz02ODQ9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBvZl9tZGlvX25vdGlmaWVyID0ge1xcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjY4NTpcXHQubm90aWZpZXJfY2FsbCA9IG9mX21kaW9idXNfbm90aWZ5LFxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTY4Ni19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNzowNy41OTYyNDk3NjNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzNTg3NjA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNRElPYnVzIEZ1bmN0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBzaWZ0aW5nIHRocm91Z2ggdGhlc2UgTURJT2J1cyBmdW5jdGlvbnMsIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIHJlbGV2YW50LiBJbml0aWFsbHksIEknbSB0aGlua2luZywgXCJTdGF0aWMgZnVuY3Rpb25zPyBGb3JnZXQgJ2VtLlwiIE15IGdvYWwgaXMgdG8gb25seSBsb29rIGF0IHdoYXQncyBleHBvc2VkLCB0aGUgcHVibGljIGludGVyZmFjZSwgaWYgeW91IHdpbGwuIEkgd2FudCB0byBidWlsZCBhIGhpZ2gtbGV2ZWwgdmlldyBvZiBob3cgdGhlIGJ1cyBpcyBtYW5hZ2VkLCBub3QgZ2V0IGJvZ2dlZCBkb3duIGluIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblRoZW4sIHRoZSBzdGF0aWMgbmF0dXJlIG9mIGBvZl9tZGlvYnVzX2FkZF9ub2RlYCBhbmQgYG9mX21kaW9idXNfcmVtb3ZlX25vZGVgIHRocm93cyBtZSBhIGN1cnZlYmFsbCwgYWxvbmcgd2l0aCBgb2ZfbWRpb2J1c19yZWdpc3Rlcl9jaGlsZGAgYW5kIGBvZl9tZGlvYnVzX3NjYW5fcGh5YC4gSSBuZWVkIHRvIGJlIGNhcmVmdWwsIGEgc3RhdGljIGZ1bmN0aW9uIG1pZ2h0IGJlIHZpdGFsLCBhbmQgaWYgSSBuZWdsZWN0IHRvIGluY2x1ZGUgdGhlIGZ1bmN0aW9uIGluIG15IGxpc3QsIGl0IGNvdWxkIGJlIGEgZmF0YWwgZXJyb3IuXG5cbkhvd2V2ZXIsIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgIHN0YW5kcyBvdXQgaW1tZWRpYXRlbHkuIEl0J3MgZXhwb3J0ZWQsIHdoaWNoIG1lYW5zIGl0J3MgZGVzaWduZWQgdG8gYmUgdXNlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBUaGF0J3MgYSBjbGVhciBzaWduYWwgSSBzaG91bGQgbm90ZSB0aGF0LlxuXG5BbHJpZ2h0LCBiZWZvcmUgZ29pbmcgYW55IGRlZXBlciwgbGV0J3MganVzdCBtYWtlIHN1cmUgSSBoYXZlIHRoZSBmdWxsIHBpY3R1cmUuIExldCdzIHNlZSB3aGF0IGBfX21kaW9idXNfcmVnaXN0ZXJgIGhhcyB0byBzYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1Njg5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA3OjExLjczMjEyOTI0N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxNDA5NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZGlvYnVzX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jPTU4MD1zdGF0aWMgdm9pZCBtZGlvYnVzX3JlbW92ZV9kZXZpY2VzKHN0cnVjdCBtaWlfYnVzICpidXMpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy02MDktLyoqXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NjEwOiAqIF9fbWRpb2J1c19yZWdpc3RlciAtIGJyaW5nIHVwIGFsbCB0aGUgUEhZcyBvbiBhIGdpdmVuIGJ1cyBhbmQgYXR0YWNoIHRoZW0gdG8gYnVzXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNjExLSAqIEBidXM6IHRhcmdldCBtaWlfYnVzXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy02MTUtICogICBvbiBhIGdpdmVuIGJ1cywgYW5kIGF0dGFjaCB0aGVtIHRvIHRoZSBidXMuIERyaXZlcnMgc2hvdWxkIHVzZVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjYxNjogKiAgIG1kaW9idXNfcmVnaXN0ZXIoKSByYXRoZXIgdGhhbiBfX21kaW9idXNfcmVnaXN0ZXIoKSB1bmxlc3MgdGhleVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTYxNy0gKiAgIG5lZWQgdG8gcGFzcyBhIHNwZWNpZmljIG93bmVyIG1vZHVsZS4gTURJTyBkZXZpY2VzIHdoaWNoIGFyZSBub3RcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTYyMi0gKi9cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo2MjM6aW50IF9fbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBzdHJ1Y3QgbW9kdWxlICpvd25lcilcXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy02MjQte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNzM3LX1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo3Mzg6RVhQT1JUX1NZTUJPTChfX21kaW9idXNfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTczOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDc6MTEuNzgyMjc3ODQ0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTA5NzAzMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKk1ESU9idXMgUmVnaXN0cmF0aW9uIFx1MDAyNiBEZXJlZ2lzdHJhdGlvbiAtIEEgUXVpY2sgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBgX19tZGlvYnVzX3JlZ2lzdGVyYCBpcyBleHBsaWNpdGx5IGV4cG9ydGVkLiBUaGF0J3MgZ29vZDsgaXQgbWVhbnMgd2UgY2FuIGludGVyYWN0IHdpdGggaXQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLCB3aGljaCBpcyBvZnRlbiBjcnVjaWFsIGZvciBkcml2ZXIgaW50ZWdyYXRpb24gYW5kIGR5bmFtaWMgZGV2aWNlIGRpc2NvdmVyeS4gTm93LCBteSBuZXh0IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB3ZSd2ZSBjb3ZlcmVkIHRoZSBmdWxsIGxpZmVjeWNsZS4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBjb3JyZXNwb25kaW5nIHVucmVnaXN0cmF0aW9uIGZ1bmN0aW9uLiBMZXQncyBkaWcgaW50byBgbWRpb2J1c191bnJlZ2lzdGVyYCBhbmQgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGVyZS4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIG9mIGhvdyB0aGVzZSBidXNlcyBhcmUgbWFuYWdlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY1MzMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNzoxNS4xOTMyNTA3NDNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTE2NzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9idXNfdW5yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYz03Mzg9RVhQT1JUX1NZTUJPTChfX21kaW9idXNfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTczOS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo3NDA6dm9pZCBtZGlvYnVzX3VucmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cylcXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy03NDEte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNzUzLX1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo3NTQ6RVhQT1JUX1NZTUJPTChtZGlvYnVzX3VucmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTc1NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDc6MTUuMjQyMTc0MDFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIyMTc1NjY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2U6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgTURJTyBCdXMgVW5yZWdpc3RyYXRpb24gUHJvY2VzcyoqXG5cbk9rYXksIHNvIGBtZGlvYnVzX3VucmVnaXN0ZXJgIGlzIGV4cG9ydGVkLCB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBleHBlcnRpc2UgbGllcyBpbiBlbWJlZGRlZCBzeXN0ZW1zIGFuZCBkZXZpY2UgZHJpdmVycywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB1bnJlZ2lzdHJhdGlvbi4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgcmVnaXN0cmF0aW9uIGNvdW50ZXJwYXJ0cy4gVG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgSSdsbCBuZWVkIHRvIGFuYWx5emUgYm90aCBgbWRpb19kZXZpY2VfcmVnaXN0ZXJgIGFuZCBgbWRpb19kZXZpY2VfcmVtb3ZlYC4gS25vd2luZyBob3cgZGV2aWNlcyBhcmUgYWRkZWQgYW5kIHJlbW92ZWQgZnJvbSB0aGUgTURJTyBidXMgaXMga2V5IHRvIGdyYXNwaW5nIHRoZSBmdWxsIGxpZmVjeWNsZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIHVucmVnaXN0cmF0aW9uIGZ1bmN0aW9uLiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBBcmUgdGhlcmUgcmFjZSBjb25kaXRpb25zIHRvIHdvcnJ5IGFib3V0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIHRvIGFzc2VzcyB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSB1bnJlZ2lzdGVyIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTI4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDc6MTkuNDYzOTM0MTU4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTE1ODkzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvX2RldmljZV9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0yNy0vKipcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoyODogKiBtZGlvX2RldmljZV9yZWdpc3Rlcl9yZXNldCAtIFJlYWQgYW5kIGluaXRpYWxpemUgdGhlIHJlc2V0IHByb3BlcnRpZXMgb2ZcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0yOS0gKlxcdFxcdFxcdFxcdGFuIG1kaW8gZGV2aWNlXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0zMy0gKi9cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzozNDpzdGF0aWMgaW50IG1kaW9fZGV2aWNlX3JlZ2lzdGVyX3Jlc2V0KHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0zNS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYz0xNTc9RVhQT1JUX1NZTUJPTChtZGlvX2RldmljZV9jcmVhdGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTU5LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jOjE2MDogKiBtZGlvX2RldmljZV9yZWdpc3RlciAtIFJlZ2lzdGVyIHRoZSBtZGlvIGRldmljZSBvbiB0aGUgTURJTyBidXNcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xNjEtICogQG1kaW9kZXY6IG1kaW9fZGV2aWNlIHN0cnVjdHVyZSB0byBiZSBhZGRlZCB0byB0aGUgTURJTyBidXNcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTE2NC0gKi9cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxNjU6aW50IG1kaW9fZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xNjYte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTgwLX1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxODE6RVhQT1JUX1NZTUJPTChtZGlvX2RldmljZV9yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTgyLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jPTE4Mz1zdGF0aWMgaW50IF9fbWRpb19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMjAyLSAqIFRoaXMgZG9lc24ndCBmcmVlIHRoZSBtZGlvX2RldmljZSBpdHNlbGYsIGl0IG1lcmVseSByZXZlcnNlcyB0aGUgZWZmZWN0c1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jOjIwMzogKiBvZiBtZGlvX2RldmljZV9yZWdpc3RlcigpLiBVc2UgbWRpb19kZXZpY2VfZnJlZSgpIHRvIGZyZWUgdGhlIGRldmljZVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTIwNC0gKiBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYz0yMTI9aW50IG1kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTIzOC1cXHRpZiAobWRpb2Rldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNRElPX0RFVklDRV9GTEFHX1BIWSkge1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jOjIzOTpcXHRcXHRlcnIgPSBtZGlvX2RldmljZV9yZWdpc3Rlcl9yZXNldChtZGlvZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0yNDAtXFx0XFx0aWYgKGVycikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNzoxOS41MTMxMDAwMjVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ3MzQ1NDc4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTURJTyBSZWdpc3RyYXRpb24gYW5kIERlcmVnaXN0cmF0aW9uIC0gQSBRdWljayBDaGVjayoqXG5cbk9rYXksIHNvIGBtZGlvX2RldmljZV9yZWdpc3RlcmAgaXMgZXhwb3J0ZWQsIGFzIGV4cGVjdGVkLiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBOb3csIGJlZm9yZSBJIG1vdmUgb24gdG8gYW55IGRlZXBlciBhbmFseXNpcyBvZiB0aGUgTURJTyBpbnRlcmZhY2UsIGxldCBtZSBqdXN0IHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbXBsZW1lbnRhcnkgZnVuY3Rpb24sIGBtZGlvX2RldmljZV9yZW1vdmVgLiBFbnN1cmluZyB0aGVzZSByZWdpc3RyYXRpb24vZGVyZWdpc3RyYXRpb24gZnVuY3Rpb25zIGJlaGF2ZSBhcyBleHBlY3RlZCBpcyBmdW5kYW1lbnRhbCwgYW5kIGl0IHdpbGwgaW5mb3JtIG15IGFwcHJvYWNoIHRvIHRoZSByZXN0IG9mIHRoaXMgcGFydGljdWxhciB0YXNrLiBObyBzdXJwcmlzZXMgdGhlcmUsIGJ1dCBpdCdzIGEgY3JpdGljYWwgcG9pbnQgdG8gcXVpY2tseSB2ZXJpZnkgYmVmb3JlIGRpdmluZyBpbnRvIGFueXRoaW5nIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3ODYzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDc6MjQuOTg2NTU3NDU3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTM1ODM0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvX2RldmljZV9yZW1vdmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM9MTE4PXN0YXRpYyB2b2lkIG1kaW9fZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTIzLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jOjEyNDpzdGF0aWMgaW50IF9fbWRpb19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKTtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xMjUtXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MTI2OnN0YXRpYyBpbnQgbWRpb19kZXZpY2VfcmVtb3ZlX2R5bmFtaWMoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTEyNy17XFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MTI4OlxcdHJldHVybiBfX21kaW9fZGV2aWNlX3JlbW92ZShtZGlvZGV2LCB0cnVlKTtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xMjktfVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM9MTMxPXN0cnVjdCBtZGlvX2RldmljZSAqbWRpb19kZXZpY2VfY3JlYXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTQzLVxcdG1kaW9kZXYtXFx1MDAzZWRldmljZV9mcmVlID0gbWRpb19kZXZpY2VfZnJlZTtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxNDQ6XFx0bWRpb2Rldi1cXHUwMDNlZGV2aWNlX3JlbW92ZSA9IG1kaW9fZGV2aWNlX3JlbW92ZTtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxNDU6XFx0bWRpb2Rldi1cXHUwMDNlZGV2aWNlX3JlbW92ZV9keW5hbWljID0gbWRpb19kZXZpY2VfcmVtb3ZlX2R5bmFtaWM7XFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTQ2LVxcdG1kaW9kZXYtXFx1MDAzZWJ1cyA9IGJ1cztcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jPTE4MT1FWFBPUlRfU1lNQk9MKG1kaW9fZGV2aWNlX3JlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xODItXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MTgzOnN0YXRpYyBpbnQgX19tZGlvX2RldmljZV9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIGR5bmFtaWMpXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTg0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTE5Ny0vKipcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxOTg6ICogbWRpb19kZXZpY2VfcmVtb3ZlIC0gUmVtb3ZlIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIG1kaW8gZGV2aWNlIGZyb20gdGhlXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTk5LSAqXFx0XFx0XFx0TURJTyBidXNcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTIwNS0gKi9cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoyMDY6dm9pZCBtZGlvX2RldmljZV9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTIwNy17XFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MjA4OlxcdF9fbWRpb19kZXZpY2VfcmVtb3ZlKG1kaW9kZXYsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0yMDktfVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jOjIxMDpFWFBPUlRfU1lNQk9MKG1kaW9fZGV2aWNlX3JlbW92ZSk7XFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMjExLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNzoyNS4wMzc5Mzk4NTRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE2ODIwOTQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqTURJTyBEZXZpY2UgUmVtb3ZhbCBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBgbWRpb19kZXZpY2VfcmVtb3ZlYCBpcyBzcGVjaWZpY2FsbHkgZXhwb3J0ZWQsIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMsIEkgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBtYWNoaW5lcnkuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBvZiB0aGUgUEhZIGxheWVyLCBuYXR1cmFsbHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29tcGxlbWVudGFyeSBmdW5jdGlvbnMgZm9yIGRldmljZSByZWdpc3RyYXRpb24gYW5kIHJlbW92YWwgd2l0aGluIHRoZSBQSFkgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBgcGh5X2RldmljZV9yZWdpc3RlcmAgYW5kIGBwaHlfZGV2aWNlX3JlbW92ZWAgY29tZSB0byBtaW5kLiBJJ2xsIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhvc2UgaW50ZXJhY3QgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlIG9mIHdoYXQgdGhpcyBleHBvcnRlZCBgbWRpb19kZXZpY2VfcmVtb3ZlYCBpcyByZWFsbHkgZG9pbmcgaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3MuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIGEgY2xlYW51cCBwcm9jZXNzLCBhbmQgdGhvc2UgdHdvIGZ1bmN0aW9uIGFyZSB0aGUgcGxhY2VzIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODgzNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA3OjI4LjIwNjE1Mzc4N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEwNTkzNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2RldmljZV9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTExNT1FWFBPUlRfU1lNQk9MKGdldF9waHlfZGV2aWNlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTExNy0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMTg6ICogcGh5X2RldmljZV9yZWdpc3RlciAtIFJlZ2lzdGVyIHRoZSBwaHkgZGV2aWNlIG9uIHRoZSBNRElPIGJ1c1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTExOS0gKiBAcGh5ZGV2OiBwaHlfZGV2aWNlIHN0cnVjdHVyZSB0byBiZSBhZGRlZCB0byB0aGUgTURJTyBidXNcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMjAtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTIxOmludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTIyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE0NC19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTQ1OkVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTQ2LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTE0Nz1zdGF0aWMgaW50IF9fcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBkeW5hbWljKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTc1LSAqIFRoaXMgZG9lc24ndCBmcmVlIHRoZSBwaHlfZGV2aWNlIGl0c2VsZiwgaXQgbWVyZWx5IHJldmVyc2VzIHRoZSBlZmZlY3RzXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTc2OiAqIG9mIHBoeV9kZXZpY2VfcmVnaXN0ZXIoKS4gVXNlIHBoeV9kZXZpY2VfZnJlZSgpIHRvIGZyZWUgdGhlIGRldmljZVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE3Ny0gKiBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA3OjI4LjI1NzIxOTU3NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDIzNTY5MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBQSFkgRGV2aWNlIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBgcGh5X2RldmljZV9yZWdpc3RlcmAgaXMgY2xlYXJseSB0aGUgZXhwb3J0ZWQgZnVuY3Rpb24gd2UncmUgdXNpbmcgdG8gYWRkIGEgbmV3IHBoeXNpY2FsIGxheWVyIGRldmljZSB0byB0aGUgc3lzdGVtLiBUaGF0J3Mgb3VyIGVudHJ5IHBvaW50LCB0aGUgY3JpdGljYWwgcGllY2UuIE5vdywgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIGFuZCBlbnN1cmUgcHJvcGVyIGNsZWFudXAsIEkgbmVlZCB0byBjaGVjayBob3cgdGhlc2UgZGV2aWNlcyBhcmUgcmVtb3ZlZC4gVGhlIGNvbXBsZW1lbnRhcnkgZnVuY3Rpb24sIHRoZSBvbmUgdGhhdCBzaG91bGQgdW5kbyB3aGF0IGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCBkb2VzLCBpcyBvYnZpb3VzbHkgYHBoeV9kZXZpY2VfcmVtb3ZlYC4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgZm9yIHRoYXQgb25lLiBOZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVucmVnaXN0cmF0aW9uIHByb2Nlc3MgdG8gZW5zdXJlIHByb3BlciByZXNvdXJjZSBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQ3NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA3OjMxLjI4MDc5MTg2N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5MDg2ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2RldmljZV9yZW1vdmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTIyND1zdGF0aWMgdm9pZCBwaHlfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMjktXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyMzA6c3RhdGljIGludCBfX3BoeV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZHluYW1pYyk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMzEtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yMzI9c3RhdGljIHZvaWQgcGh5X21kaW9fZGV2aWNlX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIzNi1cXHRwaHlkZXYgPSBjb250YWluZXJfb2YobWRpb2Rldiwgc3RydWN0IHBoeV9kZXZpY2UsIG1kaW8pO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjM3OlxcdHBoeV9kZXZpY2VfcmVtb3ZlKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMzgtfVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yNDA9c3RhdGljIGludCBwaHlfbWRpb19kZXZpY2VfcmVtb3ZlX2R5bmFtaWMoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNDQtXFx0cGh5ZGV2ID0gY29udGFpbmVyX29mKG1kaW9kZXYsIHN0cnVjdCBwaHlfZGV2aWNlLCBtZGlvKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI0NTpcXHRyZXR1cm4gX19waHlfZGV2aWNlX3JlbW92ZShwaHlkZXYsIHRydWUpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjQ2LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTE0NT1FWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE0Ni1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExNDc6c3RhdGljIGludCBfX3BoeV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZHluYW1pYylcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNDgte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTcxLS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE3MjogKiBwaHlfZGV2aWNlX3JlbW92ZSAtIFJlbW92ZSBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBwaHkgZGV2aWNlIGZyb20gdGhlIE1ESU8gYnVzXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTczLSAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIHJlbW92ZVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTc4LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE3OTp2b2lkIHBoeV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTgwLXtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExODE6XFx0X19waHlfZGV2aWNlX3JlbW92ZShwaHlkZXYsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExODItfVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE4MzpFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVtb3ZlKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExODQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA3OjMxLjMyNzcwNzU3NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODM4NzIyNDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFBIWSBEZXZpY2UgUmVtb3ZhbCBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBgcGh5X2RldmljZV9yZW1vdmVgIGlzIGV4cG9zZWQsIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy4gVG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIGZ1bmN0aW9uIGltcGFjdHMgdGhlIHN5c3RlbSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciBQSFkgZGV2aWNlIG1hbmFnZW1lbnQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYC4gVGhlc2UgZnVuY3Rpb25zIGxpa2VseSBwbGF5IGEgY3J1Y2lhbCByb2xlIGluIHRoZSBsaWZlY3ljbGUgYW5kIGRlcGVuZGVuY3kgbWFuYWdlbWVudCBhcm91bmQgcmVtb3ZhbCBhbmQgd2lsbCBoZWxwIGluZm9ybSB0aGUgaW1wYWN0IG9mIGEgY2FsbCB0byBgcGh5X2RldmljZV9yZW1vdmVgLiBCeSBleGFtaW5pbmcgdGhlaXIgaW50ZXJhY3Rpb25zLCBJIGNhbiBzdGFydCBmb3JtaW5nIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCByZW1vdmFsIHByb2NlZHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAzOTUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNzozNS4xNjY0MzQyMDZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODI5MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9hdHRhY2hfZGlyZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMjQ0PWludCBwaHlfY29ubmVjdF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTI1Mi1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEyNTM6XFx0cmMgPSBwaHlfYXR0YWNoX2RpcmVjdChkZXYsIHBoeWRldiwgcGh5ZGV2LVxcdTAwM2VkZXZfZmxhZ3MsIGludGVyZmFjZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjU0LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTc3Nz1zdGF0aWMgdm9pZCBwaHlfcmVsZWFzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzg2LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTc4NzogKiBwaHlfYXR0YWNoX2RpcmVjdCAtIGF0dGFjaCBhIG5ldHdvcmsgZGV2aWNlIHRvIGEgZ2l2ZW4gUEhZIGRldmljZSBwb2ludGVyXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzg4LSAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGF0dGFjaFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODAwLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTgwMTppbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4MDItXFx0XFx0ICAgICAgdTMyIGZsYWdzLCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xOTU5LX1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE5NjA6RVhQT1JUX1NZTUJPTChwaHlfYXR0YWNoX2RpcmVjdCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xOTYxLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xOTY2LSAqIFRoaXMgZGV0YWNoZXMgdGhlIHBoeSBkZXZpY2UgZnJvbSBpdHMgbmV0d29yayBkZXZpY2UgYW5kIHRoZSBwaHlcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE5Njc6ICogZHJpdmVyLCBhbmQgZHJvcHMgdGhlIHJlZmVyZW5jZSBjb3VudCB0YWtlbiBpbiBwaHlfYXR0YWNoX2RpcmVjdCgpLlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTk2OC0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDc6MzUuMjEzMjcwMDgzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDQyNDc1MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpcmVjdCBEZXZpY2UgQXR0YWNobWVudCBcdTAwMjYgRGV0YWNobWVudCoqXG5cbk9rYXksIHNvIGBwaHlfYXR0YWNoX2RpcmVjdGAgaXMgZXhwb3J0ZWQsIHRoYXQncyBnb29kIHRvIGtub3cuIEl0IG1lYW5zIGl0J3MgYXZhaWxhYmxlIGZvciBvdGhlciBtb2R1bGVzIG9yIHRoZSBrZXJuZWwgdG8gdXNlLCBsaWtlbHkgZm9yIGRpcmVjdGx5IGNvbm5lY3RpbmcgYSBwaHlzaWNhbCBkZXZpY2UgdG8gYSBzcGVjaWZpYyBkcml2ZXIgb3Igc3Vic3lzdGVtLiBNeSBuZXh0IHRob3VnaHQgaXMsIGxldCdzIG1ha2Ugc3VyZSB3ZSBhbHNvIHVuZGVyc3RhbmQgdGhlIGNvdW50ZXJwYXJ0LCB0aGUgZnVuY3Rpb24gdXNlZCB0byByZXZlcnNlIHRoaXMgcHJvY2VzczogYHBoeV9kZXRhY2hgLiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBhdHRhY2htZW50IGNhbiBiZSBwcm9wZXJseSB1bmRvbmUgd2hlbiBuZWNlc3NhcnksIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBzeXN0ZW0gc3RhYmlsaXR5IGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRldGFjaCBmdW5jdGlvbidzIGJlaGF2aW9yIHRvIHVuZGVyc3RhbmQgdGhlIGVudGlyZSBhdHRhY2gvZGV0YWNoIGxpZmVjeWNsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExMDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNzozOS4wMTc1MjA1NDdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDU3ODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9kZXRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTMxMT1zdGF0aWMgYm9vbCBtZGlvX2J1c19waHlfbWF5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzI3LVxcdCAqIHN1c3BlbmRlZCBhcyBwYXJ0IG9mIGEgcHJpb3IgY2FsbCB0byBwaHlfZGlzY29ubmVjdCgpIC1cXHUwMDNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozMjg6XFx0ICogcGh5X2RldGFjaCgpIC1cXHUwMDNlIHBoeV9zdXNwZW5kKCkgYmVjYXVzZSB0aGUgcGFyZW50IG5ldGRldiBtaWdodCBiZSB0aGVcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMyOS1cXHQgKiBNRElPIGJ1cyBkcml2ZXIgYW5kIGNsb2NrIGdhdGVkIGF0IHRoaXMgcG9pbnQuXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEzMTI9dm9pZCBwaHlfZGlzY29ubmVjdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMzIxLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTMyMjpcXHRwaHlfZGV0YWNoKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMzIzLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTgwMT1pbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTg3NS1cXHQgKiByZWFkeS4gT25jZSB3ZSBkbyB0aGF0IHdlIHN0aWxsIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxODc2OlxcdCAqIGxpbmtzIHdlcmUgc3VjY2Vzc2Z1bGx5IHNldCB1cCBvciBub3QgZm9yIHBoeV9kZXRhY2goKSB0b1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTg3Ny1cXHQgKiByZW1vdmUgdGhlbSBhY2NvcmRpbmdseS5cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTk0My1lcnJvcjpcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE5NDQ6XFx0LyogcGh5X2RldGFjaCgpIGRvZXMgYWxsIG9mIHRoZSBjbGVhbnVwIGJlbG93ICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxOTQ1OlxcdHBoeV9kZXRhY2gocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE5NDYtXFx0cmV0dXJuIGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTk2MD1FWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hfZGlyZWN0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTk2Mi0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE5NjM6ICogcGh5X2RldGFjaCAtIGRldGFjaCBhIFBIWSBkZXZpY2UgZnJvbSBpdHMgbmV0d29yayBkZXZpY2VcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE5NjQtICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE5NjgtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxOTY5OnZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTk3MC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIwNDAtfVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjA0MTpFWFBPUlRfU1lNQk9MKHBoeV9kZXRhY2gpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjA0Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDc6MzkuMDYzOTg1NDI0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczNzE1ODg5MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXMgU3ltYm9sIFJlZmluZW1lbnQqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgcGh5X2RldGFjaGAgaXMgZXhwb3J0ZWQsIHRoYXQncyBnb29kLiBUaW1lIHRvIHNvbGlkaWZ5IHRoZSBsaXN0IG9mIEZvY3VzU3ltYm9scy4gQmFzZWQgb24gdGhhdCBmYWN0LCBhbmQgd2hhdCBJIGtub3cgYWJvdXQgdGhlIHBoeWxpYiwgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBpbW1lZGlhdGVseSBjb21lIHRvIG1pbmQ6XG5cbiogICBgX19tZGlvYnVzX3JlZ2lzdGVyYFxuKiAgIGBtZGlvYnVzX3VucmVnaXN0ZXJgXG4qICAgYG1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbmBcbiogICBgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2VuZGBcbiogICBgbWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZWBcbiogICBgbWRpb2J1c19iZWdpbl9yZW1vdmVgXG4qICAgYG1kaW9idXNfZmluaXNoX3JlbW92ZWBcbiogICBgbWRpb19kZXZpY2VfcmVnaXN0ZXJgXG4qICAgYG1kaW9fZGV2aWNlX3JlbW92ZWBcbiogICBgcGh5X2RldmljZV9yZWdpc3RlcmBcbiogICBgcGh5X2RldmljZV9yZW1vdmVgXG4qICAgYHBoeV9hdHRhY2hfZGlyZWN0YFxuKiAgIGBwaHlfZGV0YWNoYFxuXG5IYW5nIG9uIGEgc2Vjb25kLi4uIGNoZWNraW5nIHRob3NlIGludGVybmFsIHBoeWxpYiBmdW5jdGlvbnMsIG5hbWVseSBgbWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZWAsIGBtZGlvYnVzX2JlZ2luX3JlbW92ZWAsIGFuZCBgbWRpb2J1c19maW5pc2hfcmVtb3ZlYCwgSSBzZWUgdGhleSAqYXJlbid0KiBzdGF0aWMuIFRoYXQgbWVhbnMgdGhleSdyZSBub3QgZnVsbHkgaW50ZXJuYWwgYW5kIGNhbiBzdGlsbCBiZSBpbmNsdWRlZC4gT2theSwgbWFrZXMgc2Vuc2UuXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBgb2ZfbWRpb2AgY29kZSwgc3BlY2lmaWNhbGx5IGBvZl9tZGlvYnVzX3JlZ2lzdGVyX2NoaWxkYCBhbmQgYG9mX21kaW9idXNfc2Nhbl9waHlgLiBUaGVzZSBhcmUgbWFya2VkIHN0YXRpYywgYnV0IHRoZXkncmUgY2FsbGVkIGZyb20gYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAuIEluY2x1ZGluZyBgX19vZl9tZGlvYnVzX3JlZ2lzdGVyYCBzaG91bGQgY292ZXIgdGhhdCBqdXN0IGZpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMDM0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA3OjQ2LjQzNTU3NzY3N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3ODgzMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19vZl9tZGlvYnVzX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jPTIzMz1zdGF0aWMgaW50IF9fb2ZfbWRpb2J1c19wYXJzZV9waHlzKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMjc3LS8qKlxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjI3ODogKiBfX29mX21kaW9idXNfcmVnaXN0ZXIgLSBSZWdpc3RlciBtaWlfYnVzIGFuZCBjcmVhdGUgUEhZcyBmcm9tIHRoZSBkZXZpY2UgdHJlZVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTI3OS0gKiBAbWRpbzogcG9pbnRlciB0byBtaWlfYnVzIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMjg1LSAqL1xcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjI4NjppbnQgX19vZl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTI4Ny1cXHRcXHRcXHQgIHN0cnVjdCBtb2R1bGUgKm93bmVyKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMzU4LX1cXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzozNTk6RVhQT1JUX1NZTUJPTChfX29mX21kaW9idXNfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTM2MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDc6NDYuNDgxMzcwODM0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNzU5NTMzNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTURJTyBCdXMgUmVnaXN0cmF0aW9uIGFuZCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBfX29mX21kaW9idXNfcmVnaXN0ZXJgIGlzIGluZGVlZCBleHBvcnRlZC4gVGhhdCdzIGdvb2Q7IGl0J3MgdGhlIGVudHJ5IHBvaW50IEkgbmVlZC4gTm93LCBsZXQncyBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW52b2x2ZWQgaW4gdGhpcyBhcmVhLCBqdXN0IHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEknbSBzZWVpbmcgYE9GX0RZTkFNSUNgLCBgT0ZfT1ZFUkxBWWAsIGBPRl9NRElPYCwgYFBIWUxJQmAsIGFuZCBgTURJT19ERVZJQ0VgIGFzIHJlbGV2YW50IGNvbmZpZ3MuXG5cblJpZ2h0LCB0aW1lIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYE9GX01ESU9gIHJlbGllcyBvbiBgT0ZgLiBBbmQgeWVzLCB0aGF0J3Mgd2hhdCBJIHRob3VnaHQ7IGl0J3MgZGVwZW5kZW50LiBOZXh0LCBJIHNob3VsZCBjaGVjayBgT0ZfRFlOQU1JQ2AsIGp1c3QgdG8gYmUgY2VydGFpbi4gWWVzLCBgT0ZfRFlOQU1JQ2AgYWxzbyBkZXBlbmRzIG9uIGBPRmAuIEZpbmFsbHkgYE9GX09WRVJMQVlgLCB3aGljaCBhbHNvIHJlcXVpcmVzIGBPRmAuIEV4Y2VsbGVudCwgdGhvc2UgYXJlIGFsbCBhcyBleHBlY3RlZC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYE9GX01ESU9gLCBJJ2xsIGdvIGhhdmUgYSBsb29rIGluIGBkcml2ZXJzL25ldC9tZGlvL0tjb25maWdgLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzAzMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNzo1MC42NTczMjY3MDVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDEzOTk3MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9GX01ESU9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz05PWNvbmZpZyBGV05PREVfTURJT1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEzLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxNDpjb25maWcgT0ZfTURJT1xcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNS1cXHRkZWZfdHJpc3RhdGUgT0ZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDc6NTEuOTU4NzM5NTM0WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMTU0MTE2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhpbmtpbmcgb24gRGV2aWNlIFRyZWUgYW5kIFBIWUxJQiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYE9GX01ESU9gIGlzIGEgdHJpc3RhdGUgb3B0aW9uIGFuZCBpcyBpbnRyaW5zaWNhbGx5IGxpbmtlZCB0byB0aGUgYnJvYWRlciBEZXZpY2UgVHJlZSAoYE9GYCkgY29uZmlndXJhdGlvbi4gU2luY2UgaXQncyBhdXRvbWF0aWNhbGx5IHB1bGxlZCBpbiB3aGVuIGBPRmAgaXMgZW5hYmxlZCwgSSBkb24ndCBuZWVkIHRvIGV4cGxpY2l0bHkgZGVmaW5lIGl0LiBNeSBmb2N1cywgdGhlbiwgc2hvdWxkIGJlIG9uIHRoZSBjb3JlIERldmljZSBUcmVlIGNvbmZpZ3VyYXRpb25zOiBgT0ZgLCBgT0ZfRFlOQU1JQ2AsIGBPRl9PVkVSTEFZYCwgYFBIWUxJQmAsIGFuZCBgTURJT19ERVZJQ0VgLlxuXG5BY3R1YWxseSwgd2FpdCBhIG1pbnV0ZS4uLiBUaGlua2luZyBhYm91dCBpdCwgYE9GX0RZTkFNSUNgIGFuZCBgT0ZfT1ZFUkxBWWAgYXJlIGVzc2VudGlhbGx5IHN1cGVyc2V0cyB0aGF0IGFscmVhZHkgKmltcGx5KiB0aGF0IGBPRmAgaXMgZW5hYmxlZC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4gSXQgbG9va3MgbGlrZSBJIGp1c3QgbmVlZCB0byBiZSBtaW5kZnVsIG9mIGBQSFlMSUJgIGFuZCBlbnN1cmUgdGhhdCdzIGNvcnJlY3RseSBjb25maWd1cmVkIGJhc2VkIG9uIHRoZSB0YXJnZXQgc3lzdGVtLiBMZXQgbWUgZG91YmxlLWNoZWNrIGhvdyB0aGF0J3MgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM1MzQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNzo1Ny4yNzQxNTUzNzRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTkxMTEyNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBIWUxJQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZz02PWNvbmZpZyBQSFlMSU5LXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNC1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoxNTptZW51Y29uZmlnIFBIWUxJQlxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTE2LVxcdHRyaXN0YXRlIFxcXCJQSFkgRGV2aWNlIHN1cHBvcnQgYW5kIGluZnJhc3RydWN0dXJlXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc9NDY9Y29uZmlnIE9QRU5fQUxMSUFOQ0VfSEVMUEVSU1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDgtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NDk6Y29uZmlnIFBIWUxJQl9MRURTXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNTAtXFx0ZGVmX2Jvb2wgT0ZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDc6NTguNDMzMjczNzAzWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNjQxODEwOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgUEhZTElCIGFuZCBNRElPX0RFVklDRSoqXG5cbk9rYXksIHNvIHdlJ3JlIHRhbGtpbmcgYFBIWUxJQmAgaGVyZSwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBhIG1lbnVjb25maWcgb3B0aW9uLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGRpZ2dpbmcgaW50byB0aGUgaW50cmljYWNpZXMgb2YgaGFyZHdhcmUgYWJzdHJhY3Rpb24gYW5kIGRyaXZlciBzZWxlY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBzcGVjaWZpY2FsbHkgY29udHJvbHMuXG5cbkxldCdzIGRpdmUgZGVlcGVyIGFuZCB2ZXJpZnkgd2hhdCBwcmVjaXNlbHkgdGhlIGBNRElPX0RFVklDRWAgaXMgZG9pbmcgd2l0aGluIHRoaXMgZnJhbWV3b3JrLiBUaGlzIGNvdWxkIGludm9sdmUgZGlyZWN0IGFjY2VzcywgaW5kaXJlY3QgY29uZmlndXJhdGlvbiwgb3Igc29tZSBzb3J0IG9mIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZSBgTURJT19ERVZJQ0VgIGlzIGEgbmVjZXNzYXJ5IG9yIG9wdGlvbmFsIHNlbGVjdGlvbiB1bmRlciB0aGUgUEhZTElCIHVtYnJlbGxhLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDAwMSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA4OjAzLjQ5NzQ1ODE4OVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5NzQ5NDcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRElPX0RFVklDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDg6MDMuNTQ1NDQxMDI2WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NTAxMjI3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlBpbnBvaW50aW5nIHRoZSBEZWZpbml0aW9uIG9mIE1ESU9fREVWSUNFKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYE1ESU9fREVWSUNFYCBpcyBjb21pbmcgZnJvbS4gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29kZSdzIGJlaGF2aW9yIGhlcmUuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGl0cyBkZWZpbml0aW9uLCBiZWNhdXNlIHdpdGhvdXQgdGhhdCwgSSdtIGVzc2VudGlhbGx5IGZseWluZyBibGluZC4gS25vd2luZyB0aGUgY29udGV4dCBvZiB0aGlzIG1hY3JvIGlzICpjcml0aWNhbCouIEknbSBpbW1lZGlhdGVseSB0aGlua2luZzogd2hlcmUgaXMgaXQgZGVmaW5lZD8gSXMgaXQgaW4gYSBoZWFkZXIgZmlsZT8gQSBjb25maWd1cmF0aW9uIGZpbGU/IEEgcGxhdGZvcm0tc3BlY2lmaWMgaW5jbHVkZT8gVGltZSB0byBnbyBodW50aW5nLiBMZXQncyBzdGFydCB0aGUgc2VhcmNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDIxNCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA4OjA4LjI5NTU2Njc3MVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MTI1MTAyNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1ESU9fREVWSUNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDg6MDkuOTU2ODI1MDE3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MjIzMjQ2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBNRElPIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIGBNRElPX0RFVklDRWDigKYgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQganVtcHMgdG8gdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UuIFNwZWNpZmljYWxseSwgdGhhdCBoYXMgdG8gYmUgZGVmaW5lZCBpbiBgZHJpdmVycy9uZXQvbWRpby9LY29uZmlnYCwgZG9lc24ndCBpdD8gSXQncyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlLCBjb25zaWRlcmluZyB0aGUgY29udGV4dC4gVGhhdCdzIHdoZXJlIHlvdSdkIGV4cGVjdCB0byBmaW5kIHRoZSBkZXBlbmRlbmNpZXMsIGFueSBkZWZhdWx0IHNldHRpbmdzLCBoZWxwIHRleHQsIGFuZCBhbGwgdGhlIHVzdWFsIEtjb25maWcgZ29vZG5lc3MgYXNzb2NpYXRlZCB3aXRoIGEgaGFyZHdhcmUgZmVhdHVyZSBsaWtlIHRoaXMuIEkgYmV0IGl0IGlzIGRlZmluZWQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MzkyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDg6MTQuNDc5MTUyNjI3WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzI0OTI4NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1ESU9fREVWSUNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDg6MTQuNTI2NDEyMDc0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwNjE2NjM5MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBQSFkgQ29uZmlndXJhdGlvbiBTcGFjZSoqXG5cbk9rYXksIHNvIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgYE1ESU9fREVWSUNFYCB3YXMgZGVmaW5lZCB3aXRoaW4gdGhlIG5ldHdvcmsgUEhZIEtjb25maWcgZmlsZS4gVGhhdCdzIGEgY29tbW9uIGFyZWEgZm9yIHN1Y2ggc2V0dGluZ3MsIGJ1dCBzb21ldGhpbmcgZmVlbHMgb2ZmLiBMZXQncyBub3QgbWFrZSBhc3N1bXB0aW9ucy4gVGltZSB0byB2ZXJpZnkuIFRoZSBsb2dpY2FsIG5leHQgcGxhY2UgdG8gY2hlY2sgd291bGQgYmUgdGhlIGBkcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhhdCBJJ3ZlIGp1bXBlZCB0byBhIGNvbmNsdXNpb24gd2l0aG91dCB2ZXJpZnlpbmcgYSBrZXkgcGFydCBvZiB0aGUgY29uZmlndXJhdGlvbiB0cmVlLiBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGlzIGlzIGFjdHVhbGx5IGRlZmluZWQgYmVmb3JlIHByb2NlZWRpbmcuIFRoaXMgaXMgYmFzaWMsIGJ1dCBpbXBvcnRhbnQsIGdvb2QgcHJhY3RpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NjA4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDg6MjIuNTg4MDc4OTk0WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjgyMDE2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvX2RldmljZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTQ9bGlicGh5LXlcXHRcXHRcXHQ6PSBwaHkubyBwaHktYzQ1Lm8gcGh5LWNvcmUubyBwaHlfZGV2aWNlLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTYtXFx0XFx0XFx0XFx0ICAgcGh5X2NhcHMubyBtZGlvX2J1c19wcm92aWRlci5vIHBoeV9wb3J0Lm8gXFxcXFxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo3OlxcdFxcdFxcdFxcdCAgIG1kaW9fZGV2aWNlLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDg6MjIuNjM0OTAzOTExWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMDE0Njc2Njk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVuZGVyc3RhbmRpbmcgdGhlIFBIWS9NRElPIENvcmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbWRpb19kZXZpY2Uub2AgaGVyZS4gUmlnaHQsIHRoYXQncyBkZWZpbml0ZWx5IHBhcnQgb2YgYGxpYnBoeS15YCwgd2hpY2gsIG9mIGNvdXJzZSwgaXMgYnVpbHQgd2hlbiBgQ09ORklHX1BIWUxJQmAgaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBzZW5zZSwgY29ubmVjdHMgdGhlIGRvdHMuIEkgcmVtZW1iZXIgdGhpcyBub3cuIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogdGhlIFBIWS9NRElPIGNvcmUgZnVuY3Rpb25hbGl0eSBoaW5nZXMgb24ganVzdCBgQ09ORklHX1BIWUxJQmAuIFRoYXQncyB0aGUga2V5LiBOb3csIGp1c3QgdG8gY29uZmlybSwgSSdsbCBnbyBjaGVjayBob3cgYE9GX01ESU9gIGlzIHNldCB1cCBpbiBgZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZWAuIE5lZWQgdG8gYmUgc3VyZSBhbGwgdGhlIHBpZWNlcyBhcmUgYWNjb3VudGVkIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ5MjgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowODo1Mi42NDk1ODM4NDlaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzA3NDQ3NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2ZfbWRpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU9NT1vYmotJChDT05GSUdfRldOT0RFX01ESU8pXFx0Kz0gZndub2RlX21kaW8ub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6NjpvYmotJChDT05GSUdfT0ZfTURJTylcXHRcXHQrPSBvZl9tZGlvLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlLTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA4OjUzLjkyMDMzNjM3WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MTE5MTc5Mjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE1ESU8gQ29uZmlndXJhdGlvbiBhbmQgS2V5IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgTURJTyBjb25maWd1cmF0aW9uLCBhbmQgYENPTkZJR19PRl9NRElPYCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZS4gSXQncyBhIGBkZWZfdHJpc3RhdGUgT0ZgLCB3aGljaCBtZWFucyBpZiB0aGUgZGV2aWNlIHRyZWUgc3VwcG9ydCAoYE9GYCkgaXMgZW5hYmxlZCwgdGhlbiBgQ09ORklHX09GX01ESU9gIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gVGhhdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEknbGwgZGVmaW5pdGVseSB3YW50IHRvIGluY2x1ZGUgYE9GYCwgYE9GX0RZTkFNSUNgLCBhbmQgYE9GX09WRVJMQVlgLCBzaW5jZSB0aGV54oCZcmUgY29yZSB0byB0aGlzIGZ1bmN0aW9uYWxpdHkuIE9oLCBhbmQgSSBjYW4ndCBmb3JnZXQgYFBIWUxJQmAgZWl0aGVyLiBJdCdzIGludHJpbnNpY2FsbHkgbGlua2VkIHRvIFBIWSBtYW5hZ2VtZW50LCB3aGljaCBNRElPIGNvbnRyb2xzLlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gaW50byB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLiBJJ20gZm9jdXNpbmcgb24gdGhlIG9uZXMgdGhhdCByZXByZXNlbnQgdGhlIGNvcmUgb3BlcmF0aW9uczpcbiogICBgX19tZGlvYnVzX3JlZ2lzdGVyYCBhbmQgYG1kaW9idXNfdW5yZWdpc3RlcmA6IFRoZXNlIGFyZSB0aGUgb2J2aW91cyByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIGZ1bmN0aW9ucyBmb3IgdGhlIE1ESU8gYnVzIGl0c2VsZi5cbiogICBgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luYCwgYG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmRgOiBTb3VuZHMgbGlrZSB0aGVzZSBoYW5kbGUgY2hhbmdlcyB0byBkZXZpY2VzIG9uIHRoZSBidXMuXG4qICAgYG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmVgOiBOZWNlc3NhcnkgZm9yIGNvbXBsZXRpbmcgdGhlIHJlZ2lzdHJhdGlvbi5cbiogICBgbWRpb2J1c19iZWdpbl9yZW1vdmVgLCBgbWRpb2J1c19maW5pc2hfcmVtb3ZlYDogVGhlc2UgbG9vayBsaWtlIHRoZSByZW1vdmFsIGNvdW50ZXJwYXJ0cy5cbiogICBgbWRpb19kZXZpY2VfcmVnaXN0ZXJgIGFuZCBgbWRpb19kZXZpY2VfcmVtb3ZlYDogVGhlc2Ugd291bGQgcmVnaXN0ZXIgYW5kIHJlbW92ZSBpbmRpdmlkdWFsIE1ESU8gZGV2aWNlcywgcHJlc3VtYWJseSBQSFlzLlxuKiAgIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCwgYHBoeV9kZXZpY2VfcmVtb3ZlYDogSW1wb3J0YW50IGZvciBhdHRhY2hpbmcgYW5kIGRldGFjaGluZyBQSFlzIHRvIHRoZSBidXMuXG4qICAgYHBoeV9hdHRhY2hfZGlyZWN0YCwgYHBoeV9kZXRhY2hgOiBUaGVzZSBkaXJlY3RseSBhdHRhY2ggb3IgZGV0YWNoIGEgUEhZLlxuKiAgIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgOiBJbmRpY2F0ZXMgYSBkZXZpY2UgdHJlZSByZWdpc3RyYXRpb24uXG5cbkkgdGhpbmsgSSBoYXZlIGEgc29saWQgb3ZlcnZpZXcgb2YgdGhlIHJlZ2lzdHJhdGlvbiBhbmQgcmVtb3ZhbCBwcm9jZXNzZXMuIEl0J3MgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCB0aGUgZGV2aWNlIHRyZWUgaW50ZWdyYXRpb24gYXMgd2VsbCwgYmFzZWQgb24gdGhlIGZ1bmN0aW9uIG5hbWVzLlxuXG5IbW0sIGFtIEkgbWlzc2luZyBhbnkgb2J2aW91cyBvbmVzPyBBaCB5ZXMsIGBtZGlvYnVzX3NjYW5fYzIyYCBhbmQgYG1kaW9idXNfc2Nhbl9jNDVgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgZGlzY292ZXJpbmcgZGV2aWNlcyBvbiB0aGUgYnVzLiBUaGV5J3JlIGNyaXRpY2FsIGZvciBhY3R1YWxseSBwb3B1bGF0aW5nIHRoZSBNRElPIGJ1cyB3aXRoIGF0dGFjaGVkIGRldmljZXMuIEknbGwgbmVlZCB0byBrZWVwIHRob3NlIGluIG1pbmQgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUyNjIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDk6MDguMDM5NTE5MjQ0WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTU2MDE0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvYnVzX3NjYW5fYzIyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jPTQxNj1zdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKl9fbWRpb2J1c19zY2FuKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDY5LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjQ3MDogKiBtZGlvYnVzX3NjYW5fYzIyIC0gc2NhbiBvbmUgYWRkcmVzcyBvbiBhIGJ1cyBmb3IgQzIyIE1ESU8gZGV2aWNlcy5cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00NzEtICogQGJ1czogbWlpX2J1cyB0byBzY2FuXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00ODAtICovXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NDgxOnN0cnVjdCBwaHlfZGV2aWNlICptZGlvYnVzX3NjYW5fYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyKVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ4Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00OTQtfVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjQ5NTpFWFBPUlRfU1lNQk9MKG1kaW9idXNfc2Nhbl9jMjIpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ5Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDk6MDguMDkxMDg1NzIxWiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDkyNTc0NjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKktlcm5lbCBNRElPIEJ1cyBTY2FubmluZzogQSBRdWljayBNZW50YWwgQ2hlY2sqKlxuXG5SaWdodCwgbGV0IG1lIHNlZS4uLiBJJ20gY3VycmVudGx5IGxvb2tpbmcgYXQgdGhlIE1ESU8gYnVzIGNvZGUuIEkga25vdyBgbWRpb2J1c19zY2FuX2MyMmAgaXMgZGVmaW5pdGVseSBleHBvcnRlZCwgdGhhdCdzIGNsZWFyLiBOb3cgSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIGlmIHdlJ3JlIGFsc28gbWFraW5nIGBtZGlvYnVzX3NjYW5fYzQ1YCBhdmFpbGFibGUgb3V0c2lkZSBvZiB0aGUgZHJpdmVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteXNlbGYgb24gdGhlIHZpc2liaWxpdHkgYW5kIHBvc3NpYmxlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIEM0NSBzdXBwb3J0IGluIHRoaXMgcGFydGljdWxhciBjb250ZXh0LiBJdCdzIGltcG9ydGFudCB0byBjb25maXJtIHdoZXRoZXIgdXNlcnNwYWNlIG9yIG90aGVyIGtlcm5lbCBtb2R1bGVzIGNhbiBkaXJlY3RseSBjYWxsIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjM3MSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA5OjE5LjE4MzY2NDA2NFoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5MTY5NzgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvYnVzX3NjYW5fYzQ1XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jPTQ5NT1FWFBPUlRfU1lNQk9MKG1kaW9idXNfc2Nhbl9jMjIpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDk3LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjQ5ODogKiBtZGlvYnVzX3NjYW5fYzQ1IC0gc2NhbiBvbmUgYWRkcmVzcyBvbiBhIGJ1cyBmb3IgQzQ1IE1ESU8gZGV2aWNlcy5cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00OTktICogQGJ1czogbWlpX2J1cyB0byBzY2FuXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy01MDgtICovXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NTA5OnN0YXRpYyBzdHJ1Y3QgcGh5X2RldmljZSAqbWRpb2J1c19zY2FuX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy01MTAte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM9NTMwPXN0YXRpYyBpbnQgbWRpb2J1c19zY2FuX2J1c19jNDUoc3RydWN0IG1paV9idXMgKmJ1cylcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTU0MS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo1NDI6XFx0XFx0XFx0cGh5ZGV2ID0gbWRpb2J1c19zY2FuX2M0NShidXMsIGkpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTU0My1cXHRcXHRcXHRpZiAoSVNfRVJSKHBoeWRldikgXFx1MDAyNlxcdTAwMjYgKFBUUl9FUlIocGh5ZGV2KSAhPSAtRU5PREVWKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDk6MjAuNDc1MzY3MDMzWiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4Njk4MTg5MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBQbGFuIGZvciBEeW5hbWljIE1ESU8gRGV2aWNlIEhhbmRsaW5nKipcblxuT2theSwgaGVyZSdzIHdoYXQncyBydW5uaW5nIHRocm91Z2ggbXkgaGVhZC4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgY29kZSdzIHN0YXRpYy4gTGV0J3Mgc2VlLi4uIHRoZSBhdXRob3IncyBpbmNsdWRpbmcgYG1kaW9idXNfc2Nhbl9jMjJgIOKAkyBnb29kLCB0aGF0J3MgZGVmaW5pdGVseSByZWxldmFudC5cblxuTGV0IG1lIGJyZWFrIGRvd24gdGhlIHJlYXNvbmluZyBmb3IgdGhpcy4gVGhlIHBhdGNoIG1vZGlmaWVzIGNyaXRpY2FsIE1ESU8gYnVzIGFuZCBQSFkgZGV2aWNlIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24gbG9naWMuIEl0J3MgZGVzaWduZWQgdG8gaGFuZGxlIGR5bmFtaWMgRGV2aWNlIFRyZWUgY2hhbmdlcywgc3BlY2lmaWNhbGx5IGJvdGggT0YgZHluYW1pYyAqYW5kKiBvdmVybGF5IGNvbmZpZ3VyYXRpb25zLiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFRoZSBhdXRob3IncyBpbnRyb2R1Y2VkIGEgbG9ja2luZyBtZWNoYW5pc20sIGBtZGlvX21hcF9sb2NrYCwgdG8gc2VyaWFsaXplIHRoZXNlIGRldmljZSBjaGFuZ2VzLiBUaGlzIGlzICpjcml0aWNhbCogaW4gcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIFBIWSBhdHRhY2htZW50IGFuZCBkZXRhY2htZW50LiBPbiB0b3Agb2YgdGhhdCwgdGhlcmUncyBhIHJlZmFjdG9yaW5nIG9mIHRoZSBQSFkgYW5kIE1ESU8gZGV2aWNlIHNjYW5uaW5nIGFuZCByZWdpc3RyYXRpb24gcHJvY2Vzc2VzLlxuXG5UaGlzIGlzIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gY29kZSBhbmQgaXQncyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwsIHNvIGl0IG5lZWRzIHRvIGJlIGNhcmVmdWxseSBpbnZlc3RpZ2F0ZWQuIE15IGNvbmNlcm4gaXMgdGhlIG5ldyBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gbG9naWMuIFRoaXMgaXMgd2hlcmUgZGVhZGxvY2tzIGFuZCByYWNlIGNvbmRpdGlvbnMgYXJlIGxpa2VseSB0byBzaG93IHVwLiBUaGF0J3MgKmV4YWN0bHkqIHdoYXQgZnV6emluZyBpcyBnb29kIGZvci5cblxuTm93LCBmb3IgdGhlIGNvbmZpZ3VyYXRpb25zOiBgT0ZgLCBgT0ZfRFlOQU1JQ2AsIGBPRl9PVkVSTEFZYCwgYW5kIGBQSFlMSUJgLiBUaG9zZSBhcmUgYWxsIGVzc2VudGlhbCBmb3IgdHJpZ2dlcmluZyB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy5cblxuSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHMgdG8gdGFyZ2V0IHRoZSBmdXp6aW5nOiBgX19tZGlvYnVzX3JlZ2lzdGVyYCwgYG1kaW9idXNfdW5yZWdpc3RlcmAsIGBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW5gLCBgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2VuZGAsIGBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lYCwgYG1kaW9idXNfYmVnaW5fcmVtb3ZlYCwgYG1kaW9idXNfZmluaXNoX3JlbW92ZWAsIGBtZGlvX2RldmljZV9yZWdpc3RlcmAsIGBtZGlvX2RldmljZV9yZW1vdmVgLCBgcGh5X2RldmljZV9yZWdpc3RlcmAsIGBwaHlfZGV2aWNlX3JlbW92ZWAsIGBwaHlfYXR0YWNoX2RpcmVjdGAsIGBwaHlfZGV0YWNoYCwgYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAsIGFuZCBgbWRpb2J1c19zY2FuX2MyMmAuXG5cblllYWgsIHRoaXMgbG9va3Mgc29saWQuIEl0J3MgZ290IHRoZSByaWdodCBjb25maWd1cmF0aW9ucywgdGhlIHJpZ2h0IGZvY3VzLCBhbmQgYSBjbGVhciByZWFzb24gdG8gcG9rZSBhdCBpdC4gVGltZSB0byBidWlsZCBhIGZ1enogaGFybmVzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY5NzUsIk91dHB1dFRva2VucyI6Mjk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA5OjI5LjM0NTE5MDUyNFoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMjkwOTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPRlwiLFxuICAgIFwiT0ZfRFlOQU1JQ1wiLFxuICAgIFwiT0ZfT1ZFUkxBWVwiLFxuICAgIFwiUEhZTElCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19tZGlvYnVzX3JlZ2lzdGVyXCIsXG4gICAgXCJtZGlvYnVzX3VucmVnaXN0ZXJcIixcbiAgICBcIm1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpblwiLFxuICAgIFwibWRpb2J1c19kZXZpY2VfY2hhbmdlX2VuZFwiLFxuICAgIFwibWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZVwiLFxuICAgIFwibWRpb2J1c19iZWdpbl9yZW1vdmVcIixcbiAgICBcIm1kaW9idXNfZmluaXNoX3JlbW92ZVwiLFxuICAgIFwibWRpb19kZXZpY2VfcmVnaXN0ZXJcIixcbiAgICBcIm1kaW9fZGV2aWNlX3JlbW92ZVwiLFxuICAgIFwicGh5X2RldmljZV9yZWdpc3RlclwiLFxuICAgIFwicGh5X2RldmljZV9yZW1vdmVcIixcbiAgICBcInBoeV9hdHRhY2hfZGlyZWN0XCIsXG4gICAgXCJwaHlfZGV0YWNoXCIsXG4gICAgXCJfX29mX21kaW9idXNfcmVnaXN0ZXJcIixcbiAgICBcIm1kaW9idXNfc2Nhbl9jMjJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTURJTyBidXMgYW5kIFBIWSBkZXZpY2UgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIGxvZ2ljIHRvIHN1cHBvcnQgZHluYW1pYyBkZXZpY2UgdHJlZSBjaGFuZ2VzIChPRiBkeW5hbWljIGFuZCBvdmVybGF5KS4gSXQgaW50cm9kdWNlcyBhIGxvY2tpbmcgbWVjaGFuaXNtIChgbWRpb19tYXBfbG9ja2ApIHRvIHNlcmlhbGl6ZSBkZXZpY2UgY2hhbmdlcyBhbmQgcHJldmVudCByYWNlcyBkdXJpbmcgUEhZIGF0dGFjaG1lbnQgYW5kIGRldGFjaG1lbnQuIEl0IGFsc28gcmVmYWN0b3JzIHRoZSBzY2FubmluZyBhbmQgcmVnaXN0cmF0aW9uIG9mIFBIWXMgYW5kIE1ESU8gZGV2aWNlcy4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGxvZ2ljIGRvZXMgbm90IGludHJvZHVjZSBkZWFkbG9ja3Mgb3IgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9GXCIsXG4gICAgXCJPRl9EWU5BTUlDXCIsXG4gICAgXCJPRl9PVkVSTEFZXCIsXG4gICAgXCJQSFlMSUJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX21kaW9idXNfcmVnaXN0ZXJcIixcbiAgICBcIm1kaW9idXNfdW5yZWdpc3RlclwiLFxuICAgIFwibWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luXCIsXG4gICAgXCJtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kXCIsXG4gICAgXCJtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lXCIsXG4gICAgXCJtZGlvYnVzX2JlZ2luX3JlbW92ZVwiLFxuICAgIFwibWRpb2J1c19maW5pc2hfcmVtb3ZlXCIsXG4gICAgXCJtZGlvX2RldmljZV9yZWdpc3RlclwiLFxuICAgIFwibWRpb19kZXZpY2VfcmVtb3ZlXCIsXG4gICAgXCJwaHlfZGV2aWNlX3JlZ2lzdGVyXCIsXG4gICAgXCJwaHlfZGV2aWNlX3JlbW92ZVwiLFxuICAgIFwicGh5X2F0dGFjaF9kaXJlY3RcIixcbiAgICBcInBoeV9kZXRhY2hcIixcbiAgICBcIl9fb2ZfbWRpb2J1c19yZWdpc3RlclwiLFxuICAgIFwibWRpb2J1c19zY2FuX2MyMlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNRElPIGJ1cyBhbmQgUEhZIGRldmljZSByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24gbG9naWMgdG8gc3VwcG9ydCBkeW5hbWljIGRldmljZSB0cmVlIGNoYW5nZXMgKE9GIGR5bmFtaWMgYW5kIG92ZXJsYXkpLiBJdCBpbnRyb2R1Y2VzIGEgbG9ja2luZyBtZWNoYW5pc20gKGBtZGlvX21hcF9sb2NrYCkgdG8gc2VyaWFsaXplIGRldmljZSBjaGFuZ2VzIGFuZCBwcmV2ZW50IHJhY2VzIGR1cmluZyBQSFkgYXR0YWNobWVudCBhbmQgZGV0YWNobWVudC4gSXQgYWxzbyByZWZhY3RvcnMgdGhlIHNjYW5uaW5nIGFuZCByZWdpc3RyYXRpb24gb2YgUEhZcyBhbmQgTURJTyBkZXZpY2VzLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gY29kZSB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC4gSXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gbG9naWMgZG9lcyBub3QgaW50cm9kdWNlIGRlYWRsb2NrcyBvciByYWNlIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow687kr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 00:04:07 +0000 UTC FinishedAt: 2026-08-04 00:09:30 +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": "d661abdc30c254649c32ef6e0aa1e621e04ff0a7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OF", "OF_DYNAMIC", "OF_OVERLAY", "PHYLIB" ], "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": "d661abdc30c254649c32ef6e0aa1e621e04ff0a7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OF", "OF_DYNAMIC", "OF_OVERLAY", "PHYLIB" ], "series_id": "1bd95b7e-e378-45d8-9a53-3d7a0e3c591f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__mdiobus_register", "mdiobus_unregister", "mdiobus_device_change_begin", "mdiobus_device_change_end", "mdiobus_registration_done", "mdiobus_begin_remove", "mdiobus_finish_remove", "mdio_device_register", "mdio_device_remove", "phy_device_register", "phy_device_remove", "phy_attach_direct", "phy_detach", "__of_mdiobus_register", "mdiobus_scan_c22" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09GJiMzNDssCiAgICAmIzM0O09GX0RZTkFNSUMmIzM0OywKICAgICYjMzQ7T0ZfT1ZFUkxBWSYjMzQ7LAogICAgJiMzNDtQSFlMSUImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX21kaW9idXNfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7bWRpb2J1c191bnJlZ2lzdGVyJiMzNDssCiAgICAmIzM0O21kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbiYjMzQ7LAogICAgJiMzNDttZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kJiMzNDssCiAgICAmIzM0O21kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUmIzM0OywKICAgICYjMzQ7bWRpb2J1c19iZWdpbl9yZW1vdmUmIzM0OywKICAgICYjMzQ7bWRpb2J1c19maW5pc2hfcmVtb3ZlJiMzNDssCiAgICAmIzM0O21kaW9fZGV2aWNlX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O21kaW9fZGV2aWNlX3JlbW92ZSYjMzQ7LAogICAgJiMzNDtwaHlfZGV2aWNlX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3BoeV9kZXZpY2VfcmVtb3ZlJiMzNDssCiAgICAmIzM0O3BoeV9hdHRhY2hfZGlyZWN0JiMzNDssCiAgICAmIzM0O3BoeV9kZXRhY2gmIzM0OywKICAgICYjMzQ7X19vZl9tZGlvYnVzX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O21kaW9idXNfc2Nhbl9jMjImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1ESU8gYnVzIGFuZCBQSFkgZGV2aWNlIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiBsb2dpYyB0byBzdXBwb3J0IGR5bmFtaWMgZGV2aWNlIHRyZWUgY2hhbmdlcyAoT0YgZHluYW1pYyBhbmQgb3ZlcmxheSkuIEl0IGludHJvZHVjZXMgYSBsb2NraW5nIG1lY2hhbmlzbSAoYG1kaW9fbWFwX2xvY2tgKSB0byBzZXJpYWxpemUgZGV2aWNlIGNoYW5nZXMgYW5kIHByZXZlbnQgcmFjZXMgZHVyaW5nIFBIWSBhdHRhY2htZW50IGFuZCBkZXRhY2htZW50LiBJdCBhbHNvIHJlZmFjdG9ycyB0aGUgc2Nhbm5pbmcgYW5kIHJlZ2lzdHJhdGlvbiBvZiBQSFlzIGFuZCBNRElPIGRldmljZXMuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBjb2RlIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UgZGVhZGxvY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDAzOTgxZWY1NDQzNTc0NjQ1Njk0MGE1NGZhMWI5MmY5NTkyODA0YmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDAwOjA2OjA0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jIGIvZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmNcbmluZGV4IGI4ZDI5OGMwNGQzZmYuLmM4OWY4OGFhY2Q4ZGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmNcbkBAIC0xMyw2ICYjNDM7MTMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Z3bm9kZV9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9pcnEuaFx1MDAzZVxuQEAgLTIwLDYgJiM0MzsyMSw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbmV0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeV9maXhlZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiBcbiAjZGVmaW5lIERFRkFVTFRfR1BJT19SRVNFVF9ERUxBWVx0MTBcdC8qIGluIG1pY3Jvc2Vjb25kcyAqL1xuIFxuQEAgLTI3LDYgJiM0MzszMCw1MiBAQCBNT0RVTEVfQVVUSE9SKFwmIzM0O0dyYW50IExpa2VseSBcdTAwM2NncmFudC5saWtlbHlAc2VjcmV0bGFiLmNhXHUwMDNlXCYjMzQ7KTtcbiBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuIE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtPcGVuRmlybXdhcmUgTURJTyBidXMgKEV0aGVybmV0IFBIWSkgYWNjZXNzb3JzXCYjMzQ7KTtcbiBcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX09GX0RZTkFNSUMpXG4mIzQzOy8qXG4mIzQzOyAqIE9GIGNoYW5nZXMgY2FuIG5lc3Qgd2hlbiBwcm9iaW5nIG9uZSBNRElPIGRldmljZSBlbmFibGVzIGFub3RoZXIgbm9kZSBvblxuJiM0MzsgKiB0aGUgc2FtZSBidXMuIFNlcmlhbGl6ZSBpbmRlcGVuZGVudCBjaGFuZ2VzIHdoaWxlIGFsbG93aW5nIHRoYXQgbmVzdGluZy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBERUZJTkVfTVVURVgob2ZfbWRpb19yZWNvbmZpZ19tdXRleCk7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9mX21kaW9fcmVjb25maWdfb3duZXI7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgb2ZfbWRpb19yZWNvbmZpZ19kZXB0aDtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG9mX21kaW9fcmVjb25maWdfbG9jayh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFtdXRleF90cnlsb2NrKFx1MDAyNm9mX21kaW9fcmVjb25maWdfbXV0ZXgpKSB7XG4mIzQzO1x0XHRpZiAob2ZfbWRpb19yZWNvbmZpZ19vd25lciA9PSBjdXJyZW50KSB7XG4mIzQzO1x0XHRcdG9mX21kaW9fcmVjb25maWdfZGVwdGgmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRtdXRleF9sb2NrKFx1MDAyNm9mX21kaW9fcmVjb25maWdfbXV0ZXgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0V0FSTl9PTl9PTkNFKG9mX21kaW9fcmVjb25maWdfb3duZXIpO1xuJiM0MztcdFdBUk5fT05fT05DRShvZl9tZGlvX3JlY29uZmlnX2RlcHRoKTtcbiYjNDM7XHRvZl9tZGlvX3JlY29uZmlnX293bmVyID0gY3VycmVudDtcbiYjNDM7XHRvZl9tZGlvX3JlY29uZmlnX2RlcHRoID0gMTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgb2ZfbWRpb19yZWNvbmZpZ191bmxvY2sodm9pZClcbiYjNDM7e1xuJiM0MztcdFdBUk5fT05fT05DRShvZl9tZGlvX3JlY29uZmlnX293bmVyICE9IGN1cnJlbnQpO1xuJiM0MztcdFdBUk5fT05fT05DRSghb2ZfbWRpb19yZWNvbmZpZ19kZXB0aCk7XG4mIzQzO1xuJiM0MztcdGlmICgtLW9mX21kaW9fcmVjb25maWdfZGVwdGgpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdG9mX21kaW9fcmVjb25maWdfb3duZXIgPSBOVUxMO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZvZl9tZGlvX3JlY29uZmlnX211dGV4KTtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgb2ZfbWRpb19yZWNvbmZpZ19sb2NrKHZvaWQpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG9mX21kaW9fcmVjb25maWdfdW5sb2NrKHZvaWQpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gLyogRXh0cmFjdCB0aGUgY2xhdXNlIDIyIHBoeSBJRCBmcm9tIHRoZSBjb21wYXRpYmxlIHN0cmluZyBvZiB0aGUgZm9ybVxuICAqIGV0aGVybmV0LXBoeS1pZEFBQUEuQkJCQiAqL1xuIHN0YXRpYyBpbnQgb2ZfZ2V0X3BoeV9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSwgdTMyICpwaHlfaWQpXG5AQCAtNDQsNyAmIzQzOzkzLDcgQEAgaW50IG9mX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcbiBFWFBPUlRfU1lNQk9MKG9mX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3Rlcik7XG4gXG4gc3RhdGljIGludCBvZl9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcbi1cdFx0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLCB1MzIgYWRkcilcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLCB1MzIgYWRkcilcbiB7XG4gXHRyZXR1cm4gZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KG1kaW8sIG9mX2Z3bm9kZV9oYW5kbGUoY2hpbGQpLCBhZGRyKTtcbiB9XG5AQCAtNzcsNiAmIzQzOzEyNiwyNSBAQCBzdGF0aWMgaW50IG9mX21kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICptZGlvLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG9mX21kaW9idXNfcmVnaXN0ZXJfY2hpbGQoc3RydWN0IG1paV9idXMgKm1kaW8sXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLCB1MzIgYWRkcilcbiYjNDM7e1xuJiM0MztcdGludCByYztcbiYjNDM7XG4mIzQzO1x0aWYgKG9mX25vZGVfdGVzdF9hbmRfc2V0X2ZsYWcoY2hpbGQsIE9GX1BPUFVMQVRFRCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKG9mX21kaW9idXNfY2hpbGRfaXNfcGh5KGNoaWxkKSlcbiYjNDM7XHRcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9waHkobWRpbywgY2hpbGQsIGFkZHIpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2UobWRpbywgY2hpbGQsIGFkZHIpO1xuJiM0MztcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRvZl9ub2RlX2NsZWFyX2ZsYWcoY2hpbGQsIE9GX1BPUFVMQVRFRCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByYztcbiYjNDM7fVxuJiM0MztcbiAvKiBUaGUgZm9sbG93aW5nIGlzIGEgbGlzdCBvZiBQSFkgY29tcGF0aWJsZSBzdHJpbmdzIHdoaWNoIGFwcGVhciBpblxuICAqIHNvbWUgRFRCcy4gVGhlIGNvbXBhdGlibGUgc3RyaW5nIGlzIG5ldmVyIG1hdGNoZWQgYWdhaW5zdCBhIFBIWVxuICAqIGRyaXZlciwgc28gaXMgcG9pbnRsZXNzLiBXZSBvbmx5IGV4cGVjdCBkZXZpY2VzIHdoaWNoIGFyZSBub3QgUEhZc1xuQEAgLTEzNiw2ICYjNDM7MjA0LDMyIEBAIGJvb2wgb2ZfbWRpb2J1c19jaGlsZF9pc19waHkoc3RydWN0IGRldmljZV9ub2RlICpjaGlsZClcbiB9XG4gRVhQT1JUX1NZTUJPTChvZl9tZGlvYnVzX2NoaWxkX2lzX3BoeSk7XG4gXG4mIzQzO3N0YXRpYyBpbnQgb2ZfbWRpb2J1c19zY2FuX3BoeShzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgYWRkciwgcmM7XG4mIzQzO1xuJiM0MztcdGlmICghb2ZfbWRpb2J1c19jaGlsZF9pc19waHkoY2hpbGQpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdGZvciAoYWRkciA9IDA7IGFkZHIgXHUwMDNjIFBIWV9NQVhfQUREUjsgYWRkciYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChtZGlvYnVzX2lzX3JlZ2lzdGVyZWRfZGV2aWNlKG1kaW8sIGFkZHIpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRkZXZfaW5mbyhcdTAwMjZtZGlvLVx1MDAzZWRldiwgXCYjMzQ7c2NhbiBwaHkgJXBPRm4gYXQgYWRkcmVzcyAlaVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0IGNoaWxkLCBhZGRyKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiAtRU5PREVWIG1lYW5zIHRoYXQgc2Nhbm5pbmcgc2hvdWxkIGNvbnRpbnVlLiAqL1xuJiM0MztcdFx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyX2NoaWxkKG1kaW8sIGNoaWxkLCBhZGRyKTtcbiYjNDM7XHRcdGlmICghcmMpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0aWYgKHJjICE9IC1FTk9ERVYpXG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRU5PREVWO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgX19vZl9tZGlvYnVzX3BhcnNlX3BoeXMoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4gXHRcdFx0XHQgICBib29sICpzY2FucGh5cylcbiB7XG5AQCAtMTY0LDEwICYjNDM7MjU4LDcgQEAgc3RhdGljIGludCBfX29mX21kaW9idXNfcGFyc2VfcGh5cyhzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRpZiAob2ZfbWRpb2J1c19jaGlsZF9pc19waHkoY2hpbGQpKVxuLVx0XHRcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9waHkobWRpbywgY2hpbGQsIGFkZHIpO1xuLVx0XHRlbHNlXG4tXHRcdFx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyX2RldmljZShtZGlvLCBjaGlsZCwgYWRkcik7XG4mIzQzO1x0XHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXJfY2hpbGQobWRpbywgY2hpbGQsIGFkZHIpO1xuIFxuIFx0XHRpZiAocmMgPT0gLUVOT0RFVilcbiBcdFx0XHRkZXZfZXJyKFx1MDAyNm1kaW8tXHUwMDNlZGV2LFxuQEAgLTE5Nyw3ICYjNDM7Mjg4LDcgQEAgaW50IF9fb2ZfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCxcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkO1xuIFx0Ym9vbCBzY2FucGh5cyA9IGZhbHNlO1xuLVx0aW50IGFkZHIsIHJjO1xuJiM0MztcdGludCByYztcbiBcbiBcdGlmICghbnApXG4gXHRcdHJldHVybiBfX21kaW9idXNfcmVnaXN0ZXIobWRpbywgb3duZXIpO1xuQEAgLTIyMywxMyAmIzQzOzMxNCwyMSBAQCBpbnQgX19vZl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gcmM7XG4gXG4mIzQzO1x0b2ZfbWRpb19yZWNvbmZpZ19sb2NrKCk7XG4mIzQzO1x0cmMgPSBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4obWRpbywgZmFsc2UpO1xuJiM0MztcdGlmIChyYykge1xuJiM0MztcdFx0b2ZfbWRpb19yZWNvbmZpZ191bmxvY2soKTtcbiYjNDM7XHRcdG1kaW9idXNfdW5yZWdpc3RlcihtZGlvKTtcbiYjNDM7XHRcdHJldHVybiByYztcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogTG9vcCBvdmVyIHRoZSBjaGlsZCBub2RlcyBhbmQgcmVnaXN0ZXIgYSBwaHlfZGV2aWNlIGZvciBlYWNoIHBoeSAqL1xuIFx0cmMgPSBfX29mX21kaW9idXNfcGFyc2VfcGh5cyhtZGlvLCBucCwgXHUwMDI2c2NhbnBoeXMpO1xuIFx0aWYgKHJjKVxuLVx0XHRnb3RvIHVucmVnaXN0ZXI7XG4mIzQzO1x0XHRnb3RvIG91dF9jaGFuZ2U7XG4gXG4gXHRpZiAoIXNjYW5waHlzKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdGdvdG8gb3V0X2NoYW5nZTtcbiBcbiBcdC8qIGF1dG8gc2NhbiBmb3IgUEhZcyB3aXRoIGVtcHR5IHJlZyBwcm9wZXJ0eSAqL1xuIFx0Zm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGUobnAsIGNoaWxkKSB7XG5AQCAtMjM4LDM5ICYjNDM7MzM3LDM4MiBAQCBpbnQgX19vZl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuIFx0XHQgICAgb2Zfbm9kZV9uYW1lX2VxKGNoaWxkLCBcJiMzNDtldGhlcm5ldC1waHktcGFja2FnZVwmIzM0OykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGZvciAoYWRkciA9IDA7IGFkZHIgXHUwMDNjIFBIWV9NQVhfQUREUjsgYWRkciYjNDM7JiM0MzspIHtcbi1cdFx0XHQvKiBza2lwIGFscmVhZHkgcmVnaXN0ZXJlZCBQSFlzICovXG4tXHRcdFx0aWYgKG1kaW9idXNfaXNfcmVnaXN0ZXJlZF9kZXZpY2UobWRpbywgYWRkcikpXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0XHQvKiBiZSBub2lzeSB0byBlbmNvdXJhZ2UgcGVvcGxlIHRvIHNldCByZWcgcHJvcGVydHkgKi9cbi1cdFx0XHRkZXZfaW5mbyhcdTAwMjZtZGlvLVx1MDAzZWRldiwgXCYjMzQ7c2NhbiBwaHkgJXBPRm4gYXQgYWRkcmVzcyAlaVxcblwmIzM0Oyxcbi1cdFx0XHRcdCBjaGlsZCwgYWRkcik7XG4tXG4tXHRcdFx0aWYgKG9mX21kaW9idXNfY2hpbGRfaXNfcGh5KGNoaWxkKSkge1xuLVx0XHRcdFx0LyogLUVOT0RFViBpcyB0aGUgcmV0dXJuIGNvZGUgdGhhdCBQSFlMSUIgaGFzXG4tXHRcdFx0XHQgKiBzdGFuZGFyZGl6ZWQgb24gdG8gaW5kaWNhdGUgdGhhdCBidXNcbi1cdFx0XHRcdCAqIHNjYW5uaW5nIHNob3VsZCBjb250aW51ZS5cbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyX3BoeShtZGlvLCBjaGlsZCwgYWRkcik7XG4tXHRcdFx0XHRpZiAoIXJjKVxuLVx0XHRcdFx0XHRicmVhaztcbi1cdFx0XHRcdGlmIChyYyAhPSAtRU5PREVWKVxuLVx0XHRcdFx0XHRnb3RvIHB1dF91bnJlZ2lzdGVyO1xuLVx0XHRcdH1cbi1cdFx0fVxuJiM0MztcdFx0cmMgPSBvZl9tZGlvYnVzX3NjYW5fcGh5KG1kaW8sIGNoaWxkKTtcbiYjNDM7XHRcdGlmIChyYyBcdTAwMjZcdTAwMjYgcmMgIT0gLUVOT0RFVilcbiYjNDM7XHRcdFx0Z290byBwdXRfY2hpbGQ7XG4mIzQzO1x0XHRyYyA9IDA7XG4gXHR9XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7b3V0X2NoYW5nZTpcbiYjNDM7XHRtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kKG1kaW8sIGZhbHNlKTtcbiYjNDM7XHRvZl9tZGlvX3JlY29uZmlnX3VubG9jaygpO1xuJiM0MztcdGlmICghcmMpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcbi1wdXRfdW5yZWdpc3Rlcjpcbi1cdG9mX25vZGVfcHV0KGNoaWxkKTtcbi11bnJlZ2lzdGVyOlxuIFx0bWRpb2J1c191bnJlZ2lzdGVyKG1kaW8pO1xuIFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7cHV0X2NoaWxkOlxuJiM0MztcdG9mX25vZGVfcHV0KGNoaWxkKTtcbiYjNDM7XHRnb3RvIG91dF9jaGFuZ2U7XG4gfVxuIEVYUE9SVF9TWU1CT0woX19vZl9tZGlvYnVzX3JlZ2lzdGVyKTtcbiBcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX09GX0RZTkFNSUMpXG4mIzQzO3N0YXRpYyBib29sIG9mX21kaW9idXNfbm9kZV9pc19hdmFpbGFibGUoc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICFvZl9ub2RlX2NoZWNrX2ZsYWcobm9kZSwgT0ZfREVUQUNIRUQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICBvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5vZGUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG9mX21kaW9idXNfYWRkX25vZGUoc3RydWN0IG1paV9idXMgKm1kaW8sXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkO1xuJiM0MztcdGludCBhZGRyLCByYywgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFvZl9tZGlvYnVzX25vZGVfaXNfYXZhaWxhYmxlKG5vZGUpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChvZl9ub2RlX25hbWVfZXEobm9kZSwgXCYjMzQ7ZXRoZXJuZXQtcGh5LXBhY2thZ2VcJiMzNDspKSB7XG4mIzQzO1x0XHRpZiAoIW9mX3Byb3BlcnR5X3ByZXNlbnQobm9kZSwgXCYjMzQ7cmVnXCYjMzQ7KSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdFx0Zm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGUobm9kZSwgY2hpbGQpIHtcbiYjNDM7XHRcdFx0cmMgPSBvZl9tZGlvYnVzX2FkZF9ub2RlKG1kaW8sIGNoaWxkKTtcbiYjNDM7XHRcdFx0aWYgKHJjIFx1MDAyNlx1MDAyNiByYyAhPSAtRU5PREVWIFx1MDAyNlx1MDAyNiAhcmV0KVxuJiM0MztcdFx0XHRcdHJldCA9IHJjO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRhZGRyID0gb2ZfbWRpb19wYXJzZV9hZGRyKFx1MDAyNm1kaW8tXHUwMDNlZGV2LCBub2RlKTtcbiYjNDM7XHRpZiAoYWRkciBcdTAwM2MgMClcbiYjNDM7XHRcdHJjID0gb2ZfbWRpb2J1c19zY2FuX3BoeShtZGlvLCBub2RlKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXJfY2hpbGQobWRpbywgbm9kZSwgYWRkcik7XG4mIzQzO1xuJiM0MztcdGlmIChyYyA9PSAtRU5PREVWIFx1MDAyNlx1MDAyNiBhZGRyIFx1MDAzZT0gMClcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2bWRpby1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFwmIzM0O01ESU8gZGV2aWNlIGF0IGFkZHJlc3MgJWQgaXMgbWlzc2luZy5cXG5cJiMzNDssIGFkZHIpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG9mX21kaW9idXNfbm9kZV9pc19idXN5KHN0cnVjdCBtaWlfYnVzICptZGlvLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XG4mIzQzO1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbiYjNDM7XHRib29sIGJ1c3kgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKG9mX25vZGVfbmFtZV9lcShub2RlLCBcJiMzNDtldGhlcm5ldC1waHktcGFja2FnZVwmIzM0OykpIHtcbiYjNDM7XHRcdGZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKG5vZGUsIGNoaWxkKSB7XG4mIzQzO1x0XHRcdGlmIChvZl9tZGlvYnVzX25vZGVfaXNfYnVzeShtZGlvLCBjaGlsZCkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFvZl9ub2RlX2NoZWNrX2ZsYWcobm9kZSwgT0ZfUE9QVUxBVEVEKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0bWRpb2RldiA9IG9mX21kaW9fZmluZF9kZXZpY2Uobm9kZSk7XG4mIzQzO1x0aWYgKCFtZGlvZGV2KVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0aWYgKG1kaW9kZXYtXHUwMDNlYnVzICE9IG1kaW8pIHtcbiYjNDM7XHRcdHB1dF9kZXZpY2UoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZtZGlvLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuJiM0MztcdGJ1c3kgPSBtZGlvLVx1MDAzZW1kaW9fbWFwW21kaW9kZXYtXHUwMDNlYWRkcl0gIT0gbWRpb2RldiB8fFxuJiM0MztcdCAgICAgICAobWRpby1cdTAwM2VtZGlvX21hcF9wZW5kaW5nIFx1MDAyNiBCSVQobWRpb2Rldi1cdTAwM2VhZGRyKSk7XG4mIzQzO1x0aWYgKG1kaW9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IE1ESU9fREVWSUNFX0ZMQUdfUEhZKSB7XG4mIzQzO1x0XHRwaHlkZXYgPSB0b19waHlfZGV2aWNlKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRcdGlmIChwaHlkZXYtXHUwMDNlYXR0YWNoZWQpIHtcbiYjNDM7XHRcdFx0YnVzeSA9IHRydWU7XG4mIzQzO1x0XHRcdGRldl93YXJuKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdCBcJiMzNDtjYW5ub3QgcmVtb3ZlIGFuIGF0dGFjaGVkIFBIWTsgcmVtb3ZlIGl0cyBjb25zdW1lciBmaXJzdFxcblwmIzM0Oyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZtZGlvLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuJiM0MztcdHB1dF9kZXZpY2UoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYnVzeTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqXG4mIzQzO29mX21kaW9idXNfZ2V0X3JlbW92YWxfc2NvcGUoc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQ7XG4mIzQzO1xuJiM0MztcdGlmIChvZl9ub2RlX25hbWVfZXEobm9kZSwgXCYjMzQ7ZXRoZXJuZXQtcGh5LXBhY2thZ2VcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIG9mX25vZGVfZ2V0KG5vZGUpO1xuJiM0MztcbiYjNDM7XHRwYXJlbnQgPSBvZl9nZXRfcGFyZW50KG5vZGUpO1xuJiM0MztcdGlmIChvZl9ub2RlX25hbWVfZXEocGFyZW50LCBcJiMzNDtldGhlcm5ldC1waHktcGFja2FnZVwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gcGFyZW50O1xuJiM0MztcbiYjNDM7XHRvZl9ub2RlX3B1dChwYXJlbnQpO1xuJiM0MztcdHJldHVybiBvZl9ub2RlX2dldChub2RlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvZl9tZGlvYnVzX3JlbW92ZV9ub2RlKHN0cnVjdCBtaWlfYnVzICptZGlvLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2O1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKG9mX25vZGVfbmFtZV9lcShub2RlLCBcJiMzNDtldGhlcm5ldC1waHktcGFja2FnZVwmIzM0OykpIHtcbiYjNDM7XHRcdGZvcl9lYWNoX2NoaWxkX29mX25vZGUobm9kZSwgY2hpbGQpIHtcbiYjNDM7XHRcdFx0cmV0ID0gb2ZfbWRpb2J1c19yZW1vdmVfbm9kZShtZGlvLCBjaGlsZCk7XG4mIzQzO1x0XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0XHRvZl9ub2RlX3B1dChjaGlsZCk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIW9mX25vZGVfY2hlY2tfZmxhZyhub2RlLCBPRl9QT1BVTEFURUQpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBPRiBub2RlIGxvb2t1cCBhbHNvIGNvdmVycyBQSFlzIGZvdW5kIGJ5IGFkZHJlc3Mgc2Nhbm5pbmcuICovXG4mIzQzO1x0bWRpb2RldiA9IG9mX21kaW9fZmluZF9kZXZpY2Uobm9kZSk7XG4mIzQzO1x0aWYgKCFtZGlvZGV2KVxuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHRpZiAobWRpb2Rldi1cdTAwM2VidXMgIT0gbWRpbykge1xuJiM0MztcdFx0cHV0X2RldmljZShcdTAwMjZtZGlvZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IG1kaW9kZXYtXHUwMDNlZGV2aWNlX3JlbW92ZV9keW5hbWljKG1kaW9kZXYpO1xuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0bWRpb2Rldi1cdTAwM2VkZXZpY2VfZnJlZShtZGlvZGV2KTtcbiYjNDM7XHRwdXRfZGV2aWNlKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldCA9PSAtRU5PREVWID8gMCA6IHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBtaWlfYnVzICpvZl9tZGlvYnVzX2ZpbmRfcGFyZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50LCAqYnVzX25vZGU7XG4mIzQzO1x0c3RydWN0IG1paV9idXMgKm1kaW87XG4mIzQzO1xuJiM0MztcdHBhcmVudCA9IG9mX2dldF9wYXJlbnQobm9kZSk7XG4mIzQzO1x0aWYgKCFwYXJlbnQpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aWYgKG9mX25vZGVfbmFtZV9lcShwYXJlbnQsIFwmIzM0O2V0aGVybmV0LXBoeS1wYWNrYWdlXCYjMzQ7KSkge1xuJiM0MztcdFx0aWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKHBhcmVudCkgfHxcbiYjNDM7XHRcdCAgICAhb2ZfcHJvcGVydHlfcHJlc2VudChwYXJlbnQsIFwmIzM0O3JlZ1wmIzM0OykpIHtcbiYjNDM7XHRcdFx0b2Zfbm9kZV9wdXQocGFyZW50KTtcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0YnVzX25vZGUgPSBvZl9nZXRfcGFyZW50KHBhcmVudCk7XG4mIzQzO1x0XHRvZl9ub2RlX3B1dChwYXJlbnQpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRidXNfbm9kZSA9IHBhcmVudDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1kaW8gPSBvZl9tZGlvX2ZpbmRfYnVzKGJ1c19ub2RlKTtcbiYjNDM7XHRvZl9ub2RlX3B1dChidXNfbm9kZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtZGlvO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfT0ZfT1ZFUkxBWSlcbiYjNDM7LyogT3ZlcmxheSBlbnRyeSBub3RpZmllciBlcnJvcnMgY2Fubm90IHN0b3AgcmVtb3ZhbCBhZnRlciB0aGUgdHJlZSBjaGFuZ2VkLiAqL1xuJiM0MztzdGF0aWMgYm9vbCBvZl9tZGlvYnVzX2xpdmVfbm9kZV9pc19idXN5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqc2NvcGU7XG4mIzQzO1x0c3RydWN0IG1paV9idXMgKm1kaW87XG4mIzQzO1x0Ym9vbCBidXN5ID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0c2NvcGUgPSBvZl9tZGlvYnVzX2dldF9yZW1vdmFsX3Njb3BlKG5vZGUpO1xuJiM0MztcdG1kaW8gPSBvZl9tZGlvYnVzX2ZpbmRfcGFyZW50KHNjb3BlKTtcbiYjNDM7XHRpZiAoIW1kaW8pXG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfc2NvcGU7XG4mIzQzO1xuJiM0MztcdGlmICghbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKG1kaW8sIHRydWUpKSB7XG4mIzQzO1x0XHRidXN5ID0gb2ZfbWRpb2J1c19ub2RlX2lzX2J1c3kobWRpbywgc2NvcGUpO1xuJiM0MztcdFx0bWRpb2J1c19kZXZpY2VfY2hhbmdlX2VuZChtZGlvLCB0cnVlKTtcbiYjNDM7XHR9XG4mIzQzO1x0cHV0X2RldmljZShcdTAwMjZtZGlvLVx1MDAzZWRldik7XG4mIzQzO1xuJiM0MztvdXRfcHV0X3Njb3BlOlxuJiM0MztcdG9mX25vZGVfcHV0KHNjb3BlKTtcbiYjNDM7XHRyZXR1cm4gYnVzeTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqXG4mIzQzO29mX21kaW9idXNfb3ZlcmxheV90YXJnZXRfY2hpbGQoc3RydWN0IGRldmljZV9ub2RlICp0YXJnZXQsXG4mIzQzO1x0XHRcdFx0c3RydWN0IGRldmljZV9ub2RlICpvdmVybGF5X2NoaWxkKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgY2hhciAqbmFtZSA9IGtiYXNlbmFtZShvdmVybGF5X2NoaWxkLVx1MDAzZWZ1bGxfbmFtZSk7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZDtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfY2hpbGRfb2Zfbm9kZSh0YXJnZXQsIGNoaWxkKSB7XG4mIzQzO1x0XHRpZiAoIW9mX25vZGVfY21wKGtiYXNlbmFtZShjaGlsZC1cdTAwM2VmdWxsX25hbWUpLCBuYW1lKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGNoaWxkO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG9mX21kaW9idXNfb3ZlcmxheV9ub2RlX2lzX2J1c3koc3RydWN0IGRldmljZV9ub2RlICpvdmVybGF5LFxuJiM0MztcdFx0XHRcdFx0ICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqdGFyZ2V0LFxuJiM0MztcdFx0XHRcdFx0ICAgIGJvb2wgYWRkZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm92ZXJsYXlfY2hpbGQsICp0YXJnZXRfY2hpbGQ7XG4mIzQzO1x0Ym9vbCBidXN5LCBjaGlsZF9hZGRlZDtcbiYjNDM7XG4mIzQzO1x0aWYgKChhZGRlZCB8fCBvZl9wcm9wZXJ0eV9wcmVzZW50KG92ZXJsYXksIFwmIzM0O3N0YXR1c1wmIzM0OykpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBvZl9tZGlvYnVzX2xpdmVfbm9kZV9pc19idXN5KHRhcmdldCkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShvdmVybGF5LCBvdmVybGF5X2NoaWxkKSB7XG4mIzQzO1x0XHR0YXJnZXRfY2hpbGQgPSBvZl9tZGlvYnVzX292ZXJsYXlfdGFyZ2V0X2NoaWxkKHRhcmdldCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgICAgb3ZlcmxheV9jaGlsZCk7XG4mIzQzO1x0XHRpZiAoIXRhcmdldF9jaGlsZClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0Y2hpbGRfYWRkZWQgPSBvZl9ub2RlX2NoZWNrX2ZsYWcodGFyZ2V0X2NoaWxkLCBPRl9PVkVSTEFZKTtcbiYjNDM7XHRcdGJ1c3kgPSBvZl9tZGlvYnVzX292ZXJsYXlfbm9kZV9pc19idXN5KG92ZXJsYXlfY2hpbGQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICB0YXJnZXRfY2hpbGQsIGNoaWxkX2FkZGVkKTtcbiYjNDM7XHRcdG9mX25vZGVfcHV0KHRhcmdldF9jaGlsZCk7XG4mIzQzO1x0XHRpZiAoYnVzeSkge1xuJiM0MztcdFx0XHRvZl9ub2RlX3B1dChvdmVybGF5X2NoaWxkKTtcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb2ZfbWRpb2J1c19vdmVybGF5X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuJiM0MztcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmFyZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvZl9vdmVybGF5X25vdGlmeV9kYXRhICpuZCA9IGFyZztcbiYjNDM7XHRib29sIGJ1c3k7XG4mIzQzO1xuJiM0MztcdGlmIChhY3Rpb24gIT0gT0ZfT1ZFUkxBWV9QUkVfUkVNT1ZFKVxuJiM0MztcdFx0cmV0dXJuIE5PVElGWV9PSztcbiYjNDM7XG4mIzQzO1x0b2ZfbWRpb19yZWNvbmZpZ19sb2NrKCk7XG4mIzQzO1x0YnVzeSA9IG9mX21kaW9idXNfb3ZlcmxheV9ub2RlX2lzX2J1c3kobmQtXHUwMDNlb3ZlcmxheSwgbmQtXHUwMDNldGFyZ2V0LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGZhbHNlKTtcbiYjNDM7XHRvZl9tZGlvX3JlY29uZmlnX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYnVzeSA/IG5vdGlmaWVyX2Zyb21fZXJybm8oLUVCVVNZKSA6IE5PVElGWV9PSztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBvZl9tZGlvX292ZXJsYXlfbm90aWZpZXIgPSB7XG4mIzQzO1x0Lm5vdGlmaWVyX2NhbGwgPSBvZl9tZGlvYnVzX292ZXJsYXlfbm90aWZ5LFxuJiM0Mzt9O1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb2ZfbWRpb2J1c19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sXG4mIzQzO1x0XHRcdCAgICAgdm9pZCAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG9mX3JlY29uZmlnX2RhdGEgKnJkID0gYXJnO1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqc2NvcGU7XG4mIzQzO1x0c3RydWN0IG1paV9idXMgKm1kaW87XG4mIzQzO1x0ZW51bSBvZl9yZWNvbmZpZ19jaGFuZ2UgY2hhbmdlO1xuJiM0MztcdGJvb2wgcmVtb3Zpbmc7XG4mIzQzO1x0aW50IHJjLCByZXQgPSBOT1RJRllfT0s7XG4mIzQzO1xuJiM0MztcdG9mX21kaW9fcmVjb25maWdfbG9jaygpO1xuJiM0MztcdGNoYW5nZSA9IG9mX3JlY29uZmlnX2dldF9zdGF0ZV9jaGFuZ2UoYWN0aW9uLCByZCk7XG4mIzQzO1x0c3dpdGNoIChjaGFuZ2UpIHtcbiYjNDM7XHRjYXNlIE9GX1JFQ09ORklHX0NIQU5HRV9BREQ6XG4mIzQzO1x0XHQvKiBBIG5ld2VyIGNoYW5nZSBtYXkgaGF2ZSBtYWRlIHRoaXMgbm90aWZpY2F0aW9uIHN0YWxlLiAqL1xuJiM0MztcdFx0aWYgKCFvZl9tZGlvYnVzX25vZGVfaXNfYXZhaWxhYmxlKHJkLVx1MDAzZWRuKSlcbiYjNDM7XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdFx0cmVtb3ZpbmcgPSBmYWxzZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgT0ZfUkVDT05GSUdfQ0hBTkdFX1JFTU9WRTpcbiYjNDM7XHRcdC8qIEEgbmV3ZXIgY2hhbmdlIG1heSBoYXZlIG1hZGUgdGhpcyBub3RpZmljYXRpb24gc3RhbGUuICovXG4mIzQzO1x0XHRpZiAob2ZfbWRpb2J1c19ub2RlX2lzX2F2YWlsYWJsZShyZC1cdTAwM2VkbikpXG4mIzQzO1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHRcdHJlbW92aW5nID0gdHJ1ZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtZGlvID0gb2ZfbWRpb2J1c19maW5kX3BhcmVudChyZC1cdTAwM2Vkbik7XG4mIzQzO1x0aWYgKCFtZGlvKVxuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRyYyA9IG1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbihtZGlvLCByZW1vdmluZyk7XG4mIzQzO1x0aWYgKHJjKSB7XG4mIzQzO1x0XHRpZiAoIXJlbW92aW5nKVxuJiM0MztcdFx0XHRyZXQgPSBub3RpZmllcl9mcm9tX2Vycm5vKC1FUFJPQkVfREVGRVIpO1xuJiM0MztcdFx0Z290byBvdXRfcHV0X21kaW87XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXJlbW92aW5nKSB7XG4mIzQzO1x0XHRyYyA9IG9mX21kaW9idXNfYWRkX25vZGUobWRpbywgcmQtXHUwMDNlZG4pO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBUaGUgbm9kZSBtYXkgYWxyZWFkeSBiZSBkZXRhY2hlZCBmcm9tIGl0cyBwYXJlbnQgaGllcmFyY2h5LiAqL1xuJiM0MztcdFx0c2NvcGUgPSBvZl9tZGlvYnVzX2dldF9yZW1vdmFsX3Njb3BlKHJkLVx1MDAzZWRuKTtcbiYjNDM7XHRcdGlmIChvZl9tZGlvYnVzX25vZGVfaXNfYnVzeShtZGlvLCBzY29wZSkpXG4mIzQzO1x0XHRcdHJjID0gLUVCVVNZO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRyYyA9IG9mX21kaW9idXNfcmVtb3ZlX25vZGUobWRpbywgcmQtXHUwMDNlZG4pO1xuJiM0MztcdFx0b2Zfbm9kZV9wdXQoc2NvcGUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWRpb2J1c19kZXZpY2VfY2hhbmdlX2VuZChtZGlvLCByZW1vdmluZyk7XG4mIzQzO1x0aWYgKHJjIFx1MDAyNlx1MDAyNiAocmVtb3ZpbmcgfHwgcmMgIT0gLUVOT0RFVikpXG4mIzQzO1x0XHRyZXQgPSBub3RpZmllcl9mcm9tX2Vycm5vKHJjKTtcbiYjNDM7XG4mIzQzO291dF9wdXRfbWRpbzpcbiYjNDM7XHRwdXRfZGV2aWNlKFx1MDAyNm1kaW8tXHUwMDNlZGV2KTtcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHRvZl9tZGlvX3JlY29uZmlnX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG9mX21kaW9fbm90aWZpZXIgPSB7XG4mIzQzO1x0Lm5vdGlmaWVyX2NhbGwgPSBvZl9tZGlvYnVzX25vdGlmeSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IG9mX21kaW9faW5pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gb2ZfcmVjb25maWdfbm90aWZpZXJfcmVnaXN0ZXIoXHUwMDI2b2ZfbWRpb19ub3RpZmllcik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfT0ZfT1ZFUkxBWSlcbiYjNDM7XHRyZXQgPSBvZl9vdmVybGF5X25vdGlmaWVyX3JlZ2lzdGVyKFx1MDAyNm9mX21kaW9fb3ZlcmxheV9ub3RpZmllcik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdG9mX3JlY29uZmlnX25vdGlmaWVyX3VucmVnaXN0ZXIoXHUwMDI2b2ZfbWRpb19ub3RpZmllcik7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO21vZHVsZV9pbml0KG9mX21kaW9faW5pdCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBfX2V4aXQgb2ZfbWRpb19leGl0KHZvaWQpXG4mIzQzO3tcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX09GX09WRVJMQVkpXG4mIzQzO1x0b2Zfb3ZlcmxheV9ub3RpZmllcl91bnJlZ2lzdGVyKFx1MDAyNm9mX21kaW9fb3ZlcmxheV9ub3RpZmllcik7XG4mIzQzOyNlbmRpZlxuJiM0MztcdG9mX3JlY29uZmlnX25vdGlmaWVyX3VucmVnaXN0ZXIoXHUwMDI2b2ZfbWRpb19ub3RpZmllcik7XG4mIzQzO31cbiYjNDM7bW9kdWxlX2V4aXQob2ZfbWRpb19leGl0KTtcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19PRl9EWU5BTUlDICovXG4mIzQzO1xuIC8qKlxuICAqIG9mX21kaW9fZmluZF9kZXZpY2UgLSBHaXZlbiBhIGRldmljZSB0cmVlIG5vZGUsIGZpbmQgdGhlIG1kaW9fZGV2aWNlXG4gICogQG5wOiBwb2ludGVyIHRvIHRoZSBtZGlvX2RldmljZSYjMzk7cyBkZXZpY2UgdHJlZSBub2RlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmMgYi9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuY1xuaW5kZXggMDBkMGU0MTU5ZTliYi4uZjQ1YzkzNmZlNWFhOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuY1xuQEAgLTM0LDcgJiM0MzszNCw4IEBAIHN0YXRpYyBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9idXNfZmluZF9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXG4gXHRpZiAoV0FSTl9PTkNFKCFhZGRyX3ZhbGlkLCBcJiMzNDthZGRyICVkIG91dCBvZiByYW5nZVxcblwmIzM0OywgYWRkcikpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0cmV0dXJuIGJ1cy1cdTAwM2VtZGlvX21hcFthZGRyXTtcbiYjNDM7XHQvKiBQYWlyIHdpdGggbWFwIHB1YmxpY2F0aW9uIGluIG1kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKCkuICovXG4mIzQzO1x0cmV0dXJuIHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwW2FkZHJdKTtcbiB9XG4gXG4gc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfZ2V0X3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcbkBAIC01NCw3ICYjNDM7NTUsMTYgQEAgRVhQT1JUX1NZTUJPTChtZGlvYnVzX2dldF9waHkpO1xuIFxuIGJvb2wgbWRpb2J1c19pc19yZWdpc3RlcmVkX2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcbiB7XG4tXHRyZXR1cm4gbWRpb2J1c19maW5kX2RldmljZShidXMsIGFkZHIpICE9IE5VTEw7XG4mIzQzO1x0Ym9vbCBhZGRyX3ZhbGlkID0gYWRkciBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGFkZHIgXHUwMDNjIEFSUkFZX1NJWkUoYnVzLVx1MDAzZW1kaW9fbWFwKTtcbiYjNDM7XHRib29sIHJlZ2lzdGVyZWQ7XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OQ0UoIWFkZHJfdmFsaWQsIFwmIzM0O2FkZHIgJWQgb3V0IG9mIHJhbmdlXFxuXCYjMzQ7LCBhZGRyKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmVnaXN0ZXJlZCA9IFJFQURfT05DRShidXMtXHUwMDNlbWRpb19tYXBbYWRkcl0pIHx8XG4mIzQzO1x0XHQgICAgIChSRUFEX09OQ0UoYnVzLVx1MDAzZW1kaW9fbWFwX3BlbmRpbmcpIFx1MDAyNiBCSVQoYWRkcikpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVnaXN0ZXJlZDtcbiB9XG4gRVhQT1JUX1NZTUJPTChtZGlvYnVzX2lzX3JlZ2lzdGVyZWRfZGV2aWNlKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYyBiL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jXG5pbmRleCBjZTNhNjA3YTQwY2IwLi5kZjgwMTI1ZWVlYzQ1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jXG5AQCAtMzMwLDYgJiM0MzszMzAsOSBAQCBzdHJ1Y3QgbWlpX2J1cyAqbWRpb2J1c19hbGxvY19zaXplKHNpemVfdCBzaXplKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdGJ1cy1cdTAwM2VzdGF0ZSA9IE1ESU9CVVNfQUxMT0NBVEVEO1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuJiM0MztcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX3dhaXQpO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9yZXRpcmVkKTtcbiBcdGlmIChzaXplKVxuIFx0XHRidXMtXHUwMDNlcHJpdiA9ICh2b2lkICopYnVzICYjNDM7IGFsaWduZWRfc2l6ZTtcbiBcbkBAIC0zNTUsMTAgJiM0MzszNTgsOSBAQCBzdGF0aWMgaW50IG9mX21kaW9idXNfZmluZF9waHkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4ge1xuIFx0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZDtcbiYjNDM7XHRpbnQgYWRkciwgcmV0O1xuIFxuIFx0Zm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGUobnAsIGNoaWxkKSB7XG4tXHRcdGludCBhZGRyO1xuLVxuIFx0XHRpZiAob2Zfbm9kZV9uYW1lX2VxKGNoaWxkLCBcJiMzNDtldGhlcm5ldC1waHktcGFja2FnZVwmIzM0OykpIHtcbiBcdFx0XHQvKiBWYWxpZGF0ZSBQSFkgcGFja2FnZSByZWcgcHJlc2VuY2UgKi9cbiBcdFx0XHRpZiAoIW9mX3Byb3BlcnR5X3ByZXNlbnQoY2hpbGQsIFwmIzM0O3JlZ1wmIzM0OykpIHtcbkBAIC0zNjYsMTIgJiM0MzszNjgsMTMgQEAgc3RhdGljIGludCBvZl9tZGlvYnVzX2ZpbmRfcGh5KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuIFxuLVx0XHRcdGlmICghb2ZfbWRpb2J1c19maW5kX3BoeShkZXYsIG1kaW9kZXYsIGNoaWxkKSkge1xuJiM0MztcdFx0XHRyZXQgPSBvZl9tZGlvYnVzX2ZpbmRfcGh5KGRldiwgbWRpb2RldiwgY2hpbGQpO1xuJiM0MztcdFx0XHRpZiAocmV0ICE9IC1FTk9ERVYpIHtcbiBcdFx0XHRcdC8qIFRoZSByZWZjb3VudCBmb3IgdGhlIFBIWSBwYWNrYWdlIHdpbGwgYmVcbiBcdFx0XHRcdCAqIGluY3JlbWVudGVkIGxhdGVyIHdoZW4gUEhZIGpvaW4gdGhlIFBhY2thZ2UuXG4gXHRcdFx0XHQgKi9cbiBcdFx0XHRcdG9mX25vZGVfcHV0KGNoaWxkKTtcbi1cdFx0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdFx0fVxuIFxuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTM4Miw2ICYjNDM7Mzg1LDExIEBAIHN0YXRpYyBpbnQgb2ZfbWRpb2J1c19maW5kX3BoeShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGFkZHIgPT0gbWRpb2Rldi1cdTAwM2VhZGRyKSB7XG4mIzQzO1x0XHRcdGlmIChvZl9ub2RlX3Rlc3RfYW5kX3NldF9mbGFnKGNoaWxkLCBPRl9QT1BVTEFURUQpKSB7XG4mIzQzO1x0XHRcdFx0b2Zfbm9kZV9wdXQoY2hpbGQpO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4gXHRcdFx0ZGV2aWNlX3NldF9ub2RlKGRldiwgb2ZfZndub2RlX2hhbmRsZShjaGlsZCkpO1xuIFx0XHRcdC8qIFRoZSByZWZjb3VudCBvbiBcJiMzNDtjaGlsZFwmIzM0OyBpcyBwYXNzZWQgdG8gdGhlIG1kaW9cbiBcdFx0XHQgKiBkZXZpY2UuIERvIF9ub3RfIHVzZSBvZl9ub2RlX3B1dChjaGlsZCkgaGVyZS5cbkBAIC0zOTMsMjIgJiM0Mzs0MDEsMjYgQEAgc3RhdGljIGludCBvZl9tZGlvYnVzX2ZpbmRfcGh5KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxuIFx0cmV0dXJuIC1FTk9ERVY7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG9mX21kaW9idXNfbGlua19tZGlvZGV2KHN0cnVjdCBtaWlfYnVzICpidXMsXG4tXHRcdFx0XHQgICAgc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuJiM0MztzdGF0aWMgaW50IG9mX21kaW9idXNfbGlua19tZGlvZGV2KHN0cnVjdCBtaWlfYnVzICpidXMsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2O1xuIFxuIFx0aWYgKGRldi1cdTAwM2VvZl9ub2RlIHx8ICFidXMtXHUwMDNlZGV2Lm9mX25vZGUpXG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuLVx0b2ZfbWRpb2J1c19maW5kX3BoeShkZXYsIG1kaW9kZXYsIGJ1cy1cdTAwM2VkZXYub2Zfbm9kZSk7XG4mIzQzO1x0cmV0dXJuIG9mX21kaW9idXNfZmluZF9waHkoZGV2LCBtZGlvZGV2LCBidXMtXHUwMDNlZGV2Lm9mX25vZGUpO1xuIH1cbiAjZW5kaWZcbiBcbi1zdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBjNDUpXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGh5X2RldmljZSAqX19tZGlvYnVzX3NjYW4oc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsXG4mIzQzO1x0XHRcdFx0XHQgYm9vbCBjNDUpXG4ge1xuIFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IEVSUl9QVFIoLUVOT0RFVik7XG4gXHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlO1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfT0ZfTURJTylcbiYjNDM7XHRib29sIG9mX25vZGVfcG9wdWxhdGVkID0gZmFsc2U7XG4mIzQzOyNlbmRpZlxuIFx0Y2hhciBub2RlX25hbWVbMTZdO1xuIFx0aW50IGVycjtcbiBcbkBAIC00MjAsNyAmIzQzOzQzMiwxMiBAQCBzdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBjNDUpXG4gXHQvKiBGb3IgRFQsIHNlZSBpZiB0aGUgYXV0by1wcm9iZWQgcGh5IGhhcyBhIGNvcnJlc3BvbmRpbmcgY2hpbGRcbiBcdCAqIGluIHRoZSBidXMgbm9kZSwgYW5kIHNldCB0aGUgb2Zfbm9kZSBwb2ludGVyIGluIHRoaXMgY2FzZS5cbiBcdCAqL1xuLVx0b2ZfbWRpb2J1c19saW5rX21kaW9kZXYoYnVzLCBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbyk7XG4mIzQzO1x0ZXJyID0gb2ZfbWRpb2J1c19saW5rX21kaW9kZXYoYnVzLCBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbyk7XG4mIzQzO1x0aWYgKGVyciA9PSAtRUJVU1kpIHtcbiYjNDM7XHRcdHBoeV9kZXZpY2VfZnJlZShwaHlkZXYpO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XG4mIzQzO1x0fVxuJiM0MztcdG9mX25vZGVfcG9wdWxhdGVkID0gISFwaHlkZXYtXHUwMDNlbWRpby5kZXYub2Zfbm9kZTtcbiAjZW5kaWZcbiBcbiBcdC8qIFNlYXJjaCBmb3IgYSBzd25vZGUgZm9yIHRoZSBwaHkgaW4gdGhlIHN3bm9kZSBoaWVyYXJjaHkgb2YgdGhlIGJ1cy5cbkBAIC00MzcsNiAmIzQzOzQ1NCwxMSBAQCBzdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBjNDUpXG4gXG4gXHRlcnIgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeWRldik7XG4gXHRpZiAoZXJyKSB7XG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19PRl9NRElPKVxuJiM0MztcdFx0aWYgKG9mX25vZGVfcG9wdWxhdGVkKVxuJiM0MztcdFx0XHRvZl9ub2RlX2NsZWFyX2ZsYWcocGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGUsXG4mIzQzO1x0XHRcdFx0XHQgICBPRl9QT1BVTEFURUQpO1xuJiM0MzsjZW5kaWZcbiBcdFx0cGh5X2RldmljZV9mcmVlKHBoeWRldik7XG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuIFx0fVxuQEAgLTQ1OCw3ICYjNDM7NDgwLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RldmljZSAqbWRpb2J1c19zY2FuKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGM0NSlcbiAgKi9cbiBzdHJ1Y3QgcGh5X2RldmljZSAqbWRpb2J1c19zY2FuX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcbiB7XG4tXHRyZXR1cm4gbWRpb2J1c19zY2FuKGJ1cywgYWRkciwgZmFsc2UpO1xuJiM0MztcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKGJ1cywgZmFsc2UpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuJiM0MztcbiYjNDM7XHRwaHlkZXYgPSBfX21kaW9idXNfc2NhbihidXMsIGFkZHIsIGZhbHNlKTtcbiYjNDM7XHRtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kKGJ1cywgZmFsc2UpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGh5ZGV2O1xuIH1cbiBFWFBPUlRfU1lNQk9MKG1kaW9idXNfc2Nhbl9jMjIpO1xuIFxuQEAgLTQ3Niw3ICYjNDM7NTA4LDcgQEAgRVhQT1JUX1NZTUJPTChtZGlvYnVzX3NjYW5fYzIyKTtcbiAgKi9cbiBzdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2Nhbl9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXG4ge1xuLVx0cmV0dXJuIG1kaW9idXNfc2NhbihidXMsIGFkZHIsIHRydWUpO1xuJiM0MztcdHJldHVybiBfX21kaW9idXNfc2NhbihidXMsIGFkZHIsIHRydWUpO1xuIH1cbiBcbiBzdGF0aWMgaW50IG1kaW9idXNfc2Nhbl9idXNfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMpXG5AQCAtNDg3LDcgJiM0Mzs1MTksNyBAQCBzdGF0aWMgaW50IG1kaW9idXNfc2Nhbl9idXNfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMpXG4gXHRcdGlmICgoYnVzLVx1MDAzZXBoeV9tYXNrIFx1MDAyNiBCSVQoaSkpID09IDApIHtcbiBcdFx0XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuIFxuLVx0XHRcdHBoeWRldiA9IG1kaW9idXNfc2Nhbl9jMjIoYnVzLCBpKTtcbiYjNDM7XHRcdFx0cGh5ZGV2ID0gX19tZGlvYnVzX3NjYW4oYnVzLCBpLCBmYWxzZSk7XG4gXHRcdFx0aWYgKElTX0VSUihwaHlkZXYpIFx1MDAyNlx1MDAyNiAoUFRSX0VSUihwaHlkZXYpICE9IC1FTk9ERVYpKVxuIFx0XHRcdFx0cmV0dXJuIFBUUl9FUlIocGh5ZGV2KTtcbiBcdFx0fVxuQEAgLTUwNCw3ICYjNDM7NTM2LDcgQEAgc3RhdGljIGludCBtZGlvYnVzX3NjYW5fYnVzX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxuIFx0XHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG4gXG4gXHRcdFx0LyogRG9uJiMzOTt0IHNjYW4gQzQ1IGlmIHdlIGFscmVhZHkgaGF2ZSBhIEMyMiBkZXZpY2UgKi9cbi1cdFx0XHRpZiAoYnVzLVx1MDAzZW1kaW9fbWFwW2ldKVxuJiM0MztcdFx0XHRpZiAobWRpb2J1c19pc19yZWdpc3RlcmVkX2RldmljZShidXMsIGkpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0cGh5ZGV2ID0gbWRpb2J1c19zY2FuX2M0NShidXMsIGkpO1xuQEAgLTUzNiw2ICYjNDM7NTY4LDQ0IEBAIHN0YXRpYyBib29sIG1kaW9idXNfcHJldmVudF9jNDVfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgbWRpb2J1c19zdG9wX2RldmljZV9jaGFuZ2VzKHN0cnVjdCBtaWlfYnVzICpidXMpXG4mIzQzO3tcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7XHRidXMtXHUwMDNlc3RhdGUgPSBNRElPQlVTX1VOUkVHSVNURVJJTkc7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0d2FpdF9ldmVudChidXMtXHUwMDNlbWRpb19tYXBfd2FpdCwgIVJFQURfT05DRShidXMtXHUwMDNlbWRpb19tYXBfb3BzKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1kaW9idXNfcmVtb3ZlX2RldmljZXMoc3RydWN0IG1paV9idXMgKmJ1cylcbiYjNDM7e1xuJiM0MztcdExJU1RfSEVBRChyZW1vdmVkKTtcbiYjNDM7XHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsICpuZXh0O1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBQSFlfTUFYX0FERFI7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRtZGlvZGV2ID0gYnVzLVx1MDAzZW1kaW9fbWFwW2ldO1xuJiM0MztcdFx0aWYgKCFtZGlvZGV2KVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRtZGlvZGV2LVx1MDAzZWRldmljZV9yZW1vdmUobWRpb2Rldik7XG4mIzQzO1x0XHRtZGlvZGV2LVx1MDAzZWRldmljZV9mcmVlKG1kaW9kZXYpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4mIzQzO1x0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfcmV0aXJlZCwgXHUwMDI2cmVtb3ZlZCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1kaW9kZXYsIG5leHQsIFx1MDAyNnJlbW92ZWQsIHJldGlyZWRfbm9kZSkge1xuJiM0MztcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZtZGlvZGV2LVx1MDAzZXJldGlyZWRfbm9kZSk7XG4mIzQzO1x0XHRtZGlvX2RldmljZV9wdXQobWRpb2Rldik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7XHRidXMtXHUwMDNlc3RhdGUgPSBNRElPQlVTX1VOUkVHSVNURVJFRDtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIF9fbWRpb2J1c19yZWdpc3RlciAtIGJyaW5nIHVwIGFsbCB0aGUgUEhZcyBvbiBhIGdpdmVuIGJ1cyBhbmQgYXR0YWNoIHRoZW0gdG8gYnVzXG4gICogQGJ1czogdGFyZ2V0IG1paV9idXNcbkBAIC01NTIsMTAgJiM0Mzs2MjIsOSBAQCBzdGF0aWMgYm9vbCBtZGlvYnVzX3ByZXZlbnRfYzQ1X3NjYW4oc3RydWN0IG1paV9idXMgKmJ1cylcbiAgKi9cbiBpbnQgX19tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICpidXMsIHN0cnVjdCBtb2R1bGUgKm93bmVyKVxuIHtcbi1cdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldjtcbiBcdHN0cnVjdCBncGlvX2Rlc2MgKmdwaW9kO1xuIFx0Ym9vbCBwcmV2ZW50X2M0NV9zY2FuO1xuLVx0aW50IGksIGVycjtcbiYjNDM7XHRpbnQgZXJyO1xuIFxuIFx0aWYgKCFidXMgfHwgIWJ1cy1cdTAwM2VuYW1lKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC01OTYsNyAmIzQzOzY2NSw5IEBAIGludCBfX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cywgc3RydWN0IG1vZHVsZSAqb3duZXIpXG4gXHQgKlxuIFx0ICogU3RhdGUgd2lsbCBiZSB1cGRhdGVkIGxhdGVyIGluIHRoaXMgZnVuY3Rpb24gaW4gY2FzZSBvZiBzdWNjZXNzXG4gXHQgKi9cbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiBcdGJ1cy1cdTAwM2VzdGF0ZSA9IE1ESU9CVVNfVU5SRUdJU1RFUkVEO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4gXG4gXHRlcnIgPSBkZXZpY2VfcmVnaXN0ZXIoXHUwMDI2YnVzLVx1MDAzZWRldik7XG4gXHRpZiAoZXJyKSB7XG5AQCAtNjEzLDggJiM0Mzs2ODQsNyBAQCBpbnQgX19tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICpidXMsIHN0cnVjdCBtb2R1bGUgKm93bmVyKVxuIFx0XHRlcnIgPSBkZXZfZXJyX3Byb2JlKFx1MDAyNmJ1cy1cdTAwM2VkZXYsIFBUUl9FUlIoZ3Bpb2QpLFxuIFx0XHRcdFx0ICAgIFwmIzM0O21paV9idXMgJXMgY291bGRuJiMzOTt0IGdldCByZXNldCBHUElPXFxuXCYjMzQ7LFxuIFx0XHRcdFx0ICAgIGJ1cy1cdTAwM2VpZCk7XG4tXHRcdGRldmljZV9kZWwoXHUwMDI2YnVzLVx1MDAzZWRldik7XG4tXHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHRnb3RvIGVycm9yX3Jlc2V0X2dwaW9kO1xuIFx0fSBlbHNlXHRpZiAoZ3Bpb2QpIHtcbiBcdFx0YnVzLVx1MDAzZXJlc2V0X2dwaW9kID0gZ3Bpb2Q7XG4gXHRcdGZzbGVlcChidXMtXHUwMDNlcmVzZXRfZGVsYXlfdXMpO1xuQEAgLTYyOSw2ICYjNDM7Njk5LDEwIEBAIGludCBfX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cywgc3RydWN0IG1vZHVsZSAqb3duZXIpXG4gXHRcdFx0Z290byBlcnJvcl9yZXNldF9ncGlvZDtcbiBcdH1cbiBcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7XHRidXMtXHUwMDNlc3RhdGUgPSBNRElPQlVTX1JFR0lTVEVSSU5HO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4mIzQzO1xuIFx0aWYgKGJ1cy1cdTAwM2VyZWFkKSB7XG4gXHRcdGVyciA9IG1kaW9idXNfc2Nhbl9idXNfYzIyKGJ1cyk7XG4gXHRcdGlmIChlcnIpXG5AQCAtNjQzLDIwICYjNDM7NzE3LDE3IEBAIGludCBfX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cywgc3RydWN0IG1vZHVsZSAqb3duZXIpXG4gXHRcdFx0Z290byBlcnJvcjtcbiBcdH1cbiBcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiBcdGJ1cy1cdTAwM2VzdGF0ZSA9IE1ESU9CVVNfUkVHSVNURVJFRDtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuIFx0ZGV2X2RiZyhcdTAwMjZidXMtXHUwMDNlZGV2LCBcJiMzNDtwcm9iZWRcXG5cJiMzNDspO1xuIFx0cmV0dXJuIDA7XG4gXG4gZXJyb3I6XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBQSFlfTUFYX0FERFI7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdG1kaW9kZXYgPSBidXMtXHUwMDNlbWRpb19tYXBbaV07XG4tXHRcdGlmICghbWRpb2Rldilcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0bWRpb2Rldi1cdTAwM2VkZXZpY2VfcmVtb3ZlKG1kaW9kZXYpO1xuLVx0XHRtZGlvZGV2LVx1MDAzZWRldmljZV9mcmVlKG1kaW9kZXYpO1xuLVx0fVxuIGVycm9yX3Jlc2V0X2dwaW9kOlxuJiM0MztcdG1kaW9idXNfc3RvcF9kZXZpY2VfY2hhbmdlcyhidXMpO1xuJiM0MztcdG1kaW9idXNfcmVtb3ZlX2RldmljZXMoYnVzKTtcbiYjNDM7XG4gXHQvKiBQdXQgUEhZcyBpbiBSRVNFVCB0byBzYXZlIHBvd2VyICovXG4gXHRpZiAoYnVzLVx1MDAzZXJlc2V0X2dwaW9kKVxuIFx0XHRncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoYnVzLVx1MDAzZXJlc2V0X2dwaW9kLCAxKTtcbkBAIC02NjgsMjEgJiM0Mzs3MzksMTEgQEAgRVhQT1JUX1NZTUJPTChfX21kaW9idXNfcmVnaXN0ZXIpO1xuIFxuIHZvaWQgbWRpb2J1c191bnJlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICpidXMpXG4ge1xuLVx0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2O1xuLVx0aW50IGk7XG4tXG4gXHRpZiAoV0FSTl9PTl9PTkNFKGJ1cy1cdTAwM2VzdGF0ZSAhPSBNRElPQlVTX1JFR0lTVEVSRUQpKVxuIFx0XHRyZXR1cm47XG4tXHRidXMtXHUwMDNlc3RhdGUgPSBNRElPQlVTX1VOUkVHSVNURVJFRDtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIFBIWV9NQVhfQUREUjsgaSYjNDM7JiM0MzspIHtcbi1cdFx0bWRpb2RldiA9IGJ1cy1cdTAwM2VtZGlvX21hcFtpXTtcbi1cdFx0aWYgKCFtZGlvZGV2KVxuLVx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRtZGlvZGV2LVx1MDAzZWRldmljZV9yZW1vdmUobWRpb2Rldik7XG4tXHRcdG1kaW9kZXYtXHUwMDNlZGV2aWNlX2ZyZWUobWRpb2Rldik7XG4tXHR9XG4mIzQzO1x0bWRpb2J1c19zdG9wX2RldmljZV9jaGFuZ2VzKGJ1cyk7XG4mIzQzO1x0bWRpb2J1c19yZW1vdmVfZGV2aWNlcyhidXMpO1xuIFxuIFx0LyogUHV0IFBIWXMgaW4gUkVTRVQgdG8gc2F2ZSBwb3dlciAqL1xuIFx0aWYgKGJ1cy1cdTAwM2VyZXNldF9ncGlvZClcbkBAIC03MDIsOCAmIzQzOzc2MywxMSBAQCBFWFBPUlRfU1lNQk9MKG1kaW9idXNfdW5yZWdpc3Rlcik7XG4gICovXG4gdm9pZCBtZGlvYnVzX2ZyZWUoc3RydWN0IG1paV9idXMgKmJ1cylcbiB7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4mIzQzO1xuIFx0LyogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBlcnJvciBoYW5kbGluZyBpbiBkcml2ZXJzLiAqL1xuIFx0aWYgKGJ1cy1cdTAwM2VzdGF0ZSA9PSBNRElPQlVTX0FMTE9DQVRFRCkge1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiBcdFx0a2ZyZWUoYnVzKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuQEAgLTcxMSw2ICYjNDM7Nzc1LDcgQEAgdm9pZCBtZGlvYnVzX2ZyZWUoc3RydWN0IG1paV9idXMgKmJ1cylcbiBcdFdBUk4oYnVzLVx1MDAzZXN0YXRlICE9IE1ESU9CVVNfVU5SRUdJU1RFUkVELFxuIFx0ICAgICBcJiMzNDslczogbm90IGluIFVOUkVHSVNURVJFRCBzdGF0ZVxcblwmIzM0OywgYnVzLVx1MDAzZWlkKTtcbiBcdGJ1cy1cdTAwM2VzdGF0ZSA9IE1ESU9CVVNfUkVMRUFTRUQ7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiBcbiBcdHB1dF9kZXZpY2UoXHUwMDI2YnVzLVx1MDAzZWRldik7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmNcbmluZGV4IDA2MTUxZjIwNzEzNDYuLjNiMTllODMxNWY2MTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmNcbkBAIC0xNSw2ICYjNDM7MTUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21paS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmVzZXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuQEAgLTMzLDEyICYjNDM7MzQsMTYgQEBcbiBzdGF0aWMgaW50IG1kaW9fZGV2aWNlX3JlZ2lzdGVyX3Jlc2V0KHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbiB7XG4gXHRzdHJ1Y3QgcmVzZXRfY29udHJvbCAqcmVzZXQ7XG4mIzQzO1x0aW50IGVycjtcbiBcbiBcdC8qIERlYXNzZXJ0IHRoZSBvcHRpb25hbCByZXNldCBzaWduYWwgKi9cbiBcdG1kaW9kZXYtXHUwMDNlcmVzZXRfZ3BpbyA9IGdwaW9kX2dldF9vcHRpb25hbChcdTAwMjZtZGlvZGV2LVx1MDAzZWRldixcbiBcdFx0XHRcdFx0XHQgXCYjMzQ7cmVzZXRcJiMzNDssIEdQSU9EX09VVF9MT1cpO1xuLVx0aWYgKElTX0VSUihtZGlvZGV2LVx1MDAzZXJlc2V0X2dwaW8pKVxuLVx0XHRyZXR1cm4gUFRSX0VSUihtZGlvZGV2LVx1MDAzZXJlc2V0X2dwaW8pO1xuJiM0MztcdGlmIChJU19FUlIobWRpb2Rldi1cdTAwM2VyZXNldF9ncGlvKSkge1xuJiM0MztcdFx0ZXJyID0gUFRSX0VSUihtZGlvZGV2LVx1MDAzZXJlc2V0X2dwaW8pO1xuJiM0MztcdFx0bWRpb2Rldi1cdTAwM2VyZXNldF9ncGlvID0gTlVMTDtcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKG1kaW9kZXYtXHUwMDNlcmVzZXRfZ3BpbylcbiBcdFx0Z3Bpb2Rfc2V0X2NvbnN1bWVyX25hbWUobWRpb2Rldi1cdTAwM2VyZXNldF9ncGlvLCBcJiMzNDtQSFkgcmVzZXRcJiMzNDspO1xuQEAgLTExNiw2ICYjNDM7MTIxLDEzIEBAIHN0YXRpYyB2b2lkIG1kaW9fZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0a2ZyZWUodG9fbWRpb19kZXZpY2UoZGV2KSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IF9fbWRpb19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbWRpb19kZXZpY2VfcmVtb3ZlX2R5bmFtaWMoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fbWRpb19kZXZpY2VfcmVtb3ZlKG1kaW9kZXYsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb19kZXZpY2VfY3JlYXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyKVxuIHtcbiBcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldjtcbkBAIC0xMzAsOSAmIzQzOzE0MiwxMSBAQCBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9fZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcbiBcdG1kaW9kZXYtXHUwMDNlZGV2LmJ1cyA9IFx1MDAyNm1kaW9fYnVzX3R5cGU7XG4gXHRtZGlvZGV2LVx1MDAzZWRldmljZV9mcmVlID0gbWRpb19kZXZpY2VfZnJlZTtcbiBcdG1kaW9kZXYtXHUwMDNlZGV2aWNlX3JlbW92ZSA9IG1kaW9fZGV2aWNlX3JlbW92ZTtcbiYjNDM7XHRtZGlvZGV2LVx1MDAzZWRldmljZV9yZW1vdmVfZHluYW1pYyA9IG1kaW9fZGV2aWNlX3JlbW92ZV9keW5hbWljO1xuIFx0bWRpb2Rldi1cdTAwM2VidXMgPSBidXM7XG4gXHRtZGlvZGV2LVx1MDAzZWFkZHIgPSBhZGRyO1xuIFx0bWRpb2Rldi1cdTAwM2VyZXNldF9zdGF0ZSA9IC0xO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNm1kaW9kZXYtXHUwMDNlcmV0aXJlZF9ub2RlKTtcbiBcbiBcdGRldl9zZXRfbmFtZShcdTAwMjZtZGlvZGV2LVx1MDAzZWRldiwgUEhZX0lEX0ZNVCwgYnVzLVx1MDAzZWlkLCBhZGRyKTtcbiBcbkBAIC0xNTksMTkgJiM0MzsxNzMsMjcgQEAgaW50IG1kaW9fZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdGVyciA9IGRldmljZV9hZGQoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuLVx0aWYgKGVycikge1xuJiM0MztcdGlmIChlcnIpXG4gXHRcdHByX2VycihcJiMzNDtNRElPICVkIGZhaWxlZCB0byBhZGRcXG5cJiMzNDssIG1kaW9kZXYtXHUwMDNlYWRkcik7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4gXG4tIG91dDpcbi1cdG1kaW9idXNfdW5yZWdpc3Rlcl9kZXZpY2UobWRpb2Rldik7XG4tXHRyZXR1cm4gZXJyO1xuJiM0MztcdHJldHVybiBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lKG1kaW9kZXYsIGVycik7XG4gfVxuIEVYUE9SVF9TWU1CT0wobWRpb19kZXZpY2VfcmVnaXN0ZXIpO1xuIFxuJiM0MztzdGF0aWMgaW50IF9fbWRpb19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbWRpb2J1c19iZWdpbl9yZW1vdmUobWRpb2RldiwgZHluYW1pYyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGRldmljZV9kZWwoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuJiM0MztcdG1kaW9idXNfZmluaXNoX3JlbW92ZShtZGlvZGV2LCBkeW5hbWljKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogbWRpb19kZXZpY2VfcmVtb3ZlIC0gUmVtb3ZlIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIG1kaW8gZGV2aWNlIGZyb20gdGhlXG4gICpcdFx0XHRNRElPIGJ1c1xuQEAgLTE4Myw0MiAmIzQzOzIwNSwyMTEgQEAgRVhQT1JUX1NZTUJPTChtZGlvX2RldmljZV9yZWdpc3Rlcik7XG4gICovXG4gdm9pZCBtZGlvX2RldmljZV9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuIHtcbi1cdGRldmljZV9kZWwoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuLVx0bWRpb2J1c191bnJlZ2lzdGVyX2RldmljZShtZGlvZGV2KTtcbiYjNDM7XHRfX21kaW9fZGV2aWNlX3JlbW92ZShtZGlvZGV2LCBmYWxzZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0wobWRpb19kZXZpY2VfcmVtb3ZlKTtcbiBcbiBpbnQgbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpb2Rldi1cdTAwM2VidXM7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKG1kaW9kZXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbWFwW21kaW9kZXYtXHUwMDNlYWRkcl0pXG4tXHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4mIzQzO1x0aWYgKGJ1cy1cdTAwM2VzdGF0ZSAhPSBNRElPQlVTX1JFR0lTVEVSSU5HIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBidXMtXHUwMDNlc3RhdGUgIT0gTURJT0JVU19SRUdJU1RFUkVEKSB7XG4mIzQzO1x0XHRlcnIgPSAtRU5PREVWO1xuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoYnVzLVx1MDAzZW1kaW9fbWFwX3JlbW92YWxzKSB7XG4mIzQzO1x0XHRlcnIgPSAtRUJVU1k7XG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoYnVzLVx1MDAzZW1kaW9fbWFwW21kaW9kZXYtXHUwMDNlYWRkcl0gfHxcbiYjNDM7XHQgICAgYnVzLVx1MDAzZW1kaW9fbWFwX3BlbmRpbmcgXHUwMDI2IEJJVChtZGlvZGV2LVx1MDAzZWFkZHIpKSB7XG4mIzQzO1x0XHRlcnIgPSAtRUJVU1k7XG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRidXMtXHUwMDNlbWRpb19tYXBfcGVuZGluZyB8PSBCSVQobWRpb2Rldi1cdTAwM2VhZGRyKTtcbiYjNDM7XHRidXMtXHUwMDNlbWRpb19tYXBfb3BzJiM0MzsmIzQzOztcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuIFxuIFx0aWYgKG1kaW9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IE1ESU9fREVWSUNFX0ZMQUdfUEhZKSB7XG4gXHRcdGVyciA9IG1kaW9fZGV2aWNlX3JlZ2lzdGVyX3Jlc2V0KG1kaW9kZXYpO1xuLVx0XHRpZiAoZXJyKVxuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lKG1kaW9kZXYsIGVycik7XG4gXHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0LyogQXNzZXJ0IHRoZSByZXNldCBzaWduYWwgKi9cbiBcdFx0bWRpb19kZXZpY2VfcmVzZXQobWRpb2RldiwgMSk7XG4gXHR9XG4gXG4tXHRtZGlvZGV2LVx1MDAzZWJ1cy1cdTAwM2VtZGlvX21hcFttZGlvZGV2LVx1MDAzZWFkZHJdID0gbWRpb2RldjtcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7XHQvKiBUZWFyZG93biB3YWl0cyBmb3IgdGhpcyByZWdpc3RyYXRpb24gYmVmb3JlIGNvbnN1bWluZyB0aGUgbWFwLiAqL1xuJiM0MztcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcFttZGlvZGV2LVx1MDAzZWFkZHJdLCBtZGlvZGV2KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuIFxuIFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4taW50IG1kaW9idXNfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuJiM0MzsvKipcbiYjNDM7ICogbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luIC0gc3RhcnQgY2hhbmdpbmcgZGV2aWNlcyBvbiBhIHJlZ2lzdGVyZWQgYnVzXG4mIzQzOyAqIEBidXM6IE1ESU8gYnVzIHRoYXQgd2lsbCBiZSBzY2FubmVkIG9yIGNoYW5nZWRcbiYjNDM7ICogQHJlbW92aW5nOiB3aGV0aGVyIFBIWSBhdHRhY2htZW50IG11c3QgYmUgYmxvY2tlZCBkdXJpbmcgdGhlIGNoYW5nZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHplcm8gb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgd2hlbiB0aGUgYnVzIGlzIHVuYXZhaWxhYmxlXG4mIzQzOyAqL1xuJiM0MztpbnQgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKHN0cnVjdCBtaWlfYnVzICpidXMsIGJvb2wgcmVtb3ZpbmcpXG4ge1xuLVx0aWYgKG1kaW9kZXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbWFwW21kaW9kZXYtXHUwMDNlYWRkcl0gIT0gbWRpb2Rldilcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuJiM0MztcdGlmIChidXMtXHUwMDNlc3RhdGUgIT0gTURJT0JVU19SRUdJU1RFUkVEKSB7XG4mIzQzO1x0XHRlcnIgPSAtRU5PREVWO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRidXMtXHUwMDNlbWRpb19tYXBfb3BzJiM0MzsmIzQzOztcbiYjNDM7XHRcdGlmIChyZW1vdmluZylcbiYjNDM7XHRcdFx0YnVzLVx1MDAzZW1kaW9fbWFwX3JlbW92YWxzJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4pO1xuIFxuLVx0bWRpb19kZXZpY2VfdW5yZWdpc3Rlcl9yZXNldChtZGlvZGV2KTtcbiYjNDM7c3RhdGljIHZvaWQgbWRpb2J1c19vcGVyYXRpb25fZG9uZV9sb2NrZWQoc3RydWN0IG1paV9idXMgKmJ1cylcbiYjNDM7e1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuIFxuLVx0bWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19tYXBbbWRpb2Rldi1cdTAwM2VhZGRyXSA9IE5VTEw7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghYnVzLVx1MDAzZW1kaW9fbWFwX29wcykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0YnVzLVx1MDAzZW1kaW9fbWFwX29wcy0tO1xuJiM0MztcdGlmICghYnVzLVx1MDAzZW1kaW9fbWFwX29wcylcbiYjNDM7XHRcdHdha2VfdXBfYWxsKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF93YWl0KTtcbiYjNDM7fVxuIFxuLVx0cmV0dXJuIDA7XG4mIzQzOy8qKlxuJiM0MzsgKiBtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kIC0gZmluaXNoIGNoYW5naW5nIGRldmljZXMgb24gYW4gTURJTyBidXNcbiYjNDM7ICogQGJ1czogTURJTyBidXMgcHJldmlvdXNseSBwYXNzZWQgdG8gbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKClcbiYjNDM7ICogQHJlbW92aW5nOiB2YWx1ZSBwYXNzZWQgdG8gbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKClcbiYjNDM7ICovXG4mIzQzO3ZvaWQgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2VuZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBib29sIHJlbW92aW5nKVxuJiM0Mzt7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4mIzQzO1x0aWYgKHJlbW92aW5nKSB7XG4mIzQzO1x0XHRpZiAoIVdBUk5fT05fT05DRSghYnVzLVx1MDAzZW1kaW9fbWFwX3JlbW92YWxzKSlcbiYjNDM7XHRcdFx0YnVzLVx1MDAzZW1kaW9fbWFwX3JlbW92YWxzLS07XG4mIzQzO1x0fVxuJiM0MztcdG1kaW9idXNfb3BlcmF0aW9uX2RvbmVfbG9ja2VkKGJ1cyk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1kaW9idXNfb3BlcmF0aW9uX2RvbmUoc3RydWN0IG1paV9idXMgKmJ1cylcbiYjNDM7e1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuJiM0MztcdG1kaW9idXNfb3BlcmF0aW9uX2RvbmVfbG9ja2VkKGJ1cyk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWRpb2J1c191bnB1Ymxpc2hfZGV2aWNlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBtZGlvZGV2LVx1MDAzZWJ1cztcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChidXMtXHUwMDNlbWRpb19tYXBbbWRpb2Rldi1cdTAwM2VhZGRyXSA9PSBtZGlvZGV2KVxuJiM0MztcdFx0V1JJVEVfT05DRShidXMtXHUwMDNlbWRpb19tYXBbbWRpb2Rldi1cdTAwM2VhZGRyXSwgTlVMTCk7XG4mIzQzO1x0aWYgKG1kaW9kZXYtXHUwMDNlZGV2Lm9mX25vZGUpXG4mIzQzO1x0XHRvZl9ub2RlX2NsZWFyX2ZsYWcobWRpb2Rldi1cdTAwM2VkZXYub2Zfbm9kZSwgT0ZfUE9QVUxBVEVEKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBpbnQgZXJyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1paV9idXMgKmJ1cyA9IG1kaW9kZXYtXHUwMDNlYnVzO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCEoYnVzLVx1MDAzZW1kaW9fbWFwX3BlbmRpbmcgXHUwMDI2IEJJVChtZGlvZGV2LVx1MDAzZWFkZHIpKSkpXG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRtZGlvYnVzX3VucHVibGlzaF9kZXZpY2UobWRpb2Rldik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0V0FSTl9PTl9PTkNFKGJ1cy1cdTAwM2VtZGlvX21hcFttZGlvZGV2LVx1MDAzZWFkZHJdICE9IG1kaW9kZXYpO1xuJiM0MztcbiYjNDM7XHRidXMtXHUwMDNlbWRpb19tYXBfcGVuZGluZyBcdTAwMjY9IH5CSVQobWRpb2Rldi1cdTAwM2VhZGRyKTtcbiYjNDM7XG4mIzQzO291dF91bmxvY2s6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRpZiAobWRpb2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgTURJT19ERVZJQ0VfRkxBR19QSFkpIHtcbiYjNDM7XHRcdFx0bWRpb19kZXZpY2VfcmVzZXQobWRpb2RldiwgMSk7XG4mIzQzO1x0XHRcdG1kaW9fZGV2aWNlX3VucmVnaXN0ZXJfcmVzZXQobWRpb2Rldik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdG1kaW9idXNfb3BlcmF0aW9uX2RvbmUoYnVzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG1kaW9idXNfYmVnaW5fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1paV9idXMgKmJ1cyA9IG1kaW9kZXYtXHUwMDNlYnVzO1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7XHRpZiAoZHluYW1pYyBcdTAwMjZcdTAwMjYgKGJ1cy1cdTAwM2VzdGF0ZSA9PSBNRElPQlVTX1VOUkVHSVNURVJFRCB8fFxuJiM0MztcdFx0XHRidXMtXHUwMDNlc3RhdGUgPT0gTURJT0JVU19SRUxFQVNFRCkpIHtcbiYjNDM7XHRcdGVyciA9IC1FTk9ERVY7XG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChidXMtXHUwMDNlbWRpb19tYXBfcGVuZGluZyBcdTAwMjYgQklUKG1kaW9kZXYtXHUwMDNlYWRkcikpIHtcbiYjNDM7XHRcdGVyciA9IC1FQlVTWTtcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChidXMtXHUwMDNlbWRpb19tYXBbbWRpb2Rldi1cdTAwM2VhZGRyXSAhPSBtZGlvZGV2KSB7XG4mIzQzO1x0XHRlcnIgPSAtRU5PREVWO1xuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGR5bmFtaWMgXHUwMDI2XHUwMDI2IG1kaW9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IE1ESU9fREVWSUNFX0ZMQUdfUEhZIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICB0b19waHlfZGV2aWNlKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2KS1cdTAwM2VhdHRhY2hlZCkge1xuJiM0MztcdFx0ZXJyID0gLUVCVVNZO1xuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWRpb2J1c191bnB1Ymxpc2hfZGV2aWNlKG1kaW9kZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoZHluYW1pYykge1xuJiM0MztcdFx0bWRpb19kZXZpY2VfZ2V0KG1kaW9kZXYpO1xuJiM0MztcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZtZGlvZGV2LVx1MDAzZXJldGlyZWRfbm9kZSwgXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX3JldGlyZWQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO291dF91bmxvY2s6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIG1kaW9idXNfZmluaXNoX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgZHluYW1pYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGU7XG4mIzQzO1xuJiM0MztcdGlmIChtZGlvZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBNRElPX0RFVklDRV9GTEFHX1BIWSlcbiYjNDM7XHRcdG1kaW9fZGV2aWNlX3VucmVnaXN0ZXJfcmVzZXQobWRpb2Rldik7XG4mIzQzO1xuJiM0MztcdC8qIERvIG5vdCBrZWVwIGFuIG92ZXJsYXkgbm9kZSBhbGl2ZSB3aXRoIHRoZSByZXRpcmVkIGRldmljZS4gKi9cbiYjNDM7XHRpZiAoZHluYW1pYykge1xuJiM0MztcdFx0Zndub2RlID0gZGV2X2Z3bm9kZShcdTAwMjZtZGlvZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0XHRkZXZpY2Vfc2V0X25vZGUoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYsIE5VTEwpO1xuJiM0MztcdFx0Zndub2RlX2hhbmRsZV9wdXQoZndub2RlKTtcbiYjNDM7XHR9XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5pbmRleCA5NGIyZTg1ZTAwYTM3Li4zYjE4Mjk1N2MzZGU2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuQEAgLTIyNyw2ICYjNDM7MjI3LDggQEAgc3RhdGljIHZvaWQgcGh5X2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdGtmcmVlKHRvX3BoeV9kZXZpY2UoZGV2KSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IF9fcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBkeW5hbWljKTtcbiYjNDM7XG4gc3RhdGljIHZvaWQgcGh5X21kaW9fZGV2aWNlX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4ge1xuIFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbkBAIC0yMzUsNiAmIzQzOzIzNywxNCBAQCBzdGF0aWMgdm9pZCBwaHlfbWRpb19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbiBcdHBoeV9kZXZpY2VfcmVtb3ZlKHBoeWRldik7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHBoeV9tZGlvX2RldmljZV9yZW1vdmVfZHluYW1pYyhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuJiM0MztcbiYjNDM7XHRwaHlkZXYgPSBjb250YWluZXJfb2YobWRpb2Rldiwgc3RydWN0IHBoeV9kZXZpY2UsIG1kaW8pO1xuJiM0MztcdHJldHVybiBfX3BoeV9kZXZpY2VfcmVtb3ZlKHBoeWRldiwgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGdlbnBoeV9kcml2ZXI7XG4gXG4gc3RhdGljIExJU1RfSEVBRChwaHlfZml4dXBfbGlzdCk7XG5AQCAtNzY4LDcgJiM0Mzs3NzgsOSBAQCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5X2RldmljZV9jcmVhdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIHUzMiBwaHlfaWQsXG4gXHRtZGlvZGV2LVx1MDAzZWZsYWdzID0gTURJT19ERVZJQ0VfRkxBR19QSFk7XG4gXHRtZGlvZGV2LVx1MDAzZWRldmljZV9mcmVlID0gcGh5X21kaW9fZGV2aWNlX2ZyZWU7XG4gXHRtZGlvZGV2LVx1MDAzZWRldmljZV9yZW1vdmUgPSBwaHlfbWRpb19kZXZpY2VfcmVtb3ZlO1xuJiM0MztcdG1kaW9kZXYtXHUwMDNlZGV2aWNlX3JlbW92ZV9keW5hbWljID0gcGh5X21kaW9fZGV2aWNlX3JlbW92ZV9keW5hbWljO1xuIFx0bWRpb2Rldi1cdTAwM2VyZXNldF9zdGF0ZSA9IC0xO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNm1kaW9kZXYtXHUwMDNlcmV0aXJlZF9ub2RlKTtcbiBcbiBcdGRldi1cdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XG4gXHRkZXYtXHUwMDNlZHVwbGV4ID0gRFVQTEVYX1VOS05PV047XG5AQCAtMTEyMSwyNSAmIzQzOzExMzMsNDAgQEAgaW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdGVyciA9IHBoeV9zY2FuX2ZpeHVwcyhwaHlkZXYpO1xuIFx0aWYgKGVycikge1xuIFx0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7ZmFpbGVkIHRvIGluaXRpYWxpemVcXG5cJiMzNDspO1xuLVx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdHJldHVybiBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLCBlcnIpO1xuIFx0fVxuIFxuIFx0ZXJyID0gZGV2aWNlX2FkZChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYpO1xuLVx0aWYgKGVycikge1xuJiM0MztcdGlmIChlcnIpXG4gXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtmYWlsZWQgdG8gYWRkXFxuXCYjMzQ7KTtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gbWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbywgZXJyKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX3BoeV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZHluYW1pYylcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IG1kaW9idXNfYmVnaW5fcmVtb3ZlKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLCBkeW5hbWljKTtcbiYjNDM7XHRpZiAoZHluYW1pYyBcdTAwMjZcdTAwMjYgZXJyID09IC1FQlVTWSlcbiYjNDM7XHRcdGRldl93YXJuKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldixcbiYjNDM7XHRcdFx0IFwmIzM0O2Nhbm5vdCByZW1vdmUgYSBQSFkgd2hpbGUgaXQgaXMgYXR0YWNoZWQgb3IgYmVpbmcgcmVnaXN0ZXJlZFxcblwmIzM0Oyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdHVucmVnaXN0ZXJfbWlpX3RpbWVzdGFtcGVyKHBoeWRldi1cdTAwM2VtaWlfdHMpO1xuJiM0MztcdHBzZV9jb250cm9sX3B1dChwaHlkZXYtXHUwMDNlcHNlYyk7XG4mIzQzO1xuJiM0MztcdGRldmljZV9kZWwoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbiBcbi0gb3V0OlxuIFx0LyogQXNzZXJ0IHRoZSByZXNldCBzaWduYWwgKi9cbiBcdHBoeV9kZXZpY2VfcmVzZXQocGh5ZGV2LCAxKTtcbiBcbi1cdG1kaW9idXNfdW5yZWdpc3Rlcl9kZXZpY2UoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8pO1xuLVx0cmV0dXJuIGVycjtcbiYjNDM7XHRtZGlvYnVzX2ZpbmlzaF9yZW1vdmUoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8sIGR5bmFtaWMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4tRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTtcbiBcbiAvKipcbiAgKiBwaHlfZGV2aWNlX3JlbW92ZSAtIFJlbW92ZSBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBwaHkgZGV2aWNlIGZyb20gdGhlIE1ESU8gYnVzXG5AQCAtMTE1MSwxNSAmIzQzOzExNzgsNyBAQCBFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpO1xuICAqL1xuIHZvaWQgcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4tXHR1bnJlZ2lzdGVyX21paV90aW1lc3RhbXBlcihwaHlkZXYtXHUwMDNlbWlpX3RzKTtcbi1cdHBzZV9jb250cm9sX3B1dChwaHlkZXYtXHUwMDNlcHNlYyk7XG4tXG4tXHRkZXZpY2VfZGVsKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldik7XG4tXG4tXHQvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xuLVx0cGh5X2RldmljZV9yZXNldChwaHlkZXYsIDEpO1xuLVxuLVx0bWRpb2J1c191bnJlZ2lzdGVyX2RldmljZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbyk7XG4mIzQzO1x0X19waHlfZGV2aWNlX3JlbW92ZShwaHlkZXYsIGZhbHNlKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlbW92ZSk7XG4gXG5AQCAtMTczNCw2ICYjNDM7MTc1MywzNiBAQCBzdGF0aWMgYm9vbCBwaHlfZHJ2X3N1cHBvcnRzX2lycShjb25zdCBzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2KVxuIFx0cmV0dXJuIHBoeWRydi1cdTAwM2Vjb25maWdfaW50ciBcdTAwMjZcdTAwMjYgcGh5ZHJ2LVx1MDAzZWhhbmRsZV9pbnRlcnJ1cHQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHBoeV9jbGFpbShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW87XG4mIzQzO1x0c3RydWN0IG1paV9idXMgKmJ1cyA9IG1kaW9kZXYtXHUwMDNlYnVzO1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7XHRpZiAoYnVzLVx1MDAzZXN0YXRlICE9IE1ESU9CVVNfUkVHSVNURVJFRCB8fFxuJiM0MztcdCAgICBidXMtXHUwMDNlbWRpb19tYXBfcmVtb3ZhbHMgfHxcbiYjNDM7XHQgICAgYnVzLVx1MDAzZW1kaW9fbWFwW21kaW9kZXYtXHUwMDNlYWRkcl0gIT0gbWRpb2RldiB8fFxuJiM0MztcdCAgICAoYnVzLVx1MDAzZW1kaW9fbWFwX3BlbmRpbmcgXHUwMDI2IEJJVChtZGlvZGV2LVx1MDAzZWFkZHIpKSlcbiYjNDM7XHRcdGVyciA9IC1FTk9ERVY7XG4mIzQzO1x0ZWxzZSBpZiAocGh5ZGV2LVx1MDAzZWF0dGFjaGVkKVxuJiM0MztcdFx0ZXJyID0gLUVCVVNZO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VhdHRhY2hlZCA9IHRydWU7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcGh5X3JlbGVhc2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuJiM0MztcdHBoeWRldi1cdTAwM2VhdHRhY2hlZCA9IGZhbHNlO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogcGh5X2F0dGFjaF9kaXJlY3QgLSBhdHRhY2ggYSBuZXR3b3JrIGRldmljZSB0byBhIGdpdmVuIFBIWSBkZXZpY2UgcG9pbnRlclxuICAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGF0dGFjaFxuQEAgLTE3NTUsNiAmIzQzOzE4MDQsNyBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiBcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuIFx0c3RydWN0IG1vZHVsZSAqbmRldl9vd25lciA9IE5VTEw7XG4mIzQzO1x0Ym9vbCBjbGFpbWVkID0gZmFsc2U7XG4gXHRpbnQgZXJyO1xuIFxuIFx0LyogRm9yIEV0aGVybmV0IGRldmljZSBkcml2ZXJzIHRoYXQgcmVnaXN0ZXIgdGhlaXIgb3duIE1ESU8gYnVzLCB3ZVxuQEAgLTE3NzAsNiAmIzQzOzE4MjAsMTMgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXHR9XG4gXG4gXHRnZXRfZGV2aWNlKGQpO1xuJiM0MztcdGVyciA9IHBoeV9jbGFpbShwaHlkZXYpO1xuJiM0MztcdGlmIChlcnIgPT0gLUVCVVNZKVxuJiM0MztcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwmIzM0O1BIWSBhbHJlYWR5IGF0dGFjaGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIWVycilcbiYjNDM7XHRcdGNsYWltZWQgPSB0cnVlO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycm9yX3B1dF9kZXZpY2U7XG4gXG4gXHQvKiBBc3N1bWUgdGhhdCBpZiB0aGVyZSBpcyBubyBkcml2ZXIsIHRoYXQgaXQgZG9lc24mIzM5O3RcbiBcdCAqIGV4aXN0LCBhbmQgd2Ugc2hvdWxkIHVzZSB0aGUgZ2VucGh5IGRyaXZlci5cbkBAIC0xNzk4LDEyICYjNDM7MTg1NSw2IEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0XHRcdGdvdG8gZXJyb3JfbW9kdWxlX3B1dDtcbiBcdH1cbiBcbi1cdGlmIChwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2KSB7XG4tXHRcdGRldl9lcnIoXHUwMDI2ZGV2LVx1MDAzZWRldiwgXCYjMzQ7UEhZIGFscmVhZHkgYXR0YWNoZWRcXG5cJiMzNDspO1xuLVx0XHRlcnIgPSAtRUJVU1k7XG4tXHRcdGdvdG8gZXJyb3I7XG4tXHR9XG4tXG4gXHRwaHlkZXYtXHUwMDNlcGh5X2xpbmtfY2hhbmdlID0gcGh5X2xpbmtfY2hhbmdlO1xuIFx0aWYgKGRldikge1xuIFx0XHRwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2ID0gZGV2O1xuQEAgLTE4OTksNiAmIzQzOzE5NTAsOCBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiBcdHBoeWRldi1cdTAwM2Vpc19nZW5waHlfZHJpdmVuID0gMDtcbiBcdGQtXHUwMDNlZHJpdmVyID0gTlVMTDtcbiBlcnJvcl9wdXRfZGV2aWNlOlxuJiM0MztcdGlmIChjbGFpbWVkKVxuJiM0MztcdFx0cGh5X3JlbGVhc2UocGh5ZGV2KTtcbiBcdHB1dF9kZXZpY2UoZCk7XG4gXHRpZiAobmRldl9vd25lciAhPSBidXMtXHUwMDNlb3duZXIpXG4gXHRcdG1vZHVsZV9wdXQoYnVzLVx1MDAzZW93bmVyKTtcbkBAIC0xOTc3LDYgJiM0MzsyMDMwLDcgQEAgdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHQgKiBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBieSByZWFkaW5nIHRoZSB1bmRlcmx5aW5nIGJ1cyBmaXJzdC5cbiBcdCAqL1xuIFx0YnVzID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzO1xuJiM0MztcdHBoeV9yZWxlYXNlKHBoeWRldik7XG4gXG4gXHRwdXRfZGV2aWNlKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldik7XG4gXHRpZiAoZGV2KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaWItaW50ZXJuYWwuaCBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaWItaW50ZXJuYWwuaFxuaW5kZXggNjY0ZWQ3ZmFhNTE4NC4uN2U5MTYxZmNkZDkwMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaWItaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpYi1pbnRlcm5hbC5oXG5AQCAtMjUsNyAmIzQzOzI1LDkgQEAgaW50IHBoeV9zcGVlZF9kb3duX2NvcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gdm9pZCBwaHlfY2hlY2tfZG93bnNoaWZ0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIFxuIGludCBtZGlvYnVzX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpO1xuLWludCBtZGlvYnVzX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldik7XG4mIzQzO2ludCBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgaW50IGVycik7XG4mIzQzO2ludCBtZGlvYnVzX2JlZ2luX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgZHluYW1pYyk7XG4mIzQzO3ZvaWQgbWRpb2J1c19maW5pc2hfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKTtcbiBcbiBpbnQgZ2VucGh5X2M0NV9yZWFkX2VlZV9hZHYoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdW5zaWduZWQgbG9uZyAqYWR2KTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvbGludXgvbWRpby5oXG5pbmRleCBhN2Q5ZTNhZTM2MmE1Li5lMTk5NjNhZjhlMTM5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZGlvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWRpby5oXG5AQCAtOCw2ICYjNDM7OCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuIFxuIHN0cnVjdCBncGlvX2Rlc2M7XG4gc3RydWN0IG1paV9idXM7XG5AQCAtMzIsNiAmIzQzOzMzLDkgQEAgc3RydWN0IG1kaW9fZGV2aWNlIHtcbiBcdGludCAoKmJ1c19tYXRjaCkoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KTtcbiBcdHZvaWQgKCpkZXZpY2VfZnJlZSkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KTtcbiBcdHZvaWQgKCpkZXZpY2VfcmVtb3ZlKShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpO1xuJiM0MztcdGludCAoKmRldmljZV9yZW1vdmVfZHluYW1pYykoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KTtcbiYjNDM7XHQvKiBFbnRyeSBpbiBtaWlfYnVzOjptZGlvX21hcF9yZXRpcmVkLiAqL1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgcmV0aXJlZF9ub2RlO1xuIFxuIFx0LyogQnVzIGFkZHJlc3Mgb2YgdGhlIE1ESU8gZGV2aWNlICgwLTMxKSAqL1xuIFx0aW50IGFkZHI7XG5AQCAtNjk0LDYgJiM0Mzs2OTgsOCBAQCBzdGF0aWMgaW5saW5lIGludCBtZGlvZGV2X2M0NV93cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiBkZXZhZCxcbiBcbiBib29sIG1kaW9idXNfaXNfcmVnaXN0ZXJlZF9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpO1xuIHN0cnVjdCBwaHlfZGV2aWNlICptZGlvYnVzX2dldF9waHkoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpO1xuJiM0MztpbnQgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKHN0cnVjdCBtaWlfYnVzICpidXMsIGJvb2wgcmVtb3ZpbmcpO1xuJiM0Mzt2b2lkIG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmQoc3RydWN0IG1paV9idXMgKmJ1cywgYm9vbCByZW1vdmluZyk7XG4gXG4gLyoqXG4gICogbWRpb19tb2R1bGVfZHJpdmVyKCkgLSBIZWxwZXIgbWFjcm8gZm9yIHJlZ2lzdGVyaW5nIG1kaW8gZHJpdmVyc1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCA1ZjhkNjU4NjhlMGZmLi4wNTAwZjgwZTBmYWNmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaFxuQEAgLTIyLDYgJiM0MzsyMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWlpX3RpbWVzdGFtcGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UtaWQvbWRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdTY0X3N0YXRzX3N5bmMuaFx1MDAzZVxuQEAgLTM5MSw3ICYjNDM7MzkyLDkgQEAgc3RydWN0IG1paV9idXMge1xuIFx0LyoqIEBzdGF0ZTogU3RhdGUgb2YgYnVzIHN0cnVjdHVyZSAqL1xuIFx0ZW51bSB7XG4gXHRcdE1ESU9CVVNfQUxMT0NBVEVEID0gMSxcbiYjNDM7XHRcdE1ESU9CVVNfUkVHSVNURVJJTkcsXG4gXHRcdE1ESU9CVVNfUkVHSVNURVJFRCxcbiYjNDM7XHRcdE1ESU9CVVNfVU5SRUdJU1RFUklORyxcbiBcdFx0TURJT0JVU19VTlJFR0lTVEVSRUQsXG4gXHRcdE1ESU9CVVNfUkVMRUFTRUQsXG4gXHR9IHN0YXRlO1xuQEAgLTQwMSw2ICYjNDM7NDA0LDE4IEBAIHN0cnVjdCBtaWlfYnVzIHtcbiBcbiBcdC8qKiBAbWRpb19tYXA6IGxpc3Qgb2YgYWxsIE1ESU8gZGV2aWNlcyBvbiBidXMgKi9cbiBcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb19tYXBbUEhZX01BWF9BRERSXTtcbiYjNDM7XHQvKiogQG1kaW9fbWFwX3BlbmRpbmc6IGFkZHJlc3NlcyB3aXRoIHJlZ2lzdHJhdGlvbiBpbiBwcm9ncmVzcyAqL1xuJiM0MztcdHUzMiBtZGlvX21hcF9wZW5kaW5nO1xuJiM0MztcdC8qKiBAbWRpb19tYXBfbG9jazogcHJvdGVjdHMgdGhlIE1ESU8gZGV2aWNlIG1hcCBhbmQgYnVzIHN0YXRlICovXG4mIzQzO1x0c3RydWN0IG11dGV4IG1kaW9fbWFwX2xvY2s7XG4mIzQzO1x0LyoqIEBtZGlvX21hcF93YWl0OiB3YWl0IGZvciBhY3RpdmUgbWFwIG9wZXJhdGlvbnMgZHVyaW5nIHRlYXJkb3duICovXG4mIzQzO1x0d2FpdF9xdWV1ZV9oZWFkX3QgbWRpb19tYXBfd2FpdDtcbiYjNDM7XHQvKiogQG1kaW9fbWFwX29wczogYWN0aXZlIHJlZ2lzdHJhdGlvbnMgYW5kIGZpcm13YXJlIGNoYW5nZXMgKi9cbiYjNDM7XHR1bnNpZ25lZCBpbnQgbWRpb19tYXBfb3BzO1xuJiM0MztcdC8qKiBAbWRpb19tYXBfcmVtb3ZhbHM6IGZpcm13YXJlIHJlbW92YWxzIGJsb2NraW5nIFBIWSBhdHRhY2htZW50ICovXG4mIzQzO1x0dW5zaWduZWQgaW50IG1kaW9fbWFwX3JlbW92YWxzO1xuJiM0MztcdC8qKiBAbWRpb19tYXBfcmV0aXJlZDogcmVtb3ZlZCBkZXZpY2VzIHBpbm5lZCB1bnRpbCBidXMgdGVhcmRvd24gKi9cbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIG1kaW9fbWFwX3JldGlyZWQ7XG4gXG4gXHQvKiogQHBoeV9tYXNrOiBQSFkgYWRkcmVzc2VzIHRvIGJlIGlnbm9yZWQgd2hlbiBwcm9iaW5nICovXG4gXHR1MzIgcGh5X21hc2s7XG5AQCAtNjUyLDYgJiM0Mzs2NjcsOCBAQCBzdHJ1Y3QgcGh5X29hdGMxNF9zcWlfY2FwYWJpbGl0eSB7XG4gICogQG5fcG9ydHM6IE51bWJlciBvZiBwb3J0cyBjdXJyZW50bHkgYXR0YWNoZWQgdG8gdGhlIFBIWVxuICAqIEBtYXhfbl9wb3J0czogTWF4IG51bWJlciBvZiBwb3J0cyB0aGlzIFBIWSBjYW4gZXhwb3NlXG4gICogQGxvY2s6ICBNdXRleCBmb3Igc2VyaWFsaXphdGlvbiBhY2Nlc3MgdG8gUEhZXG4mIzQzOyAqIEBhdHRhY2hlZDogV2hldGhlciBhIG5ldHdvcmsgZGV2aWNlIG9yIHN0YW5kYWxvbmUgdXNlciBhdHRhY2hlZCB0aGUgUEhZO1xuJiM0MzsgKlx0cHJvdGVjdGVkIGJ5IHRoZSBNRElPIGJ1cyBtYXAgbG9ja1xuICAqIEBzdGF0ZV9xdWV1ZTogV29yayBxdWV1ZSBmb3Igc3RhdGUgbWFjaGluZVxuICAqIEBsaW5rX2Rvd25fZXZlbnRzOiBOdW1iZXIgb2YgdGltZXMgbGluayB3YXMgbG9zdFxuICAqIEBzaGFyZWQ6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhIHNoYXJlZCBieSBwaHlzIGluIG9uZSBwYWNrYWdlXG5AQCAtNzgxLDYgJiM0Mzs3OTgsNyBAQCBzdHJ1Y3QgcGh5X2RldmljZSB7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHN0YXRlX3F1ZXVlO1xuIFxuIFx0c3RydWN0IG11dGV4IGxvY2s7XG4mIzQzO1x0Ym9vbCBhdHRhY2hlZDtcbiBcbiBcdC8qIFRoaXMgbWF5IGJlIG1vZGlmaWVkIHVuZGVyIHRoZSBydG5sIGxvY2sgKi9cbiBcdGJvb2wgc2ZwX2J1c19hdHRhY2hlZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T0YmIzM0OywKICAgICYjMzQ7T0ZfRFlOQU1JQyYjMzQ7LAogICAgJiMzNDtPRl9PVkVSTEFZJiMzNDssCiAgICAmIzM0O1BIWUxJQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbWRpb2J1c19yZWdpc3RlciYjMzQ7LAogICAgJiMzNDttZGlvYnVzX3VucmVnaXN0ZXImIzM0OywKICAgICYjMzQ7bWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luJiMzNDssCiAgICAmIzM0O21kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmQmIzM0OywKICAgICYjMzQ7bWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZSYjMzQ7LAogICAgJiMzNDttZGlvYnVzX2JlZ2luX3JlbW92ZSYjMzQ7LAogICAgJiMzNDttZGlvYnVzX2ZpbmlzaF9yZW1vdmUmIzM0OywKICAgICYjMzQ7bWRpb19kZXZpY2VfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7bWRpb19kZXZpY2VfcmVtb3ZlJiMzNDssCiAgICAmIzM0O3BoeV9kZXZpY2VfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7cGh5X2RldmljZV9yZW1vdmUmIzM0OywKICAgICYjMzQ7cGh5X2F0dGFjaF9kaXJlY3QmIzM0OywKICAgICYjMzQ7cGh5X2RldGFjaCYjMzQ7LAogICAgJiMzNDtfX29mX21kaW9idXNfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7bWRpb2J1c19zY2FuX2MyMiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTURJTyBidXMgYW5kIFBIWSBkZXZpY2UgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIGxvZ2ljIHRvIHN1cHBvcnQgZHluYW1pYyBkZXZpY2UgdHJlZSBjaGFuZ2VzIChPRiBkeW5hbWljIGFuZCBvdmVybGF5KS4gSXQgaW50cm9kdWNlcyBhIGxvY2tpbmcgbWVjaGFuaXNtIChgbWRpb19tYXBfbG9ja2ApIHRvIHNlcmlhbGl6ZSBkZXZpY2UgY2hhbmdlcyBhbmQgcHJldmVudCByYWNlcyBkdXJpbmcgUEhZIGF0dGFjaG1lbnQgYW5kIGRldGFjaG1lbnQuIEl0IGFsc28gcmVmYWN0b3JzIHRoZSBzY2FubmluZyBhbmQgcmVnaXN0cmF0aW9uIG9mIFBIWXMgYW5kIE1ESU8gZGV2aWNlcy4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGxvZ2ljIGRvZXMgbm90IGludHJvZHVjZSBkZWFkbG9ja3Mgb3IgcmFjZSBjb25kaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDM5ODFlZjU0NDM1NzQ2NDU2OTQwYTU0ZmExYjkyZjk1OTI4MDRiZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDQgMDA6MDY6MDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYyBiL2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jCmluZGV4IGI4ZDI5OGMwNGQzZmYuLmM4OWY4OGFhY2Q4ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jCkBAIC0xMyw2ICYjNDM7MTMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2Z3bm9kZV9tZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L211dGV4LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9vZl9pcnEuaCZndDsKQEAgLTIwLDYgJiM0MzsyMSw4IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvb2ZfbmV0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGh5X2ZpeGVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwogCiAjZGVmaW5lIERFRkFVTFRfR1BJT19SRVNFVF9ERUxBWQkxMAkvKiBpbiBtaWNyb3NlY29uZHMgKi8KIApAQCAtMjcsNiAmIzQzOzMwLDUyIEBAIE1PRFVMRV9BVVRIT1IoJiMzNDtHcmFudCBMaWtlbHkgJmx0O2dyYW50Lmxpa2VseUBzZWNyZXRsYWIuY2EmZ3Q7JiMzNDspOwogTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CiBNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtPcGVuRmlybXdhcmUgTURJTyBidXMgKEV0aGVybmV0IFBIWSkgYWNjZXNzb3JzJiMzNDspOwogCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX09GX0RZTkFNSUMpCiYjNDM7LyoKJiM0MzsgKiBPRiBjaGFuZ2VzIGNhbiBuZXN0IHdoZW4gcHJvYmluZyBvbmUgTURJTyBkZXZpY2UgZW5hYmxlcyBhbm90aGVyIG5vZGUgb24KJiM0MzsgKiB0aGUgc2FtZSBidXMuIFNlcmlhbGl6ZSBpbmRlcGVuZGVudCBjaGFuZ2VzIHdoaWxlIGFsbG93aW5nIHRoYXQgbmVzdGluZy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKG9mX21kaW9fcmVjb25maWdfbXV0ZXgpOwomIzQzO3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9mX21kaW9fcmVjb25maWdfb3duZXI7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBvZl9tZGlvX3JlY29uZmlnX2RlcHRoOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG9mX21kaW9fcmVjb25maWdfbG9jayh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKCFtdXRleF90cnlsb2NrKCZhbXA7b2ZfbWRpb19yZWNvbmZpZ19tdXRleCkpIHsKJiM0MzsJCWlmIChvZl9tZGlvX3JlY29uZmlnX293bmVyID09IGN1cnJlbnQpIHsKJiM0MzsJCQlvZl9tZGlvX3JlY29uZmlnX2RlcHRoJiM0MzsmIzQzOzsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7b2ZfbWRpb19yZWNvbmZpZ19tdXRleCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJV0FSTl9PTl9PTkNFKG9mX21kaW9fcmVjb25maWdfb3duZXIpOwomIzQzOwlXQVJOX09OX09OQ0Uob2ZfbWRpb19yZWNvbmZpZ19kZXB0aCk7CiYjNDM7CW9mX21kaW9fcmVjb25maWdfb3duZXIgPSBjdXJyZW50OwomIzQzOwlvZl9tZGlvX3JlY29uZmlnX2RlcHRoID0gMTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb2ZfbWRpb19yZWNvbmZpZ191bmxvY2sodm9pZCkKJiM0Mzt7CiYjNDM7CVdBUk5fT05fT05DRShvZl9tZGlvX3JlY29uZmlnX293bmVyICE9IGN1cnJlbnQpOwomIzQzOwlXQVJOX09OX09OQ0UoIW9mX21kaW9fcmVjb25maWdfZGVwdGgpOwomIzQzOwomIzQzOwlpZiAoLS1vZl9tZGlvX3JlY29uZmlnX2RlcHRoKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlvZl9tZGlvX3JlY29uZmlnX293bmVyID0gTlVMTDsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7b2ZfbWRpb19yZWNvbmZpZ19tdXRleCk7CiYjNDM7fQomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG9mX21kaW9fcmVjb25maWdfbG9jayh2b2lkKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG9mX21kaW9fcmVjb25maWdfdW5sb2NrKHZvaWQpCiYjNDM7ewomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKIC8qIEV4dHJhY3QgdGhlIGNsYXVzZSAyMiBwaHkgSUQgZnJvbSB0aGUgY29tcGF0aWJsZSBzdHJpbmcgb2YgdGhlIGZvcm0KICAqIGV0aGVybmV0LXBoeS1pZEFBQUEuQkJCQiAqLwogc3RhdGljIGludCBvZl9nZXRfcGh5X2lkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlLCB1MzIgKnBoeV9pZCkKQEAgLTQ0LDcgJiM0Mzs5Myw3IEBAIGludCBvZl9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksCiBFWFBPUlRfU1lNQk9MKG9mX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3Rlcik7CiAKIHN0YXRpYyBpbnQgb2ZfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKm1kaW8sCi0JCQkJICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQsIHUzMiBhZGRyKQomIzQzOwkJCQkgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLCB1MzIgYWRkcikKIHsKIAlyZXR1cm4gZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KG1kaW8sIG9mX2Z3bm9kZV9oYW5kbGUoY2hpbGQpLCBhZGRyKTsKIH0KQEAgLTc3LDYgJiM0MzsxMjYsMjUgQEAgc3RhdGljIGludCBvZl9tZGlvYnVzX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqbWRpbywKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgb2ZfbWRpb2J1c19yZWdpc3Rlcl9jaGlsZChzdHJ1Y3QgbWlpX2J1cyAqbWRpbywKJiM0MzsJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLCB1MzIgYWRkcikKJiM0Mzt7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJaWYgKG9mX25vZGVfdGVzdF9hbmRfc2V0X2ZsYWcoY2hpbGQsIE9GX1BPUFVMQVRFRCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKG9mX21kaW9idXNfY2hpbGRfaXNfcGh5KGNoaWxkKSkKJiM0MzsJCXJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9waHkobWRpbywgY2hpbGQsIGFkZHIpOwomIzQzOwllbHNlCiYjNDM7CQlyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKG1kaW8sIGNoaWxkLCBhZGRyKTsKJiM0MzsKJiM0MzsJaWYgKHJjKQomIzQzOwkJb2Zfbm9kZV9jbGVhcl9mbGFnKGNoaWxkLCBPRl9QT1BVTEFURUQpOwomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7fQomIzQzOwogLyogVGhlIGZvbGxvd2luZyBpcyBhIGxpc3Qgb2YgUEhZIGNvbXBhdGlibGUgc3RyaW5ncyB3aGljaCBhcHBlYXIgaW4KICAqIHNvbWUgRFRCcy4gVGhlIGNvbXBhdGlibGUgc3RyaW5nIGlzIG5ldmVyIG1hdGNoZWQgYWdhaW5zdCBhIFBIWQogICogZHJpdmVyLCBzbyBpcyBwb2ludGxlc3MuIFdlIG9ubHkgZXhwZWN0IGRldmljZXMgd2hpY2ggYXJlIG5vdCBQSFlzCkBAIC0xMzYsNiAmIzQzOzIwNCwzMiBAQCBib29sIG9mX21kaW9idXNfY2hpbGRfaXNfcGh5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQpCiB9CiBFWFBPUlRfU1lNQk9MKG9mX21kaW9idXNfY2hpbGRfaXNfcGh5KTsKIAomIzQzO3N0YXRpYyBpbnQgb2ZfbWRpb2J1c19zY2FuX3BoeShzdHJ1Y3QgbWlpX2J1cyAqbWRpbywKJiM0MzsJCQkgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCkKJiM0Mzt7CiYjNDM7CWludCBhZGRyLCByYzsKJiM0MzsKJiM0MzsJaWYgKCFvZl9tZGlvYnVzX2NoaWxkX2lzX3BoeShjaGlsZCkpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJZm9yIChhZGRyID0gMDsgYWRkciAmbHQ7IFBIWV9NQVhfQUREUjsgYWRkciYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChtZGlvYnVzX2lzX3JlZ2lzdGVyZWRfZGV2aWNlKG1kaW8sIGFkZHIpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZGV2X2luZm8oJmFtcDttZGlvLSZndDtkZXYsICYjMzQ7c2NhbiBwaHkgJXBPRm4gYXQgYWRkcmVzcyAlaVxuJiMzNDssCiYjNDM7CQkJIGNoaWxkLCBhZGRyKTsKJiM0MzsKJiM0MzsJCS8qIC1FTk9ERVYgbWVhbnMgdGhhdCBzY2FubmluZyBzaG91bGQgY29udGludWUuICovCiYjNDM7CQlyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXJfY2hpbGQobWRpbywgY2hpbGQsIGFkZHIpOwomIzQzOwkJaWYgKCFyYykKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCWlmIChyYyAhPSAtRU5PREVWKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gLUVOT0RFVjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IF9fb2ZfbWRpb2J1c19wYXJzZV9waHlzKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQkJCSAgIGJvb2wgKnNjYW5waHlzKQogewpAQCAtMTY0LDEwICYjNDM7MjU4LDcgQEAgc3RhdGljIGludCBfX29mX21kaW9idXNfcGFyc2VfcGh5cyhzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKG9mX21kaW9idXNfY2hpbGRfaXNfcGh5KGNoaWxkKSkKLQkJCXJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9waHkobWRpbywgY2hpbGQsIGFkZHIpOwotCQllbHNlCi0JCQlyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKG1kaW8sIGNoaWxkLCBhZGRyKTsKJiM0MzsJCXJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9jaGlsZChtZGlvLCBjaGlsZCwgYWRkcik7CiAKIAkJaWYgKHJjID09IC1FTk9ERVYpCiAJCQlkZXZfZXJyKCZhbXA7bWRpby0mZ3Q7ZGV2LApAQCAtMTk3LDcgJiM0MzsyODgsNyBAQCBpbnQgX19vZl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7CiAJYm9vbCBzY2FucGh5cyA9IGZhbHNlOwotCWludCBhZGRyLCByYzsKJiM0MzsJaW50IHJjOwogCiAJaWYgKCFucCkKIAkJcmV0dXJuIF9fbWRpb2J1c19yZWdpc3RlcihtZGlvLCBvd25lcik7CkBAIC0yMjMsMTMgJiM0MzszMTQsMjEgQEAgaW50IF9fb2ZfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCwKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAomIzQzOwlvZl9tZGlvX3JlY29uZmlnX2xvY2soKTsKJiM0MzsJcmMgPSBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4obWRpbywgZmFsc2UpOwomIzQzOwlpZiAocmMpIHsKJiM0MzsJCW9mX21kaW9fcmVjb25maWdfdW5sb2NrKCk7CiYjNDM7CQltZGlvYnVzX3VucmVnaXN0ZXIobWRpbyk7CiYjNDM7CQlyZXR1cm4gcmM7CiYjNDM7CX0KJiM0MzsKIAkvKiBMb29wIG92ZXIgdGhlIGNoaWxkIG5vZGVzIGFuZCByZWdpc3RlciBhIHBoeV9kZXZpY2UgZm9yIGVhY2ggcGh5ICovCiAJcmMgPSBfX29mX21kaW9idXNfcGFyc2VfcGh5cyhtZGlvLCBucCwgJmFtcDtzY2FucGh5cyk7CiAJaWYgKHJjKQotCQlnb3RvIHVucmVnaXN0ZXI7CiYjNDM7CQlnb3RvIG91dF9jaGFuZ2U7CiAKIAlpZiAoIXNjYW5waHlzKQotCQlyZXR1cm4gMDsKJiM0MzsJCWdvdG8gb3V0X2NoYW5nZTsKIAogCS8qIGF1dG8gc2NhbiBmb3IgUEhZcyB3aXRoIGVtcHR5IHJlZyBwcm9wZXJ0eSAqLwogCWZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKG5wLCBjaGlsZCkgewpAQCAtMjM4LDM5ICYjNDM7MzM3LDM4MiBAQCBpbnQgX19vZl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQkgICAgb2Zfbm9kZV9uYW1lX2VxKGNoaWxkLCAmIzM0O2V0aGVybmV0LXBoeS1wYWNrYWdlJiMzNDspKQogCQkJY29udGludWU7CiAKLQkJZm9yIChhZGRyID0gMDsgYWRkciAmbHQ7IFBIWV9NQVhfQUREUjsgYWRkciYjNDM7JiM0MzspIHsKLQkJCS8qIHNraXAgYWxyZWFkeSByZWdpc3RlcmVkIFBIWXMgKi8KLQkJCWlmIChtZGlvYnVzX2lzX3JlZ2lzdGVyZWRfZGV2aWNlKG1kaW8sIGFkZHIpKQotCQkJCWNvbnRpbnVlOwotCi0JCQkvKiBiZSBub2lzeSB0byBlbmNvdXJhZ2UgcGVvcGxlIHRvIHNldCByZWcgcHJvcGVydHkgKi8KLQkJCWRldl9pbmZvKCZhbXA7bWRpby0mZ3Q7ZGV2LCAmIzM0O3NjYW4gcGh5ICVwT0ZuIGF0IGFkZHJlc3MgJWlcbiYjMzQ7LAotCQkJCSBjaGlsZCwgYWRkcik7Ci0KLQkJCWlmIChvZl9tZGlvYnVzX2NoaWxkX2lzX3BoeShjaGlsZCkpIHsKLQkJCQkvKiAtRU5PREVWIGlzIHRoZSByZXR1cm4gY29kZSB0aGF0IFBIWUxJQiBoYXMKLQkJCQkgKiBzdGFuZGFyZGl6ZWQgb24gdG8gaW5kaWNhdGUgdGhhdCBidXMKLQkJCQkgKiBzY2FubmluZyBzaG91bGQgY29udGludWUuCi0JCQkJICovCi0JCQkJcmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyX3BoeShtZGlvLCBjaGlsZCwgYWRkcik7Ci0JCQkJaWYgKCFyYykKLQkJCQkJYnJlYWs7Ci0JCQkJaWYgKHJjICE9IC1FTk9ERVYpCi0JCQkJCWdvdG8gcHV0X3VucmVnaXN0ZXI7Ci0JCQl9Ci0JCX0KJiM0MzsJCXJjID0gb2ZfbWRpb2J1c19zY2FuX3BoeShtZGlvLCBjaGlsZCk7CiYjNDM7CQlpZiAocmMgJmFtcDsmYW1wOyByYyAhPSAtRU5PREVWKQomIzQzOwkJCWdvdG8gcHV0X2NoaWxkOwomIzQzOwkJcmMgPSAwOwogCX0KIAotCXJldHVybiAwOwomIzQzO291dF9jaGFuZ2U6CiYjNDM7CW1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmQobWRpbywgZmFsc2UpOwomIzQzOwlvZl9tZGlvX3JlY29uZmlnX3VubG9jaygpOwomIzQzOwlpZiAoIXJjKQomIzQzOwkJcmV0dXJuIDA7CiAKLXB1dF91bnJlZ2lzdGVyOgotCW9mX25vZGVfcHV0KGNoaWxkKTsKLXVucmVnaXN0ZXI6CiAJbWRpb2J1c191bnJlZ2lzdGVyKG1kaW8pOwogCXJldHVybiByYzsKJiM0MzsKJiM0MztwdXRfY2hpbGQ6CiYjNDM7CW9mX25vZGVfcHV0KGNoaWxkKTsKJiM0MzsJZ290byBvdXRfY2hhbmdlOwogfQogRVhQT1JUX1NZTUJPTChfX29mX21kaW9idXNfcmVnaXN0ZXIpOwogCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX09GX0RZTkFNSUMpCiYjNDM7c3RhdGljIGJvb2wgb2ZfbWRpb2J1c19ub2RlX2lzX2F2YWlsYWJsZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gIW9mX25vZGVfY2hlY2tfZmxhZyhub2RlLCBPRl9ERVRBQ0hFRCkgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShub2RlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvZl9tZGlvYnVzX2FkZF9ub2RlKHN0cnVjdCBtaWlfYnVzICptZGlvLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkOwomIzQzOwlpbnQgYWRkciwgcmMsIHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmICghb2ZfbWRpb2J1c19ub2RlX2lzX2F2YWlsYWJsZShub2RlKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAob2Zfbm9kZV9uYW1lX2VxKG5vZGUsICYjMzQ7ZXRoZXJuZXQtcGh5LXBhY2thZ2UmIzM0OykpIHsKJiM0MzsJCWlmICghb2ZfcHJvcGVydHlfcHJlc2VudChub2RlLCAmIzM0O3JlZyYjMzQ7KSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJCWZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKG5vZGUsIGNoaWxkKSB7CiYjNDM7CQkJcmMgPSBvZl9tZGlvYnVzX2FkZF9ub2RlKG1kaW8sIGNoaWxkKTsKJiM0MzsJCQlpZiAocmMgJmFtcDsmYW1wOyByYyAhPSAtRU5PREVWICZhbXA7JmFtcDsgIXJldCkKJiM0MzsJCQkJcmV0ID0gcmM7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWFkZHIgPSBvZl9tZGlvX3BhcnNlX2FkZHIoJmFtcDttZGlvLSZndDtkZXYsIG5vZGUpOwomIzQzOwlpZiAoYWRkciAmbHQ7IDApCiYjNDM7CQlyYyA9IG9mX21kaW9idXNfc2Nhbl9waHkobWRpbywgbm9kZSk7CiYjNDM7CWVsc2UKJiM0MzsJCXJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9jaGlsZChtZGlvLCBub2RlLCBhZGRyKTsKJiM0MzsKJiM0MzsJaWYgKHJjID09IC1FTk9ERVYgJmFtcDsmYW1wOyBhZGRyICZndDs9IDApCiYjNDM7CQlkZXZfZXJyKCZhbXA7bWRpby0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7TURJTyBkZXZpY2UgYXQgYWRkcmVzcyAlZCBpcyBtaXNzaW5nLlxuJiMzNDssIGFkZHIpOwomIzQzOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG9mX21kaW9idXNfbm9kZV9pc19idXN5KHN0cnVjdCBtaWlfYnVzICptZGlvLAomIzQzOwkJCQkgICAgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQomIzQzO3sKJiM0MzsJc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2OwomIzQzOwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwomIzQzOwlib29sIGJ1c3kgPSBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKG9mX25vZGVfbmFtZV9lcShub2RlLCAmIzM0O2V0aGVybmV0LXBoeS1wYWNrYWdlJiMzNDspKSB7CiYjNDM7CQlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChub2RlLCBjaGlsZCkgewomIzQzOwkJCWlmIChvZl9tZGlvYnVzX25vZGVfaXNfYnVzeShtZGlvLCBjaGlsZCkpCiYjNDM7CQkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghb2Zfbm9kZV9jaGVja19mbGFnKG5vZGUsIE9GX1BPUFVMQVRFRCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW1kaW9kZXYgPSBvZl9tZGlvX2ZpbmRfZGV2aWNlKG5vZGUpOwomIzQzOwlpZiAoIW1kaW9kZXYpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaWYgKG1kaW9kZXYtJmd0O2J1cyAhPSBtZGlvKSB7CiYjNDM7CQlwdXRfZGV2aWNlKCZhbXA7bWRpb2Rldi0mZ3Q7ZGV2KTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWRpby0mZ3Q7bWRpb19tYXBfbG9jayk7CiYjNDM7CWJ1c3kgPSBtZGlvLSZndDttZGlvX21hcFttZGlvZGV2LSZndDthZGRyXSAhPSBtZGlvZGV2IHx8CiYjNDM7CSAgICAgICAobWRpby0mZ3Q7bWRpb19tYXBfcGVuZGluZyAmYW1wOyBCSVQobWRpb2Rldi0mZ3Q7YWRkcikpOwomIzQzOwlpZiAobWRpb2Rldi0mZ3Q7ZmxhZ3MgJmFtcDsgTURJT19ERVZJQ0VfRkxBR19QSFkpIHsKJiM0MzsJCXBoeWRldiA9IHRvX3BoeV9kZXZpY2UoJmFtcDttZGlvZGV2LSZndDtkZXYpOwomIzQzOwkJaWYgKHBoeWRldi0mZ3Q7YXR0YWNoZWQpIHsKJiM0MzsJCQlidXN5ID0gdHJ1ZTsKJiM0MzsJCQlkZXZfd2FybigmYW1wO21kaW9kZXYtJmd0O2RldiwKJiM0MzsJCQkJICYjMzQ7Y2Fubm90IHJlbW92ZSBhbiBhdHRhY2hlZCBQSFk7IHJlbW92ZSBpdHMgY29uc3VtZXIgZmlyc3RcbiYjMzQ7KTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDttZGlvLSZndDttZGlvX21hcF9sb2NrKTsKJiM0MzsJcHV0X2RldmljZSgmYW1wO21kaW9kZXYtJmd0O2Rldik7CiYjNDM7CiYjNDM7CXJldHVybiBidXN5OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICoKJiM0MztvZl9tZGlvYnVzX2dldF9yZW1vdmFsX3Njb3BlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50OwomIzQzOwomIzQzOwlpZiAob2Zfbm9kZV9uYW1lX2VxKG5vZGUsICYjMzQ7ZXRoZXJuZXQtcGh5LXBhY2thZ2UmIzM0OykpCiYjNDM7CQlyZXR1cm4gb2Zfbm9kZV9nZXQobm9kZSk7CiYjNDM7CiYjNDM7CXBhcmVudCA9IG9mX2dldF9wYXJlbnQobm9kZSk7CiYjNDM7CWlmIChvZl9ub2RlX25hbWVfZXEocGFyZW50LCAmIzM0O2V0aGVybmV0LXBoeS1wYWNrYWdlJiMzNDspKQomIzQzOwkJcmV0dXJuIHBhcmVudDsKJiM0MzsKJiM0MzsJb2Zfbm9kZV9wdXQocGFyZW50KTsKJiM0MzsJcmV0dXJuIG9mX25vZGVfZ2V0KG5vZGUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG9mX21kaW9idXNfcmVtb3ZlX25vZGUoc3RydWN0IG1paV9idXMgKm1kaW8sCiYjNDM7CQkJCSAgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQomIzQzO3sKJiM0MzsJc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2OwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAob2Zfbm9kZV9uYW1lX2VxKG5vZGUsICYjMzQ7ZXRoZXJuZXQtcGh5LXBhY2thZ2UmIzM0OykpIHsKJiM0MzsJCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobm9kZSwgY2hpbGQpIHsKJiM0MzsJCQlyZXQgPSBvZl9tZGlvYnVzX3JlbW92ZV9ub2RlKG1kaW8sIGNoaWxkKTsKJiM0MzsJCQlpZiAocmV0KSB7CiYjNDM7CQkJCW9mX25vZGVfcHV0KGNoaWxkKTsKJiM0MzsJCQkJcmV0dXJuIHJldDsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIW9mX25vZGVfY2hlY2tfZmxhZyhub2RlLCBPRl9QT1BVTEFURUQpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIFRoZSBPRiBub2RlIGxvb2t1cCBhbHNvIGNvdmVycyBQSFlzIGZvdW5kIGJ5IGFkZHJlc3Mgc2Nhbm5pbmcuICovCiYjNDM7CW1kaW9kZXYgPSBvZl9tZGlvX2ZpbmRfZGV2aWNlKG5vZGUpOwomIzQzOwlpZiAoIW1kaW9kZXYpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwlpZiAobWRpb2Rldi0mZ3Q7YnVzICE9IG1kaW8pIHsKJiM0MzsJCXB1dF9kZXZpY2UoJmFtcDttZGlvZGV2LSZndDtkZXYpOwomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gbWRpb2Rldi0mZ3Q7ZGV2aWNlX3JlbW92ZV9keW5hbWljKG1kaW9kZXYpOwomIzQzOwlpZiAoIXJldCkKJiM0MzsJCW1kaW9kZXYtJmd0O2RldmljZV9mcmVlKG1kaW9kZXYpOwomIzQzOwlwdXRfZGV2aWNlKCZhbXA7bWRpb2Rldi0mZ3Q7ZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldCA9PSAtRU5PREVWID8gMCA6IHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBtaWlfYnVzICpvZl9tZGlvYnVzX2ZpbmRfcGFyZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50LCAqYnVzX25vZGU7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICptZGlvOwomIzQzOwomIzQzOwlwYXJlbnQgPSBvZl9nZXRfcGFyZW50KG5vZGUpOwomIzQzOwlpZiAoIXBhcmVudCkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlpZiAob2Zfbm9kZV9uYW1lX2VxKHBhcmVudCwgJiMzNDtldGhlcm5ldC1waHktcGFja2FnZSYjMzQ7KSkgewomIzQzOwkJaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKHBhcmVudCkgfHwKJiM0MzsJCSAgICAhb2ZfcHJvcGVydHlfcHJlc2VudChwYXJlbnQsICYjMzQ7cmVnJiMzNDspKSB7CiYjNDM7CQkJb2Zfbm9kZV9wdXQocGFyZW50KTsKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWJ1c19ub2RlID0gb2ZfZ2V0X3BhcmVudChwYXJlbnQpOwomIzQzOwkJb2Zfbm9kZV9wdXQocGFyZW50KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWJ1c19ub2RlID0gcGFyZW50OwomIzQzOwl9CiYjNDM7CiYjNDM7CW1kaW8gPSBvZl9tZGlvX2ZpbmRfYnVzKGJ1c19ub2RlKTsKJiM0MzsJb2Zfbm9kZV9wdXQoYnVzX25vZGUpOwomIzQzOwomIzQzOwlyZXR1cm4gbWRpbzsKJiM0Mzt9CiYjNDM7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX09GX09WRVJMQVkpCiYjNDM7LyogT3ZlcmxheSBlbnRyeSBub3RpZmllciBlcnJvcnMgY2Fubm90IHN0b3AgcmVtb3ZhbCBhZnRlciB0aGUgdHJlZSBjaGFuZ2VkLiAqLwomIzQzO3N0YXRpYyBib29sIG9mX21kaW9idXNfbGl2ZV9ub2RlX2lzX2J1c3koc3RydWN0IGRldmljZV9ub2RlICpub2RlKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpzY29wZTsKJiM0MzsJc3RydWN0IG1paV9idXMgKm1kaW87CiYjNDM7CWJvb2wgYnVzeSA9IHRydWU7CiYjNDM7CiYjNDM7CXNjb3BlID0gb2ZfbWRpb2J1c19nZXRfcmVtb3ZhbF9zY29wZShub2RlKTsKJiM0MzsJbWRpbyA9IG9mX21kaW9idXNfZmluZF9wYXJlbnQoc2NvcGUpOwomIzQzOwlpZiAoIW1kaW8pCiYjNDM7CQlnb3RvIG91dF9wdXRfc2NvcGU7CiYjNDM7CiYjNDM7CWlmICghbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKG1kaW8sIHRydWUpKSB7CiYjNDM7CQlidXN5ID0gb2ZfbWRpb2J1c19ub2RlX2lzX2J1c3kobWRpbywgc2NvcGUpOwomIzQzOwkJbWRpb2J1c19kZXZpY2VfY2hhbmdlX2VuZChtZGlvLCB0cnVlKTsKJiM0MzsJfQomIzQzOwlwdXRfZGV2aWNlKCZhbXA7bWRpby0mZ3Q7ZGV2KTsKJiM0MzsKJiM0MztvdXRfcHV0X3Njb3BlOgomIzQzOwlvZl9ub2RlX3B1dChzY29wZSk7CiYjNDM7CXJldHVybiBidXN5OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICoKJiM0MztvZl9tZGlvYnVzX292ZXJsYXlfdGFyZ2V0X2NoaWxkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqdGFyZ2V0LAomIzQzOwkJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm92ZXJsYXlfY2hpbGQpCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICpuYW1lID0ga2Jhc2VuYW1lKG92ZXJsYXlfY2hpbGQtJmd0O2Z1bGxfbmFtZSk7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX2NoaWxkX29mX25vZGUodGFyZ2V0LCBjaGlsZCkgewomIzQzOwkJaWYgKCFvZl9ub2RlX2NtcChrYmFzZW5hbWUoY2hpbGQtJmd0O2Z1bGxfbmFtZSksIG5hbWUpKQomIzQzOwkJCXJldHVybiBjaGlsZDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgb2ZfbWRpb2J1c19vdmVybGF5X25vZGVfaXNfYnVzeShzdHJ1Y3QgZGV2aWNlX25vZGUgKm92ZXJsYXksCiYjNDM7CQkJCQkgICAgc3RydWN0IGRldmljZV9ub2RlICp0YXJnZXQsCiYjNDM7CQkJCQkgICAgYm9vbCBhZGRlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqb3ZlcmxheV9jaGlsZCwgKnRhcmdldF9jaGlsZDsKJiM0MzsJYm9vbCBidXN5LCBjaGlsZF9hZGRlZDsKJiM0MzsKJiM0MzsJaWYgKChhZGRlZCB8fCBvZl9wcm9wZXJ0eV9wcmVzZW50KG92ZXJsYXksICYjMzQ7c3RhdHVzJiMzNDspKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBvZl9tZGlvYnVzX2xpdmVfbm9kZV9pc19idXN5KHRhcmdldCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShvdmVybGF5LCBvdmVybGF5X2NoaWxkKSB7CiYjNDM7CQl0YXJnZXRfY2hpbGQgPSBvZl9tZGlvYnVzX292ZXJsYXlfdGFyZ2V0X2NoaWxkKHRhcmdldCwKJiM0MzsJCQkJCQkJICAgICAgIG92ZXJsYXlfY2hpbGQpOwomIzQzOwkJaWYgKCF0YXJnZXRfY2hpbGQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQljaGlsZF9hZGRlZCA9IG9mX25vZGVfY2hlY2tfZmxhZyh0YXJnZXRfY2hpbGQsIE9GX09WRVJMQVkpOwomIzQzOwkJYnVzeSA9IG9mX21kaW9idXNfb3ZlcmxheV9ub2RlX2lzX2J1c3kob3ZlcmxheV9jaGlsZCwKJiM0MzsJCQkJCQkgICAgICAgdGFyZ2V0X2NoaWxkLCBjaGlsZF9hZGRlZCk7CiYjNDM7CQlvZl9ub2RlX3B1dCh0YXJnZXRfY2hpbGQpOwomIzQzOwkJaWYgKGJ1c3kpIHsKJiM0MzsJCQlvZl9ub2RlX3B1dChvdmVybGF5X2NoaWxkKTsKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb2ZfbWRpb2J1c19vdmVybGF5X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAomIzQzOwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICphcmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb2Zfb3ZlcmxheV9ub3RpZnlfZGF0YSAqbmQgPSBhcmc7CiYjNDM7CWJvb2wgYnVzeTsKJiM0MzsKJiM0MzsJaWYgKGFjdGlvbiAhPSBPRl9PVkVSTEFZX1BSRV9SRU1PVkUpCiYjNDM7CQlyZXR1cm4gTk9USUZZX09LOwomIzQzOwomIzQzOwlvZl9tZGlvX3JlY29uZmlnX2xvY2soKTsKJiM0MzsJYnVzeSA9IG9mX21kaW9idXNfb3ZlcmxheV9ub2RlX2lzX2J1c3kobmQtJmd0O292ZXJsYXksIG5kLSZndDt0YXJnZXQsCiYjNDM7CQkJCQkgICAgICAgZmFsc2UpOwomIzQzOwlvZl9tZGlvX3JlY29uZmlnX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gYnVzeSA/IG5vdGlmaWVyX2Zyb21fZXJybm8oLUVCVVNZKSA6IE5PVElGWV9PSzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBvZl9tZGlvX292ZXJsYXlfbm90aWZpZXIgPSB7CiYjNDM7CS5ub3RpZmllcl9jYWxsID0gb2ZfbWRpb2J1c19vdmVybGF5X25vdGlmeSwKJiM0Mzt9OwomIzQzOyNlbmRpZgomIzQzOwomIzQzO3N0YXRpYyBpbnQgb2ZfbWRpb2J1c19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sCiYjNDM7CQkJICAgICB2b2lkICphcmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb2ZfcmVjb25maWdfZGF0YSAqcmQgPSBhcmc7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqc2NvcGU7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICptZGlvOwomIzQzOwllbnVtIG9mX3JlY29uZmlnX2NoYW5nZSBjaGFuZ2U7CiYjNDM7CWJvb2wgcmVtb3Zpbmc7CiYjNDM7CWludCByYywgcmV0ID0gTk9USUZZX09LOwomIzQzOwomIzQzOwlvZl9tZGlvX3JlY29uZmlnX2xvY2soKTsKJiM0MzsJY2hhbmdlID0gb2ZfcmVjb25maWdfZ2V0X3N0YXRlX2NoYW5nZShhY3Rpb24sIHJkKTsKJiM0MzsJc3dpdGNoIChjaGFuZ2UpIHsKJiM0MzsJY2FzZSBPRl9SRUNPTkZJR19DSEFOR0VfQUREOgomIzQzOwkJLyogQSBuZXdlciBjaGFuZ2UgbWF5IGhhdmUgbWFkZSB0aGlzIG5vdGlmaWNhdGlvbiBzdGFsZS4gKi8KJiM0MzsJCWlmICghb2ZfbWRpb2J1c19ub2RlX2lzX2F2YWlsYWJsZShyZC0mZ3Q7ZG4pKQomIzQzOwkJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCXJlbW92aW5nID0gZmFsc2U7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBPRl9SRUNPTkZJR19DSEFOR0VfUkVNT1ZFOgomIzQzOwkJLyogQSBuZXdlciBjaGFuZ2UgbWF5IGhhdmUgbWFkZSB0aGlzIG5vdGlmaWNhdGlvbiBzdGFsZS4gKi8KJiM0MzsJCWlmIChvZl9tZGlvYnVzX25vZGVfaXNfYXZhaWxhYmxlKHJkLSZndDtkbikpCiYjNDM7CQkJZ290byBvdXRfdW5sb2NrOwomIzQzOwkJcmVtb3ZpbmcgPSB0cnVlOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWRpbyA9IG9mX21kaW9idXNfZmluZF9wYXJlbnQocmQtJmd0O2RuKTsKJiM0MzsJaWYgKCFtZGlvKQomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzOwomIzQzOwlyYyA9IG1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbihtZGlvLCByZW1vdmluZyk7CiYjNDM7CWlmIChyYykgewomIzQzOwkJaWYgKCFyZW1vdmluZykKJiM0MzsJCQlyZXQgPSBub3RpZmllcl9mcm9tX2Vycm5vKC1FUFJPQkVfREVGRVIpOwomIzQzOwkJZ290byBvdXRfcHV0X21kaW87CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFyZW1vdmluZykgewomIzQzOwkJcmMgPSBvZl9tZGlvYnVzX2FkZF9ub2RlKG1kaW8sIHJkLSZndDtkbik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBUaGUgbm9kZSBtYXkgYWxyZWFkeSBiZSBkZXRhY2hlZCBmcm9tIGl0cyBwYXJlbnQgaGllcmFyY2h5LiAqLwomIzQzOwkJc2NvcGUgPSBvZl9tZGlvYnVzX2dldF9yZW1vdmFsX3Njb3BlKHJkLSZndDtkbik7CiYjNDM7CQlpZiAob2ZfbWRpb2J1c19ub2RlX2lzX2J1c3kobWRpbywgc2NvcGUpKQomIzQzOwkJCXJjID0gLUVCVVNZOwomIzQzOwkJZWxzZQomIzQzOwkJCXJjID0gb2ZfbWRpb2J1c19yZW1vdmVfbm9kZShtZGlvLCByZC0mZ3Q7ZG4pOwomIzQzOwkJb2Zfbm9kZV9wdXQoc2NvcGUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmQobWRpbywgcmVtb3ZpbmcpOwomIzQzOwlpZiAocmMgJmFtcDsmYW1wOyAocmVtb3ZpbmcgfHwgcmMgIT0gLUVOT0RFVikpCiYjNDM7CQlyZXQgPSBub3RpZmllcl9mcm9tX2Vycm5vKHJjKTsKJiM0MzsKJiM0MztvdXRfcHV0X21kaW86CiYjNDM7CXB1dF9kZXZpY2UoJmFtcDttZGlvLSZndDtkZXYpOwomIzQzO291dF91bmxvY2s6CiYjNDM7CW9mX21kaW9fcmVjb25maWdfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgb2ZfbWRpb19ub3RpZmllciA9IHsKJiM0MzsJLm5vdGlmaWVyX2NhbGwgPSBvZl9tZGlvYnVzX25vdGlmeSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IG9mX21kaW9faW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gb2ZfcmVjb25maWdfbm90aWZpZXJfcmVnaXN0ZXIoJmFtcDtvZl9tZGlvX25vdGlmaWVyKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX09GX09WRVJMQVkpCiYjNDM7CXJldCA9IG9mX292ZXJsYXlfbm90aWZpZXJfcmVnaXN0ZXIoJmFtcDtvZl9tZGlvX292ZXJsYXlfbm90aWZpZXIpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJb2ZfcmVjb25maWdfbm90aWZpZXJfdW5yZWdpc3RlcigmYW1wO29mX21kaW9fbm90aWZpZXIpOwomIzQzOyNlbmRpZgomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0Mzttb2R1bGVfaW5pdChvZl9tZGlvX2luaXQpOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9fZXhpdCBvZl9tZGlvX2V4aXQodm9pZCkKJiM0Mzt7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX09GX09WRVJMQVkpCiYjNDM7CW9mX292ZXJsYXlfbm90aWZpZXJfdW5yZWdpc3RlcigmYW1wO29mX21kaW9fb3ZlcmxheV9ub3RpZmllcik7CiYjNDM7I2VuZGlmCiYjNDM7CW9mX3JlY29uZmlnX25vdGlmaWVyX3VucmVnaXN0ZXIoJmFtcDtvZl9tZGlvX25vdGlmaWVyKTsKJiM0Mzt9CiYjNDM7bW9kdWxlX2V4aXQob2ZfbWRpb19leGl0KTsKJiM0MzsjZW5kaWYgLyogQ09ORklHX09GX0RZTkFNSUMgKi8KJiM0MzsKIC8qKgogICogb2ZfbWRpb19maW5kX2RldmljZSAtIEdpdmVuIGEgZGV2aWNlIHRyZWUgbm9kZSwgZmluZCB0aGUgbWRpb19kZXZpY2UKICAqIEBucDogcG9pbnRlciB0byB0aGUgbWRpb19kZXZpY2UmIzM5O3MgZGV2aWNlIHRyZWUgbm9kZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmMgYi9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYwppbmRleCAwMGQwZTQxNTllOWJiLi5mNDVjOTM2ZmU1YWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYwpAQCAtMzQsNyAmIzQzOzM0LDggQEAgc3RhdGljIHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2J1c19maW5kX2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcikKIAlpZiAoV0FSTl9PTkNFKCFhZGRyX3ZhbGlkLCAmIzM0O2FkZHIgJWQgb3V0IG9mIHJhbmdlXG4mIzM0OywgYWRkcikpCiAJCXJldHVybiBOVUxMOwogCi0JcmV0dXJuIGJ1cy0mZ3Q7bWRpb19tYXBbYWRkcl07CiYjNDM7CS8qIFBhaXIgd2l0aCBtYXAgcHVibGljYXRpb24gaW4gbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2UoKS4gKi8KJiM0MzsJcmV0dXJuIHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtidXMtJmd0O21kaW9fbWFwW2FkZHJdKTsKIH0KIAogc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfZ2V0X3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcikKQEAgLTU0LDcgJiM0Mzs1NSwxNiBAQCBFWFBPUlRfU1lNQk9MKG1kaW9idXNfZ2V0X3BoeSk7CiAKIGJvb2wgbWRpb2J1c19pc19yZWdpc3RlcmVkX2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcikKIHsKLQlyZXR1cm4gbWRpb2J1c19maW5kX2RldmljZShidXMsIGFkZHIpICE9IE5VTEw7CiYjNDM7CWJvb2wgYWRkcl92YWxpZCA9IGFkZHIgJmd0Oz0gMCAmYW1wOyZhbXA7IGFkZHIgJmx0OyBBUlJBWV9TSVpFKGJ1cy0mZ3Q7bWRpb19tYXApOwomIzQzOwlib29sIHJlZ2lzdGVyZWQ7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OQ0UoIWFkZHJfdmFsaWQsICYjMzQ7YWRkciAlZCBvdXQgb2YgcmFuZ2VcbiYjMzQ7LCBhZGRyKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmVnaXN0ZXJlZCA9IFJFQURfT05DRShidXMtJmd0O21kaW9fbWFwW2FkZHJdKSB8fAomIzQzOwkJICAgICAoUkVBRF9PTkNFKGJ1cy0mZ3Q7bWRpb19tYXBfcGVuZGluZykgJmFtcDsgQklUKGFkZHIpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlZ2lzdGVyZWQ7CiB9CiBFWFBPUlRfU1lNQk9MKG1kaW9idXNfaXNfcmVnaXN0ZXJlZF9kZXZpY2UpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYyBiL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jCmluZGV4IGNlM2E2MDdhNDBjYjAuLmRmODAxMjVlZWVjNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jCkBAIC0zMzAsNiAmIzQzOzMzMCw5IEBAIHN0cnVjdCBtaWlfYnVzICptZGlvYnVzX2FsbG9jX3NpemUoc2l6ZV90IHNpemUpCiAJCXJldHVybiBOVUxMOwogCiAJYnVzLSZndDtzdGF0ZSA9IE1ESU9CVVNfQUxMT0NBVEVEOwomIzQzOwltdXRleF9pbml0KCZhbXA7YnVzLSZndDttZGlvX21hcF9sb2NrKTsKJiM0MzsJaW5pdF93YWl0cXVldWVfaGVhZCgmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfd2FpdCk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7YnVzLSZndDttZGlvX21hcF9yZXRpcmVkKTsKIAlpZiAoc2l6ZSkKIAkJYnVzLSZndDtwcml2ID0gKHZvaWQgKilidXMgJiM0MzsgYWxpZ25lZF9zaXplOwogCkBAIC0zNTUsMTAgJiM0MzszNTgsOSBAQCBzdGF0aWMgaW50IG9mX21kaW9idXNfZmluZF9waHkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsCiAJCQkgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpucCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkOwomIzQzOwlpbnQgYWRkciwgcmV0OwogCiAJZm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGUobnAsIGNoaWxkKSB7Ci0JCWludCBhZGRyOwotCiAJCWlmIChvZl9ub2RlX25hbWVfZXEoY2hpbGQsICYjMzQ7ZXRoZXJuZXQtcGh5LXBhY2thZ2UmIzM0OykpIHsKIAkJCS8qIFZhbGlkYXRlIFBIWSBwYWNrYWdlIHJlZyBwcmVzZW5jZSAqLwogCQkJaWYgKCFvZl9wcm9wZXJ0eV9wcmVzZW50KGNoaWxkLCAmIzM0O3JlZyYjMzQ7KSkgewpAQCAtMzY2LDEyICYjNDM7MzY4LDEzIEBAIHN0YXRpYyBpbnQgb2ZfbWRpb2J1c19maW5kX3BoeShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAotCQkJaWYgKCFvZl9tZGlvYnVzX2ZpbmRfcGh5KGRldiwgbWRpb2RldiwgY2hpbGQpKSB7CiYjNDM7CQkJcmV0ID0gb2ZfbWRpb2J1c19maW5kX3BoeShkZXYsIG1kaW9kZXYsIGNoaWxkKTsKJiM0MzsJCQlpZiAocmV0ICE9IC1FTk9ERVYpIHsKIAkJCQkvKiBUaGUgcmVmY291bnQgZm9yIHRoZSBQSFkgcGFja2FnZSB3aWxsIGJlCiAJCQkJICogaW5jcmVtZW50ZWQgbGF0ZXIgd2hlbiBQSFkgam9pbiB0aGUgUGFja2FnZS4KIAkJCQkgKi8KIAkJCQlvZl9ub2RlX3B1dChjaGlsZCk7Ci0JCQkJcmV0dXJuIDA7CiYjNDM7CQkJCXJldHVybiByZXQ7CiAJCQl9CiAKIAkJCWNvbnRpbnVlOwpAQCAtMzgyLDYgJiM0MzszODUsMTEgQEAgc3RhdGljIGludCBvZl9tZGlvYnVzX2ZpbmRfcGh5KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LAogCQkJY29udGludWU7CiAKIAkJaWYgKGFkZHIgPT0gbWRpb2Rldi0mZ3Q7YWRkcikgewomIzQzOwkJCWlmIChvZl9ub2RlX3Rlc3RfYW5kX3NldF9mbGFnKGNoaWxkLCBPRl9QT1BVTEFURUQpKSB7CiYjNDM7CQkJCW9mX25vZGVfcHV0KGNoaWxkKTsKJiM0MzsJCQkJcmV0dXJuIC1FQlVTWTsKJiM0MzsJCQl9CiYjNDM7CiAJCQlkZXZpY2Vfc2V0X25vZGUoZGV2LCBvZl9md25vZGVfaGFuZGxlKGNoaWxkKSk7CiAJCQkvKiBUaGUgcmVmY291bnQgb24gJiMzNDtjaGlsZCYjMzQ7IGlzIHBhc3NlZCB0byB0aGUgbWRpbwogCQkJICogZGV2aWNlLiBEbyBfbm90XyB1c2Ugb2Zfbm9kZV9wdXQoY2hpbGQpIGhlcmUuCkBAIC0zOTMsMjIgJiM0Mzs0MDEsMjYgQEAgc3RhdGljIGludCBvZl9tZGlvYnVzX2ZpbmRfcGh5KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LAogCXJldHVybiAtRU5PREVWOwogfQogCi1zdGF0aWMgdm9pZCBvZl9tZGlvYnVzX2xpbmtfbWRpb2RldihzdHJ1Y3QgbWlpX2J1cyAqYnVzLAotCQkJCSAgICBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiYjNDM7c3RhdGljIGludCBvZl9tZGlvYnVzX2xpbmtfbWRpb2RldihzdHJ1Y3QgbWlpX2J1cyAqYnVzLAomIzQzOwkJCQkgICBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDttZGlvZGV2LSZndDtkZXY7CiAKIAlpZiAoZGV2LSZndDtvZl9ub2RlIHx8ICFidXMtJmd0O2Rldi5vZl9ub2RlKQotCQlyZXR1cm47CiYjNDM7CQlyZXR1cm4gMDsKIAotCW9mX21kaW9idXNfZmluZF9waHkoZGV2LCBtZGlvZGV2LCBidXMtJmd0O2Rldi5vZl9ub2RlKTsKJiM0MzsJcmV0dXJuIG9mX21kaW9idXNfZmluZF9waHkoZGV2LCBtZGlvZGV2LCBidXMtJmd0O2Rldi5vZl9ub2RlKTsKIH0KICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBjNDUpCiYjNDM7c3RhdGljIHN0cnVjdCBwaHlfZGV2aWNlICpfX21kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwKJiM0MzsJCQkJCSBib29sIGM0NSkKIHsKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gRVJSX1BUUigtRU5PREVWKTsKIAlzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlOwomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19PRl9NRElPKQomIzQzOwlib29sIG9mX25vZGVfcG9wdWxhdGVkID0gZmFsc2U7CiYjNDM7I2VuZGlmCiAJY2hhciBub2RlX25hbWVbMTZdOwogCWludCBlcnI7CiAKQEAgLTQyMCw3ICYjNDM7NDMyLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RldmljZSAqbWRpb2J1c19zY2FuKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGM0NSkKIAkvKiBGb3IgRFQsIHNlZSBpZiB0aGUgYXV0by1wcm9iZWQgcGh5IGhhcyBhIGNvcnJlc3BvbmRpbmcgY2hpbGQKIAkgKiBpbiB0aGUgYnVzIG5vZGUsIGFuZCBzZXQgdGhlIG9mX25vZGUgcG9pbnRlciBpbiB0aGlzIGNhc2UuCiAJICovCi0Jb2ZfbWRpb2J1c19saW5rX21kaW9kZXYoYnVzLCAmYW1wO3BoeWRldi0mZ3Q7bWRpbyk7CiYjNDM7CWVyciA9IG9mX21kaW9idXNfbGlua19tZGlvZGV2KGJ1cywgJmFtcDtwaHlkZXYtJmd0O21kaW8pOwomIzQzOwlpZiAoZXJyID09IC1FQlVTWSkgewomIzQzOwkJcGh5X2RldmljZV9mcmVlKHBoeWRldik7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKJiM0MzsJfQomIzQzOwlvZl9ub2RlX3BvcHVsYXRlZCA9ICEhcGh5ZGV2LSZndDttZGlvLmRldi5vZl9ub2RlOwogI2VuZGlmCiAKIAkvKiBTZWFyY2ggZm9yIGEgc3dub2RlIGZvciB0aGUgcGh5IGluIHRoZSBzd25vZGUgaGllcmFyY2h5IG9mIHRoZSBidXMuCkBAIC00MzcsNiAmIzQzOzQ1NCwxMSBAQCBzdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBjNDUpCiAKIAllcnIgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeWRldik7CiAJaWYgKGVycikgewomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19PRl9NRElPKQomIzQzOwkJaWYgKG9mX25vZGVfcG9wdWxhdGVkKQomIzQzOwkJCW9mX25vZGVfY2xlYXJfZmxhZyhwaHlkZXYtJmd0O21kaW8uZGV2Lm9mX25vZGUsCiYjNDM7CQkJCQkgICBPRl9QT1BVTEFURUQpOwomIzQzOyNlbmRpZgogCQlwaHlfZGV2aWNlX2ZyZWUocGh5ZGV2KTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CiAJfQpAQCAtNDU4LDcgJiM0Mzs0ODAsMTcgQEAgc3RhdGljIHN0cnVjdCBwaHlfZGV2aWNlICptZGlvYnVzX3NjYW4oc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgYzQ1KQogICovCiBzdHJ1Y3QgcGh5X2RldmljZSAqbWRpb2J1c19zY2FuX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcikKIHsKLQlyZXR1cm4gbWRpb2J1c19zY2FuKGJ1cywgYWRkciwgZmFsc2UpOwomIzQzOwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwllcnIgPSBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4oYnVzLCBmYWxzZSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihlcnIpOwomIzQzOwomIzQzOwlwaHlkZXYgPSBfX21kaW9idXNfc2NhbihidXMsIGFkZHIsIGZhbHNlKTsKJiM0MzsJbWRpb2J1c19kZXZpY2VfY2hhbmdlX2VuZChidXMsIGZhbHNlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHBoeWRldjsKIH0KIEVYUE9SVF9TWU1CT0wobWRpb2J1c19zY2FuX2MyMik7CiAKQEAgLTQ3Niw3ICYjNDM7NTA4LDcgQEAgRVhQT1JUX1NZTUJPTChtZGlvYnVzX3NjYW5fYzIyKTsKICAqLwogc3RhdGljIHN0cnVjdCBwaHlfZGV2aWNlICptZGlvYnVzX3NjYW5fYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyKQogewotCXJldHVybiBtZGlvYnVzX3NjYW4oYnVzLCBhZGRyLCB0cnVlKTsKJiM0MzsJcmV0dXJuIF9fbWRpb2J1c19zY2FuKGJ1cywgYWRkciwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyBpbnQgbWRpb2J1c19zY2FuX2J1c19jMjIoc3RydWN0IG1paV9idXMgKmJ1cykKQEAgLTQ4Nyw3ICYjNDM7NTE5LDcgQEAgc3RhdGljIGludCBtZGlvYnVzX3NjYW5fYnVzX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzKQogCQlpZiAoKGJ1cy0mZ3Q7cGh5X21hc2sgJmFtcDsgQklUKGkpKSA9PSAwKSB7CiAJCQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwogCi0JCQlwaHlkZXYgPSBtZGlvYnVzX3NjYW5fYzIyKGJ1cywgaSk7CiYjNDM7CQkJcGh5ZGV2ID0gX19tZGlvYnVzX3NjYW4oYnVzLCBpLCBmYWxzZSk7CiAJCQlpZiAoSVNfRVJSKHBoeWRldikgJmFtcDsmYW1wOyAoUFRSX0VSUihwaHlkZXYpICE9IC1FTk9ERVYpKQogCQkJCXJldHVybiBQVFJfRVJSKHBoeWRldik7CiAJCX0KQEAgLTUwNCw3ICYjNDM7NTM2LDcgQEAgc3RhdGljIGludCBtZGlvYnVzX3NjYW5fYnVzX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzKQogCQkJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKIAogCQkJLyogRG9uJiMzOTt0IHNjYW4gQzQ1IGlmIHdlIGFscmVhZHkgaGF2ZSBhIEMyMiBkZXZpY2UgKi8KLQkJCWlmIChidXMtJmd0O21kaW9fbWFwW2ldKQomIzQzOwkJCWlmIChtZGlvYnVzX2lzX3JlZ2lzdGVyZWRfZGV2aWNlKGJ1cywgaSkpCiAJCQkJY29udGludWU7CiAKIAkJCXBoeWRldiA9IG1kaW9idXNfc2Nhbl9jNDUoYnVzLCBpKTsKQEAgLTUzNiw2ICYjNDM7NTY4LDQ0IEBAIHN0YXRpYyBib29sIG1kaW9idXNfcHJldmVudF9jNDVfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzKQogCXJldHVybiBmYWxzZTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG1kaW9idXNfc3RvcF9kZXZpY2VfY2hhbmdlcyhzdHJ1Y3QgbWlpX2J1cyAqYnVzKQomIzQzO3sKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfbG9jayk7CiYjNDM7CWJ1cy0mZ3Q7c3RhdGUgPSBNRElPQlVTX1VOUkVHSVNURVJJTkc7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfbG9jayk7CiYjNDM7CiYjNDM7CXdhaXRfZXZlbnQoYnVzLSZndDttZGlvX21hcF93YWl0LCAhUkVBRF9PTkNFKGJ1cy0mZ3Q7bWRpb19tYXBfb3BzKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1kaW9idXNfcmVtb3ZlX2RldmljZXMoc3RydWN0IG1paV9idXMgKmJ1cykKJiM0Mzt7CiYjNDM7CUxJU1RfSEVBRChyZW1vdmVkKTsKJiM0MzsJc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCAqbmV4dDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBQSFlfTUFYX0FERFI7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQltZGlvZGV2ID0gYnVzLSZndDttZGlvX21hcFtpXTsKJiM0MzsJCWlmICghbWRpb2RldikKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCW1kaW9kZXYtJmd0O2RldmljZV9yZW1vdmUobWRpb2Rldik7CiYjNDM7CQltZGlvZGV2LSZndDtkZXZpY2VfZnJlZShtZGlvZGV2KTsKJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7YnVzLSZndDttZGlvX21hcF9sb2NrKTsKJiM0MzsJbGlzdF9zcGxpY2VfaW5pdCgmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfcmV0aXJlZCwgJmFtcDtyZW1vdmVkKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7YnVzLSZndDttZGlvX21hcF9sb2NrKTsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1kaW9kZXYsIG5leHQsICZhbXA7cmVtb3ZlZCwgcmV0aXJlZF9ub2RlKSB7CiYjNDM7CQlsaXN0X2RlbF9pbml0KCZhbXA7bWRpb2Rldi0mZ3Q7cmV0aXJlZF9ub2RlKTsKJiM0MzsJCW1kaW9fZGV2aWNlX3B1dChtZGlvZGV2KTsKJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7YnVzLSZndDttZGlvX21hcF9sb2NrKTsKJiM0MzsJYnVzLSZndDtzdGF0ZSA9IE1ESU9CVVNfVU5SRUdJU1RFUkVEOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtidXMtJmd0O21kaW9fbWFwX2xvY2spOwomIzQzO30KJiM0MzsKIC8qKgogICogX19tZGlvYnVzX3JlZ2lzdGVyIC0gYnJpbmcgdXAgYWxsIHRoZSBQSFlzIG9uIGEgZ2l2ZW4gYnVzIGFuZCBhdHRhY2ggdGhlbSB0byBidXMKICAqIEBidXM6IHRhcmdldCBtaWlfYnVzCkBAIC01NTIsMTAgJiM0Mzs2MjIsOSBAQCBzdGF0aWMgYm9vbCBtZGlvYnVzX3ByZXZlbnRfYzQ1X3NjYW4oc3RydWN0IG1paV9idXMgKmJ1cykKICAqLwogaW50IF9fbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBzdHJ1Y3QgbW9kdWxlICpvd25lcikKIHsKLQlzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7CiAJc3RydWN0IGdwaW9fZGVzYyAqZ3Bpb2Q7CiAJYm9vbCBwcmV2ZW50X2M0NV9zY2FuOwotCWludCBpLCBlcnI7CiYjNDM7CWludCBlcnI7CiAKIAlpZiAoIWJ1cyB8fCAhYnVzLSZndDtuYW1lKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTU5Niw3ICYjNDM7NjY1LDkgQEAgaW50IF9fbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBzdHJ1Y3QgbW9kdWxlICpvd25lcikKIAkgKgogCSAqIFN0YXRlIHdpbGwgYmUgdXBkYXRlZCBsYXRlciBpbiB0aGlzIGZ1bmN0aW9uIGluIGNhc2Ugb2Ygc3VjY2VzcwogCSAqLwomIzQzOwltdXRleF9sb2NrKCZhbXA7YnVzLSZndDttZGlvX21hcF9sb2NrKTsKIAlidXMtJmd0O3N0YXRlID0gTURJT0JVU19VTlJFR0lTVEVSRUQ7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfbG9jayk7CiAKIAllcnIgPSBkZXZpY2VfcmVnaXN0ZXIoJmFtcDtidXMtJmd0O2Rldik7CiAJaWYgKGVycikgewpAQCAtNjEzLDggJiM0Mzs2ODQsNyBAQCBpbnQgX19tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICpidXMsIHN0cnVjdCBtb2R1bGUgKm93bmVyKQogCQllcnIgPSBkZXZfZXJyX3Byb2JlKCZhbXA7YnVzLSZndDtkZXYsIFBUUl9FUlIoZ3Bpb2QpLAogCQkJCSAgICAmIzM0O21paV9idXMgJXMgY291bGRuJiMzOTt0IGdldCByZXNldCBHUElPXG4mIzM0OywKIAkJCQkgICAgYnVzLSZndDtpZCk7Ci0JCWRldmljZV9kZWwoJmFtcDtidXMtJmd0O2Rldik7Ci0JCXJldHVybiBlcnI7CiYjNDM7CQlnb3RvIGVycm9yX3Jlc2V0X2dwaW9kOwogCX0gZWxzZQlpZiAoZ3Bpb2QpIHsKIAkJYnVzLSZndDtyZXNldF9ncGlvZCA9IGdwaW9kOwogCQlmc2xlZXAoYnVzLSZndDtyZXNldF9kZWxheV91cyk7CkBAIC02MjksNiAmIzQzOzY5OSwxMCBAQCBpbnQgX19tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICpidXMsIHN0cnVjdCBtb2R1bGUgKm93bmVyKQogCQkJZ290byBlcnJvcl9yZXNldF9ncGlvZDsKIAl9CiAKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfbG9jayk7CiYjNDM7CWJ1cy0mZ3Q7c3RhdGUgPSBNRElPQlVTX1JFR0lTVEVSSU5HOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtidXMtJmd0O21kaW9fbWFwX2xvY2spOwomIzQzOwogCWlmIChidXMtJmd0O3JlYWQpIHsKIAkJZXJyID0gbWRpb2J1c19zY2FuX2J1c19jMjIoYnVzKTsKIAkJaWYgKGVycikKQEAgLTY0MywyMCAmIzQzOzcxNywxNyBAQCBpbnQgX19tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICpidXMsIHN0cnVjdCBtb2R1bGUgKm93bmVyKQogCQkJZ290byBlcnJvcjsKIAl9CiAKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfbG9jayk7CiAJYnVzLSZndDtzdGF0ZSA9IE1ESU9CVVNfUkVHSVNURVJFRDsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7YnVzLSZndDttZGlvX21hcF9sb2NrKTsKIAlkZXZfZGJnKCZhbXA7YnVzLSZndDtkZXYsICYjMzQ7cHJvYmVkXG4mIzM0Oyk7CiAJcmV0dXJuIDA7CiAKIGVycm9yOgotCWZvciAoaSA9IDA7IGkgJmx0OyBQSFlfTUFYX0FERFI7IGkmIzQzOyYjNDM7KSB7Ci0JCW1kaW9kZXYgPSBidXMtJmd0O21kaW9fbWFwW2ldOwotCQlpZiAoIW1kaW9kZXYpCi0JCQljb250aW51ZTsKLQotCQltZGlvZGV2LSZndDtkZXZpY2VfcmVtb3ZlKG1kaW9kZXYpOwotCQltZGlvZGV2LSZndDtkZXZpY2VfZnJlZShtZGlvZGV2KTsKLQl9CiBlcnJvcl9yZXNldF9ncGlvZDoKJiM0MzsJbWRpb2J1c19zdG9wX2RldmljZV9jaGFuZ2VzKGJ1cyk7CiYjNDM7CW1kaW9idXNfcmVtb3ZlX2RldmljZXMoYnVzKTsKJiM0MzsKIAkvKiBQdXQgUEhZcyBpbiBSRVNFVCB0byBzYXZlIHBvd2VyICovCiAJaWYgKGJ1cy0mZ3Q7cmVzZXRfZ3Bpb2QpCiAJCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChidXMtJmd0O3Jlc2V0X2dwaW9kLCAxKTsKQEAgLTY2OCwyMSAmIzQzOzczOSwxMSBAQCBFWFBPUlRfU1lNQk9MKF9fbWRpb2J1c19yZWdpc3Rlcik7CiAKIHZvaWQgbWRpb2J1c191bnJlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICpidXMpCiB7Ci0Jc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2OwotCWludCBpOwotCiAJaWYgKFdBUk5fT05fT05DRShidXMtJmd0O3N0YXRlICE9IE1ESU9CVVNfUkVHSVNURVJFRCkpCiAJCXJldHVybjsKLQlidXMtJmd0O3N0YXRlID0gTURJT0JVU19VTlJFR0lTVEVSRUQ7Ci0KLQlmb3IgKGkgPSAwOyBpICZsdDsgUEhZX01BWF9BRERSOyBpJiM0MzsmIzQzOykgewotCQltZGlvZGV2ID0gYnVzLSZndDttZGlvX21hcFtpXTsKLQkJaWYgKCFtZGlvZGV2KQotCQkJY29udGludWU7CiAKLQkJbWRpb2Rldi0mZ3Q7ZGV2aWNlX3JlbW92ZShtZGlvZGV2KTsKLQkJbWRpb2Rldi0mZ3Q7ZGV2aWNlX2ZyZWUobWRpb2Rldik7Ci0JfQomIzQzOwltZGlvYnVzX3N0b3BfZGV2aWNlX2NoYW5nZXMoYnVzKTsKJiM0MzsJbWRpb2J1c19yZW1vdmVfZGV2aWNlcyhidXMpOwogCiAJLyogUHV0IFBIWXMgaW4gUkVTRVQgdG8gc2F2ZSBwb3dlciAqLwogCWlmIChidXMtJmd0O3Jlc2V0X2dwaW9kKQpAQCAtNzAyLDggJiM0Mzs3NjMsMTEgQEAgRVhQT1JUX1NZTUJPTChtZGlvYnVzX3VucmVnaXN0ZXIpOwogICovCiB2b2lkIG1kaW9idXNfZnJlZShzdHJ1Y3QgbWlpX2J1cyAqYnVzKQogewomIzQzOwltdXRleF9sb2NrKCZhbXA7YnVzLSZndDttZGlvX21hcF9sb2NrKTsKJiM0MzsKIAkvKiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIGVycm9yIGhhbmRsaW5nIGluIGRyaXZlcnMuICovCiAJaWYgKGJ1cy0mZ3Q7c3RhdGUgPT0gTURJT0JVU19BTExPQ0FURUQpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfbG9jayk7CiAJCWtmcmVlKGJ1cyk7CiAJCXJldHVybjsKIAl9CkBAIC03MTEsNiAmIzQzOzc3NSw3IEBAIHZvaWQgbWRpb2J1c19mcmVlKHN0cnVjdCBtaWlfYnVzICpidXMpCiAJV0FSTihidXMtJmd0O3N0YXRlICE9IE1ESU9CVVNfVU5SRUdJU1RFUkVELAogCSAgICAgJiMzNDslczogbm90IGluIFVOUkVHSVNURVJFRCBzdGF0ZVxuJiMzNDssIGJ1cy0mZ3Q7aWQpOwogCWJ1cy0mZ3Q7c3RhdGUgPSBNRElPQlVTX1JFTEVBU0VEOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtidXMtJmd0O21kaW9fbWFwX2xvY2spOwogCiAJcHV0X2RldmljZSgmYW1wO2J1cy0mZ3Q7ZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMKaW5kZXggMDYxNTFmMjA3MTM0Ni4uM2IxOWU4MzE1ZjYxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMKQEAgLTE1LDYgJiM0MzsxNSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbWRpby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21paS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9vZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Jlc2V0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwpAQCAtMzMsMTIgJiM0MzszNCwxNiBAQAogc3RhdGljIGludCBtZGlvX2RldmljZV9yZWdpc3Rlcl9yZXNldChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiB7CiAJc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJlc2V0OwomIzQzOwlpbnQgZXJyOwogCiAJLyogRGVhc3NlcnQgdGhlIG9wdGlvbmFsIHJlc2V0IHNpZ25hbCAqLwogCW1kaW9kZXYtJmd0O3Jlc2V0X2dwaW8gPSBncGlvZF9nZXRfb3B0aW9uYWwoJmFtcDttZGlvZGV2LSZndDtkZXYsCiAJCQkJCQkgJiMzNDtyZXNldCYjMzQ7LCBHUElPRF9PVVRfTE9XKTsKLQlpZiAoSVNfRVJSKG1kaW9kZXYtJmd0O3Jlc2V0X2dwaW8pKQotCQlyZXR1cm4gUFRSX0VSUihtZGlvZGV2LSZndDtyZXNldF9ncGlvKTsKJiM0MzsJaWYgKElTX0VSUihtZGlvZGV2LSZndDtyZXNldF9ncGlvKSkgewomIzQzOwkJZXJyID0gUFRSX0VSUihtZGlvZGV2LSZndDtyZXNldF9ncGlvKTsKJiM0MzsJCW1kaW9kZXYtJmd0O3Jlc2V0X2dwaW8gPSBOVUxMOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQogCiAJaWYgKG1kaW9kZXYtJmd0O3Jlc2V0X2dwaW8pCiAJCWdwaW9kX3NldF9jb25zdW1lcl9uYW1lKG1kaW9kZXYtJmd0O3Jlc2V0X2dwaW8sICYjMzQ7UEhZIHJlc2V0JiMzNDspOwpAQCAtMTE2LDYgJiM0MzsxMjEsMTMgQEAgc3RhdGljIHZvaWQgbWRpb19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJa2ZyZWUodG9fbWRpb19kZXZpY2UoZGV2KSk7CiB9CiAKJiM0MztzdGF0aWMgaW50IF9fbWRpb19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IG1kaW9fZGV2aWNlX3JlbW92ZV9keW5hbWljKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldikKJiM0Mzt7CiYjNDM7CXJldHVybiBfX21kaW9fZGV2aWNlX3JlbW92ZShtZGlvZGV2LCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9fZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcikKIHsKIAlzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7CkBAIC0xMzAsOSAmIzQzOzE0MiwxMSBAQCBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9fZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcikKIAltZGlvZGV2LSZndDtkZXYuYnVzID0gJmFtcDttZGlvX2J1c190eXBlOwogCW1kaW9kZXYtJmd0O2RldmljZV9mcmVlID0gbWRpb19kZXZpY2VfZnJlZTsKIAltZGlvZGV2LSZndDtkZXZpY2VfcmVtb3ZlID0gbWRpb19kZXZpY2VfcmVtb3ZlOwomIzQzOwltZGlvZGV2LSZndDtkZXZpY2VfcmVtb3ZlX2R5bmFtaWMgPSBtZGlvX2RldmljZV9yZW1vdmVfZHluYW1pYzsKIAltZGlvZGV2LSZndDtidXMgPSBidXM7CiAJbWRpb2Rldi0mZ3Q7YWRkciA9IGFkZHI7CiAJbWRpb2Rldi0mZ3Q7cmVzZXRfc3RhdGUgPSAtMTsKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDttZGlvZGV2LSZndDtyZXRpcmVkX25vZGUpOwogCiAJZGV2X3NldF9uYW1lKCZhbXA7bWRpb2Rldi0mZ3Q7ZGV2LCBQSFlfSURfRk1ULCBidXMtJmd0O2lkLCBhZGRyKTsKIApAQCAtMTU5LDE5ICYjNDM7MTczLDI3IEBAIGludCBtZGlvX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiAJCXJldHVybiBlcnI7CiAKIAllcnIgPSBkZXZpY2VfYWRkKCZhbXA7bWRpb2Rldi0mZ3Q7ZGV2KTsKLQlpZiAoZXJyKSB7CiYjNDM7CWlmIChlcnIpCiAJCXByX2VycigmIzM0O01ESU8gJWQgZmFpbGVkIHRvIGFkZFxuJiMzNDssIG1kaW9kZXYtJmd0O2FkZHIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyZXR1cm4gMDsKIAotIG91dDoKLQltZGlvYnVzX3VucmVnaXN0ZXJfZGV2aWNlKG1kaW9kZXYpOwotCXJldHVybiBlcnI7CiYjNDM7CXJldHVybiBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lKG1kaW9kZXYsIGVycik7CiB9CiBFWFBPUlRfU1lNQk9MKG1kaW9fZGV2aWNlX3JlZ2lzdGVyKTsKIAomIzQzO3N0YXRpYyBpbnQgX19tZGlvX2RldmljZV9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIGR5bmFtaWMpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwllcnIgPSBtZGlvYnVzX2JlZ2luX3JlbW92ZShtZGlvZGV2LCBkeW5hbWljKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWRldmljZV9kZWwoJmFtcDttZGlvZGV2LSZndDtkZXYpOwomIzQzOwltZGlvYnVzX2ZpbmlzaF9yZW1vdmUobWRpb2RldiwgZHluYW1pYyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qKgogICogbWRpb19kZXZpY2VfcmVtb3ZlIC0gUmVtb3ZlIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIG1kaW8gZGV2aWNlIGZyb20gdGhlCiAgKgkJCU1ESU8gYnVzCkBAIC0xODMsNDIgJiM0MzsyMDUsMjExIEBAIEVYUE9SVF9TWU1CT0wobWRpb19kZXZpY2VfcmVnaXN0ZXIpOwogICovCiB2b2lkIG1kaW9fZGV2aWNlX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiB7Ci0JZGV2aWNlX2RlbCgmYW1wO21kaW9kZXYtJmd0O2Rldik7Ci0JbWRpb2J1c191bnJlZ2lzdGVyX2RldmljZShtZGlvZGV2KTsKJiM0MzsJX19tZGlvX2RldmljZV9yZW1vdmUobWRpb2RldiwgZmFsc2UpOwogfQogRVhQT1JUX1NZTUJPTChtZGlvX2RldmljZV9yZW1vdmUpOwogCiBpbnQgbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KQogewomIzQzOwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpb2Rldi0mZ3Q7YnVzOwogCWludCBlcnI7CiAKLQlpZiAobWRpb2Rldi0mZ3Q7YnVzLSZndDttZGlvX21hcFttZGlvZGV2LSZndDthZGRyXSkKLQkJcmV0dXJuIC1FQlVTWTsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfbG9jayk7CiYjNDM7CWlmIChidXMtJmd0O3N0YXRlICE9IE1ESU9CVVNfUkVHSVNURVJJTkcgJmFtcDsmYW1wOwomIzQzOwkgICAgYnVzLSZndDtzdGF0ZSAhPSBNRElPQlVTX1JFR0lTVEVSRUQpIHsKJiM0MzsJCWVyciA9IC1FTk9ERVY7CiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CX0KJiM0MzsJaWYgKGJ1cy0mZ3Q7bWRpb19tYXBfcmVtb3ZhbHMpIHsKJiM0MzsJCWVyciA9IC1FQlVTWTsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoYnVzLSZndDttZGlvX21hcFttZGlvZGV2LSZndDthZGRyXSB8fAomIzQzOwkgICAgYnVzLSZndDttZGlvX21hcF9wZW5kaW5nICZhbXA7IEJJVChtZGlvZGV2LSZndDthZGRyKSkgewomIzQzOwkJZXJyID0gLUVCVVNZOwomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWJ1cy0mZ3Q7bWRpb19tYXBfcGVuZGluZyB8PSBCSVQobWRpb2Rldi0mZ3Q7YWRkcik7CiYjNDM7CWJ1cy0mZ3Q7bWRpb19tYXBfb3BzJiM0MzsmIzQzOzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7YnVzLSZndDttZGlvX21hcF9sb2NrKTsKIAogCWlmIChtZGlvZGV2LSZndDtmbGFncyAmYW1wOyBNRElPX0RFVklDRV9GTEFHX1BIWSkgewogCQllcnIgPSBtZGlvX2RldmljZV9yZWdpc3Rlcl9yZXNldChtZGlvZGV2KTsKLQkJaWYgKGVycikKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQltZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lKG1kaW9kZXYsIGVycik7CiAJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQogCiAJCS8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovCiAJCW1kaW9fZGV2aWNlX3Jlc2V0KG1kaW9kZXYsIDEpOwogCX0KIAotCW1kaW9kZXYtJmd0O2J1cy0mZ3Q7bWRpb19tYXBbbWRpb2Rldi0mZ3Q7YWRkcl0gPSBtZGlvZGV2OwomIzQzOwltdXRleF9sb2NrKCZhbXA7YnVzLSZndDttZGlvX21hcF9sb2NrKTsKJiM0MzsJLyogVGVhcmRvd24gd2FpdHMgZm9yIHRoaXMgcmVnaXN0cmF0aW9uIGJlZm9yZSBjb25zdW1pbmcgdGhlIG1hcC4gKi8KJiM0MzsJc21wX3N0b3JlX3JlbGVhc2UoJmFtcDtidXMtJmd0O21kaW9fbWFwW21kaW9kZXYtJmd0O2FkZHJdLCBtZGlvZGV2KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7YnVzLSZndDttZGlvX21hcF9sb2NrKTsKIAogCXJldHVybiAwOwomIzQzOwomIzQzO291dF91bmxvY2s6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfbG9jayk7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKLWludCBtZGlvYnVzX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldikKJiM0MzsvKioKJiM0MzsgKiBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4gLSBzdGFydCBjaGFuZ2luZyBkZXZpY2VzIG9uIGEgcmVnaXN0ZXJlZCBidXMKJiM0MzsgKiBAYnVzOiBNRElPIGJ1cyB0aGF0IHdpbGwgYmUgc2Nhbm5lZCBvciBjaGFuZ2VkCiYjNDM7ICogQHJlbW92aW5nOiB3aGV0aGVyIFBIWSBhdHRhY2htZW50IG11c3QgYmUgYmxvY2tlZCBkdXJpbmcgdGhlIGNoYW5nZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIHdoZW4gdGhlIGJ1cyBpcyB1bmF2YWlsYWJsZQomIzQzOyAqLwomIzQzO2ludCBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4oc3RydWN0IG1paV9idXMgKmJ1cywgYm9vbCByZW1vdmluZykKIHsKLQlpZiAobWRpb2Rldi0mZ3Q7YnVzLSZndDttZGlvX21hcFttZGlvZGV2LSZndDthZGRyXSAhPSBtZGlvZGV2KQotCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtidXMtJmd0O21kaW9fbWFwX2xvY2spOwomIzQzOwlpZiAoYnVzLSZndDtzdGF0ZSAhPSBNRElPQlVTX1JFR0lTVEVSRUQpIHsKJiM0MzsJCWVyciA9IC1FTk9ERVY7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlidXMtJmd0O21kaW9fbWFwX29wcyYjNDM7JiM0Mzs7CiYjNDM7CQlpZiAocmVtb3ZpbmcpCiYjNDM7CQkJYnVzLSZndDttZGlvX21hcF9yZW1vdmFscyYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7YnVzLSZndDttZGlvX21hcF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKTsKIAotCW1kaW9fZGV2aWNlX3VucmVnaXN0ZXJfcmVzZXQobWRpb2Rldik7CiYjNDM7c3RhdGljIHZvaWQgbWRpb2J1c19vcGVyYXRpb25fZG9uZV9sb2NrZWQoc3RydWN0IG1paV9idXMgKmJ1cykKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtidXMtJmd0O21kaW9fbWFwX2xvY2spOwogCi0JbWRpb2Rldi0mZ3Q7YnVzLSZndDttZGlvX21hcFttZGlvZGV2LSZndDthZGRyXSA9IE5VTEw7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIWJ1cy0mZ3Q7bWRpb19tYXBfb3BzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsJYnVzLSZndDttZGlvX21hcF9vcHMtLTsKJiM0MzsJaWYgKCFidXMtJmd0O21kaW9fbWFwX29wcykKJiM0MzsJCXdha2VfdXBfYWxsKCZhbXA7YnVzLSZndDttZGlvX21hcF93YWl0KTsKJiM0Mzt9CiAKLQlyZXR1cm4gMDsKJiM0MzsvKioKJiM0MzsgKiBtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kIC0gZmluaXNoIGNoYW5naW5nIGRldmljZXMgb24gYW4gTURJTyBidXMKJiM0MzsgKiBAYnVzOiBNRElPIGJ1cyBwcmV2aW91c2x5IHBhc3NlZCB0byBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4oKQomIzQzOyAqIEByZW1vdmluZzogdmFsdWUgcGFzc2VkIHRvIG1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbigpCiYjNDM7ICovCiYjNDM7dm9pZCBtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kKHN0cnVjdCBtaWlfYnVzICpidXMsIGJvb2wgcmVtb3ZpbmcpCiYjNDM7ewomIzQzOwltdXRleF9sb2NrKCZhbXA7YnVzLSZndDttZGlvX21hcF9sb2NrKTsKJiM0MzsJaWYgKHJlbW92aW5nKSB7CiYjNDM7CQlpZiAoIVdBUk5fT05fT05DRSghYnVzLSZndDttZGlvX21hcF9yZW1vdmFscykpCiYjNDM7CQkJYnVzLSZndDttZGlvX21hcF9yZW1vdmFscy0tOwomIzQzOwl9CiYjNDM7CW1kaW9idXNfb3BlcmF0aW9uX2RvbmVfbG9ja2VkKGJ1cyk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfbG9jayk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmQpOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1kaW9idXNfb3BlcmF0aW9uX2RvbmUoc3RydWN0IG1paV9idXMgKmJ1cykKJiM0Mzt7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtidXMtJmd0O21kaW9fbWFwX2xvY2spOwomIzQzOwltZGlvYnVzX29wZXJhdGlvbl9kb25lX2xvY2tlZChidXMpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtidXMtJmd0O21kaW9fbWFwX2xvY2spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtZGlvYnVzX3VucHVibGlzaF9kZXZpY2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG1paV9idXMgKmJ1cyA9IG1kaW9kZXYtJmd0O2J1czsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChidXMtJmd0O21kaW9fbWFwW21kaW9kZXYtJmd0O2FkZHJdID09IG1kaW9kZXYpCiYjNDM7CQlXUklURV9PTkNFKGJ1cy0mZ3Q7bWRpb19tYXBbbWRpb2Rldi0mZ3Q7YWRkcl0sIE5VTEwpOwomIzQzOwlpZiAobWRpb2Rldi0mZ3Q7ZGV2Lm9mX25vZGUpCiYjNDM7CQlvZl9ub2RlX2NsZWFyX2ZsYWcobWRpb2Rldi0mZ3Q7ZGV2Lm9mX25vZGUsIE9GX1BPUFVMQVRFRCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgaW50IGVycikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICpidXMgPSBtZGlvZGV2LSZndDtidXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtidXMtJmd0O21kaW9fbWFwX2xvY2spOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCEoYnVzLSZndDttZGlvX21hcF9wZW5kaW5nICZhbXA7IEJJVChtZGlvZGV2LSZndDthZGRyKSkpKQomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJbWRpb2J1c191bnB1Ymxpc2hfZGV2aWNlKG1kaW9kZXYpOwomIzQzOwllbHNlCiYjNDM7CQlXQVJOX09OX09OQ0UoYnVzLSZndDttZGlvX21hcFttZGlvZGV2LSZndDthZGRyXSAhPSBtZGlvZGV2KTsKJiM0MzsKJiM0MzsJYnVzLSZndDttZGlvX21hcF9wZW5kaW5nICZhbXA7PSB+QklUKG1kaW9kZXYtJmd0O2FkZHIpOwomIzQzOwomIzQzO291dF91bmxvY2s6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfbG9jayk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWlmIChtZGlvZGV2LSZndDtmbGFncyAmYW1wOyBNRElPX0RFVklDRV9GTEFHX1BIWSkgewomIzQzOwkJCW1kaW9fZGV2aWNlX3Jlc2V0KG1kaW9kZXYsIDEpOwomIzQzOwkJCW1kaW9fZGV2aWNlX3VucmVnaXN0ZXJfcmVzZXQobWRpb2Rldik7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJbWRpb2J1c19vcGVyYXRpb25fZG9uZShidXMpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWRpb2J1c19iZWdpbl9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIGR5bmFtaWMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpb2Rldi0mZ3Q7YnVzOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfbG9jayk7CiYjNDM7CWlmIChkeW5hbWljICZhbXA7JmFtcDsgKGJ1cy0mZ3Q7c3RhdGUgPT0gTURJT0JVU19VTlJFR0lTVEVSRUQgfHwKJiM0MzsJCQlidXMtJmd0O3N0YXRlID09IE1ESU9CVVNfUkVMRUFTRUQpKSB7CiYjNDM7CQllcnIgPSAtRU5PREVWOwomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzOwl9CiYjNDM7CWlmIChidXMtJmd0O21kaW9fbWFwX3BlbmRpbmcgJmFtcDsgQklUKG1kaW9kZXYtJmd0O2FkZHIpKSB7CiYjNDM7CQllcnIgPSAtRUJVU1k7CiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGJ1cy0mZ3Q7bWRpb19tYXBbbWRpb2Rldi0mZ3Q7YWRkcl0gIT0gbWRpb2RldikgewomIzQzOwkJZXJyID0gLUVOT0RFVjsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZHluYW1pYyAmYW1wOyZhbXA7IG1kaW9kZXYtJmd0O2ZsYWdzICZhbXA7IE1ESU9fREVWSUNFX0ZMQUdfUEhZICZhbXA7JmFtcDsKJiM0MzsJICAgIHRvX3BoeV9kZXZpY2UoJmFtcDttZGlvZGV2LSZndDtkZXYpLSZndDthdHRhY2hlZCkgewomIzQzOwkJZXJyID0gLUVCVVNZOwomIzQzOwkJZ290byBvdXRfdW5sb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1kaW9idXNfdW5wdWJsaXNoX2RldmljZShtZGlvZGV2KTsKJiM0MzsKJiM0MzsJaWYgKGR5bmFtaWMpIHsKJiM0MzsJCW1kaW9fZGV2aWNlX2dldChtZGlvZGV2KTsKJiM0MzsJCWxpc3RfYWRkX3RhaWwoJmFtcDttZGlvZGV2LSZndDtyZXRpcmVkX25vZGUsICZhbXA7YnVzLSZndDttZGlvX21hcF9yZXRpcmVkKTsKJiM0MzsJfQomIzQzOwomIzQzO291dF91bmxvY2s6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfbG9jayk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbWRpb2J1c19maW5pc2hfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKQomIzQzO3sKJiM0MzsJc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZTsKJiM0MzsKJiM0MzsJaWYgKG1kaW9kZXYtJmd0O2ZsYWdzICZhbXA7IE1ESU9fREVWSUNFX0ZMQUdfUEhZKQomIzQzOwkJbWRpb19kZXZpY2VfdW5yZWdpc3Rlcl9yZXNldChtZGlvZGV2KTsKJiM0MzsKJiM0MzsJLyogRG8gbm90IGtlZXAgYW4gb3ZlcmxheSBub2RlIGFsaXZlIHdpdGggdGhlIHJldGlyZWQgZGV2aWNlLiAqLwomIzQzOwlpZiAoZHluYW1pYykgewomIzQzOwkJZndub2RlID0gZGV2X2Z3bm9kZSgmYW1wO21kaW9kZXYtJmd0O2Rldik7CiYjNDM7CQlkZXZpY2Vfc2V0X25vZGUoJmFtcDttZGlvZGV2LSZndDtkZXYsIE5VTEwpOwomIzQzOwkJZndub2RlX2hhbmRsZV9wdXQoZndub2RlKTsKJiM0MzsJfQogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCmluZGV4IDk0YjJlODVlMDBhMzcuLjNiMTgyOTU3YzNkZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwpAQCAtMjI3LDYgJiM0MzsyMjcsOCBAQCBzdGF0aWMgdm9pZCBwaHlfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogCWtmcmVlKHRvX3BoeV9kZXZpY2UoZGV2KSk7CiB9CiAKJiM0MztzdGF0aWMgaW50IF9fcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBkeW5hbWljKTsKJiM0MzsKIHN0YXRpYyB2b2lkIHBoeV9tZGlvX2RldmljZV9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KQogewogCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CkBAIC0yMzUsNiAmIzQzOzIzNywxNCBAQCBzdGF0aWMgdm9pZCBwaHlfbWRpb19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldikKIAlwaHlfZGV2aWNlX3JlbW92ZShwaHlkZXYpOwogfQogCiYjNDM7c3RhdGljIGludCBwaHlfbWRpb19kZXZpY2VfcmVtb3ZlX2R5bmFtaWMoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKJiM0MzsKJiM0MzsJcGh5ZGV2ID0gY29udGFpbmVyX29mKG1kaW9kZXYsIHN0cnVjdCBwaHlfZGV2aWNlLCBtZGlvKTsKJiM0MzsJcmV0dXJuIF9fcGh5X2RldmljZV9yZW1vdmUocGh5ZGV2LCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZ2VucGh5X2RyaXZlcjsKIAogc3RhdGljIExJU1RfSEVBRChwaHlfZml4dXBfbGlzdCk7CkBAIC03NjgsNyAmIzQzOzc3OCw5IEBAIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlfZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgdTMyIHBoeV9pZCwKIAltZGlvZGV2LSZndDtmbGFncyA9IE1ESU9fREVWSUNFX0ZMQUdfUEhZOwogCW1kaW9kZXYtJmd0O2RldmljZV9mcmVlID0gcGh5X21kaW9fZGV2aWNlX2ZyZWU7CiAJbWRpb2Rldi0mZ3Q7ZGV2aWNlX3JlbW92ZSA9IHBoeV9tZGlvX2RldmljZV9yZW1vdmU7CiYjNDM7CW1kaW9kZXYtJmd0O2RldmljZV9yZW1vdmVfZHluYW1pYyA9IHBoeV9tZGlvX2RldmljZV9yZW1vdmVfZHluYW1pYzsKIAltZGlvZGV2LSZndDtyZXNldF9zdGF0ZSA9IC0xOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO21kaW9kZXYtJmd0O3JldGlyZWRfbm9kZSk7CiAKIAlkZXYtJmd0O3NwZWVkID0gU1BFRURfVU5LTk9XTjsKIAlkZXYtJmd0O2R1cGxleCA9IERVUExFWF9VTktOT1dOOwpAQCAtMTEyMSwyNSAmIzQzOzExMzMsNDAgQEAgaW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAllcnIgPSBwaHlfc2Nhbl9maXh1cHMocGh5ZGV2KTsKIAlpZiAoZXJyKSB7CiAJCXBoeWRldl9lcnIocGh5ZGV2LCAmIzM0O2ZhaWxlZCB0byBpbml0aWFsaXplXG4mIzM0Oyk7Ci0JCWdvdG8gb3V0OwomIzQzOwkJcmV0dXJuIG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUoJmFtcDtwaHlkZXYtJmd0O21kaW8sIGVycik7CiAJfQogCiAJZXJyID0gZGV2aWNlX2FkZCgmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXYpOwotCWlmIChlcnIpIHsKJiM0MzsJaWYgKGVycikKIAkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7ZmFpbGVkIHRvIGFkZFxuJiMzNDspOwotCQlnb3RvIG91dDsKLQl9CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUoJmFtcDtwaHlkZXYtJmd0O21kaW8sIGVycik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX3BoeV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZHluYW1pYykKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IG1kaW9idXNfYmVnaW5fcmVtb3ZlKCZhbXA7cGh5ZGV2LSZndDttZGlvLCBkeW5hbWljKTsKJiM0MzsJaWYgKGR5bmFtaWMgJmFtcDsmYW1wOyBlcnIgPT0gLUVCVVNZKQomIzQzOwkJZGV2X3dhcm4oJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2LAomIzQzOwkJCSAmIzM0O2Nhbm5vdCByZW1vdmUgYSBQSFkgd2hpbGUgaXQgaXMgYXR0YWNoZWQgb3IgYmVpbmcgcmVnaXN0ZXJlZFxuJiMzNDspOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJdW5yZWdpc3Rlcl9taWlfdGltZXN0YW1wZXIocGh5ZGV2LSZndDttaWlfdHMpOwomIzQzOwlwc2VfY29udHJvbF9wdXQocGh5ZGV2LSZndDtwc2VjKTsKJiM0MzsKJiM0MzsJZGV2aWNlX2RlbCgmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXYpOwogCi0gb3V0OgogCS8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovCiAJcGh5X2RldmljZV9yZXNldChwaHlkZXYsIDEpOwogCi0JbWRpb2J1c191bnJlZ2lzdGVyX2RldmljZSgmYW1wO3BoeWRldi0mZ3Q7bWRpbyk7Ci0JcmV0dXJuIGVycjsKJiM0MzsJbWRpb2J1c19maW5pc2hfcmVtb3ZlKCZhbXA7cGh5ZGV2LSZndDttZGlvLCBkeW5hbWljKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpOwogCiAvKioKICAqIHBoeV9kZXZpY2VfcmVtb3ZlIC0gUmVtb3ZlIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIHBoeSBkZXZpY2UgZnJvbSB0aGUgTURJTyBidXMKQEAgLTExNTEsMTUgJiM0MzsxMTc4LDcgQEAgRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTsKICAqLwogdm9pZCBwaHlfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogewotCXVucmVnaXN0ZXJfbWlpX3RpbWVzdGFtcGVyKHBoeWRldi0mZ3Q7bWlpX3RzKTsKLQlwc2VfY29udHJvbF9wdXQocGh5ZGV2LSZndDtwc2VjKTsKLQotCWRldmljZV9kZWwoJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2KTsKLQotCS8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovCi0JcGh5X2RldmljZV9yZXNldChwaHlkZXYsIDEpOwotCi0JbWRpb2J1c191bnJlZ2lzdGVyX2RldmljZSgmYW1wO3BoeWRldi0mZ3Q7bWRpbyk7CiYjNDM7CV9fcGh5X2RldmljZV9yZW1vdmUocGh5ZGV2LCBmYWxzZSk7CiB9CiBFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVtb3ZlKTsKIApAQCAtMTczNCw2ICYjNDM7MTc1MywzNiBAQCBzdGF0aWMgYm9vbCBwaHlfZHJ2X3N1cHBvcnRzX2lycShjb25zdCBzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2KQogCXJldHVybiBwaHlkcnYtJmd0O2NvbmZpZ19pbnRyICZhbXA7JmFtcDsgcGh5ZHJ2LSZndDtoYW5kbGVfaW50ZXJydXB0OwogfQogCiYjNDM7c3RhdGljIGludCBwaHlfY2xhaW0oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiA9ICZhbXA7cGh5ZGV2LSZndDttZGlvOwomIzQzOwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpb2Rldi0mZ3Q7YnVzOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19tYXBfbG9jayk7CiYjNDM7CWlmIChidXMtJmd0O3N0YXRlICE9IE1ESU9CVVNfUkVHSVNURVJFRCB8fAomIzQzOwkgICAgYnVzLSZndDttZGlvX21hcF9yZW1vdmFscyB8fAomIzQzOwkgICAgYnVzLSZndDttZGlvX21hcFttZGlvZGV2LSZndDthZGRyXSAhPSBtZGlvZGV2IHx8CiYjNDM7CSAgICAoYnVzLSZndDttZGlvX21hcF9wZW5kaW5nICZhbXA7IEJJVChtZGlvZGV2LSZndDthZGRyKSkpCiYjNDM7CQllcnIgPSAtRU5PREVWOwomIzQzOwllbHNlIGlmIChwaHlkZXYtJmd0O2F0dGFjaGVkKQomIzQzOwkJZXJyID0gLUVCVVNZOwomIzQzOwllbHNlCiYjNDM7CQlwaHlkZXYtJmd0O2F0dGFjaGVkID0gdHJ1ZTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7YnVzLSZndDttZGlvX21hcF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcGh5X3JlbGVhc2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtJmd0O21kaW8uYnVzOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7YnVzLSZndDttZGlvX21hcF9sb2NrKTsKJiM0MzsJcGh5ZGV2LSZndDthdHRhY2hlZCA9IGZhbHNlOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtidXMtJmd0O21kaW9fbWFwX2xvY2spOwomIzQzO30KJiM0MzsKIC8qKgogICogcGh5X2F0dGFjaF9kaXJlY3QgLSBhdHRhY2ggYSBuZXR3b3JrIGRldmljZSB0byBhIGdpdmVuIFBIWSBkZXZpY2UgcG9pbnRlcgogICogQGRldjogbmV0d29yayBkZXZpY2UgdG8gYXR0YWNoCkBAIC0xNzU1LDYgJiM0MzsxODA0LDcgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiAJc3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi0mZ3Q7bWRpby5idXM7CiAJc3RydWN0IGRldmljZSAqZCA9ICZhbXA7cGh5ZGV2LSZndDttZGlvLmRldjsKIAlzdHJ1Y3QgbW9kdWxlICpuZGV2X293bmVyID0gTlVMTDsKJiM0MzsJYm9vbCBjbGFpbWVkID0gZmFsc2U7CiAJaW50IGVycjsKIAogCS8qIEZvciBFdGhlcm5ldCBkZXZpY2UgZHJpdmVycyB0aGF0IHJlZ2lzdGVyIHRoZWlyIG93biBNRElPIGJ1cywgd2UKQEAgLTE3NzAsNiAmIzQzOzE4MjAsMTMgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiAJfQogCiAJZ2V0X2RldmljZShkKTsKJiM0MzsJZXJyID0gcGh5X2NsYWltKHBoeWRldik7CiYjNDM7CWlmIChlcnIgPT0gLUVCVVNZKQomIzQzOwkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7UEhZIGFscmVhZHkgYXR0YWNoZWRcbiYjMzQ7KTsKJiM0MzsJaWYgKCFlcnIpCiYjNDM7CQljbGFpbWVkID0gdHJ1ZTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyb3JfcHV0X2RldmljZTsKIAogCS8qIEFzc3VtZSB0aGF0IGlmIHRoZXJlIGlzIG5vIGRyaXZlciwgdGhhdCBpdCBkb2VzbiYjMzk7dAogCSAqIGV4aXN0LCBhbmQgd2Ugc2hvdWxkIHVzZSB0aGUgZ2VucGh5IGRyaXZlci4KQEAgLTE3OTgsMTIgJiM0MzsxODU1LDYgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiAJCQlnb3RvIGVycm9yX21vZHVsZV9wdXQ7CiAJfQogCi0JaWYgKHBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2KSB7Ci0JCWRldl9lcnIoJmFtcDtkZXYtJmd0O2RldiwgJiMzNDtQSFkgYWxyZWFkeSBhdHRhY2hlZFxuJiMzNDspOwotCQllcnIgPSAtRUJVU1k7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCiAJcGh5ZGV2LSZndDtwaHlfbGlua19jaGFuZ2UgPSBwaHlfbGlua19jaGFuZ2U7CiAJaWYgKGRldikgewogCQlwaHlkZXYtJmd0O2F0dGFjaGVkX2RldiA9IGRldjsKQEAgLTE4OTksNiAmIzQzOzE5NTAsOCBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKIAlwaHlkZXYtJmd0O2lzX2dlbnBoeV9kcml2ZW4gPSAwOwogCWQtJmd0O2RyaXZlciA9IE5VTEw7CiBlcnJvcl9wdXRfZGV2aWNlOgomIzQzOwlpZiAoY2xhaW1lZCkKJiM0MzsJCXBoeV9yZWxlYXNlKHBoeWRldik7CiAJcHV0X2RldmljZShkKTsKIAlpZiAobmRldl9vd25lciAhPSBidXMtJmd0O293bmVyKQogCQltb2R1bGVfcHV0KGJ1cy0mZ3Q7b3duZXIpOwpAQCAtMTk3Nyw2ICYjNDM7MjAzMCw3IEBAIHZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogCSAqIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGJ5IHJlYWRpbmcgdGhlIHVuZGVybHlpbmcgYnVzIGZpcnN0LgogCSAqLwogCWJ1cyA9IHBoeWRldi0mZ3Q7bWRpby5idXM7CiYjNDM7CXBoeV9yZWxlYXNlKHBoeWRldik7CiAKIAlwdXRfZGV2aWNlKCZhbXA7cGh5ZGV2LSZndDttZGlvLmRldik7CiAJaWYgKGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaWItaW50ZXJuYWwuaCBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaWItaW50ZXJuYWwuaAppbmRleCA2NjRlZDdmYWE1MTg0Li43ZTkxNjFmY2RkOTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5bGliLWludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpYi1pbnRlcm5hbC5oCkBAIC0yNSw3ICYjNDM7MjUsOSBAQCBpbnQgcGh5X3NwZWVkX2Rvd25fY29yZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIHZvaWQgcGh5X2NoZWNrX2Rvd25zaGlmdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIAogaW50IG1kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldik7Ci1pbnQgbWRpb2J1c191bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpOwomIzQzO2ludCBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgaW50IGVycik7CiYjNDM7aW50IG1kaW9idXNfYmVnaW5fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKTsKJiM0Mzt2b2lkIG1kaW9idXNfZmluaXNoX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgZHluYW1pYyk7CiAKIGludCBnZW5waHlfYzQ1X3JlYWRfZWVlX2FkdihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1bnNpZ25lZCBsb25nICphZHYpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvbGludXgvbWRpby5oCmluZGV4IGE3ZDllM2FlMzYyYTUuLmUxOTk2M2FmOGUxMzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWRpby5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWRpby5oCkBAIC04LDYgJiM0Mzs4LDcgQEAKIAogI2luY2x1ZGUgJmx0O3VhcGkvbGludXgvbWRpby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xpc3QuaCZndDsKIAogc3RydWN0IGdwaW9fZGVzYzsKIHN0cnVjdCBtaWlfYnVzOwpAQCAtMzIsNiAmIzQzOzMzLDkgQEAgc3RydWN0IG1kaW9fZGV2aWNlIHsKIAlpbnQgKCpidXNfbWF0Y2gpKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydik7CiAJdm9pZCAoKmRldmljZV9mcmVlKShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpOwogCXZvaWQgKCpkZXZpY2VfcmVtb3ZlKShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpOwomIzQzOwlpbnQgKCpkZXZpY2VfcmVtb3ZlX2R5bmFtaWMpKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldik7CiYjNDM7CS8qIEVudHJ5IGluIG1paV9idXM6Om1kaW9fbWFwX3JldGlyZWQuICovCiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgcmV0aXJlZF9ub2RlOwogCiAJLyogQnVzIGFkZHJlc3Mgb2YgdGhlIE1ESU8gZGV2aWNlICgwLTMxKSAqLwogCWludCBhZGRyOwpAQCAtNjk0LDYgJiM0Mzs2OTgsOCBAQCBzdGF0aWMgaW5saW5lIGludCBtZGlvZGV2X2M0NV93cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiBkZXZhZCwKIAogYm9vbCBtZGlvYnVzX2lzX3JlZ2lzdGVyZWRfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyKTsKIHN0cnVjdCBwaHlfZGV2aWNlICptZGlvYnVzX2dldF9waHkoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpOwomIzQzO2ludCBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4oc3RydWN0IG1paV9idXMgKmJ1cywgYm9vbCByZW1vdmluZyk7CiYjNDM7dm9pZCBtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kKHN0cnVjdCBtaWlfYnVzICpidXMsIGJvb2wgcmVtb3ZpbmcpOwogCiAvKioKICAqIG1kaW9fbW9kdWxlX2RyaXZlcigpIC0gSGVscGVyIG1hY3JvIGZvciByZWdpc3RlcmluZyBtZGlvIGRyaXZlcnMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oCmluZGV4IDVmOGQ2NTg2OGUwZmYuLjA1MDBmODBlMGZhY2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaApAQCAtMjIsNiAmIzQzOzIyLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9taWlfdGltZXN0YW1wZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90aW1lci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93YWl0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGV2aWNlLWlkL21kaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91NjRfc3RhdHNfc3luYy5oJmd0OwpAQCAtMzkxLDcgJiM0MzszOTIsOSBAQCBzdHJ1Y3QgbWlpX2J1cyB7CiAJLyoqIEBzdGF0ZTogU3RhdGUgb2YgYnVzIHN0cnVjdHVyZSAqLwogCWVudW0gewogCQlNRElPQlVTX0FMTE9DQVRFRCA9IDEsCiYjNDM7CQlNRElPQlVTX1JFR0lTVEVSSU5HLAogCQlNRElPQlVTX1JFR0lTVEVSRUQsCiYjNDM7CQlNRElPQlVTX1VOUkVHSVNURVJJTkcsCiAJCU1ESU9CVVNfVU5SRUdJU1RFUkVELAogCQlNRElPQlVTX1JFTEVBU0VELAogCX0gc3RhdGU7CkBAIC00MDEsNiAmIzQzOzQwNCwxOCBAQCBzdHJ1Y3QgbWlpX2J1cyB7CiAKIAkvKiogQG1kaW9fbWFwOiBsaXN0IG9mIGFsbCBNRElPIGRldmljZXMgb24gYnVzICovCiAJc3RydWN0IG1kaW9fZGV2aWNlICptZGlvX21hcFtQSFlfTUFYX0FERFJdOwomIzQzOwkvKiogQG1kaW9fbWFwX3BlbmRpbmc6IGFkZHJlc3NlcyB3aXRoIHJlZ2lzdHJhdGlvbiBpbiBwcm9ncmVzcyAqLwomIzQzOwl1MzIgbWRpb19tYXBfcGVuZGluZzsKJiM0MzsJLyoqIEBtZGlvX21hcF9sb2NrOiBwcm90ZWN0cyB0aGUgTURJTyBkZXZpY2UgbWFwIGFuZCBidXMgc3RhdGUgKi8KJiM0MzsJc3RydWN0IG11dGV4IG1kaW9fbWFwX2xvY2s7CiYjNDM7CS8qKiBAbWRpb19tYXBfd2FpdDogd2FpdCBmb3IgYWN0aXZlIG1hcCBvcGVyYXRpb25zIGR1cmluZyB0ZWFyZG93biAqLwomIzQzOwl3YWl0X3F1ZXVlX2hlYWRfdCBtZGlvX21hcF93YWl0OwomIzQzOwkvKiogQG1kaW9fbWFwX29wczogYWN0aXZlIHJlZ2lzdHJhdGlvbnMgYW5kIGZpcm13YXJlIGNoYW5nZXMgKi8KJiM0MzsJdW5zaWduZWQgaW50IG1kaW9fbWFwX29wczsKJiM0MzsJLyoqIEBtZGlvX21hcF9yZW1vdmFsczogZmlybXdhcmUgcmVtb3ZhbHMgYmxvY2tpbmcgUEhZIGF0dGFjaG1lbnQgKi8KJiM0MzsJdW5zaWduZWQgaW50IG1kaW9fbWFwX3JlbW92YWxzOwomIzQzOwkvKiogQG1kaW9fbWFwX3JldGlyZWQ6IHJlbW92ZWQgZGV2aWNlcyBwaW5uZWQgdW50aWwgYnVzIHRlYXJkb3duICovCiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgbWRpb19tYXBfcmV0aXJlZDsKIAogCS8qKiBAcGh5X21hc2s6IFBIWSBhZGRyZXNzZXMgdG8gYmUgaWdub3JlZCB3aGVuIHByb2JpbmcgKi8KIAl1MzIgcGh5X21hc2s7CkBAIC02NTIsNiAmIzQzOzY2Nyw4IEBAIHN0cnVjdCBwaHlfb2F0YzE0X3NxaV9jYXBhYmlsaXR5IHsKICAqIEBuX3BvcnRzOiBOdW1iZXIgb2YgcG9ydHMgY3VycmVudGx5IGF0dGFjaGVkIHRvIHRoZSBQSFkKICAqIEBtYXhfbl9wb3J0czogTWF4IG51bWJlciBvZiBwb3J0cyB0aGlzIFBIWSBjYW4gZXhwb3NlCiAgKiBAbG9jazogIE11dGV4IGZvciBzZXJpYWxpemF0aW9uIGFjY2VzcyB0byBQSFkKJiM0MzsgKiBAYXR0YWNoZWQ6IFdoZXRoZXIgYSBuZXR3b3JrIGRldmljZSBvciBzdGFuZGFsb25lIHVzZXIgYXR0YWNoZWQgdGhlIFBIWTsKJiM0MzsgKglwcm90ZWN0ZWQgYnkgdGhlIE1ESU8gYnVzIG1hcCBsb2NrCiAgKiBAc3RhdGVfcXVldWU6IFdvcmsgcXVldWUgZm9yIHN0YXRlIG1hY2hpbmUKICAqIEBsaW5rX2Rvd25fZXZlbnRzOiBOdW1iZXIgb2YgdGltZXMgbGluayB3YXMgbG9zdAogICogQHNoYXJlZDogUG9pbnRlciB0byBwcml2YXRlIGRhdGEgc2hhcmVkIGJ5IHBoeXMgaW4gb25lIHBhY2thZ2UKQEAgLTc4MSw2ICYjNDM7Nzk4LDcgQEAgc3RydWN0IHBoeV9kZXZpY2UgewogCXN0cnVjdCBkZWxheWVkX3dvcmsgc3RhdGVfcXVldWU7CiAKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKJiM0MzsJYm9vbCBhdHRhY2hlZDsKIAogCS8qIFRoaXMgbWF5IGJlIG1vZGlmaWVkIHVuZGVyIHRoZSBydG5sIGxvY2sgKi8KIAlib29sIHNmcF9idXNfYXR0YWNoZWQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTk0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogODYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTURJTy9QSFkgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHNlcmllcyB0aGF0IHNpZ25pZmljYW50bHkgdG91Y2hlcyB0aGUgTURJTyBhbmQgUEhZIHN1YnN5c3RlbXMuIEl0IHNlZW1zIHRoaXMgaXMgZm9jdXNlZCBvbiBlbmhhbmNpbmcgZHluYW1pYyBPRiByZWNvbmZpZ3VyYXRpb24gY2FwYWJpbGl0aWVzIGZvciBNRElPIGJ1c2VzLCBsaWtlbHkgdG8gc3VwcG9ydCBkZXZpY2UgdHJlZSBvdmVybGF5cyBhbmQgY2hhbmdlcyBkdXJpbmcgcnVudGltZS4gVGhlIGZpbGVzIGJlaW5nIG1vZGlmaWVkLCBzcGVjaWZpY2FsbHkgYGRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jYCwgYGRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jYCwgYW5kIHNldmVyYWwgb3RoZXJzIGluIHRoZSBgZHJpdmVycy9uZXQvcGh5YCBkaXJlY3RvcnksIGltbWVkaWF0ZWx5IGZsYWcgdGhpcyBhcyBjb3JlIGluZnJhc3RydWN0dXJlLiBJIGNhbiBzZWUgdGhlIGNoYW5nZXMgZGVhbCB3aXRoIGhvdyBNRElPIGRldmljZXMgYXJlIHJlZ2lzdGVyZWQgYW5kIHVucmVnaXN0ZXJlZCwgYWxvbmcgd2l0aCBtb2RpZmljYXRpb25zIHRvIHRoZSBNRElPIGJ1cyBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcy4gVGhleSYjMzk7cmUgYWRkaW5nIG5ldyBtZWNoYW5pc21zIGxpa2UgYG9mX21kaW9fcmVjb25maWdfbXV0ZXhgLCBgb2ZfbWRpb2J1c19ub3RpZnlgLCBhbmQgYG9mX21kaW9idXNfb3ZlcmxheV9ub3RpZnlgIGFuZCBhZGRpbmcgYG1kaW9fbWFwX2xvY2tgIHRvIGBzdHJ1Y3QgbWlpX2J1c2AuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uZmlybSByZWFjaGFiaWxpdHkgYW5kIGZ1bmN0aW9uYWxpdHkuIFNpbmNlIHRoaXMgYWZmZWN0cyBjb3JlIE1ESU8gYW5kIFBIWSBjb2RlLCB3aGljaCBpcyB1c2VkIGJ5IG51bWVyb3VzIG5ldHdvcmtpbmcgZHJpdmVycywgaXQmIzM5O3MgYSBjcml0aWNhbCBhcmVhLiBUaGUgcHJlc2VuY2Ugb2YgZHluYW1pYyBPRiByZWNvbmZpZ3VyYXRpb24gc3VwcG9ydCBpcyBpbXBvcnRhbnQgYmVjYXVzZSB0aG9zZSBjb25maWdzIGFyZSBzZXQgdG8gZW5hYmxlIGR5bmFtaWMgY29uZmlndXJhdGlvbiBjaGFuZ2VzLiBUaGlzIGlzIGluZGljYXRlZCBieSB0aGUgaW52b2x2ZW1lbnQgb2YgYENPTkZJR19PRl9EWU5BTUlDYCwgYENPTkZJR19PRl9PVkVSTEFZYCwgYW5kIGBDT05GSUdfT0ZfTURJT2Agd2hpY2ggaXMga2V5LgoKRGl2aW5nIGRlZXBlciBpbnRvIHRoZSBzcGVjaWZpYyBmaWxlcywgSSBzZWUgdGhhdCBgZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmNgIGhhcyBjcml0aWNhbCBmdW5jdGlvbnMgc3VjaCBhcyBgb2ZfbWRpb2J1c19yZWdpc3Rlcl9jaGlsZGAsIGBvZl9tZGlvYnVzX3NjYW5fcGh5YCwgYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAsIGBvZl9tZGlvYnVzX25vdGlmeWAsIGFuZCBgb2ZfbWRpb2J1c19vdmVybGF5X25vdGlmeWAuIEkgY2FuIGFsc28gc2VlIHRoYXQgb3RoZXIgY29yZSBNRElPL1BIWSBzdWJzeXN0ZW0gY29tcG9uZW50cyBsaWtlIGBtZGlvYnVzX2lzX3JlZ2lzdGVyZWRfZGV2aWNlYCwgYG1kaW9idXNfYWxsb2Nfc2l6ZWAsIGBvZl9tZGlvYnVzX2ZpbmRfcGh5YCwgYF9fbWRpb2J1c19zY2FuYCwgYG1kaW9idXNfc2Nhbl9jMjJgLCBgbWRpb2J1c19zY2FuX2M0NWAsIGBfX21kaW9idXNfcmVnaXN0ZXJgLCBgbWRpb2J1c191bnJlZ2lzdGVyYCwgYG1kaW9idXNfZnJlZWAgYXJlIGludm9sdmVkLiBUaGUgY2hhbmdlcyB0byAgYG1kaW9fZGV2aWNlX3JlZ2lzdGVyYCwgYG1kaW9fZGV2aWNlX3JlbW92ZWAsIGBtZGlvYnVzX3JlZ2lzdGVyX2RldmljZWAsIGBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW5gLCBgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2VuZGAsIGBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lYCwgYG1kaW9idXNfYmVnaW5fcmVtb3ZlYCwgYG1kaW9idXNfZmluaXNoX3JlbW92ZWAsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCwgYHBoeV9kZXZpY2VfcmVtb3ZlYCwgYHBoeV9jbGFpbWAsIGBwaHlfcmVsZWFzZWAsIGBwaHlfYXR0YWNoX2RpcmVjdGAsIGFuZCBgcGh5X2RldGFjaGAgc2VlbSB0byBiZSB0aGUgbW9zdCBpbXBhY3RlZC4KCkdpdmVuIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9uIGNvcmUgZnVuY3Rpb25zLCBmdXp6aW5nIHRoaXMgcGF0Y2ggaXMgYWJzb2x1dGVseSB3b3J0aHdoaWxlLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHNwZWNpZmljIHN5bWJvbHMgYW5kIGZ1bmN0aW9ucyB0aGF0IHJlcHJlc2VudCBrZXkgcG9pbnRzIG9mIGludGVyYWN0aW9uIHdpdGggZHluYW1pYyBPRiBjaGFuZ2VzIGFuZCBkZXZpY2UgcmVnaXN0cmF0aW9uL3JlbW92YWwuIEkgd2lsbCBzcGVjaWZpY2FsbHkgZm9jdXMgb246IGBvZl9tZGlvYnVzX25vdGlmeWAsIGBvZl9tZGlvYnVzX292ZXJsYXlfbm90aWZ5YCwgYG1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbmAsIGBtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kYCwgYG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmVgLCBgbWRpb2J1c19iZWdpbl9yZW1vdmVgLCBgbWRpb2J1c19maW5pc2hfcmVtb3ZlYCwgYHBoeV9jbGFpbWAsIGBwaHlfcmVsZWFzZWAsIGBwaHlfYXR0YWNoX2RpcmVjdGAsIGBwaHlfZGV0YWNoYCwgYG1kaW9idXNfcmVnaXN0ZXJfZGV2aWNlYCwgYG1kaW9fZGV2aWNlX3JlZ2lzdGVyYCwgYW5kIGBtZGlvX2RldmljZV9yZW1vdmVgLgoKRmluYWxseSwgSSBuZWVkIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQgZm9yIHRlc3RpbmcuIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19PRl9EWU5BTUlDYCwgYENPTkZJR19PRl9PVkVSTEFZYCwgYENPTkZJR19PRl9NRElPYCwgYENPTkZJR19QSFlMSUJgLCBhbmQgYENPTkZJR19NRElPX0RFVklDRWAgYXJlIGFsbCBwcm9wZXJseSBzZXQsIGFzIHRob3NlIGFyZSB0aGUgcHJlcmVxdWlzaXRlcyBmb3IgdGhpcyBjb2RlIHRvIGJlIGFjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT0ZfRFlOQU1JQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL29mL0tjb25maWc9Nzg9Y29uZmlnIE9GX0tPQkpcbi0tXG5kcml2ZXJzL29mL0tjb25maWctODItIyBuZWVkIGl0LlxuZHJpdmVycy9vZi9LY29uZmlnOjgzOmNvbmZpZyBPRl9EWU5BTUlDXG5kcml2ZXJzL29mL0tjb25maWctODQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGR5bmFtaWMgZGV2aWNlIHRyZWVzXCYjMzQ7IGlmIE9GX1VOSVRURVNUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE4MTIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqUXVpY2sgQ2hlY2s6IGBPRl9PVkVSTEFZYCoqCgpSaWdodCwgbGV0JiMzOTtzIGp1c3QgZG8gYSBxdWljayBtZW50YWwgY2hlY2suIEZpcnN0IHRoaW5nIEkmIzM5O20gdGhpbmtpbmcgaXMsICYjMzQ7V2hhdCYjMzk7cyB0aGUgc3RhdHVzIG9mIGBPRl9PVkVSTEFZYD8gV2hhdCYjMzk7cyB0aGUgY29udGV4dCBJJiMzOTttIGN1cnJlbnRseSB3b3JraW5nIHdpdGhpbiB0aGF0IHJlcXVpcmVzIG1lIHRvIHRoaW5rIG9mIHRoYXQ/JiMzNDsgSXMgaXQgaW4gYSBjdXJyZW50IGFjdGl2ZSBwcm9qZWN0PyBBbSBJIHVwZGF0aW5nIGFuIGV4aXN0aW5nIHN5c3RlbSwgb3Igc3RhcnRpbmcgc29tZXRoaW5nIG5ldz8gSSYjMzk7bSBub3QgZ29pbmcgdG8gZGl2ZSB0b28gZGVlcCBpbnRvIGFuYWx5c2lzIHlldCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBob3cgdGhpcyBzZXR0aW5nIGlzIGN1cnJlbnRseSBiZWluZyB1c2VkLCBpZiBhdCBhbGwuIEFyZSB0aGVyZSBzcGVjaWZpYyBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBvdmVybGF5IG9uIGEgc3RhbmRhcmQgc2NyZWVuLCBvciBzb21ldGhpbmcgZmFyIG1vcmUgY29tcGxleCBpbnZvbHZpbmcgbXVsdGlwbGUsIGR5bmFtaWNhbGx5IGxvYWRlZCBpbWFnZXMsIGFuZCBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgY29uY2VybnM/CgpPa2F5LCBzbyBJIHdpbGwgbm93IGNvbnNpZGVyIGFsbCB0aGUgcG9zc2liaWxpdGllcyB0aGF0IHNwcmluZyB0byBtaW5kLiBUaW1lIHRvIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPRl9PVkVSTEFZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvb2YvS2NvbmZpZz0xMDI9Y29uZmlnIE9GX1JFU09MVkVcbi0tXG5kcml2ZXJzL29mL0tjb25maWctMTA0LVxuZHJpdmVycy9vZi9LY29uZmlnOjEwNTpjb25maWcgT0ZfT1ZFUkxBWVxuZHJpdmVycy9vZi9LY29uZmlnLTEwNi1cdGJvb2wgXCYjMzQ7RGV2aWNlIFRyZWUgb3ZlcmxheXNcJiMzNDtcbi0tXG5kcml2ZXJzL29mL0tjb25maWctMTE1LVxuZHJpdmVycy9vZi9LY29uZmlnOjExNjpjb25maWcgT0ZfT1ZFUkxBWV9LVU5JVF9URVNUXG5kcml2ZXJzL29mL0tjb25maWctMTE3LVx0dHJpc3RhdGUgXCYjMzQ7RGV2aWNlIFRyZWUgb3ZlcmxheSBLVW5pdCB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyMDYKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyB0aGUgYE9GX01ESU9gIFZhcmlhYmxlKioKCkFscmlnaHQsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB3ZSYjMzk7cmUgb24gdGhlIHJpZ2h0IHRyYWNrIGhlcmUuICpPRl9NRElPKi4uLiB0aGF0IHZhcmlhYmxlIGhhcyBiZWVuIG5hZ2dpbmcgYXQgdGhlIGJhY2sgb2YgbXkgbWluZC4gSXQgY291bGQgYmUgcGl2b3RhbCwgZGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUgYW5kIGRyaXZlciBpbnRlcmFjdGlvbi4gSSBuZWVkIHRvIG1ha2UgYSBxdWljayBzYW5pdHkgY2hlY2suIEkmIzM5O20gdGhpbmtpbmcsIGlzIHRoaXMgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBNRElPIGludGVyZmFjZSBpcyBzdG9yZWQ/IEFyZSB3ZSByZWFkaW5nIGl0LCB3cml0aW5nIGl0LCBvciBib3RoPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgd2hlcmUgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgYXJlIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGlzIHBhcnRpY3VsYXIgdmFyaWFibGUuIFdoYXQgaW1wbGljYXRpb25zIHdvdWxkIGluY29ycmVjdCB2YWx1ZSBoYXZlPyBNZW1vcnkgY29ycnVwdGlvbiBpcyBhbHdheXMgYSBjb25jZXJuLiBJIGNvdWxkIHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IHRvIHVzZSB0aGUgdmFsdWUuIEkmIzM5O3ZlIGJlZW4gYnVybmVkIGJlZm9yZSBhc3N1bWluZyBzb21ldGhpbmcgb2J2aW91cywgc28gbGV0JiMzOTtzIGp1c3QgZG91YmxlIGNoZWNrIHRoZSBkZWZpbml0aW9uIGFuZCB1c2FnZSBvZiAqT0ZfTURJTyogdG8gcnVsZSBvdXQgdGhlIG9idmlvdXMgY3VscHJpdHMgZmlyc3QuIFRoZW4sIEkgY2FuIGRlbHZlIGRlZXBlciBpbnRvIG1vcmUgY29tcGxleCBkZXBlbmRlbmNpZXMgaWYgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPRl9NRElPJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz05PWNvbmZpZyBGV05PREVfTURJT1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xMy1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxNDpjb25maWcgT0ZfTURJT1xuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE1LVx0ZGVmX3RyaXN0YXRlIE9GXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1NDMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIFBIWSBhbmQgTURJTyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYE9GX01ESU9gIGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCB3aGVuIGBPRmAgaXMsIHdoaWNoIG1ha2VzIHNlbnNlLiBBbmQsIHRoaW5raW5nIGFib3V0IGl0LCBlbmFibGluZyBgT0ZfRFlOQU1JQ2AgYW5kIGBPRl9PVkVSTEFZYCBpcyBnZW5lcmFsbHkgYSBnb29kIGlkZWEgZm9yIGZsZXhpYmlsaXR5LiBgUEhZTElCYCBhbmQgYE1ESU9fREVWSUNFYCBhcmUgcHJldHR5IG11Y2ggc3RhbmRhcmQsIHNvIHdlJiMzOTtyZSBnb29kIHRoZXJlLgoKTm93LCBsZXQmIzM5O3MgcmVmaW5lIHRoZSBGb2N1c1N5bWJvbHMgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSByZWFsbHkgaG9uaW5nIGluIG9uIHRoZSBrZXkgaW50ZXJhY3Rpb25zLiBXZSBuZWVkIHRvIGNvbnNpZGVyOgoKKiAgIGBvZl9tZGlvYnVzX25vdGlmeWAKKiAgIGBvZl9tZGlvYnVzX292ZXJsYXlfbm90aWZ5YAoqICAgYG1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbmAKKiAgIGBtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kYAoqICAgYG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmVgCiogICBgbWRpb2J1c19iZWdpbl9yZW1vdmVgCiogICBgbWRpb2J1c19maW5pc2hfcmVtb3ZlYAoqICAgYHBoeV9jbGFpbWAKKiAgIGBwaHlfcmVsZWFzZWAKCldhaXQgYSBtaW51dGUsIGBwaHlfY2xhaW1gIGFuZCBgcGh5X3JlbGVhc2VgIGFyZSBzdGF0aWNhbGx5IGRlZmluZWQuIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgUEhZIGxheWVyLCBzcGVjaWZpY2FsbHkgYXQgYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgIHRvIHNlZSBob3cgdGhvc2UgYXJlIHdvcmtpbmcuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfY2xhaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTc1MT1zdGF0aWMgYm9vbCBwaHlfZHJ2X3N1cHBvcnRzX2lycShjb25zdCBzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTc1NS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTc1NjpzdGF0aWMgaW50IHBoeV9jbGFpbShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzU3LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTE4MDE9aW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODIyLVx0Z2V0X2RldmljZShkKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTgyMzpcdGVyciA9IHBoeV9jbGFpbShwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODI0LVx0aWYgKGVyciA9PSAtRUJVU1kpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzA3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXNzZXNzbWVudCBvZiB0aGUgc2l0dWF0aW9uOgoKKipSZWZpbmluZyBNeSBTeW1ib2wgRm9jdXMqKgoKSSYjMzk7bSByZXZpc2l0aW5nIGhvdyBJJiMzOTttIGhhbmRsaW5nIHN5bWJvbHMgYW5kIHRoZWlyIGluY2x1c2lvbi4gSXQmIzM5O3MgYmVjb21lIGNsZWFyIHRoYXQgYHBoeV9jbGFpbWAgYW5kIGBwaHlfcmVsZWFzZWAgYXJlIHN0YXRpYyBpbiB0aGUgY3VycmVudCBjb250ZXh0LiBUaGF0IG1lYW5zIHRoZXkgZG9uJiMzOTt0IHJlYWxseSBvZmZlciBtZSB0aGUga2luZCBvZiBkeW5hbWljIGluc2lnaHQgSSYjMzk7bSBhZnRlciwgYXQgbGVhc3Qgbm90IHdpdGhpbiB0aGUgYEZvY3VzU3ltYm9sc2AgY29udGV4dC4gU28sIEkmIzM5O2xsIGV4Y2x1ZGUgdGhlbS4gSW5zdGVhZCwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBwb2ludHMgd2hlcmUgdGhlcmUmIzM5O3MgYSBtb3JlIGRpcmVjdCBhc3NvY2lhdGlvbiB3aXRoIHRoZSBkZXZpY2UgbGlmZWN5Y2xlLiBTcGVjaWZpY2FsbHksIGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYCBzZWVtIG11Y2ggbW9yZSByZWxldmFudCBoZXJlLiBUaGV5JiMzOTtyZSB0aGUgY29yZSBvZiBob3cgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgYW5kIGJyb2tlbiwgd2hpY2ggaXMgd2hhdCBJIG5lZWQgdG8gd2F0Y2guCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaW4gb24gYG1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbmAgYW5kIGBtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kYC4gSSB3YW50IHRvIGNvbmZpcm0gdGhleSYjMzk7cmUgbm90IGltcGxpY2l0bHkgcmVsYXRlZCB0byB0aGUgYXR0YWNobWVudC9kZXRhY2htZW50IHByb2Nlc3MsIGFuZCB0aGF0IHRoZXJlIGFyZSBubyBoaWRkZW4gaW50ZXJhY3Rpb25zIHRoYXQgbWlnaHQgYmUgcGVydGluZW50IHRvIG15IGFwcHJvYWNoIGhlcmUuIEEgcXVpY2sgc2NhbiBzaG91bGQgYmUgZW5vdWdoIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jPTIxMj1pbnQgbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTI2MS0vKipcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jOjI2MjogKiBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4gLSBzdGFydCBjaGFuZ2luZyBkZXZpY2VzIG9uIGEgcmVnaXN0ZXJlZCBidXNcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTI2My0gKiBAYnVzOiBNRElPIGJ1cyB0aGF0IHdpbGwgYmUgc2Nhbm5lZCBvciBjaGFuZ2VkXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMjY3LSAqL1xuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MjY4OmludCBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4oc3RydWN0IG1paV9idXMgKmJ1cywgYm9vbCByZW1vdmluZylcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTI2OS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMjgzLX1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jOjI4NDpFWFBPUlRfU1lNQk9MX0dQTChtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4pO1xuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMjg1LVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM9Mjg2PXN0YXRpYyB2b2lkIG1kaW9idXNfb3BlcmF0aW9uX2RvbmVfbG9ja2VkKHN0cnVjdCBtaWlfYnVzICpidXMpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMjk4LSAqIG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmQgLSBmaW5pc2ggY2hhbmdpbmcgZGV2aWNlcyBvbiBhbiBNRElPIGJ1c1xuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6Mjk5OiAqIEBidXM6IE1ESU8gYnVzIHByZXZpb3VzbHkgcGFzc2VkIHRvIG1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbigpXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzozMDA6ICogQHJlbW92aW5nOiB2YWx1ZSBwYXNzZWQgdG8gbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKClcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTMwMS0gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxMjMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgb24gTURJTyBCdXMgU3ltYm9sIEV4cG9ydCoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBleHBvcnRlZCBzeW1ib2xzIGhlcmUsIHdoaWNoIGltbWVkaWF0ZWx5IGZvY3VzZXMgbXkgYXR0ZW50aW9uIG9uIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQgZXh0ZXJuYWxseSBhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgTURJTyBidXMgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgaG93IGl0IGltcGFjdHMgYW55IG1vZHVsZXMgdGhhdCByZWx5IG9uIGl0LgoKTGV0JiMzOTtzIHF1aWNrbHkgZHJpbGwgZG93biBhbmQgbWFrZSBzdXJlIHdlIGhhdmUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHdlbGwgdW5kZXJzdG9vZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGFjcm9zcyB0aGUgdGhyZWUgbWFpbiBmdW5jdGlvbnMgd2hpY2ggY29udHJvbCB0aGUgbGlmZWN5Y2xlOiBJJiMzOTtsbCBjaGVjayBgbWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZWAsIGBtZGlvYnVzX2JlZ2luX3JlbW92ZWAsIGFuZCBgbWRpb2J1c19maW5pc2hfcmVtb3ZlYC4gSSB3YW50IHRvIGNvbmZpcm0gaG93IHRoZXNlIGNvbnRyb2wgdGhlIHJlZ2lzdHJhdGlvbiwgYW5kIHJlbW92YWwsIG9mIHRoaXMgY3JpdGljYWwgY29tcG9uZW50LiBVbmRlcnN0YW5kaW5nIHRoZWlyIGludGVyYWN0aW9uIGlzIGtleS4gVW5kZXJzdGFuZGluZyB0aGUgb3JkZXJpbmcgb2Ygb3BlcmF0aW9ucyBpcyBjcml0aWNhbCB0byBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucyBhbmQgZW5zdXJpbmcgcHJvcGVyIHJlc291cmNlIG1hbmFnZW1lbnQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGUgbG9ja2luZyBpcyBpbXBsZW1lbnRlZCwgYW5kIGFsc28gaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIGhvdHBsdWcgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jPTE2NT1pbnQgbWRpb19kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTE3OC1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jOjE3OTpcdHJldHVybiBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lKG1kaW9kZXYsIGVycik7XG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xODAtfVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jPTIxMj1pbnQgbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTI0MC1cdFx0aWYgKGVycikge1xuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MjQxOlx0XHRcdG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUobWRpb2RldiwgZXJyKTtcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTI0Mi1cdFx0XHRyZXR1cm4gZXJyO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jPTMyMT1zdGF0aWMgdm9pZCBtZGlvYnVzX3VucHVibGlzaF9kZXZpY2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTMzMi1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jOjMzMzppbnQgbWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGludCBlcnIpXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0zMzQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc4MgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgSW5uZXIgV29ya2luZ3Mgb2YgcGh5bGliKioKClJpZ2h0LCBzbyB0aGVzZSBjb25jZXB0cywgdGhlc2XigKYgKnRoaW5ncyosIHRoZXkmIzM5O3JlIGRlZmluaXRlbHkgbm90IHN0YXRpYyBjb25zdGFudHMsIGRlZmluZWQgc29tZXdoZXJlIGFuZCByZWFkaWx5IGFjY2Vzc2libGUgbGlrZSBleHBvcnRlZCBzeW1ib2xzLiBUaGF0IG11Y2ggaXMgY2xlYXIuIEJ1dCB0aGV5JiMzOTtyZSBhbHNvICpub3QqIHNvbWV0aGluZyB0aGF0JiMzOTtzIHZpc2libGUgYXQgdGhlIEFQSSBsZXZlbCwgcmVhZGlseSBhY2Nlc3NpYmxlIHRvIGV4dGVybmFsIGRyaXZlcnMgb3IgbW9kdWxlcy4gVGhleSBhcmUgZnVuZGFtZW50YWxseSAqaW50ZXJuYWwqIHRvIHRoZSBgcGh5bGliYCBmcmFtZXdvcmsgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHBoeWxpYmAmIzM5O3MgY29yZSBsb2dpYyBoYW5kbGVzIGFuZCBtYW5hZ2VzIHRoaXMgaW5mb3JtYXRpb24uCgpNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGVsdmUgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gVGhlIG1vc3QgbGlrZWx5IHBsYWNlIHRvIGZpbmQgdGhlIGRlY2xhcmF0aW9ucyBvZiB0aGVzZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgb3IgbWFjcm9zIHdvdWxkIGJlIHRoZSBoZWFkZXIgZmlsZSBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgYHBoeWxpYmAgdXNlLiBHaXZlbiB0aGF0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYGRyaXZlcnMvbmV0L3BoeS9waHlsaWItaW50ZXJuYWwuaGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHNlY3JldHMgc2hvdWxkIGJlLiBJJiMzOTtsbCBzdGFydCB0aGVyZSBhbmQgc2VlIHdoYXQgbnVhbmNlcyBvZiB0aGVzZSBpbnRlcm5hbCBjb25jZXB0cyBjYW4gYmUgcmV2ZWFsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5bGliLWludGVybmFsLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeWxpYi1pbnRlcm5hbC5oPTI3PWludCBtZGlvYnVzX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi1pbnRlcm5hbC5oOjI4OmludCBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgaW50IGVycik7XG5kcml2ZXJzL25ldC9waHkvcGh5bGliLWludGVybmFsLmgtMjktaW50IG1kaW9idXNfYmVnaW5fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUyMDkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnRlcm5hbCBQaHlsaWIgQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGVzZSBjb25jZXB0cyBhbmQgdGhleSYjMzk7cmUgZGVmaW5pdGVseSBpbnRlcm5hbCB0byB0aGUgcGh5bGliIGZyYW1ld29yaywgd2hpY2ggaXMgYSBrZXkgY29uc2lkZXJhdGlvbi4gSSYjMzk7dmUgcmVhbGl6ZWQgdGhlc2UgYXJlbiYjMzk7dCBuZWNlc3NhcmlseSBzdGF0aWMsIHdoaWNoIGdpdmVzIG1lIGFuIGlkZWEuIFRoaW5raW5nIHRocm91Z2ggdGhpcywgaXQgc2VlbXMgcmVhc29uYWJsZSB0byBpbmNsdWRlIHRoZW0gd2l0aGluIHRoZSBGb2N1c1N5bWJvbHMgc3RydWN0dXJlLiBUaGF0IGFsaWducyB3ZWxsIHdpdGggaG93IHRoaW5ncyBhcmUgb3JnYW5pemVkIGFuZCBtYWtlcyBpbnR1aXRpdmUgc2Vuc2UgZm9yIHRoZSBkeW5hbWljIG5hdHVyZSBvZiB0aGVzZSBlbGVtZW50cy4gVG8gbWFrZSBzdXJlIEkmIzM5O20gb24gdGhlIHJpZ2h0IHRyYWNrLCBpdCB3b3VsZCBiZSBhIGdvb2QgaWRlYSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBgb2ZfbWRpb2J1c19ub3RpZnlgIGFuZCBgb2ZfbWRpb2J1c19vdmVybGF5X25vdGlmeWAgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBwYXJ0aWN1bGFyIG51YW5jZSBpbiB0aGVpciBiZWhhdmlvdXIsIG9yIHVzYWdlIHRoYXQgaW5mbHVlbmNlcyBob3cgSSBzaG91bGQgYXBwcm9hY2ggdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2ZfbWRpb2J1c19ub3RpZnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYz02MTU9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBvZl9tZGlvX292ZXJsYXlfbm90aWZpZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNjE5LVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6NjIwOnN0YXRpYyBpbnQgb2ZfbWRpb2J1c19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy02MjEtXHRcdFx0ICAgICB2b2lkICphcmcpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM9Njg0PXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgb2ZfbWRpb19ub3RpZmllciA9IHtcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjY4NTpcdC5ub3RpZmllcl9jYWxsID0gb2ZfbWRpb2J1c19ub3RpZnksXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy02ODYtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU2ODkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTURJT2J1cyBGdW5jdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBzaWZ0aW5nIHRocm91Z2ggdGhlc2UgTURJT2J1cyBmdW5jdGlvbnMsIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyByZWxldmFudC4gSW5pdGlhbGx5LCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1N0YXRpYyBmdW5jdGlvbnM/IEZvcmdldCAmIzM5O2VtLiYjMzQ7IE15IGdvYWwgaXMgdG8gb25seSBsb29rIGF0IHdoYXQmIzM5O3MgZXhwb3NlZCwgdGhlIHB1YmxpYyBpbnRlcmZhY2UsIGlmIHlvdSB3aWxsLiBJIHdhbnQgdG8gYnVpbGQgYSBoaWdoLWxldmVsIHZpZXcgb2YgaG93IHRoZSBidXMgaXMgbWFuYWdlZCwgbm90IGdldCBib2dnZWQgZG93biBpbiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgoKVGhlbiwgdGhlIHN0YXRpYyBuYXR1cmUgb2YgYG9mX21kaW9idXNfYWRkX25vZGVgIGFuZCBgb2ZfbWRpb2J1c19yZW1vdmVfbm9kZWAgdGhyb3dzIG1lIGEgY3VydmViYWxsLCBhbG9uZyB3aXRoIGBvZl9tZGlvYnVzX3JlZ2lzdGVyX2NoaWxkYCBhbmQgYG9mX21kaW9idXNfc2Nhbl9waHlgLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCwgYSBzdGF0aWMgZnVuY3Rpb24gbWlnaHQgYmUgdml0YWwsIGFuZCBpZiBJIG5lZ2xlY3QgdG8gaW5jbHVkZSB0aGUgZnVuY3Rpb24gaW4gbXkgbGlzdCwgaXQgY291bGQgYmUgYSBmYXRhbCBlcnJvci4KCkhvd2V2ZXIsIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgIHN0YW5kcyBvdXQgaW1tZWRpYXRlbHkuIEl0JiMzOTtzIGV4cG9ydGVkLCB3aGljaCBtZWFucyBpdCYjMzk7cyBkZXNpZ25lZCB0byBiZSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIFRoYXQmIzM5O3MgYSBjbGVhciBzaWduYWwgSSBzaG91bGQgbm90ZSB0aGF0LgoKQWxyaWdodCwgYmVmb3JlIGdvaW5nIGFueSBkZWVwZXIsIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGZ1bGwgcGljdHVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IGBfX21kaW9idXNfcmVnaXN0ZXJgIGhhcyB0byBzYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fbWRpb2J1c19yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jPTU4MD1zdGF0aWMgdm9pZCBtZGlvYnVzX3JlbW92ZV9kZXZpY2VzKHN0cnVjdCBtaWlfYnVzICpidXMpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNjA5LS8qKlxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NjEwOiAqIF9fbWRpb2J1c19yZWdpc3RlciAtIGJyaW5nIHVwIGFsbCB0aGUgUEhZcyBvbiBhIGdpdmVuIGJ1cyBhbmQgYXR0YWNoIHRoZW0gdG8gYnVzXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy02MTEtICogQGJ1czogdGFyZ2V0IG1paV9idXNcbi0tXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy02MTUtICogICBvbiBhIGdpdmVuIGJ1cywgYW5kIGF0dGFjaCB0aGVtIHRvIHRoZSBidXMuIERyaXZlcnMgc2hvdWxkIHVzZVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NjE2OiAqICAgbWRpb2J1c19yZWdpc3RlcigpIHJhdGhlciB0aGFuIF9fbWRpb2J1c19yZWdpc3RlcigpIHVubGVzcyB0aGV5XG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy02MTctICogICBuZWVkIHRvIHBhc3MgYSBzcGVjaWZpYyBvd25lciBtb2R1bGUuIE1ESU8gZGV2aWNlcyB3aGljaCBhcmUgbm90XG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNjIyLSAqL1xuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NjIzOmludCBfX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cywgc3RydWN0IG1vZHVsZSAqb3duZXIpXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy02MjQte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTczNy19XG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo3Mzg6RVhQT1JUX1NZTUJPTChfX21kaW9idXNfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNzM5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjUzMwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKk1ESU9idXMgUmVnaXN0cmF0aW9uICZhbXA7IERlcmVnaXN0cmF0aW9uIC0gQSBRdWljayBDaGVjayoqCgpPa2F5LCBzbyBgX19tZGlvYnVzX3JlZ2lzdGVyYCBpcyBleHBsaWNpdGx5IGV4cG9ydGVkLiBUaGF0JiMzOTtzIGdvb2Q7IGl0IG1lYW5zIHdlIGNhbiBpbnRlcmFjdCB3aXRoIGl0IGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgd2hpY2ggaXMgb2Z0ZW4gY3J1Y2lhbCBmb3IgZHJpdmVyIGludGVncmF0aW9uIGFuZCBkeW5hbWljIGRldmljZSBkaXNjb3ZlcnkuIE5vdywgbXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBtYWtlIHN1cmUgd2UmIzM5O3ZlIGNvdmVyZWQgdGhlIGZ1bGwgbGlmZWN5Y2xlLiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGNvcnJlc3BvbmRpbmcgdW5yZWdpc3RyYXRpb24gZnVuY3Rpb24uIExldCYjMzk7cyBkaWcgaW50byBgbWRpb2J1c191bnJlZ2lzdGVyYCBhbmQgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGVyZS4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZSBvZiBob3cgdGhlc2UgYnVzZXMgYXJlIG1hbmFnZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW9idXNfdW5yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jPTczOD1FWFBPUlRfU1lNQk9MKF9fbWRpb2J1c19yZWdpc3Rlcik7XG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy03MzktXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo3NDA6dm9pZCBtZGlvYnVzX3VucmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cylcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTc0MS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNzUzLX1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjc1NDpFWFBPUlRfU1lNQk9MKG1kaW9idXNfdW5yZWdpc3Rlcik7XG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy03NTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTI4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZToKCioqSW52ZXN0aWdhdGluZyB0aGUgTURJTyBCdXMgVW5yZWdpc3RyYXRpb24gUHJvY2VzcyoqCgpPa2F5LCBzbyBgbWRpb2J1c191bnJlZ2lzdGVyYCBpcyBleHBvcnRlZCwgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGV4cGVydGlzZSBsaWVzIGluIGVtYmVkZGVkIHN5c3RlbXMgYW5kIGRldmljZSBkcml2ZXJzLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHVucmVnaXN0cmF0aW9uLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSByZWdpc3RyYXRpb24gY291bnRlcnBhcnRzLiBUbyBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLCBJJiMzOTtsbCBuZWVkIHRvIGFuYWx5emUgYm90aCBgbWRpb19kZXZpY2VfcmVnaXN0ZXJgIGFuZCBgbWRpb19kZXZpY2VfcmVtb3ZlYC4gS25vd2luZyBob3cgZGV2aWNlcyBhcmUgYWRkZWQgYW5kIHJlbW92ZWQgZnJvbSB0aGUgTURJTyBidXMgaXMga2V5IHRvIGdyYXNwaW5nIHRoZSBmdWxsIGxpZmVjeWNsZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIHVucmVnaXN0cmF0aW9uIGZ1bmN0aW9uLiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBBcmUgdGhlcmUgcmFjZSBjb25kaXRpb25zIHRvIHdvcnJ5IGFib3V0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIHRvIGFzc2VzcyB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSB1bnJlZ2lzdGVyIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW9fZGV2aWNlX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMjctLyoqXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoyODogKiBtZGlvX2RldmljZV9yZWdpc3Rlcl9yZXNldCAtIFJlYWQgYW5kIGluaXRpYWxpemUgdGhlIHJlc2V0IHByb3BlcnRpZXMgb2ZcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTI5LSAqXHRcdFx0XHRhbiBtZGlvIGRldmljZVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTMzLSAqL1xuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MzQ6c3RhdGljIGludCBtZGlvX2RldmljZV9yZWdpc3Rlcl9yZXNldChzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0zNS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM9MTU3PUVYUE9SVF9TWU1CT0wobWRpb19kZXZpY2VfY3JlYXRlKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xNTktLyoqXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxNjA6ICogbWRpb19kZXZpY2VfcmVnaXN0ZXIgLSBSZWdpc3RlciB0aGUgbWRpbyBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xNjEtICogQG1kaW9kZXY6IG1kaW9fZGV2aWNlIHN0cnVjdHVyZSB0byBiZSBhZGRlZCB0byB0aGUgTURJTyBidXNcbi0tXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xNjQtICovXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxNjU6aW50IG1kaW9fZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTE2Ni17XG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTgwLX1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jOjE4MTpFWFBPUlRfU1lNQk9MKG1kaW9fZGV2aWNlX3JlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTE4Mi1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jPTE4Mz1zdGF0aWMgaW50IF9fbWRpb19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTIwMi0gKiBUaGlzIGRvZXNuJiMzOTt0IGZyZWUgdGhlIG1kaW9fZGV2aWNlIGl0c2VsZiwgaXQgbWVyZWx5IHJldmVyc2VzIHRoZSBlZmZlY3RzXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoyMDM6ICogb2YgbWRpb19kZXZpY2VfcmVnaXN0ZXIoKS4gVXNlIG1kaW9fZGV2aWNlX2ZyZWUoKSB0byBmcmVlIHRoZSBkZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTIwNC0gKiBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM9MjEyPWludCBtZGlvYnVzX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMjM4LVx0aWYgKG1kaW9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IE1ESU9fREVWSUNFX0ZMQUdfUEhZKSB7XG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoyMzk6XHRcdGVyciA9IG1kaW9fZGV2aWNlX3JlZ2lzdGVyX3Jlc2V0KG1kaW9kZXYpO1xuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMjQwLVx0XHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODYzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTURJTyBSZWdpc3RyYXRpb24gYW5kIERlcmVnaXN0cmF0aW9uIC0gQSBRdWljayBDaGVjayoqCgpPa2F5LCBzbyBgbWRpb19kZXZpY2VfcmVnaXN0ZXJgIGlzIGV4cG9ydGVkLCBhcyBleHBlY3RlZC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuIE5vdywgYmVmb3JlIEkgbW92ZSBvbiB0byBhbnkgZGVlcGVyIGFuYWx5c2lzIG9mIHRoZSBNRElPIGludGVyZmFjZSwgbGV0IG1lIGp1c3QgcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29tcGxlbWVudGFyeSBmdW5jdGlvbiwgYG1kaW9fZGV2aWNlX3JlbW92ZWAuIEVuc3VyaW5nIHRoZXNlIHJlZ2lzdHJhdGlvbi9kZXJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMgYmVoYXZlIGFzIGV4cGVjdGVkIGlzIGZ1bmRhbWVudGFsLCBhbmQgaXQgd2lsbCBpbmZvcm0gbXkgYXBwcm9hY2ggdG8gdGhlIHJlc3Qgb2YgdGhpcyBwYXJ0aWN1bGFyIHRhc2suIE5vIHN1cnByaXNlcyB0aGVyZSwgYnV0IGl0JiMzOTtzIGEgY3JpdGljYWwgcG9pbnQgdG8gcXVpY2tseSB2ZXJpZnkgYmVmb3JlIGRpdmluZyBpbnRvIGFueXRoaW5nIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW9fZGV2aWNlX3JlbW92ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jPTExOD1zdGF0aWMgdm9pZCBtZGlvX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xMjMtXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxMjQ6c3RhdGljIGludCBfX21kaW9fZGV2aWNlX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgZHluYW1pYyk7XG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xMjUtXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxMjY6c3RhdGljIGludCBtZGlvX2RldmljZV9yZW1vdmVfZHluYW1pYyhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xMjcte1xuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MTI4Olx0cmV0dXJuIF9fbWRpb19kZXZpY2VfcmVtb3ZlKG1kaW9kZXYsIHRydWUpO1xuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTI5LX1cbi0tXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYz0xMzE9c3RydWN0IG1kaW9fZGV2aWNlICptZGlvX2RldmljZV9jcmVhdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTQzLVx0bWRpb2Rldi1cdTAwM2VkZXZpY2VfZnJlZSA9IG1kaW9fZGV2aWNlX2ZyZWU7XG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxNDQ6XHRtZGlvZGV2LVx1MDAzZWRldmljZV9yZW1vdmUgPSBtZGlvX2RldmljZV9yZW1vdmU7XG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxNDU6XHRtZGlvZGV2LVx1MDAzZWRldmljZV9yZW1vdmVfZHluYW1pYyA9IG1kaW9fZGV2aWNlX3JlbW92ZV9keW5hbWljO1xuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTQ2LVx0bWRpb2Rldi1cdTAwM2VidXMgPSBidXM7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM9MTgxPUVYUE9SVF9TWU1CT0wobWRpb19kZXZpY2VfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTgyLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MTgzOnN0YXRpYyBpbnQgX19tZGlvX2RldmljZV9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIGR5bmFtaWMpXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xODQte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTE5Ny0vKipcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jOjE5ODogKiBtZGlvX2RldmljZV9yZW1vdmUgLSBSZW1vdmUgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgbWRpbyBkZXZpY2UgZnJvbSB0aGVcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTE5OS0gKlx0XHRcdE1ESU8gYnVzXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMjA1LSAqL1xuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MjA2OnZvaWQgbWRpb19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTIwNy17XG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoyMDg6XHRfX21kaW9fZGV2aWNlX3JlbW92ZShtZGlvZGV2LCBmYWxzZSk7XG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0yMDktfVxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MjEwOkVYUE9SVF9TWU1CT0wobWRpb19kZXZpY2VfcmVtb3ZlKTtcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTIxMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4MzQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipNRElPIERldmljZSBSZW1vdmFsIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBgbWRpb19kZXZpY2VfcmVtb3ZlYCBpcyBzcGVjaWZpY2FsbHkgZXhwb3J0ZWQsIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGlzLCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgbWFjaGluZXJ5LiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIG9mIHRoZSBQSFkgbGF5ZXIsIG5hdHVyYWxseS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb21wbGVtZW50YXJ5IGZ1bmN0aW9ucyBmb3IgZGV2aWNlIHJlZ2lzdHJhdGlvbiBhbmQgcmVtb3ZhbCB3aXRoaW4gdGhlIFBIWSBjb250ZXh0LiBTcGVjaWZpY2FsbHksIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCBhbmQgYHBoeV9kZXZpY2VfcmVtb3ZlYCBjb21lIHRvIG1pbmQuIEkmIzM5O2xsIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhvc2UgaW50ZXJhY3QgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlIG9mIHdoYXQgdGhpcyBleHBvcnRlZCBgbWRpb19kZXZpY2VfcmVtb3ZlYCBpcyByZWFsbHkgZG9pbmcgaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3MuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBhIGNsZWFudXAgcHJvY2VzcywgYW5kIHRob3NlIHR3byBmdW5jdGlvbiBhcmUgdGhlIHBsYWNlcyB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X2RldmljZV9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTE1PUVYUE9SVF9TWU1CT0woZ2V0X3BoeV9kZXZpY2UpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTExNy0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTExODogKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMTktICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMjAtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMjE6aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEyMi17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTQ0LX1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE0NTpFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTQ2LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTQ3PXN0YXRpYyBpbnQgX19waHlfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGR5bmFtaWMpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTc1LSAqIFRoaXMgZG9lc24mIzM5O3QgZnJlZSB0aGUgcGh5X2RldmljZSBpdHNlbGYsIGl0IG1lcmVseSByZXZlcnNlcyB0aGUgZWZmZWN0c1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTc2OiAqIG9mIHBoeV9kZXZpY2VfcmVnaXN0ZXIoKS4gVXNlIHBoeV9kZXZpY2VfZnJlZSgpIHRvIGZyZWUgdGhlIGRldmljZVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTc3LSAqIGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk0NzUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gUEhZIERldmljZSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCBpcyBjbGVhcmx5IHRoZSBleHBvcnRlZCBmdW5jdGlvbiB3ZSYjMzk7cmUgdXNpbmcgdG8gYWRkIGEgbmV3IHBoeXNpY2FsIGxheWVyIGRldmljZSB0byB0aGUgc3lzdGVtLiBUaGF0JiMzOTtzIG91ciBlbnRyeSBwb2ludCwgdGhlIGNyaXRpY2FsIHBpZWNlLiBOb3csIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBhbmQgZW5zdXJlIHByb3BlciBjbGVhbnVwLCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZXNlIGRldmljZXMgYXJlIHJlbW92ZWQuIFRoZSBjb21wbGVtZW50YXJ5IGZ1bmN0aW9uLCB0aGUgb25lIHRoYXQgc2hvdWxkIHVuZG8gd2hhdCBgcGh5X2RldmljZV9yZWdpc3RlcmAgZG9lcywgaXMgb2J2aW91c2x5IGBwaHlfZGV2aWNlX3JlbW92ZWAuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGZvciB0aGF0IG9uZS4gTmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1bnJlZ2lzdHJhdGlvbiBwcm9jZXNzIHRvIGVuc3VyZSBwcm9wZXIgcmVzb3VyY2UgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X2RldmljZV9yZW1vdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjI0PXN0YXRpYyB2b2lkIHBoeV9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMjktXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjIzMDpzdGF0aWMgaW50IF9fcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBkeW5hbWljKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjMxLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yMzI9c3RhdGljIHZvaWQgcGh5X21kaW9fZGV2aWNlX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMzYtXHRwaHlkZXYgPSBjb250YWluZXJfb2YobWRpb2Rldiwgc3RydWN0IHBoeV9kZXZpY2UsIG1kaW8pO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyMzc6XHRwaHlfZGV2aWNlX3JlbW92ZShwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMzgtfVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MjQwPXN0YXRpYyBpbnQgcGh5X21kaW9fZGV2aWNlX3JlbW92ZV9keW5hbWljKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI0NC1cdHBoeWRldiA9IGNvbnRhaW5lcl9vZihtZGlvZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSwgbWRpbyk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI0NTpcdHJldHVybiBfX3BoeV9kZXZpY2VfcmVtb3ZlKHBoeWRldiwgdHJ1ZSk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTI0Ni19XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTQ1PUVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNDYtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExNDc6c3RhdGljIGludCBfX3BoeV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZHluYW1pYylcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE0OC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTcxLS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTcyOiAqIHBoeV9kZXZpY2VfcmVtb3ZlIC0gUmVtb3ZlIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIHBoeSBkZXZpY2UgZnJvbSB0aGUgTURJTyBidXNcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE3My0gKiBAcGh5ZGV2OiBwaHlfZGV2aWNlIHN0cnVjdHVyZSB0byByZW1vdmVcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNzgtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExNzk6dm9pZCBwaHlfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTgwLXtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE4MTpcdF9fcGh5X2RldmljZV9yZW1vdmUocGh5ZGV2LCBmYWxzZSk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExODItfVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTgzOkVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZW1vdmUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTg0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDM5NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgUEhZIERldmljZSBSZW1vdmFsIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBgcGh5X2RldmljZV9yZW1vdmVgIGlzIGV4cG9zZWQsIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuIFRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBmdW5jdGlvbiBpbXBhY3RzIHRoZSBzeXN0ZW0sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgUEhZIGRldmljZSBtYW5hZ2VtZW50LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAuIFRoZXNlIGZ1bmN0aW9ucyBsaWtlbHkgcGxheSBhIGNydWNpYWwgcm9sZSBpbiB0aGUgbGlmZWN5Y2xlIGFuZCBkZXBlbmRlbmN5IG1hbmFnZW1lbnQgYXJvdW5kIHJlbW92YWwgYW5kIHdpbGwgaGVscCBpbmZvcm0gdGhlIGltcGFjdCBvZiBhIGNhbGwgdG8gYHBoeV9kZXZpY2VfcmVtb3ZlYC4gQnkgZXhhbWluaW5nIHRoZWlyIGludGVyYWN0aW9ucywgSSBjYW4gc3RhcnQgZm9ybWluZyBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgcmVtb3ZhbCBwcm9jZWR1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9hdHRhY2hfZGlyZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEyNDQ9aW50IHBoeV9jb25uZWN0X2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTI1Mi1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTI1MzpcdHJjID0gcGh5X2F0dGFjaF9kaXJlY3QoZGV2LCBwaHlkZXYsIHBoeWRldi1cdTAwM2VkZXZfZmxhZ3MsIGludGVyZmFjZSk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyNTQtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNzc3PXN0YXRpYyB2b2lkIHBoeV9yZWxlYXNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzg2LS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzg3OiAqIHBoeV9hdHRhY2hfZGlyZWN0IC0gYXR0YWNoIGEgbmV0d29yayBkZXZpY2UgdG8gYSBnaXZlbiBQSFkgZGV2aWNlIHBvaW50ZXJcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTc4OC0gKiBAZGV2OiBuZXR3b3JrIGRldmljZSB0byBhdHRhY2hcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4MDAtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE4MDE6aW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4MDItXHRcdCAgICAgIHUzMiBmbGFncywgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE5NTktfVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxOTYwOkVYUE9SVF9TWU1CT0wocGh5X2F0dGFjaF9kaXJlY3QpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xOTYxLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTk2Ni0gKiBUaGlzIGRldGFjaGVzIHRoZSBwaHkgZGV2aWNlIGZyb20gaXRzIG5ldHdvcmsgZGV2aWNlIGFuZCB0aGUgcGh5XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE5Njc6ICogZHJpdmVyLCBhbmQgZHJvcHMgdGhlIHJlZmVyZW5jZSBjb3VudCB0YWtlbiBpbiBwaHlfYXR0YWNoX2RpcmVjdCgpLlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xOTY4LSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTEwNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpcmVjdCBEZXZpY2UgQXR0YWNobWVudCAmYW1wOyBEZXRhY2htZW50KioKCk9rYXksIHNvIGBwaHlfYXR0YWNoX2RpcmVjdGAgaXMgZXhwb3J0ZWQsIHRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBJdCBtZWFucyBpdCYjMzk7cyBhdmFpbGFibGUgZm9yIG90aGVyIG1vZHVsZXMgb3IgdGhlIGtlcm5lbCB0byB1c2UsIGxpa2VseSBmb3IgZGlyZWN0bHkgY29ubmVjdGluZyBhIHBoeXNpY2FsIGRldmljZSB0byBhIHNwZWNpZmljIGRyaXZlciBvciBzdWJzeXN0ZW0uIE15IG5leHQgdGhvdWdodCBpcywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBhbHNvIHVuZGVyc3RhbmQgdGhlIGNvdW50ZXJwYXJ0LCB0aGUgZnVuY3Rpb24gdXNlZCB0byByZXZlcnNlIHRoaXMgcHJvY2VzczogYHBoeV9kZXRhY2hgLiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBhdHRhY2htZW50IGNhbiBiZSBwcm9wZXJseSB1bmRvbmUgd2hlbiBuZWNlc3NhcnksIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBzeXN0ZW0gc3RhYmlsaXR5IGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXRhY2ggZnVuY3Rpb24mIzM5O3MgYmVoYXZpb3IgdG8gdW5kZXJzdGFuZCB0aGUgZW50aXJlIGF0dGFjaC9kZXRhY2ggbGlmZWN5Y2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfZGV0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTMxMT1zdGF0aWMgYm9vbCBtZGlvX2J1c19waHlfbWF5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMyNy1cdCAqIHN1c3BlbmRlZCBhcyBwYXJ0IG9mIGEgcHJpb3IgY2FsbCB0byBwaHlfZGlzY29ubmVjdCgpIC1cdTAwM2VcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzI4Olx0ICogcGh5X2RldGFjaCgpIC1cdTAwM2UgcGh5X3N1c3BlbmQoKSBiZWNhdXNlIHRoZSBwYXJlbnQgbmV0ZGV2IG1pZ2h0IGJlIHRoZVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zMjktXHQgKiBNRElPIGJ1cyBkcml2ZXIgYW5kIGNsb2NrIGdhdGVkIGF0IHRoaXMgcG9pbnQuXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMzEyPXZvaWQgcGh5X2Rpc2Nvbm5lY3Qoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzMjEtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEzMjI6XHRwaHlfZGV0YWNoKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzMjMtfVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTgwMT1pbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4NzUtXHQgKiByZWFkeS4gT25jZSB3ZSBkbyB0aGF0IHdlIHN0aWxsIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE4NzY6XHQgKiBsaW5rcyB3ZXJlIHN1Y2Nlc3NmdWxseSBzZXQgdXAgb3Igbm90IGZvciBwaHlfZGV0YWNoKCkgdG9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTg3Ny1cdCAqIHJlbW92ZSB0aGVtIGFjY29yZGluZ2x5LlxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTk0My1lcnJvcjpcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTk0NDpcdC8qIHBoeV9kZXRhY2goKSBkb2VzIGFsbCBvZiB0aGUgY2xlYW51cCBiZWxvdyAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxOTQ1Olx0cGh5X2RldGFjaChwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xOTQ2LVx0cmV0dXJuIGVycjtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTE5NjA9RVhQT1JUX1NZTUJPTChwaHlfYXR0YWNoX2RpcmVjdCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xOTYyLS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxOTYzOiAqIHBoeV9kZXRhY2ggLSBkZXRhY2ggYSBQSFkgZGV2aWNlIGZyb20gaXRzIG5ldHdvcmsgZGV2aWNlXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE5NjQtICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xOTY4LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxOTY5OnZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xOTcwLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIwNDAtfVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyMDQxOkVYUE9SVF9TWU1CT0wocGh5X2RldGFjaCk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIwNDItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDM0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzIFN5bWJvbCBSZWZpbmVtZW50KioKCk9rYXksIHNvIEkgc2VlIGBwaHlfZGV0YWNoYCBpcyBleHBvcnRlZCwgdGhhdCYjMzk7cyBnb29kLiBUaW1lIHRvIHNvbGlkaWZ5IHRoZSBsaXN0IG9mIEZvY3VzU3ltYm9scy4gQmFzZWQgb24gdGhhdCBmYWN0LCBhbmQgd2hhdCBJIGtub3cgYWJvdXQgdGhlIHBoeWxpYiwgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBpbW1lZGlhdGVseSBjb21lIHRvIG1pbmQ6CgoqICAgYF9fbWRpb2J1c19yZWdpc3RlcmAKKiAgIGBtZGlvYnVzX3VucmVnaXN0ZXJgCiogICBgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luYAoqICAgYG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmRgCiogICBgbWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZWAKKiAgIGBtZGlvYnVzX2JlZ2luX3JlbW92ZWAKKiAgIGBtZGlvYnVzX2ZpbmlzaF9yZW1vdmVgCiogICBgbWRpb19kZXZpY2VfcmVnaXN0ZXJgCiogICBgbWRpb19kZXZpY2VfcmVtb3ZlYAoqICAgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgCiogICBgcGh5X2RldmljZV9yZW1vdmVgCiogICBgcGh5X2F0dGFjaF9kaXJlY3RgCiogICBgcGh5X2RldGFjaGAKCkhhbmcgb24gYSBzZWNvbmQuLi4gY2hlY2tpbmcgdGhvc2UgaW50ZXJuYWwgcGh5bGliIGZ1bmN0aW9ucywgbmFtZWx5IGBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lYCwgYG1kaW9idXNfYmVnaW5fcmVtb3ZlYCwgYW5kIGBtZGlvYnVzX2ZpbmlzaF9yZW1vdmVgLCBJIHNlZSB0aGV5ICphcmVuJiMzOTt0KiBzdGF0aWMuIFRoYXQgbWVhbnMgdGhleSYjMzk7cmUgbm90IGZ1bGx5IGludGVybmFsIGFuZCBjYW4gc3RpbGwgYmUgaW5jbHVkZWQuIE9rYXksIG1ha2VzIHNlbnNlLgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBgb2ZfbWRpb2AgY29kZSwgc3BlY2lmaWNhbGx5IGBvZl9tZGlvYnVzX3JlZ2lzdGVyX2NoaWxkYCBhbmQgYG9mX21kaW9idXNfc2Nhbl9waHlgLiBUaGVzZSBhcmUgbWFya2VkIHN0YXRpYywgYnV0IHRoZXkmIzM5O3JlIGNhbGxlZCBmcm9tIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgLiBJbmNsdWRpbmcgYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAgc2hvdWxkIGNvdmVyIHRoYXQganVzdCBmaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX29mX21kaW9idXNfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYz0yMzM9c3RhdGljIGludCBfX29mX21kaW9idXNfcGFyc2VfcGh5cyhzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCxcbi0tXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0yNzctLyoqXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzoyNzg6ICogX19vZl9tZGlvYnVzX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgbWlpX2J1cyBhbmQgY3JlYXRlIFBIWXMgZnJvbSB0aGUgZGV2aWNlIHRyZWVcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTI3OS0gKiBAbWRpbzogcG9pbnRlciB0byBtaWlfYnVzIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTI4NS0gKi9cbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjI4NjppbnQgX19vZl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMjg3LVx0XHRcdCAgc3RydWN0IG1vZHVsZSAqb3duZXIpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMzU4LX1cbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjM1OTpFWFBPUlRfU1lNQk9MKF9fb2ZfbWRpb2J1c19yZWdpc3Rlcik7XG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0zNjAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMDMxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1ESU8gQnVzIFJlZ2lzdHJhdGlvbiBhbmQgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBfX29mX21kaW9idXNfcmVnaXN0ZXJgIGlzIGluZGVlZCBleHBvcnRlZC4gVGhhdCYjMzk7cyBnb29kOyBpdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgSSBuZWVkLiBOb3csIGxldCYjMzk7cyBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW52b2x2ZWQgaW4gdGhpcyBhcmVhLCBqdXN0IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJJiMzOTttIHNlZWluZyBgT0ZfRFlOQU1JQ2AsIGBPRl9PVkVSTEFZYCwgYE9GX01ESU9gLCBgUEhZTElCYCwgYW5kIGBNRElPX0RFVklDRWAgYXMgcmVsZXZhbnQgY29uZmlncy4KClJpZ2h0LCB0aW1lIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYE9GX01ESU9gIHJlbGllcyBvbiBgT0ZgLiBBbmQgeWVzLCB0aGF0JiMzOTtzIHdoYXQgSSB0aG91Z2h0OyBpdCYjMzk7cyBkZXBlbmRlbnQuIE5leHQsIEkgc2hvdWxkIGNoZWNrIGBPRl9EWU5BTUlDYCwganVzdCB0byBiZSBjZXJ0YWluLiBZZXMsIGBPRl9EWU5BTUlDYCBhbHNvIGRlcGVuZHMgb24gYE9GYC4gRmluYWxseSBgT0ZfT1ZFUkxBWWAsIHdoaWNoIGFsc28gcmVxdWlyZXMgYE9GYC4gRXhjZWxsZW50LCB0aG9zZSBhcmUgYWxsIGFzIGV4cGVjdGVkLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9mIGBPRl9NRElPYCwgSSYjMzk7bGwgZ28gaGF2ZSBhIGxvb2sgaW4gYGRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ2AuIEJldHRlciBzYWZlIHRoYW4gc29ycnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPRl9NRElPJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz05PWNvbmZpZyBGV05PREVfTURJT1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xMy1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxNDpjb25maWcgT0ZfTURJT1xuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE1LVx0ZGVmX3RyaXN0YXRlIE9GXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNTM0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVGhpbmtpbmcgb24gRGV2aWNlIFRyZWUgYW5kIFBIWUxJQiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBPRl9NRElPYCBpcyBhIHRyaXN0YXRlIG9wdGlvbiBhbmQgaXMgaW50cmluc2ljYWxseSBsaW5rZWQgdG8gdGhlIGJyb2FkZXIgRGV2aWNlIFRyZWUgKGBPRmApIGNvbmZpZ3VyYXRpb24uIFNpbmNlIGl0JiMzOTtzIGF1dG9tYXRpY2FsbHkgcHVsbGVkIGluIHdoZW4gYE9GYCBpcyBlbmFibGVkLCBJIGRvbiYjMzk7dCBuZWVkIHRvIGV4cGxpY2l0bHkgZGVmaW5lIGl0LiBNeSBmb2N1cywgdGhlbiwgc2hvdWxkIGJlIG9uIHRoZSBjb3JlIERldmljZSBUcmVlIGNvbmZpZ3VyYXRpb25zOiBgT0ZgLCBgT0ZfRFlOQU1JQ2AsIGBPRl9PVkVSTEFZYCwgYFBIWUxJQmAsIGFuZCBgTURJT19ERVZJQ0VgLgoKQWN0dWFsbHksIHdhaXQgYSBtaW51dGUuLi4gVGhpbmtpbmcgYWJvdXQgaXQsIGBPRl9EWU5BTUlDYCBhbmQgYE9GX09WRVJMQVlgIGFyZSBlc3NlbnRpYWxseSBzdXBlcnNldHMgdGhhdCBhbHJlYWR5ICppbXBseSogdGhhdCBgT0ZgIGlzIGVuYWJsZWQuIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuIEl0IGxvb2tzIGxpa2UgSSBqdXN0IG5lZWQgdG8gYmUgbWluZGZ1bCBvZiBgUEhZTElCYCBhbmQgZW5zdXJlIHRoYXQmIzM5O3MgY29ycmVjdGx5IGNvbmZpZ3VyZWQgYmFzZWQgb24gdGhlIHRhcmdldCBzeXN0ZW0uIExldCBtZSBkb3VibGUtY2hlY2sgaG93IHRoYXQmIzM5O3MgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBIWUxJQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTY9Y29uZmlnIFBIWUxJTktcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNC1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjE1Om1lbnVjb25maWcgUEhZTElCXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNi1cdHRyaXN0YXRlIFwmIzM0O1BIWSBEZXZpY2Ugc3VwcG9ydCBhbmQgaW5mcmFzdHJ1Y3R1cmVcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZz00Nj1jb25maWcgT1BFTl9BTExJQU5DRV9IRUxQRVJTXG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDgtXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo0OTpjb25maWcgUEhZTElCX0xFRFNcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTUwLVx0ZGVmX2Jvb2wgT0ZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQwMDEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFBIWUxJQiBhbmQgTURJT19ERVZJQ0UqKgoKT2theSwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYFBIWUxJQmAgaGVyZSwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBhIG1lbnVjb25maWcgb3B0aW9uLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGRpZ2dpbmcgaW50byB0aGUgaW50cmljYWNpZXMgb2YgaGFyZHdhcmUgYWJzdHJhY3Rpb24gYW5kIGRyaXZlciBzZWxlY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBzcGVjaWZpY2FsbHkgY29udHJvbHMuCgpMZXQmIzM5O3MgZGl2ZSBkZWVwZXIgYW5kIHZlcmlmeSB3aGF0IHByZWNpc2VseSB0aGUgYE1ESU9fREVWSUNFYCBpcyBkb2luZyB3aXRoaW4gdGhpcyBmcmFtZXdvcmsuIFRoaXMgY291bGQgaW52b2x2ZSBkaXJlY3QgYWNjZXNzLCBpbmRpcmVjdCBjb25maWd1cmF0aW9uLCBvciBzb21lIHNvcnQgb2YgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEkmIzM5O20gZ29pbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZSBgTURJT19ERVZJQ0VgIGlzIGEgbmVjZXNzYXJ5IG9yIG9wdGlvbmFsIHNlbGVjdGlvbiB1bmRlciB0aGUgUEhZTElCIHVtYnJlbGxhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRElPX0RFVklDRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyMTQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipQaW5wb2ludGluZyB0aGUgRGVmaW5pdGlvbiBvZiBNRElPX0RFVklDRSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgTURJT19ERVZJQ0VgIGlzIGNvbWluZyBmcm9tLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29kZSYjMzk7cyBiZWhhdmlvciBoZXJlLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpdHMgZGVmaW5pdGlvbiwgYmVjYXVzZSB3aXRob3V0IHRoYXQsIEkmIzM5O20gZXNzZW50aWFsbHkgZmx5aW5nIGJsaW5kLiBLbm93aW5nIHRoZSBjb250ZXh0IG9mIHRoaXMgbWFjcm8gaXMgKmNyaXRpY2FsKi4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZzogd2hlcmUgaXMgaXQgZGVmaW5lZD8gSXMgaXQgaW4gYSBoZWFkZXIgZmlsZT8gQSBjb25maWd1cmF0aW9uIGZpbGU/IEEgcGxhdGZvcm0tc3BlY2lmaWMgaW5jbHVkZT8gVGltZSB0byBnbyBodW50aW5nLiBMZXQmIzM5O3Mgc3RhcnQgdGhlIHNlYXJjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTURJT19ERVZJQ0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDM5MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBNRElPIERyaXZlciBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYE1ESU9fREVWSUNFYOKApiBhbmQgaW1tZWRpYXRlbHkgbXkgbWluZCBqdW1wcyB0byB0aGUgY29uZmlndXJhdGlvbiBzcGFjZS4gU3BlY2lmaWNhbGx5LCB0aGF0IGhhcyB0byBiZSBkZWZpbmVkIGluIGBkcml2ZXJzL25ldC9tZGlvL0tjb25maWdgLCBkb2VzbiYjMzk7dCBpdD8gSXQmIzM5O3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSwgY29uc2lkZXJpbmcgdGhlIGNvbnRleHQuIFRoYXQmIzM5O3Mgd2hlcmUgeW91JiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBkZXBlbmRlbmNpZXMsIGFueSBkZWZhdWx0IHNldHRpbmdzLCBoZWxwIHRleHQsIGFuZCBhbGwgdGhlIHVzdWFsIEtjb25maWcgZ29vZG5lc3MgYXNzb2NpYXRlZCB3aXRoIGEgaGFyZHdhcmUgZmVhdHVyZSBsaWtlIHRoaXMuIEkgYmV0IGl0IGlzIGRlZmluZWQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1ESU9fREVWSUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ2MDgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgUEhZIENvbmZpZ3VyYXRpb24gU3BhY2UqKgoKT2theSwgc28gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCBgTURJT19ERVZJQ0VgIHdhcyBkZWZpbmVkIHdpdGhpbiB0aGUgbmV0d29yayBQSFkgS2NvbmZpZyBmaWxlLiBUaGF0JiMzOTtzIGEgY29tbW9uIGFyZWEgZm9yIHN1Y2ggc2V0dGluZ3MsIGJ1dCBzb21ldGhpbmcgZmVlbHMgb2ZmLiBMZXQmIzM5O3Mgbm90IG1ha2UgYXNzdW1wdGlvbnMuIFRpbWUgdG8gdmVyaWZ5LiBUaGUgbG9naWNhbCBuZXh0IHBsYWNlIHRvIGNoZWNrIHdvdWxkIGJlIHRoZSBgZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZWAuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoYXQgSSYjMzk7dmUganVtcGVkIHRvIGEgY29uY2x1c2lvbiB3aXRob3V0IHZlcmlmeWluZyBhIGtleSBwYXJ0IG9mIHRoZSBjb25maWd1cmF0aW9uIHRyZWUuIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoaXMgaXMgYWN0dWFsbHkgZGVmaW5lZCBiZWZvcmUgcHJvY2VlZGluZy4gVGhpcyBpcyBiYXNpYywgYnV0IGltcG9ydGFudCwgZ29vZCBwcmFjdGljZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpb19kZXZpY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTQ9bGlicGh5LXlcdFx0XHQ6PSBwaHkubyBwaHktYzQ1Lm8gcGh5LWNvcmUubyBwaHlfZGV2aWNlLm8gXFxcbi0tXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtNi1cdFx0XHRcdCAgIHBoeV9jYXBzLm8gbWRpb19idXNfcHJvdmlkZXIubyBwaHlfcG9ydC5vIFxcXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6NzpcdFx0XHRcdCAgIG1kaW9fZGV2aWNlLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS04LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDkyOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVuZGVyc3RhbmRpbmcgdGhlIFBIWS9NRElPIENvcmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBtZGlvX2RldmljZS5vYCBoZXJlLiBSaWdodCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHBhcnQgb2YgYGxpYnBoeS15YCwgd2hpY2gsIG9mIGNvdXJzZSwgaXMgYnVpbHQgd2hlbiBgQ09ORklHX1BIWUxJQmAgaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBzZW5zZSwgY29ubmVjdHMgdGhlIGRvdHMuIEkgcmVtZW1iZXIgdGhpcyBub3cuIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogdGhlIFBIWS9NRElPIGNvcmUgZnVuY3Rpb25hbGl0eSBoaW5nZXMgb24ganVzdCBgQ09ORklHX1BIWUxJQmAuIFRoYXQmIzM5O3MgdGhlIGtleS4gTm93LCBqdXN0IHRvIGNvbmZpcm0sIEkmIzM5O2xsIGdvIGNoZWNrIGhvdyBgT0ZfTURJT2AgaXMgc2V0IHVwIGluIGBkcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlYC4gTmVlZCB0byBiZSBzdXJlIGFsbCB0aGUgcGllY2VzIGFyZSBhY2NvdW50ZWQgZm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvZl9tZGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlPTU9b2JqLSQoQ09ORklHX0ZXTk9ERV9NRElPKVx0JiM0Mzs9IGZ3bm9kZV9tZGlvLm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6NjpvYmotJChDT05GSUdfT0ZfTURJTylcdFx0JiM0Mzs9IG9mX21kaW8ub1xuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZS03LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTI2MgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDI0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBNRElPIENvbmZpZ3VyYXRpb24gYW5kIEtleSBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgTURJTyBjb25maWd1cmF0aW9uLCBhbmQgYENPTkZJR19PRl9NRElPYCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZS4gSXQmIzM5O3MgYSBgZGVmX3RyaXN0YXRlIE9GYCwgd2hpY2ggbWVhbnMgaWYgdGhlIGRldmljZSB0cmVlIHN1cHBvcnQgKGBPRmApIGlzIGVuYWJsZWQsIHRoZW4gYENPTkZJR19PRl9NRElPYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuIFRoYXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSSYjMzk7bGwgZGVmaW5pdGVseSB3YW50IHRvIGluY2x1ZGUgYE9GYCwgYE9GX0RZTkFNSUNgLCBhbmQgYE9GX09WRVJMQVlgLCBzaW5jZSB0aGV54oCZcmUgY29yZSB0byB0aGlzIGZ1bmN0aW9uYWxpdHkuIE9oLCBhbmQgSSBjYW4mIzM5O3QgZm9yZ2V0IGBQSFlMSUJgIGVpdGhlci4gSXQmIzM5O3MgaW50cmluc2ljYWxseSBsaW5rZWQgdG8gUEhZIG1hbmFnZW1lbnQsIHdoaWNoIE1ESU8gY29udHJvbHMuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgb25lcyB0aGF0IHJlcHJlc2VudCB0aGUgY29yZSBvcGVyYXRpb25zOgoqICAgYF9fbWRpb2J1c19yZWdpc3RlcmAgYW5kIGBtZGlvYnVzX3VucmVnaXN0ZXJgOiBUaGVzZSBhcmUgdGhlIG9idmlvdXMgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMgZm9yIHRoZSBNRElPIGJ1cyBpdHNlbGYuCiogICBgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luYCwgYG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmRgOiBTb3VuZHMgbGlrZSB0aGVzZSBoYW5kbGUgY2hhbmdlcyB0byBkZXZpY2VzIG9uIHRoZSBidXMuCiogICBgbWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZWA6IE5lY2Vzc2FyeSBmb3IgY29tcGxldGluZyB0aGUgcmVnaXN0cmF0aW9uLgoqICAgYG1kaW9idXNfYmVnaW5fcmVtb3ZlYCwgYG1kaW9idXNfZmluaXNoX3JlbW92ZWA6IFRoZXNlIGxvb2sgbGlrZSB0aGUgcmVtb3ZhbCBjb3VudGVycGFydHMuCiogICBgbWRpb19kZXZpY2VfcmVnaXN0ZXJgIGFuZCBgbWRpb19kZXZpY2VfcmVtb3ZlYDogVGhlc2Ugd291bGQgcmVnaXN0ZXIgYW5kIHJlbW92ZSBpbmRpdmlkdWFsIE1ESU8gZGV2aWNlcywgcHJlc3VtYWJseSBQSFlzLgoqICAgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgLCBgcGh5X2RldmljZV9yZW1vdmVgOiBJbXBvcnRhbnQgZm9yIGF0dGFjaGluZyBhbmQgZGV0YWNoaW5nIFBIWXMgdG8gdGhlIGJ1cy4KKiAgIGBwaHlfYXR0YWNoX2RpcmVjdGAsIGBwaHlfZGV0YWNoYDogVGhlc2UgZGlyZWN0bHkgYXR0YWNoIG9yIGRldGFjaCBhIFBIWS4KKiAgIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgOiBJbmRpY2F0ZXMgYSBkZXZpY2UgdHJlZSByZWdpc3RyYXRpb24uCgpJIHRoaW5rIEkgaGF2ZSBhIHNvbGlkIG92ZXJ2aWV3IG9mIHRoZSByZWdpc3RyYXRpb24gYW5kIHJlbW92YWwgcHJvY2Vzc2VzLiBJdCYjMzk7cyBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZSBkZXZpY2UgdHJlZSBpbnRlZ3JhdGlvbiBhcyB3ZWxsLCBiYXNlZCBvbiB0aGUgZnVuY3Rpb24gbmFtZXMuCgpIbW0sIGFtIEkgbWlzc2luZyBhbnkgb2J2aW91cyBvbmVzPyBBaCB5ZXMsIGBtZGlvYnVzX3NjYW5fYzIyYCBhbmQgYG1kaW9idXNfc2Nhbl9jNDVgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgZGlzY292ZXJpbmcgZGV2aWNlcyBvbiB0aGUgYnVzLiBUaGV5JiMzOTtyZSBjcml0aWNhbCBmb3IgYWN0dWFsbHkgcG9wdWxhdGluZyB0aGUgTURJTyBidXMgd2l0aCBhdHRhY2hlZCBkZXZpY2VzLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhvc2UgaW4gbWluZCBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvYnVzX3NjYW5fYzIyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM9NDE2PXN0YXRpYyBzdHJ1Y3QgcGh5X2RldmljZSAqX19tZGlvYnVzX3NjYW4oc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDY5LS8qKlxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NDcwOiAqIG1kaW9idXNfc2Nhbl9jMjIgLSBzY2FuIG9uZSBhZGRyZXNzIG9uIGEgYnVzIGZvciBDMjIgTURJTyBkZXZpY2VzLlxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDcxLSAqIEBidXM6IG1paV9idXMgdG8gc2NhblxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ4MC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjQ4MTpzdHJ1Y3QgcGh5X2RldmljZSAqbWRpb2J1c19zY2FuX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ4Mi17XG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDk0LX1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjQ5NTpFWFBPUlRfU1lNQk9MKG1kaW9idXNfc2Nhbl9jMjIpO1xuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDk2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjM3MQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIE1ESU8gQnVzIFNjYW5uaW5nOiBBIFF1aWNrIE1lbnRhbCBDaGVjayoqCgpSaWdodCwgbGV0IG1lIHNlZS4uLiBJJiMzOTttIGN1cnJlbnRseSBsb29raW5nIGF0IHRoZSBNRElPIGJ1cyBjb2RlLiBJIGtub3cgYG1kaW9idXNfc2Nhbl9jMjJgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQsIHRoYXQmIzM5O3MgY2xlYXIuIE5vdyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaWYgd2UmIzM5O3JlIGFsc28gbWFraW5nIGBtZGlvYnVzX3NjYW5fYzQ1YCBhdmFpbGFibGUgb3V0c2lkZSBvZiB0aGUgZHJpdmVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteXNlbGYgb24gdGhlIHZpc2liaWxpdHkgYW5kIHBvc3NpYmxlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIEM0NSBzdXBwb3J0IGluIHRoaXMgcGFydGljdWxhciBjb250ZXh0LiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gY29uZmlybSB3aGV0aGVyIHVzZXJzcGFjZSBvciBvdGhlciBrZXJuZWwgbW9kdWxlcyBjYW4gZGlyZWN0bHkgY2FsbCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpb2J1c19zY2FuX2M0NSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jPTQ5NT1FWFBPUlRfU1lNQk9MKG1kaW9idXNfc2Nhbl9jMjIpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ5Ny0vKipcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjQ5ODogKiBtZGlvYnVzX3NjYW5fYzQ1IC0gc2NhbiBvbmUgYWRkcmVzcyBvbiBhIGJ1cyBmb3IgQzQ1IE1ESU8gZGV2aWNlcy5cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ5OS0gKiBAYnVzOiBtaWlfYnVzIHRvIHNjYW5cbi0tXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy01MDgtICovXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo1MDk6c3RhdGljIHN0cnVjdCBwaHlfZGV2aWNlICptZGlvYnVzX3NjYW5fYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyKVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNTEwLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYz01MzA9c3RhdGljIGludCBtZGlvYnVzX3NjYW5fYnVzX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTU0MS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjU0MjpcdFx0XHRwaHlkZXYgPSBtZGlvYnVzX3NjYW5fYzQ1KGJ1cywgaSk7XG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy01NDMtXHRcdFx0aWYgKElTX0VSUihwaHlkZXYpIFx1MDAyNlx1MDAyNiAoUFRSX0VSUihwaHlkZXYpICE9IC1FTk9ERVYpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAwMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjk3NQoJCQkJCQkJb3V0cHV0OiAyOTcKCQkJCQkJCXRob3VnaHRzOiAzMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQbGFuIGZvciBEeW5hbWljIE1ESU8gRGV2aWNlIEhhbmRsaW5nKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCYjMzk7cyBydW5uaW5nIHRocm91Z2ggbXkgaGVhZC4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgY29kZSYjMzk7cyBzdGF0aWMuIExldCYjMzk7cyBzZWUuLi4gdGhlIGF1dGhvciYjMzk7cyBpbmNsdWRpbmcgYG1kaW9idXNfc2Nhbl9jMjJgIOKAkyBnb29kLCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgcmVsZXZhbnQuCgpMZXQgbWUgYnJlYWsgZG93biB0aGUgcmVhc29uaW5nIGZvciB0aGlzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgY3JpdGljYWwgTURJTyBidXMgYW5kIFBIWSBkZXZpY2UgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiBsb2dpYy4gSXQmIzM5O3MgZGVzaWduZWQgdG8gaGFuZGxlIGR5bmFtaWMgRGV2aWNlIFRyZWUgY2hhbmdlcywgc3BlY2lmaWNhbGx5IGJvdGggT0YgZHluYW1pYyAqYW5kKiBvdmVybGF5IGNvbmZpZ3VyYXRpb25zLiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFRoZSBhdXRob3ImIzM5O3MgaW50cm9kdWNlZCBhIGxvY2tpbmcgbWVjaGFuaXNtLCBgbWRpb19tYXBfbG9ja2AsIHRvIHNlcmlhbGl6ZSB0aGVzZSBkZXZpY2UgY2hhbmdlcy4gVGhpcyBpcyAqY3JpdGljYWwqIGluIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGR1cmluZyBQSFkgYXR0YWNobWVudCBhbmQgZGV0YWNobWVudC4gT24gdG9wIG9mIHRoYXQsIHRoZXJlJiMzOTtzIGEgcmVmYWN0b3Jpbmcgb2YgdGhlIFBIWSBhbmQgTURJTyBkZXZpY2Ugc2Nhbm5pbmcgYW5kIHJlZ2lzdHJhdGlvbiBwcm9jZXNzZXMuCgpUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gY29kZSBhbmQgaXQmIzM5O3MgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLCBzbyBpdCBuZWVkcyB0byBiZSBjYXJlZnVsbHkgaW52ZXN0aWdhdGVkLiBNeSBjb25jZXJuIGlzIHRoZSBuZXcgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGxvZ2ljLiBUaGlzIGlzIHdoZXJlIGRlYWRsb2NrcyBhbmQgcmFjZSBjb25kaXRpb25zIGFyZSBsaWtlbHkgdG8gc2hvdyB1cC4gVGhhdCYjMzk7cyAqZXhhY3RseSogd2hhdCBmdXp6aW5nIGlzIGdvb2QgZm9yLgoKTm93LCBmb3IgdGhlIGNvbmZpZ3VyYXRpb25zOiBgT0ZgLCBgT0ZfRFlOQU1JQ2AsIGBPRl9PVkVSTEFZYCwgYW5kIGBQSFlMSUJgLiBUaG9zZSBhcmUgYWxsIGVzc2VudGlhbCBmb3IgdHJpZ2dlcmluZyB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy4KCkkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzIHRvIHRhcmdldCB0aGUgZnV6emluZzogYF9fbWRpb2J1c19yZWdpc3RlcmAsIGBtZGlvYnVzX3VucmVnaXN0ZXJgLCBgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luYCwgYG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmRgLCBgbWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZWAsIGBtZGlvYnVzX2JlZ2luX3JlbW92ZWAsIGBtZGlvYnVzX2ZpbmlzaF9yZW1vdmVgLCBgbWRpb19kZXZpY2VfcmVnaXN0ZXJgLCBgbWRpb19kZXZpY2VfcmVtb3ZlYCwgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgLCBgcGh5X2RldmljZV9yZW1vdmVgLCBgcGh5X2F0dGFjaF9kaXJlY3RgLCBgcGh5X2RldGFjaGAsIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgLCBhbmQgYG1kaW9idXNfc2Nhbl9jMjJgLgoKWWVhaCwgdGhpcyBsb29rcyBzb2xpZC4gSXQmIzM5O3MgZ290IHRoZSByaWdodCBjb25maWd1cmF0aW9ucywgdGhlIHJpZ2h0IGZvY3VzLCBhbmQgYSBjbGVhciByZWFzb24gdG8gcG9rZSBhdCBpdC4gVGltZSB0byBidWlsZCBhIGZ1enogaGFybmVzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMDA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09GJiMzNDssCiAgICAmIzM0O09GX0RZTkFNSUMmIzM0OywKICAgICYjMzQ7T0ZfT1ZFUkxBWSYjMzQ7LAogICAgJiMzNDtQSFlMSUImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX21kaW9idXNfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7bWRpb2J1c191bnJlZ2lzdGVyJiMzNDssCiAgICAmIzM0O21kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbiYjMzQ7LAogICAgJiMzNDttZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kJiMzNDssCiAgICAmIzM0O21kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUmIzM0OywKICAgICYjMzQ7bWRpb2J1c19iZWdpbl9yZW1vdmUmIzM0OywKICAgICYjMzQ7bWRpb2J1c19maW5pc2hfcmVtb3ZlJiMzNDssCiAgICAmIzM0O21kaW9fZGV2aWNlX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O21kaW9fZGV2aWNlX3JlbW92ZSYjMzQ7LAogICAgJiMzNDtwaHlfZGV2aWNlX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3BoeV9kZXZpY2VfcmVtb3ZlJiMzNDssCiAgICAmIzM0O3BoeV9hdHRhY2hfZGlyZWN0JiMzNDssCiAgICAmIzM0O3BoeV9kZXRhY2gmIzM0OywKICAgICYjMzQ7X19vZl9tZGlvYnVzX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O21kaW9idXNfc2Nhbl9jMjImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1ESU8gYnVzIGFuZCBQSFkgZGV2aWNlIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiBsb2dpYyB0byBzdXBwb3J0IGR5bmFtaWMgZGV2aWNlIHRyZWUgY2hhbmdlcyAoT0YgZHluYW1pYyBhbmQgb3ZlcmxheSkuIEl0IGludHJvZHVjZXMgYSBsb2NraW5nIG1lY2hhbmlzbSAoYG1kaW9fbWFwX2xvY2tgKSB0byBzZXJpYWxpemUgZGV2aWNlIGNoYW5nZXMgYW5kIHByZXZlbnQgcmFjZXMgZHVyaW5nIFBIWSBhdHRhY2htZW50IGFuZCBkZXRhY2htZW50LiBJdCBhbHNvIHJlZmFjdG9ycyB0aGUgc2Nhbm5pbmcgYW5kIHJlZ2lzdHJhdGlvbiBvZiBQSFlzIGFuZCBNRElPIGRldmljZXMuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBjb2RlIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBsb2dpYyBkb2VzIG5vdCBpbnRyb2R1Y2UgZGVhZGxvY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T0YmIzM0OywKICAgICYjMzQ7T0ZfRFlOQU1JQyYjMzQ7LAogICAgJiMzNDtPRl9PVkVSTEFZJiMzNDssCiAgICAmIzM0O1BIWUxJQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbWRpb2J1c19yZWdpc3RlciYjMzQ7LAogICAgJiMzNDttZGlvYnVzX3VucmVnaXN0ZXImIzM0OywKICAgICYjMzQ7bWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luJiMzNDssCiAgICAmIzM0O21kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmQmIzM0OywKICAgICYjMzQ7bWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZSYjMzQ7LAogICAgJiMzNDttZGlvYnVzX2JlZ2luX3JlbW92ZSYjMzQ7LAogICAgJiMzNDttZGlvYnVzX2ZpbmlzaF9yZW1vdmUmIzM0OywKICAgICYjMzQ7bWRpb19kZXZpY2VfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7bWRpb19kZXZpY2VfcmVtb3ZlJiMzNDssCiAgICAmIzM0O3BoeV9kZXZpY2VfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7cGh5X2RldmljZV9yZW1vdmUmIzM0OywKICAgICYjMzQ7cGh5X2F0dGFjaF9kaXJlY3QmIzM0OywKICAgICYjMzQ7cGh5X2RldGFjaCYjMzQ7LAogICAgJiMzNDtfX29mX21kaW9idXNfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7bWRpb2J1c19zY2FuX2MyMiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTURJTyBidXMgYW5kIFBIWSBkZXZpY2UgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIGxvZ2ljIHRvIHN1cHBvcnQgZHluYW1pYyBkZXZpY2UgdHJlZSBjaGFuZ2VzIChPRiBkeW5hbWljIGFuZCBvdmVybGF5KS4gSXQgaW50cm9kdWNlcyBhIGxvY2tpbmcgbWVjaGFuaXNtIChgbWRpb19tYXBfbG9ja2ApIHRvIHNlcmlhbGl6ZSBkZXZpY2UgY2hhbmdlcyBhbmQgcHJldmVudCByYWNlcyBkdXJpbmcgUEhZIGF0dGFjaG1lbnQgYW5kIGRldGFjaG1lbnQuIEl0IGFsc28gcmVmYWN0b3JzIHRoZSBzY2FubmluZyBhbmQgcmVnaXN0cmF0aW9uIG9mIFBIWXMgYW5kIE1ESU8gZGV2aWNlcy4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGxvZ2ljIGRvZXMgbm90IGludHJvZHVjZSBkZWFkbG9ja3Mgb3IgcmFjZSBjb25kaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDY6MDUuNTk2MjAyMTk5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzODMwMjk0OTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9GXCIsXG4gICAgXCJPRl9EWU5BTUlDXCIsXG4gICAgXCJPRl9PVkVSTEFZXCIsXG4gICAgXCJQSFlMSUJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX21kaW9idXNfcmVnaXN0ZXJcIixcbiAgICBcIm1kaW9idXNfdW5yZWdpc3RlclwiLFxuICAgIFwibWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luXCIsXG4gICAgXCJtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kXCIsXG4gICAgXCJtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lXCIsXG4gICAgXCJtZGlvYnVzX2JlZ2luX3JlbW92ZVwiLFxuICAgIFwibWRpb2J1c19maW5pc2hfcmVtb3ZlXCIsXG4gICAgXCJtZGlvX2RldmljZV9yZWdpc3RlclwiLFxuICAgIFwibWRpb19kZXZpY2VfcmVtb3ZlXCIsXG4gICAgXCJwaHlfZGV2aWNlX3JlZ2lzdGVyXCIsXG4gICAgXCJwaHlfZGV2aWNlX3JlbW92ZVwiLFxuICAgIFwicGh5X2F0dGFjaF9kaXJlY3RcIixcbiAgICBcInBoeV9kZXRhY2hcIixcbiAgICBcIl9fb2ZfbWRpb2J1c19yZWdpc3RlclwiLFxuICAgIFwibWRpb2J1c19zY2FuX2MyMlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNRElPIGJ1cyBhbmQgUEhZIGRldmljZSByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24gbG9naWMgdG8gc3VwcG9ydCBkeW5hbWljIGRldmljZSB0cmVlIGNoYW5nZXMgKE9GIGR5bmFtaWMgYW5kIG92ZXJsYXkpLiBJdCBpbnRyb2R1Y2VzIGEgbG9ja2luZyBtZWNoYW5pc20gKGBtZGlvX21hcF9sb2NrYCkgdG8gc2VyaWFsaXplIGRldmljZSBjaGFuZ2VzIGFuZCBwcmV2ZW50IHJhY2VzIGR1cmluZyBQSFkgYXR0YWNobWVudCBhbmQgZGV0YWNobWVudC4gSXQgYWxzbyByZWZhY3RvcnMgdGhlIHNjYW5uaW5nIGFuZCByZWdpc3RyYXRpb24gb2YgUEhZcyBhbmQgTURJTyBkZXZpY2VzLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gY29kZSB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC4gSXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gbG9naWMgZG9lcyBub3QgaW50cm9kdWNlIGRlYWRsb2NrcyBvciByYWNlIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA2OjA1LjU5NjIwNzc0OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2MjQ2MTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDM5ODFlZjU0NDM1NzQ2NDU2OTQwYTU0ZmExYjkyZjk1OTI4MDRiZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyA0IDAwOjA2OjA0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jIGIvZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmNcXG5pbmRleCBiOGQyOThjMDRkM2ZmLi5jODlmODhhYWNkOGRmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jXFxuKysrIGIvZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmNcXG5AQCAtMTMsNiArMTMsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZndub2RlX21kaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdXRleC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfaXJxLmhcXHUwMDNlXFxuQEAgLTIwLDYgKzIxLDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX25ldC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHlfZml4ZWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgREVGQVVMVF9HUElPX1JFU0VUX0RFTEFZXFx0MTBcXHQvKiBpbiBtaWNyb3NlY29uZHMgKi9cXG4gXFxuQEAgLTI3LDYgKzMwLDUyIEBAIE1PRFVMRV9BVVRIT1IoXFxcIkdyYW50IExpa2VseSBcXHUwMDNjZ3JhbnQubGlrZWx5QHNlY3JldGxhYi5jYVxcdTAwM2VcXFwiKTtcXG4gTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbiBNT0RVTEVfREVTQ1JJUFRJT04oXFxcIk9wZW5GaXJtd2FyZSBNRElPIGJ1cyAoRXRoZXJuZXQgUEhZKSBhY2Nlc3NvcnNcXFwiKTtcXG4gXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19PRl9EWU5BTUlDKVxcbisvKlxcbisgKiBPRiBjaGFuZ2VzIGNhbiBuZXN0IHdoZW4gcHJvYmluZyBvbmUgTURJTyBkZXZpY2UgZW5hYmxlcyBhbm90aGVyIG5vZGUgb25cXG4rICogdGhlIHNhbWUgYnVzLiBTZXJpYWxpemUgaW5kZXBlbmRlbnQgY2hhbmdlcyB3aGlsZSBhbGxvd2luZyB0aGF0IG5lc3RpbmcuXFxuKyAqL1xcbitzdGF0aWMgREVGSU5FX01VVEVYKG9mX21kaW9fcmVjb25maWdfbXV0ZXgpO1xcbitzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpvZl9tZGlvX3JlY29uZmlnX293bmVyO1xcbitzdGF0aWMgdW5zaWduZWQgaW50IG9mX21kaW9fcmVjb25maWdfZGVwdGg7XFxuK1xcbitzdGF0aWMgdm9pZCBvZl9tZGlvX3JlY29uZmlnX2xvY2sodm9pZClcXG4re1xcbitcXHRpZiAoIW11dGV4X3RyeWxvY2soXFx1MDAyNm9mX21kaW9fcmVjb25maWdfbXV0ZXgpKSB7XFxuK1xcdFxcdGlmIChvZl9tZGlvX3JlY29uZmlnX293bmVyID09IGN1cnJlbnQpIHtcXG4rXFx0XFx0XFx0b2ZfbWRpb19yZWNvbmZpZ19kZXB0aCsrO1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2b2ZfbWRpb19yZWNvbmZpZ19tdXRleCk7XFxuK1xcdH1cXG4rXFxuK1xcdFdBUk5fT05fT05DRShvZl9tZGlvX3JlY29uZmlnX293bmVyKTtcXG4rXFx0V0FSTl9PTl9PTkNFKG9mX21kaW9fcmVjb25maWdfZGVwdGgpO1xcbitcXHRvZl9tZGlvX3JlY29uZmlnX293bmVyID0gY3VycmVudDtcXG4rXFx0b2ZfbWRpb19yZWNvbmZpZ19kZXB0aCA9IDE7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG9mX21kaW9fcmVjb25maWdfdW5sb2NrKHZvaWQpXFxuK3tcXG4rXFx0V0FSTl9PTl9PTkNFKG9mX21kaW9fcmVjb25maWdfb3duZXIgIT0gY3VycmVudCk7XFxuK1xcdFdBUk5fT05fT05DRSghb2ZfbWRpb19yZWNvbmZpZ19kZXB0aCk7XFxuK1xcbitcXHRpZiAoLS1vZl9tZGlvX3JlY29uZmlnX2RlcHRoKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRvZl9tZGlvX3JlY29uZmlnX293bmVyID0gTlVMTDtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZvZl9tZGlvX3JlY29uZmlnX211dGV4KTtcXG4rfVxcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgb2ZfbWRpb19yZWNvbmZpZ19sb2NrKHZvaWQpXFxuK3tcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIG9mX21kaW9fcmVjb25maWdfdW5sb2NrKHZvaWQpXFxuK3tcXG4rfVxcbisjZW5kaWZcXG4rXFxuIC8qIEV4dHJhY3QgdGhlIGNsYXVzZSAyMiBwaHkgSUQgZnJvbSB0aGUgY29tcGF0aWJsZSBzdHJpbmcgb2YgdGhlIGZvcm1cXG4gICogZXRoZXJuZXQtcGh5LWlkQUFBQS5CQkJCICovXFxuIHN0YXRpYyBpbnQgb2ZfZ2V0X3BoeV9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSwgdTMyICpwaHlfaWQpXFxuQEAgLTQ0LDcgKzkzLDcgQEAgaW50IG9mX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG4gRVhQT1JUX1NZTUJPTChvZl9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIpO1xcbiBcXG4gc3RhdGljIGludCBvZl9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcXG4tXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQsIHUzMiBhZGRyKVxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLCB1MzIgYWRkcilcXG4ge1xcbiBcXHRyZXR1cm4gZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KG1kaW8sIG9mX2Z3bm9kZV9oYW5kbGUoY2hpbGQpLCBhZGRyKTtcXG4gfVxcbkBAIC03Nyw2ICsxMjYsMjUgQEAgc3RhdGljIGludCBvZl9tZGlvYnVzX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgb2ZfbWRpb2J1c19yZWdpc3Rlcl9jaGlsZChzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLCB1MzIgYWRkcilcXG4re1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRpZiAob2Zfbm9kZV90ZXN0X2FuZF9zZXRfZmxhZyhjaGlsZCwgT0ZfUE9QVUxBVEVEKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAob2ZfbWRpb2J1c19jaGlsZF9pc19waHkoY2hpbGQpKVxcbitcXHRcXHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXJfcGh5KG1kaW8sIGNoaWxkLCBhZGRyKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKG1kaW8sIGNoaWxkLCBhZGRyKTtcXG4rXFxuK1xcdGlmIChyYylcXG4rXFx0XFx0b2Zfbm9kZV9jbGVhcl9mbGFnKGNoaWxkLCBPRl9QT1BVTEFURUQpO1xcbitcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbiAvKiBUaGUgZm9sbG93aW5nIGlzIGEgbGlzdCBvZiBQSFkgY29tcGF0aWJsZSBzdHJpbmdzIHdoaWNoIGFwcGVhciBpblxcbiAgKiBzb21lIERUQnMuIFRoZSBjb21wYXRpYmxlIHN0cmluZyBpcyBuZXZlciBtYXRjaGVkIGFnYWluc3QgYSBQSFlcXG4gICogZHJpdmVyLCBzbyBpcyBwb2ludGxlc3MuIFdlIG9ubHkgZXhwZWN0IGRldmljZXMgd2hpY2ggYXJlIG5vdCBQSFlzXFxuQEAgLTEzNiw2ICsyMDQsMzIgQEAgYm9vbCBvZl9tZGlvYnVzX2NoaWxkX2lzX3BoeShzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0wob2ZfbWRpb2J1c19jaGlsZF9pc19waHkpO1xcbiBcXG4rc3RhdGljIGludCBvZl9tZGlvYnVzX3NjYW5fcGh5KHN0cnVjdCBtaWlfYnVzICptZGlvLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpjaGlsZClcXG4re1xcbitcXHRpbnQgYWRkciwgcmM7XFxuK1xcbitcXHRpZiAoIW9mX21kaW9idXNfY2hpbGRfaXNfcGh5KGNoaWxkKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRmb3IgKGFkZHIgPSAwOyBhZGRyIFxcdTAwM2MgUEhZX01BWF9BRERSOyBhZGRyKyspIHtcXG4rXFx0XFx0aWYgKG1kaW9idXNfaXNfcmVnaXN0ZXJlZF9kZXZpY2UobWRpbywgYWRkcikpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0ZGV2X2luZm8oXFx1MDAyNm1kaW8tXFx1MDAzZWRldiwgXFxcInNjYW4gcGh5ICVwT0ZuIGF0IGFkZHJlc3MgJWlcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCBjaGlsZCwgYWRkcik7XFxuK1xcbitcXHRcXHQvKiAtRU5PREVWIG1lYW5zIHRoYXQgc2Nhbm5pbmcgc2hvdWxkIGNvbnRpbnVlLiAqL1xcbitcXHRcXHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXJfY2hpbGQobWRpbywgY2hpbGQsIGFkZHIpO1xcbitcXHRcXHRpZiAoIXJjKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0aWYgKHJjICE9IC1FTk9ERVYpXFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIC1FTk9ERVY7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgX19vZl9tZGlvYnVzX3BhcnNlX3BoeXMoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuIFxcdFxcdFxcdFxcdCAgIGJvb2wgKnNjYW5waHlzKVxcbiB7XFxuQEAgLTE2NCwxMCArMjU4LDcgQEAgc3RhdGljIGludCBfX29mX21kaW9idXNfcGFyc2VfcGh5cyhzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCxcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGlmIChvZl9tZGlvYnVzX2NoaWxkX2lzX3BoeShjaGlsZCkpXFxuLVxcdFxcdFxcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9waHkobWRpbywgY2hpbGQsIGFkZHIpO1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2UobWRpbywgY2hpbGQsIGFkZHIpO1xcbitcXHRcXHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXJfY2hpbGQobWRpbywgY2hpbGQsIGFkZHIpO1xcbiBcXG4gXFx0XFx0aWYgKHJjID09IC1FTk9ERVYpXFxuIFxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNm1kaW8tXFx1MDAzZWRldixcXG5AQCAtMTk3LDcgKzI4OCw3IEBAIGludCBfX29mX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuIHtcXG4gXFx0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZDtcXG4gXFx0Ym9vbCBzY2FucGh5cyA9IGZhbHNlO1xcbi1cXHRpbnQgYWRkciwgcmM7XFxuK1xcdGludCByYztcXG4gXFxuIFxcdGlmICghbnApXFxuIFxcdFxcdHJldHVybiBfX21kaW9idXNfcmVnaXN0ZXIobWRpbywgb3duZXIpO1xcbkBAIC0yMjMsMTMgKzMxNCwyMSBAQCBpbnQgX19vZl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbiBcXHRpZiAocmMpXFxuIFxcdFxcdHJldHVybiByYztcXG4gXFxuK1xcdG9mX21kaW9fcmVjb25maWdfbG9jaygpO1xcbitcXHRyYyA9IG1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbihtZGlvLCBmYWxzZSk7XFxuK1xcdGlmIChyYykge1xcbitcXHRcXHRvZl9tZGlvX3JlY29uZmlnX3VubG9jaygpO1xcbitcXHRcXHRtZGlvYnVzX3VucmVnaXN0ZXIobWRpbyk7XFxuK1xcdFxcdHJldHVybiByYztcXG4rXFx0fVxcbitcXG4gXFx0LyogTG9vcCBvdmVyIHRoZSBjaGlsZCBub2RlcyBhbmQgcmVnaXN0ZXIgYSBwaHlfZGV2aWNlIGZvciBlYWNoIHBoeSAqL1xcbiBcXHRyYyA9IF9fb2ZfbWRpb2J1c19wYXJzZV9waHlzKG1kaW8sIG5wLCBcXHUwMDI2c2NhbnBoeXMpO1xcbiBcXHRpZiAocmMpXFxuLVxcdFxcdGdvdG8gdW5yZWdpc3RlcjtcXG4rXFx0XFx0Z290byBvdXRfY2hhbmdlO1xcbiBcXG4gXFx0aWYgKCFzY2FucGh5cylcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdGdvdG8gb3V0X2NoYW5nZTtcXG4gXFxuIFxcdC8qIGF1dG8gc2NhbiBmb3IgUEhZcyB3aXRoIGVtcHR5IHJlZyBwcm9wZXJ0eSAqL1xcbiBcXHRmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZShucCwgY2hpbGQpIHtcXG5AQCAtMjM4LDM5ICszMzcsMzgyIEBAIGludCBfX29mX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXFxuIFxcdFxcdCAgICBvZl9ub2RlX25hbWVfZXEoY2hpbGQsIFxcXCJldGhlcm5ldC1waHktcGFja2FnZVxcXCIpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdGZvciAoYWRkciA9IDA7IGFkZHIgXFx1MDAzYyBQSFlfTUFYX0FERFI7IGFkZHIrKykge1xcbi1cXHRcXHRcXHQvKiBza2lwIGFscmVhZHkgcmVnaXN0ZXJlZCBQSFlzICovXFxuLVxcdFxcdFxcdGlmIChtZGlvYnVzX2lzX3JlZ2lzdGVyZWRfZGV2aWNlKG1kaW8sIGFkZHIpKVxcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdFxcdC8qIGJlIG5vaXN5IHRvIGVuY291cmFnZSBwZW9wbGUgdG8gc2V0IHJlZyBwcm9wZXJ0eSAqL1xcbi1cXHRcXHRcXHRkZXZfaW5mbyhcXHUwMDI2bWRpby1cXHUwMDNlZGV2LCBcXFwic2NhbiBwaHkgJXBPRm4gYXQgYWRkcmVzcyAlaVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0IGNoaWxkLCBhZGRyKTtcXG4tXFxuLVxcdFxcdFxcdGlmIChvZl9tZGlvYnVzX2NoaWxkX2lzX3BoeShjaGlsZCkpIHtcXG4tXFx0XFx0XFx0XFx0LyogLUVOT0RFViBpcyB0aGUgcmV0dXJuIGNvZGUgdGhhdCBQSFlMSUIgaGFzXFxuLVxcdFxcdFxcdFxcdCAqIHN0YW5kYXJkaXplZCBvbiB0byBpbmRpY2F0ZSB0aGF0IGJ1c1xcbi1cXHRcXHRcXHRcXHQgKiBzY2FubmluZyBzaG91bGQgY29udGludWUuXFxuLVxcdFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRcXHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXJfcGh5KG1kaW8sIGNoaWxkLCBhZGRyKTtcXG4tXFx0XFx0XFx0XFx0aWYgKCFyYylcXG4tXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdFxcdGlmIChyYyAhPSAtRU5PREVWKVxcbi1cXHRcXHRcXHRcXHRcXHRnb3RvIHB1dF91bnJlZ2lzdGVyO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdH1cXG4rXFx0XFx0cmMgPSBvZl9tZGlvYnVzX3NjYW5fcGh5KG1kaW8sIGNoaWxkKTtcXG4rXFx0XFx0aWYgKHJjIFxcdTAwMjZcXHUwMDI2IHJjICE9IC1FTk9ERVYpXFxuK1xcdFxcdFxcdGdvdG8gcHV0X2NoaWxkO1xcbitcXHRcXHRyYyA9IDA7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiAwO1xcbitvdXRfY2hhbmdlOlxcbitcXHRtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kKG1kaW8sIGZhbHNlKTtcXG4rXFx0b2ZfbWRpb19yZWNvbmZpZ191bmxvY2soKTtcXG4rXFx0aWYgKCFyYylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1wdXRfdW5yZWdpc3RlcjpcXG4tXFx0b2Zfbm9kZV9wdXQoY2hpbGQpO1xcbi11bnJlZ2lzdGVyOlxcbiBcXHRtZGlvYnVzX3VucmVnaXN0ZXIobWRpbyk7XFxuIFxcdHJldHVybiByYztcXG4rXFxuK3B1dF9jaGlsZDpcXG4rXFx0b2Zfbm9kZV9wdXQoY2hpbGQpO1xcbitcXHRnb3RvIG91dF9jaGFuZ2U7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChfX29mX21kaW9idXNfcmVnaXN0ZXIpO1xcbiBcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX09GX0RZTkFNSUMpXFxuK3N0YXRpYyBib29sIG9mX21kaW9idXNfbm9kZV9pc19hdmFpbGFibGUoc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxcbit7XFxuK1xcdHJldHVybiAhb2Zfbm9kZV9jaGVja19mbGFnKG5vZGUsIE9GX0RFVEFDSEVEKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShub2RlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvZl9tZGlvYnVzX2FkZF9ub2RlKHN0cnVjdCBtaWlfYnVzICptZGlvLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7XFxuK1xcdGludCBhZGRyLCByYywgcmV0ID0gMDtcXG4rXFxuK1xcdGlmICghb2ZfbWRpb2J1c19ub2RlX2lzX2F2YWlsYWJsZShub2RlKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAob2Zfbm9kZV9uYW1lX2VxKG5vZGUsIFxcXCJldGhlcm5ldC1waHktcGFja2FnZVxcXCIpKSB7XFxuK1xcdFxcdGlmICghb2ZfcHJvcGVydHlfcHJlc2VudChub2RlLCBcXFwicmVnXFxcIikpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0XFx0Zm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGUobm9kZSwgY2hpbGQpIHtcXG4rXFx0XFx0XFx0cmMgPSBvZl9tZGlvYnVzX2FkZF9ub2RlKG1kaW8sIGNoaWxkKTtcXG4rXFx0XFx0XFx0aWYgKHJjIFxcdTAwMjZcXHUwMDI2IHJjICE9IC1FTk9ERVYgXFx1MDAyNlxcdTAwMjYgIXJldClcXG4rXFx0XFx0XFx0XFx0cmV0ID0gcmM7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGFkZHIgPSBvZl9tZGlvX3BhcnNlX2FkZHIoXFx1MDAyNm1kaW8tXFx1MDAzZWRldiwgbm9kZSk7XFxuK1xcdGlmIChhZGRyIFxcdTAwM2MgMClcXG4rXFx0XFx0cmMgPSBvZl9tZGlvYnVzX3NjYW5fcGh5KG1kaW8sIG5vZGUpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9jaGlsZChtZGlvLCBub2RlLCBhZGRyKTtcXG4rXFxuK1xcdGlmIChyYyA9PSAtRU5PREVWIFxcdTAwMjZcXHUwMDI2IGFkZHIgXFx1MDAzZT0gMClcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2bWRpby1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiTURJTyBkZXZpY2UgYXQgYWRkcmVzcyAlZCBpcyBtaXNzaW5nLlxcXFxuXFxcIiwgYWRkcik7XFxuK1xcbitcXHRyZXR1cm4gcmM7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIG9mX21kaW9idXNfbm9kZV9pc19idXN5KHN0cnVjdCBtaWlfYnVzICptZGlvLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxcbit7XFxuK1xcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldjtcXG4rXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcXG4rXFx0Ym9vbCBidXN5ID0gZmFsc2U7XFxuK1xcbitcXHRpZiAob2Zfbm9kZV9uYW1lX2VxKG5vZGUsIFxcXCJldGhlcm5ldC1waHktcGFja2FnZVxcXCIpKSB7XFxuK1xcdFxcdGZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKG5vZGUsIGNoaWxkKSB7XFxuK1xcdFxcdFxcdGlmIChvZl9tZGlvYnVzX25vZGVfaXNfYnVzeShtZGlvLCBjaGlsZCkpXFxuK1xcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghb2Zfbm9kZV9jaGVja19mbGFnKG5vZGUsIE9GX1BPUFVMQVRFRCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdG1kaW9kZXYgPSBvZl9tZGlvX2ZpbmRfZGV2aWNlKG5vZGUpO1xcbitcXHRpZiAoIW1kaW9kZXYpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAobWRpb2Rldi1cXHUwMDNlYnVzICE9IG1kaW8pIHtcXG4rXFx0XFx0cHV0X2RldmljZShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZtZGlvLVxcdTAwM2VtZGlvX21hcF9sb2NrKTtcXG4rXFx0YnVzeSA9IG1kaW8tXFx1MDAzZW1kaW9fbWFwW21kaW9kZXYtXFx1MDAzZWFkZHJdICE9IG1kaW9kZXYgfHxcXG4rXFx0ICAgICAgIChtZGlvLVxcdTAwM2VtZGlvX21hcF9wZW5kaW5nIFxcdTAwMjYgQklUKG1kaW9kZXYtXFx1MDAzZWFkZHIpKTtcXG4rXFx0aWYgKG1kaW9kZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTURJT19ERVZJQ0VfRkxBR19QSFkpIHtcXG4rXFx0XFx0cGh5ZGV2ID0gdG9fcGh5X2RldmljZShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0aWYgKHBoeWRldi1cXHUwMDNlYXR0YWNoZWQpIHtcXG4rXFx0XFx0XFx0YnVzeSA9IHRydWU7XFxuK1xcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdCBcXFwiY2Fubm90IHJlbW92ZSBhbiBhdHRhY2hlZCBQSFk7IHJlbW92ZSBpdHMgY29uc3VtZXIgZmlyc3RcXFxcblxcXCIpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGlvLVxcdTAwM2VtZGlvX21hcF9sb2NrKTtcXG4rXFx0cHV0X2RldmljZShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG4rXFxuK1xcdHJldHVybiBidXN5O1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpcXG4rb2ZfbWRpb2J1c19nZXRfcmVtb3ZhbF9zY29wZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQ7XFxuK1xcbitcXHRpZiAob2Zfbm9kZV9uYW1lX2VxKG5vZGUsIFxcXCJldGhlcm5ldC1waHktcGFja2FnZVxcXCIpKVxcbitcXHRcXHRyZXR1cm4gb2Zfbm9kZV9nZXQobm9kZSk7XFxuK1xcbitcXHRwYXJlbnQgPSBvZl9nZXRfcGFyZW50KG5vZGUpO1xcbitcXHRpZiAob2Zfbm9kZV9uYW1lX2VxKHBhcmVudCwgXFxcImV0aGVybmV0LXBoeS1wYWNrYWdlXFxcIikpXFxuK1xcdFxcdHJldHVybiBwYXJlbnQ7XFxuK1xcbitcXHRvZl9ub2RlX3B1dChwYXJlbnQpO1xcbitcXHRyZXR1cm4gb2Zfbm9kZV9nZXQobm9kZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb2ZfbWRpb2J1c19yZW1vdmVfbm9kZShzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXFxuK3tcXG4rXFx0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2O1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKG9mX25vZGVfbmFtZV9lcShub2RlLCBcXFwiZXRoZXJuZXQtcGh5LXBhY2thZ2VcXFwiKSkge1xcbitcXHRcXHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKG5vZGUsIGNoaWxkKSB7XFxuK1xcdFxcdFxcdHJldCA9IG9mX21kaW9idXNfcmVtb3ZlX25vZGUobWRpbywgY2hpbGQpO1xcbitcXHRcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdFxcdG9mX25vZGVfcHV0KGNoaWxkKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIW9mX25vZGVfY2hlY2tfZmxhZyhub2RlLCBPRl9QT1BVTEFURUQpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIFRoZSBPRiBub2RlIGxvb2t1cCBhbHNvIGNvdmVycyBQSFlzIGZvdW5kIGJ5IGFkZHJlc3Mgc2Nhbm5pbmcuICovXFxuK1xcdG1kaW9kZXYgPSBvZl9tZGlvX2ZpbmRfZGV2aWNlKG5vZGUpO1xcbitcXHRpZiAoIW1kaW9kZXYpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdGlmIChtZGlvZGV2LVxcdTAwM2VidXMgIT0gbWRpbykge1xcbitcXHRcXHRwdXRfZGV2aWNlKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYpO1xcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gbWRpb2Rldi1cXHUwMDNlZGV2aWNlX3JlbW92ZV9keW5hbWljKG1kaW9kZXYpO1xcbitcXHRpZiAoIXJldClcXG4rXFx0XFx0bWRpb2Rldi1cXHUwMDNlZGV2aWNlX2ZyZWUobWRpb2Rldik7XFxuK1xcdHB1dF9kZXZpY2UoXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldik7XFxuK1xcbitcXHRyZXR1cm4gcmV0ID09IC1FTk9ERVYgPyAwIDogcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IG1paV9idXMgKm9mX21kaW9idXNfZmluZF9wYXJlbnQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50LCAqYnVzX25vZGU7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICptZGlvO1xcbitcXG4rXFx0cGFyZW50ID0gb2ZfZ2V0X3BhcmVudChub2RlKTtcXG4rXFx0aWYgKCFwYXJlbnQpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0aWYgKG9mX25vZGVfbmFtZV9lcShwYXJlbnQsIFxcXCJldGhlcm5ldC1waHktcGFja2FnZVxcXCIpKSB7XFxuK1xcdFxcdGlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShwYXJlbnQpIHx8XFxuK1xcdFxcdCAgICAhb2ZfcHJvcGVydHlfcHJlc2VudChwYXJlbnQsIFxcXCJyZWdcXFwiKSkge1xcbitcXHRcXHRcXHRvZl9ub2RlX3B1dChwYXJlbnQpO1xcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0YnVzX25vZGUgPSBvZl9nZXRfcGFyZW50KHBhcmVudCk7XFxuK1xcdFxcdG9mX25vZGVfcHV0KHBhcmVudCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGJ1c19ub2RlID0gcGFyZW50O1xcbitcXHR9XFxuK1xcbitcXHRtZGlvID0gb2ZfbWRpb19maW5kX2J1cyhidXNfbm9kZSk7XFxuK1xcdG9mX25vZGVfcHV0KGJ1c19ub2RlKTtcXG4rXFxuK1xcdHJldHVybiBtZGlvO1xcbit9XFxuK1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfT0ZfT1ZFUkxBWSlcXG4rLyogT3ZlcmxheSBlbnRyeSBub3RpZmllciBlcnJvcnMgY2Fubm90IHN0b3AgcmVtb3ZhbCBhZnRlciB0aGUgdHJlZSBjaGFuZ2VkLiAqL1xcbitzdGF0aWMgYm9vbCBvZl9tZGlvYnVzX2xpdmVfbm9kZV9pc19idXN5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnNjb3BlO1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqbWRpbztcXG4rXFx0Ym9vbCBidXN5ID0gdHJ1ZTtcXG4rXFxuK1xcdHNjb3BlID0gb2ZfbWRpb2J1c19nZXRfcmVtb3ZhbF9zY29wZShub2RlKTtcXG4rXFx0bWRpbyA9IG9mX21kaW9idXNfZmluZF9wYXJlbnQoc2NvcGUpO1xcbitcXHRpZiAoIW1kaW8pXFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9zY29wZTtcXG4rXFxuK1xcdGlmICghbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKG1kaW8sIHRydWUpKSB7XFxuK1xcdFxcdGJ1c3kgPSBvZl9tZGlvYnVzX25vZGVfaXNfYnVzeShtZGlvLCBzY29wZSk7XFxuK1xcdFxcdG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmQobWRpbywgdHJ1ZSk7XFxuK1xcdH1cXG4rXFx0cHV0X2RldmljZShcXHUwMDI2bWRpby1cXHUwMDNlZGV2KTtcXG4rXFxuK291dF9wdXRfc2NvcGU6XFxuK1xcdG9mX25vZGVfcHV0KHNjb3BlKTtcXG4rXFx0cmV0dXJuIGJ1c3k7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKlxcbitvZl9tZGlvYnVzX292ZXJsYXlfdGFyZ2V0X2NoaWxkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqdGFyZ2V0LFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm92ZXJsYXlfY2hpbGQpXFxuK3tcXG4rXFx0Y29uc3QgY2hhciAqbmFtZSA9IGtiYXNlbmFtZShvdmVybGF5X2NoaWxkLVxcdTAwM2VmdWxsX25hbWUpO1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkO1xcbitcXG4rXFx0Zm9yX2VhY2hfY2hpbGRfb2Zfbm9kZSh0YXJnZXQsIGNoaWxkKSB7XFxuK1xcdFxcdGlmICghb2Zfbm9kZV9jbXAoa2Jhc2VuYW1lKGNoaWxkLVxcdTAwM2VmdWxsX25hbWUpLCBuYW1lKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGNoaWxkO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgb2ZfbWRpb2J1c19vdmVybGF5X25vZGVfaXNfYnVzeShzdHJ1Y3QgZGV2aWNlX25vZGUgKm92ZXJsYXksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnRhcmdldCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGJvb2wgYWRkZWQpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpvdmVybGF5X2NoaWxkLCAqdGFyZ2V0X2NoaWxkO1xcbitcXHRib29sIGJ1c3ksIGNoaWxkX2FkZGVkO1xcbitcXG4rXFx0aWYgKChhZGRlZCB8fCBvZl9wcm9wZXJ0eV9wcmVzZW50KG92ZXJsYXksIFxcXCJzdGF0dXNcXFwiKSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIG9mX21kaW9idXNfbGl2ZV9ub2RlX2lzX2J1c3kodGFyZ2V0KSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKG92ZXJsYXksIG92ZXJsYXlfY2hpbGQpIHtcXG4rXFx0XFx0dGFyZ2V0X2NoaWxkID0gb2ZfbWRpb2J1c19vdmVybGF5X3RhcmdldF9jaGlsZCh0YXJnZXQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBvdmVybGF5X2NoaWxkKTtcXG4rXFx0XFx0aWYgKCF0YXJnZXRfY2hpbGQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0Y2hpbGRfYWRkZWQgPSBvZl9ub2RlX2NoZWNrX2ZsYWcodGFyZ2V0X2NoaWxkLCBPRl9PVkVSTEFZKTtcXG4rXFx0XFx0YnVzeSA9IG9mX21kaW9idXNfb3ZlcmxheV9ub2RlX2lzX2J1c3kob3ZlcmxheV9jaGlsZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHRhcmdldF9jaGlsZCwgY2hpbGRfYWRkZWQpO1xcbitcXHRcXHRvZl9ub2RlX3B1dCh0YXJnZXRfY2hpbGQpO1xcbitcXHRcXHRpZiAoYnVzeSkge1xcbitcXHRcXHRcXHRvZl9ub2RlX3B1dChvdmVybGF5X2NoaWxkKTtcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG9mX21kaW9idXNfb3ZlcmxheV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4rXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqYXJnKVxcbit7XFxuK1xcdHN0cnVjdCBvZl9vdmVybGF5X25vdGlmeV9kYXRhICpuZCA9IGFyZztcXG4rXFx0Ym9vbCBidXN5O1xcbitcXG4rXFx0aWYgKGFjdGlvbiAhPSBPRl9PVkVSTEFZX1BSRV9SRU1PVkUpXFxuK1xcdFxcdHJldHVybiBOT1RJRllfT0s7XFxuK1xcbitcXHRvZl9tZGlvX3JlY29uZmlnX2xvY2soKTtcXG4rXFx0YnVzeSA9IG9mX21kaW9idXNfb3ZlcmxheV9ub2RlX2lzX2J1c3kobmQtXFx1MDAzZW92ZXJsYXksIG5kLVxcdTAwM2V0YXJnZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBmYWxzZSk7XFxuK1xcdG9mX21kaW9fcmVjb25maWdfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gYnVzeSA/IG5vdGlmaWVyX2Zyb21fZXJybm8oLUVCVVNZKSA6IE5PVElGWV9PSztcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBvZl9tZGlvX292ZXJsYXlfbm90aWZpZXIgPSB7XFxuK1xcdC5ub3RpZmllcl9jYWxsID0gb2ZfbWRpb2J1c19vdmVybGF5X25vdGlmeSxcXG4rfTtcXG4rI2VuZGlmXFxuK1xcbitzdGF0aWMgaW50IG9mX21kaW9idXNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLFxcbitcXHRcXHRcXHQgICAgIHZvaWQgKmFyZylcXG4re1xcbitcXHRzdHJ1Y3Qgb2ZfcmVjb25maWdfZGF0YSAqcmQgPSBhcmc7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqc2NvcGU7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICptZGlvO1xcbitcXHRlbnVtIG9mX3JlY29uZmlnX2NoYW5nZSBjaGFuZ2U7XFxuK1xcdGJvb2wgcmVtb3Zpbmc7XFxuK1xcdGludCByYywgcmV0ID0gTk9USUZZX09LO1xcbitcXG4rXFx0b2ZfbWRpb19yZWNvbmZpZ19sb2NrKCk7XFxuK1xcdGNoYW5nZSA9IG9mX3JlY29uZmlnX2dldF9zdGF0ZV9jaGFuZ2UoYWN0aW9uLCByZCk7XFxuK1xcdHN3aXRjaCAoY2hhbmdlKSB7XFxuK1xcdGNhc2UgT0ZfUkVDT05GSUdfQ0hBTkdFX0FERDpcXG4rXFx0XFx0LyogQSBuZXdlciBjaGFuZ2UgbWF5IGhhdmUgbWFkZSB0aGlzIG5vdGlmaWNhdGlvbiBzdGFsZS4gKi9cXG4rXFx0XFx0aWYgKCFvZl9tZGlvYnVzX25vZGVfaXNfYXZhaWxhYmxlKHJkLVxcdTAwM2VkbikpXFxuK1xcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFx0XFx0cmVtb3ZpbmcgPSBmYWxzZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgT0ZfUkVDT05GSUdfQ0hBTkdFX1JFTU9WRTpcXG4rXFx0XFx0LyogQSBuZXdlciBjaGFuZ2UgbWF5IGhhdmUgbWFkZSB0aGlzIG5vdGlmaWNhdGlvbiBzdGFsZS4gKi9cXG4rXFx0XFx0aWYgKG9mX21kaW9idXNfbm9kZV9pc19hdmFpbGFibGUocmQtXFx1MDAzZWRuKSlcXG4rXFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHRcXHRyZW1vdmluZyA9IHRydWU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdG1kaW8gPSBvZl9tZGlvYnVzX2ZpbmRfcGFyZW50KHJkLVxcdTAwM2Vkbik7XFxuK1xcdGlmICghbWRpbylcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXG4rXFx0cmMgPSBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4obWRpbywgcmVtb3ZpbmcpO1xcbitcXHRpZiAocmMpIHtcXG4rXFx0XFx0aWYgKCFyZW1vdmluZylcXG4rXFx0XFx0XFx0cmV0ID0gbm90aWZpZXJfZnJvbV9lcnJubygtRVBST0JFX0RFRkVSKTtcXG4rXFx0XFx0Z290byBvdXRfcHV0X21kaW87XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghcmVtb3ZpbmcpIHtcXG4rXFx0XFx0cmMgPSBvZl9tZGlvYnVzX2FkZF9ub2RlKG1kaW8sIHJkLVxcdTAwM2Vkbik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIFRoZSBub2RlIG1heSBhbHJlYWR5IGJlIGRldGFjaGVkIGZyb20gaXRzIHBhcmVudCBoaWVyYXJjaHkuICovXFxuK1xcdFxcdHNjb3BlID0gb2ZfbWRpb2J1c19nZXRfcmVtb3ZhbF9zY29wZShyZC1cXHUwMDNlZG4pO1xcbitcXHRcXHRpZiAob2ZfbWRpb2J1c19ub2RlX2lzX2J1c3kobWRpbywgc2NvcGUpKVxcbitcXHRcXHRcXHRyYyA9IC1FQlVTWTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRyYyA9IG9mX21kaW9idXNfcmVtb3ZlX25vZGUobWRpbywgcmQtXFx1MDAzZWRuKTtcXG4rXFx0XFx0b2Zfbm9kZV9wdXQoc2NvcGUpO1xcbitcXHR9XFxuK1xcbitcXHRtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kKG1kaW8sIHJlbW92aW5nKTtcXG4rXFx0aWYgKHJjIFxcdTAwMjZcXHUwMDI2IChyZW1vdmluZyB8fCByYyAhPSAtRU5PREVWKSlcXG4rXFx0XFx0cmV0ID0gbm90aWZpZXJfZnJvbV9lcnJubyhyYyk7XFxuK1xcbitvdXRfcHV0X21kaW86XFxuK1xcdHB1dF9kZXZpY2UoXFx1MDAyNm1kaW8tXFx1MDAzZWRldik7XFxuK291dF91bmxvY2s6XFxuK1xcdG9mX21kaW9fcmVjb25maWdfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG9mX21kaW9fbm90aWZpZXIgPSB7XFxuK1xcdC5ub3RpZmllcl9jYWxsID0gb2ZfbWRpb2J1c19ub3RpZnksXFxuK307XFxuK1xcbitzdGF0aWMgaW50IF9faW5pdCBvZl9tZGlvX2luaXQodm9pZClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gb2ZfcmVjb25maWdfbm90aWZpZXJfcmVnaXN0ZXIoXFx1MDAyNm9mX21kaW9fbm90aWZpZXIpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX09GX09WRVJMQVkpXFxuK1xcdHJldCA9IG9mX292ZXJsYXlfbm90aWZpZXJfcmVnaXN0ZXIoXFx1MDAyNm9mX21kaW9fb3ZlcmxheV9ub3RpZmllcik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdG9mX3JlY29uZmlnX25vdGlmaWVyX3VucmVnaXN0ZXIoXFx1MDAyNm9mX21kaW9fbm90aWZpZXIpO1xcbisjZW5kaWZcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rbW9kdWxlX2luaXQob2ZfbWRpb19pbml0KTtcXG4rXFxuK3N0YXRpYyB2b2lkIF9fZXhpdCBvZl9tZGlvX2V4aXQodm9pZClcXG4re1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfT0ZfT1ZFUkxBWSlcXG4rXFx0b2Zfb3ZlcmxheV9ub3RpZmllcl91bnJlZ2lzdGVyKFxcdTAwMjZvZl9tZGlvX292ZXJsYXlfbm90aWZpZXIpO1xcbisjZW5kaWZcXG4rXFx0b2ZfcmVjb25maWdfbm90aWZpZXJfdW5yZWdpc3RlcihcXHUwMDI2b2ZfbWRpb19ub3RpZmllcik7XFxuK31cXG4rbW9kdWxlX2V4aXQob2ZfbWRpb19leGl0KTtcXG4rI2VuZGlmIC8qIENPTkZJR19PRl9EWU5BTUlDICovXFxuK1xcbiAvKipcXG4gICogb2ZfbWRpb19maW5kX2RldmljZSAtIEdpdmVuIGEgZGV2aWNlIHRyZWUgbm9kZSwgZmluZCB0aGUgbWRpb19kZXZpY2VcXG4gICogQG5wOiBwb2ludGVyIHRvIHRoZSBtZGlvX2RldmljZSdzIGRldmljZSB0cmVlIG5vZGVcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmMgYi9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuY1xcbmluZGV4IDAwZDBlNDE1OWU5YmIuLmY0NWM5MzZmZTVhYTkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuY1xcbkBAIC0zNCw3ICszNCw4IEBAIHN0YXRpYyBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9idXNfZmluZF9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXFxuIFxcdGlmIChXQVJOX09OQ0UoIWFkZHJfdmFsaWQsIFxcXCJhZGRyICVkIG91dCBvZiByYW5nZVxcXFxuXFxcIiwgYWRkcikpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4tXFx0cmV0dXJuIGJ1cy1cXHUwMDNlbWRpb19tYXBbYWRkcl07XFxuK1xcdC8qIFBhaXIgd2l0aCBtYXAgcHVibGljYXRpb24gaW4gbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2UoKS4gKi9cXG4rXFx0cmV0dXJuIHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBbYWRkcl0pO1xcbiB9XFxuIFxcbiBzdHJ1Y3QgcGh5X2RldmljZSAqbWRpb2J1c19nZXRfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyKVxcbkBAIC01NCw3ICs1NSwxNiBAQCBFWFBPUlRfU1lNQk9MKG1kaW9idXNfZ2V0X3BoeSk7XFxuIFxcbiBib29sIG1kaW9idXNfaXNfcmVnaXN0ZXJlZF9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXFxuIHtcXG4tXFx0cmV0dXJuIG1kaW9idXNfZmluZF9kZXZpY2UoYnVzLCBhZGRyKSAhPSBOVUxMO1xcbitcXHRib29sIGFkZHJfdmFsaWQgPSBhZGRyIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgYWRkciBcXHUwMDNjIEFSUkFZX1NJWkUoYnVzLVxcdTAwM2VtZGlvX21hcCk7XFxuK1xcdGJvb2wgcmVnaXN0ZXJlZDtcXG4rXFxuK1xcdGlmIChXQVJOX09OQ0UoIWFkZHJfdmFsaWQsIFxcXCJhZGRyICVkIG91dCBvZiByYW5nZVxcXFxuXFxcIiwgYWRkcikpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJlZ2lzdGVyZWQgPSBSRUFEX09OQ0UoYnVzLVxcdTAwM2VtZGlvX21hcFthZGRyXSkgfHxcXG4rXFx0XFx0ICAgICAoUkVBRF9PTkNFKGJ1cy1cXHUwMDNlbWRpb19tYXBfcGVuZGluZykgXFx1MDAyNiBCSVQoYWRkcikpO1xcbitcXG4rXFx0cmV0dXJuIHJlZ2lzdGVyZWQ7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChtZGlvYnVzX2lzX3JlZ2lzdGVyZWRfZGV2aWNlKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jIGIvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmNcXG5pbmRleCBjZTNhNjA3YTQwY2IwLi5kZjgwMTI1ZWVlYzQ1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmNcXG5AQCAtMzMwLDYgKzMzMCw5IEBAIHN0cnVjdCBtaWlfYnVzICptZGlvYnVzX2FsbG9jX3NpemUoc2l6ZV90IHNpemUpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4gXFx0YnVzLVxcdTAwM2VzdGF0ZSA9IE1ESU9CVVNfQUxMT0NBVEVEO1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbWFwX2xvY2spO1xcbitcXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbWFwX3dhaXQpO1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX21hcF9yZXRpcmVkKTtcXG4gXFx0aWYgKHNpemUpXFxuIFxcdFxcdGJ1cy1cXHUwMDNlcHJpdiA9ICh2b2lkICopYnVzICsgYWxpZ25lZF9zaXplO1xcbiBcXG5AQCAtMzU1LDEwICszNTgsOSBAQCBzdGF0aWMgaW50IG9mX21kaW9idXNfZmluZF9waHkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXFxuIFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbiB7XFxuIFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7XFxuK1xcdGludCBhZGRyLCByZXQ7XFxuIFxcbiBcXHRmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZShucCwgY2hpbGQpIHtcXG4tXFx0XFx0aW50IGFkZHI7XFxuLVxcbiBcXHRcXHRpZiAob2Zfbm9kZV9uYW1lX2VxKGNoaWxkLCBcXFwiZXRoZXJuZXQtcGh5LXBhY2thZ2VcXFwiKSkge1xcbiBcXHRcXHRcXHQvKiBWYWxpZGF0ZSBQSFkgcGFja2FnZSByZWcgcHJlc2VuY2UgKi9cXG4gXFx0XFx0XFx0aWYgKCFvZl9wcm9wZXJ0eV9wcmVzZW50KGNoaWxkLCBcXFwicmVnXFxcIikpIHtcXG5AQCAtMzY2LDEyICszNjgsMTMgQEAgc3RhdGljIGludCBvZl9tZGlvYnVzX2ZpbmRfcGh5KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LFxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0XFx0fVxcbiBcXG4tXFx0XFx0XFx0aWYgKCFvZl9tZGlvYnVzX2ZpbmRfcGh5KGRldiwgbWRpb2RldiwgY2hpbGQpKSB7XFxuK1xcdFxcdFxcdHJldCA9IG9mX21kaW9idXNfZmluZF9waHkoZGV2LCBtZGlvZGV2LCBjaGlsZCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgIT0gLUVOT0RFVikge1xcbiBcXHRcXHRcXHRcXHQvKiBUaGUgcmVmY291bnQgZm9yIHRoZSBQSFkgcGFja2FnZSB3aWxsIGJlXFxuIFxcdFxcdFxcdFxcdCAqIGluY3JlbWVudGVkIGxhdGVyIHdoZW4gUEhZIGpvaW4gdGhlIFBhY2thZ2UuXFxuIFxcdFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRcXHRvZl9ub2RlX3B1dChjaGlsZCk7XFxuLVxcdFxcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtMzgyLDYgKzM4NSwxMSBAQCBzdGF0aWMgaW50IG9mX21kaW9idXNfZmluZF9waHkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0aWYgKGFkZHIgPT0gbWRpb2Rldi1cXHUwMDNlYWRkcikge1xcbitcXHRcXHRcXHRpZiAob2Zfbm9kZV90ZXN0X2FuZF9zZXRfZmxhZyhjaGlsZCwgT0ZfUE9QVUxBVEVEKSkge1xcbitcXHRcXHRcXHRcXHRvZl9ub2RlX3B1dChjaGlsZCk7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdFxcdFxcdH1cXG4rXFxuIFxcdFxcdFxcdGRldmljZV9zZXRfbm9kZShkZXYsIG9mX2Z3bm9kZV9oYW5kbGUoY2hpbGQpKTtcXG4gXFx0XFx0XFx0LyogVGhlIHJlZmNvdW50IG9uIFxcXCJjaGlsZFxcXCIgaXMgcGFzc2VkIHRvIHRoZSBtZGlvXFxuIFxcdFxcdFxcdCAqIGRldmljZS4gRG8gX25vdF8gdXNlIG9mX25vZGVfcHV0KGNoaWxkKSBoZXJlLlxcbkBAIC0zOTMsMjIgKzQwMSwyNiBAQCBzdGF0aWMgaW50IG9mX21kaW9idXNfZmluZF9waHkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXFxuIFxcdHJldHVybiAtRU5PREVWO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBvZl9tZGlvYnVzX2xpbmtfbWRpb2RldihzdHJ1Y3QgbWlpX2J1cyAqYnVzLFxcbi1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbitzdGF0aWMgaW50IG9mX21kaW9idXNfbGlua19tZGlvZGV2KHN0cnVjdCBtaWlfYnVzICpidXMsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4ge1xcbiBcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2O1xcbiBcXG4gXFx0aWYgKGRldi1cXHUwMDNlb2Zfbm9kZSB8fCAhYnVzLVxcdTAwM2VkZXYub2Zfbm9kZSlcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdG9mX21kaW9idXNfZmluZF9waHkoZGV2LCBtZGlvZGV2LCBidXMtXFx1MDAzZWRldi5vZl9ub2RlKTtcXG4rXFx0cmV0dXJuIG9mX21kaW9idXNfZmluZF9waHkoZGV2LCBtZGlvZGV2LCBidXMtXFx1MDAzZWRldi5vZl9ub2RlKTtcXG4gfVxcbiAjZW5kaWZcXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgcGh5X2RldmljZSAqbWRpb2J1c19zY2FuKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGM0NSlcXG4rc3RhdGljIHN0cnVjdCBwaHlfZGV2aWNlICpfX21kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0IGJvb2wgYzQ1KVxcbiB7XFxuIFxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBFUlJfUFRSKC1FTk9ERVYpO1xcbiBcXHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlO1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfT0ZfTURJTylcXG4rXFx0Ym9vbCBvZl9ub2RlX3BvcHVsYXRlZCA9IGZhbHNlO1xcbisjZW5kaWZcXG4gXFx0Y2hhciBub2RlX25hbWVbMTZdO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG5AQCAtNDIwLDcgKzQzMiwxMiBAQCBzdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBjNDUpXFxuIFxcdC8qIEZvciBEVCwgc2VlIGlmIHRoZSBhdXRvLXByb2JlZCBwaHkgaGFzIGEgY29ycmVzcG9uZGluZyBjaGlsZFxcbiBcXHQgKiBpbiB0aGUgYnVzIG5vZGUsIGFuZCBzZXQgdGhlIG9mX25vZGUgcG9pbnRlciBpbiB0aGlzIGNhc2UuXFxuIFxcdCAqL1xcbi1cXHRvZl9tZGlvYnVzX2xpbmtfbWRpb2RldihidXMsIFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8pO1xcbitcXHRlcnIgPSBvZl9tZGlvYnVzX2xpbmtfbWRpb2RldihidXMsIFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8pO1xcbitcXHRpZiAoZXJyID09IC1FQlVTWSkge1xcbitcXHRcXHRwaHlfZGV2aWNlX2ZyZWUocGh5ZGV2KTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XFxuK1xcdH1cXG4rXFx0b2Zfbm9kZV9wb3B1bGF0ZWQgPSAhIXBoeWRldi1cXHUwMDNlbWRpby5kZXYub2Zfbm9kZTtcXG4gI2VuZGlmXFxuIFxcbiBcXHQvKiBTZWFyY2ggZm9yIGEgc3dub2RlIGZvciB0aGUgcGh5IGluIHRoZSBzd25vZGUgaGllcmFyY2h5IG9mIHRoZSBidXMuXFxuQEAgLTQzNyw2ICs0NTQsMTEgQEAgc3RhdGljIHN0cnVjdCBwaHlfZGV2aWNlICptZGlvYnVzX3NjYW4oc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgYzQ1KVxcbiBcXG4gXFx0ZXJyID0gcGh5X2RldmljZV9yZWdpc3RlcihwaHlkZXYpO1xcbiBcXHRpZiAoZXJyKSB7XFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19PRl9NRElPKVxcbitcXHRcXHRpZiAob2Zfbm9kZV9wb3B1bGF0ZWQpXFxuK1xcdFxcdFxcdG9mX25vZGVfY2xlYXJfZmxhZyhwaHlkZXYtXFx1MDAzZW1kaW8uZGV2Lm9mX25vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIE9GX1BPUFVMQVRFRCk7XFxuKyNlbmRpZlxcbiBcXHRcXHRwaHlfZGV2aWNlX2ZyZWUocGh5ZGV2KTtcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XFxuIFxcdH1cXG5AQCAtNDU4LDcgKzQ4MCwxNyBAQCBzdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBjNDUpXFxuICAqL1xcbiBzdHJ1Y3QgcGh5X2RldmljZSAqbWRpb2J1c19zY2FuX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcXG4ge1xcbi1cXHRyZXR1cm4gbWRpb2J1c19zY2FuKGJ1cywgYWRkciwgZmFsc2UpO1xcbitcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZXJyID0gbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKGJ1cywgZmFsc2UpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbitcXG4rXFx0cGh5ZGV2ID0gX19tZGlvYnVzX3NjYW4oYnVzLCBhZGRyLCBmYWxzZSk7XFxuK1xcdG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmQoYnVzLCBmYWxzZSk7XFxuK1xcbitcXHRyZXR1cm4gcGh5ZGV2O1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wobWRpb2J1c19zY2FuX2MyMik7XFxuIFxcbkBAIC00NzYsNyArNTA4LDcgQEAgRVhQT1JUX1NZTUJPTChtZGlvYnVzX3NjYW5fYzIyKTtcXG4gICovXFxuIHN0YXRpYyBzdHJ1Y3QgcGh5X2RldmljZSAqbWRpb2J1c19zY2FuX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcXG4ge1xcbi1cXHRyZXR1cm4gbWRpb2J1c19zY2FuKGJ1cywgYWRkciwgdHJ1ZSk7XFxuK1xcdHJldHVybiBfX21kaW9idXNfc2NhbihidXMsIGFkZHIsIHRydWUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IG1kaW9idXNfc2Nhbl9idXNfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMpXFxuQEAgLTQ4Nyw3ICs1MTksNyBAQCBzdGF0aWMgaW50IG1kaW9idXNfc2Nhbl9idXNfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMpXFxuIFxcdFxcdGlmICgoYnVzLVxcdTAwM2VwaHlfbWFzayBcXHUwMDI2IEJJVChpKSkgPT0gMCkge1xcbiBcXHRcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xcbiBcXG4tXFx0XFx0XFx0cGh5ZGV2ID0gbWRpb2J1c19zY2FuX2MyMihidXMsIGkpO1xcbitcXHRcXHRcXHRwaHlkZXYgPSBfX21kaW9idXNfc2NhbihidXMsIGksIGZhbHNlKTtcXG4gXFx0XFx0XFx0aWYgKElTX0VSUihwaHlkZXYpIFxcdTAwMjZcXHUwMDI2IChQVFJfRVJSKHBoeWRldikgIT0gLUVOT0RFVikpXFxuIFxcdFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHBoeWRldik7XFxuIFxcdFxcdH1cXG5AQCAtNTA0LDcgKzUzNiw3IEBAIHN0YXRpYyBpbnQgbWRpb2J1c19zY2FuX2J1c19jNDUoc3RydWN0IG1paV9idXMgKmJ1cylcXG4gXFx0XFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcXG4gXFxuIFxcdFxcdFxcdC8qIERvbid0IHNjYW4gQzQ1IGlmIHdlIGFscmVhZHkgaGF2ZSBhIEMyMiBkZXZpY2UgKi9cXG4tXFx0XFx0XFx0aWYgKGJ1cy1cXHUwMDNlbWRpb19tYXBbaV0pXFxuK1xcdFxcdFxcdGlmIChtZGlvYnVzX2lzX3JlZ2lzdGVyZWRfZGV2aWNlKGJ1cywgaSkpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0XFx0cGh5ZGV2ID0gbWRpb2J1c19zY2FuX2M0NShidXMsIGkpO1xcbkBAIC01MzYsNiArNTY4LDQ0IEBAIHN0YXRpYyBib29sIG1kaW9idXNfcHJldmVudF9jNDVfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG1kaW9idXNfc3RvcF9kZXZpY2VfY2hhbmdlcyhzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxcbit7XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuK1xcdGJ1cy1cXHUwMDNlc3RhdGUgPSBNRElPQlVTX1VOUkVHSVNURVJJTkc7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX21hcF9sb2NrKTtcXG4rXFxuK1xcdHdhaXRfZXZlbnQoYnVzLVxcdTAwM2VtZGlvX21hcF93YWl0LCAhUkVBRF9PTkNFKGJ1cy1cXHUwMDNlbWRpb19tYXBfb3BzKSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1kaW9idXNfcmVtb3ZlX2RldmljZXMoc3RydWN0IG1paV9idXMgKmJ1cylcXG4re1xcbitcXHRMSVNUX0hFQUQocmVtb3ZlZCk7XFxuK1xcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgKm5leHQ7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFBIWV9NQVhfQUREUjsgaSsrKSB7XFxuK1xcdFxcdG1kaW9kZXYgPSBidXMtXFx1MDAzZW1kaW9fbWFwW2ldO1xcbitcXHRcXHRpZiAoIW1kaW9kZXYpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0bWRpb2Rldi1cXHUwMDNlZGV2aWNlX3JlbW92ZShtZGlvZGV2KTtcXG4rXFx0XFx0bWRpb2Rldi1cXHUwMDNlZGV2aWNlX2ZyZWUobWRpb2Rldik7XFxuK1xcdH1cXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuK1xcdGxpc3Rfc3BsaWNlX2luaXQoXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfcmV0aXJlZCwgXFx1MDAyNnJlbW92ZWQpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobWRpb2RldiwgbmV4dCwgXFx1MDAyNnJlbW92ZWQsIHJldGlyZWRfbm9kZSkge1xcbitcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VyZXRpcmVkX25vZGUpO1xcbitcXHRcXHRtZGlvX2RldmljZV9wdXQobWRpb2Rldik7XFxuK1xcdH1cXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuK1xcdGJ1cy1cXHUwMDNlc3RhdGUgPSBNRElPQlVTX1VOUkVHSVNURVJFRDtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbWFwX2xvY2spO1xcbit9XFxuK1xcbiAvKipcXG4gICogX19tZGlvYnVzX3JlZ2lzdGVyIC0gYnJpbmcgdXAgYWxsIHRoZSBQSFlzIG9uIGEgZ2l2ZW4gYnVzIGFuZCBhdHRhY2ggdGhlbSB0byBidXNcXG4gICogQGJ1czogdGFyZ2V0IG1paV9idXNcXG5AQCAtNTUyLDEwICs2MjIsOSBAQCBzdGF0aWMgYm9vbCBtZGlvYnVzX3ByZXZlbnRfYzQ1X3NjYW4oc3RydWN0IG1paV9idXMgKmJ1cylcXG4gICovXFxuIGludCBfX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cywgc3RydWN0IG1vZHVsZSAqb3duZXIpXFxuIHtcXG4tXFx0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2O1xcbiBcXHRzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvZDtcXG4gXFx0Ym9vbCBwcmV2ZW50X2M0NV9zY2FuO1xcbi1cXHRpbnQgaSwgZXJyO1xcbitcXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWYgKCFidXMgfHwgIWJ1cy1cXHUwMDNlbmFtZSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTU5Niw3ICs2NjUsOSBAQCBpbnQgX19tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICpidXMsIHN0cnVjdCBtb2R1bGUgKm93bmVyKVxcbiBcXHQgKlxcbiBcXHQgKiBTdGF0ZSB3aWxsIGJlIHVwZGF0ZWQgbGF0ZXIgaW4gdGhpcyBmdW5jdGlvbiBpbiBjYXNlIG9mIHN1Y2Nlc3NcXG4gXFx0ICovXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuIFxcdGJ1cy1cXHUwMDNlc3RhdGUgPSBNRElPQlVTX1VOUkVHSVNURVJFRDtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbWFwX2xvY2spO1xcbiBcXG4gXFx0ZXJyID0gZGV2aWNlX3JlZ2lzdGVyKFxcdTAwMjZidXMtXFx1MDAzZWRldik7XFxuIFxcdGlmIChlcnIpIHtcXG5AQCAtNjEzLDggKzY4NCw3IEBAIGludCBfX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cywgc3RydWN0IG1vZHVsZSAqb3duZXIpXFxuIFxcdFxcdGVyciA9IGRldl9lcnJfcHJvYmUoXFx1MDAyNmJ1cy1cXHUwMDNlZGV2LCBQVFJfRVJSKGdwaW9kKSxcXG4gXFx0XFx0XFx0XFx0ICAgIFxcXCJtaWlfYnVzICVzIGNvdWxkbid0IGdldCByZXNldCBHUElPXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgICAgYnVzLVxcdTAwM2VpZCk7XFxuLVxcdFxcdGRldmljZV9kZWwoXFx1MDAyNmJ1cy1cXHUwMDNlZGV2KTtcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0Z290byBlcnJvcl9yZXNldF9ncGlvZDtcXG4gXFx0fSBlbHNlXFx0aWYgKGdwaW9kKSB7XFxuIFxcdFxcdGJ1cy1cXHUwMDNlcmVzZXRfZ3Bpb2QgPSBncGlvZDtcXG4gXFx0XFx0ZnNsZWVwKGJ1cy1cXHUwMDNlcmVzZXRfZGVsYXlfdXMpO1xcbkBAIC02MjksNiArNjk5LDEwIEBAIGludCBfX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cywgc3RydWN0IG1vZHVsZSAqb3duZXIpXFxuIFxcdFxcdFxcdGdvdG8gZXJyb3JfcmVzZXRfZ3Bpb2Q7XFxuIFxcdH1cXG4gXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuK1xcdGJ1cy1cXHUwMDNlc3RhdGUgPSBNRElPQlVTX1JFR0lTVEVSSU5HO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuK1xcbiBcXHRpZiAoYnVzLVxcdTAwM2VyZWFkKSB7XFxuIFxcdFxcdGVyciA9IG1kaW9idXNfc2Nhbl9idXNfYzIyKGJ1cyk7XFxuIFxcdFxcdGlmIChlcnIpXFxuQEAgLTY0MywyMCArNzE3LDE3IEBAIGludCBfX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cywgc3RydWN0IG1vZHVsZSAqb3duZXIpXFxuIFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIFxcdH1cXG4gXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuIFxcdGJ1cy1cXHUwMDNlc3RhdGUgPSBNRElPQlVTX1JFR0lTVEVSRUQ7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX21hcF9sb2NrKTtcXG4gXFx0ZGV2X2RiZyhcXHUwMDI2YnVzLVxcdTAwM2VkZXYsIFxcXCJwcm9iZWRcXFxcblxcXCIpO1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIGVycm9yOlxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUEhZX01BWF9BRERSOyBpKyspIHtcXG4tXFx0XFx0bWRpb2RldiA9IGJ1cy1cXHUwMDNlbWRpb19tYXBbaV07XFxuLVxcdFxcdGlmICghbWRpb2RldilcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcbi1cXHRcXHRtZGlvZGV2LVxcdTAwM2VkZXZpY2VfcmVtb3ZlKG1kaW9kZXYpO1xcbi1cXHRcXHRtZGlvZGV2LVxcdTAwM2VkZXZpY2VfZnJlZShtZGlvZGV2KTtcXG4tXFx0fVxcbiBlcnJvcl9yZXNldF9ncGlvZDpcXG4rXFx0bWRpb2J1c19zdG9wX2RldmljZV9jaGFuZ2VzKGJ1cyk7XFxuK1xcdG1kaW9idXNfcmVtb3ZlX2RldmljZXMoYnVzKTtcXG4rXFxuIFxcdC8qIFB1dCBQSFlzIGluIFJFU0VUIHRvIHNhdmUgcG93ZXIgKi9cXG4gXFx0aWYgKGJ1cy1cXHUwMDNlcmVzZXRfZ3Bpb2QpXFxuIFxcdFxcdGdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChidXMtXFx1MDAzZXJlc2V0X2dwaW9kLCAxKTtcXG5AQCAtNjY4LDIxICs3MzksMTEgQEAgRVhQT1JUX1NZTUJPTChfX21kaW9idXNfcmVnaXN0ZXIpO1xcbiBcXG4gdm9pZCBtZGlvYnVzX3VucmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cylcXG4ge1xcbi1cXHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XFxuLVxcdGludCBpO1xcbi1cXG4gXFx0aWYgKFdBUk5fT05fT05DRShidXMtXFx1MDAzZXN0YXRlICE9IE1ESU9CVVNfUkVHSVNURVJFRCkpXFxuIFxcdFxcdHJldHVybjtcXG4tXFx0YnVzLVxcdTAwM2VzdGF0ZSA9IE1ESU9CVVNfVU5SRUdJU1RFUkVEO1xcbi1cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFBIWV9NQVhfQUREUjsgaSsrKSB7XFxuLVxcdFxcdG1kaW9kZXYgPSBidXMtXFx1MDAzZW1kaW9fbWFwW2ldO1xcbi1cXHRcXHRpZiAoIW1kaW9kZXYpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0bWRpb2Rldi1cXHUwMDNlZGV2aWNlX3JlbW92ZShtZGlvZGV2KTtcXG4tXFx0XFx0bWRpb2Rldi1cXHUwMDNlZGV2aWNlX2ZyZWUobWRpb2Rldik7XFxuLVxcdH1cXG4rXFx0bWRpb2J1c19zdG9wX2RldmljZV9jaGFuZ2VzKGJ1cyk7XFxuK1xcdG1kaW9idXNfcmVtb3ZlX2RldmljZXMoYnVzKTtcXG4gXFxuIFxcdC8qIFB1dCBQSFlzIGluIFJFU0VUIHRvIHNhdmUgcG93ZXIgKi9cXG4gXFx0aWYgKGJ1cy1cXHUwMDNlcmVzZXRfZ3Bpb2QpXFxuQEAgLTcwMiw4ICs3NjMsMTEgQEAgRVhQT1JUX1NZTUJPTChtZGlvYnVzX3VucmVnaXN0ZXIpO1xcbiAgKi9cXG4gdm9pZCBtZGlvYnVzX2ZyZWUoc3RydWN0IG1paV9idXMgKmJ1cylcXG4ge1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbWFwX2xvY2spO1xcbitcXG4gXFx0LyogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBlcnJvciBoYW5kbGluZyBpbiBkcml2ZXJzLiAqL1xcbiBcXHRpZiAoYnVzLVxcdTAwM2VzdGF0ZSA9PSBNRElPQlVTX0FMTE9DQVRFRCkge1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuIFxcdFxcdGtmcmVlKGJ1cyk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbkBAIC03MTEsNiArNzc1LDcgQEAgdm9pZCBtZGlvYnVzX2ZyZWUoc3RydWN0IG1paV9idXMgKmJ1cylcXG4gXFx0V0FSTihidXMtXFx1MDAzZXN0YXRlICE9IE1ESU9CVVNfVU5SRUdJU1RFUkVELFxcbiBcXHQgICAgIFxcXCIlczogbm90IGluIFVOUkVHSVNURVJFRCBzdGF0ZVxcXFxuXFxcIiwgYnVzLVxcdTAwM2VpZCk7XFxuIFxcdGJ1cy1cXHUwMDNlc3RhdGUgPSBNRElPQlVTX1JFTEVBU0VEO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuIFxcbiBcXHRwdXRfZGV2aWNlKFxcdTAwMjZidXMtXFx1MDAzZWRldik7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuY1xcbmluZGV4IDA2MTUxZjIwNzEzNDYuLjNiMTllODMxNWY2MTUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuY1xcbkBAIC0xNSw2ICsxNSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9taWkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVzZXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG5AQCAtMzMsMTIgKzM0LDE2IEBAXFxuIHN0YXRpYyBpbnQgbWRpb19kZXZpY2VfcmVnaXN0ZXJfcmVzZXQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCByZXNldF9jb250cm9sICpyZXNldDtcXG4rXFx0aW50IGVycjtcXG4gXFxuIFxcdC8qIERlYXNzZXJ0IHRoZSBvcHRpb25hbCByZXNldCBzaWduYWwgKi9cXG4gXFx0bWRpb2Rldi1cXHUwMDNlcmVzZXRfZ3BpbyA9IGdwaW9kX2dldF9vcHRpb25hbChcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgXFxcInJlc2V0XFxcIiwgR1BJT0RfT1VUX0xPVyk7XFxuLVxcdGlmIChJU19FUlIobWRpb2Rldi1cXHUwMDNlcmVzZXRfZ3BpbykpXFxuLVxcdFxcdHJldHVybiBQVFJfRVJSKG1kaW9kZXYtXFx1MDAzZXJlc2V0X2dwaW8pO1xcbitcXHRpZiAoSVNfRVJSKG1kaW9kZXYtXFx1MDAzZXJlc2V0X2dwaW8pKSB7XFxuK1xcdFxcdGVyciA9IFBUUl9FUlIobWRpb2Rldi1cXHUwMDNlcmVzZXRfZ3Bpbyk7XFxuK1xcdFxcdG1kaW9kZXYtXFx1MDAzZXJlc2V0X2dwaW8gPSBOVUxMO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAobWRpb2Rldi1cXHUwMDNlcmVzZXRfZ3BpbylcXG4gXFx0XFx0Z3Bpb2Rfc2V0X2NvbnN1bWVyX25hbWUobWRpb2Rldi1cXHUwMDNlcmVzZXRfZ3BpbywgXFxcIlBIWSByZXNldFxcXCIpO1xcbkBAIC0xMTYsNiArMTIxLDEzIEBAIHN0YXRpYyB2b2lkIG1kaW9fZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbiBcXHRrZnJlZSh0b19tZGlvX2RldmljZShkZXYpKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBfX21kaW9fZGV2aWNlX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgZHluYW1pYyk7XFxuK1xcbitzdGF0aWMgaW50IG1kaW9fZGV2aWNlX3JlbW92ZV9keW5hbWljKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4re1xcbitcXHRyZXR1cm4gX19tZGlvX2RldmljZV9yZW1vdmUobWRpb2RldiwgdHJ1ZSk7XFxuK31cXG4rXFxuIHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb19kZXZpY2VfY3JlYXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyKVxcbiB7XFxuIFxcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldjtcXG5AQCAtMTMwLDkgKzE0MiwxMSBAQCBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9fZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcXG4gXFx0bWRpb2Rldi1cXHUwMDNlZGV2LmJ1cyA9IFxcdTAwMjZtZGlvX2J1c190eXBlO1xcbiBcXHRtZGlvZGV2LVxcdTAwM2VkZXZpY2VfZnJlZSA9IG1kaW9fZGV2aWNlX2ZyZWU7XFxuIFxcdG1kaW9kZXYtXFx1MDAzZWRldmljZV9yZW1vdmUgPSBtZGlvX2RldmljZV9yZW1vdmU7XFxuK1xcdG1kaW9kZXYtXFx1MDAzZWRldmljZV9yZW1vdmVfZHluYW1pYyA9IG1kaW9fZGV2aWNlX3JlbW92ZV9keW5hbWljO1xcbiBcXHRtZGlvZGV2LVxcdTAwM2VidXMgPSBidXM7XFxuIFxcdG1kaW9kZXYtXFx1MDAzZWFkZHIgPSBhZGRyO1xcbiBcXHRtZGlvZGV2LVxcdTAwM2VyZXNldF9zdGF0ZSA9IC0xO1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bWRpb2Rldi1cXHUwMDNlcmV0aXJlZF9ub2RlKTtcXG4gXFxuIFxcdGRldl9zZXRfbmFtZShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2LCBQSFlfSURfRk1ULCBidXMtXFx1MDAzZWlkLCBhZGRyKTtcXG4gXFxuQEAgLTE1OSwxOSArMTczLDI3IEBAIGludCBtZGlvX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbiBcXHRlcnIgPSBkZXZpY2VfYWRkKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYpO1xcbi1cXHRpZiAoZXJyKSB7XFxuK1xcdGlmIChlcnIpXFxuIFxcdFxcdHByX2VycihcXFwiTURJTyAlZCBmYWlsZWQgdG8gYWRkXFxcXG5cXFwiLCBtZGlvZGV2LVxcdTAwM2VhZGRyKTtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiAwO1xcbiBcXG4tIG91dDpcXG4tXFx0bWRpb2J1c191bnJlZ2lzdGVyX2RldmljZShtZGlvZGV2KTtcXG4tXFx0cmV0dXJuIGVycjtcXG4rXFx0cmV0dXJuIG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUobWRpb2RldiwgZXJyKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKG1kaW9fZGV2aWNlX3JlZ2lzdGVyKTtcXG4gXFxuK3N0YXRpYyBpbnQgX19tZGlvX2RldmljZV9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIGR5bmFtaWMpXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGVyciA9IG1kaW9idXNfYmVnaW5fcmVtb3ZlKG1kaW9kZXYsIGR5bmFtaWMpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0ZGV2aWNlX2RlbChcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG4rXFx0bWRpb2J1c19maW5pc2hfcmVtb3ZlKG1kaW9kZXYsIGR5bmFtaWMpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBtZGlvX2RldmljZV9yZW1vdmUgLSBSZW1vdmUgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgbWRpbyBkZXZpY2UgZnJvbSB0aGVcXG4gICpcXHRcXHRcXHRNRElPIGJ1c1xcbkBAIC0xODMsNDIgKzIwNSwyMTEgQEAgRVhQT1JUX1NZTUJPTChtZGlvX2RldmljZV9yZWdpc3Rlcik7XFxuICAqL1xcbiB2b2lkIG1kaW9fZGV2aWNlX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuIHtcXG4tXFx0ZGV2aWNlX2RlbChcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG4tXFx0bWRpb2J1c191bnJlZ2lzdGVyX2RldmljZShtZGlvZGV2KTtcXG4rXFx0X19tZGlvX2RldmljZV9yZW1vdmUobWRpb2RldiwgZmFsc2UpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wobWRpb19kZXZpY2VfcmVtb3ZlKTtcXG4gXFxuIGludCBtZGlvYnVzX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuIHtcXG4rXFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IG1kaW9kZXYtXFx1MDAzZWJ1cztcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGlmIChtZGlvZGV2LVxcdTAwM2VidXMtXFx1MDAzZW1kaW9fbWFwW21kaW9kZXYtXFx1MDAzZWFkZHJdKVxcbi1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbWFwX2xvY2spO1xcbitcXHRpZiAoYnVzLVxcdTAwM2VzdGF0ZSAhPSBNRElPQlVTX1JFR0lTVEVSSU5HIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBidXMtXFx1MDAzZXN0YXRlICE9IE1ESU9CVVNfUkVHSVNURVJFRCkge1xcbitcXHRcXHRlcnIgPSAtRU5PREVWO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdH1cXG4rXFx0aWYgKGJ1cy1cXHUwMDNlbWRpb19tYXBfcmVtb3ZhbHMpIHtcXG4rXFx0XFx0ZXJyID0gLUVCVVNZO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChidXMtXFx1MDAzZW1kaW9fbWFwW21kaW9kZXYtXFx1MDAzZWFkZHJdIHx8XFxuK1xcdCAgICBidXMtXFx1MDAzZW1kaW9fbWFwX3BlbmRpbmcgXFx1MDAyNiBCSVQobWRpb2Rldi1cXHUwMDNlYWRkcikpIHtcXG4rXFx0XFx0ZXJyID0gLUVCVVNZO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdGJ1cy1cXHUwMDNlbWRpb19tYXBfcGVuZGluZyB8PSBCSVQobWRpb2Rldi1cXHUwMDNlYWRkcik7XFxuK1xcdGJ1cy1cXHUwMDNlbWRpb19tYXBfb3BzKys7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX21hcF9sb2NrKTtcXG4gXFxuIFxcdGlmIChtZGlvZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IE1ESU9fREVWSUNFX0ZMQUdfUEhZKSB7XFxuIFxcdFxcdGVyciA9IG1kaW9fZGV2aWNlX3JlZ2lzdGVyX3Jlc2V0KG1kaW9kZXYpO1xcbi1cXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUobWRpb2RldiwgZXJyKTtcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0LyogQXNzZXJ0IHRoZSByZXNldCBzaWduYWwgKi9cXG4gXFx0XFx0bWRpb19kZXZpY2VfcmVzZXQobWRpb2RldiwgMSk7XFxuIFxcdH1cXG4gXFxuLVxcdG1kaW9kZXYtXFx1MDAzZWJ1cy1cXHUwMDNlbWRpb19tYXBbbWRpb2Rldi1cXHUwMDNlYWRkcl0gPSBtZGlvZGV2O1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbWFwX2xvY2spO1xcbitcXHQvKiBUZWFyZG93biB3YWl0cyBmb3IgdGhpcyByZWdpc3RyYXRpb24gYmVmb3JlIGNvbnN1bWluZyB0aGUgbWFwLiAqL1xcbitcXHRzbXBfc3RvcmVfcmVsZWFzZShcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX21hcFttZGlvZGV2LVxcdTAwM2VhZGRyXSwgbWRpb2Rldik7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX21hcF9sb2NrKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rb3V0X3VubG9jazpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbWFwX2xvY2spO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1pbnQgbWRpb2J1c191bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuKy8qKlxcbisgKiBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4gLSBzdGFydCBjaGFuZ2luZyBkZXZpY2VzIG9uIGEgcmVnaXN0ZXJlZCBidXNcXG4rICogQGJ1czogTURJTyBidXMgdGhhdCB3aWxsIGJlIHNjYW5uZWQgb3IgY2hhbmdlZFxcbisgKiBAcmVtb3Zpbmc6IHdoZXRoZXIgUEhZIGF0dGFjaG1lbnQgbXVzdCBiZSBibG9ja2VkIGR1cmluZyB0aGUgY2hhbmdlXFxuKyAqXFxuKyAqIFJldHVybjogemVybyBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSB3aGVuIHRoZSBidXMgaXMgdW5hdmFpbGFibGVcXG4rICovXFxuK2ludCBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4oc3RydWN0IG1paV9idXMgKmJ1cywgYm9vbCByZW1vdmluZylcXG4ge1xcbi1cXHRpZiAobWRpb2Rldi1cXHUwMDNlYnVzLVxcdTAwM2VtZGlvX21hcFttZGlvZGV2LVxcdTAwM2VhZGRyXSAhPSBtZGlvZGV2KVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbWFwX2xvY2spO1xcbitcXHRpZiAoYnVzLVxcdTAwM2VzdGF0ZSAhPSBNRElPQlVTX1JFR0lTVEVSRUQpIHtcXG4rXFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0YnVzLVxcdTAwM2VtZGlvX21hcF9vcHMrKztcXG4rXFx0XFx0aWYgKHJlbW92aW5nKVxcbitcXHRcXHRcXHRidXMtXFx1MDAzZW1kaW9fbWFwX3JlbW92YWxzKys7XFxuK1xcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbWFwX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4pO1xcbiBcXG4tXFx0bWRpb19kZXZpY2VfdW5yZWdpc3Rlcl9yZXNldChtZGlvZGV2KTtcXG4rc3RhdGljIHZvaWQgbWRpb2J1c19vcGVyYXRpb25fZG9uZV9sb2NrZWQoc3RydWN0IG1paV9idXMgKmJ1cylcXG4re1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbWFwX2xvY2spO1xcbiBcXG4tXFx0bWRpb2Rldi1cXHUwMDNlYnVzLVxcdTAwM2VtZGlvX21hcFttZGlvZGV2LVxcdTAwM2VhZGRyXSA9IE5VTEw7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UoIWJ1cy1cXHUwMDNlbWRpb19tYXBfb3BzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRidXMtXFx1MDAzZW1kaW9fbWFwX29wcy0tO1xcbitcXHRpZiAoIWJ1cy1cXHUwMDNlbWRpb19tYXBfb3BzKVxcbitcXHRcXHR3YWtlX3VwX2FsbChcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX21hcF93YWl0KTtcXG4rfVxcbiBcXG4tXFx0cmV0dXJuIDA7XFxuKy8qKlxcbisgKiBtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kIC0gZmluaXNoIGNoYW5naW5nIGRldmljZXMgb24gYW4gTURJTyBidXNcXG4rICogQGJ1czogTURJTyBidXMgcHJldmlvdXNseSBwYXNzZWQgdG8gbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKClcXG4rICogQHJlbW92aW5nOiB2YWx1ZSBwYXNzZWQgdG8gbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKClcXG4rICovXFxuK3ZvaWQgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2VuZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBib29sIHJlbW92aW5nKVxcbit7XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuK1xcdGlmIChyZW1vdmluZykge1xcbitcXHRcXHRpZiAoIVdBUk5fT05fT05DRSghYnVzLVxcdTAwM2VtZGlvX21hcF9yZW1vdmFscykpXFxuK1xcdFxcdFxcdGJ1cy1cXHUwMDNlbWRpb19tYXBfcmVtb3ZhbHMtLTtcXG4rXFx0fVxcbitcXHRtZGlvYnVzX29wZXJhdGlvbl9kb25lX2xvY2tlZChidXMpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWRpb2J1c19kZXZpY2VfY2hhbmdlX2VuZCk7XFxuK1xcbitzdGF0aWMgdm9pZCBtZGlvYnVzX29wZXJhdGlvbl9kb25lKHN0cnVjdCBtaWlfYnVzICpidXMpXFxuK3tcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX21hcF9sb2NrKTtcXG4rXFx0bWRpb2J1c19vcGVyYXRpb25fZG9uZV9sb2NrZWQoYnVzKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbWFwX2xvY2spO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtZGlvYnVzX3VucHVibGlzaF9kZXZpY2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBtZGlvZGV2LVxcdTAwM2VidXM7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbWFwX2xvY2spO1xcbitcXG4rXFx0aWYgKGJ1cy1cXHUwMDNlbWRpb19tYXBbbWRpb2Rldi1cXHUwMDNlYWRkcl0gPT0gbWRpb2RldilcXG4rXFx0XFx0V1JJVEVfT05DRShidXMtXFx1MDAzZW1kaW9fbWFwW21kaW9kZXYtXFx1MDAzZWFkZHJdLCBOVUxMKTtcXG4rXFx0aWYgKG1kaW9kZXYtXFx1MDAzZWRldi5vZl9ub2RlKVxcbitcXHRcXHRvZl9ub2RlX2NsZWFyX2ZsYWcobWRpb2Rldi1cXHUwMDNlZGV2Lm9mX25vZGUsIE9GX1BPUFVMQVRFRCk7XFxuK31cXG4rXFxuK2ludCBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgaW50IGVycilcXG4re1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpb2Rldi1cXHUwMDNlYnVzO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX21hcF9sb2NrKTtcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghKGJ1cy1cXHUwMDNlbWRpb19tYXBfcGVuZGluZyBcXHUwMDI2IEJJVChtZGlvZGV2LVxcdTAwM2VhZGRyKSkpKVxcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRtZGlvYnVzX3VucHVibGlzaF9kZXZpY2UobWRpb2Rldik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0V0FSTl9PTl9PTkNFKGJ1cy1cXHUwMDNlbWRpb19tYXBbbWRpb2Rldi1cXHUwMDNlYWRkcl0gIT0gbWRpb2Rldik7XFxuK1xcbitcXHRidXMtXFx1MDAzZW1kaW9fbWFwX3BlbmRpbmcgXFx1MDAyNj0gfkJJVChtZGlvZGV2LVxcdTAwM2VhZGRyKTtcXG4rXFxuK291dF91bmxvY2s6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX21hcF9sb2NrKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRpZiAobWRpb2Rldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNRElPX0RFVklDRV9GTEFHX1BIWSkge1xcbitcXHRcXHRcXHRtZGlvX2RldmljZV9yZXNldChtZGlvZGV2LCAxKTtcXG4rXFx0XFx0XFx0bWRpb19kZXZpY2VfdW5yZWdpc3Rlcl9yZXNldChtZGlvZGV2KTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdG1kaW9idXNfb3BlcmF0aW9uX2RvbmUoYnVzKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK2ludCBtZGlvYnVzX2JlZ2luX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgZHluYW1pYylcXG4re1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpb2Rldi1cXHUwMDNlYnVzO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuK1xcdGlmIChkeW5hbWljIFxcdTAwMjZcXHUwMDI2IChidXMtXFx1MDAzZXN0YXRlID09IE1ESU9CVVNfVU5SRUdJU1RFUkVEIHx8XFxuK1xcdFxcdFxcdGJ1cy1cXHUwMDNlc3RhdGUgPT0gTURJT0JVU19SRUxFQVNFRCkpIHtcXG4rXFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHR9XFxuK1xcdGlmIChidXMtXFx1MDAzZW1kaW9fbWFwX3BlbmRpbmcgXFx1MDAyNiBCSVQobWRpb2Rldi1cXHUwMDNlYWRkcikpIHtcXG4rXFx0XFx0ZXJyID0gLUVCVVNZO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChidXMtXFx1MDAzZW1kaW9fbWFwW21kaW9kZXYtXFx1MDAzZWFkZHJdICE9IG1kaW9kZXYpIHtcXG4rXFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZHluYW1pYyBcXHUwMDI2XFx1MDAyNiBtZGlvZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IE1ESU9fREVWSUNFX0ZMQUdfUEhZIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICB0b19waHlfZGV2aWNlKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYpLVxcdTAwM2VhdHRhY2hlZCkge1xcbitcXHRcXHRlcnIgPSAtRUJVU1k7XFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFx0fVxcbitcXG4rXFx0bWRpb2J1c191bnB1Ymxpc2hfZGV2aWNlKG1kaW9kZXYpO1xcbitcXG4rXFx0aWYgKGR5bmFtaWMpIHtcXG4rXFx0XFx0bWRpb19kZXZpY2VfZ2V0KG1kaW9kZXYpO1xcbitcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VyZXRpcmVkX25vZGUsIFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbWFwX3JldGlyZWQpO1xcbitcXHR9XFxuK1xcbitvdXRfdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3ZvaWQgbWRpb2J1c19maW5pc2hfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKVxcbit7XFxuK1xcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGU7XFxuK1xcbitcXHRpZiAobWRpb2Rldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNRElPX0RFVklDRV9GTEFHX1BIWSlcXG4rXFx0XFx0bWRpb19kZXZpY2VfdW5yZWdpc3Rlcl9yZXNldChtZGlvZGV2KTtcXG4rXFxuK1xcdC8qIERvIG5vdCBrZWVwIGFuIG92ZXJsYXkgbm9kZSBhbGl2ZSB3aXRoIHRoZSByZXRpcmVkIGRldmljZS4gKi9cXG4rXFx0aWYgKGR5bmFtaWMpIHtcXG4rXFx0XFx0Zndub2RlID0gZGV2X2Z3bm9kZShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0ZGV2aWNlX3NldF9ub2RlKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYsIE5VTEwpO1xcbitcXHRcXHRmd25vZGVfaGFuZGxlX3B1dChmd25vZGUpO1xcbitcXHR9XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbmluZGV4IDk0YjJlODVlMDBhMzcuLjNiMTgyOTU3YzNkZTYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcXG5AQCAtMjI3LDYgKzIyNyw4IEBAIHN0YXRpYyB2b2lkIHBoeV9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdGtmcmVlKHRvX3BoeV9kZXZpY2UoZGV2KSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgX19waHlfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGR5bmFtaWMpO1xcbitcXG4gc3RhdGljIHZvaWQgcGh5X21kaW9fZGV2aWNlX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuIHtcXG4gXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcXG5AQCAtMjM1LDYgKzIzNywxNCBAQCBzdGF0aWMgdm9pZCBwaHlfbWRpb19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4gXFx0cGh5X2RldmljZV9yZW1vdmUocGh5ZGV2KTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBwaHlfbWRpb19kZXZpY2VfcmVtb3ZlX2R5bmFtaWMoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XFxuK1xcbitcXHRwaHlkZXYgPSBjb250YWluZXJfb2YobWRpb2Rldiwgc3RydWN0IHBoeV9kZXZpY2UsIG1kaW8pO1xcbitcXHRyZXR1cm4gX19waHlfZGV2aWNlX3JlbW92ZShwaHlkZXYsIHRydWUpO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZ2VucGh5X2RyaXZlcjtcXG4gXFxuIHN0YXRpYyBMSVNUX0hFQUQocGh5X2ZpeHVwX2xpc3QpO1xcbkBAIC03NjgsNyArNzc4LDkgQEAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCB1MzIgcGh5X2lkLFxcbiBcXHRtZGlvZGV2LVxcdTAwM2VmbGFncyA9IE1ESU9fREVWSUNFX0ZMQUdfUEhZO1xcbiBcXHRtZGlvZGV2LVxcdTAwM2VkZXZpY2VfZnJlZSA9IHBoeV9tZGlvX2RldmljZV9mcmVlO1xcbiBcXHRtZGlvZGV2LVxcdTAwM2VkZXZpY2VfcmVtb3ZlID0gcGh5X21kaW9fZGV2aWNlX3JlbW92ZTtcXG4rXFx0bWRpb2Rldi1cXHUwMDNlZGV2aWNlX3JlbW92ZV9keW5hbWljID0gcGh5X21kaW9fZGV2aWNlX3JlbW92ZV9keW5hbWljO1xcbiBcXHRtZGlvZGV2LVxcdTAwM2VyZXNldF9zdGF0ZSA9IC0xO1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bWRpb2Rldi1cXHUwMDNlcmV0aXJlZF9ub2RlKTtcXG4gXFxuIFxcdGRldi1cXHUwMDNlc3BlZWQgPSBTUEVFRF9VTktOT1dOO1xcbiBcXHRkZXYtXFx1MDAzZWR1cGxleCA9IERVUExFWF9VTktOT1dOO1xcbkBAIC0xMTIxLDI1ICsxMTMzLDQwIEBAIGludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdGVyciA9IHBoeV9zY2FuX2ZpeHVwcyhwaHlkZXYpO1xcbiBcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiZmFpbGVkIHRvIGluaXRpYWxpemVcXFxcblxcXCIpO1xcbi1cXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0cmV0dXJuIG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpbywgZXJyKTtcXG4gXFx0fVxcbiBcXG4gXFx0ZXJyID0gZGV2aWNlX2FkZChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldik7XFxuLVxcdGlmIChlcnIpIHtcXG4rXFx0aWYgKGVycilcXG4gXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJmYWlsZWQgdG8gYWRkXFxcXG5cXFwiKTtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gbWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZShcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLCBlcnIpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7XFxuK1xcbitzdGF0aWMgaW50IF9fcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBkeW5hbWljKVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRlcnIgPSBtZGlvYnVzX2JlZ2luX3JlbW92ZShcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLCBkeW5hbWljKTtcXG4rXFx0aWYgKGR5bmFtaWMgXFx1MDAyNlxcdTAwMjYgZXJyID09IC1FQlVTWSlcXG4rXFx0XFx0ZGV2X3dhcm4oXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYsXFxuK1xcdFxcdFxcdCBcXFwiY2Fubm90IHJlbW92ZSBhIFBIWSB3aGlsZSBpdCBpcyBhdHRhY2hlZCBvciBiZWluZyByZWdpc3RlcmVkXFxcXG5cXFwiKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdHVucmVnaXN0ZXJfbWlpX3RpbWVzdGFtcGVyKHBoeWRldi1cXHUwMDNlbWlpX3RzKTtcXG4rXFx0cHNlX2NvbnRyb2xfcHV0KHBoeWRldi1cXHUwMDNlcHNlYyk7XFxuK1xcbitcXHRkZXZpY2VfZGVsKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2KTtcXG4gXFxuLSBvdXQ6XFxuIFxcdC8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovXFxuIFxcdHBoeV9kZXZpY2VfcmVzZXQocGh5ZGV2LCAxKTtcXG4gXFxuLVxcdG1kaW9idXNfdW5yZWdpc3Rlcl9kZXZpY2UoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpbyk7XFxuLVxcdHJldHVybiBlcnI7XFxuK1xcdG1kaW9idXNfZmluaXNoX3JlbW92ZShcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLCBkeW5hbWljKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbiB9XFxuLUVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7XFxuIFxcbiAvKipcXG4gICogcGh5X2RldmljZV9yZW1vdmUgLSBSZW1vdmUgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgcGh5IGRldmljZSBmcm9tIHRoZSBNRElPIGJ1c1xcbkBAIC0xMTUxLDE1ICsxMTc4LDcgQEAgRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTtcXG4gICovXFxuIHZvaWQgcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4ge1xcbi1cXHR1bnJlZ2lzdGVyX21paV90aW1lc3RhbXBlcihwaHlkZXYtXFx1MDAzZW1paV90cyk7XFxuLVxcdHBzZV9jb250cm9sX3B1dChwaHlkZXYtXFx1MDAzZXBzZWMpO1xcbi1cXG4tXFx0ZGV2aWNlX2RlbChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldik7XFxuLVxcbi1cXHQvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xcbi1cXHRwaHlfZGV2aWNlX3Jlc2V0KHBoeWRldiwgMSk7XFxuLVxcbi1cXHRtZGlvYnVzX3VucmVnaXN0ZXJfZGV2aWNlKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8pO1xcbitcXHRfX3BoeV9kZXZpY2VfcmVtb3ZlKHBoeWRldiwgZmFsc2UpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZW1vdmUpO1xcbiBcXG5AQCAtMTczNCw2ICsxNzUzLDM2IEBAIHN0YXRpYyBib29sIHBoeV9kcnZfc3VwcG9ydHNfaXJxKGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXFxuIFxcdHJldHVybiBwaHlkcnYtXFx1MDAzZWNvbmZpZ19pbnRyIFxcdTAwMjZcXHUwMDI2IHBoeWRydi1cXHUwMDNlaGFuZGxlX2ludGVycnVwdDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBwaHlfY2xhaW0oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvO1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpb2Rldi1cXHUwMDNlYnVzO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuK1xcdGlmIChidXMtXFx1MDAzZXN0YXRlICE9IE1ESU9CVVNfUkVHSVNURVJFRCB8fFxcbitcXHQgICAgYnVzLVxcdTAwM2VtZGlvX21hcF9yZW1vdmFscyB8fFxcbitcXHQgICAgYnVzLVxcdTAwM2VtZGlvX21hcFttZGlvZGV2LVxcdTAwM2VhZGRyXSAhPSBtZGlvZGV2IHx8XFxuK1xcdCAgICAoYnVzLVxcdTAwM2VtZGlvX21hcF9wZW5kaW5nIFxcdTAwMjYgQklUKG1kaW9kZXYtXFx1MDAzZWFkZHIpKSlcXG4rXFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4rXFx0ZWxzZSBpZiAocGh5ZGV2LVxcdTAwM2VhdHRhY2hlZClcXG4rXFx0XFx0ZXJyID0gLUVCVVNZO1xcbitcXHRlbHNlXFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlYXR0YWNoZWQgPSB0cnVlO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBwaHlfcmVsZWFzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYnVzO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX21hcF9sb2NrKTtcXG4rXFx0cGh5ZGV2LVxcdTAwM2VhdHRhY2hlZCA9IGZhbHNlO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19tYXBfbG9jayk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBwaHlfYXR0YWNoX2RpcmVjdCAtIGF0dGFjaCBhIG5ldHdvcmsgZGV2aWNlIHRvIGEgZ2l2ZW4gUEhZIGRldmljZSBwb2ludGVyXFxuICAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGF0dGFjaFxcbkBAIC0xNzU1LDYgKzE4MDQsNyBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4gXFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi1cXHUwMDNlbWRpby5idXM7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmQgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG4gXFx0c3RydWN0IG1vZHVsZSAqbmRldl9vd25lciA9IE5VTEw7XFxuK1xcdGJvb2wgY2xhaW1lZCA9IGZhbHNlO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0LyogRm9yIEV0aGVybmV0IGRldmljZSBkcml2ZXJzIHRoYXQgcmVnaXN0ZXIgdGhlaXIgb3duIE1ESU8gYnVzLCB3ZVxcbkBAIC0xNzcwLDYgKzE4MjAsMTMgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuIFxcdH1cXG4gXFxuIFxcdGdldF9kZXZpY2UoZCk7XFxuK1xcdGVyciA9IHBoeV9jbGFpbShwaHlkZXYpO1xcbitcXHRpZiAoZXJyID09IC1FQlVTWSlcXG4rXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCJQSFkgYWxyZWFkeSBhdHRhY2hlZFxcXFxuXFxcIik7XFxuK1xcdGlmICghZXJyKVxcbitcXHRcXHRjbGFpbWVkID0gdHJ1ZTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJvcl9wdXRfZGV2aWNlO1xcbiBcXG4gXFx0LyogQXNzdW1lIHRoYXQgaWYgdGhlcmUgaXMgbm8gZHJpdmVyLCB0aGF0IGl0IGRvZXNuJ3RcXG4gXFx0ICogZXhpc3QsIGFuZCB3ZSBzaG91bGQgdXNlIHRoZSBnZW5waHkgZHJpdmVyLlxcbkBAIC0xNzk4LDEyICsxODU1LDYgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuIFxcdFxcdFxcdGdvdG8gZXJyb3JfbW9kdWxlX3B1dDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2KSB7XFxuLVxcdFxcdGRldl9lcnIoXFx1MDAyNmRldi1cXHUwMDNlZGV2LCBcXFwiUEhZIGFscmVhZHkgYXR0YWNoZWRcXFxcblxcXCIpO1xcbi1cXHRcXHRlcnIgPSAtRUJVU1k7XFxuLVxcdFxcdGdvdG8gZXJyb3I7XFxuLVxcdH1cXG4tXFxuIFxcdHBoeWRldi1cXHUwMDNlcGh5X2xpbmtfY2hhbmdlID0gcGh5X2xpbmtfY2hhbmdlO1xcbiBcXHRpZiAoZGV2KSB7XFxuIFxcdFxcdHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2ID0gZGV2O1xcbkBAIC0xODk5LDYgKzE5NTAsOCBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4gXFx0cGh5ZGV2LVxcdTAwM2Vpc19nZW5waHlfZHJpdmVuID0gMDtcXG4gXFx0ZC1cXHUwMDNlZHJpdmVyID0gTlVMTDtcXG4gZXJyb3JfcHV0X2RldmljZTpcXG4rXFx0aWYgKGNsYWltZWQpXFxuK1xcdFxcdHBoeV9yZWxlYXNlKHBoeWRldik7XFxuIFxcdHB1dF9kZXZpY2UoZCk7XFxuIFxcdGlmIChuZGV2X293bmVyICE9IGJ1cy1cXHUwMDNlb3duZXIpXFxuIFxcdFxcdG1vZHVsZV9wdXQoYnVzLVxcdTAwM2Vvd25lcik7XFxuQEAgLTE5NzcsNiArMjAzMCw3IEBAIHZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiBcXHQgKiBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBieSByZWFkaW5nIHRoZSB1bmRlcmx5aW5nIGJ1cyBmaXJzdC5cXG4gXFx0ICovXFxuIFxcdGJ1cyA9IHBoeWRldi1cXHUwMDNlbWRpby5idXM7XFxuK1xcdHBoeV9yZWxlYXNlKHBoeWRldik7XFxuIFxcbiBcXHRwdXRfZGV2aWNlKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2KTtcXG4gXFx0aWYgKGRldilcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpYi1pbnRlcm5hbC5oIGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpYi1pbnRlcm5hbC5oXFxuaW5kZXggNjY0ZWQ3ZmFhNTE4NC4uN2U5MTYxZmNkZDkwMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5bGliLWludGVybmFsLmhcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5bGliLWludGVybmFsLmhcXG5AQCAtMjUsNyArMjUsOSBAQCBpbnQgcGh5X3NwZWVkX2Rvd25fY29yZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG4gdm9pZCBwaHlfY2hlY2tfZG93bnNoaWZ0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBcXG4gaW50IG1kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldik7XFxuLWludCBtZGlvYnVzX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldik7XFxuK2ludCBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgaW50IGVycik7XFxuK2ludCBtZGlvYnVzX2JlZ2luX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIGJvb2wgZHluYW1pYyk7XFxuK3ZvaWQgbWRpb2J1c19maW5pc2hfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKTtcXG4gXFxuIGludCBnZW5waHlfYzQ1X3JlYWRfZWVlX2FkdihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1bnNpZ25lZCBsb25nICphZHYpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZGlvLmggYi9pbmNsdWRlL2xpbnV4L21kaW8uaFxcbmluZGV4IGE3ZDllM2FlMzYyYTUuLmUxOTk2M2FmOGUxMzkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZGlvLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21kaW8uaFxcbkBAIC04LDYgKzgsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvbWRpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4gXFxuIHN0cnVjdCBncGlvX2Rlc2M7XFxuIHN0cnVjdCBtaWlfYnVzO1xcbkBAIC0zMiw2ICszMyw5IEBAIHN0cnVjdCBtZGlvX2RldmljZSB7XFxuIFxcdGludCAoKmJ1c19tYXRjaCkoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KTtcXG4gXFx0dm9pZCAoKmRldmljZV9mcmVlKShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpO1xcbiBcXHR2b2lkICgqZGV2aWNlX3JlbW92ZSkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KTtcXG4rXFx0aW50ICgqZGV2aWNlX3JlbW92ZV9keW5hbWljKShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpO1xcbitcXHQvKiBFbnRyeSBpbiBtaWlfYnVzOjptZGlvX21hcF9yZXRpcmVkLiAqL1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIHJldGlyZWRfbm9kZTtcXG4gXFxuIFxcdC8qIEJ1cyBhZGRyZXNzIG9mIHRoZSBNRElPIGRldmljZSAoMC0zMSkgKi9cXG4gXFx0aW50IGFkZHI7XFxuQEAgLTY5NCw2ICs2OTgsOCBAQCBzdGF0aWMgaW5saW5lIGludCBtZGlvZGV2X2M0NV93cml0ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsIHUzMiBkZXZhZCxcXG4gXFxuIGJvb2wgbWRpb2J1c19pc19yZWdpc3RlcmVkX2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcik7XFxuIHN0cnVjdCBwaHlfZGV2aWNlICptZGlvYnVzX2dldF9waHkoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpO1xcbitpbnQgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKHN0cnVjdCBtaWlfYnVzICpidXMsIGJvb2wgcmVtb3ZpbmcpO1xcbit2b2lkIG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmQoc3RydWN0IG1paV9idXMgKmJ1cywgYm9vbCByZW1vdmluZyk7XFxuIFxcbiAvKipcXG4gICogbWRpb19tb2R1bGVfZHJpdmVyKCkgLSBIZWxwZXIgbWFjcm8gZm9yIHJlZ2lzdGVyaW5nIG1kaW8gZHJpdmVyc1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxcbmluZGV4IDVmOGQ2NTg2OGUwZmYuLjA1MDBmODBlMGZhY2YgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5AQCAtMjIsNiArMjIsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWlpX3RpbWVzdGFtcGVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93YWl0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS1pZC9tZGlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91NjRfc3RhdHNfc3luYy5oXFx1MDAzZVxcbkBAIC0zOTEsNyArMzkyLDkgQEAgc3RydWN0IG1paV9idXMge1xcbiBcXHQvKiogQHN0YXRlOiBTdGF0ZSBvZiBidXMgc3RydWN0dXJlICovXFxuIFxcdGVudW0ge1xcbiBcXHRcXHRNRElPQlVTX0FMTE9DQVRFRCA9IDEsXFxuK1xcdFxcdE1ESU9CVVNfUkVHSVNURVJJTkcsXFxuIFxcdFxcdE1ESU9CVVNfUkVHSVNURVJFRCxcXG4rXFx0XFx0TURJT0JVU19VTlJFR0lTVEVSSU5HLFxcbiBcXHRcXHRNRElPQlVTX1VOUkVHSVNURVJFRCxcXG4gXFx0XFx0TURJT0JVU19SRUxFQVNFRCxcXG4gXFx0fSBzdGF0ZTtcXG5AQCAtNDAxLDYgKzQwNCwxOCBAQCBzdHJ1Y3QgbWlpX2J1cyB7XFxuIFxcbiBcXHQvKiogQG1kaW9fbWFwOiBsaXN0IG9mIGFsbCBNRElPIGRldmljZXMgb24gYnVzICovXFxuIFxcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb19tYXBbUEhZX01BWF9BRERSXTtcXG4rXFx0LyoqIEBtZGlvX21hcF9wZW5kaW5nOiBhZGRyZXNzZXMgd2l0aCByZWdpc3RyYXRpb24gaW4gcHJvZ3Jlc3MgKi9cXG4rXFx0dTMyIG1kaW9fbWFwX3BlbmRpbmc7XFxuK1xcdC8qKiBAbWRpb19tYXBfbG9jazogcHJvdGVjdHMgdGhlIE1ESU8gZGV2aWNlIG1hcCBhbmQgYnVzIHN0YXRlICovXFxuK1xcdHN0cnVjdCBtdXRleCBtZGlvX21hcF9sb2NrO1xcbitcXHQvKiogQG1kaW9fbWFwX3dhaXQ6IHdhaXQgZm9yIGFjdGl2ZSBtYXAgb3BlcmF0aW9ucyBkdXJpbmcgdGVhcmRvd24gKi9cXG4rXFx0d2FpdF9xdWV1ZV9oZWFkX3QgbWRpb19tYXBfd2FpdDtcXG4rXFx0LyoqIEBtZGlvX21hcF9vcHM6IGFjdGl2ZSByZWdpc3RyYXRpb25zIGFuZCBmaXJtd2FyZSBjaGFuZ2VzICovXFxuK1xcdHVuc2lnbmVkIGludCBtZGlvX21hcF9vcHM7XFxuK1xcdC8qKiBAbWRpb19tYXBfcmVtb3ZhbHM6IGZpcm13YXJlIHJlbW92YWxzIGJsb2NraW5nIFBIWSBhdHRhY2htZW50ICovXFxuK1xcdHVuc2lnbmVkIGludCBtZGlvX21hcF9yZW1vdmFscztcXG4rXFx0LyoqIEBtZGlvX21hcF9yZXRpcmVkOiByZW1vdmVkIGRldmljZXMgcGlubmVkIHVudGlsIGJ1cyB0ZWFyZG93biAqL1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIG1kaW9fbWFwX3JldGlyZWQ7XFxuIFxcbiBcXHQvKiogQHBoeV9tYXNrOiBQSFkgYWRkcmVzc2VzIHRvIGJlIGlnbm9yZWQgd2hlbiBwcm9iaW5nICovXFxuIFxcdHUzMiBwaHlfbWFzaztcXG5AQCAtNjUyLDYgKzY2Nyw4IEBAIHN0cnVjdCBwaHlfb2F0YzE0X3NxaV9jYXBhYmlsaXR5IHtcXG4gICogQG5fcG9ydHM6IE51bWJlciBvZiBwb3J0cyBjdXJyZW50bHkgYXR0YWNoZWQgdG8gdGhlIFBIWVxcbiAgKiBAbWF4X25fcG9ydHM6IE1heCBudW1iZXIgb2YgcG9ydHMgdGhpcyBQSFkgY2FuIGV4cG9zZVxcbiAgKiBAbG9jazogIE11dGV4IGZvciBzZXJpYWxpemF0aW9uIGFjY2VzcyB0byBQSFlcXG4rICogQGF0dGFjaGVkOiBXaGV0aGVyIGEgbmV0d29yayBkZXZpY2Ugb3Igc3RhbmRhbG9uZSB1c2VyIGF0dGFjaGVkIHRoZSBQSFk7XFxuKyAqXFx0cHJvdGVjdGVkIGJ5IHRoZSBNRElPIGJ1cyBtYXAgbG9ja1xcbiAgKiBAc3RhdGVfcXVldWU6IFdvcmsgcXVldWUgZm9yIHN0YXRlIG1hY2hpbmVcXG4gICogQGxpbmtfZG93bl9ldmVudHM6IE51bWJlciBvZiB0aW1lcyBsaW5rIHdhcyBsb3N0XFxuICAqIEBzaGFyZWQ6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhIHNoYXJlZCBieSBwaHlzIGluIG9uZSBwYWNrYWdlXFxuQEAgLTc4MSw2ICs3OTgsNyBAQCBzdHJ1Y3QgcGh5X2RldmljZSB7XFxuIFxcdHN0cnVjdCBkZWxheWVkX3dvcmsgc3RhdGVfcXVldWU7XFxuIFxcbiBcXHRzdHJ1Y3QgbXV0ZXggbG9jaztcXG4rXFx0Ym9vbCBhdHRhY2hlZDtcXG4gXFxuIFxcdC8qIFRoaXMgbWF5IGJlIG1vZGlmaWVkIHVuZGVyIHRoZSBydG5sIGxvY2sgKi9cXG4gXFx0Ym9vbCBzZnBfYnVzX2F0dGFjaGVkO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNjowNi4wNDMzNDU2OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIwMzM4MzE0MDQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPRlwiLFxuICAgIFwiT0ZfRFlOQU1JQ1wiLFxuICAgIFwiT0ZfT1ZFUkxBWVwiLFxuICAgIFwiUEhZTElCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19tZGlvYnVzX3JlZ2lzdGVyXCIsXG4gICAgXCJtZGlvYnVzX3VucmVnaXN0ZXJcIixcbiAgICBcIm1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpblwiLFxuICAgIFwibWRpb2J1c19kZXZpY2VfY2hhbmdlX2VuZFwiLFxuICAgIFwibWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZVwiLFxuICAgIFwibWRpb2J1c19iZWdpbl9yZW1vdmVcIixcbiAgICBcIm1kaW9idXNfZmluaXNoX3JlbW92ZVwiLFxuICAgIFwibWRpb19kZXZpY2VfcmVnaXN0ZXJcIixcbiAgICBcIm1kaW9fZGV2aWNlX3JlbW92ZVwiLFxuICAgIFwicGh5X2RldmljZV9yZWdpc3RlclwiLFxuICAgIFwicGh5X2RldmljZV9yZW1vdmVcIixcbiAgICBcInBoeV9hdHRhY2hfZGlyZWN0XCIsXG4gICAgXCJwaHlfZGV0YWNoXCIsXG4gICAgXCJfX29mX21kaW9idXNfcmVnaXN0ZXJcIixcbiAgICBcIm1kaW9idXNfc2Nhbl9jMjJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTURJTyBidXMgYW5kIFBIWSBkZXZpY2UgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIGxvZ2ljIHRvIHN1cHBvcnQgZHluYW1pYyBkZXZpY2UgdHJlZSBjaGFuZ2VzIChPRiBkeW5hbWljIGFuZCBvdmVybGF5KS4gSXQgaW50cm9kdWNlcyBhIGxvY2tpbmcgbWVjaGFuaXNtIChgbWRpb19tYXBfbG9ja2ApIHRvIHNlcmlhbGl6ZSBkZXZpY2UgY2hhbmdlcyBhbmQgcHJldmVudCByYWNlcyBkdXJpbmcgUEhZIGF0dGFjaG1lbnQgYW5kIGRldGFjaG1lbnQuIEl0IGFsc28gcmVmYWN0b3JzIHRoZSBzY2FubmluZyBhbmQgcmVnaXN0cmF0aW9uIG9mIFBIWXMgYW5kIE1ESU8gZGV2aWNlcy4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGxvZ2ljIGRvZXMgbm90IGludHJvZHVjZSBkZWFkbG9ja3Mgb3IgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwMzk4MWVmNTQ0MzU3NDY0NTY5NDBhNTRmYTFiOTJmOTU5MjgwNGJlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAwMDowNjowNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jIGIvZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmNcbmluZGV4IGI4ZDI5OGMwNGQzZmYuLmM4OWY4OGFhY2Q4ZGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uY1xuKysrIGIvZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmNcbkBAIC0xMyw2ICsxMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZndub2RlX21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfaXJxLmhcdTAwM2VcbkBAIC0yMCw2ICsyMSw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbmV0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeV9maXhlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4gXG4gI2RlZmluZSBERUZBVUxUX0dQSU9fUkVTRVRfREVMQVlcdDEwXHQvKiBpbiBtaWNyb3NlY29uZHMgKi9cbiBcbkBAIC0yNyw2ICszMCw1MiBAQCBNT0RVTEVfQVVUSE9SKFwiR3JhbnQgTGlrZWx5IFx1MDAzY2dyYW50Lmxpa2VseUBzZWNyZXRsYWIuY2FcdTAwM2VcIik7XG4gTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwiT3BlbkZpcm13YXJlIE1ESU8gYnVzIChFdGhlcm5ldCBQSFkpIGFjY2Vzc29yc1wiKTtcbiBcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfT0ZfRFlOQU1JQylcbisvKlxuKyAqIE9GIGNoYW5nZXMgY2FuIG5lc3Qgd2hlbiBwcm9iaW5nIG9uZSBNRElPIGRldmljZSBlbmFibGVzIGFub3RoZXIgbm9kZSBvblxuKyAqIHRoZSBzYW1lIGJ1cy4gU2VyaWFsaXplIGluZGVwZW5kZW50IGNoYW5nZXMgd2hpbGUgYWxsb3dpbmcgdGhhdCBuZXN0aW5nLlxuKyAqL1xuK3N0YXRpYyBERUZJTkVfTVVURVgob2ZfbWRpb19yZWNvbmZpZ19tdXRleCk7XG4rc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqb2ZfbWRpb19yZWNvbmZpZ19vd25lcjtcbitzdGF0aWMgdW5zaWduZWQgaW50IG9mX21kaW9fcmVjb25maWdfZGVwdGg7XG4rXG4rc3RhdGljIHZvaWQgb2ZfbWRpb19yZWNvbmZpZ19sb2NrKHZvaWQpXG4re1xuK1x0aWYgKCFtdXRleF90cnlsb2NrKFx1MDAyNm9mX21kaW9fcmVjb25maWdfbXV0ZXgpKSB7XG4rXHRcdGlmIChvZl9tZGlvX3JlY29uZmlnX293bmVyID09IGN1cnJlbnQpIHtcbitcdFx0XHRvZl9tZGlvX3JlY29uZmlnX2RlcHRoKys7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2b2ZfbWRpb19yZWNvbmZpZ19tdXRleCk7XG4rXHR9XG4rXG4rXHRXQVJOX09OX09OQ0Uob2ZfbWRpb19yZWNvbmZpZ19vd25lcik7XG4rXHRXQVJOX09OX09OQ0Uob2ZfbWRpb19yZWNvbmZpZ19kZXB0aCk7XG4rXHRvZl9tZGlvX3JlY29uZmlnX293bmVyID0gY3VycmVudDtcbitcdG9mX21kaW9fcmVjb25maWdfZGVwdGggPSAxO1xuK31cbitcbitzdGF0aWMgdm9pZCBvZl9tZGlvX3JlY29uZmlnX3VubG9jayh2b2lkKVxuK3tcbitcdFdBUk5fT05fT05DRShvZl9tZGlvX3JlY29uZmlnX293bmVyICE9IGN1cnJlbnQpO1xuK1x0V0FSTl9PTl9PTkNFKCFvZl9tZGlvX3JlY29uZmlnX2RlcHRoKTtcbitcbitcdGlmICgtLW9mX21kaW9fcmVjb25maWdfZGVwdGgpXG4rXHRcdHJldHVybjtcbitcbitcdG9mX21kaW9fcmVjb25maWdfb3duZXIgPSBOVUxMO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm9mX21kaW9fcmVjb25maWdfbXV0ZXgpO1xuK31cbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBvZl9tZGlvX3JlY29uZmlnX2xvY2sodm9pZClcbit7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBvZl9tZGlvX3JlY29uZmlnX3VubG9jayh2b2lkKVxuK3tcbit9XG4rI2VuZGlmXG4rXG4gLyogRXh0cmFjdCB0aGUgY2xhdXNlIDIyIHBoeSBJRCBmcm9tIHRoZSBjb21wYXRpYmxlIHN0cmluZyBvZiB0aGUgZm9ybVxuICAqIGV0aGVybmV0LXBoeS1pZEFBQUEuQkJCQiAqL1xuIHN0YXRpYyBpbnQgb2ZfZ2V0X3BoeV9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSwgdTMyICpwaHlfaWQpXG5AQCAtNDQsNyArOTMsNyBAQCBpbnQgb2ZfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxuIEVYUE9SVF9TWU1CT0wob2ZfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKTtcbiBcbiBzdGF0aWMgaW50IG9mX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICptZGlvLFxuLVx0XHRcdFx0ICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQsIHUzMiBhZGRyKVxuK1x0XHRcdFx0ICAgc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCwgdTMyIGFkZHIpXG4ge1xuIFx0cmV0dXJuIGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShtZGlvLCBvZl9md25vZGVfaGFuZGxlKGNoaWxkKSwgYWRkcik7XG4gfVxuQEAgLTc3LDYgKzEyNiwyNSBAQCBzdGF0aWMgaW50IG9mX21kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICptZGlvLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgb2ZfbWRpb2J1c19yZWdpc3Rlcl9jaGlsZChzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcbitcdFx0XHRcdCAgICAgc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCwgdTMyIGFkZHIpXG4re1xuK1x0aW50IHJjO1xuK1xuK1x0aWYgKG9mX25vZGVfdGVzdF9hbmRfc2V0X2ZsYWcoY2hpbGQsIE9GX1BPUFVMQVRFRCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKG9mX21kaW9idXNfY2hpbGRfaXNfcGh5KGNoaWxkKSlcbitcdFx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyX3BoeShtZGlvLCBjaGlsZCwgYWRkcik7XG4rXHRlbHNlXG4rXHRcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2UobWRpbywgY2hpbGQsIGFkZHIpO1xuK1xuK1x0aWYgKHJjKVxuK1x0XHRvZl9ub2RlX2NsZWFyX2ZsYWcoY2hpbGQsIE9GX1BPUFVMQVRFRCk7XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuIC8qIFRoZSBmb2xsb3dpbmcgaXMgYSBsaXN0IG9mIFBIWSBjb21wYXRpYmxlIHN0cmluZ3Mgd2hpY2ggYXBwZWFyIGluXG4gICogc29tZSBEVEJzLiBUaGUgY29tcGF0aWJsZSBzdHJpbmcgaXMgbmV2ZXIgbWF0Y2hlZCBhZ2FpbnN0IGEgUEhZXG4gICogZHJpdmVyLCBzbyBpcyBwb2ludGxlc3MuIFdlIG9ubHkgZXhwZWN0IGRldmljZXMgd2hpY2ggYXJlIG5vdCBQSFlzXG5AQCAtMTM2LDYgKzIwNCwzMiBAQCBib29sIG9mX21kaW9idXNfY2hpbGRfaXNfcGh5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQpXG4gfVxuIEVYUE9SVF9TWU1CT0wob2ZfbWRpb2J1c19jaGlsZF9pc19waHkpO1xuIFxuK3N0YXRpYyBpbnQgb2ZfbWRpb2J1c19zY2FuX3BoeShzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcbitcdFx0XHQgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpjaGlsZClcbit7XG4rXHRpbnQgYWRkciwgcmM7XG4rXG4rXHRpZiAoIW9mX21kaW9idXNfY2hpbGRfaXNfcGh5KGNoaWxkKSlcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHRmb3IgKGFkZHIgPSAwOyBhZGRyIFx1MDAzYyBQSFlfTUFYX0FERFI7IGFkZHIrKykge1xuK1x0XHRpZiAobWRpb2J1c19pc19yZWdpc3RlcmVkX2RldmljZShtZGlvLCBhZGRyKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0ZGV2X2luZm8oXHUwMDI2bWRpby1cdTAwM2VkZXYsIFwic2NhbiBwaHkgJXBPRm4gYXQgYWRkcmVzcyAlaVxcblwiLFxuK1x0XHRcdCBjaGlsZCwgYWRkcik7XG4rXG4rXHRcdC8qIC1FTk9ERVYgbWVhbnMgdGhhdCBzY2FubmluZyBzaG91bGQgY29udGludWUuICovXG4rXHRcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9jaGlsZChtZGlvLCBjaGlsZCwgYWRkcik7XG4rXHRcdGlmICghcmMpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdGlmIChyYyAhPSAtRU5PREVWKVxuK1x0XHRcdHJldHVybiByYztcbitcdH1cbitcbitcdHJldHVybiAtRU5PREVWO1xuK31cbitcbiBzdGF0aWMgaW50IF9fb2ZfbWRpb2J1c19wYXJzZV9waHlzKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuIFx0XHRcdFx0ICAgYm9vbCAqc2NhbnBoeXMpXG4ge1xuQEAgLTE2NCwxMCArMjU4LDcgQEAgc3RhdGljIGludCBfX29mX21kaW9idXNfcGFyc2VfcGh5cyhzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IGRldmljZV9ub2RlICpucCxcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRpZiAob2ZfbWRpb2J1c19jaGlsZF9pc19waHkoY2hpbGQpKVxuLVx0XHRcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9waHkobWRpbywgY2hpbGQsIGFkZHIpO1xuLVx0XHRlbHNlXG4tXHRcdFx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyX2RldmljZShtZGlvLCBjaGlsZCwgYWRkcik7XG4rXHRcdHJjID0gb2ZfbWRpb2J1c19yZWdpc3Rlcl9jaGlsZChtZGlvLCBjaGlsZCwgYWRkcik7XG4gXG4gXHRcdGlmIChyYyA9PSAtRU5PREVWKVxuIFx0XHRcdGRldl9lcnIoXHUwMDI2bWRpby1cdTAwM2VkZXYsXG5AQCAtMTk3LDcgKzI4OCw3IEBAIGludCBfX29mX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4ge1xuIFx0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZDtcbiBcdGJvb2wgc2NhbnBoeXMgPSBmYWxzZTtcbi1cdGludCBhZGRyLCByYztcbitcdGludCByYztcbiBcbiBcdGlmICghbnApXG4gXHRcdHJldHVybiBfX21kaW9idXNfcmVnaXN0ZXIobWRpbywgb3duZXIpO1xuQEAgLTIyMywxMyArMzE0LDIxIEBAIGludCBfX29mX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbiBcbitcdG9mX21kaW9fcmVjb25maWdfbG9jaygpO1xuK1x0cmMgPSBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4obWRpbywgZmFsc2UpO1xuK1x0aWYgKHJjKSB7XG4rXHRcdG9mX21kaW9fcmVjb25maWdfdW5sb2NrKCk7XG4rXHRcdG1kaW9idXNfdW5yZWdpc3RlcihtZGlvKTtcbitcdFx0cmV0dXJuIHJjO1xuK1x0fVxuK1xuIFx0LyogTG9vcCBvdmVyIHRoZSBjaGlsZCBub2RlcyBhbmQgcmVnaXN0ZXIgYSBwaHlfZGV2aWNlIGZvciBlYWNoIHBoeSAqL1xuIFx0cmMgPSBfX29mX21kaW9idXNfcGFyc2VfcGh5cyhtZGlvLCBucCwgXHUwMDI2c2NhbnBoeXMpO1xuIFx0aWYgKHJjKVxuLVx0XHRnb3RvIHVucmVnaXN0ZXI7XG4rXHRcdGdvdG8gb3V0X2NoYW5nZTtcbiBcbiBcdGlmICghc2NhbnBoeXMpXG4tXHRcdHJldHVybiAwO1xuK1x0XHRnb3RvIG91dF9jaGFuZ2U7XG4gXG4gXHQvKiBhdXRvIHNjYW4gZm9yIFBIWXMgd2l0aCBlbXB0eSByZWcgcHJvcGVydHkgKi9cbiBcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKG5wLCBjaGlsZCkge1xuQEAgLTIzOCwzOSArMzM3LDM4MiBAQCBpbnQgX19vZl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxuIFx0XHQgICAgb2Zfbm9kZV9uYW1lX2VxKGNoaWxkLCBcImV0aGVybmV0LXBoeS1wYWNrYWdlXCIpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRmb3IgKGFkZHIgPSAwOyBhZGRyIFx1MDAzYyBQSFlfTUFYX0FERFI7IGFkZHIrKykge1xuLVx0XHRcdC8qIHNraXAgYWxyZWFkeSByZWdpc3RlcmVkIFBIWXMgKi9cbi1cdFx0XHRpZiAobWRpb2J1c19pc19yZWdpc3RlcmVkX2RldmljZShtZGlvLCBhZGRyKSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRcdC8qIGJlIG5vaXN5IHRvIGVuY291cmFnZSBwZW9wbGUgdG8gc2V0IHJlZyBwcm9wZXJ0eSAqL1xuLVx0XHRcdGRldl9pbmZvKFx1MDAyNm1kaW8tXHUwMDNlZGV2LCBcInNjYW4gcGh5ICVwT0ZuIGF0IGFkZHJlc3MgJWlcXG5cIixcbi1cdFx0XHRcdCBjaGlsZCwgYWRkcik7XG4tXG4tXHRcdFx0aWYgKG9mX21kaW9idXNfY2hpbGRfaXNfcGh5KGNoaWxkKSkge1xuLVx0XHRcdFx0LyogLUVOT0RFViBpcyB0aGUgcmV0dXJuIGNvZGUgdGhhdCBQSFlMSUIgaGFzXG4tXHRcdFx0XHQgKiBzdGFuZGFyZGl6ZWQgb24gdG8gaW5kaWNhdGUgdGhhdCBidXNcbi1cdFx0XHRcdCAqIHNjYW5uaW5nIHNob3VsZCBjb250aW51ZS5cbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0cmMgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyX3BoeShtZGlvLCBjaGlsZCwgYWRkcik7XG4tXHRcdFx0XHRpZiAoIXJjKVxuLVx0XHRcdFx0XHRicmVhaztcbi1cdFx0XHRcdGlmIChyYyAhPSAtRU5PREVWKVxuLVx0XHRcdFx0XHRnb3RvIHB1dF91bnJlZ2lzdGVyO1xuLVx0XHRcdH1cbi1cdFx0fVxuK1x0XHRyYyA9IG9mX21kaW9idXNfc2Nhbl9waHkobWRpbywgY2hpbGQpO1xuK1x0XHRpZiAocmMgXHUwMDI2XHUwMDI2IHJjICE9IC1FTk9ERVYpXG4rXHRcdFx0Z290byBwdXRfY2hpbGQ7XG4rXHRcdHJjID0gMDtcbiBcdH1cbiBcbi1cdHJldHVybiAwO1xuK291dF9jaGFuZ2U6XG4rXHRtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kKG1kaW8sIGZhbHNlKTtcbitcdG9mX21kaW9fcmVjb25maWdfdW5sb2NrKCk7XG4rXHRpZiAoIXJjKVxuK1x0XHRyZXR1cm4gMDtcbiBcbi1wdXRfdW5yZWdpc3Rlcjpcbi1cdG9mX25vZGVfcHV0KGNoaWxkKTtcbi11bnJlZ2lzdGVyOlxuIFx0bWRpb2J1c191bnJlZ2lzdGVyKG1kaW8pO1xuIFx0cmV0dXJuIHJjO1xuK1xuK3B1dF9jaGlsZDpcbitcdG9mX25vZGVfcHV0KGNoaWxkKTtcbitcdGdvdG8gb3V0X2NoYW5nZTtcbiB9XG4gRVhQT1JUX1NZTUJPTChfX29mX21kaW9idXNfcmVnaXN0ZXIpO1xuIFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19PRl9EWU5BTUlDKVxuK3N0YXRpYyBib29sIG9mX21kaW9idXNfbm9kZV9pc19hdmFpbGFibGUoc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxuK3tcbitcdHJldHVybiAhb2Zfbm9kZV9jaGVja19mbGFnKG5vZGUsIE9GX0RFVEFDSEVEKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5vZGUpO1xuK31cbitcbitzdGF0aWMgaW50IG9mX21kaW9idXNfYWRkX25vZGUoc3RydWN0IG1paV9idXMgKm1kaW8sXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkO1xuK1x0aW50IGFkZHIsIHJjLCByZXQgPSAwO1xuK1xuK1x0aWYgKCFvZl9tZGlvYnVzX25vZGVfaXNfYXZhaWxhYmxlKG5vZGUpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChvZl9ub2RlX25hbWVfZXEobm9kZSwgXCJldGhlcm5ldC1waHktcGFja2FnZVwiKSkge1xuK1x0XHRpZiAoIW9mX3Byb3BlcnR5X3ByZXNlbnQobm9kZSwgXCJyZWdcIikpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXG4rXHRcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKG5vZGUsIGNoaWxkKSB7XG4rXHRcdFx0cmMgPSBvZl9tZGlvYnVzX2FkZF9ub2RlKG1kaW8sIGNoaWxkKTtcbitcdFx0XHRpZiAocmMgXHUwMDI2XHUwMDI2IHJjICE9IC1FTk9ERVYgXHUwMDI2XHUwMDI2ICFyZXQpXG4rXHRcdFx0XHRyZXQgPSByYztcbitcdFx0fVxuK1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0YWRkciA9IG9mX21kaW9fcGFyc2VfYWRkcihcdTAwMjZtZGlvLVx1MDAzZWRldiwgbm9kZSk7XG4rXHRpZiAoYWRkciBcdTAwM2MgMClcbitcdFx0cmMgPSBvZl9tZGlvYnVzX3NjYW5fcGh5KG1kaW8sIG5vZGUpO1xuK1x0ZWxzZVxuK1x0XHRyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXJfY2hpbGQobWRpbywgbm9kZSwgYWRkcik7XG4rXG4rXHRpZiAocmMgPT0gLUVOT0RFViBcdTAwMjZcdTAwMjYgYWRkciBcdTAwM2U9IDApXG4rXHRcdGRldl9lcnIoXHUwMDI2bWRpby1cdTAwM2VkZXYsXG4rXHRcdFx0XCJNRElPIGRldmljZSBhdCBhZGRyZXNzICVkIGlzIG1pc3NpbmcuXFxuXCIsIGFkZHIpO1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbitzdGF0aWMgYm9vbCBvZl9tZGlvYnVzX25vZGVfaXNfYnVzeShzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcbitcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4re1xuK1x0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2O1xuK1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbitcdGJvb2wgYnVzeSA9IGZhbHNlO1xuK1xuK1x0aWYgKG9mX25vZGVfbmFtZV9lcShub2RlLCBcImV0aGVybmV0LXBoeS1wYWNrYWdlXCIpKSB7XG4rXHRcdGZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKG5vZGUsIGNoaWxkKSB7XG4rXHRcdFx0aWYgKG9mX21kaW9idXNfbm9kZV9pc19idXN5KG1kaW8sIGNoaWxkKSlcbitcdFx0XHRcdHJldHVybiB0cnVlO1xuK1x0XHR9XG4rXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdGlmICghb2Zfbm9kZV9jaGVja19mbGFnKG5vZGUsIE9GX1BPUFVMQVRFRCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG1kaW9kZXYgPSBvZl9tZGlvX2ZpbmRfZGV2aWNlKG5vZGUpO1xuK1x0aWYgKCFtZGlvZGV2KVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGlmIChtZGlvZGV2LVx1MDAzZWJ1cyAhPSBtZGlvKSB7XG4rXHRcdHB1dF9kZXZpY2UoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNm1kaW8tXHUwMDNlbWRpb19tYXBfbG9jayk7XG4rXHRidXN5ID0gbWRpby1cdTAwM2VtZGlvX21hcFttZGlvZGV2LVx1MDAzZWFkZHJdICE9IG1kaW9kZXYgfHxcbitcdCAgICAgICAobWRpby1cdTAwM2VtZGlvX21hcF9wZW5kaW5nIFx1MDAyNiBCSVQobWRpb2Rldi1cdTAwM2VhZGRyKSk7XG4rXHRpZiAobWRpb2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgTURJT19ERVZJQ0VfRkxBR19QSFkpIHtcbitcdFx0cGh5ZGV2ID0gdG9fcGh5X2RldmljZShcdTAwMjZtZGlvZGV2LVx1MDAzZWRldik7XG4rXHRcdGlmIChwaHlkZXYtXHUwMDNlYXR0YWNoZWQpIHtcbitcdFx0XHRidXN5ID0gdHJ1ZTtcbitcdFx0XHRkZXZfd2FybihcdTAwMjZtZGlvZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdCBcImNhbm5vdCByZW1vdmUgYW4gYXR0YWNoZWQgUEhZOyByZW1vdmUgaXRzIGNvbnN1bWVyIGZpcnN0XFxuXCIpO1xuK1x0XHR9XG4rXHR9XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bWRpby1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbitcdHB1dF9kZXZpY2UoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuK1xuK1x0cmV0dXJuIGJ1c3k7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKlxuK29mX21kaW9idXNfZ2V0X3JlbW92YWxfc2NvcGUoc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxuK3tcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50O1xuK1xuK1x0aWYgKG9mX25vZGVfbmFtZV9lcShub2RlLCBcImV0aGVybmV0LXBoeS1wYWNrYWdlXCIpKVxuK1x0XHRyZXR1cm4gb2Zfbm9kZV9nZXQobm9kZSk7XG4rXG4rXHRwYXJlbnQgPSBvZl9nZXRfcGFyZW50KG5vZGUpO1xuK1x0aWYgKG9mX25vZGVfbmFtZV9lcShwYXJlbnQsIFwiZXRoZXJuZXQtcGh5LXBhY2thZ2VcIikpXG4rXHRcdHJldHVybiBwYXJlbnQ7XG4rXG4rXHRvZl9ub2RlX3B1dChwYXJlbnQpO1xuK1x0cmV0dXJuIG9mX25vZGVfZ2V0KG5vZGUpO1xuK31cbitcbitzdGF0aWMgaW50IG9mX21kaW9idXNfcmVtb3ZlX25vZGUoc3RydWN0IG1paV9idXMgKm1kaW8sXG4rXHRcdFx0XHQgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcbit7XG4rXHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkO1xuK1x0aW50IHJldDtcbitcbitcdGlmIChvZl9ub2RlX25hbWVfZXEobm9kZSwgXCJldGhlcm5ldC1waHktcGFja2FnZVwiKSkge1xuK1x0XHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKG5vZGUsIGNoaWxkKSB7XG4rXHRcdFx0cmV0ID0gb2ZfbWRpb2J1c19yZW1vdmVfbm9kZShtZGlvLCBjaGlsZCk7XG4rXHRcdFx0aWYgKHJldCkge1xuK1x0XHRcdFx0b2Zfbm9kZV9wdXQoY2hpbGQpO1xuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0XHR9XG4rXHRcdH1cbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRpZiAoIW9mX25vZGVfY2hlY2tfZmxhZyhub2RlLCBPRl9QT1BVTEFURUQpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIFRoZSBPRiBub2RlIGxvb2t1cCBhbHNvIGNvdmVycyBQSFlzIGZvdW5kIGJ5IGFkZHJlc3Mgc2Nhbm5pbmcuICovXG4rXHRtZGlvZGV2ID0gb2ZfbWRpb19maW5kX2RldmljZShub2RlKTtcbitcdGlmICghbWRpb2RldilcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcdGlmIChtZGlvZGV2LVx1MDAzZWJ1cyAhPSBtZGlvKSB7XG4rXHRcdHB1dF9kZXZpY2UoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbitcbitcdHJldCA9IG1kaW9kZXYtXHUwMDNlZGV2aWNlX3JlbW92ZV9keW5hbWljKG1kaW9kZXYpO1xuK1x0aWYgKCFyZXQpXG4rXHRcdG1kaW9kZXYtXHUwMDNlZGV2aWNlX2ZyZWUobWRpb2Rldik7XG4rXHRwdXRfZGV2aWNlKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2KTtcbitcbitcdHJldHVybiByZXQgPT0gLUVOT0RFViA/IDAgOiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgbWlpX2J1cyAqb2ZfbWRpb2J1c19maW5kX3BhcmVudChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXG4re1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQsICpidXNfbm9kZTtcbitcdHN0cnVjdCBtaWlfYnVzICptZGlvO1xuK1xuK1x0cGFyZW50ID0gb2ZfZ2V0X3BhcmVudChub2RlKTtcbitcdGlmICghcGFyZW50KVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGlmIChvZl9ub2RlX25hbWVfZXEocGFyZW50LCBcImV0aGVybmV0LXBoeS1wYWNrYWdlXCIpKSB7XG4rXHRcdGlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShwYXJlbnQpIHx8XG4rXHRcdCAgICAhb2ZfcHJvcGVydHlfcHJlc2VudChwYXJlbnQsIFwicmVnXCIpKSB7XG4rXHRcdFx0b2Zfbm9kZV9wdXQocGFyZW50KTtcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcdFx0fVxuK1xuK1x0XHRidXNfbm9kZSA9IG9mX2dldF9wYXJlbnQocGFyZW50KTtcbitcdFx0b2Zfbm9kZV9wdXQocGFyZW50KTtcbitcdH0gZWxzZSB7XG4rXHRcdGJ1c19ub2RlID0gcGFyZW50O1xuK1x0fVxuK1xuK1x0bWRpbyA9IG9mX21kaW9fZmluZF9idXMoYnVzX25vZGUpO1xuK1x0b2Zfbm9kZV9wdXQoYnVzX25vZGUpO1xuK1xuK1x0cmV0dXJuIG1kaW87XG4rfVxuK1xuKyNpZiBJU19FTkFCTEVEKENPTkZJR19PRl9PVkVSTEFZKVxuKy8qIE92ZXJsYXkgZW50cnkgbm90aWZpZXIgZXJyb3JzIGNhbm5vdCBzdG9wIHJlbW92YWwgYWZ0ZXIgdGhlIHRyZWUgY2hhbmdlZC4gKi9cbitzdGF0aWMgYm9vbCBvZl9tZGlvYnVzX2xpdmVfbm9kZV9pc19idXN5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSlcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnNjb3BlO1xuK1x0c3RydWN0IG1paV9idXMgKm1kaW87XG4rXHRib29sIGJ1c3kgPSB0cnVlO1xuK1xuK1x0c2NvcGUgPSBvZl9tZGlvYnVzX2dldF9yZW1vdmFsX3Njb3BlKG5vZGUpO1xuK1x0bWRpbyA9IG9mX21kaW9idXNfZmluZF9wYXJlbnQoc2NvcGUpO1xuK1x0aWYgKCFtZGlvKVxuK1x0XHRnb3RvIG91dF9wdXRfc2NvcGU7XG4rXG4rXHRpZiAoIW1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbihtZGlvLCB0cnVlKSkge1xuK1x0XHRidXN5ID0gb2ZfbWRpb2J1c19ub2RlX2lzX2J1c3kobWRpbywgc2NvcGUpO1xuK1x0XHRtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kKG1kaW8sIHRydWUpO1xuK1x0fVxuK1x0cHV0X2RldmljZShcdTAwMjZtZGlvLVx1MDAzZWRldik7XG4rXG4rb3V0X3B1dF9zY29wZTpcbitcdG9mX25vZGVfcHV0KHNjb3BlKTtcbitcdHJldHVybiBidXN5O1xuK31cbitcbitzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpcbitvZl9tZGlvYnVzX292ZXJsYXlfdGFyZ2V0X2NoaWxkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqdGFyZ2V0LFxuK1x0XHRcdFx0c3RydWN0IGRldmljZV9ub2RlICpvdmVybGF5X2NoaWxkKVxuK3tcbitcdGNvbnN0IGNoYXIgKm5hbWUgPSBrYmFzZW5hbWUob3ZlcmxheV9jaGlsZC1cdTAwM2VmdWxsX25hbWUpO1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZDtcbitcbitcdGZvcl9lYWNoX2NoaWxkX29mX25vZGUodGFyZ2V0LCBjaGlsZCkge1xuK1x0XHRpZiAoIW9mX25vZGVfY21wKGtiYXNlbmFtZShjaGlsZC1cdTAwM2VmdWxsX25hbWUpLCBuYW1lKSlcbitcdFx0XHRyZXR1cm4gY2hpbGQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIGJvb2wgb2ZfbWRpb2J1c19vdmVybGF5X25vZGVfaXNfYnVzeShzdHJ1Y3QgZGV2aWNlX25vZGUgKm92ZXJsYXksXG4rXHRcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnRhcmdldCxcbitcdFx0XHRcdFx0ICAgIGJvb2wgYWRkZWQpXG4re1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpvdmVybGF5X2NoaWxkLCAqdGFyZ2V0X2NoaWxkO1xuK1x0Ym9vbCBidXN5LCBjaGlsZF9hZGRlZDtcbitcbitcdGlmICgoYWRkZWQgfHwgb2ZfcHJvcGVydHlfcHJlc2VudChvdmVybGF5LCBcInN0YXR1c1wiKSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgb2ZfbWRpb2J1c19saXZlX25vZGVfaXNfYnVzeSh0YXJnZXQpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdGZvcl9lYWNoX2NoaWxkX29mX25vZGUob3ZlcmxheSwgb3ZlcmxheV9jaGlsZCkge1xuK1x0XHR0YXJnZXRfY2hpbGQgPSBvZl9tZGlvYnVzX292ZXJsYXlfdGFyZ2V0X2NoaWxkKHRhcmdldCxcbitcdFx0XHRcdFx0XHRcdCAgICAgICBvdmVybGF5X2NoaWxkKTtcbitcdFx0aWYgKCF0YXJnZXRfY2hpbGQpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGNoaWxkX2FkZGVkID0gb2Zfbm9kZV9jaGVja19mbGFnKHRhcmdldF9jaGlsZCwgT0ZfT1ZFUkxBWSk7XG4rXHRcdGJ1c3kgPSBvZl9tZGlvYnVzX292ZXJsYXlfbm9kZV9pc19idXN5KG92ZXJsYXlfY2hpbGQsXG4rXHRcdFx0XHRcdFx0ICAgICAgIHRhcmdldF9jaGlsZCwgY2hpbGRfYWRkZWQpO1xuK1x0XHRvZl9ub2RlX3B1dCh0YXJnZXRfY2hpbGQpO1xuK1x0XHRpZiAoYnVzeSkge1xuK1x0XHRcdG9mX25vZGVfcHV0KG92ZXJsYXlfY2hpbGQpO1xuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb2ZfbWRpb2J1c19vdmVybGF5X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuK1x0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqYXJnKVxuK3tcbitcdHN0cnVjdCBvZl9vdmVybGF5X25vdGlmeV9kYXRhICpuZCA9IGFyZztcbitcdGJvb2wgYnVzeTtcbitcbitcdGlmIChhY3Rpb24gIT0gT0ZfT1ZFUkxBWV9QUkVfUkVNT1ZFKVxuK1x0XHRyZXR1cm4gTk9USUZZX09LO1xuK1xuK1x0b2ZfbWRpb19yZWNvbmZpZ19sb2NrKCk7XG4rXHRidXN5ID0gb2ZfbWRpb2J1c19vdmVybGF5X25vZGVfaXNfYnVzeShuZC1cdTAwM2VvdmVybGF5LCBuZC1cdTAwM2V0YXJnZXQsXG4rXHRcdFx0XHRcdCAgICAgICBmYWxzZSk7XG4rXHRvZl9tZGlvX3JlY29uZmlnX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIGJ1c3kgPyBub3RpZmllcl9mcm9tX2Vycm5vKC1FQlVTWSkgOiBOT1RJRllfT0s7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgb2ZfbWRpb19vdmVybGF5X25vdGlmaWVyID0ge1xuK1x0Lm5vdGlmaWVyX2NhbGwgPSBvZl9tZGlvYnVzX292ZXJsYXlfbm90aWZ5LFxuK307XG4rI2VuZGlmXG4rXG4rc3RhdGljIGludCBvZl9tZGlvYnVzX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbixcbitcdFx0XHQgICAgIHZvaWQgKmFyZylcbit7XG4rXHRzdHJ1Y3Qgb2ZfcmVjb25maWdfZGF0YSAqcmQgPSBhcmc7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnNjb3BlO1xuK1x0c3RydWN0IG1paV9idXMgKm1kaW87XG4rXHRlbnVtIG9mX3JlY29uZmlnX2NoYW5nZSBjaGFuZ2U7XG4rXHRib29sIHJlbW92aW5nO1xuK1x0aW50IHJjLCByZXQgPSBOT1RJRllfT0s7XG4rXG4rXHRvZl9tZGlvX3JlY29uZmlnX2xvY2soKTtcbitcdGNoYW5nZSA9IG9mX3JlY29uZmlnX2dldF9zdGF0ZV9jaGFuZ2UoYWN0aW9uLCByZCk7XG4rXHRzd2l0Y2ggKGNoYW5nZSkge1xuK1x0Y2FzZSBPRl9SRUNPTkZJR19DSEFOR0VfQUREOlxuK1x0XHQvKiBBIG5ld2VyIGNoYW5nZSBtYXkgaGF2ZSBtYWRlIHRoaXMgbm90aWZpY2F0aW9uIHN0YWxlLiAqL1xuK1x0XHRpZiAoIW9mX21kaW9idXNfbm9kZV9pc19hdmFpbGFibGUocmQtXHUwMDNlZG4pKVxuK1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbitcdFx0cmVtb3ZpbmcgPSBmYWxzZTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE9GX1JFQ09ORklHX0NIQU5HRV9SRU1PVkU6XG4rXHRcdC8qIEEgbmV3ZXIgY2hhbmdlIG1heSBoYXZlIG1hZGUgdGhpcyBub3RpZmljYXRpb24gc3RhbGUuICovXG4rXHRcdGlmIChvZl9tZGlvYnVzX25vZGVfaXNfYXZhaWxhYmxlKHJkLVx1MDAzZWRuKSlcbitcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4rXHRcdHJlbW92aW5nID0gdHJ1ZTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXHR9XG4rXG4rXHRtZGlvID0gb2ZfbWRpb2J1c19maW5kX3BhcmVudChyZC1cdTAwM2Vkbik7XG4rXHRpZiAoIW1kaW8pXG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcbitcdHJjID0gbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKG1kaW8sIHJlbW92aW5nKTtcbitcdGlmIChyYykge1xuK1x0XHRpZiAoIXJlbW92aW5nKVxuK1x0XHRcdHJldCA9IG5vdGlmaWVyX2Zyb21fZXJybm8oLUVQUk9CRV9ERUZFUik7XG4rXHRcdGdvdG8gb3V0X3B1dF9tZGlvO1xuK1x0fVxuK1xuK1x0aWYgKCFyZW1vdmluZykge1xuK1x0XHRyYyA9IG9mX21kaW9idXNfYWRkX25vZGUobWRpbywgcmQtXHUwMDNlZG4pO1xuK1x0fSBlbHNlIHtcbitcdFx0LyogVGhlIG5vZGUgbWF5IGFscmVhZHkgYmUgZGV0YWNoZWQgZnJvbSBpdHMgcGFyZW50IGhpZXJhcmNoeS4gKi9cbitcdFx0c2NvcGUgPSBvZl9tZGlvYnVzX2dldF9yZW1vdmFsX3Njb3BlKHJkLVx1MDAzZWRuKTtcbitcdFx0aWYgKG9mX21kaW9idXNfbm9kZV9pc19idXN5KG1kaW8sIHNjb3BlKSlcbitcdFx0XHRyYyA9IC1FQlVTWTtcbitcdFx0ZWxzZVxuK1x0XHRcdHJjID0gb2ZfbWRpb2J1c19yZW1vdmVfbm9kZShtZGlvLCByZC1cdTAwM2Vkbik7XG4rXHRcdG9mX25vZGVfcHV0KHNjb3BlKTtcbitcdH1cbitcbitcdG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmQobWRpbywgcmVtb3ZpbmcpO1xuK1x0aWYgKHJjIFx1MDAyNlx1MDAyNiAocmVtb3ZpbmcgfHwgcmMgIT0gLUVOT0RFVikpXG4rXHRcdHJldCA9IG5vdGlmaWVyX2Zyb21fZXJybm8ocmMpO1xuK1xuK291dF9wdXRfbWRpbzpcbitcdHB1dF9kZXZpY2UoXHUwMDI2bWRpby1cdTAwM2VkZXYpO1xuK291dF91bmxvY2s6XG4rXHRvZl9tZGlvX3JlY29uZmlnX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBvZl9tZGlvX25vdGlmaWVyID0ge1xuK1x0Lm5vdGlmaWVyX2NhbGwgPSBvZl9tZGlvYnVzX25vdGlmeSxcbit9O1xuK1xuK3N0YXRpYyBpbnQgX19pbml0IG9mX21kaW9faW5pdCh2b2lkKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBvZl9yZWNvbmZpZ19ub3RpZmllcl9yZWdpc3RlcihcdTAwMjZvZl9tZGlvX25vdGlmaWVyKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX09GX09WRVJMQVkpXG4rXHRyZXQgPSBvZl9vdmVybGF5X25vdGlmaWVyX3JlZ2lzdGVyKFx1MDAyNm9mX21kaW9fb3ZlcmxheV9ub3RpZmllcik7XG4rXHRpZiAocmV0KVxuK1x0XHRvZl9yZWNvbmZpZ19ub3RpZmllcl91bnJlZ2lzdGVyKFx1MDAyNm9mX21kaW9fbm90aWZpZXIpO1xuKyNlbmRpZlxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rbW9kdWxlX2luaXQob2ZfbWRpb19pbml0KTtcbitcbitzdGF0aWMgdm9pZCBfX2V4aXQgb2ZfbWRpb19leGl0KHZvaWQpXG4re1xuKyNpZiBJU19FTkFCTEVEKENPTkZJR19PRl9PVkVSTEFZKVxuK1x0b2Zfb3ZlcmxheV9ub3RpZmllcl91bnJlZ2lzdGVyKFx1MDAyNm9mX21kaW9fb3ZlcmxheV9ub3RpZmllcik7XG4rI2VuZGlmXG4rXHRvZl9yZWNvbmZpZ19ub3RpZmllcl91bnJlZ2lzdGVyKFx1MDAyNm9mX21kaW9fbm90aWZpZXIpO1xuK31cbittb2R1bGVfZXhpdChvZl9tZGlvX2V4aXQpO1xuKyNlbmRpZiAvKiBDT05GSUdfT0ZfRFlOQU1JQyAqL1xuK1xuIC8qKlxuICAqIG9mX21kaW9fZmluZF9kZXZpY2UgLSBHaXZlbiBhIGRldmljZSB0cmVlIG5vZGUsIGZpbmQgdGhlIG1kaW9fZGV2aWNlXG4gICogQG5wOiBwb2ludGVyIHRvIHRoZSBtZGlvX2RldmljZSdzIGRldmljZSB0cmVlIG5vZGVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYyBiL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jXG5pbmRleCAwMGQwZTQxNTllOWJiLi5mNDVjOTM2ZmU1YWE5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jXG5AQCAtMzQsNyArMzQsOCBAQCBzdGF0aWMgc3RydWN0IG1kaW9fZGV2aWNlICptZGlvYnVzX2ZpbmRfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyKVxuIFx0aWYgKFdBUk5fT05DRSghYWRkcl92YWxpZCwgXCJhZGRyICVkIG91dCBvZiByYW5nZVxcblwiLCBhZGRyKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRyZXR1cm4gYnVzLVx1MDAzZW1kaW9fbWFwW2FkZHJdO1xuK1x0LyogUGFpciB3aXRoIG1hcCBwdWJsaWNhdGlvbiBpbiBtZGlvYnVzX3JlZ2lzdGVyX2RldmljZSgpLiAqL1xuK1x0cmV0dXJuIHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwW2FkZHJdKTtcbiB9XG4gXG4gc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfZ2V0X3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcbkBAIC01NCw3ICs1NSwxNiBAQCBFWFBPUlRfU1lNQk9MKG1kaW9idXNfZ2V0X3BoeSk7XG4gXG4gYm9vbCBtZGlvYnVzX2lzX3JlZ2lzdGVyZWRfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyKVxuIHtcbi1cdHJldHVybiBtZGlvYnVzX2ZpbmRfZGV2aWNlKGJ1cywgYWRkcikgIT0gTlVMTDtcbitcdGJvb2wgYWRkcl92YWxpZCA9IGFkZHIgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBhZGRyIFx1MDAzYyBBUlJBWV9TSVpFKGJ1cy1cdTAwM2VtZGlvX21hcCk7XG4rXHRib29sIHJlZ2lzdGVyZWQ7XG4rXG4rXHRpZiAoV0FSTl9PTkNFKCFhZGRyX3ZhbGlkLCBcImFkZHIgJWQgb3V0IG9mIHJhbmdlXFxuXCIsIGFkZHIpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZWdpc3RlcmVkID0gUkVBRF9PTkNFKGJ1cy1cdTAwM2VtZGlvX21hcFthZGRyXSkgfHxcbitcdFx0ICAgICAoUkVBRF9PTkNFKGJ1cy1cdTAwM2VtZGlvX21hcF9wZW5kaW5nKSBcdTAwMjYgQklUKGFkZHIpKTtcbitcbitcdHJldHVybiByZWdpc3RlcmVkO1xuIH1cbiBFWFBPUlRfU1lNQk9MKG1kaW9idXNfaXNfcmVnaXN0ZXJlZF9kZXZpY2UpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jIGIvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmNcbmluZGV4IGNlM2E2MDdhNDBjYjAuLmRmODAxMjVlZWVjNDUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmNcbkBAIC0zMzAsNiArMzMwLDkgQEAgc3RydWN0IG1paV9idXMgKm1kaW9idXNfYWxsb2Nfc2l6ZShzaXplX3Qgc2l6ZSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRidXMtXHUwMDNlc3RhdGUgPSBNRElPQlVTX0FMTE9DQVRFRDtcbitcdG11dGV4X2luaXQoXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuK1x0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfd2FpdCk7XG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfcmV0aXJlZCk7XG4gXHRpZiAoc2l6ZSlcbiBcdFx0YnVzLVx1MDAzZXByaXYgPSAodm9pZCAqKWJ1cyArIGFsaWduZWRfc2l6ZTtcbiBcbkBAIC0zNTUsMTAgKzM1OCw5IEBAIHN0YXRpYyBpbnQgb2ZfbWRpb2J1c19maW5kX3BoeShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldixcbiBcdFx0XHQgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpucClcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkO1xuK1x0aW50IGFkZHIsIHJldDtcbiBcbiBcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKG5wLCBjaGlsZCkge1xuLVx0XHRpbnQgYWRkcjtcbi1cbiBcdFx0aWYgKG9mX25vZGVfbmFtZV9lcShjaGlsZCwgXCJldGhlcm5ldC1waHktcGFja2FnZVwiKSkge1xuIFx0XHRcdC8qIFZhbGlkYXRlIFBIWSBwYWNrYWdlIHJlZyBwcmVzZW5jZSAqL1xuIFx0XHRcdGlmICghb2ZfcHJvcGVydHlfcHJlc2VudChjaGlsZCwgXCJyZWdcIikpIHtcbkBAIC0zNjYsMTIgKzM2OCwxMyBAQCBzdGF0aWMgaW50IG9mX21kaW9idXNfZmluZF9waHkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHR9XG4gXG4tXHRcdFx0aWYgKCFvZl9tZGlvYnVzX2ZpbmRfcGh5KGRldiwgbWRpb2RldiwgY2hpbGQpKSB7XG4rXHRcdFx0cmV0ID0gb2ZfbWRpb2J1c19maW5kX3BoeShkZXYsIG1kaW9kZXYsIGNoaWxkKTtcbitcdFx0XHRpZiAocmV0ICE9IC1FTk9ERVYpIHtcbiBcdFx0XHRcdC8qIFRoZSByZWZjb3VudCBmb3IgdGhlIFBIWSBwYWNrYWdlIHdpbGwgYmVcbiBcdFx0XHRcdCAqIGluY3JlbWVudGVkIGxhdGVyIHdoZW4gUEhZIGpvaW4gdGhlIFBhY2thZ2UuXG4gXHRcdFx0XHQgKi9cbiBcdFx0XHRcdG9mX25vZGVfcHV0KGNoaWxkKTtcbi1cdFx0XHRcdHJldHVybiAwO1xuK1x0XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0XHR9XG4gXG4gXHRcdFx0Y29udGludWU7XG5AQCAtMzgyLDYgKzM4NSwxMSBAQCBzdGF0aWMgaW50IG9mX21kaW9idXNfZmluZF9waHkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChhZGRyID09IG1kaW9kZXYtXHUwMDNlYWRkcikge1xuK1x0XHRcdGlmIChvZl9ub2RlX3Rlc3RfYW5kX3NldF9mbGFnKGNoaWxkLCBPRl9QT1BVTEFURUQpKSB7XG4rXHRcdFx0XHRvZl9ub2RlX3B1dChjaGlsZCk7XG4rXHRcdFx0XHRyZXR1cm4gLUVCVVNZO1xuK1x0XHRcdH1cbitcbiBcdFx0XHRkZXZpY2Vfc2V0X25vZGUoZGV2LCBvZl9md25vZGVfaGFuZGxlKGNoaWxkKSk7XG4gXHRcdFx0LyogVGhlIHJlZmNvdW50IG9uIFwiY2hpbGRcIiBpcyBwYXNzZWQgdG8gdGhlIG1kaW9cbiBcdFx0XHQgKiBkZXZpY2UuIERvIF9ub3RfIHVzZSBvZl9ub2RlX3B1dChjaGlsZCkgaGVyZS5cbkBAIC0zOTMsMjIgKzQwMSwyNiBAQCBzdGF0aWMgaW50IG9mX21kaW9idXNfZmluZF9waHkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYsXG4gXHRyZXR1cm4gLUVOT0RFVjtcbiB9XG4gXG4tc3RhdGljIHZvaWQgb2ZfbWRpb2J1c19saW5rX21kaW9kZXYoc3RydWN0IG1paV9idXMgKmJ1cyxcbi1cdFx0XHRcdCAgICBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4rc3RhdGljIGludCBvZl9tZGlvYnVzX2xpbmtfbWRpb2RldihzdHJ1Y3QgbWlpX2J1cyAqYnVzLFxuK1x0XHRcdFx0ICAgc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2O1xuIFxuIFx0aWYgKGRldi1cdTAwM2VvZl9ub2RlIHx8ICFidXMtXHUwMDNlZGV2Lm9mX25vZGUpXG4tXHRcdHJldHVybjtcbitcdFx0cmV0dXJuIDA7XG4gXG4tXHRvZl9tZGlvYnVzX2ZpbmRfcGh5KGRldiwgbWRpb2RldiwgYnVzLVx1MDAzZWRldi5vZl9ub2RlKTtcbitcdHJldHVybiBvZl9tZGlvYnVzX2ZpbmRfcGh5KGRldiwgbWRpb2RldiwgYnVzLVx1MDAzZWRldi5vZl9ub2RlKTtcbiB9XG4gI2VuZGlmXG4gXG4tc3RhdGljIHN0cnVjdCBwaHlfZGV2aWNlICptZGlvYnVzX3NjYW4oc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgYzQ1KVxuK3N0YXRpYyBzdHJ1Y3QgcGh5X2RldmljZSAqX19tZGlvYnVzX3NjYW4oc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsXG4rXHRcdFx0XHRcdCBib29sIGM0NSlcbiB7XG4gXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gRVJSX1BUUigtRU5PREVWKTtcbiBcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGU7XG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX09GX01ESU8pXG4rXHRib29sIG9mX25vZGVfcG9wdWxhdGVkID0gZmFsc2U7XG4rI2VuZGlmXG4gXHRjaGFyIG5vZGVfbmFtZVsxNl07XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTQyMCw3ICs0MzIsMTIgQEAgc3RhdGljIHN0cnVjdCBwaHlfZGV2aWNlICptZGlvYnVzX3NjYW4oc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgYzQ1KVxuIFx0LyogRm9yIERULCBzZWUgaWYgdGhlIGF1dG8tcHJvYmVkIHBoeSBoYXMgYSBjb3JyZXNwb25kaW5nIGNoaWxkXG4gXHQgKiBpbiB0aGUgYnVzIG5vZGUsIGFuZCBzZXQgdGhlIG9mX25vZGUgcG9pbnRlciBpbiB0aGlzIGNhc2UuXG4gXHQgKi9cbi1cdG9mX21kaW9idXNfbGlua19tZGlvZGV2KGJ1cywgXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8pO1xuK1x0ZXJyID0gb2ZfbWRpb2J1c19saW5rX21kaW9kZXYoYnVzLCBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbyk7XG4rXHRpZiAoZXJyID09IC1FQlVTWSkge1xuK1x0XHRwaHlfZGV2aWNlX2ZyZWUocGh5ZGV2KTtcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XG4rXHR9XG4rXHRvZl9ub2RlX3BvcHVsYXRlZCA9ICEhcGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XG4gI2VuZGlmXG4gXG4gXHQvKiBTZWFyY2ggZm9yIGEgc3dub2RlIGZvciB0aGUgcGh5IGluIHRoZSBzd25vZGUgaGllcmFyY2h5IG9mIHRoZSBidXMuXG5AQCAtNDM3LDYgKzQ1NCwxMSBAQCBzdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBjNDUpXG4gXG4gXHRlcnIgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeWRldik7XG4gXHRpZiAoZXJyKSB7XG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX09GX01ESU8pXG4rXHRcdGlmIChvZl9ub2RlX3BvcHVsYXRlZClcbitcdFx0XHRvZl9ub2RlX2NsZWFyX2ZsYWcocGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGUsXG4rXHRcdFx0XHRcdCAgIE9GX1BPUFVMQVRFRCk7XG4rI2VuZGlmXG4gXHRcdHBoeV9kZXZpY2VfZnJlZShwaHlkZXYpO1xuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcbiBcdH1cbkBAIC00NTgsNyArNDgwLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RldmljZSAqbWRpb2J1c19zY2FuKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGM0NSlcbiAgKi9cbiBzdHJ1Y3QgcGh5X2RldmljZSAqbWRpb2J1c19zY2FuX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcbiB7XG4tXHRyZXR1cm4gbWRpb2J1c19zY2FuKGJ1cywgYWRkciwgZmFsc2UpO1xuK1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4oYnVzLCBmYWxzZSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuK1xuK1x0cGh5ZGV2ID0gX19tZGlvYnVzX3NjYW4oYnVzLCBhZGRyLCBmYWxzZSk7XG4rXHRtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kKGJ1cywgZmFsc2UpO1xuK1xuK1x0cmV0dXJuIHBoeWRldjtcbiB9XG4gRVhQT1JUX1NZTUJPTChtZGlvYnVzX3NjYW5fYzIyKTtcbiBcbkBAIC00NzYsNyArNTA4LDcgQEAgRVhQT1JUX1NZTUJPTChtZGlvYnVzX3NjYW5fYzIyKTtcbiAgKi9cbiBzdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2Nhbl9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXG4ge1xuLVx0cmV0dXJuIG1kaW9idXNfc2NhbihidXMsIGFkZHIsIHRydWUpO1xuK1x0cmV0dXJuIF9fbWRpb2J1c19zY2FuKGJ1cywgYWRkciwgdHJ1ZSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbWRpb2J1c19zY2FuX2J1c19jMjIoc3RydWN0IG1paV9idXMgKmJ1cylcbkBAIC00ODcsNyArNTE5LDcgQEAgc3RhdGljIGludCBtZGlvYnVzX3NjYW5fYnVzX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxuIFx0XHRpZiAoKGJ1cy1cdTAwM2VwaHlfbWFzayBcdTAwMjYgQklUKGkpKSA9PSAwKSB7XG4gXHRcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbiBcbi1cdFx0XHRwaHlkZXYgPSBtZGlvYnVzX3NjYW5fYzIyKGJ1cywgaSk7XG4rXHRcdFx0cGh5ZGV2ID0gX19tZGlvYnVzX3NjYW4oYnVzLCBpLCBmYWxzZSk7XG4gXHRcdFx0aWYgKElTX0VSUihwaHlkZXYpIFx1MDAyNlx1MDAyNiAoUFRSX0VSUihwaHlkZXYpICE9IC1FTk9ERVYpKVxuIFx0XHRcdFx0cmV0dXJuIFBUUl9FUlIocGh5ZGV2KTtcbiBcdFx0fVxuQEAgLTUwNCw3ICs1MzYsNyBAQCBzdGF0aWMgaW50IG1kaW9idXNfc2Nhbl9idXNfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMpXG4gXHRcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbiBcbiBcdFx0XHQvKiBEb24ndCBzY2FuIEM0NSBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBDMjIgZGV2aWNlICovXG4tXHRcdFx0aWYgKGJ1cy1cdTAwM2VtZGlvX21hcFtpXSlcbitcdFx0XHRpZiAobWRpb2J1c19pc19yZWdpc3RlcmVkX2RldmljZShidXMsIGkpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0cGh5ZGV2ID0gbWRpb2J1c19zY2FuX2M0NShidXMsIGkpO1xuQEAgLTUzNiw2ICs1NjgsNDQgQEAgc3RhdGljIGJvb2wgbWRpb2J1c19wcmV2ZW50X2M0NV9zY2FuKHN0cnVjdCBtaWlfYnVzICpidXMpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG1kaW9idXNfc3RvcF9kZXZpY2VfY2hhbmdlcyhzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxuK3tcbitcdG11dGV4X2xvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuK1x0YnVzLVx1MDAzZXN0YXRlID0gTURJT0JVU19VTlJFR0lTVEVSSU5HO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbitcbitcdHdhaXRfZXZlbnQoYnVzLVx1MDAzZW1kaW9fbWFwX3dhaXQsICFSRUFEX09OQ0UoYnVzLVx1MDAzZW1kaW9fbWFwX29wcykpO1xuK31cbitcbitzdGF0aWMgdm9pZCBtZGlvYnVzX3JlbW92ZV9kZXZpY2VzKHN0cnVjdCBtaWlfYnVzICpidXMpXG4re1xuK1x0TElTVF9IRUFEKHJlbW92ZWQpO1xuK1x0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCAqbmV4dDtcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUEhZX01BWF9BRERSOyBpKyspIHtcbitcdFx0bWRpb2RldiA9IGJ1cy1cdTAwM2VtZGlvX21hcFtpXTtcbitcdFx0aWYgKCFtZGlvZGV2KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRtZGlvZGV2LVx1MDAzZWRldmljZV9yZW1vdmUobWRpb2Rldik7XG4rXHRcdG1kaW9kZXYtXHUwMDNlZGV2aWNlX2ZyZWUobWRpb2Rldik7XG4rXHR9XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbitcdGxpc3Rfc3BsaWNlX2luaXQoXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX3JldGlyZWQsIFx1MDAyNnJlbW92ZWQpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtZGlvZGV2LCBuZXh0LCBcdTAwMjZyZW1vdmVkLCByZXRpcmVkX25vZGUpIHtcbitcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZtZGlvZGV2LVx1MDAzZXJldGlyZWRfbm9kZSk7XG4rXHRcdG1kaW9fZGV2aWNlX3B1dChtZGlvZGV2KTtcbitcdH1cbitcbitcdG11dGV4X2xvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuK1x0YnVzLVx1MDAzZXN0YXRlID0gTURJT0JVU19VTlJFR0lTVEVSRUQ7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuK31cbitcbiAvKipcbiAgKiBfX21kaW9idXNfcmVnaXN0ZXIgLSBicmluZyB1cCBhbGwgdGhlIFBIWXMgb24gYSBnaXZlbiBidXMgYW5kIGF0dGFjaCB0aGVtIHRvIGJ1c1xuICAqIEBidXM6IHRhcmdldCBtaWlfYnVzXG5AQCAtNTUyLDEwICs2MjIsOSBAQCBzdGF0aWMgYm9vbCBtZGlvYnVzX3ByZXZlbnRfYzQ1X3NjYW4oc3RydWN0IG1paV9idXMgKmJ1cylcbiAgKi9cbiBpbnQgX19tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICpidXMsIHN0cnVjdCBtb2R1bGUgKm93bmVyKVxuIHtcbi1cdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldjtcbiBcdHN0cnVjdCBncGlvX2Rlc2MgKmdwaW9kO1xuIFx0Ym9vbCBwcmV2ZW50X2M0NV9zY2FuO1xuLVx0aW50IGksIGVycjtcbitcdGludCBlcnI7XG4gXG4gXHRpZiAoIWJ1cyB8fCAhYnVzLVx1MDAzZW5hbWUpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTU5Niw3ICs2NjUsOSBAQCBpbnQgX19tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICpidXMsIHN0cnVjdCBtb2R1bGUgKm93bmVyKVxuIFx0ICpcbiBcdCAqIFN0YXRlIHdpbGwgYmUgdXBkYXRlZCBsYXRlciBpbiB0aGlzIGZ1bmN0aW9uIGluIGNhc2Ugb2Ygc3VjY2Vzc1xuIFx0ICovXG4rXHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiBcdGJ1cy1cdTAwM2VzdGF0ZSA9IE1ESU9CVVNfVU5SRUdJU1RFUkVEO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiBcbiBcdGVyciA9IGRldmljZV9yZWdpc3RlcihcdTAwMjZidXMtXHUwMDNlZGV2KTtcbiBcdGlmIChlcnIpIHtcbkBAIC02MTMsOCArNjg0LDcgQEAgaW50IF9fbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBzdHJ1Y3QgbW9kdWxlICpvd25lcilcbiBcdFx0ZXJyID0gZGV2X2Vycl9wcm9iZShcdTAwMjZidXMtXHUwMDNlZGV2LCBQVFJfRVJSKGdwaW9kKSxcbiBcdFx0XHRcdCAgICBcIm1paV9idXMgJXMgY291bGRuJ3QgZ2V0IHJlc2V0IEdQSU9cXG5cIixcbiBcdFx0XHRcdCAgICBidXMtXHUwMDNlaWQpO1xuLVx0XHRkZXZpY2VfZGVsKFx1MDAyNmJ1cy1cdTAwM2VkZXYpO1xuLVx0XHRyZXR1cm4gZXJyO1xuK1x0XHRnb3RvIGVycm9yX3Jlc2V0X2dwaW9kO1xuIFx0fSBlbHNlXHRpZiAoZ3Bpb2QpIHtcbiBcdFx0YnVzLVx1MDAzZXJlc2V0X2dwaW9kID0gZ3Bpb2Q7XG4gXHRcdGZzbGVlcChidXMtXHUwMDNlcmVzZXRfZGVsYXlfdXMpO1xuQEAgLTYyOSw2ICs2OTksMTAgQEAgaW50IF9fbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBzdHJ1Y3QgbW9kdWxlICpvd25lcilcbiBcdFx0XHRnb3RvIGVycm9yX3Jlc2V0X2dwaW9kO1xuIFx0fVxuIFxuK1x0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4rXHRidXMtXHUwMDNlc3RhdGUgPSBNRElPQlVTX1JFR0lTVEVSSU5HO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbitcbiBcdGlmIChidXMtXHUwMDNlcmVhZCkge1xuIFx0XHRlcnIgPSBtZGlvYnVzX3NjYW5fYnVzX2MyMihidXMpO1xuIFx0XHRpZiAoZXJyKVxuQEAgLTY0MywyMCArNzE3LDE3IEBAIGludCBfX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cywgc3RydWN0IG1vZHVsZSAqb3duZXIpXG4gXHRcdFx0Z290byBlcnJvcjtcbiBcdH1cbiBcbitcdG11dGV4X2xvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuIFx0YnVzLVx1MDAzZXN0YXRlID0gTURJT0JVU19SRUdJU1RFUkVEO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiBcdGRldl9kYmcoXHUwMDI2YnVzLVx1MDAzZWRldiwgXCJwcm9iZWRcXG5cIik7XG4gXHRyZXR1cm4gMDtcbiBcbiBlcnJvcjpcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIFBIWV9NQVhfQUREUjsgaSsrKSB7XG4tXHRcdG1kaW9kZXYgPSBidXMtXHUwMDNlbWRpb19tYXBbaV07XG4tXHRcdGlmICghbWRpb2Rldilcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0bWRpb2Rldi1cdTAwM2VkZXZpY2VfcmVtb3ZlKG1kaW9kZXYpO1xuLVx0XHRtZGlvZGV2LVx1MDAzZWRldmljZV9mcmVlKG1kaW9kZXYpO1xuLVx0fVxuIGVycm9yX3Jlc2V0X2dwaW9kOlxuK1x0bWRpb2J1c19zdG9wX2RldmljZV9jaGFuZ2VzKGJ1cyk7XG4rXHRtZGlvYnVzX3JlbW92ZV9kZXZpY2VzKGJ1cyk7XG4rXG4gXHQvKiBQdXQgUEhZcyBpbiBSRVNFVCB0byBzYXZlIHBvd2VyICovXG4gXHRpZiAoYnVzLVx1MDAzZXJlc2V0X2dwaW9kKVxuIFx0XHRncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoYnVzLVx1MDAzZXJlc2V0X2dwaW9kLCAxKTtcbkBAIC02NjgsMjEgKzczOSwxMSBAQCBFWFBPUlRfU1lNQk9MKF9fbWRpb2J1c19yZWdpc3Rlcik7XG4gXG4gdm9pZCBtZGlvYnVzX3VucmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cylcbiB7XG4tXHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XG4tXHRpbnQgaTtcbi1cbiBcdGlmIChXQVJOX09OX09OQ0UoYnVzLVx1MDAzZXN0YXRlICE9IE1ESU9CVVNfUkVHSVNURVJFRCkpXG4gXHRcdHJldHVybjtcbi1cdGJ1cy1cdTAwM2VzdGF0ZSA9IE1ESU9CVVNfVU5SRUdJU1RFUkVEO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUEhZX01BWF9BRERSOyBpKyspIHtcbi1cdFx0bWRpb2RldiA9IGJ1cy1cdTAwM2VtZGlvX21hcFtpXTtcbi1cdFx0aWYgKCFtZGlvZGV2KVxuLVx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRtZGlvZGV2LVx1MDAzZWRldmljZV9yZW1vdmUobWRpb2Rldik7XG4tXHRcdG1kaW9kZXYtXHUwMDNlZGV2aWNlX2ZyZWUobWRpb2Rldik7XG4tXHR9XG4rXHRtZGlvYnVzX3N0b3BfZGV2aWNlX2NoYW5nZXMoYnVzKTtcbitcdG1kaW9idXNfcmVtb3ZlX2RldmljZXMoYnVzKTtcbiBcbiBcdC8qIFB1dCBQSFlzIGluIFJFU0VUIHRvIHNhdmUgcG93ZXIgKi9cbiBcdGlmIChidXMtXHUwMDNlcmVzZXRfZ3Bpb2QpXG5AQCAtNzAyLDggKzc2MywxMSBAQCBFWFBPUlRfU1lNQk9MKG1kaW9idXNfdW5yZWdpc3Rlcik7XG4gICovXG4gdm9pZCBtZGlvYnVzX2ZyZWUoc3RydWN0IG1paV9idXMgKmJ1cylcbiB7XG4rXHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbitcbiBcdC8qIEZvciBjb21wYXRpYmlsaXR5IHdpdGggZXJyb3IgaGFuZGxpbmcgaW4gZHJpdmVycy4gKi9cbiBcdGlmIChidXMtXHUwMDNlc3RhdGUgPT0gTURJT0JVU19BTExPQ0FURUQpIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiBcdFx0a2ZyZWUoYnVzKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuQEAgLTcxMSw2ICs3NzUsNyBAQCB2b2lkIG1kaW9idXNfZnJlZShzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxuIFx0V0FSTihidXMtXHUwMDNlc3RhdGUgIT0gTURJT0JVU19VTlJFR0lTVEVSRUQsXG4gXHQgICAgIFwiJXM6IG5vdCBpbiBVTlJFR0lTVEVSRUQgc3RhdGVcXG5cIiwgYnVzLVx1MDAzZWlkKTtcbiBcdGJ1cy1cdTAwM2VzdGF0ZSA9IE1ESU9CVVNfUkVMRUFTRUQ7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuIFxuIFx0cHV0X2RldmljZShcdTAwMjZidXMtXHUwMDNlZGV2KTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuY1xuaW5kZXggMDYxNTFmMjA3MTM0Ni4uM2IxOWU4MzE1ZjYxNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuY1xuQEAgLTE1LDYgKzE1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9taWkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmVzZXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuQEAgLTMzLDEyICszNCwxNiBAQFxuIHN0YXRpYyBpbnQgbWRpb19kZXZpY2VfcmVnaXN0ZXJfcmVzZXQoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuIHtcbiBcdHN0cnVjdCByZXNldF9jb250cm9sICpyZXNldDtcbitcdGludCBlcnI7XG4gXG4gXHQvKiBEZWFzc2VydCB0aGUgb3B0aW9uYWwgcmVzZXQgc2lnbmFsICovXG4gXHRtZGlvZGV2LVx1MDAzZXJlc2V0X2dwaW8gPSBncGlvZF9nZXRfb3B0aW9uYWwoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcdFx0IFwicmVzZXRcIiwgR1BJT0RfT1VUX0xPVyk7XG4tXHRpZiAoSVNfRVJSKG1kaW9kZXYtXHUwMDNlcmVzZXRfZ3BpbykpXG4tXHRcdHJldHVybiBQVFJfRVJSKG1kaW9kZXYtXHUwMDNlcmVzZXRfZ3Bpbyk7XG4rXHRpZiAoSVNfRVJSKG1kaW9kZXYtXHUwMDNlcmVzZXRfZ3BpbykpIHtcbitcdFx0ZXJyID0gUFRSX0VSUihtZGlvZGV2LVx1MDAzZXJlc2V0X2dwaW8pO1xuK1x0XHRtZGlvZGV2LVx1MDAzZXJlc2V0X2dwaW8gPSBOVUxMO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuIFxuIFx0aWYgKG1kaW9kZXYtXHUwMDNlcmVzZXRfZ3BpbylcbiBcdFx0Z3Bpb2Rfc2V0X2NvbnN1bWVyX25hbWUobWRpb2Rldi1cdTAwM2VyZXNldF9ncGlvLCBcIlBIWSByZXNldFwiKTtcbkBAIC0xMTYsNiArMTIxLDEzIEBAIHN0YXRpYyB2b2lkIG1kaW9fZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0a2ZyZWUodG9fbWRpb19kZXZpY2UoZGV2KSk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgX19tZGlvX2RldmljZV9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIGR5bmFtaWMpO1xuK1xuK3N0YXRpYyBpbnQgbWRpb19kZXZpY2VfcmVtb3ZlX2R5bmFtaWMoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuK3tcbitcdHJldHVybiBfX21kaW9fZGV2aWNlX3JlbW92ZShtZGlvZGV2LCB0cnVlKTtcbit9XG4rXG4gc3RydWN0IG1kaW9fZGV2aWNlICptZGlvX2RldmljZV9jcmVhdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXG4ge1xuIFx0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2O1xuQEAgLTEzMCw5ICsxNDIsMTEgQEAgc3RydWN0IG1kaW9fZGV2aWNlICptZGlvX2RldmljZV9jcmVhdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXG4gXHRtZGlvZGV2LVx1MDAzZWRldi5idXMgPSBcdTAwMjZtZGlvX2J1c190eXBlO1xuIFx0bWRpb2Rldi1cdTAwM2VkZXZpY2VfZnJlZSA9IG1kaW9fZGV2aWNlX2ZyZWU7XG4gXHRtZGlvZGV2LVx1MDAzZWRldmljZV9yZW1vdmUgPSBtZGlvX2RldmljZV9yZW1vdmU7XG4rXHRtZGlvZGV2LVx1MDAzZWRldmljZV9yZW1vdmVfZHluYW1pYyA9IG1kaW9fZGV2aWNlX3JlbW92ZV9keW5hbWljO1xuIFx0bWRpb2Rldi1cdTAwM2VidXMgPSBidXM7XG4gXHRtZGlvZGV2LVx1MDAzZWFkZHIgPSBhZGRyO1xuIFx0bWRpb2Rldi1cdTAwM2VyZXNldF9zdGF0ZSA9IC0xO1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bWRpb2Rldi1cdTAwM2VyZXRpcmVkX25vZGUpO1xuIFxuIFx0ZGV2X3NldF9uYW1lKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2LCBQSFlfSURfRk1ULCBidXMtXHUwMDNlaWQsIGFkZHIpO1xuIFxuQEAgLTE1OSwxOSArMTczLDI3IEBAIGludCBtZGlvX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHRlcnIgPSBkZXZpY2VfYWRkKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2KTtcbi1cdGlmIChlcnIpIHtcbitcdGlmIChlcnIpXG4gXHRcdHByX2VycihcIk1ESU8gJWQgZmFpbGVkIHRvIGFkZFxcblwiLCBtZGlvZGV2LVx1MDAzZWFkZHIpO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuIFxuLSBvdXQ6XG4tXHRtZGlvYnVzX3VucmVnaXN0ZXJfZGV2aWNlKG1kaW9kZXYpO1xuLVx0cmV0dXJuIGVycjtcbitcdHJldHVybiBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lKG1kaW9kZXYsIGVycik7XG4gfVxuIEVYUE9SVF9TWU1CT0wobWRpb19kZXZpY2VfcmVnaXN0ZXIpO1xuIFxuK3N0YXRpYyBpbnQgX19tZGlvX2RldmljZV9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIGR5bmFtaWMpXG4re1xuK1x0aW50IGVycjtcbitcbitcdGVyciA9IG1kaW9idXNfYmVnaW5fcmVtb3ZlKG1kaW9kZXYsIGR5bmFtaWMpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGRldmljZV9kZWwoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuK1x0bWRpb2J1c19maW5pc2hfcmVtb3ZlKG1kaW9kZXYsIGR5bmFtaWMpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qKlxuICAqIG1kaW9fZGV2aWNlX3JlbW92ZSAtIFJlbW92ZSBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBtZGlvIGRldmljZSBmcm9tIHRoZVxuICAqXHRcdFx0TURJTyBidXNcbkBAIC0xODMsNDIgKzIwNSwyMTEgQEAgRVhQT1JUX1NZTUJPTChtZGlvX2RldmljZV9yZWdpc3Rlcik7XG4gICovXG4gdm9pZCBtZGlvX2RldmljZV9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuIHtcbi1cdGRldmljZV9kZWwoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuLVx0bWRpb2J1c191bnJlZ2lzdGVyX2RldmljZShtZGlvZGV2KTtcbitcdF9fbWRpb19kZXZpY2VfcmVtb3ZlKG1kaW9kZXYsIGZhbHNlKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChtZGlvX2RldmljZV9yZW1vdmUpO1xuIFxuIGludCBtZGlvYnVzX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4ge1xuK1x0c3RydWN0IG1paV9idXMgKmJ1cyA9IG1kaW9kZXYtXHUwMDNlYnVzO1xuIFx0aW50IGVycjtcbiBcbi1cdGlmIChtZGlvZGV2LVx1MDAzZWJ1cy1cdTAwM2VtZGlvX21hcFttZGlvZGV2LVx1MDAzZWFkZHJdKVxuLVx0XHRyZXR1cm4gLUVCVVNZO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4rXHRpZiAoYnVzLVx1MDAzZXN0YXRlICE9IE1ESU9CVVNfUkVHSVNURVJJTkcgXHUwMDI2XHUwMDI2XG4rXHQgICAgYnVzLVx1MDAzZXN0YXRlICE9IE1ESU9CVVNfUkVHSVNURVJFRCkge1xuK1x0XHRlcnIgPSAtRU5PREVWO1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXHR9XG4rXHRpZiAoYnVzLVx1MDAzZW1kaW9fbWFwX3JlbW92YWxzKSB7XG4rXHRcdGVyciA9IC1FQlVTWTtcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0fVxuK1xuK1x0aWYgKGJ1cy1cdTAwM2VtZGlvX21hcFttZGlvZGV2LVx1MDAzZWFkZHJdIHx8XG4rXHQgICAgYnVzLVx1MDAzZW1kaW9fbWFwX3BlbmRpbmcgXHUwMDI2IEJJVChtZGlvZGV2LVx1MDAzZWFkZHIpKSB7XG4rXHRcdGVyciA9IC1FQlVTWTtcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuK1x0fVxuK1xuK1x0YnVzLVx1MDAzZW1kaW9fbWFwX3BlbmRpbmcgfD0gQklUKG1kaW9kZXYtXHUwMDNlYWRkcik7XG4rXHRidXMtXHUwMDNlbWRpb19tYXBfb3BzKys7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuIFxuIFx0aWYgKG1kaW9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IE1ESU9fREVWSUNFX0ZMQUdfUEhZKSB7XG4gXHRcdGVyciA9IG1kaW9fZGV2aWNlX3JlZ2lzdGVyX3Jlc2V0KG1kaW9kZXYpO1xuLVx0XHRpZiAoZXJyKVxuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0bWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZShtZGlvZGV2LCBlcnIpO1xuIFx0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbiBcbiBcdFx0LyogQXNzZXJ0IHRoZSByZXNldCBzaWduYWwgKi9cbiBcdFx0bWRpb19kZXZpY2VfcmVzZXQobWRpb2RldiwgMSk7XG4gXHR9XG4gXG4tXHRtZGlvZGV2LVx1MDAzZWJ1cy1cdTAwM2VtZGlvX21hcFttZGlvZGV2LVx1MDAzZWFkZHJdID0gbWRpb2RldjtcbitcdG11dGV4X2xvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuK1x0LyogVGVhcmRvd24gd2FpdHMgZm9yIHRoaXMgcmVnaXN0cmF0aW9uIGJlZm9yZSBjb25zdW1pbmcgdGhlIG1hcC4gKi9cbitcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcFttZGlvZGV2LVx1MDAzZWFkZHJdLCBtZGlvZGV2KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4gXG4gXHRyZXR1cm4gMDtcbitcbitvdXRfdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuLWludCBtZGlvYnVzX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbisvKipcbisgKiBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4gLSBzdGFydCBjaGFuZ2luZyBkZXZpY2VzIG9uIGEgcmVnaXN0ZXJlZCBidXNcbisgKiBAYnVzOiBNRElPIGJ1cyB0aGF0IHdpbGwgYmUgc2Nhbm5lZCBvciBjaGFuZ2VkXG4rICogQHJlbW92aW5nOiB3aGV0aGVyIFBIWSBhdHRhY2htZW50IG11c3QgYmUgYmxvY2tlZCBkdXJpbmcgdGhlIGNoYW5nZVxuKyAqXG4rICogUmV0dXJuOiB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIHdoZW4gdGhlIGJ1cyBpcyB1bmF2YWlsYWJsZVxuKyAqL1xuK2ludCBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4oc3RydWN0IG1paV9idXMgKmJ1cywgYm9vbCByZW1vdmluZylcbiB7XG4tXHRpZiAobWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19tYXBbbWRpb2Rldi1cdTAwM2VhZGRyXSAhPSBtZGlvZGV2KVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4rXHRpZiAoYnVzLVx1MDAzZXN0YXRlICE9IE1ESU9CVVNfUkVHSVNURVJFRCkge1xuK1x0XHRlcnIgPSAtRU5PREVWO1xuK1x0fSBlbHNlIHtcbitcdFx0YnVzLVx1MDAzZW1kaW9fbWFwX29wcysrO1xuK1x0XHRpZiAocmVtb3ZpbmcpXG4rXHRcdFx0YnVzLVx1MDAzZW1kaW9fbWFwX3JlbW92YWxzKys7XG4rXHR9XG4rXHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKTtcbiBcbi1cdG1kaW9fZGV2aWNlX3VucmVnaXN0ZXJfcmVzZXQobWRpb2Rldik7XG4rc3RhdGljIHZvaWQgbWRpb2J1c19vcGVyYXRpb25fZG9uZV9sb2NrZWQoc3RydWN0IG1paV9idXMgKmJ1cylcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbiBcbi1cdG1kaW9kZXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbWFwW21kaW9kZXYtXHUwMDNlYWRkcl0gPSBOVUxMO1xuK1x0aWYgKFdBUk5fT05fT05DRSghYnVzLVx1MDAzZW1kaW9fbWFwX29wcykpXG4rXHRcdHJldHVybjtcbitcdGJ1cy1cdTAwM2VtZGlvX21hcF9vcHMtLTtcbitcdGlmICghYnVzLVx1MDAzZW1kaW9fbWFwX29wcylcbitcdFx0d2FrZV91cF9hbGwoXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX3dhaXQpO1xuK31cbiBcbi1cdHJldHVybiAwO1xuKy8qKlxuKyAqIG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmQgLSBmaW5pc2ggY2hhbmdpbmcgZGV2aWNlcyBvbiBhbiBNRElPIGJ1c1xuKyAqIEBidXM6IE1ESU8gYnVzIHByZXZpb3VzbHkgcGFzc2VkIHRvIG1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbigpXG4rICogQHJlbW92aW5nOiB2YWx1ZSBwYXNzZWQgdG8gbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKClcbisgKi9cbit2b2lkIG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmQoc3RydWN0IG1paV9idXMgKmJ1cywgYm9vbCByZW1vdmluZylcbit7XG4rXHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbitcdGlmIChyZW1vdmluZykge1xuK1x0XHRpZiAoIVdBUk5fT05fT05DRSghYnVzLVx1MDAzZW1kaW9fbWFwX3JlbW92YWxzKSlcbitcdFx0XHRidXMtXHUwMDNlbWRpb19tYXBfcmVtb3ZhbHMtLTtcbitcdH1cbitcdG1kaW9idXNfb3BlcmF0aW9uX2RvbmVfbG9ja2VkKGJ1cyk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kKTtcbitcbitzdGF0aWMgdm9pZCBtZGlvYnVzX29wZXJhdGlvbl9kb25lKHN0cnVjdCBtaWlfYnVzICpidXMpXG4re1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4rXHRtZGlvYnVzX29wZXJhdGlvbl9kb25lX2xvY2tlZChidXMpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWRpb2J1c191bnB1Ymxpc2hfZGV2aWNlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldilcbit7XG4rXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpb2Rldi1cdTAwM2VidXM7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbitcbitcdGlmIChidXMtXHUwMDNlbWRpb19tYXBbbWRpb2Rldi1cdTAwM2VhZGRyXSA9PSBtZGlvZGV2KVxuK1x0XHRXUklURV9PTkNFKGJ1cy1cdTAwM2VtZGlvX21hcFttZGlvZGV2LVx1MDAzZWFkZHJdLCBOVUxMKTtcbitcdGlmIChtZGlvZGV2LVx1MDAzZWRldi5vZl9ub2RlKVxuK1x0XHRvZl9ub2RlX2NsZWFyX2ZsYWcobWRpb2Rldi1cdTAwM2VkZXYub2Zfbm9kZSwgT0ZfUE9QVUxBVEVEKTtcbit9XG4rXG4raW50IG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBpbnQgZXJyKVxuK3tcbitcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBtZGlvZGV2LVx1MDAzZWJ1cztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuK1x0aWYgKFdBUk5fT05fT05DRSghKGJ1cy1cdTAwM2VtZGlvX21hcF9wZW5kaW5nIFx1MDAyNiBCSVQobWRpb2Rldi1cdTAwM2VhZGRyKSkpKVxuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXG4rXHRpZiAoZXJyKVxuK1x0XHRtZGlvYnVzX3VucHVibGlzaF9kZXZpY2UobWRpb2Rldik7XG4rXHRlbHNlXG4rXHRcdFdBUk5fT05fT05DRShidXMtXHUwMDNlbWRpb19tYXBbbWRpb2Rldi1cdTAwM2VhZGRyXSAhPSBtZGlvZGV2KTtcbitcbitcdGJ1cy1cdTAwM2VtZGlvX21hcF9wZW5kaW5nIFx1MDAyNj0gfkJJVChtZGlvZGV2LVx1MDAzZWFkZHIpO1xuK1xuK291dF91bmxvY2s6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuK1x0aWYgKGVycikge1xuK1x0XHRpZiAobWRpb2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgTURJT19ERVZJQ0VfRkxBR19QSFkpIHtcbitcdFx0XHRtZGlvX2RldmljZV9yZXNldChtZGlvZGV2LCAxKTtcbitcdFx0XHRtZGlvX2RldmljZV91bnJlZ2lzdGVyX3Jlc2V0KG1kaW9kZXYpO1xuK1x0XHR9XG4rXHR9XG4rXHRtZGlvYnVzX29wZXJhdGlvbl9kb25lKGJ1cyk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgbWRpb2J1c19iZWdpbl9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIGR5bmFtaWMpXG4re1xuK1x0c3RydWN0IG1paV9idXMgKmJ1cyA9IG1kaW9kZXYtXHUwMDNlYnVzO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbitcdGlmIChkeW5hbWljIFx1MDAyNlx1MDAyNiAoYnVzLVx1MDAzZXN0YXRlID09IE1ESU9CVVNfVU5SRUdJU1RFUkVEIHx8XG4rXHRcdFx0YnVzLVx1MDAzZXN0YXRlID09IE1ESU9CVVNfUkVMRUFTRUQpKSB7XG4rXHRcdGVyciA9IC1FTk9ERVY7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcdGlmIChidXMtXHUwMDNlbWRpb19tYXBfcGVuZGluZyBcdTAwMjYgQklUKG1kaW9kZXYtXHUwMDNlYWRkcikpIHtcbitcdFx0ZXJyID0gLUVCVVNZO1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXHR9XG4rXG4rXHRpZiAoYnVzLVx1MDAzZW1kaW9fbWFwW21kaW9kZXYtXHUwMDNlYWRkcl0gIT0gbWRpb2Rldikge1xuK1x0XHRlcnIgPSAtRU5PREVWO1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXHR9XG4rXG4rXHRpZiAoZHluYW1pYyBcdTAwMjZcdTAwMjYgbWRpb2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgTURJT19ERVZJQ0VfRkxBR19QSFkgXHUwMDI2XHUwMDI2XG4rXHQgICAgdG9fcGh5X2RldmljZShcdTAwMjZtZGlvZGV2LVx1MDAzZWRldiktXHUwMDNlYXR0YWNoZWQpIHtcbitcdFx0ZXJyID0gLUVCVVNZO1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4rXHR9XG4rXG4rXHRtZGlvYnVzX3VucHVibGlzaF9kZXZpY2UobWRpb2Rldik7XG4rXG4rXHRpZiAoZHluYW1pYykge1xuK1x0XHRtZGlvX2RldmljZV9nZXQobWRpb2Rldik7XG4rXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2bWRpb2Rldi1cdTAwM2VyZXRpcmVkX25vZGUsIFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9yZXRpcmVkKTtcbitcdH1cbitcbitvdXRfdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3ZvaWQgbWRpb2J1c19maW5pc2hfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKVxuK3tcbitcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGU7XG4rXG4rXHRpZiAobWRpb2Rldi1cdTAwM2VmbGFncyBcdTAwMjYgTURJT19ERVZJQ0VfRkxBR19QSFkpXG4rXHRcdG1kaW9fZGV2aWNlX3VucmVnaXN0ZXJfcmVzZXQobWRpb2Rldik7XG4rXG4rXHQvKiBEbyBub3Qga2VlcCBhbiBvdmVybGF5IG5vZGUgYWxpdmUgd2l0aCB0aGUgcmV0aXJlZCBkZXZpY2UuICovXG4rXHRpZiAoZHluYW1pYykge1xuK1x0XHRmd25vZGUgPSBkZXZfZndub2RlKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2KTtcbitcdFx0ZGV2aWNlX3NldF9ub2RlKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2LCBOVUxMKTtcbitcdFx0Zndub2RlX2hhbmRsZV9wdXQoZndub2RlKTtcbitcdH1cbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcbmluZGV4IDk0YjJlODVlMDBhMzcuLjNiMTgyOTU3YzNkZTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5AQCAtMjI3LDYgKzIyNyw4IEBAIHN0YXRpYyB2b2lkIHBoeV9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRrZnJlZSh0b19waHlfZGV2aWNlKGRldikpO1xuIH1cbiBcbitzdGF0aWMgaW50IF9fcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBkeW5hbWljKTtcbitcbiBzdGF0aWMgdm9pZCBwaHlfbWRpb19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbiB7XG4gXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuQEAgLTIzNSw2ICsyMzcsMTQgQEAgc3RhdGljIHZvaWQgcGh5X21kaW9fZGV2aWNlX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4gXHRwaHlfZGV2aWNlX3JlbW92ZShwaHlkZXYpO1xuIH1cbiBcbitzdGF0aWMgaW50IHBoeV9tZGlvX2RldmljZV9yZW1vdmVfZHluYW1pYyhzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4re1xuK1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbitcbitcdHBoeWRldiA9IGNvbnRhaW5lcl9vZihtZGlvZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSwgbWRpbyk7XG4rXHRyZXR1cm4gX19waHlfZGV2aWNlX3JlbW92ZShwaHlkZXYsIHRydWUpO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZ2VucGh5X2RyaXZlcjtcbiBcbiBzdGF0aWMgTElTVF9IRUFEKHBoeV9maXh1cF9saXN0KTtcbkBAIC03NjgsNyArNzc4LDkgQEAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCB1MzIgcGh5X2lkLFxuIFx0bWRpb2Rldi1cdTAwM2VmbGFncyA9IE1ESU9fREVWSUNFX0ZMQUdfUEhZO1xuIFx0bWRpb2Rldi1cdTAwM2VkZXZpY2VfZnJlZSA9IHBoeV9tZGlvX2RldmljZV9mcmVlO1xuIFx0bWRpb2Rldi1cdTAwM2VkZXZpY2VfcmVtb3ZlID0gcGh5X21kaW9fZGV2aWNlX3JlbW92ZTtcbitcdG1kaW9kZXYtXHUwMDNlZGV2aWNlX3JlbW92ZV9keW5hbWljID0gcGh5X21kaW9fZGV2aWNlX3JlbW92ZV9keW5hbWljO1xuIFx0bWRpb2Rldi1cdTAwM2VyZXNldF9zdGF0ZSA9IC0xO1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bWRpb2Rldi1cdTAwM2VyZXRpcmVkX25vZGUpO1xuIFxuIFx0ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcbiBcdGRldi1cdTAwM2VkdXBsZXggPSBEVVBMRVhfVU5LTk9XTjtcbkBAIC0xMTIxLDI1ICsxMTMzLDQwIEBAIGludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRlcnIgPSBwaHlfc2Nhbl9maXh1cHMocGh5ZGV2KTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0cGh5ZGV2X2VycihwaHlkZXYsIFwiZmFpbGVkIHRvIGluaXRpYWxpemVcXG5cIik7XG4tXHRcdGdvdG8gb3V0O1xuK1x0XHRyZXR1cm4gbWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbywgZXJyKTtcbiBcdH1cbiBcbiBcdGVyciA9IGRldmljZV9hZGQoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbi1cdGlmIChlcnIpIHtcbitcdGlmIChlcnIpXG4gXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcImZhaWxlZCB0byBhZGRcXG5cIik7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuIFxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gbWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbywgZXJyKTtcbit9XG4rRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTtcbitcbitzdGF0aWMgaW50IF9fcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBkeW5hbWljKVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBtZGlvYnVzX2JlZ2luX3JlbW92ZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbywgZHluYW1pYyk7XG4rXHRpZiAoZHluYW1pYyBcdTAwMjZcdTAwMjYgZXJyID09IC1FQlVTWSlcbitcdFx0ZGV2X3dhcm4oXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LFxuK1x0XHRcdCBcImNhbm5vdCByZW1vdmUgYSBQSFkgd2hpbGUgaXQgaXMgYXR0YWNoZWQgb3IgYmVpbmcgcmVnaXN0ZXJlZFxcblwiKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHR1bnJlZ2lzdGVyX21paV90aW1lc3RhbXBlcihwaHlkZXYtXHUwMDNlbWlpX3RzKTtcbitcdHBzZV9jb250cm9sX3B1dChwaHlkZXYtXHUwMDNlcHNlYyk7XG4rXG4rXHRkZXZpY2VfZGVsKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldik7XG4gXG4tIG91dDpcbiBcdC8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovXG4gXHRwaHlfZGV2aWNlX3Jlc2V0KHBoeWRldiwgMSk7XG4gXG4tXHRtZGlvYnVzX3VucmVnaXN0ZXJfZGV2aWNlKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvKTtcbi1cdHJldHVybiBlcnI7XG4rXHRtZGlvYnVzX2ZpbmlzaF9yZW1vdmUoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8sIGR5bmFtaWMpO1xuK1xuK1x0cmV0dXJuIDA7XG4gfVxuLUVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7XG4gXG4gLyoqXG4gICogcGh5X2RldmljZV9yZW1vdmUgLSBSZW1vdmUgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgcGh5IGRldmljZSBmcm9tIHRoZSBNRElPIGJ1c1xuQEAgLTExNTEsMTUgKzExNzgsNyBAQCBFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpO1xuICAqL1xuIHZvaWQgcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4tXHR1bnJlZ2lzdGVyX21paV90aW1lc3RhbXBlcihwaHlkZXYtXHUwMDNlbWlpX3RzKTtcbi1cdHBzZV9jb250cm9sX3B1dChwaHlkZXYtXHUwMDNlcHNlYyk7XG4tXG4tXHRkZXZpY2VfZGVsKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldik7XG4tXG4tXHQvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xuLVx0cGh5X2RldmljZV9yZXNldChwaHlkZXYsIDEpO1xuLVxuLVx0bWRpb2J1c191bnJlZ2lzdGVyX2RldmljZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpbyk7XG4rXHRfX3BoeV9kZXZpY2VfcmVtb3ZlKHBoeWRldiwgZmFsc2UpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVtb3ZlKTtcbiBcbkBAIC0xNzM0LDYgKzE3NTMsMzYgQEAgc3RhdGljIGJvb2wgcGh5X2Rydl9zdXBwb3J0c19pcnEoY29uc3Qgc3RydWN0IHBoeV9kcml2ZXIgKnBoeWRydilcbiBcdHJldHVybiBwaHlkcnYtXHUwMDNlY29uZmlnX2ludHIgXHUwMDI2XHUwMDI2IHBoeWRydi1cdTAwM2VoYW5kbGVfaW50ZXJydXB0O1xuIH1cbiBcbitzdGF0aWMgaW50IHBoeV9jbGFpbShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvO1xuK1x0c3RydWN0IG1paV9idXMgKmJ1cyA9IG1kaW9kZXYtXHUwMDNlYnVzO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX21hcF9sb2NrKTtcbitcdGlmIChidXMtXHUwMDNlc3RhdGUgIT0gTURJT0JVU19SRUdJU1RFUkVEIHx8XG4rXHQgICAgYnVzLVx1MDAzZW1kaW9fbWFwX3JlbW92YWxzIHx8XG4rXHQgICAgYnVzLVx1MDAzZW1kaW9fbWFwW21kaW9kZXYtXHUwMDNlYWRkcl0gIT0gbWRpb2RldiB8fFxuK1x0ICAgIChidXMtXHUwMDNlbWRpb19tYXBfcGVuZGluZyBcdTAwMjYgQklUKG1kaW9kZXYtXHUwMDNlYWRkcikpKVxuK1x0XHRlcnIgPSAtRU5PREVWO1xuK1x0ZWxzZSBpZiAocGh5ZGV2LVx1MDAzZWF0dGFjaGVkKVxuK1x0XHRlcnIgPSAtRUJVU1k7XG4rXHRlbHNlXG4rXHRcdHBoeWRldi1cdTAwM2VhdHRhY2hlZCA9IHRydWU7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbWFwX2xvY2spO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIHZvaWQgcGh5X3JlbGVhc2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4rXHRwaHlkZXYtXHUwMDNlYXR0YWNoZWQgPSBmYWxzZTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19tYXBfbG9jayk7XG4rfVxuK1xuIC8qKlxuICAqIHBoeV9hdHRhY2hfZGlyZWN0IC0gYXR0YWNoIGEgbmV0d29yayBkZXZpY2UgdG8gYSBnaXZlbiBQSFkgZGV2aWNlIHBvaW50ZXJcbiAgKiBAZGV2OiBuZXR3b3JrIGRldmljZSB0byBhdHRhY2hcbkBAIC0xNzU1LDYgKzE4MDQsNyBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiBcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuIFx0c3RydWN0IG1vZHVsZSAqbmRldl9vd25lciA9IE5VTEw7XG4rXHRib29sIGNsYWltZWQgPSBmYWxzZTtcbiBcdGludCBlcnI7XG4gXG4gXHQvKiBGb3IgRXRoZXJuZXQgZGV2aWNlIGRyaXZlcnMgdGhhdCByZWdpc3RlciB0aGVpciBvd24gTURJTyBidXMsIHdlXG5AQCAtMTc3MCw2ICsxODIwLDEzIEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0fVxuIFxuIFx0Z2V0X2RldmljZShkKTtcbitcdGVyciA9IHBoeV9jbGFpbShwaHlkZXYpO1xuK1x0aWYgKGVyciA9PSAtRUJVU1kpXG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIlBIWSBhbHJlYWR5IGF0dGFjaGVkXFxuXCIpO1xuK1x0aWYgKCFlcnIpXG4rXHRcdGNsYWltZWQgPSB0cnVlO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJvcl9wdXRfZGV2aWNlO1xuIFxuIFx0LyogQXNzdW1lIHRoYXQgaWYgdGhlcmUgaXMgbm8gZHJpdmVyLCB0aGF0IGl0IGRvZXNuJ3RcbiBcdCAqIGV4aXN0LCBhbmQgd2Ugc2hvdWxkIHVzZSB0aGUgZ2VucGh5IGRyaXZlci5cbkBAIC0xNzk4LDEyICsxODU1LDYgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXHRcdFx0Z290byBlcnJvcl9tb2R1bGVfcHV0O1xuIFx0fVxuIFxuLVx0aWYgKHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYpIHtcbi1cdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlZGV2LCBcIlBIWSBhbHJlYWR5IGF0dGFjaGVkXFxuXCIpO1xuLVx0XHRlcnIgPSAtRUJVU1k7XG4tXHRcdGdvdG8gZXJyb3I7XG4tXHR9XG4tXG4gXHRwaHlkZXYtXHUwMDNlcGh5X2xpbmtfY2hhbmdlID0gcGh5X2xpbmtfY2hhbmdlO1xuIFx0aWYgKGRldikge1xuIFx0XHRwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2ID0gZGV2O1xuQEAgLTE4OTksNiArMTk1MCw4IEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0cGh5ZGV2LVx1MDAzZWlzX2dlbnBoeV9kcml2ZW4gPSAwO1xuIFx0ZC1cdTAwM2Vkcml2ZXIgPSBOVUxMO1xuIGVycm9yX3B1dF9kZXZpY2U6XG4rXHRpZiAoY2xhaW1lZClcbitcdFx0cGh5X3JlbGVhc2UocGh5ZGV2KTtcbiBcdHB1dF9kZXZpY2UoZCk7XG4gXHRpZiAobmRldl9vd25lciAhPSBidXMtXHUwMDNlb3duZXIpXG4gXHRcdG1vZHVsZV9wdXQoYnVzLVx1MDAzZW93bmVyKTtcbkBAIC0xOTc3LDYgKzIwMzAsNyBAQCB2b2lkIHBoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdCAqIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGJ5IHJlYWRpbmcgdGhlIHVuZGVybHlpbmcgYnVzIGZpcnN0LlxuIFx0ICovXG4gXHRidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4rXHRwaHlfcmVsZWFzZShwaHlkZXYpO1xuIFxuIFx0cHV0X2RldmljZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYpO1xuIFx0aWYgKGRldilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5bGliLWludGVybmFsLmggYi9kcml2ZXJzL25ldC9waHkvcGh5bGliLWludGVybmFsLmhcbmluZGV4IDY2NGVkN2ZhYTUxODQuLjdlOTE2MWZjZGQ5MDEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5bGliLWludGVybmFsLmhcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaWItaW50ZXJuYWwuaFxuQEAgLTI1LDcgKzI1LDkgQEAgaW50IHBoeV9zcGVlZF9kb3duX2NvcmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gdm9pZCBwaHlfY2hlY2tfZG93bnNoaWZ0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIFxuIGludCBtZGlvYnVzX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpO1xuLWludCBtZGlvYnVzX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldik7XG4raW50IG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBpbnQgZXJyKTtcbitpbnQgbWRpb2J1c19iZWdpbl9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIGR5bmFtaWMpO1xuK3ZvaWQgbWRpb2J1c19maW5pc2hfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKTtcbiBcbiBpbnQgZ2VucGh5X2M0NV9yZWFkX2VlZV9hZHYoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdW5zaWduZWQgbG9uZyAqYWR2KTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvbGludXgvbWRpby5oXG5pbmRleCBhN2Q5ZTNhZTM2MmE1Li5lMTk5NjNhZjhlMTM5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZGlvLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWRpby5oXG5AQCAtOCw2ICs4LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiBcbiBzdHJ1Y3QgZ3Bpb19kZXNjO1xuIHN0cnVjdCBtaWlfYnVzO1xuQEAgLTMyLDYgKzMzLDkgQEAgc3RydWN0IG1kaW9fZGV2aWNlIHtcbiBcdGludCAoKmJ1c19tYXRjaCkoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KTtcbiBcdHZvaWQgKCpkZXZpY2VfZnJlZSkoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KTtcbiBcdHZvaWQgKCpkZXZpY2VfcmVtb3ZlKShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpO1xuK1x0aW50ICgqZGV2aWNlX3JlbW92ZV9keW5hbWljKShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpO1xuK1x0LyogRW50cnkgaW4gbWlpX2J1czo6bWRpb19tYXBfcmV0aXJlZC4gKi9cbitcdHN0cnVjdCBsaXN0X2hlYWQgcmV0aXJlZF9ub2RlO1xuIFxuIFx0LyogQnVzIGFkZHJlc3Mgb2YgdGhlIE1ESU8gZGV2aWNlICgwLTMxKSAqL1xuIFx0aW50IGFkZHI7XG5AQCAtNjk0LDYgKzY5OCw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1kaW9kZXZfYzQ1X3dyaXRlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgdTMyIGRldmFkLFxuIFxuIGJvb2wgbWRpb2J1c19pc19yZWdpc3RlcmVkX2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcik7XG4gc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfZ2V0X3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcik7XG4raW50IG1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBib29sIHJlbW92aW5nKTtcbit2b2lkIG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmQoc3RydWN0IG1paV9idXMgKmJ1cywgYm9vbCByZW1vdmluZyk7XG4gXG4gLyoqXG4gICogbWRpb19tb2R1bGVfZHJpdmVyKCkgLSBIZWxwZXIgbWFjcm8gZm9yIHJlZ2lzdGVyaW5nIG1kaW8gZHJpdmVyc1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCA1ZjhkNjU4NjhlMGZmLi4wNTAwZjgwZTBmYWNmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9waHkuaFxuQEAgLTIyLDYgKzIyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9taWlfdGltZXN0YW1wZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dhaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLWlkL21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3U2NF9zdGF0c19zeW5jLmhcdTAwM2VcbkBAIC0zOTEsNyArMzkyLDkgQEAgc3RydWN0IG1paV9idXMge1xuIFx0LyoqIEBzdGF0ZTogU3RhdGUgb2YgYnVzIHN0cnVjdHVyZSAqL1xuIFx0ZW51bSB7XG4gXHRcdE1ESU9CVVNfQUxMT0NBVEVEID0gMSxcbitcdFx0TURJT0JVU19SRUdJU1RFUklORyxcbiBcdFx0TURJT0JVU19SRUdJU1RFUkVELFxuK1x0XHRNRElPQlVTX1VOUkVHSVNURVJJTkcsXG4gXHRcdE1ESU9CVVNfVU5SRUdJU1RFUkVELFxuIFx0XHRNRElPQlVTX1JFTEVBU0VELFxuIFx0fSBzdGF0ZTtcbkBAIC00MDEsNiArNDA0LDE4IEBAIHN0cnVjdCBtaWlfYnVzIHtcbiBcbiBcdC8qKiBAbWRpb19tYXA6IGxpc3Qgb2YgYWxsIE1ESU8gZGV2aWNlcyBvbiBidXMgKi9cbiBcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb19tYXBbUEhZX01BWF9BRERSXTtcbitcdC8qKiBAbWRpb19tYXBfcGVuZGluZzogYWRkcmVzc2VzIHdpdGggcmVnaXN0cmF0aW9uIGluIHByb2dyZXNzICovXG4rXHR1MzIgbWRpb19tYXBfcGVuZGluZztcbitcdC8qKiBAbWRpb19tYXBfbG9jazogcHJvdGVjdHMgdGhlIE1ESU8gZGV2aWNlIG1hcCBhbmQgYnVzIHN0YXRlICovXG4rXHRzdHJ1Y3QgbXV0ZXggbWRpb19tYXBfbG9jaztcbitcdC8qKiBAbWRpb19tYXBfd2FpdDogd2FpdCBmb3IgYWN0aXZlIG1hcCBvcGVyYXRpb25zIGR1cmluZyB0ZWFyZG93biAqL1xuK1x0d2FpdF9xdWV1ZV9oZWFkX3QgbWRpb19tYXBfd2FpdDtcbitcdC8qKiBAbWRpb19tYXBfb3BzOiBhY3RpdmUgcmVnaXN0cmF0aW9ucyBhbmQgZmlybXdhcmUgY2hhbmdlcyAqL1xuK1x0dW5zaWduZWQgaW50IG1kaW9fbWFwX29wcztcbitcdC8qKiBAbWRpb19tYXBfcmVtb3ZhbHM6IGZpcm13YXJlIHJlbW92YWxzIGJsb2NraW5nIFBIWSBhdHRhY2htZW50ICovXG4rXHR1bnNpZ25lZCBpbnQgbWRpb19tYXBfcmVtb3ZhbHM7XG4rXHQvKiogQG1kaW9fbWFwX3JldGlyZWQ6IHJlbW92ZWQgZGV2aWNlcyBwaW5uZWQgdW50aWwgYnVzIHRlYXJkb3duICovXG4rXHRzdHJ1Y3QgbGlzdF9oZWFkIG1kaW9fbWFwX3JldGlyZWQ7XG4gXG4gXHQvKiogQHBoeV9tYXNrOiBQSFkgYWRkcmVzc2VzIHRvIGJlIGlnbm9yZWQgd2hlbiBwcm9iaW5nICovXG4gXHR1MzIgcGh5X21hc2s7XG5AQCAtNjUyLDYgKzY2Nyw4IEBAIHN0cnVjdCBwaHlfb2F0YzE0X3NxaV9jYXBhYmlsaXR5IHtcbiAgKiBAbl9wb3J0czogTnVtYmVyIG9mIHBvcnRzIGN1cnJlbnRseSBhdHRhY2hlZCB0byB0aGUgUEhZXG4gICogQG1heF9uX3BvcnRzOiBNYXggbnVtYmVyIG9mIHBvcnRzIHRoaXMgUEhZIGNhbiBleHBvc2VcbiAgKiBAbG9jazogIE11dGV4IGZvciBzZXJpYWxpemF0aW9uIGFjY2VzcyB0byBQSFlcbisgKiBAYXR0YWNoZWQ6IFdoZXRoZXIgYSBuZXR3b3JrIGRldmljZSBvciBzdGFuZGFsb25lIHVzZXIgYXR0YWNoZWQgdGhlIFBIWTtcbisgKlx0cHJvdGVjdGVkIGJ5IHRoZSBNRElPIGJ1cyBtYXAgbG9ja1xuICAqIEBzdGF0ZV9xdWV1ZTogV29yayBxdWV1ZSBmb3Igc3RhdGUgbWFjaGluZVxuICAqIEBsaW5rX2Rvd25fZXZlbnRzOiBOdW1iZXIgb2YgdGltZXMgbGluayB3YXMgbG9zdFxuICAqIEBzaGFyZWQ6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhIHNoYXJlZCBieSBwaHlzIGluIG9uZSBwYWNrYWdlXG5AQCAtNzgxLDYgKzc5OCw3IEBAIHN0cnVjdCBwaHlfZGV2aWNlIHtcbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgc3RhdGVfcXVldWU7XG4gXG4gXHRzdHJ1Y3QgbXV0ZXggbG9jaztcbitcdGJvb2wgYXR0YWNoZWQ7XG4gXG4gXHQvKiBUaGlzIG1heSBiZSBtb2RpZmllZCB1bmRlciB0aGUgcnRubCBsb2NrICovXG4gXHRib29sIHNmcF9idXNfYXR0YWNoZWQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNjowNi4wNDMzNDY5NzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTA4NzE2NDU2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1ESU8vUEhZIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggc2VyaWVzIHRoYXQgc2lnbmlmaWNhbnRseSB0b3VjaGVzIHRoZSBNRElPIGFuZCBQSFkgc3Vic3lzdGVtcy4gSXQgc2VlbXMgdGhpcyBpcyBmb2N1c2VkIG9uIGVuaGFuY2luZyBkeW5hbWljIE9GIHJlY29uZmlndXJhdGlvbiBjYXBhYmlsaXRpZXMgZm9yIE1ESU8gYnVzZXMsIGxpa2VseSB0byBzdXBwb3J0IGRldmljZSB0cmVlIG92ZXJsYXlzIGFuZCBjaGFuZ2VzIGR1cmluZyBydW50aW1lLiBUaGUgZmlsZXMgYmVpbmcgbW9kaWZpZWQsIHNwZWNpZmljYWxseSBgZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmNgLCBgZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmNgLCBhbmQgc2V2ZXJhbCBvdGhlcnMgaW4gdGhlIGBkcml2ZXJzL25ldC9waHlgIGRpcmVjdG9yeSwgaW1tZWRpYXRlbHkgZmxhZyB0aGlzIGFzIGNvcmUgaW5mcmFzdHJ1Y3R1cmUuIEkgY2FuIHNlZSB0aGUgY2hhbmdlcyBkZWFsIHdpdGggaG93IE1ESU8gZGV2aWNlcyBhcmUgcmVnaXN0ZXJlZCBhbmQgdW5yZWdpc3RlcmVkLCBhbG9uZyB3aXRoIG1vZGlmaWNhdGlvbnMgdG8gdGhlIE1ESU8gYnVzIGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zLiBUaGV5J3JlIGFkZGluZyBuZXcgbWVjaGFuaXNtcyBsaWtlIGBvZl9tZGlvX3JlY29uZmlnX211dGV4YCwgYG9mX21kaW9idXNfbm90aWZ5YCwgYW5kIGBvZl9tZGlvYnVzX292ZXJsYXlfbm90aWZ5YCBhbmQgYWRkaW5nIGBtZGlvX21hcF9sb2NrYCB0byBgc3RydWN0IG1paV9idXNgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uZmlybSByZWFjaGFiaWxpdHkgYW5kIGZ1bmN0aW9uYWxpdHkuIFNpbmNlIHRoaXMgYWZmZWN0cyBjb3JlIE1ESU8gYW5kIFBIWSBjb2RlLCB3aGljaCBpcyB1c2VkIGJ5IG51bWVyb3VzIG5ldHdvcmtpbmcgZHJpdmVycywgaXQncyBhIGNyaXRpY2FsIGFyZWEuIFRoZSBwcmVzZW5jZSBvZiBkeW5hbWljIE9GIHJlY29uZmlndXJhdGlvbiBzdXBwb3J0IGlzIGltcG9ydGFudCBiZWNhdXNlIHRob3NlIGNvbmZpZ3MgYXJlIHNldCB0byBlbmFibGUgZHluYW1pYyBjb25maWd1cmF0aW9uIGNoYW5nZXMuIFRoaXMgaXMgaW5kaWNhdGVkIGJ5IHRoZSBpbnZvbHZlbWVudCBvZiBgQ09ORklHX09GX0RZTkFNSUNgLCBgQ09ORklHX09GX09WRVJMQVlgLCBhbmQgYENPTkZJR19PRl9NRElPYCB3aGljaCBpcyBrZXkuXG5cbkRpdmluZyBkZWVwZXIgaW50byB0aGUgc3BlY2lmaWMgZmlsZXMsIEkgc2VlIHRoYXQgYGRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jYCBoYXMgY3JpdGljYWwgZnVuY3Rpb25zIHN1Y2ggYXMgYG9mX21kaW9idXNfcmVnaXN0ZXJfY2hpbGRgLCBgb2ZfbWRpb2J1c19zY2FuX3BoeWAsIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgLCBgb2ZfbWRpb2J1c19ub3RpZnlgLCBhbmQgYG9mX21kaW9idXNfb3ZlcmxheV9ub3RpZnlgLiBJIGNhbiBhbHNvIHNlZSB0aGF0IG90aGVyIGNvcmUgTURJTy9QSFkgc3Vic3lzdGVtIGNvbXBvbmVudHMgbGlrZSBgbWRpb2J1c19pc19yZWdpc3RlcmVkX2RldmljZWAsIGBtZGlvYnVzX2FsbG9jX3NpemVgLCBgb2ZfbWRpb2J1c19maW5kX3BoeWAsIGBfX21kaW9idXNfc2NhbmAsIGBtZGlvYnVzX3NjYW5fYzIyYCwgYG1kaW9idXNfc2Nhbl9jNDVgLCBgX19tZGlvYnVzX3JlZ2lzdGVyYCwgYG1kaW9idXNfdW5yZWdpc3RlcmAsIGBtZGlvYnVzX2ZyZWVgIGFyZSBpbnZvbHZlZC4gVGhlIGNoYW5nZXMgdG8gIGBtZGlvX2RldmljZV9yZWdpc3RlcmAsIGBtZGlvX2RldmljZV9yZW1vdmVgLCBgbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2VgLCBgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luYCwgYG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmRgLCBgbWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZWAsIGBtZGlvYnVzX2JlZ2luX3JlbW92ZWAsIGBtZGlvYnVzX2ZpbmlzaF9yZW1vdmVgLCBgcGh5X2RldmljZV9yZWdpc3RlcmAsIGBwaHlfZGV2aWNlX3JlbW92ZWAsIGBwaHlfY2xhaW1gLCBgcGh5X3JlbGVhc2VgLCBgcGh5X2F0dGFjaF9kaXJlY3RgLCBhbmQgYHBoeV9kZXRhY2hgIHNlZW0gdG8gYmUgdGhlIG1vc3QgaW1wYWN0ZWQuXG5cbkdpdmVuIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9uIGNvcmUgZnVuY3Rpb25zLCBmdXp6aW5nIHRoaXMgcGF0Y2ggaXMgYWJzb2x1dGVseSB3b3J0aHdoaWxlLiBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gc3BlY2lmaWMgc3ltYm9scyBhbmQgZnVuY3Rpb25zIHRoYXQgcmVwcmVzZW50IGtleSBwb2ludHMgb2YgaW50ZXJhY3Rpb24gd2l0aCBkeW5hbWljIE9GIGNoYW5nZXMgYW5kIGRldmljZSByZWdpc3RyYXRpb24vcmVtb3ZhbC4gSSB3aWxsIHNwZWNpZmljYWxseSBmb2N1cyBvbjogYG9mX21kaW9idXNfbm90aWZ5YCwgYG9mX21kaW9idXNfb3ZlcmxheV9ub3RpZnlgLCBgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luYCwgYG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmRgLCBgbWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZWAsIGBtZGlvYnVzX2JlZ2luX3JlbW92ZWAsIGBtZGlvYnVzX2ZpbmlzaF9yZW1vdmVgLCBgcGh5X2NsYWltYCwgYHBoeV9yZWxlYXNlYCwgYHBoeV9hdHRhY2hfZGlyZWN0YCwgYHBoeV9kZXRhY2hgLCBgbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2VgLCBgbWRpb19kZXZpY2VfcmVnaXN0ZXJgLCBhbmQgYG1kaW9fZGV2aWNlX3JlbW92ZWAuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBlbnN1cmUgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBlbmFibGVkIGZvciB0ZXN0aW5nLiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19PRl9EWU5BTUlDYCwgYENPTkZJR19PRl9PVkVSTEFZYCwgYENPTkZJR19PRl9NRElPYCwgYENPTkZJR19QSFlMSUJgLCBhbmQgYENPTkZJR19NRElPX0RFVklDRWAgYXJlIGFsbCBwcm9wZXJseSBzZXQsIGFzIHRob3NlIGFyZSB0aGUgcHJlcmVxdWlzaXRlcyBmb3IgdGhpcyBjb2RlIHRvIGJlIGFjdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5OTQsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNjoyNS4xMzA1MTUzNTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0MTMyNzQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT0ZfRFlOQU1JQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9vZi9LY29uZmlnPTc4PWNvbmZpZyBPRl9LT0JKXFxuLS1cXG5kcml2ZXJzL29mL0tjb25maWctODItIyBuZWVkIGl0LlxcbmRyaXZlcnMvb2YvS2NvbmZpZzo4Mzpjb25maWcgT0ZfRFlOQU1JQ1xcbmRyaXZlcnMvb2YvS2NvbmZpZy04NC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBkeW5hbWljIGRldmljZSB0cmVlc1xcXCIgaWYgT0ZfVU5JVFRFU1RcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDY6MjYuOTcxODQ5MTkyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA0MTU4Njk1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlF1aWNrIENoZWNrOiBgT0ZfT1ZFUkxBWWAqKlxuXG5SaWdodCwgbGV0J3MganVzdCBkbyBhIHF1aWNrIG1lbnRhbCBjaGVjay4gRmlyc3QgdGhpbmcgSSdtIHRoaW5raW5nIGlzLCBcIldoYXQncyB0aGUgc3RhdHVzIG9mIGBPRl9PVkVSTEFZYD8gV2hhdCdzIHRoZSBjb250ZXh0IEknbSBjdXJyZW50bHkgd29ya2luZyB3aXRoaW4gdGhhdCByZXF1aXJlcyBtZSB0byB0aGluayBvZiB0aGF0P1wiIElzIGl0IGluIGEgY3VycmVudCBhY3RpdmUgcHJvamVjdD8gQW0gSSB1cGRhdGluZyBhbiBleGlzdGluZyBzeXN0ZW0sIG9yIHN0YXJ0aW5nIHNvbWV0aGluZyBuZXc/IEknbSBub3QgZ29pbmcgdG8gZGl2ZSB0b28gZGVlcCBpbnRvIGFuYWx5c2lzIHlldCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBob3cgdGhpcyBzZXR0aW5nIGlzIGN1cnJlbnRseSBiZWluZyB1c2VkLCBpZiBhdCBhbGwuIEFyZSB0aGVyZSBzcGVjaWZpYyBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBvdmVybGF5IG9uIGEgc3RhbmRhcmQgc2NyZWVuLCBvciBzb21ldGhpbmcgZmFyIG1vcmUgY29tcGxleCBpbnZvbHZpbmcgbXVsdGlwbGUsIGR5bmFtaWNhbGx5IGxvYWRlZCBpbWFnZXMsIGFuZCBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgY29uY2VybnM/XG5cbk9rYXksIHNvIEkgd2lsbCBub3cgY29uc2lkZXIgYWxsIHRoZSBwb3NzaWJpbGl0aWVzIHRoYXQgc3ByaW5nIHRvIG1pbmQuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxODEyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDY6MzIuMDEzNDQ0MzdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0OTUwNDUzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT0ZfT1ZFUkxBWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9vZi9LY29uZmlnPTEwMj1jb25maWcgT0ZfUkVTT0xWRVxcbi0tXFxuZHJpdmVycy9vZi9LY29uZmlnLTEwNC1cXG5kcml2ZXJzL29mL0tjb25maWc6MTA1OmNvbmZpZyBPRl9PVkVSTEFZXFxuZHJpdmVycy9vZi9LY29uZmlnLTEwNi1cXHRib29sIFxcXCJEZXZpY2UgVHJlZSBvdmVybGF5c1xcXCJcXG4tLVxcbmRyaXZlcnMvb2YvS2NvbmZpZy0xMTUtXFxuZHJpdmVycy9vZi9LY29uZmlnOjExNjpjb25maWcgT0ZfT1ZFUkxBWV9LVU5JVF9URVNUXFxuZHJpdmVycy9vZi9LY29uZmlnLTExNy1cXHR0cmlzdGF0ZSBcXFwiRGV2aWNlIFRyZWUgb3ZlcmxheSBLVW5pdCB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNjozNC4wNjI5NTQ5NzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzkzMTg4NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyB0aGUgYE9GX01ESU9gIFZhcmlhYmxlKipcblxuQWxyaWdodCwgbGV0J3MganVzdCBtYWtlIHN1cmUgd2UncmUgb24gdGhlIHJpZ2h0IHRyYWNrIGhlcmUuICpPRl9NRElPKi4uLiB0aGF0IHZhcmlhYmxlIGhhcyBiZWVuIG5hZ2dpbmcgYXQgdGhlIGJhY2sgb2YgbXkgbWluZC4gSXQgY291bGQgYmUgcGl2b3RhbCwgZGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUgYW5kIGRyaXZlciBpbnRlcmFjdGlvbi4gSSBuZWVkIHRvIG1ha2UgYSBxdWljayBzYW5pdHkgY2hlY2suIEknbSB0aGlua2luZywgaXMgdGhpcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIE1ESU8gaW50ZXJmYWNlIGlzIHN0b3JlZD8gQXJlIHdlIHJlYWRpbmcgaXQsIHdyaXRpbmcgaXQsIG9yIGJvdGg/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB3aGVyZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyBhcmUgdGhhdCBpbnRlcmFjdCB3aXRoIHRoaXMgcGFydGljdWxhciB2YXJpYWJsZS4gV2hhdCBpbXBsaWNhdGlvbnMgd291bGQgaW5jb3JyZWN0IHZhbHVlIGhhdmU/IE1lbW9yeSBjb3JydXB0aW9uIGlzIGFsd2F5cyBhIGNvbmNlcm4uIEkgY291bGQgcmV2aWV3IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgdG8gdXNlIHRoZSB2YWx1ZS4gSSd2ZSBiZWVuIGJ1cm5lZCBiZWZvcmUgYXNzdW1pbmcgc29tZXRoaW5nIG9idmlvdXMsIHNvIGxldCdzIGp1c3QgZG91YmxlIGNoZWNrIHRoZSBkZWZpbml0aW9uIGFuZCB1c2FnZSBvZiAqT0ZfTURJTyogdG8gcnVsZSBvdXQgdGhlIG9idmlvdXMgY3VscHJpdHMgZmlyc3QuIFRoZW4sIEkgY2FuIGRlbHZlIGRlZXBlciBpbnRvIG1vcmUgY29tcGxleCBkZXBlbmRlbmNpZXMgaWYgbmVlZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjIwNiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA2OjM5LjQ1NjE0Njg0MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU0NjExODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPRl9NRElPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9OT1jb25maWcgRldOT0RFX01ESU9cXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xMy1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTQ6Y29uZmlnIE9GX01ESU9cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTUtXFx0ZGVmX3RyaXN0YXRlIE9GXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA2OjQxLjExMDc2NjY2N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MzU2MjMxMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIFBIWSBhbmQgTURJTyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgT0ZfTURJT2AgaXMgYXV0b21hdGljYWxseSBlbmFibGVkIHdoZW4gYE9GYCBpcywgd2hpY2ggbWFrZXMgc2Vuc2UuIEFuZCwgdGhpbmtpbmcgYWJvdXQgaXQsIGVuYWJsaW5nIGBPRl9EWU5BTUlDYCBhbmQgYE9GX09WRVJMQVlgIGlzIGdlbmVyYWxseSBhIGdvb2QgaWRlYSBmb3IgZmxleGliaWxpdHkuIGBQSFlMSUJgIGFuZCBgTURJT19ERVZJQ0VgIGFyZSBwcmV0dHkgbXVjaCBzdGFuZGFyZCwgc28gd2UncmUgZ29vZCB0aGVyZS5cblxuTm93LCBsZXQncyByZWZpbmUgdGhlIEZvY3VzU3ltYm9scyB0byBtYWtlIHN1cmUgd2UncmUgcmVhbGx5IGhvbmluZyBpbiBvbiB0aGUga2V5IGludGVyYWN0aW9ucy4gV2UgbmVlZCB0byBjb25zaWRlcjpcblxuKiAgIGBvZl9tZGlvYnVzX25vdGlmeWBcbiogICBgb2ZfbWRpb2J1c19vdmVybGF5X25vdGlmeWBcbiogICBgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luYFxuKiAgIGBtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kYFxuKiAgIGBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lYFxuKiAgIGBtZGlvYnVzX2JlZ2luX3JlbW92ZWBcbiogICBgbWRpb2J1c19maW5pc2hfcmVtb3ZlYFxuKiAgIGBwaHlfY2xhaW1gXG4qICAgYHBoeV9yZWxlYXNlYFxuXG5XYWl0IGEgbWludXRlLCBgcGh5X2NsYWltYCBhbmQgYHBoeV9yZWxlYXNlYCBhcmUgc3RhdGljYWxseSBkZWZpbmVkLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgUEhZIGxheWVyLCBzcGVjaWZpY2FsbHkgYXQgYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgIHRvIHNlZSBob3cgdGhvc2UgYXJlIHdvcmtpbmcuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjU0MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNjo0NS45NDYzOTIyMjdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODg4ODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9jbGFpbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTc1MT1zdGF0aWMgYm9vbCBwaHlfZHJ2X3N1cHBvcnRzX2lycShjb25zdCBzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzU1LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTc1NjpzdGF0aWMgaW50IHBoeV9jbGFpbShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTc1Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTE4MDE9aW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4MjItXFx0Z2V0X2RldmljZShkKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE4MjM6XFx0ZXJyID0gcGh5X2NsYWltKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODI0LVxcdGlmIChlcnIgPT0gLUVCVVNZKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNjo0NS45OTUyODcxMTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY2MzY3NDc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGFzc2Vzc21lbnQgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipSZWZpbmluZyBNeSBTeW1ib2wgRm9jdXMqKlxuXG5JJ20gcmV2aXNpdGluZyBob3cgSSdtIGhhbmRsaW5nIHN5bWJvbHMgYW5kIHRoZWlyIGluY2x1c2lvbi4gSXQncyBiZWNvbWUgY2xlYXIgdGhhdCBgcGh5X2NsYWltYCBhbmQgYHBoeV9yZWxlYXNlYCBhcmUgc3RhdGljIGluIHRoZSBjdXJyZW50IGNvbnRleHQuIFRoYXQgbWVhbnMgdGhleSBkb24ndCByZWFsbHkgb2ZmZXIgbWUgdGhlIGtpbmQgb2YgZHluYW1pYyBpbnNpZ2h0IEknbSBhZnRlciwgYXQgbGVhc3Qgbm90IHdpdGhpbiB0aGUgYEZvY3VzU3ltYm9sc2AgY29udGV4dC4gU28sIEknbGwgZXhjbHVkZSB0aGVtLiBJbnN0ZWFkLCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIHBvaW50cyB3aGVyZSB0aGVyZSdzIGEgbW9yZSBkaXJlY3QgYXNzb2NpYXRpb24gd2l0aCB0aGUgZGV2aWNlIGxpZmVjeWNsZS4gU3BlY2lmaWNhbGx5LCBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAgc2VlbSBtdWNoIG1vcmUgcmVsZXZhbnQgaGVyZS4gVGhleSdyZSB0aGUgY29yZSBvZiBob3cgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgYW5kIGJyb2tlbiwgd2hpY2ggaXMgd2hhdCBJIG5lZWQgdG8gd2F0Y2guXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGluIG9uIGBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW5gIGFuZCBgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2VuZGAuIEkgd2FudCB0byBjb25maXJtIHRoZXkncmUgbm90IGltcGxpY2l0bHkgcmVsYXRlZCB0byB0aGUgYXR0YWNobWVudC9kZXRhY2htZW50IHByb2Nlc3MsIGFuZCB0aGF0IHRoZXJlIGFyZSBubyBoaWRkZW4gaW50ZXJhY3Rpb25zIHRoYXQgbWlnaHQgYmUgcGVydGluZW50IHRvIG15IGFwcHJvYWNoIGhlcmUuIEEgcXVpY2sgc2NhbiBzaG91bGQgYmUgZW5vdWdoIHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzA3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDY6NTAuNjU4OTY0OTEzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzczMjE4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM9MjEyPWludCBtZGlvYnVzX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0yNjEtLyoqXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MjYyOiAqIG1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbiAtIHN0YXJ0IGNoYW5naW5nIGRldmljZXMgb24gYSByZWdpc3RlcmVkIGJ1c1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTI2My0gKiBAYnVzOiBNRElPIGJ1cyB0aGF0IHdpbGwgYmUgc2Nhbm5lZCBvciBjaGFuZ2VkXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0yNjctICovXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MjY4OmludCBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW4oc3RydWN0IG1paV9idXMgKmJ1cywgYm9vbCByZW1vdmluZylcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0yNjkte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMjgzLX1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoyODQ6RVhQT1JUX1NZTUJPTF9HUEwobWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luKTtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0yODUtXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM9Mjg2PXN0YXRpYyB2b2lkIG1kaW9idXNfb3BlcmF0aW9uX2RvbmVfbG9ja2VkKHN0cnVjdCBtaWlfYnVzICpidXMpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0yOTgtICogbWRpb2J1c19kZXZpY2VfY2hhbmdlX2VuZCAtIGZpbmlzaCBjaGFuZ2luZyBkZXZpY2VzIG9uIGFuIE1ESU8gYnVzXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6Mjk5OiAqIEBidXM6IE1ESU8gYnVzIHByZXZpb3VzbHkgcGFzc2VkIHRvIG1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbigpXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MzAwOiAqIEByZW1vdmluZzogdmFsdWUgcGFzc2VkIHRvIG1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbigpXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMzAxLSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNjo1MC43MDY3MDI0OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDI2ODU4NzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBvbiBNRElPIEJ1cyBTeW1ib2wgRXhwb3J0KipcblxuUmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBleHBvcnRlZCBzeW1ib2xzIGhlcmUsIHdoaWNoIGltbWVkaWF0ZWx5IGZvY3VzZXMgbXkgYXR0ZW50aW9uIG9uIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQgZXh0ZXJuYWxseSBhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgTURJTyBidXMgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgaG93IGl0IGltcGFjdHMgYW55IG1vZHVsZXMgdGhhdCByZWx5IG9uIGl0LlxuXG5MZXQncyBxdWlja2x5IGRyaWxsIGRvd24gYW5kIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyB3ZWxsIHVuZGVyc3Rvb2QuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGFjcm9zcyB0aGUgdGhyZWUgbWFpbiBmdW5jdGlvbnMgd2hpY2ggY29udHJvbCB0aGUgbGlmZWN5Y2xlOiBJJ2xsIGNoZWNrIGBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lYCwgYG1kaW9idXNfYmVnaW5fcmVtb3ZlYCwgYW5kIGBtZGlvYnVzX2ZpbmlzaF9yZW1vdmVgLiBJIHdhbnQgdG8gY29uZmlybSBob3cgdGhlc2UgY29udHJvbCB0aGUgcmVnaXN0cmF0aW9uLCBhbmQgcmVtb3ZhbCwgb2YgdGhpcyBjcml0aWNhbCBjb21wb25lbnQuIFVuZGVyc3RhbmRpbmcgdGhlaXIgaW50ZXJhY3Rpb24gaXMga2V5LiBVbmRlcnN0YW5kaW5nIHRoZSBvcmRlcmluZyBvZiBvcGVyYXRpb25zIGlzIGNyaXRpY2FsIHRvIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zIGFuZCBlbnN1cmluZyBwcm9wZXIgcmVzb3VyY2UgbWFuYWdlbWVudC4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhlIGxvY2tpbmcgaXMgaW1wbGVtZW50ZWQsIGFuZCBhbHNvIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBob3RwbHVnIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTIzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDY6NTcuNzMzNTY0MTczWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc1NzQzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYz0xNjU9aW50IG1kaW9fZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTE3OC1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxNzk6XFx0cmV0dXJuIG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUobWRpb2RldiwgZXJyKTtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xODAtfVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM9MjEyPWludCBtZGlvYnVzX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0yNDAtXFx0XFx0aWYgKGVycikge1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jOjI0MTpcXHRcXHRcXHRtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lKG1kaW9kZXYsIGVycik7XFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMjQyLVxcdFxcdFxcdHJldHVybiBlcnI7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYz0zMjE9c3RhdGljIHZvaWQgbWRpb2J1c191bnB1Ymxpc2hfZGV2aWNlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTMzMi1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzozMzM6aW50IG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBpbnQgZXJyKVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTMzNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA2OjU3Ljg5MTE0NTMxNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDUyNjY2NDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIElubmVyIFdvcmtpbmdzIG9mIHBoeWxpYioqXG5cblJpZ2h0LCBzbyB0aGVzZSBjb25jZXB0cywgdGhlc2XigKYgKnRoaW5ncyosIHRoZXkncmUgZGVmaW5pdGVseSBub3Qgc3RhdGljIGNvbnN0YW50cywgZGVmaW5lZCBzb21ld2hlcmUgYW5kIHJlYWRpbHkgYWNjZXNzaWJsZSBsaWtlIGV4cG9ydGVkIHN5bWJvbHMuIFRoYXQgbXVjaCBpcyBjbGVhci4gQnV0IHRoZXkncmUgYWxzbyAqbm90KiBzb21ldGhpbmcgdGhhdCdzIHZpc2libGUgYXQgdGhlIEFQSSBsZXZlbCwgcmVhZGlseSBhY2Nlc3NpYmxlIHRvIGV4dGVybmFsIGRyaXZlcnMgb3IgbW9kdWxlcy4gVGhleSBhcmUgZnVuZGFtZW50YWxseSAqaW50ZXJuYWwqIHRvIHRoZSBgcGh5bGliYCBmcmFtZXdvcmsgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHBoeWxpYmAncyBjb3JlIGxvZ2ljIGhhbmRsZXMgYW5kIG1hbmFnZXMgdGhpcyBpbmZvcm1hdGlvbi5cblxuTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRlbHZlIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIFRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBmaW5kIHRoZSBkZWNsYXJhdGlvbnMgb2YgdGhlc2UgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIG9yIG1hY3JvcyB3b3VsZCBiZSB0aGUgaGVhZGVyIGZpbGUgaW50ZW5kZWQgZm9yIGludGVybmFsIGBwaHlsaWJgIHVzZS4gR2l2ZW4gdGhhdCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYGRyaXZlcnMvbmV0L3BoeS9waHlsaWItaW50ZXJuYWwuaGAuIFRoYXQncyB3aGVyZSB0aGUgc2VjcmV0cyBzaG91bGQgYmUuIEknbGwgc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGF0IG51YW5jZXMgb2YgdGhlc2UgaW50ZXJuYWwgY29uY2VwdHMgY2FuIGJlIHJldmVhbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDc4MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA3OjAxLjM0MzgxOTEyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg5Nzc2OTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeWxpYi1pbnRlcm5hbC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlsaWItaW50ZXJuYWwuaD0yNz1pbnQgbWRpb2J1c19yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGliLWludGVybmFsLmg6Mjg6aW50IG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBpbnQgZXJyKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGliLWludGVybmFsLmgtMjktaW50IG1kaW9idXNfYmVnaW5fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDc6MDIuNTMzNjAzODk2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDU5ODE0NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludGVybmFsIFBoeWxpYiBDb25zaWRlcmF0aW9ucyoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGVzZSBjb25jZXB0cyBhbmQgdGhleSdyZSBkZWZpbml0ZWx5IGludGVybmFsIHRvIHRoZSBwaHlsaWIgZnJhbWV3b3JrLCB3aGljaCBpcyBhIGtleSBjb25zaWRlcmF0aW9uLiBJJ3ZlIHJlYWxpemVkIHRoZXNlIGFyZW4ndCBuZWNlc3NhcmlseSBzdGF0aWMsIHdoaWNoIGdpdmVzIG1lIGFuIGlkZWEuIFRoaW5raW5nIHRocm91Z2ggdGhpcywgaXQgc2VlbXMgcmVhc29uYWJsZSB0byBpbmNsdWRlIHRoZW0gd2l0aGluIHRoZSBGb2N1c1N5bWJvbHMgc3RydWN0dXJlLiBUaGF0IGFsaWducyB3ZWxsIHdpdGggaG93IHRoaW5ncyBhcmUgb3JnYW5pemVkIGFuZCBtYWtlcyBpbnR1aXRpdmUgc2Vuc2UgZm9yIHRoZSBkeW5hbWljIG5hdHVyZSBvZiB0aGVzZSBlbGVtZW50cy4gVG8gbWFrZSBzdXJlIEknbSBvbiB0aGUgcmlnaHQgdHJhY2ssIGl0IHdvdWxkIGJlIGEgZ29vZCBpZGVhIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGBvZl9tZGlvYnVzX25vdGlmeWAgYW5kIGBvZl9tZGlvYnVzX292ZXJsYXlfbm90aWZ5YCB0byBzZWUgaWYgdGhlcmUncyBhbnkgcGFydGljdWxhciBudWFuY2UgaW4gdGhlaXIgYmVoYXZpb3VyLCBvciB1c2FnZSB0aGF0IGluZmx1ZW5jZXMgaG93IEkgc2hvdWxkIGFwcHJvYWNoIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MjA5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDc6MDYuMzc5NTg5Nzk5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE2NjQ4MzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9mX21kaW9idXNfbm90aWZ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jPTYxNT1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG9mX21kaW9fb3ZlcmxheV9ub3RpZmllciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTYxOS1cXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzo2MjA6c3RhdGljIGludCBvZl9tZGlvYnVzX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbixcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy02MjEtXFx0XFx0XFx0ICAgICB2b2lkICphcmcpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYz02ODQ9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBvZl9tZGlvX25vdGlmaWVyID0ge1xcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjY4NTpcXHQubm90aWZpZXJfY2FsbCA9IG9mX21kaW9idXNfbm90aWZ5LFxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTY4Ni19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNzowNy41OTYyNDk3NjNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzNTg3NjA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNRElPYnVzIEZ1bmN0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBzaWZ0aW5nIHRocm91Z2ggdGhlc2UgTURJT2J1cyBmdW5jdGlvbnMsIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIHJlbGV2YW50LiBJbml0aWFsbHksIEknbSB0aGlua2luZywgXCJTdGF0aWMgZnVuY3Rpb25zPyBGb3JnZXQgJ2VtLlwiIE15IGdvYWwgaXMgdG8gb25seSBsb29rIGF0IHdoYXQncyBleHBvc2VkLCB0aGUgcHVibGljIGludGVyZmFjZSwgaWYgeW91IHdpbGwuIEkgd2FudCB0byBidWlsZCBhIGhpZ2gtbGV2ZWwgdmlldyBvZiBob3cgdGhlIGJ1cyBpcyBtYW5hZ2VkLCBub3QgZ2V0IGJvZ2dlZCBkb3duIGluIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblRoZW4sIHRoZSBzdGF0aWMgbmF0dXJlIG9mIGBvZl9tZGlvYnVzX2FkZF9ub2RlYCBhbmQgYG9mX21kaW9idXNfcmVtb3ZlX25vZGVgIHRocm93cyBtZSBhIGN1cnZlYmFsbCwgYWxvbmcgd2l0aCBgb2ZfbWRpb2J1c19yZWdpc3Rlcl9jaGlsZGAgYW5kIGBvZl9tZGlvYnVzX3NjYW5fcGh5YC4gSSBuZWVkIHRvIGJlIGNhcmVmdWwsIGEgc3RhdGljIGZ1bmN0aW9uIG1pZ2h0IGJlIHZpdGFsLCBhbmQgaWYgSSBuZWdsZWN0IHRvIGluY2x1ZGUgdGhlIGZ1bmN0aW9uIGluIG15IGxpc3QsIGl0IGNvdWxkIGJlIGEgZmF0YWwgZXJyb3IuXG5cbkhvd2V2ZXIsIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgIHN0YW5kcyBvdXQgaW1tZWRpYXRlbHkuIEl0J3MgZXhwb3J0ZWQsIHdoaWNoIG1lYW5zIGl0J3MgZGVzaWduZWQgdG8gYmUgdXNlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBUaGF0J3MgYSBjbGVhciBzaWduYWwgSSBzaG91bGQgbm90ZSB0aGF0LlxuXG5BbHJpZ2h0LCBiZWZvcmUgZ29pbmcgYW55IGRlZXBlciwgbGV0J3MganVzdCBtYWtlIHN1cmUgSSBoYXZlIHRoZSBmdWxsIHBpY3R1cmUuIExldCdzIHNlZSB3aGF0IGBfX21kaW9idXNfcmVnaXN0ZXJgIGhhcyB0byBzYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1Njg5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA3OjExLjczMjEyOTI0N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxNDA5NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZGlvYnVzX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jPTU4MD1zdGF0aWMgdm9pZCBtZGlvYnVzX3JlbW92ZV9kZXZpY2VzKHN0cnVjdCBtaWlfYnVzICpidXMpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy02MDktLyoqXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NjEwOiAqIF9fbWRpb2J1c19yZWdpc3RlciAtIGJyaW5nIHVwIGFsbCB0aGUgUEhZcyBvbiBhIGdpdmVuIGJ1cyBhbmQgYXR0YWNoIHRoZW0gdG8gYnVzXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNjExLSAqIEBidXM6IHRhcmdldCBtaWlfYnVzXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy02MTUtICogICBvbiBhIGdpdmVuIGJ1cywgYW5kIGF0dGFjaCB0aGVtIHRvIHRoZSBidXMuIERyaXZlcnMgc2hvdWxkIHVzZVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjYxNjogKiAgIG1kaW9idXNfcmVnaXN0ZXIoKSByYXRoZXIgdGhhbiBfX21kaW9idXNfcmVnaXN0ZXIoKSB1bmxlc3MgdGhleVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTYxNy0gKiAgIG5lZWQgdG8gcGFzcyBhIHNwZWNpZmljIG93bmVyIG1vZHVsZS4gTURJTyBkZXZpY2VzIHdoaWNoIGFyZSBub3RcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTYyMi0gKi9cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo2MjM6aW50IF9fbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBzdHJ1Y3QgbW9kdWxlICpvd25lcilcXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy02MjQte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNzM3LX1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo3Mzg6RVhQT1JUX1NZTUJPTChfX21kaW9idXNfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTczOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDc6MTEuNzgyMjc3ODQ0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTA5NzAzMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKk1ESU9idXMgUmVnaXN0cmF0aW9uIFx1MDAyNiBEZXJlZ2lzdHJhdGlvbiAtIEEgUXVpY2sgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBgX19tZGlvYnVzX3JlZ2lzdGVyYCBpcyBleHBsaWNpdGx5IGV4cG9ydGVkLiBUaGF0J3MgZ29vZDsgaXQgbWVhbnMgd2UgY2FuIGludGVyYWN0IHdpdGggaXQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLCB3aGljaCBpcyBvZnRlbiBjcnVjaWFsIGZvciBkcml2ZXIgaW50ZWdyYXRpb24gYW5kIGR5bmFtaWMgZGV2aWNlIGRpc2NvdmVyeS4gTm93LCBteSBuZXh0IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB3ZSd2ZSBjb3ZlcmVkIHRoZSBmdWxsIGxpZmVjeWNsZS4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBjb3JyZXNwb25kaW5nIHVucmVnaXN0cmF0aW9uIGZ1bmN0aW9uLiBMZXQncyBkaWcgaW50byBgbWRpb2J1c191bnJlZ2lzdGVyYCBhbmQgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGVyZS4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIG9mIGhvdyB0aGVzZSBidXNlcyBhcmUgbWFuYWdlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY1MzMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNzoxNS4xOTMyNTA3NDNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTE2NzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9idXNfdW5yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYz03Mzg9RVhQT1JUX1NZTUJPTChfX21kaW9idXNfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTczOS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo3NDA6dm9pZCBtZGlvYnVzX3VucmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cylcXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy03NDEte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNzUzLX1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo3NTQ6RVhQT1JUX1NZTUJPTChtZGlvYnVzX3VucmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTc1NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDc6MTUuMjQyMTc0MDFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIyMTc1NjY4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2U6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgTURJTyBCdXMgVW5yZWdpc3RyYXRpb24gUHJvY2VzcyoqXG5cbk9rYXksIHNvIGBtZGlvYnVzX3VucmVnaXN0ZXJgIGlzIGV4cG9ydGVkLCB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBleHBlcnRpc2UgbGllcyBpbiBlbWJlZGRlZCBzeXN0ZW1zIGFuZCBkZXZpY2UgZHJpdmVycywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB1bnJlZ2lzdHJhdGlvbi4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgcmVnaXN0cmF0aW9uIGNvdW50ZXJwYXJ0cy4gVG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSwgSSdsbCBuZWVkIHRvIGFuYWx5emUgYm90aCBgbWRpb19kZXZpY2VfcmVnaXN0ZXJgIGFuZCBgbWRpb19kZXZpY2VfcmVtb3ZlYC4gS25vd2luZyBob3cgZGV2aWNlcyBhcmUgYWRkZWQgYW5kIHJlbW92ZWQgZnJvbSB0aGUgTURJTyBidXMgaXMga2V5IHRvIGdyYXNwaW5nIHRoZSBmdWxsIGxpZmVjeWNsZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIHVucmVnaXN0cmF0aW9uIGZ1bmN0aW9uLiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBBcmUgdGhlcmUgcmFjZSBjb25kaXRpb25zIHRvIHdvcnJ5IGFib3V0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIHRvIGFzc2VzcyB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSB1bnJlZ2lzdGVyIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTI4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDc6MTkuNDYzOTM0MTU4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTE1ODkzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvX2RldmljZV9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0yNy0vKipcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoyODogKiBtZGlvX2RldmljZV9yZWdpc3Rlcl9yZXNldCAtIFJlYWQgYW5kIGluaXRpYWxpemUgdGhlIHJlc2V0IHByb3BlcnRpZXMgb2ZcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0yOS0gKlxcdFxcdFxcdFxcdGFuIG1kaW8gZGV2aWNlXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0zMy0gKi9cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzozNDpzdGF0aWMgaW50IG1kaW9fZGV2aWNlX3JlZ2lzdGVyX3Jlc2V0KHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0zNS17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYz0xNTc9RVhQT1JUX1NZTUJPTChtZGlvX2RldmljZV9jcmVhdGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTU5LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jOjE2MDogKiBtZGlvX2RldmljZV9yZWdpc3RlciAtIFJlZ2lzdGVyIHRoZSBtZGlvIGRldmljZSBvbiB0aGUgTURJTyBidXNcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xNjEtICogQG1kaW9kZXY6IG1kaW9fZGV2aWNlIHN0cnVjdHVyZSB0byBiZSBhZGRlZCB0byB0aGUgTURJTyBidXNcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTE2NC0gKi9cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxNjU6aW50IG1kaW9fZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xNjYte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTgwLX1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxODE6RVhQT1JUX1NZTUJPTChtZGlvX2RldmljZV9yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTgyLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jPTE4Mz1zdGF0aWMgaW50IF9fbWRpb19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMjAyLSAqIFRoaXMgZG9lc24ndCBmcmVlIHRoZSBtZGlvX2RldmljZSBpdHNlbGYsIGl0IG1lcmVseSByZXZlcnNlcyB0aGUgZWZmZWN0c1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jOjIwMzogKiBvZiBtZGlvX2RldmljZV9yZWdpc3RlcigpLiBVc2UgbWRpb19kZXZpY2VfZnJlZSgpIHRvIGZyZWUgdGhlIGRldmljZVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTIwNC0gKiBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYz0yMTI9aW50IG1kaW9idXNfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTIzOC1cXHRpZiAobWRpb2Rldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNRElPX0RFVklDRV9GTEFHX1BIWSkge1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jOjIzOTpcXHRcXHRlcnIgPSBtZGlvX2RldmljZV9yZWdpc3Rlcl9yZXNldChtZGlvZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0yNDAtXFx0XFx0aWYgKGVycikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNzoxOS41MTMxMDAwMjVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ3MzQ1NDc4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTURJTyBSZWdpc3RyYXRpb24gYW5kIERlcmVnaXN0cmF0aW9uIC0gQSBRdWljayBDaGVjayoqXG5cbk9rYXksIHNvIGBtZGlvX2RldmljZV9yZWdpc3RlcmAgaXMgZXhwb3J0ZWQsIGFzIGV4cGVjdGVkLiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBOb3csIGJlZm9yZSBJIG1vdmUgb24gdG8gYW55IGRlZXBlciBhbmFseXNpcyBvZiB0aGUgTURJTyBpbnRlcmZhY2UsIGxldCBtZSBqdXN0IHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvbXBsZW1lbnRhcnkgZnVuY3Rpb24sIGBtZGlvX2RldmljZV9yZW1vdmVgLiBFbnN1cmluZyB0aGVzZSByZWdpc3RyYXRpb24vZGVyZWdpc3RyYXRpb24gZnVuY3Rpb25zIGJlaGF2ZSBhcyBleHBlY3RlZCBpcyBmdW5kYW1lbnRhbCwgYW5kIGl0IHdpbGwgaW5mb3JtIG15IGFwcHJvYWNoIHRvIHRoZSByZXN0IG9mIHRoaXMgcGFydGljdWxhciB0YXNrLiBObyBzdXJwcmlzZXMgdGhlcmUsIGJ1dCBpdCdzIGEgY3JpdGljYWwgcG9pbnQgdG8gcXVpY2tseSB2ZXJpZnkgYmVmb3JlIGRpdmluZyBpbnRvIGFueXRoaW5nIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3ODYzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDc6MjQuOTg2NTU3NDU3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTM1ODM0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvX2RldmljZV9yZW1vdmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM9MTE4PXN0YXRpYyB2b2lkIG1kaW9fZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTIzLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jOjEyNDpzdGF0aWMgaW50IF9fbWRpb19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldiwgYm9vbCBkeW5hbWljKTtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xMjUtXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MTI2OnN0YXRpYyBpbnQgbWRpb19kZXZpY2VfcmVtb3ZlX2R5bmFtaWMoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTEyNy17XFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MTI4OlxcdHJldHVybiBfX21kaW9fZGV2aWNlX3JlbW92ZShtZGlvZGV2LCB0cnVlKTtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xMjktfVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM9MTMxPXN0cnVjdCBtZGlvX2RldmljZSAqbWRpb19kZXZpY2VfY3JlYXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTQzLVxcdG1kaW9kZXYtXFx1MDAzZWRldmljZV9mcmVlID0gbWRpb19kZXZpY2VfZnJlZTtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxNDQ6XFx0bWRpb2Rldi1cXHUwMDNlZGV2aWNlX3JlbW92ZSA9IG1kaW9fZGV2aWNlX3JlbW92ZTtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxNDU6XFx0bWRpb2Rldi1cXHUwMDNlZGV2aWNlX3JlbW92ZV9keW5hbWljID0gbWRpb19kZXZpY2VfcmVtb3ZlX2R5bmFtaWM7XFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTQ2LVxcdG1kaW9kZXYtXFx1MDAzZWJ1cyA9IGJ1cztcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jPTE4MT1FWFBPUlRfU1lNQk9MKG1kaW9fZGV2aWNlX3JlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0xODItXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MTgzOnN0YXRpYyBpbnQgX19tZGlvX2RldmljZV9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2LCBib29sIGR5bmFtaWMpXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTg0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTE5Ny0vKipcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoxOTg6ICogbWRpb19kZXZpY2VfcmVtb3ZlIC0gUmVtb3ZlIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIG1kaW8gZGV2aWNlIGZyb20gdGhlXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMTk5LSAqXFx0XFx0XFx0TURJTyBidXNcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTIwNS0gKi9cXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYzoyMDY6dm9pZCBtZGlvX2RldmljZV9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jLTIwNy17XFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmM6MjA4OlxcdF9fbWRpb19kZXZpY2VfcmVtb3ZlKG1kaW9kZXYsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19kZXZpY2UuYy0yMDktfVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2RldmljZS5jOjIxMDpFWFBPUlRfU1lNQk9MKG1kaW9fZGV2aWNlX3JlbW92ZSk7XFxuZHJpdmVycy9uZXQvcGh5L21kaW9fZGV2aWNlLmMtMjExLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNzoyNS4wMzc5Mzk4NTRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE2ODIwOTQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqTURJTyBEZXZpY2UgUmVtb3ZhbCBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBgbWRpb19kZXZpY2VfcmVtb3ZlYCBpcyBzcGVjaWZpY2FsbHkgZXhwb3J0ZWQsIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMsIEkgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBtYWNoaW5lcnkuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBvZiB0aGUgUEhZIGxheWVyLCBuYXR1cmFsbHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgY29tcGxlbWVudGFyeSBmdW5jdGlvbnMgZm9yIGRldmljZSByZWdpc3RyYXRpb24gYW5kIHJlbW92YWwgd2l0aGluIHRoZSBQSFkgY29udGV4dC4gU3BlY2lmaWNhbGx5LCBgcGh5X2RldmljZV9yZWdpc3RlcmAgYW5kIGBwaHlfZGV2aWNlX3JlbW92ZWAgY29tZSB0byBtaW5kLiBJJ2xsIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhvc2UgaW50ZXJhY3QgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlIG9mIHdoYXQgdGhpcyBleHBvcnRlZCBgbWRpb19kZXZpY2VfcmVtb3ZlYCBpcyByZWFsbHkgZG9pbmcgaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3MuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIGEgY2xlYW51cCBwcm9jZXNzLCBhbmQgdGhvc2UgdHdvIGZ1bmN0aW9uIGFyZSB0aGUgcGxhY2VzIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODgzNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA3OjI4LjIwNjE1Mzc4N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEwNTkzNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2RldmljZV9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTExNT1FWFBPUlRfU1lNQk9MKGdldF9waHlfZGV2aWNlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTExNy0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMTg6ICogcGh5X2RldmljZV9yZWdpc3RlciAtIFJlZ2lzdGVyIHRoZSBwaHkgZGV2aWNlIG9uIHRoZSBNRElPIGJ1c1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTExOS0gKiBAcGh5ZGV2OiBwaHlfZGV2aWNlIHN0cnVjdHVyZSB0byBiZSBhZGRlZCB0byB0aGUgTURJTyBidXNcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMjAtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTIxOmludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTIyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE0NC19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTQ1OkVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTQ2LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTE0Nz1zdGF0aWMgaW50IF9fcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBkeW5hbWljKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTc1LSAqIFRoaXMgZG9lc24ndCBmcmVlIHRoZSBwaHlfZGV2aWNlIGl0c2VsZiwgaXQgbWVyZWx5IHJldmVyc2VzIHRoZSBlZmZlY3RzXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMTc2OiAqIG9mIHBoeV9kZXZpY2VfcmVnaXN0ZXIoKS4gVXNlIHBoeV9kZXZpY2VfZnJlZSgpIHRvIGZyZWUgdGhlIGRldmljZVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE3Ny0gKiBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA3OjI4LjI1NzIxOTU3NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDIzNTY5MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBQSFkgRGV2aWNlIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBgcGh5X2RldmljZV9yZWdpc3RlcmAgaXMgY2xlYXJseSB0aGUgZXhwb3J0ZWQgZnVuY3Rpb24gd2UncmUgdXNpbmcgdG8gYWRkIGEgbmV3IHBoeXNpY2FsIGxheWVyIGRldmljZSB0byB0aGUgc3lzdGVtLiBUaGF0J3Mgb3VyIGVudHJ5IHBvaW50LCB0aGUgY3JpdGljYWwgcGllY2UuIE5vdywgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIGFuZCBlbnN1cmUgcHJvcGVyIGNsZWFudXAsIEkgbmVlZCB0byBjaGVjayBob3cgdGhlc2UgZGV2aWNlcyBhcmUgcmVtb3ZlZC4gVGhlIGNvbXBsZW1lbnRhcnkgZnVuY3Rpb24sIHRoZSBvbmUgdGhhdCBzaG91bGQgdW5kbyB3aGF0IGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCBkb2VzLCBpcyBvYnZpb3VzbHkgYHBoeV9kZXZpY2VfcmVtb3ZlYC4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgZm9yIHRoYXQgb25lLiBOZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVucmVnaXN0cmF0aW9uIHByb2Nlc3MgdG8gZW5zdXJlIHByb3BlciByZXNvdXJjZSBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQ3NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA3OjMxLjI4MDc5MTg2N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5MDg2ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2RldmljZV9yZW1vdmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTIyND1zdGF0aWMgdm9pZCBwaHlfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMjktXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyMzA6c3RhdGljIGludCBfX3BoeV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZHluYW1pYyk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMzEtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yMzI9c3RhdGljIHZvaWQgcGh5X21kaW9fZGV2aWNlX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIzNi1cXHRwaHlkZXYgPSBjb250YWluZXJfb2YobWRpb2Rldiwgc3RydWN0IHBoeV9kZXZpY2UsIG1kaW8pO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjM3OlxcdHBoeV9kZXZpY2VfcmVtb3ZlKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMzgtfVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0yNDA9c3RhdGljIGludCBwaHlfbWRpb19kZXZpY2VfcmVtb3ZlX2R5bmFtaWMoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yNDQtXFx0cGh5ZGV2ID0gY29udGFpbmVyX29mKG1kaW9kZXYsIHN0cnVjdCBwaHlfZGV2aWNlLCBtZGlvKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjI0NTpcXHRyZXR1cm4gX19waHlfZGV2aWNlX3JlbW92ZShwaHlkZXYsIHRydWUpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjQ2LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTE0NT1FWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE0Ni1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExNDc6c3RhdGljIGludCBfX3BoeV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZHluYW1pYylcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNDgte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTcxLS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE3MjogKiBwaHlfZGV2aWNlX3JlbW92ZSAtIFJlbW92ZSBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBwaHkgZGV2aWNlIGZyb20gdGhlIE1ESU8gYnVzXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTczLSAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIHJlbW92ZVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTc4LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE3OTp2b2lkIHBoeV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTgwLXtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExODE6XFx0X19waHlfZGV2aWNlX3JlbW92ZShwaHlkZXYsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExODItfVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE4MzpFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVtb3ZlKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExODQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA3OjMxLjMyNzcwNzU3NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODM4NzIyNDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFBIWSBEZXZpY2UgUmVtb3ZhbCBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBgcGh5X2RldmljZV9yZW1vdmVgIGlzIGV4cG9zZWQsIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy4gVG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIGZ1bmN0aW9uIGltcGFjdHMgdGhlIHN5c3RlbSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciBQSFkgZGV2aWNlIG1hbmFnZW1lbnQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYC4gVGhlc2UgZnVuY3Rpb25zIGxpa2VseSBwbGF5IGEgY3J1Y2lhbCByb2xlIGluIHRoZSBsaWZlY3ljbGUgYW5kIGRlcGVuZGVuY3kgbWFuYWdlbWVudCBhcm91bmQgcmVtb3ZhbCBhbmQgd2lsbCBoZWxwIGluZm9ybSB0aGUgaW1wYWN0IG9mIGEgY2FsbCB0byBgcGh5X2RldmljZV9yZW1vdmVgLiBCeSBleGFtaW5pbmcgdGhlaXIgaW50ZXJhY3Rpb25zLCBJIGNhbiBzdGFydCBmb3JtaW5nIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCByZW1vdmFsIHByb2NlZHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAzOTUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNzozNS4xNjY0MzQyMDZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODI5MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9hdHRhY2hfZGlyZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMjQ0PWludCBwaHlfY29ubmVjdF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTI1Mi1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEyNTM6XFx0cmMgPSBwaHlfYXR0YWNoX2RpcmVjdChkZXYsIHBoeWRldiwgcGh5ZGV2LVxcdTAwM2VkZXZfZmxhZ3MsIGludGVyZmFjZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjU0LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTc3Nz1zdGF0aWMgdm9pZCBwaHlfcmVsZWFzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzg2LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTc4NzogKiBwaHlfYXR0YWNoX2RpcmVjdCAtIGF0dGFjaCBhIG5ldHdvcmsgZGV2aWNlIHRvIGEgZ2l2ZW4gUEhZIGRldmljZSBwb2ludGVyXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzg4LSAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGF0dGFjaFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODAwLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTgwMTppbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4MDItXFx0XFx0ICAgICAgdTMyIGZsYWdzLCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xOTU5LX1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE5NjA6RVhQT1JUX1NZTUJPTChwaHlfYXR0YWNoX2RpcmVjdCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xOTYxLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xOTY2LSAqIFRoaXMgZGV0YWNoZXMgdGhlIHBoeSBkZXZpY2UgZnJvbSBpdHMgbmV0d29yayBkZXZpY2UgYW5kIHRoZSBwaHlcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE5Njc6ICogZHJpdmVyLCBhbmQgZHJvcHMgdGhlIHJlZmVyZW5jZSBjb3VudCB0YWtlbiBpbiBwaHlfYXR0YWNoX2RpcmVjdCgpLlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTk2OC0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDc6MzUuMjEzMjcwMDgzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDQyNDc1MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpcmVjdCBEZXZpY2UgQXR0YWNobWVudCBcdTAwMjYgRGV0YWNobWVudCoqXG5cbk9rYXksIHNvIGBwaHlfYXR0YWNoX2RpcmVjdGAgaXMgZXhwb3J0ZWQsIHRoYXQncyBnb29kIHRvIGtub3cuIEl0IG1lYW5zIGl0J3MgYXZhaWxhYmxlIGZvciBvdGhlciBtb2R1bGVzIG9yIHRoZSBrZXJuZWwgdG8gdXNlLCBsaWtlbHkgZm9yIGRpcmVjdGx5IGNvbm5lY3RpbmcgYSBwaHlzaWNhbCBkZXZpY2UgdG8gYSBzcGVjaWZpYyBkcml2ZXIgb3Igc3Vic3lzdGVtLiBNeSBuZXh0IHRob3VnaHQgaXMsIGxldCdzIG1ha2Ugc3VyZSB3ZSBhbHNvIHVuZGVyc3RhbmQgdGhlIGNvdW50ZXJwYXJ0LCB0aGUgZnVuY3Rpb24gdXNlZCB0byByZXZlcnNlIHRoaXMgcHJvY2VzczogYHBoeV9kZXRhY2hgLiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBhdHRhY2htZW50IGNhbiBiZSBwcm9wZXJseSB1bmRvbmUgd2hlbiBuZWNlc3NhcnksIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBzeXN0ZW0gc3RhYmlsaXR5IGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRldGFjaCBmdW5jdGlvbidzIGJlaGF2aW9yIHRvIHVuZGVyc3RhbmQgdGhlIGVudGlyZSBhdHRhY2gvZGV0YWNoIGxpZmVjeWNsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExMDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNzozOS4wMTc1MjA1NDdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDU3ODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9kZXRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTMxMT1zdGF0aWMgYm9vbCBtZGlvX2J1c19waHlfbWF5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzI3LVxcdCAqIHN1c3BlbmRlZCBhcyBwYXJ0IG9mIGEgcHJpb3IgY2FsbCB0byBwaHlfZGlzY29ubmVjdCgpIC1cXHUwMDNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozMjg6XFx0ICogcGh5X2RldGFjaCgpIC1cXHUwMDNlIHBoeV9zdXNwZW5kKCkgYmVjYXVzZSB0aGUgcGFyZW50IG5ldGRldiBtaWdodCBiZSB0aGVcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTMyOS1cXHQgKiBNRElPIGJ1cyBkcml2ZXIgYW5kIGNsb2NrIGdhdGVkIGF0IHRoaXMgcG9pbnQuXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEzMTI9dm9pZCBwaHlfZGlzY29ubmVjdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMzIxLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTMyMjpcXHRwaHlfZGV0YWNoKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMzIzLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTgwMT1pbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTg3NS1cXHQgKiByZWFkeS4gT25jZSB3ZSBkbyB0aGF0IHdlIHN0aWxsIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxODc2OlxcdCAqIGxpbmtzIHdlcmUgc3VjY2Vzc2Z1bGx5IHNldCB1cCBvciBub3QgZm9yIHBoeV9kZXRhY2goKSB0b1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTg3Ny1cXHQgKiByZW1vdmUgdGhlbSBhY2NvcmRpbmdseS5cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTk0My1lcnJvcjpcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE5NDQ6XFx0LyogcGh5X2RldGFjaCgpIGRvZXMgYWxsIG9mIHRoZSBjbGVhbnVwIGJlbG93ICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxOTQ1OlxcdHBoeV9kZXRhY2gocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE5NDYtXFx0cmV0dXJuIGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTk2MD1FWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hfZGlyZWN0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTk2Mi0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE5NjM6ICogcGh5X2RldGFjaCAtIGRldGFjaCBhIFBIWSBkZXZpY2UgZnJvbSBpdHMgbmV0d29yayBkZXZpY2VcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE5NjQtICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE5NjgtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxOTY5OnZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTk3MC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIwNDAtfVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjA0MTpFWFBPUlRfU1lNQk9MKHBoeV9kZXRhY2gpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjA0Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDc6MzkuMDYzOTg1NDI0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczNzE1ODg5MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXMgU3ltYm9sIFJlZmluZW1lbnQqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgcGh5X2RldGFjaGAgaXMgZXhwb3J0ZWQsIHRoYXQncyBnb29kLiBUaW1lIHRvIHNvbGlkaWZ5IHRoZSBsaXN0IG9mIEZvY3VzU3ltYm9scy4gQmFzZWQgb24gdGhhdCBmYWN0LCBhbmQgd2hhdCBJIGtub3cgYWJvdXQgdGhlIHBoeWxpYiwgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBpbW1lZGlhdGVseSBjb21lIHRvIG1pbmQ6XG5cbiogICBgX19tZGlvYnVzX3JlZ2lzdGVyYFxuKiAgIGBtZGlvYnVzX3VucmVnaXN0ZXJgXG4qICAgYG1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpbmBcbiogICBgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2VuZGBcbiogICBgbWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZWBcbiogICBgbWRpb2J1c19iZWdpbl9yZW1vdmVgXG4qICAgYG1kaW9idXNfZmluaXNoX3JlbW92ZWBcbiogICBgbWRpb19kZXZpY2VfcmVnaXN0ZXJgXG4qICAgYG1kaW9fZGV2aWNlX3JlbW92ZWBcbiogICBgcGh5X2RldmljZV9yZWdpc3RlcmBcbiogICBgcGh5X2RldmljZV9yZW1vdmVgXG4qICAgYHBoeV9hdHRhY2hfZGlyZWN0YFxuKiAgIGBwaHlfZGV0YWNoYFxuXG5IYW5nIG9uIGEgc2Vjb25kLi4uIGNoZWNraW5nIHRob3NlIGludGVybmFsIHBoeWxpYiBmdW5jdGlvbnMsIG5hbWVseSBgbWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZWAsIGBtZGlvYnVzX2JlZ2luX3JlbW92ZWAsIGFuZCBgbWRpb2J1c19maW5pc2hfcmVtb3ZlYCwgSSBzZWUgdGhleSAqYXJlbid0KiBzdGF0aWMuIFRoYXQgbWVhbnMgdGhleSdyZSBub3QgZnVsbHkgaW50ZXJuYWwgYW5kIGNhbiBzdGlsbCBiZSBpbmNsdWRlZC4gT2theSwgbWFrZXMgc2Vuc2UuXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBgb2ZfbWRpb2AgY29kZSwgc3BlY2lmaWNhbGx5IGBvZl9tZGlvYnVzX3JlZ2lzdGVyX2NoaWxkYCBhbmQgYG9mX21kaW9idXNfc2Nhbl9waHlgLiBUaGVzZSBhcmUgbWFya2VkIHN0YXRpYywgYnV0IHRoZXkncmUgY2FsbGVkIGZyb20gYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAuIEluY2x1ZGluZyBgX19vZl9tZGlvYnVzX3JlZ2lzdGVyYCBzaG91bGQgY292ZXIgdGhhdCBqdXN0IGZpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMDM0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA3OjQ2LjQzNTU3NzY3N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3ODgzMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19vZl9tZGlvYnVzX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jPTIzMz1zdGF0aWMgaW50IF9fb2ZfbWRpb2J1c19wYXJzZV9waHlzKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMjc3LS8qKlxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjI3ODogKiBfX29mX21kaW9idXNfcmVnaXN0ZXIgLSBSZWdpc3RlciBtaWlfYnVzIGFuZCBjcmVhdGUgUEhZcyBmcm9tIHRoZSBkZXZpY2UgdHJlZVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTI3OS0gKiBAbWRpbzogcG9pbnRlciB0byBtaWlfYnVzIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMjg1LSAqL1xcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjI4NjppbnQgX19vZl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTI4Ny1cXHRcXHRcXHQgIHN0cnVjdCBtb2R1bGUgKm93bmVyKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMzU4LX1cXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzozNTk6RVhQT1JUX1NZTUJPTChfX29mX21kaW9idXNfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTM2MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDc6NDYuNDgxMzcwODM0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNzU5NTMzNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTURJTyBCdXMgUmVnaXN0cmF0aW9uIGFuZCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBfX29mX21kaW9idXNfcmVnaXN0ZXJgIGlzIGluZGVlZCBleHBvcnRlZC4gVGhhdCdzIGdvb2Q7IGl0J3MgdGhlIGVudHJ5IHBvaW50IEkgbmVlZC4gTm93LCBsZXQncyBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW52b2x2ZWQgaW4gdGhpcyBhcmVhLCBqdXN0IHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEknbSBzZWVpbmcgYE9GX0RZTkFNSUNgLCBgT0ZfT1ZFUkxBWWAsIGBPRl9NRElPYCwgYFBIWUxJQmAsIGFuZCBgTURJT19ERVZJQ0VgIGFzIHJlbGV2YW50IGNvbmZpZ3MuXG5cblJpZ2h0LCB0aW1lIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYE9GX01ESU9gIHJlbGllcyBvbiBgT0ZgLiBBbmQgeWVzLCB0aGF0J3Mgd2hhdCBJIHRob3VnaHQ7IGl0J3MgZGVwZW5kZW50LiBOZXh0LCBJIHNob3VsZCBjaGVjayBgT0ZfRFlOQU1JQ2AsIGp1c3QgdG8gYmUgY2VydGFpbi4gWWVzLCBgT0ZfRFlOQU1JQ2AgYWxzbyBkZXBlbmRzIG9uIGBPRmAuIEZpbmFsbHkgYE9GX09WRVJMQVlgLCB3aGljaCBhbHNvIHJlcXVpcmVzIGBPRmAuIEV4Y2VsbGVudCwgdGhvc2UgYXJlIGFsbCBhcyBleHBlY3RlZC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYE9GX01ESU9gLCBJJ2xsIGdvIGhhdmUgYSBsb29rIGluIGBkcml2ZXJzL25ldC9tZGlvL0tjb25maWdgLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzAzMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNzo1MC42NTczMjY3MDVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDEzOTk3MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9GX01ESU9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz05PWNvbmZpZyBGV05PREVfTURJT1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEzLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxNDpjb25maWcgT0ZfTURJT1xcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNS1cXHRkZWZfdHJpc3RhdGUgT0ZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDc6NTEuOTU4NzM5NTM0WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMTU0MTE2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhpbmtpbmcgb24gRGV2aWNlIFRyZWUgYW5kIFBIWUxJQiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYE9GX01ESU9gIGlzIGEgdHJpc3RhdGUgb3B0aW9uIGFuZCBpcyBpbnRyaW5zaWNhbGx5IGxpbmtlZCB0byB0aGUgYnJvYWRlciBEZXZpY2UgVHJlZSAoYE9GYCkgY29uZmlndXJhdGlvbi4gU2luY2UgaXQncyBhdXRvbWF0aWNhbGx5IHB1bGxlZCBpbiB3aGVuIGBPRmAgaXMgZW5hYmxlZCwgSSBkb24ndCBuZWVkIHRvIGV4cGxpY2l0bHkgZGVmaW5lIGl0LiBNeSBmb2N1cywgdGhlbiwgc2hvdWxkIGJlIG9uIHRoZSBjb3JlIERldmljZSBUcmVlIGNvbmZpZ3VyYXRpb25zOiBgT0ZgLCBgT0ZfRFlOQU1JQ2AsIGBPRl9PVkVSTEFZYCwgYFBIWUxJQmAsIGFuZCBgTURJT19ERVZJQ0VgLlxuXG5BY3R1YWxseSwgd2FpdCBhIG1pbnV0ZS4uLiBUaGlua2luZyBhYm91dCBpdCwgYE9GX0RZTkFNSUNgIGFuZCBgT0ZfT1ZFUkxBWWAgYXJlIGVzc2VudGlhbGx5IHN1cGVyc2V0cyB0aGF0IGFscmVhZHkgKmltcGx5KiB0aGF0IGBPRmAgaXMgZW5hYmxlZC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4gSXQgbG9va3MgbGlrZSBJIGp1c3QgbmVlZCB0byBiZSBtaW5kZnVsIG9mIGBQSFlMSUJgIGFuZCBlbnN1cmUgdGhhdCdzIGNvcnJlY3RseSBjb25maWd1cmVkIGJhc2VkIG9uIHRoZSB0YXJnZXQgc3lzdGVtLiBMZXQgbWUgZG91YmxlLWNoZWNrIGhvdyB0aGF0J3MgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM1MzQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowNzo1Ny4yNzQxNTUzNzRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTkxMTEyNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBIWUxJQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZz02PWNvbmZpZyBQSFlMSU5LXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNC1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzoxNTptZW51Y29uZmlnIFBIWUxJQlxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTE2LVxcdHRyaXN0YXRlIFxcXCJQSFkgRGV2aWNlIHN1cHBvcnQgYW5kIGluZnJhc3RydWN0dXJlXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc9NDY9Y29uZmlnIE9QRU5fQUxMSUFOQ0VfSEVMUEVSU1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNDgtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NDk6Y29uZmlnIFBIWUxJQl9MRURTXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNTAtXFx0ZGVmX2Jvb2wgT0ZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDc6NTguNDMzMjczNzAzWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNjQxODEwOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgUEhZTElCIGFuZCBNRElPX0RFVklDRSoqXG5cbk9rYXksIHNvIHdlJ3JlIHRhbGtpbmcgYFBIWUxJQmAgaGVyZSwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBhIG1lbnVjb25maWcgb3B0aW9uLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGRpZ2dpbmcgaW50byB0aGUgaW50cmljYWNpZXMgb2YgaGFyZHdhcmUgYWJzdHJhY3Rpb24gYW5kIGRyaXZlciBzZWxlY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBzcGVjaWZpY2FsbHkgY29udHJvbHMuXG5cbkxldCdzIGRpdmUgZGVlcGVyIGFuZCB2ZXJpZnkgd2hhdCBwcmVjaXNlbHkgdGhlIGBNRElPX0RFVklDRWAgaXMgZG9pbmcgd2l0aGluIHRoaXMgZnJhbWV3b3JrLiBUaGlzIGNvdWxkIGludm9sdmUgZGlyZWN0IGFjY2VzcywgaW5kaXJlY3QgY29uZmlndXJhdGlvbiwgb3Igc29tZSBzb3J0IG9mIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZSBgTURJT19ERVZJQ0VgIGlzIGEgbmVjZXNzYXJ5IG9yIG9wdGlvbmFsIHNlbGVjdGlvbiB1bmRlciB0aGUgUEhZTElCIHVtYnJlbGxhLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDAwMSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA4OjAzLjQ5NzQ1ODE4OVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5NzQ5NDcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRElPX0RFVklDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDg6MDMuNTQ1NDQxMDI2WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NTAxMjI3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlBpbnBvaW50aW5nIHRoZSBEZWZpbml0aW9uIG9mIE1ESU9fREVWSUNFKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYE1ESU9fREVWSUNFYCBpcyBjb21pbmcgZnJvbS4gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29kZSdzIGJlaGF2aW9yIGhlcmUuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGl0cyBkZWZpbml0aW9uLCBiZWNhdXNlIHdpdGhvdXQgdGhhdCwgSSdtIGVzc2VudGlhbGx5IGZseWluZyBibGluZC4gS25vd2luZyB0aGUgY29udGV4dCBvZiB0aGlzIG1hY3JvIGlzICpjcml0aWNhbCouIEknbSBpbW1lZGlhdGVseSB0aGlua2luZzogd2hlcmUgaXMgaXQgZGVmaW5lZD8gSXMgaXQgaW4gYSBoZWFkZXIgZmlsZT8gQSBjb25maWd1cmF0aW9uIGZpbGU/IEEgcGxhdGZvcm0tc3BlY2lmaWMgaW5jbHVkZT8gVGltZSB0byBnbyBodW50aW5nLiBMZXQncyBzdGFydCB0aGUgc2VhcmNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDIxNCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA4OjA4LjI5NTU2Njc3MVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MTI1MTAyNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1ESU9fREVWSUNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDg6MDkuOTU2ODI1MDE3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MjIzMjQ2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBNRElPIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIGBNRElPX0RFVklDRWDigKYgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQganVtcHMgdG8gdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UuIFNwZWNpZmljYWxseSwgdGhhdCBoYXMgdG8gYmUgZGVmaW5lZCBpbiBgZHJpdmVycy9uZXQvbWRpby9LY29uZmlnYCwgZG9lc24ndCBpdD8gSXQncyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlLCBjb25zaWRlcmluZyB0aGUgY29udGV4dC4gVGhhdCdzIHdoZXJlIHlvdSdkIGV4cGVjdCB0byBmaW5kIHRoZSBkZXBlbmRlbmNpZXMsIGFueSBkZWZhdWx0IHNldHRpbmdzLCBoZWxwIHRleHQsIGFuZCBhbGwgdGhlIHVzdWFsIEtjb25maWcgZ29vZG5lc3MgYXNzb2NpYXRlZCB3aXRoIGEgaGFyZHdhcmUgZmVhdHVyZSBsaWtlIHRoaXMuIEkgYmV0IGl0IGlzIGRlZmluZWQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MzkyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDg6MTQuNDc5MTUyNjI3WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzI0OTI4NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1ESU9fREVWSUNFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDg6MTQuNTI2NDEyMDc0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwNjE2NjM5MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBQSFkgQ29uZmlndXJhdGlvbiBTcGFjZSoqXG5cbk9rYXksIHNvIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgYE1ESU9fREVWSUNFYCB3YXMgZGVmaW5lZCB3aXRoaW4gdGhlIG5ldHdvcmsgUEhZIEtjb25maWcgZmlsZS4gVGhhdCdzIGEgY29tbW9uIGFyZWEgZm9yIHN1Y2ggc2V0dGluZ3MsIGJ1dCBzb21ldGhpbmcgZmVlbHMgb2ZmLiBMZXQncyBub3QgbWFrZSBhc3N1bXB0aW9ucy4gVGltZSB0byB2ZXJpZnkuIFRoZSBsb2dpY2FsIG5leHQgcGxhY2UgdG8gY2hlY2sgd291bGQgYmUgdGhlIGBkcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhhdCBJJ3ZlIGp1bXBlZCB0byBhIGNvbmNsdXNpb24gd2l0aG91dCB2ZXJpZnlpbmcgYSBrZXkgcGFydCBvZiB0aGUgY29uZmlndXJhdGlvbiB0cmVlLiBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGlzIGlzIGFjdHVhbGx5IGRlZmluZWQgYmVmb3JlIHByb2NlZWRpbmcuIFRoaXMgaXMgYmFzaWMsIGJ1dCBpbXBvcnRhbnQsIGdvb2QgcHJhY3RpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NjA4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDg6MjIuNTg4MDc4OTk0WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjgyMDE2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvX2RldmljZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTQ9bGlicGh5LXlcXHRcXHRcXHQ6PSBwaHkubyBwaHktYzQ1Lm8gcGh5LWNvcmUubyBwaHlfZGV2aWNlLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTYtXFx0XFx0XFx0XFx0ICAgcGh5X2NhcHMubyBtZGlvX2J1c19wcm92aWRlci5vIHBoeV9wb3J0Lm8gXFxcXFxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo3OlxcdFxcdFxcdFxcdCAgIG1kaW9fZGV2aWNlLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtOC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDg6MjIuNjM0OTAzOTExWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMDE0Njc2Njk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVuZGVyc3RhbmRpbmcgdGhlIFBIWS9NRElPIENvcmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbWRpb19kZXZpY2Uub2AgaGVyZS4gUmlnaHQsIHRoYXQncyBkZWZpbml0ZWx5IHBhcnQgb2YgYGxpYnBoeS15YCwgd2hpY2gsIG9mIGNvdXJzZSwgaXMgYnVpbHQgd2hlbiBgQ09ORklHX1BIWUxJQmAgaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBzZW5zZSwgY29ubmVjdHMgdGhlIGRvdHMuIEkgcmVtZW1iZXIgdGhpcyBub3cuIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogdGhlIFBIWS9NRElPIGNvcmUgZnVuY3Rpb25hbGl0eSBoaW5nZXMgb24ganVzdCBgQ09ORklHX1BIWUxJQmAuIFRoYXQncyB0aGUga2V5LiBOb3csIGp1c3QgdG8gY29uZmlybSwgSSdsbCBnbyBjaGVjayBob3cgYE9GX01ESU9gIGlzIHNldCB1cCBpbiBgZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZWAuIE5lZWQgdG8gYmUgc3VyZSBhbGwgdGhlIHBpZWNlcyBhcmUgYWNjb3VudGVkIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ5MjgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQwMDowODo1Mi42NDk1ODM4NDlaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzA3NDQ3NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2ZfbWRpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU9NT1vYmotJChDT05GSUdfRldOT0RFX01ESU8pXFx0Kz0gZndub2RlX21kaW8ub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6NjpvYmotJChDT05GSUdfT0ZfTURJTylcXHRcXHQrPSBvZl9tZGlvLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlLTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA4OjUzLjkyMDMzNjM3WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MTE5MTc5Mjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE1ESU8gQ29uZmlndXJhdGlvbiBhbmQgS2V5IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgTURJTyBjb25maWd1cmF0aW9uLCBhbmQgYENPTkZJR19PRl9NRElPYCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZS4gSXQncyBhIGBkZWZfdHJpc3RhdGUgT0ZgLCB3aGljaCBtZWFucyBpZiB0aGUgZGV2aWNlIHRyZWUgc3VwcG9ydCAoYE9GYCkgaXMgZW5hYmxlZCwgdGhlbiBgQ09ORklHX09GX01ESU9gIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gVGhhdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEknbGwgZGVmaW5pdGVseSB3YW50IHRvIGluY2x1ZGUgYE9GYCwgYE9GX0RZTkFNSUNgLCBhbmQgYE9GX09WRVJMQVlgLCBzaW5jZSB0aGV54oCZcmUgY29yZSB0byB0aGlzIGZ1bmN0aW9uYWxpdHkuIE9oLCBhbmQgSSBjYW4ndCBmb3JnZXQgYFBIWUxJQmAgZWl0aGVyLiBJdCdzIGludHJpbnNpY2FsbHkgbGlua2VkIHRvIFBIWSBtYW5hZ2VtZW50LCB3aGljaCBNRElPIGNvbnRyb2xzLlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gaW50byB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLiBJJ20gZm9jdXNpbmcgb24gdGhlIG9uZXMgdGhhdCByZXByZXNlbnQgdGhlIGNvcmUgb3BlcmF0aW9uczpcbiogICBgX19tZGlvYnVzX3JlZ2lzdGVyYCBhbmQgYG1kaW9idXNfdW5yZWdpc3RlcmA6IFRoZXNlIGFyZSB0aGUgb2J2aW91cyByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIGZ1bmN0aW9ucyBmb3IgdGhlIE1ESU8gYnVzIGl0c2VsZi5cbiogICBgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luYCwgYG1kaW9idXNfZGV2aWNlX2NoYW5nZV9lbmRgOiBTb3VuZHMgbGlrZSB0aGVzZSBoYW5kbGUgY2hhbmdlcyB0byBkZXZpY2VzIG9uIHRoZSBidXMuXG4qICAgYG1kaW9idXNfcmVnaXN0cmF0aW9uX2RvbmVgOiBOZWNlc3NhcnkgZm9yIGNvbXBsZXRpbmcgdGhlIHJlZ2lzdHJhdGlvbi5cbiogICBgbWRpb2J1c19iZWdpbl9yZW1vdmVgLCBgbWRpb2J1c19maW5pc2hfcmVtb3ZlYDogVGhlc2UgbG9vayBsaWtlIHRoZSByZW1vdmFsIGNvdW50ZXJwYXJ0cy5cbiogICBgbWRpb19kZXZpY2VfcmVnaXN0ZXJgIGFuZCBgbWRpb19kZXZpY2VfcmVtb3ZlYDogVGhlc2Ugd291bGQgcmVnaXN0ZXIgYW5kIHJlbW92ZSBpbmRpdmlkdWFsIE1ESU8gZGV2aWNlcywgcHJlc3VtYWJseSBQSFlzLlxuKiAgIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCwgYHBoeV9kZXZpY2VfcmVtb3ZlYDogSW1wb3J0YW50IGZvciBhdHRhY2hpbmcgYW5kIGRldGFjaGluZyBQSFlzIHRvIHRoZSBidXMuXG4qICAgYHBoeV9hdHRhY2hfZGlyZWN0YCwgYHBoeV9kZXRhY2hgOiBUaGVzZSBkaXJlY3RseSBhdHRhY2ggb3IgZGV0YWNoIGEgUEhZLlxuKiAgIGBfX29mX21kaW9idXNfcmVnaXN0ZXJgOiBJbmRpY2F0ZXMgYSBkZXZpY2UgdHJlZSByZWdpc3RyYXRpb24uXG5cbkkgdGhpbmsgSSBoYXZlIGEgc29saWQgb3ZlcnZpZXcgb2YgdGhlIHJlZ2lzdHJhdGlvbiBhbmQgcmVtb3ZhbCBwcm9jZXNzZXMuIEl0J3MgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCB0aGUgZGV2aWNlIHRyZWUgaW50ZWdyYXRpb24gYXMgd2VsbCwgYmFzZWQgb24gdGhlIGZ1bmN0aW9uIG5hbWVzLlxuXG5IbW0sIGFtIEkgbWlzc2luZyBhbnkgb2J2aW91cyBvbmVzPyBBaCB5ZXMsIGBtZGlvYnVzX3NjYW5fYzIyYCBhbmQgYG1kaW9idXNfc2Nhbl9jNDVgLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgZGlzY292ZXJpbmcgZGV2aWNlcyBvbiB0aGUgYnVzLiBUaGV5J3JlIGNyaXRpY2FsIGZvciBhY3R1YWxseSBwb3B1bGF0aW5nIHRoZSBNRElPIGJ1cyB3aXRoIGF0dGFjaGVkIGRldmljZXMuIEknbGwgbmVlZCB0byBrZWVwIHRob3NlIGluIG1pbmQgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUyNjIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDk6MDguMDM5NTE5MjQ0WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTU2MDE0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvYnVzX3NjYW5fYzIyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jPTQxNj1zdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKl9fbWRpb2J1c19zY2FuKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDY5LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjQ3MDogKiBtZGlvYnVzX3NjYW5fYzIyIC0gc2NhbiBvbmUgYWRkcmVzcyBvbiBhIGJ1cyBmb3IgQzIyIE1ESU8gZGV2aWNlcy5cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00NzEtICogQGJ1czogbWlpX2J1cyB0byBzY2FuXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00ODAtICovXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NDgxOnN0cnVjdCBwaHlfZGV2aWNlICptZGlvYnVzX3NjYW5fYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyKVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ4Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00OTQtfVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjQ5NTpFWFBPUlRfU1lNQk9MKG1kaW9idXNfc2Nhbl9jMjIpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTQ5Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDk6MDguMDkxMDg1NzIxWiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDkyNTc0NjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKktlcm5lbCBNRElPIEJ1cyBTY2FubmluZzogQSBRdWljayBNZW50YWwgQ2hlY2sqKlxuXG5SaWdodCwgbGV0IG1lIHNlZS4uLiBJJ20gY3VycmVudGx5IGxvb2tpbmcgYXQgdGhlIE1ESU8gYnVzIGNvZGUuIEkga25vdyBgbWRpb2J1c19zY2FuX2MyMmAgaXMgZGVmaW5pdGVseSBleHBvcnRlZCwgdGhhdCdzIGNsZWFyLiBOb3cgSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIGlmIHdlJ3JlIGFsc28gbWFraW5nIGBtZGlvYnVzX3NjYW5fYzQ1YCBhdmFpbGFibGUgb3V0c2lkZSBvZiB0aGUgZHJpdmVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteXNlbGYgb24gdGhlIHZpc2liaWxpdHkgYW5kIHBvc3NpYmxlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIEM0NSBzdXBwb3J0IGluIHRoaXMgcGFydGljdWxhciBjb250ZXh0LiBJdCdzIGltcG9ydGFudCB0byBjb25maXJtIHdoZXRoZXIgdXNlcnNwYWNlIG9yIG90aGVyIGtlcm5lbCBtb2R1bGVzIGNhbiBkaXJlY3RseSBjYWxsIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjM3MSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA5OjE5LjE4MzY2NDA2NFoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5MTY5NzgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvYnVzX3NjYW5fYzQ1XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jPTQ5NT1FWFBPUlRfU1lNQk9MKG1kaW9idXNfc2Nhbl9jMjIpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDk3LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jOjQ5ODogKiBtZGlvYnVzX3NjYW5fYzQ1IC0gc2NhbiBvbmUgYWRkcmVzcyBvbiBhIGJ1cyBmb3IgQzQ1IE1ESU8gZGV2aWNlcy5cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00OTktICogQGJ1czogbWlpX2J1cyB0byBzY2FuXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy01MDgtICovXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NTA5OnN0YXRpYyBzdHJ1Y3QgcGh5X2RldmljZSAqbWRpb2J1c19zY2FuX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy01MTAte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM9NTMwPXN0YXRpYyBpbnQgbWRpb2J1c19zY2FuX2J1c19jNDUoc3RydWN0IG1paV9idXMgKmJ1cylcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTU0MS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYzo1NDI6XFx0XFx0XFx0cGh5ZGV2ID0gbWRpb2J1c19zY2FuX2M0NShidXMsIGkpO1xcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jLTU0My1cXHRcXHRcXHRpZiAoSVNfRVJSKHBoeWRldikgXFx1MDAyNlxcdTAwMjYgKFBUUl9FUlIocGh5ZGV2KSAhPSAtRU5PREVWKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMDA6MDk6MjAuNDc1MzY3MDMzWiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4Njk4MTg5MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBQbGFuIGZvciBEeW5hbWljIE1ESU8gRGV2aWNlIEhhbmRsaW5nKipcblxuT2theSwgaGVyZSdzIHdoYXQncyBydW5uaW5nIHRocm91Z2ggbXkgaGVhZC4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgY29kZSdzIHN0YXRpYy4gTGV0J3Mgc2VlLi4uIHRoZSBhdXRob3IncyBpbmNsdWRpbmcgYG1kaW9idXNfc2Nhbl9jMjJgIOKAkyBnb29kLCB0aGF0J3MgZGVmaW5pdGVseSByZWxldmFudC5cblxuTGV0IG1lIGJyZWFrIGRvd24gdGhlIHJlYXNvbmluZyBmb3IgdGhpcy4gVGhlIHBhdGNoIG1vZGlmaWVzIGNyaXRpY2FsIE1ESU8gYnVzIGFuZCBQSFkgZGV2aWNlIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24gbG9naWMuIEl0J3MgZGVzaWduZWQgdG8gaGFuZGxlIGR5bmFtaWMgRGV2aWNlIFRyZWUgY2hhbmdlcywgc3BlY2lmaWNhbGx5IGJvdGggT0YgZHluYW1pYyAqYW5kKiBvdmVybGF5IGNvbmZpZ3VyYXRpb25zLiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFRoZSBhdXRob3IncyBpbnRyb2R1Y2VkIGEgbG9ja2luZyBtZWNoYW5pc20sIGBtZGlvX21hcF9sb2NrYCwgdG8gc2VyaWFsaXplIHRoZXNlIGRldmljZSBjaGFuZ2VzLiBUaGlzIGlzICpjcml0aWNhbCogaW4gcHJldmVudGluZyByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIFBIWSBhdHRhY2htZW50IGFuZCBkZXRhY2htZW50LiBPbiB0b3Agb2YgdGhhdCwgdGhlcmUncyBhIHJlZmFjdG9yaW5nIG9mIHRoZSBQSFkgYW5kIE1ESU8gZGV2aWNlIHNjYW5uaW5nIGFuZCByZWdpc3RyYXRpb24gcHJvY2Vzc2VzLlxuXG5UaGlzIGlzIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gY29kZSBhbmQgaXQncyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwsIHNvIGl0IG5lZWRzIHRvIGJlIGNhcmVmdWxseSBpbnZlc3RpZ2F0ZWQuIE15IGNvbmNlcm4gaXMgdGhlIG5ldyBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gbG9naWMuIFRoaXMgaXMgd2hlcmUgZGVhZGxvY2tzIGFuZCByYWNlIGNvbmRpdGlvbnMgYXJlIGxpa2VseSB0byBzaG93IHVwLiBUaGF0J3MgKmV4YWN0bHkqIHdoYXQgZnV6emluZyBpcyBnb29kIGZvci5cblxuTm93LCBmb3IgdGhlIGNvbmZpZ3VyYXRpb25zOiBgT0ZgLCBgT0ZfRFlOQU1JQ2AsIGBPRl9PVkVSTEFZYCwgYW5kIGBQSFlMSUJgLiBUaG9zZSBhcmUgYWxsIGVzc2VudGlhbCBmb3IgdHJpZ2dlcmluZyB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy5cblxuSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHMgdG8gdGFyZ2V0IHRoZSBmdXp6aW5nOiBgX19tZGlvYnVzX3JlZ2lzdGVyYCwgYG1kaW9idXNfdW5yZWdpc3RlcmAsIGBtZGlvYnVzX2RldmljZV9jaGFuZ2VfYmVnaW5gLCBgbWRpb2J1c19kZXZpY2VfY2hhbmdlX2VuZGAsIGBtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lYCwgYG1kaW9idXNfYmVnaW5fcmVtb3ZlYCwgYG1kaW9idXNfZmluaXNoX3JlbW92ZWAsIGBtZGlvX2RldmljZV9yZWdpc3RlcmAsIGBtZGlvX2RldmljZV9yZW1vdmVgLCBgcGh5X2RldmljZV9yZWdpc3RlcmAsIGBwaHlfZGV2aWNlX3JlbW92ZWAsIGBwaHlfYXR0YWNoX2RpcmVjdGAsIGBwaHlfZGV0YWNoYCwgYF9fb2ZfbWRpb2J1c19yZWdpc3RlcmAsIGFuZCBgbWRpb2J1c19zY2FuX2MyMmAuXG5cblllYWgsIHRoaXMgbG9va3Mgc29saWQuIEl0J3MgZ290IHRoZSByaWdodCBjb25maWd1cmF0aW9ucywgdGhlIHJpZ2h0IGZvY3VzLCBhbmQgYSBjbGVhciByZWFzb24gdG8gcG9rZSBhdCBpdC4gVGltZSB0byBidWlsZCBhIGZ1enogaGFybmVzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY5NzUsIk91dHB1dFRva2VucyI6Mjk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDAwOjA5OjI5LjM0NTE5MDUyNFoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMjkwOTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPRlwiLFxuICAgIFwiT0ZfRFlOQU1JQ1wiLFxuICAgIFwiT0ZfT1ZFUkxBWVwiLFxuICAgIFwiUEhZTElCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19tZGlvYnVzX3JlZ2lzdGVyXCIsXG4gICAgXCJtZGlvYnVzX3VucmVnaXN0ZXJcIixcbiAgICBcIm1kaW9idXNfZGV2aWNlX2NoYW5nZV9iZWdpblwiLFxuICAgIFwibWRpb2J1c19kZXZpY2VfY2hhbmdlX2VuZFwiLFxuICAgIFwibWRpb2J1c19yZWdpc3RyYXRpb25fZG9uZVwiLFxuICAgIFwibWRpb2J1c19iZWdpbl9yZW1vdmVcIixcbiAgICBcIm1kaW9idXNfZmluaXNoX3JlbW92ZVwiLFxuICAgIFwibWRpb19kZXZpY2VfcmVnaXN0ZXJcIixcbiAgICBcIm1kaW9fZGV2aWNlX3JlbW92ZVwiLFxuICAgIFwicGh5X2RldmljZV9yZWdpc3RlclwiLFxuICAgIFwicGh5X2RldmljZV9yZW1vdmVcIixcbiAgICBcInBoeV9hdHRhY2hfZGlyZWN0XCIsXG4gICAgXCJwaHlfZGV0YWNoXCIsXG4gICAgXCJfX29mX21kaW9idXNfcmVnaXN0ZXJcIixcbiAgICBcIm1kaW9idXNfc2Nhbl9jMjJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTURJTyBidXMgYW5kIFBIWSBkZXZpY2UgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uIGxvZ2ljIHRvIHN1cHBvcnQgZHluYW1pYyBkZXZpY2UgdHJlZSBjaGFuZ2VzIChPRiBkeW5hbWljIGFuZCBvdmVybGF5KS4gSXQgaW50cm9kdWNlcyBhIGxvY2tpbmcgbWVjaGFuaXNtIChgbWRpb19tYXBfbG9ja2ApIHRvIHNlcmlhbGl6ZSBkZXZpY2UgY2hhbmdlcyBhbmQgcHJldmVudCByYWNlcyBkdXJpbmcgUEhZIGF0dGFjaG1lbnQgYW5kIGRldGFjaG1lbnQuIEl0IGFsc28gcmVmYWN0b3JzIHRoZSBzY2FubmluZyBhbmQgcmVnaXN0cmF0aW9uIG9mIFBIWXMgYW5kIE1ESU8gZGV2aWNlcy4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGxvZ2ljIGRvZXMgbm90IGludHJvZHVjZSBkZWFkbG9ja3Mgb3IgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9GXCIsXG4gICAgXCJPRl9EWU5BTUlDXCIsXG4gICAgXCJPRl9PVkVSTEFZXCIsXG4gICAgXCJQSFlMSUJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX21kaW9idXNfcmVnaXN0ZXJcIixcbiAgICBcIm1kaW9idXNfdW5yZWdpc3RlclwiLFxuICAgIFwibWRpb2J1c19kZXZpY2VfY2hhbmdlX2JlZ2luXCIsXG4gICAgXCJtZGlvYnVzX2RldmljZV9jaGFuZ2VfZW5kXCIsXG4gICAgXCJtZGlvYnVzX3JlZ2lzdHJhdGlvbl9kb25lXCIsXG4gICAgXCJtZGlvYnVzX2JlZ2luX3JlbW92ZVwiLFxuICAgIFwibWRpb2J1c19maW5pc2hfcmVtb3ZlXCIsXG4gICAgXCJtZGlvX2RldmljZV9yZWdpc3RlclwiLFxuICAgIFwibWRpb19kZXZpY2VfcmVtb3ZlXCIsXG4gICAgXCJwaHlfZGV2aWNlX3JlZ2lzdGVyXCIsXG4gICAgXCJwaHlfZGV2aWNlX3JlbW92ZVwiLFxuICAgIFwicGh5X2F0dGFjaF9kaXJlY3RcIixcbiAgICBcInBoeV9kZXRhY2hcIixcbiAgICBcIl9fb2ZfbWRpb2J1c19yZWdpc3RlclwiLFxuICAgIFwibWRpb2J1c19zY2FuX2MyMlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNRElPIGJ1cyBhbmQgUEhZIGRldmljZSByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24gbG9naWMgdG8gc3VwcG9ydCBkeW5hbWljIGRldmljZSB0cmVlIGNoYW5nZXMgKE9GIGR5bmFtaWMgYW5kIG92ZXJsYXkpLiBJdCBpbnRyb2R1Y2VzIGEgbG9ja2luZyBtZWNoYW5pc20gKGBtZGlvX21hcF9sb2NrYCkgdG8gc2VyaWFsaXplIGRldmljZSBjaGFuZ2VzIGFuZCBwcmV2ZW50IHJhY2VzIGR1cmluZyBQSFkgYXR0YWNobWVudCBhbmQgZGV0YWNobWVudC4gSXQgYWxzbyByZWZhY3RvcnMgdGhlIHNjYW5uaW5nIGFuZCByZWdpc3RyYXRpb24gb2YgUEhZcyBhbmQgTURJTyBkZXZpY2VzLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gY29kZSB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC4gSXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gbG9naWMgZG9lcyBub3QgaW50cm9kdWNlIGRlYWRsb2NrcyBvciByYWNlIGNvbmRpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow687kr[1] Phase: Succeeded StartedAt: 2026-08-04 00:09:40 +0000 UTC FinishedAt: 2026-08-04 00:09:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow687kr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-04 00:09:40 +0000 UTC FinishedAt: 2026-08-04 00:09:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow687kr[2] Phase: Running StartedAt: 2026-08-04 00:09:40 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow687kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d661abdc30c254649c32ef6e0aa1e621e04ff0a7","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_DYNAMIC","OF_OVERLAY","PHYLIB"],"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":["__mdiobus_register","mdiobus_unregister","mdiobus_device_change_begin","mdiobus_device_change_end","mdiobus_registration_done","mdiobus_begin_remove","mdiobus_finish_remove","mdio_device_register","mdio_device_remove","phy_device_register","phy_device_remove","phy_attach_direct","phy_detach","__of_mdiobus_register","mdiobus_scan_c22"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d661abdc30c254649c32ef6e0aa1e621e04ff0a7","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_DYNAMIC","OF_OVERLAY","PHYLIB"],"series_id":"1bd95b7e-e378-45d8-9a53-3d7a0e3c591f","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-08-04 00:09:40 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d661abdc30c254649c32ef6e0aa1e621e04ff0a7","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_DYNAMIC","OF_OVERLAY","PHYLIB"],"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":["__mdiobus_register","mdiobus_unregister","mdiobus_device_change_begin","mdiobus_device_change_end","mdiobus_registration_done","mdiobus_begin_remove","mdiobus_finish_remove","mdio_device_register","mdio_device_remove","phy_device_register","phy_device_remove","phy_attach_direct","phy_detach","__of_mdiobus_register","mdiobus_scan_c22"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d661abdc30c254649c32ef6e0aa1e621e04ff0a7","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_DYNAMIC","OF_OVERLAY","PHYLIB"],"series_id":"1bd95b7e-e378-45d8-9a53-3d7a0e3c591f","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-workflow687kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d661abdc30c254649c32ef6e0aa1e621e04ff0a7","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_DYNAMIC","OF_OVERLAY","PHYLIB"],"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":["__mdiobus_register","mdiobus_unregister","mdiobus_device_change_begin","mdiobus_device_change_end","mdiobus_registration_done","mdiobus_begin_remove","mdiobus_finish_remove","mdio_device_register","mdio_device_remove","phy_device_register","phy_device_remove","phy_attach_direct","phy_detach","__of_mdiobus_register","mdiobus_scan_c22"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d661abdc30c254649c32ef6e0aa1e621e04ff0a7","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_DYNAMIC","OF_OVERLAY","PHYLIB"],"series_id":"1bd95b7e-e378-45d8-9a53-3d7a0e3c591f","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-04 00:09:40 +0000 UTC FinishedAt: 2026-08-04 00:09:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow687kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d661abdc30c254649c32ef6e0aa1e621e04ff0a7","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_DYNAMIC","OF_OVERLAY","PHYLIB"],"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":["__mdiobus_register","mdiobus_unregister","mdiobus_device_change_begin","mdiobus_device_change_end","mdiobus_registration_done","mdiobus_begin_remove","mdiobus_finish_remove","mdio_device_register","mdio_device_remove","phy_device_register","phy_device_remove","phy_attach_direct","phy_detach","__of_mdiobus_register","mdiobus_scan_c22"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d661abdc30c254649c32ef6e0aa1e621e04ff0a7","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_DYNAMIC","OF_OVERLAY","PHYLIB"],"series_id":"1bd95b7e-e378-45d8-9a53-3d7a0e3c591f","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-04 00:09:40 +0000 UTC FinishedAt: 2026-08-04 00:09:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d661abdc30c254649c32ef6e0aa1e621e04ff0a7","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_DYNAMIC","OF_OVERLAY","PHYLIB"],"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-workflow687kr/series-workflow687kr-convert-artifact-972281212/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow687kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d661abdc30c254649c32ef6e0aa1e621e04ff0a7","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_DYNAMIC","OF_OVERLAY","PHYLIB"],"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":["__mdiobus_register","mdiobus_unregister","mdiobus_device_change_begin","mdiobus_device_change_end","mdiobus_registration_done","mdiobus_begin_remove","mdiobus_finish_remove","mdio_device_register","mdio_device_remove","phy_device_register","phy_device_remove","phy_attach_direct","phy_detach","__of_mdiobus_register","mdiobus_scan_c22"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d661abdc30c254649c32ef6e0aa1e621e04ff0a7","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_DYNAMIC","OF_OVERLAY","PHYLIB"],"series_id":"1bd95b7e-e378-45d8-9a53-3d7a0e3c591f","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-04 00:09:50 +0000 UTC FinishedAt: 2026-08-04 00:26:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow687kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d661abdc30c254649c32ef6e0aa1e621e04ff0a7","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_DYNAMIC","OF_OVERLAY","PHYLIB"],"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":["__mdiobus_register","mdiobus_unregister","mdiobus_device_change_begin","mdiobus_device_change_end","mdiobus_registration_done","mdiobus_begin_remove","mdiobus_finish_remove","mdio_device_register","mdio_device_remove","phy_device_register","phy_device_remove","phy_attach_direct","phy_detach","__of_mdiobus_register","mdiobus_scan_c22"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d661abdc30c254649c32ef6e0aa1e621e04ff0a7","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_DYNAMIC","OF_OVERLAY","PHYLIB"],"series_id":"1bd95b7e-e378-45d8-9a53-3d7a0e3c591f","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-04 00:09:50 +0000 UTC FinishedAt: 2026-08-04 00:26:01 +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:*838b967c-fe1b-4860-a0c9-52a0f5befcb7,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-workflow687kr/series-workflow687kr-convert-artifact-972281212/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": "8c26be0b-ccef-47f4-a46b-423e14a8d668", "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-workflow687kr/series-workflow687kr-build-action-3164590250/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow687kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d661abdc30c254649c32ef6e0aa1e621e04ff0a7","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_DYNAMIC","OF_OVERLAY","PHYLIB"],"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":["__mdiobus_register","mdiobus_unregister","mdiobus_device_change_begin","mdiobus_device_change_end","mdiobus_registration_done","mdiobus_begin_remove","mdiobus_finish_remove","mdio_device_register","mdio_device_remove","phy_device_register","phy_device_remove","phy_attach_direct","phy_detach","__of_mdiobus_register","mdiobus_scan_c22"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d661abdc30c254649c32ef6e0aa1e621e04ff0a7","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_DYNAMIC","OF_OVERLAY","PHYLIB"],"series_id":"1bd95b7e-e378-45d8-9a53-3d7a0e3c591f","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-04 00:09:50 +0000 UTC FinishedAt: 2026-08-04 00:25:51 +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:*838b967c-fe1b-4860-a0c9-52a0f5befcb7,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-workflow687kr/series-workflow687kr-convert-artifact-972281212/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": "8c26be0b-ccef-47f4-a46b-423e14a8d668", "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-workflow687kr/series-workflow687kr-build-action-3164590250/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow687kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d661abdc30c254649c32ef6e0aa1e621e04ff0a7","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_DYNAMIC","OF_OVERLAY","PHYLIB"],"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":["__mdiobus_register","mdiobus_unregister","mdiobus_device_change_begin","mdiobus_device_change_end","mdiobus_registration_done","mdiobus_begin_remove","mdiobus_finish_remove","mdio_device_register","mdio_device_remove","phy_device_register","phy_device_remove","phy_attach_direct","phy_detach","__of_mdiobus_register","mdiobus_scan_c22"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d661abdc30c254649c32ef6e0aa1e621e04ff0a7","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_DYNAMIC","OF_OVERLAY","PHYLIB"],"series_id":"1bd95b7e-e378-45d8-9a53-3d7a0e3c591f","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-04 00:26:01 +0000 UTC FinishedAt: 2026-08-04 00:26:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow687kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d661abdc30c254649c32ef6e0aa1e621e04ff0a7","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_DYNAMIC","OF_OVERLAY","PHYLIB"],"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":["__mdiobus_register","mdiobus_unregister","mdiobus_device_change_begin","mdiobus_device_change_end","mdiobus_registration_done","mdiobus_begin_remove","mdiobus_finish_remove","mdio_device_register","mdio_device_remove","phy_device_register","phy_device_remove","phy_attach_direct","phy_detach","__of_mdiobus_register","mdiobus_scan_c22"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d661abdc30c254649c32ef6e0aa1e621e04ff0a7","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_DYNAMIC","OF_OVERLAY","PHYLIB"],"series_id":"1bd95b7e-e378-45d8-9a53-3d7a0e3c591f","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-04 00:26:01 +0000 UTC FinishedAt: 2026-08-04 00:26:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow687kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d661abdc30c254649c32ef6e0aa1e621e04ff0a7","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_DYNAMIC","OF_OVERLAY","PHYLIB"],"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":["__mdiobus_register","mdiobus_unregister","mdiobus_device_change_begin","mdiobus_device_change_end","mdiobus_registration_done","mdiobus_begin_remove","mdiobus_finish_remove","mdio_device_register","mdio_device_remove","phy_device_register","phy_device_remove","phy_attach_direct","phy_detach","__of_mdiobus_register","mdiobus_scan_c22"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d661abdc30c254649c32ef6e0aa1e621e04ff0a7","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_DYNAMIC","OF_OVERLAY","PHYLIB"],"series_id":"1bd95b7e-e378-45d8-9a53-3d7a0e3c591f","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-04 00:26:01 +0000 UTC FinishedAt: 2026-08-04 00:26:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow687kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d661abdc30c254649c32ef6e0aa1e621e04ff0a7","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_DYNAMIC","OF_OVERLAY","PHYLIB"],"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":["__mdiobus_register","mdiobus_unregister","mdiobus_device_change_begin","mdiobus_device_change_end","mdiobus_registration_done","mdiobus_begin_remove","mdiobus_finish_remove","mdio_device_register","mdio_device_remove","phy_device_register","phy_device_remove","phy_attach_direct","phy_detach","__of_mdiobus_register","mdiobus_scan_c22"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d661abdc30c254649c32ef6e0aa1e621e04ff0a7","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_DYNAMIC","OF_OVERLAY","PHYLIB"],"series_id":"1bd95b7e-e378-45d8-9a53-3d7a0e3c591f","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-04 00:26:01 +0000 UTC FinishedAt: 2026-08-04 00:26:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d661abdc30c254649c32ef6e0aa1e621e04ff0a7","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_DYNAMIC","OF_OVERLAY","PHYLIB"],"series_id":"1bd95b7e-e378-45d8-9a53-3d7a0e3c591f","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-workflow687kr/series-workflow687kr-convert-artifact-459866555/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow687kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d661abdc30c254649c32ef6e0aa1e621e04ff0a7","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_DYNAMIC","OF_OVERLAY","PHYLIB"],"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":["__mdiobus_register","mdiobus_unregister","mdiobus_device_change_begin","mdiobus_device_change_end","mdiobus_registration_done","mdiobus_begin_remove","mdiobus_finish_remove","mdio_device_register","mdio_device_remove","phy_device_register","phy_device_remove","phy_attach_direct","phy_detach","__of_mdiobus_register","mdiobus_scan_c22"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d661abdc30c254649c32ef6e0aa1e621e04ff0a7","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_DYNAMIC","OF_OVERLAY","PHYLIB"],"series_id":"1bd95b7e-e378-45d8-9a53-3d7a0e3c591f","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: Running StartedAt: 2026-08-04 00:26:11 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow687kr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d661abdc30c254649c32ef6e0aa1e621e04ff0a7","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_DYNAMIC","OF_OVERLAY","PHYLIB"],"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":["__mdiobus_register","mdiobus_unregister","mdiobus_device_change_begin","mdiobus_device_change_end","mdiobus_registration_done","mdiobus_begin_remove","mdiobus_finish_remove","mdio_device_register","mdio_device_remove","phy_device_register","phy_device_remove","phy_attach_direct","phy_detach","__of_mdiobus_register","mdiobus_scan_c22"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d661abdc30c254649c32ef6e0aa1e621e04ff0a7","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_DYNAMIC","OF_OVERLAY","PHYLIB"],"series_id":"1bd95b7e-e378-45d8-9a53-3d7a0e3c591f","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: Running StartedAt: 2026-08-04 00:26:11 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8c26be0b-ccef-47f4-a46b-423e14a8d668,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-workflow687kr/series-workflow687kr-build-action-3164590250/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil